diff options
-rw-r--r-- | sql/updates/963_world_scripts.sql | 21 | ||||
-rw-r--r-- | sql/updates/CMakeLists.txt | 1 | ||||
-rw-r--r-- | sql/world_scripts_full.sql | 125 | ||||
-rw-r--r-- | src/bindings/scripts/Makefile.am | 1 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp | 12 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp | 4 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp | 275 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp | 663 | ||||
-rw-r--r-- | src/game/Map.cpp | 6 | ||||
-rw-r--r-- | src/game/NPCHandler.cpp | 4 | ||||
-rw-r--r-- | src/game/Player.cpp | 10 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 2 | ||||
-rw-r--r-- | src/game/WorldSession.cpp | 2 |
13 files changed, 948 insertions, 178 deletions
diff --git a/sql/updates/963_world_scripts.sql b/sql/updates/963_world_scripts.sql new file mode 100644 index 00000000000..df886987039 --- /dev/null +++ b/sql/updates/963_world_scripts.sql @@ -0,0 +1,21 @@ +UPDATE creature_template set ScriptName='mob_illidari_spawn' WHERE entry IN (22075,22074,19797); +UPDATE `creature_template` SET `ScriptName`='mob_torloth_the_magnificent' WHERE `entry`='22076'; +UPDATE creature_template SET ScriptName='npc_lord_illidan_stormrage' WHERE entry=22083; +delete from creature where id=22083; +INSERT INTO creature (id, map, spawnMask, modelid, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, spawndist, currentwaypoint, curhealth, curmana, DeathState, MovementType) + VALUES (22083, 530, 1, 0, 0, -4635.75, 1386.32, 137.34, 5.72398, 25,0, 0, 9955, 6774, 0, 0); +update gameobject_template set scriptname='go_crystal_prison' where entry=185126; + +DELETE FROM script_texts WHERE entry BETWEEN -1000374 and -1000366; +INSERT INTO script_texts (entry, content_default, type, comment) VALUES +(-1000366, 'So you have defeated the Crimson Sigil. You now seek to challenge my rule? Not even Arthas could defeat me, yet you dare to even harbor such thoughts? Then I say to you, come! Come $N! The Black Temple awaits...', 1, 'Quest: Battle of the crimson watch - END_TEXT'), + +(-1000367, 'At your command, my liege...', 0, 'TorlothAnim - First'), +(-1000368, 'Destroy them, Torloth. Let lose their blood like a river upon this hallowed ground.', 0, 'Quest: Battle of the crimson watch TorlothAnim - Second'), +(-1000369, 'As you desire, Lord Illidan.', 0, 'Quest: Battle of the crimson watch TorlothAnim - Third'), +(-1000370, 'Yes, Lord Illidan, I would sacrifice to you this magnificent physique. On this day you will fall - another victim of Torloth...', 0, 'Quest: Battle of the crimson watch TorlothAnim - Fourth'), + +(-1000371, 'What manner of fool dares stand before Illidan Stormrage? Soldiers, destroy these insects!', 1, 'Quest: Battle of the crimson watch WavesInfo - First'), +(-1000372, 'You are no challenge for the Crimson Sigil. Mind breakers, end this nonsense.', 1, 'Quest: Battle of the crimson watch WavesInfo - Second'), +(-1000373, 'Run while you still can. The highlords come soon...', 1, 'Quest: Battle of the crimson watch WavesInfo - Third'), +(-1000374, 'Torloth your master calls!', 1, 'Quest: Battle of the crimson watch WavesInfo - Fourth');
\ No newline at end of file diff --git a/sql/updates/CMakeLists.txt b/sql/updates/CMakeLists.txt index 05287e091be..afe3b1bff5d 100644 --- a/sql/updates/CMakeLists.txt +++ b/sql/updates/CMakeLists.txt @@ -157,4 +157,5 @@ INSTALL(FILES 955_world_scripts.sql 956_world_scripts.sql 957_world_scripts.sql +963_world_scripts.sql DESTINATION share/trinity/sql/updates) diff --git a/sql/world_scripts_full.sql b/sql/world_scripts_full.sql index 617e38d8d28..5c302e87b5c 100644 --- a/sql/world_scripts_full.sql +++ b/sql/world_scripts_full.sql @@ -18,6 +18,10 @@ UPDATE `gameobject_template` SET `ScriptName`='go_field_repair_bot_74A' where `e UPDATE `gameobject_template` SET `ScriptName`='go_orb_of_command' WHERE `entry`=179879; UPDATE `gameobject_template` SET `ScriptName`='go_tablet_of_madness' WHERE `entry`=180368; UPDATE `gameobject_template` SET `ScriptName`='go_tablet_of_the_seven' WHERE `entry`=169294; +UPDATE `gameobject_template` set `ScriptName`='go_manticron_cube' where entry = 181713; +UPDATE `gameobject_template` SET `ScriptName`='go_mausoleum_trigger' WHERE `entry` = 104593; +UPDATE `gameobject_template` SET `ScriptName`='go_mausoleum_door' WHERE `entry` = 176594; +UPDATE `gameobject_template` SET `scriptname`='go_crystal_prison' WHERE `entry`=185126; /* GUARD */ UPDATE `creature_template` SET `ScriptName`='guard_azuremyst' WHERE `entry`=18038; @@ -62,6 +66,7 @@ UPDATE `item_template` SET `ScriptName`='item_voodoo_charm' WHERE `entry`=8149; UPDATE `item_template` SET `ScriptName`='item_vorenthals_presence' WHERE `entry`=30259; UPDATE `item_template` SET `ScriptName`='item_yehkinyas_bramble' WHERE `entry`=10699; UPDATE `item_template` SET `ScriptName`='item_zezzaks_shard' WHERE `entry`=31463; +UPDATE `item_template` SET `ScriptName` = "item_only_for_flight" WHERE `entry` IN (34475, 34489, 24538); /* NPC (usually creatures to be found in more than one specific zone) */ UPDATE `creature_template` SET `ScriptName`='npc_chicken_cluck' WHERE `entry`=620; @@ -76,7 +81,11 @@ UPDATE `creature_template` SET `ScriptName`='npc_prof_leather' WHERE `entry` IN UPDATE `creature_template` SET `ScriptName`='npc_prof_tailor' WHERE `entry` IN (22208,22212,22213); UPDATE `creature_template` SET `ScriptName`='npc_rogue_trainer' WHERE `entry` IN (918,4163,3328,4583,5165,5167,13283,16684); UPDATE `creature_template` SET `ScriptName`='npc_sayge' WHERE `entry`=14822; - +UPDATE `creature_template` SET `ScriptName`='npc_steam_tonk' WHERE `entry` = 19405; +UPDATE `creature_template` SET `ScriptName`='npc_tonk_mine' WHERE `entry` = 15368; +UPDATE `creature_template` SET `ScriptName`='npc_winter_reveler' WHERE `entry`=15760; +UPDATE `creature_template` SET `ScriptName`='npc_brewfest_reveler' WHERE `entry`=24484; +UPDATE `creature_template` SET `ScriptName`='npc_snake_trap_serpents' where entry in (19921, 19833); /* */ /* ZONE */ @@ -89,10 +98,13 @@ UPDATE `creature_template` SET `ScriptName`='npc_ravenholdt' WHERE `entry`=13936 /* ARATHI HIGHLANDS */ - +UPDATE `creature_template` SET `ScriptName`='npc_professor_phizzlethorpe' where entry=2768; /* ASHENVALE */ - +UPDATE `creature_template` SET `ScriptName`='mob_rizzle_sprysprocket' WHERE `entry`=23002; +UPDATE `creature_template` SET `ScriptName`='mob_depth_charge' WHERE `entry`=23025; +UPDATE `creature_template` SET `ScriptName`='npc_torek' WHERE `entry`=12858; +UPDATE `creature_template` SET `ScriptName`='npc_ruul_snowhoof' WHERE `entry` = 12818; /* */ /* AUCHINDOUN */ @@ -107,6 +119,8 @@ UPDATE `creature_template` SET `ScriptName`='mob_ethereal_beacon' WHERE `entry`= UPDATE `creature_template` SET `ScriptName`='boss_exarch_maladaar' WHERE `entry`=18373; UPDATE `creature_template` SET `ScriptName`='mob_avatar_of_martyred' WHERE `entry`=18478; UPDATE `creature_template` SET `ScriptName`='mob_stolen_soul' WHERE `entry`=18441; +UPDATE `creature_template` SET `ScriptName`='boss_shirrak_the_dead_watcher' WHERE `entry` = '18371'; +UPDATE `creature_template` SET `ScriptName`='mob_focus_fire' WHERE `entry` = '18374'; /* SETHEKK HALLS */ UPDATE `instance_template` SET `script`='instance_sethekk_halls' WHERE `map`=556; @@ -132,6 +146,9 @@ UPDATE `creature_template` SET `ScriptName`='npc_loramus_thalipedes' WHERE `entr UPDATE `creature_template` SET `ScriptName`='npc_engineer_spark_overgrind' WHERE `entry`=17243; UPDATE `creature_template` SET `ScriptName`='npc_injured_draenei' WHERE `entry`=16971; UPDATE `creature_template` SET `ScriptName`='npc_susurrus' WHERE `entry`=17435; +UPDATE `creature_template` SET `ScriptName`='npc_magwin' WHERE `entry`=17312; +UPDATE `creature_template` SET `ScriptName`='npc_geezle' where entry=17318; +UPDATE `creature_template` SET `ScriptName`='mob_nestlewood_owlkin' where entry=16518; /* BADLANDS */ @@ -140,6 +157,8 @@ UPDATE `creature_template` SET `ScriptName`='npc_susurrus' WHERE `entry`=17435; UPDATE `creature_template` SET `ScriptName`='npc_beaten_corpse' WHERE `entry`=10668; UPDATE `creature_template` SET `ScriptName`='npc_sputtervalve' WHERE `entry`=3442; UPDATE `creature_template` SET `ScriptName`='npc_taskmaster_fizzule' WHERE `entry`=7233; +UPDATE `creature_template` SET `ScriptName`='npc_twiggy_flathead' WHERE `entry` =6248; +UPDATE `creature_template` SET `ScriptName`='npc_wizzlecrank_shredder' where entry=3439; /* BLACK TEMPLE */ UPDATE `instance_template` SET `script`='instance_black_temple' WHERE `map`=564; @@ -203,6 +222,8 @@ UPDATE `creature_template` SET `ScriptName`='boss_vilerel' WHERE `entry`=9036; UPDATE `creature_template` SET `ScriptName`='phalanx' WHERE `entry`=9502; UPDATE `creature_template` SET `ScriptName`='npc_lokhtos_darkbargainer' WHERE `entry`=12944; UPDATE `creature_template` SET `ScriptName`='npc_kharan_mighthammer' WHERE `entry`=9021; +UPDATE `creature_template` SET `ScriptName`='npc_grimstone' WHERE `entry`=10096; +UPDATE `creature_template` SET `ScriptName`='npc_rocknot' WHERE `entry`=9503; /* BLACKROCK SPIRE */ /* BLACKROCK SPIRE Lower bosses */ @@ -274,11 +295,16 @@ UPDATE `creature_template` SET `ScriptName`='npc_brazen' WHERE `entry`=18725; UPDATE `creature_template` SET `ScriptName`='npc_erozion' WHERE `entry`=18723; UPDATE `creature_template` SET `ScriptName`='npc_taretha' WHERE `entry`=18887; UPDATE `creature_template` SET `ScriptName`='npc_thrall_old_hillsbrad' WHERE `entry`=17876; +UPDATE `gameobject_template` SET `ScriptName`='go_barrel_old_hillsbrad' WHERE `entry`=182589; /* THE DARK PORTAL */ +UPDATE `instance_template` SET `script`='instance_dark_portal' WHERE `map`=269; UPDATE `creature_template` SET `ScriptName`='boss_chrono_lord_deja' WHERE `entry`=17879; UPDATE `creature_template` SET `ScriptName`='boss_aeonus' WHERE `entry`=17881; UPDATE `creature_template` SET `ScriptName`='boss_temporus' WHERE `entry`=17880; +UPDATE `creature_template` SET `ScriptName`='npc_medivh_bm' WHERE `entry`=15608; +UPDATE `creature_template` SET `ScriptName`='npc_time_rift' WHERE `entry`=17838; +UPDATE `creature_template` SET `ScriptName`='npc_saat' WHERE `entry`=20201; /* */ @@ -303,6 +329,7 @@ UPDATE `creature_template` SET `ScriptName`='mob_steamrigger_mechanic' WHERE `en /* SERPENTSHRINE CAVERN */ UPDATE `instance_template` SET `script`='instance_serpent_shrine' WHERE `map`=548; UPDATE `creature_template` SET `ScriptName`='boss_hydross_the_unstable' WHERE `entry`=21216; +UPDATE `creature_template` SET `ScriptName`='mob_toxic_sporebat' WHERE entry=22140; /* Leotheras the Blind event */ UPDATE `creature_template` SET `ScriptName`='boss_leotheras_the_blind' WHERE `entry`=21215; UPDATE `creature_template` SET `ScriptName`='boss_leotheras_the_blind_demonform' WHERE `entry`=21845; @@ -314,6 +341,10 @@ UPDATE `creature_template` SET `ScriptName`='boss_fathomguard_caribdis' WHERE `e /* Morogrim Tidewalker event */ UPDATE `creature_template` SET `ScriptName`='boss_morogrim_tidewalker' WHERE `entry`=21213; UPDATE `creature_template` SET `ScriptName`='mob_water_globule' WHERE `entry`=21913; +/* The Lurker Below */ +UPDATE `creature_template` SET `ScriptName`='boss_the_lurker_below' WHERE `entry` = '21217'; +UPDATE `creature_template` SET `ScriptName`='mob_coilfang_ambusher' WHERE `entry` = '21865'; +UPDATE `creature_template` SET `ScriptName`='mob_coilfang_guardian' WHERE `entry` = '21873'; /* Lady Vashj event */ UPDATE `creature_template` SET `ScriptName`='boss_lady_vashj' WHERE `entry`=21212; UPDATE `creature_template` SET `ScriptName`='mob_enchanted_elemental' WHERE `entry`=21958; @@ -328,7 +359,11 @@ UPDATE `creature_template` SET `ScriptName`='mob_shield_generator_channel' WHERE /* DEADMINES */ - +UPDATE `instance_template` SET `script`='instance_deadmines' WHERE `map`=36; +UPDATE `item_template` SET `ScriptName`='item_defias_gunpowder' WHERE `entry`=5397; +UPDATE `gameobject_template` SET `ScriptName`='go_defias_cannon' WHERE `entry`=16398; +UPDATE `gameobject_template` SET `ScriptName`='go_door_lever_dm' WHERE `entry`=101833; +UPDATE `gameobject_template` SET `ScriptName`='go_main_chambers_access_panel' WHERE `entry` IN (184125,184126); /* DEADWIND PASS */ @@ -368,6 +403,11 @@ UPDATE `creature_template` SET `ScriptName`='npc_henze_faulk' WHERE `entry`=6172 /* EVERSONG WOODS */ UPDATE `creature_template` SET `ScriptName`='mobs_mana_tapped' WHERE `entry` IN (15273,15274,15294,15298,15367); UPDATE `creature_template` SET `ScriptName`='npc_prospector_anvilward' WHERE `entry`=15420; +UPDATE `creature_template` SET `ScriptName`='npc_second_trial_paladin' WHERE `entry` IN (17809,17810,17811,17812); +UPDATE `creature_template` SET `ScriptName`='npc_second_trial_controller' WHERE `entry` IN (17807); +UPDATE `creature_template` SET `ScriptName`='npc_apprentice_mirveda' where entry=15402; +UPDATE `creature_template` SET `ScriptName`='npc_infused_crystal' where entry=16364; +UPDATE `gameobject_template` SET `ScriptName`='go_second_trial' WHERE `entry` IN (182052); /* FELWOOD */ UPDATE `creature_template` SET `ScriptName`='npcs_riverbreeze_and_silversky' WHERE `entry` IN (9528,9529); @@ -380,6 +420,8 @@ UPDATE `creature_template` SET `ScriptName`='npc_screecher_spirit' WHERE `entry` UPDATE `creature_template` SET `ScriptName`='npc_blood_knight_dawnstar' WHERE `entry`=17832; UPDATE `creature_template` SET `ScriptName`='npc_budd_nedreck' WHERE `entry`=23559; UPDATE `creature_template` SET `ScriptName`='npc_rathis_tomber' WHERE `entry`=16224; +UPDATE `creature_template` SET `Scriptname`='npc_ranger_lilatha' WHERE entry=16295; +update `gameobject_template` SET `ScriptName`='go_gilded_brazier' where entry = 181956; /* GNOMEREGAN */ @@ -400,6 +442,7 @@ UPDATE `creature_template` SET `ScriptName`='boss_krosh_firehand' WHERE `entry`= /* BLOOD FURNACE */ /* The Maker,Broggok,Kelidan,Broggok's cloud */ +UPDATE `instance_template` SET `script` = 'instance_blood_furnace' WHERE `map` = '542'; UPDATE `creature_template` SET `ScriptName`='boss_the_maker' WHERE `entry`=17381; UPDATE `creature_template` SET `ScriptName`='boss_broggok' WHERE `entry`=17380; UPDATE `creature_template` SET `ScriptName`='boss_kelidan_the_breaker' WHERE `entry`=17377; @@ -410,10 +453,15 @@ UPDATE `creature_template` SET `ScriptName`='mob_shadowmoon_channeler' WHERE `en /* Vazruden,Omor the Unscarred,Watchkeeper Gargolmar */ UPDATE `creature_template` SET `ScriptName`='boss_omor_the_unscarred' WHERE `entry`=17308; UPDATE `creature_template` SET `ScriptName`='boss_watchkeeper_gargolmar' WHERE `entry`=17306; - +UPDATE `creature_template` SET `ScriptName`='boss_vazruden_the_herald' WHERE `entry` = '17307'; +UPDATE `creature_template` SET `ScriptName`='boss_vazruden' WHERE `entry` = '17537'; +UPDATE `creature_template` SET `ScriptName`='boss_nazan' WHERE `entry` = '17536'; +UPDATE `creature_template` SET `ScriptName`='mob_hellfire_sentry' WHERE `entry` = '17517'; + /* SHATTERED HALLS */ /* Nethekurse and his spawned shadowfissure */ UPDATE `creature_template` SET `ScriptName`='boss_grand_warlock_nethekurse' WHERE `entry`=16807; +UPDATE `creature_template` SET `ScriptName`='boss_warchief_kargath_bladefist' WHERE `entry`=16808; UPDATE `creature_template` SET `ScriptName`='boss_warbringer_omrogg' WHERE `entry`=16809; UPDATE `creature_template` SET `ScriptName`='mob_fel_orc_convert' WHERE `entry`=17083; UPDATE `creature_template` SET `ScriptName`='mob_lesser_shadow_fissure' WHERE `entry`=17471; @@ -425,12 +473,14 @@ UPDATE `instance_template` SET `script`='instance_magtheridons_lair' WHERE `map` UPDATE `gameobject_template` SET `ScriptName`='go_manticron_cube' WHERE `entry`=181713; UPDATE `creature_template` SET `ScriptName`='boss_magtheridon' WHERE `entry` =17257; UPDATE `creature_template` SET `ScriptName`='mob_hellfire_channeler' WHERE `entry`=17256; +update `creature_template` SET `ScriptName`='mob_abyssal' where entry = 17454; /* HELLFIRE PENINSULA */ UPDATE `creature_template` SET `ScriptName`='boss_doomlord_kazzak' WHERE `entry`=18728; UPDATE `creature_template` SET `ScriptName`='npc_wing_commander_brack' WHERE `entry`=19401; UPDATE `creature_template` SET `ScriptName`='npc_wing_commander_dabiree' WHERE `entry`=19409; UPDATE `creature_template` SET `ScriptName`='npc_gryphoneer_windbellow' WHERE `entry`=20235; +UPDATE `creature_template` SET `ScriptName`='npc_wounded_blood_elf' WHERE `entry`=16993; /* HILLSBRAD FOOTHILLS */ @@ -445,6 +495,8 @@ UPDATE `creature_template` SET `ScriptName`='npc_royal_historian_archesonus' WHE UPDATE `creature_template` SET `ScriptName`='npc_ayren_cloudbreaker' WHERE `entry`=25059; UPDATE `creature_template` SET `ScriptName`='npc_converted_sentry' WHERE `entry`=24981; UPDATE `creature_template` SET `ScriptName`='npc_unrestrained_dragonhawk' WHERE `entry`=25236; +UPDATE `creature_template` SET `ScriptName`='npc_greengill_slave' where entry=25084; +UPDATE `item_template` SET `ScriptName`='item_arcane_charges' WHERE `entry`=34475; /* KARAZHAN */ UPDATE `instance_template` SET `script`='instance_karazhan' WHERE `map`=532; @@ -484,7 +536,7 @@ UPDATE `creature_template` SET `ScriptName`='netherspite_infernal' WHERE `entry` UPDATE `creature_template` SET `ScriptName`='npc_berthold' WHERE `entry`=16153; UPDATE `creature_template` SET `ScriptName`='npc_barnes' WHERE `entry`=16812; UPDATE `creature_template` SET `ScriptName`='npc_grandmother' WHERE `entry`=17603; - +UPDATE `creature_template` SET `ScriptName`='npc_image_of_medivh' where entry = 17651; /* LOCH MODAN */ UPDATE `creature_template` SET `ScriptName`='npc_mountaineer_pebblebitty' WHERE `entry`=3836; @@ -538,9 +590,12 @@ UPDATE `creature_template` SET `ScriptName`='mob_flamewaker_priest' WHERE `entry UPDATE `creature_template` SET `ScriptName`='npc_bunthen_plainswind' WHERE `entry`=11798; UPDATE `creature_template` SET `ScriptName`='npc_great_bear_spirit' WHERE `entry`=11956; UPDATE `creature_template` SET `ScriptName`='npc_silva_filnaveth' WHERE `entry`=11800; +UPDATE `creature_template` SET `ScriptName`='npc_clintar_dreamwalker' WHERE `entry`=22834; +UPDATE `creature_template` SET `ScriptName`='npc_clintar_spirit' WHERE `entry` = 22916; /* MULGORE */ UPDATE `creature_template` SET `ScriptName`='npc_skorn_whitecloud' WHERE `entry`=3052; +UPDATE `creature_template` SET `ScriptName`='npc_kyle_frenzied' where `entry`='23616'; /* NAGRAND */ UPDATE `creature_template` SET `ScriptName`='mob_lump' WHERE `entry`=18351; @@ -550,6 +605,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_altruis_the_sufferer' WHERE `en UPDATE `creature_template` SET `ScriptName`='npc_greatmother_geyah' WHERE `entry`=18141; UPDATE `creature_template` SET `ScriptName`='npc_lantresor_of_the_blade' WHERE `entry`=18261; UPDATE `creature_template` SET `ScriptName`='npc_creditmarker_visit_with_ancestors' WHERE `entry` IN (18840,18841,18842,18843); +UPDATE `creature_template` SET `ScriptName`='mob_sparrowhawk' WHERE `entry`=22979; /* NAXXRAMAS */ UPDATE `instance_template` SET `script`='instance_naxxramas' WHERE `map`=533; @@ -579,6 +635,9 @@ UPDATE `gameobject_template` SET `ScriptName`='go_manaforge_control_console' WHE UPDATE `creature_template` SET `ScriptName`='npc_manaforge_control_console' WHERE `entry` IN (20209,20417,20418,20440); UPDATE `creature_template` SET `ScriptName`='npc_protectorate_nether_drake' WHERE `entry`=20903; UPDATE `creature_template` SET `ScriptName`='npc_veronia' WHERE `entry`=20162; +UPDATE `creature_template` SET `ScriptName`='mob_phase_hunter' WHERE `entry` =18879; +UPDATE `creature_template` SET `ScriptName`='npc_professor_dabiri' where entry=20907; +UPDATE `creature_template` SET `ScriptName`='npc_bessy' WHERE entry = 20415; /* ONYXIA'S LAIR */ UPDATE `creature_template` SET `ScriptName`='boss_onyxia' WHERE `entry`=10184; @@ -594,6 +653,8 @@ UPDATE `creature_template` SET `ScriptName`='npc_thrall_warchief' WHERE `entry`= /* RAZORFEN DOWNS */ UPDATE `creature_template` SET `ScriptName`='boss_amnennar_the_coldbringer' WHERE `entry`=7358; +/* RAZORFEN KRAUL */ +UPDATE `creature_template` SET `Scriptname`='npc_willix' WHERE entry=4508; /* REDRIDGE MOUNTAINS */ @@ -601,6 +662,7 @@ UPDATE `creature_template` SET `ScriptName`='boss_amnennar_the_coldbringer' WHER UPDATE `instance_template` SET `script`='instance_ruins_of_ahnqiraj' WHERE `map`=509; /* SCARLET MONASTERY */ +UPDATE `instance_template` SET `script`='instance_scarlet_monastery' WHERE `map`=189; UPDATE `creature_template` SET `ScriptName`='boss_arcanist_doan' WHERE `entry`=6487; UPDATE `creature_template` SET `ScriptName`='boss_azshir_the_sleepless' WHERE `entry`=6490; UPDATE `creature_template` SET `ScriptName`='boss_bloodmage_thalnos' WHERE `entry`=4543; @@ -611,6 +673,13 @@ UPDATE `creature_template` SET `ScriptName`='boss_houndmaster_loksey' WHERE `ent UPDATE `creature_template` SET `ScriptName`='boss_interrogator_vishas' WHERE `entry`=3983; UPDATE `creature_template` SET `ScriptName`='boss_scarlet_commander_mograine' WHERE `entry`=3976; UPDATE `creature_template` SET `ScriptName`='boss_scorn' WHERE `entry`=14693; +UPDATE `creature_template` SET `ScriptName`='boss_headless_horseman' WHERE `entry` = 23682; +UPDATE `creature_template` SET `ScriptName`='mob_head' WHERE `entry` = 23775; +UPDATE `creature_template` SET `ScriptName`='mob_pulsing_pumpkin' WHERE `entry` = 23694; +UPDATE `creature_template` SET `ScriptName`='mob_wisp_invis' WHERE `entry`=23686; +UPDATE `creature_template` SET `ScriptName`='mob_wisp_invis' WHERE `entry`=24034; +UPDATE `creature_template` SET `ScriptName`='mob_scarlet_trainee' WHERE `entry`=6575; +UPDATE `gameobject_template` SET `ScriptName`='go_loosely_turned_soil' WHERE `entry`=186314; /* SCHOLOMANCE */ UPDATE `instance_template` SET `script`='instance_scholomance' WHERE `map`=289; @@ -647,26 +716,40 @@ UPDATE `creature_template` SET `ScriptName`='npc_neltharaku' WHERE `entry`=21657 UPDATE `creature_template` SET `ScriptName`='npc_oronok_tornheart' WHERE `entry`=21183; UPDATE `creature_template` SET `ScriptName`='mob_mature_netherwing_drake' WHERE `entry`=21648; UPDATE `creature_template` SET `ScriptName`='mob_enslaved_netherwing_drake' WHERE `entry`=21722; +UPDATE `creature_template` SET `ScriptName`='npc_overlord_morghor' WHERE entry= 23139; +UPDATE `creature_template` SET `ScriptName`='' WHERE entry=23141; +UPDATE `creature_template` SET `ScriptName`='mob_illidari_spawn' WHERE `entry` IN (22075, 22074, 19797); +UPDATE `creature_template` SET `ScriptName`='mob_torloth_the_magnificent' WHERE `entry`='22076'; +UPDATE `creature_template SET `ScriptName`='npc_lord_illidan_stormrage' WHERE `entry`=22083; +UPDATE `creature_template` SET `ScriptName`='npc_earthmender_wilda' WHERE `entry`=21027; /* SHATTRATH */ UPDATE `creature_template` SET `ScriptName`='npc_raliq_the_drunk' WHERE `entry`=18585; UPDATE `creature_template` SET `ScriptName`='npc_salsalabim' WHERE `entry`=18584; UPDATE `creature_template` SET `ScriptName`='npc_shattrathflaskvendors' WHERE `entry` IN (23483,23484); UPDATE `creature_template` SET `ScriptName`='npc_zephyr' WHERE `entry`=25967; +UPDATE `creature_template` SET `ScriptName`='npc_kservant' WHERE `entry` = 19685; +UPDATE `creature_template` SET `ScriptName`='npc_dirty_larry' where entry=19720; +UPDATE `creature_template` SET `ScriptName`='npc_ishanah' WHERE `entry`=18538; +UPDATE `creature_template` SET `ScriptName`='npc_khadgar' where entry=18166; /* SILITHUS */ UPDATE `creature_template` SET `ScriptName`='npcs_rutgar_and_frankal' WHERE `entry` IN (15170,15171); +UPDATE `creature_template` SET `ScriptName`='npc_highlord_demitrian' WHERE `entry`=14347; +UPDATE `gameobject_template` SET `ScriptName`='go_gauntlet_gate' WHERE `entry`=175357; /* SILVERMOON */ UPDATE `creature_template` SET `ScriptName`='npc_blood_knight_stillblade' WHERE `entry`=17768; /* SILVERPINE FOREST */ UPDATE `creature_template` SET `ScriptName`='npc_astor_hadren' WHERE `entry`=6497; +UPDATE `creature_template` SET `ScriptName`='npc_deathstalker_erland' where entry=1978; /* STOCKADES */ /* STONETALON MOUNTAINS */ UPDATE `creature_template` SET `ScriptName`='npc_braug_dimspirit' WHERE `entry`=4489; +UPDATE `creature_template` SET `ScriptName`='npc_kaya_flathoof' where entry=11856; /* STORMWIND CITY */ UPDATE `creature_template` SET `ScriptName`='npc_archmage_malin' WHERE `entry`=2708; @@ -699,6 +782,15 @@ UPDATE `creature_template` SET `ScriptName`='mob_freed_soul' WHERE `entry`=11136 /* SUNKEN TEMPLE */ +/* SUNWELL PLATEAU */ +update `instance_template` set `script` = 'instance_sunwell_plateau' where map = 580; +UPDATE `creature_template` SET `ScriptName` = 'boss_brutallus' WHERE entry = 24882; +UPDATE `creature_template` SET `ScriptName` = 'boss_felmyst' WHERE `entry` = 25038; +UPDATE `creature_template` SET `ScriptName` = 'mob_felmyst_vapor' WHERE `entry` = 25265; +UPDATE `creature_template` SET `ScriptName` = 'mob_felmyst_trail' WHERE `entry` = 25267; +update `creature_template` set `ScriptName` = 'boss_sacrolash' where entry = 25165; +update `creature_template` set `ScriptName` = 'boss_alythess' where entry = 25166; +update `creature_template` set `ScriptName` = 'mob_shadow_image' where entry = 25214; /* SWAMP OF SORROWS */ @@ -709,6 +801,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_custodian_of_time' WHERE `entry UPDATE `creature_template` SET `ScriptName`='npc_marin_noggenfogger' WHERE `entry`=7564; UPDATE `creature_template` SET `ScriptName`='npc_steward_of_time' WHERE `entry`=20142; UPDATE `creature_template` SET `ScriptName`='npc_stone_watcher_of_norgannon' WHERE `entry`=7918; +UPDATE `creature_template` SET `ScriptName` = 'npc_OOX17' WHERE `entry` = 7784; /* TELDRASSIL */ @@ -741,6 +834,8 @@ UPDATE `creature_template` SET `ScriptName`='npc_millhouse_manastorm' WHERE `ent /* THE EYE */ UPDATE `instance_template` SET `script`='instance_the_eye' WHERE `map`=550; +UPDATE `gameobject_template` SET `ScriptName` = 'go_kael_orb' WHERE `entry` = 188173; +UPDATE `gameobject_template` SET `ScriptName` = 'go_movie_orb' WHERE `entry` = 187578; /* The Eye Trash Mobs */ UPDATE `creature_template` SET `ScriptName`='mob_crystalcore_devastator' WHERE `entry`=20040; /* Void Reaver event */ @@ -754,9 +849,13 @@ UPDATE `creature_template` SET `ScriptName`='boss_thaladred_the_darkener' WHERE UPDATE `creature_template` SET `ScriptName`='boss_lord_sanguinar' WHERE `entry`=20060; UPDATE `creature_template` SET `ScriptName`='boss_grand_astromancer_capernian' WHERE `entry`=20062; UPDATE `creature_template` SET `ScriptName`='boss_master_engineer_telonicus' WHERE `entry`=20063; -UPDATE `creature_template` SET `ScriptName`='mob_phoenix' WHERE `entry`=21362; +UPDATE `creature_template` SET `ScriptName`='mob_phoenix_tk' WHERE `entry`=21362; +UPDATE `creature_template` SET `ScriptName`='mob_phoenix_egg_tk' WHERE `entry`=21364; UPDATE `creature_template` SET `ScriptName`='mob_nether_vapor' WHERE `entry`=21002; UPDATE `creature_template` SET `ScriptName`='mob_kael_flamestrike' WHERE `entry`=21369; +update `creature_template` set `ScriptName`='boss_alar' where `entry`=19514; +update `creature_template` set `ScriptName`='mob_ember_of_alar' where `entry`=19551; +update `creature_template` set `ScriptName`='mob_flame_patch_alar' where `entry`=20602; /* TEMPLE OF AHN'QIRAJ */ UPDATE `instance_template` SET `script`='instance_temple_of_ahnqiraj' WHERE `map`=531; @@ -789,9 +888,10 @@ UPDATE `creature_template` SET `ScriptName`='mob_netherweb_victim' WHERE `entry` UPDATE `creature_template` SET `ScriptName`='mob_rotting_forest_rager' WHERE `entry`=22307; UPDATE `creature_template` SET `ScriptName`='npc_floon' WHERE `entry`=18588; UPDATE `creature_template` SET `ScriptName`='npc_skyguard_handler_irena' WHERE `entry`=23413; +UPDATE `creature_template` SET `ScriptName`='npc_isla_starmane' where entry=18760; /* THOUSAND NEEDLES */ - +UPDATE `creature_template` SET `ScriptName` = 'npc_swiftmountain' WHERE `entry` = 10427; /* THUNDER BLUFF */ UPDATE `creature_template` SET `ScriptName`='npc_cairne_bloodhoof' WHERE `entry`=3057; @@ -800,12 +900,18 @@ UPDATE `creature_template` SET `ScriptName`='npc_cairne_bloodhoof' WHERE `entry` UPDATE `creature_template` SET `ScriptName`='npc_calvin_montague' WHERE `entry`=6784; /* ULDAMAN */ +UPDATE `instance_template` SET `script`='instance_uldaman' WHERE `map`=70; UPDATE `creature_template` SET `ScriptName`='boss_ironaya' WHERE `entry`=7228; UPDATE `creature_template` SET `ScriptName`='mob_jadespine_basilisk' WHERE `entry`=4863; UPDATE `creature_template` SET `ScriptName`='npc_lore_keeper_of_norgannon' WHERE `entry`=7172; +UPDATE `creature_template` SET `ScriptName`='boss_archaedas' WHERE `entry`=2748; +UPDATE `creature_template` SET `ScriptName`='mob_archaedas_minions' WHERE `entry` IN ('7309', '7077', '7076', '10120'); +UPDATE `creature_template` SET `ScriptName`='mob_stonekeepers' WHERE `entry`=4857; +UPDATE `gameobject_template` SET `ScriptName`='go_altar_of_the_keepers' WHERE `entry`=130511; +UPDATE `gameobject_template` SET `ScriptName`='go_altar_of_archaedas' WHERE `entry`=133234; /* UN'GORO CRATER */ - +UPDATE `creature_template` SET `ScriptName` = 'npc_ame' WHERE `entry` = 9623; /* UNDERCITY */ UPDATE `creature_template` SET `ScriptName`='npc_lady_sylvanas_windrunner' WHERE `entry`=10181; @@ -835,6 +941,7 @@ UPDATE `creature_template` SET `ScriptName`='npcs_ashyen_and_keleth' WHERE `entr UPDATE `creature_template` SET `ScriptName`='npc_cooshcoosh' WHERE `entry`=18586; UPDATE `creature_template` SET `ScriptName`='npc_elder_kuruti' WHERE `entry`=18197; UPDATE `creature_template` SET `ScriptName`='npc_mortog_steamhead' WHERE `entry`=23373; +UPDATE `creature_template` SET `ScriptName`='npc_kayra_longmane' where entry=17969; /* ZUL'AMAN */ UPDATE `instance_template` SET `script`='instance_zulaman' WHERE `map`=568; diff --git a/src/bindings/scripts/Makefile.am b/src/bindings/scripts/Makefile.am index 564fa1c16b2..ac5965336a6 100644 --- a/src/bindings/scripts/Makefile.am +++ b/src/bindings/scripts/Makefile.am @@ -195,6 +195,7 @@ scripts/zone/hellfire_citadel/blood_furnace/instance_blood_furnace.cpp \ scripts/zone/hellfire_citadel/blood_furnace/def_blood_furnace.h \ scripts/zone/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp \ scripts/zone/hellfire_citadel/hellfire_ramparts/boss_watchkeeper_gargolmar.cpp \ +scripts/zone/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp \ scripts/zone/hellfire_citadel/magtheridons_lair/boss_magtheridon.cpp \ scripts/zone/hellfire_citadel/magtheridons_lair/def_magtheridons_lair.h \ scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp \ diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp index de45a54e043..cbd8df9e649 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp @@ -189,19 +189,17 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance { switch( type ) { - case TYPE_HELLMAW: - return Encounter[0]; - case TYPE_OVERSEER: - return Encounter[1]; - case DATA_GRANDMASTERVORPILEVENT: - return Encounter[3]; + case TYPE_HELLMAW: return Encounter[0]; + case TYPE_OVERSEER: return Encounter[1]; + case DATA_GRANDMASTERVORPILEVENT: return Encounter[3]; + case DATA_MURMUREVENT: return Encounter[4]; } return false; } uint64 GetData64(uint32 identifier) { - if(identifier == DATA_GRANDMASTERVORPIL) + if(identifier == DATA_GRANDMASTERVORPIL) return GrandmasterVorpil; return 0; diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp index ea7fc3cbd1e..d380131d18c 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp @@ -77,9 +77,9 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI if(m_creature->isAlive()) { pInstance->SetData(DATA_SUPREMUSEVENT, NOT_STARTED); - ToggleDoors(true); + //ToggleDoors(true); } - else ToggleDoors(false); + //else ToggleDoors(false); } HatefulStrikeTimer = 5000; diff --git a/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp b/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp index 30a74c2da15..2f1a456fb35 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp @@ -55,8 +55,6 @@ struct TRINITY_DLL_DECL instance_black_temple : public ScriptedInstance uint64 BloodElfCouncilVoice; uint64 IllidanStormrage; - uint16 BossKilled; - uint64 NajentusGate; uint64 MainTempleDoors; uint64 ShadeOfAkamaDoor; @@ -71,6 +69,7 @@ struct TRINITY_DLL_DECL instance_black_temple : public ScriptedInstance uint64 IllidanDoor[2]; uint32 Encounters[ENCOUNTERS]; + std::string str_data; void Initialize() { @@ -87,8 +86,6 @@ struct TRINITY_DLL_DECL instance_black_temple : public ScriptedInstance BloodElfCouncilVoice = 0; IllidanStormrage = 0; - BossKilled = 0; - NajentusGate = 0; MainTempleDoors = 0; ShadeOfAkamaDoor= 0; @@ -103,29 +100,48 @@ struct TRINITY_DLL_DECL instance_black_temple : public ScriptedInstance IllidanDoor[0] = 0; IllidanDoor[1] = 0; - for(uint8 i = 0; i < ENCOUNTERS; i++) + for(uint8 i = 0; i < ENCOUNTERS; ++i) Encounters[i] = NOT_STARTED; } bool IsEncounterInProgress() const { - for(uint8 i = 0; i < ENCOUNTERS; i++) + for(uint8 i = 0; i < ENCOUNTERS; ++i) if(Encounters[i] == IN_PROGRESS) return true; return false; } - void OpenDoor(uint64 DoorGUID, bool open) - { - if(GameObject *Door = instance->GetGameObjectInMap(DoorGUID)) - Door->SetGoState(open ? 0 : 1); - } - - void CloseDoor(uint64 DoorGUID, bool close) - { - if(GameObject *Door = instance->GetGameObjectInMap(DoorGUID)) - Door->SetGoState(close ? 1 : 0); - } + Player* GetPlayerInMap() + { + Map::PlayerList const& players = instance->GetPlayers(); + + if (!players.isEmpty()) + { + for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + { + if (Player* plr = itr->getSource()) + return plr; + } + } + + debug_log("TSCR: Instance Black Temple: GetPlayerInMap, but PlayerList is empty!"); + return NULL; + } + + void HandleGameObject(uint64 guid, uint32 state) + { + Player *player = GetPlayerInMap(); + + if (!player || !guid) + { + debug_log("TSCR: Black Temple: HandleGameObject fail"); + return; + } + + if (GameObject *go = GameObject::GetGameObject(*player,guid)) + go->SetGoState(state); + } void OnCreatureCreate(Creature *creature, uint32 creature_entry) { @@ -150,38 +166,19 @@ struct TRINITY_DLL_DECL instance_black_temple : public ScriptedInstance { switch(go->GetEntry()) { - case 185483: // Gate past Naj'entus (at the entrance to Supermoose's courtyards) - NajentusGate = go->GetGUID();break; - case 185882: // Main Temple Doors - right past Supermoose (Supremus) - MainTempleDoors = go->GetGUID();break; - case 185478: - ShadeOfAkamaDoor = go->GetGUID();break; - case 185480: - CommonDoor = go->GetGUID();break; - case 186153: - TeronDoor = go->GetGUID();break; - case 185892: - GuurtogDoor = go->GetGUID();break; - case 185479: - TempleDoor = go->GetGUID();break; - case 185482: - MotherDoor = go->GetGUID();break; - case 185481: - CouncilDoor = go->GetGUID();break; - case 186152://used by council - SimpleDoor = go->GetGUID();break; - case 185905: // Gate leading to Temple Summit - IllidanGate = go->GetGUID(); - go->SetUInt32Value(GAMEOBJECT_FLAGS,GO_FLAG_NODESPAWN+GO_FLAG_INTERACT_COND); - break; - case 186261: // Right door at Temple Summit - IllidanDoor[0] = go->GetGUID(); - go->SetUInt32Value(GAMEOBJECT_FLAGS,GO_FLAG_NODESPAWN+GO_FLAG_INTERACT_COND); - break; - case 186262: // Left door at Temple Summit - IllidanDoor[1] = go->GetGUID(); - go->SetUInt32Value(GAMEOBJECT_FLAGS,GO_FLAG_NODESPAWN+GO_FLAG_INTERACT_COND); - break; + case 185483: NajentusGate = go->GetGUID();break; // Gate past Naj'entus (at the entrance to Supermoose's courtyards) + case 185882: MainTempleDoors = go->GetGUID();break; // Main Temple Doors - right past Supermoose (Supremus) + case 185478: ShadeOfAkamaDoor = go->GetGUID();break; + case 185480: CommonDoor = go->GetGUID();break; + case 186153: TeronDoor = go->GetGUID();break; + case 185892: GuurtogDoor = go->GetGUID();break; + case 185479: TempleDoor = go->GetGUID();break; + case 185482: MotherDoor = go->GetGUID();break; + case 185481: CouncilDoor = go->GetGUID();break; + case 186152: SimpleDoor = go->GetGUID();break; + case 185905: IllidanGate = go->GetGUID(); break; // Gate leading to Temple Summit + case 186261: IllidanDoor[0] = go->GetGUID(); break; // Right door at Temple Summit + case 186262: IllidanDoor[1] = go->GetGUID(); break; // Left door at Temple Summit } } @@ -215,54 +212,82 @@ struct TRINITY_DLL_DECL instance_black_temple : public ScriptedInstance { switch(type) { - case DATA_HIGHWARLORDNAJENTUSEVENT: Encounters[0] = data; break; - case DATA_SUPREMUSEVENT: Encounters[1] = data; break; - case DATA_SHADEOFAKAMAEVENT: Encounters[2] = data; break; - case DATA_TERONGOREFIENDEVENT: Encounters[3] = data; break; - case DATA_GURTOGGBLOODBOILEVENT: Encounters[4] = data; break; - case DATA_RELIQUARYOFSOULSEVENT: Encounters[5] = data; break; - case DATA_MOTHERSHAHRAZEVENT: Encounters[6] = data; break; - case DATA_ILLIDARICOUNCILEVENT: Encounters[7] = data; break; + case DATA_HIGHWARLORDNAJENTUSEVENT: + if(data == DONE) + { + HandleGameObject(NajentusGate, 0); + } + Encounters[0] = data;break; + case DATA_SUPREMUSEVENT: + if(data == DONE) + { + HandleGameObject(NajentusGate, 0); + } + Encounters[1] = data; break; + case DATA_SHADEOFAKAMAEVENT: + if(data == IN_PROGRESS) + { + HandleGameObject(ShadeOfAkamaDoor, 1); + }else HandleGameObject(ShadeOfAkamaDoor, 0); + Encounters[2] = data; break; + case DATA_TERONGOREFIENDEVENT: + if(data == IN_PROGRESS) + { + HandleGameObject(TeronDoor, 1); + HandleGameObject(CommonDoor, 1); + }else + { + HandleGameObject(TeronDoor, 0); + HandleGameObject(CommonDoor, 0); + } + Encounters[3] = data; break; + case DATA_GURTOGGBLOODBOILEVENT: + if(data == DONE) + { + HandleGameObject(GuurtogDoor, 0); + } + Encounters[4] = data; break; + case DATA_RELIQUARYOFSOULSEVENT: + if(data == DONE) + { + HandleGameObject(TempleDoor, 0); + } + Encounters[5] = data; break; + case DATA_MOTHERSHAHRAZEVENT: + if(data == DONE) + { + HandleGameObject(MotherDoor, 0); + } + Encounters[6] = data; break; + case DATA_ILLIDARICOUNCILEVENT: + if(data == IN_PROGRESS) + { + HandleGameObject(CouncilDoor, 1); + HandleGameObject(SimpleDoor, 1); + }else + { + HandleGameObject(CouncilDoor, 0); + HandleGameObject(SimpleDoor, 0); + } + Encounters[7] = data; break; case DATA_ILLIDANSTORMRAGEEVENT: Encounters[8] = data; break; } - if(data == DONE) - { - SaveToDB(); - BossKilled++; - } - CheckInstanceStatus(); - } - - void CheckInstanceStatus() - { - if(BossKilled >= 6) - OpenDoor(TempleDoor, true); - if(Encounters[0] == DONE) - OpenDoor(NajentusGate, true); - if(Encounters[2] == IN_PROGRESS) - CloseDoor(ShadeOfAkamaDoor, true); - else OpenDoor(ShadeOfAkamaDoor, true); - if(Encounters[3] == IN_PROGRESS) - { - CloseDoor(TeronDoor, true); - CloseDoor(CommonDoor, true); - }else{ - OpenDoor(TeronDoor, true); - OpenDoor(CommonDoor, true); - } - if(Encounters[4] == DONE) - OpenDoor(GuurtogDoor, true); - if(Encounters[6] == DONE) - OpenDoor(MotherDoor, true); - if(Encounters[7] == IN_PROGRESS) - { - CloseDoor(CouncilDoor, true); - CloseDoor(SimpleDoor, true); - }else{ - OpenDoor(CouncilDoor, true); - OpenDoor(SimpleDoor, true); - } + if (data == DONE) + { + OUT_SAVE_INST_DATA; + + std::ostringstream saveStream; + saveStream << Encounters[0] << " " << Encounters[1] << " " + << Encounters[2] << " " << Encounters[3] << " " << Encounters[4] + << " " << Encounters[5] << " " << Encounters[6] << " " << Encounters[7] + << " " << Encounters[8]; + + str_data = saveStream.str(); + + SaveToDB(); + OUT_SAVE_INST_DATA_COMPLETE; + } } uint32 GetData(uint32 type) @@ -283,42 +308,32 @@ struct TRINITY_DLL_DECL instance_black_temple : public ScriptedInstance return 0; } - const char* Save() - { - OUT_SAVE_INST_DATA; - std::ostringstream stream; - stream << Encounters[0] << " " << Encounters[1] << " " << Encounters[2] << " " - << Encounters[3] << " " << Encounters[4] << " " << Encounters[5] << " " - << Encounters[6] << " " << Encounters[7] << " " << Encounters[8]; - char* out = new char[stream.str().length() + 1]; - strcpy(out, stream.str().c_str()); - if(out) - { - OUT_SAVE_INST_DATA_COMPLETE; - return out; - } - - return NULL; - } - - void Load(const char* in) - { - if(!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - std::istringstream stream(in); - stream >> Encounters[0] >> Encounters[1] >> Encounters[2] >> Encounters[3] - >> Encounters[4] >> Encounters[5] >> Encounters[6] >> Encounters[7] - >> Encounters[8]; - for(uint8 i = 0; i < ENCOUNTERS; ++i) - if(Encounters[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead. - Encounters[i] = NOT_STARTED; - OUT_LOAD_INST_DATA_COMPLETE; - } + const char* Save() + { + return str_data.c_str(); + } + + void Load(const char* in) + { + if (!in) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } + + OUT_LOAD_INST_DATA(in); + + std::istringstream loadStream(in); + loadStream >> Encounters[0] >> Encounters[1] >> Encounters[2] + >> Encounters[3] >> Encounters[4] >> Encounters[5] >> Encounters[6] + >> Encounters[7] >> Encounters[8]; + + for(uint8 i = 0; i < ENCOUNTERS; ++i) + if (Encounters[i] == IN_PROGRESS) + Encounters[i] = NOT_STARTED; + + OUT_LOAD_INST_DATA_COMPLETE; + } }; InstanceData* GetInstanceData_instance_black_temple(Map* map) diff --git a/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp b/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp index b4596fb8a90..6618620de1e 100644 --- a/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp +++ b/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp @@ -17,7 +17,7 @@ /* ScriptData SDName: Shadowmoon_Valley SD%Complete: 100 -SDComment: Quest support: 10519, 10583, 10601, 10814, 10804, 10854, 11082, 10451. Vendor Drake Dealer Hurlunk. +SDComment: Quest support: 10519, 10583, 10601, 10814, 10804, 10854, 11082, 10781, 10451. Vendor Drake Dealer Hurlunk. SDCategory: Shadowmoon Valley EndScriptData */ @@ -32,6 +32,10 @@ npc_karynaku npc_oronok_tornheart npc_overlord_morghor npc_earthmender_wilda +mob_torloth_the_magnificent +mob_illidari_spawn +npc_lord_illidan_stormrage +go_crystal_prison EndContentData */ #include "precompiled.h" @@ -161,6 +165,15 @@ CreatureAI* GetAI_mob_mature_netherwing_drake(Creature *_creature) # mob_enslaved_netherwing_drake ####*/ +Creature* SelectCreatureInGrid(Unit* pUnit, uint32 entry, float range) +{ + Creature* target = NULL; + Trinity::AllCreaturesOfEntryInRange check(pUnit, entry, range); + Trinity::CreatureSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(target, check); + pUnit->VisitNearbyObject(range, searcher); + return target; +} + #define FACTION_DEFAULT 62 #define FACTION_FRIENDLY 1840 // Not sure if this is correct, it was taken off of Mordenai. @@ -195,27 +208,6 @@ struct TRINITY_DLL_DECL mob_enslaved_netherwing_drakeAI : public ScriptedAI void Aggro(Unit* who) { } - Creature* SelectCreatureInGrid(uint32 entry, float range) - { - Creature* pCreature = NULL; - - // Time for some omg mind blowing code to search for creature - CellPair pair(Trinity::ComputeCellPair(m_creature->GetPositionX(), m_creature->GetPositionY())); - Cell cell(pair); - cell.data.Part.reserved = ALL_DISTRICT; - cell.SetNoCreate(); - - Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck creature_check(*m_creature, entry, true, range); - Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(pCreature, creature_check); - - TypeContainerVisitor<Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck>, GridTypeMapContainer> creature_searcher(searcher); - - CellLock<GridReadGuard> cell_lock(cell, pair); - cell_lock->Visit(cell_lock, creature_searcher,*(m_creature->GetMap())); - - return pCreature; - } - void SpellHit(Unit* caster, const SpellEntry* spell) { if(!caster) @@ -229,7 +221,7 @@ struct TRINITY_DLL_DECL mob_enslaved_netherwing_drakeAI : public ScriptedAI m_creature->setFaction(FACTION_FRIENDLY); DoCast(caster, SPELL_FORCE_OF_NELTHARAKU, true); - Creature* Dragonmaw = SelectCreatureInGrid(CREATURE_DRAGONMAW_SUBJUGATOR, 50); + Creature* Dragonmaw = SelectCreatureInGrid(m_creature, CREATURE_DRAGONMAW_SUBJUGATOR, 50); if(Dragonmaw) { @@ -289,7 +281,7 @@ struct TRINITY_DLL_DECL mob_enslaved_netherwing_drakeAI : public ScriptedAI float dx, dy, dz; - Creature* EscapeDummy = SelectCreatureInGrid(CREATURE_ESCAPE_DUMMY, 30); + Creature* EscapeDummy = SelectCreatureInGrid(m_creature, CREATURE_ESCAPE_DUMMY, 30); if(EscapeDummy) EscapeDummy->GetPosition(dx, dy, dz); else @@ -714,7 +706,7 @@ struct TRINITY_DLL_DECL npc_overlord_morghorAI : public ScriptedAI void StartEvent() { m_creature->SetUInt32Value(UNIT_NPC_FLAGS, 0); - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); + m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); Unit* Illidan = m_creature->SummonCreature(C_ILLIDAN, -5107.83, 602.584, 85.2393, 4.92598, TEMPSUMMON_CORPSE_DESPAWN, 0); IllidanGUID = Illidan->GetGUID(); Illidan->SetVisibility(VISIBILITY_OFF); @@ -741,7 +733,8 @@ struct TRINITY_DLL_DECL npc_overlord_morghorAI : public ScriptedAI case 2: DoScriptText(OVERLORD_YELL_1, m_creature, plr); return 4500; break; case 3: m_creature->SetInFront(plr); return 3200; break; case 4: DoScriptText(OVERLORD_SAY_2, m_creature, plr); return 2000; break; - case 5: Illi->SetVisibility(VISIBILITY_ON); return 350; break; + case 5: Illi->SetVisibility(VISIBILITY_ON); + Illi->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); return 350; break; case 6: Illi->CastSpell(Illi, SPELL_ONE, true); Illi->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID()); @@ -781,7 +774,10 @@ struct TRINITY_DLL_DECL npc_overlord_morghorAI : public ScriptedAI case 23: m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); return 2000; break; case 24: m_creature->SetUInt64Value(UNIT_FIELD_TARGET, PlayerGUID); return 5000; break; case 25: DoScriptText(OVERLORD_SAY_6, m_creature); return 2000; break; - case 26: ((Player*)plr)->CompleteQuest(QUEST_LORD_ILLIDAN_STORMRAGE); return 6000; break; + case 26: + if(plr) + ((Player*)plr)->GroupEventHappens(QUEST_LORD_ILLIDAN_STORMRAGE, m_creature); + return 6000; break; case 27: { Unit* Yarzill = FindCreature(C_YARZILL, 50); @@ -1060,6 +1056,599 @@ bool QuestAccept_npc_earthmender_wilda(Player* player, Creature* creature, Quest return true; } +/*##### +# Quest: Battle of the crimson watch +#####*/ + +/* ContentData +Battle of the crimson watch - creatures, gameobjects and defines +mob_illidari_spawn : Adds that are summoned in the Crimson Watch battle. +mob_torloth_the_magnificent : Final creature that players have to face before quest is completed +npc_lord_illidan_stormrage : Creature that controls the event. +go_crystal_prison : GameObject that begins the event and hands out quest +EndContentData */ + +#define END_TEXT -1000366 + +#define QUEST_BATTLE_OF_THE_CRIMSON_WATCH 10781 +#define EVENT_AREA_RADIUS 65 //65yds +#define EVENT_COOLDOWN 30000 //in ms. appear after event completed or failed (should be = Adds despawn time) + +struct TorlothCinematic +{ + int32 TextId; + uint32 Creature, Timer; +}; + +// Creature 0 - Torloth, 1 - Illidan +static TorlothCinematic TorlothAnim[]= +{ + {-1000367, 0, 2000}, + {-1000368, 1, 7000}, + {-1000369, 0, 3000}, + {NULL, 0, 2000}, // Torloth stand + {-1000370, 0, 1000}, + {NULL, 0, 3000}, + {NULL, 0, NULL} +}; + +struct Location +{ + float x, y, z, o; +}; + +//Cordinates for Spawns +static Location SpawnLocation[]= +{ + //Cords used for: + {-4615.8556, 1342.2532, 139.9, 1.612},//Illidari Soldier + {-4598.9365, 1377.3182, 139.9, 3.917},//Illidari Soldier + {-4598.4697, 1360.8999, 139.9, 2.427},//Illidari Soldier + {-4589.3599, 1369.1061, 139.9, 3.165},//Illidari Soldier + {-4608.3477, 1386.0076, 139.9, 4.108},//Illidari Soldier + {-4633.1889, 1359.8033, 139.9, 0.949},//Illidari Soldier + {-4623.5791, 1351.4574, 139.9, 0.971},//Illidari Soldier + {-4607.2988, 1351.6099, 139.9, 2.416},//Illidari Soldier + {-4633.7764, 1376.0417, 139.9, 5.608},//Illidari Soldier + {-4600.2461, 1369.1240, 139.9, 3.056},//Illidari Mind Breaker + {-4631.7808, 1367.9459, 139.9, 0.020},//Illidari Mind Breaker + {-4600.2461, 1369.1240, 139.9, 3.056},//Illidari Highlord + {-4631.7808, 1367.9459, 139.9, 0.020},//Illidari Highlord + {-4615.5586, 1353.0031, 139.9, 1.540},//Illidari Highlord + {-4616.4736, 1384.2170, 139.9, 4.971},//Illidari Highlord + {-4627.1240, 1378.8752, 139.9, 2.544} //Torloth The Magnificent +}; + +struct WaveData +{ + uint8 SpawnCount, UsedSpawnPoint; + uint32 CreatureId, SpawnTimer,YellTimer; + int32 WaveTextId; +}; + +static WaveData WavesInfo[]= +{ + {9, 0, 22075, 10000, 7000, -1000371},//Illidari Soldier + {2, 9, 22074, 10000, 7000, -1000372},//Illidari Mind Breaker + {4, 11, 19797, 10000, 7000, -1000373},//Illidari Highlord + {1, 15, 22076, 10000, 7000, -1000374} //Torloth The Magnificent +}; + +struct SpawnSpells +{ + uint32 Timer1, Timer2, SpellId; +}; + +static SpawnSpells SpawnCast[]= +{ + {10000, 15000, 35871},// Illidari Soldier Cast - Spellbreaker + {10000, 10000, 38985},// Illidari Mind Breake Cast - Focused Bursts + {35000, 35000, 22884},// Illidari Mind Breake Cast - Psychic Scream + {20000, 20000, 17194},// Illidari Mind Breake Cast - Mind Blast + {8000, 15000, 38010},// Illidari Highlord Cast - Curse of Flames + {12000, 20000, 16102},// Illidari Highlord Cast - Flamestrike + {10000, 15000, 15284},// Torloth the Magnificent Cast - Cleave + {18000, 20000, 39082},// Torloth the Magnificent Cast - Shadowfury + {25000, 28000, 33961}// Torloth the Magnificent Cast - Spell Reflection +}; + +/*###### +# mob_illidari_spawn +######*/ + +struct TRINITY_DLL_DECL mob_illidari_spawnAI : public ScriptedAI +{ + mob_illidari_spawnAI(Creature* c) : ScriptedAI(c) {Reset();} + + uint64 LordIllidanGUID; + uint32 SpellTimer1, SpellTimer2, SpellTimer3; + bool Timers; + + void Reset() + { + LordIllidanGUID = 0; + Timers = false; + } + + void Aggro(Unit* who) {} + void JustDied(Unit* slayer); + + void UpdateAI(const uint32 diff) + { + if(!m_creature->getVictim() || !m_creature->SelectHostilTarget()) + return; + + if(!Timers) + { + if(m_creature->GetEntry() == 22075)//Illidari Soldier + { + SpellTimer1 = SpawnCast[0].Timer1 + (rand()%4 * 1000); + } + if(m_creature->GetEntry() == 22074)//Illidari Mind Breaker + { + SpellTimer1 = SpawnCast[1].Timer1 + (rand()%10 * 1000); + SpellTimer2 = SpawnCast[2].Timer1 + (rand()%4 * 1000); + SpellTimer3 = SpawnCast[3].Timer1 + (rand()%4 * 1000); + } + if(m_creature->GetEntry() == 19797)// Illidari Highlord + { + SpellTimer1 = SpawnCast[4].Timer1 + (rand()%4 * 1000); + SpellTimer2 = SpawnCast[5].Timer1 + (rand()%4 * 1000); + } + Timers = true; + } + //Illidari Soldier + if(m_creature->GetEntry() == 22075) + { + if(SpellTimer1 < diff) + { + DoCast(m_creature->getVictim(), SpawnCast[0].SpellId);//Spellbreaker + SpellTimer1 = SpawnCast[0].Timer2 + (rand()%5 * 1000); + }else SpellTimer1 -= diff; + } + //Illidari Mind Breaker + if(m_creature->GetEntry() == 22074) + { + if(SpellTimer1 < diff) + { + if(Unit *target = SelectUnit(SELECT_TARGET_RANDOM,0)) + { + if(target->GetTypeId() == TYPEID_PLAYER) + { + DoCast(target, SpawnCast[1].SpellId); //Focused Bursts + SpellTimer1 = SpawnCast[1].Timer2 + (rand()%5 * 1000); + }else SpellTimer1 = 2000; + } + }else SpellTimer1 -= diff; + + if(SpellTimer2 < diff) + { + DoCast(m_creature->getVictim(), SpawnCast[2].SpellId);//Psychic Scream + SpellTimer2 = SpawnCast[2].Timer2 + (rand()%13 * 1000); + }else SpellTimer2 -= diff; + + if(SpellTimer3 < diff) + { + DoCast(m_creature->getVictim(), SpawnCast[3].SpellId);//Mind Blast + SpellTimer3 = SpawnCast[3].Timer2 + (rand()%8 * 1000); + }else SpellTimer3 -= diff; + } + //Illidari Highlord + if(m_creature->GetEntry() == 19797) + { + if(SpellTimer1 < diff) + { + DoCast(m_creature->getVictim(), SpawnCast[4].SpellId);//Curse Of Flames + SpellTimer1 = SpawnCast[4].Timer2 + (rand()%10 * 1000); + }else SpellTimer1 -= diff; + + if(SpellTimer2 < diff) + { + DoCast(m_creature->getVictim(), SpawnCast[5].SpellId);//Flamestrike + SpellTimer2 = SpawnCast[5].Timer2 + (rand()%7 * 13000); + }else SpellTimer2 -= diff; + } + + DoMeleeAttackIfReady(); + } +}; + +/*###### +# mob_torloth_the_magnificent +#####*/ + +struct TRINITY_DLL_DECL mob_torloth_the_magnificentAI : public ScriptedAI +{ + mob_torloth_the_magnificentAI(Creature* c) : ScriptedAI(c) {Reset();} + + uint32 AnimationTimer, SpellTimer1, SpellTimer2, SpellTimer3; + + uint8 AnimationCount; + + uint64 LordIllidanGUID; + uint64 AggroTargetGUID; + + bool Timers; + + void Reset() + { + AnimationTimer = 4000; + AnimationCount = 0; + LordIllidanGUID = 0; + AggroTargetGUID = 0; + Timers = false; + + m_creature->addUnitState(UNIT_STAT_ROOT); + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + m_creature->SetUInt64Value(UNIT_FIELD_TARGET, 0); + } + + void Aggro(Unit* who){} + + void HandleAnimation() + { + Creature* pCreature = m_creature; + + if(TorlothAnim[AnimationCount].Creature == 1) + { + pCreature = ((Creature*)Unit::GetUnit(*m_creature, LordIllidanGUID)); + + if(!pCreature) + return; + } + + if(TorlothAnim[AnimationCount].TextId) + DoScriptText(TorlothAnim[AnimationCount].TextId, pCreature); + + AnimationTimer = TorlothAnim[AnimationCount].Timer; + + switch(AnimationCount) + { + case 0: + m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,8); + break; + case 3: + m_creature->RemoveFlag(UNIT_FIELD_BYTES_1,8); + break; + case 5: + if(Player* AggroTarget = ((Player*)Unit::GetUnit((*m_creature), AggroTargetGUID))) + { + m_creature->SetUInt64Value(UNIT_FIELD_TARGET, AggroTarget->GetGUID()); + m_creature->AddThreat(AggroTarget, 1); + m_creature->HandleEmoteCommand(EMOTE_ONESHOT_POINT); + } + break; + case 6: + if(Player* AggroTarget = ((Player*)Unit::GetUnit((*m_creature), AggroTargetGUID))) + { + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + m_creature->clearUnitState(UNIT_STAT_ROOT); + + float x, y, z; + AggroTarget->GetPosition(x,y,z); + m_creature->GetMotionMaster()->MovePoint(0,x,y,z); + } + break; + } + ++AnimationCount; + } + + void UpdateAI(const uint32 diff) + { + if(AnimationTimer) + { + if(AnimationTimer <= diff) + { + HandleAnimation(); + }else AnimationTimer -= diff; + } + + if(AnimationCount < 6) + { + m_creature->CombatStop(); + }else if(!Timers) + { + + SpellTimer1 = SpawnCast[6].Timer1; + SpellTimer2 = SpawnCast[7].Timer1; + SpellTimer3 = SpawnCast[8].Timer1; + Timers = true; + } + + if(Timers) + { + if(SpellTimer1 < diff) + { + DoCast(m_creature->getVictim(), SpawnCast[6].SpellId);//Cleave + SpellTimer1 = SpawnCast[6].Timer2 + (rand()%10 * 1000); + }else SpellTimer1 -= diff; + + if(SpellTimer2 < diff) + { + DoCast(m_creature->getVictim(), SpawnCast[7].SpellId);//Shadowfury + SpellTimer2 = SpawnCast[7].Timer2 + (rand()%5 * 1000); + }else SpellTimer2 -= diff; + + if(SpellTimer3 < diff) + { + DoCast(m_creature, SpawnCast[8].SpellId); + SpellTimer3 = SpawnCast[8].Timer2 + (rand()%7 * 1000);//Spell Reflection + }else SpellTimer3 -= diff; + } + + DoMeleeAttackIfReady(); + } + + void JustDied(Unit* slayer) + { + if(slayer) + switch(slayer->GetTypeId()) + { + case TYPEID_UNIT: + if(((Creature*)slayer)->isPet() && ((Pet*)slayer)->GetOwner()->GetTypeId() == TYPEID_PLAYER) + ((Player*)((Pet*)slayer->GetOwner()))->GroupEventHappens(QUEST_BATTLE_OF_THE_CRIMSON_WATCH, m_creature); + break; + + case TYPEID_PLAYER: + ((Player*)slayer)->GroupEventHappens(QUEST_BATTLE_OF_THE_CRIMSON_WATCH, m_creature); + break; + } + + if(Creature* LordIllidan = ((Creature*)Unit::GetUnit(*m_creature, LordIllidanGUID))) + { + DoScriptText(END_TEXT, LordIllidan, slayer); + LordIllidan->AI()->EnterEvadeMode(); + } + } +}; + +/*##### +# npc_lord_illidan_stormrage +#####*/ + +struct TRINITY_DLL_DECL npc_lord_illidan_stormrageAI : public ScriptedAI +{ + npc_lord_illidan_stormrageAI(Creature* c) : ScriptedAI(c) {Reset();} + + uint64 PlayerGUID; + + uint32 WaveTimer; + uint32 AnnounceTimer; + + int8 LiveCount; + uint8 WaveCount; + + bool EventStarted; + bool Announced; + bool Failed; + + void Reset() + { + PlayerGUID = 0; + + WaveTimer = 10000; + AnnounceTimer = 7000; + LiveCount = 0; + WaveCount = 0; + + EventStarted = false; + Announced = false; + Failed = false; + + m_creature->SetVisibility(VISIBILITY_OFF); + } + + void Aggro(Unit* who) {} + void MoveInLineOfSight(Unit* who) {} + void AttackStart(Unit* who) {} + + void SummonNextWave() + { + uint8 count = WavesInfo[WaveCount].SpawnCount; + uint8 locIndex = WavesInfo[WaveCount].UsedSpawnPoint; + srand(time(NULL));//initializing random seed + uint8 FelguardCount = 0; + uint8 DreadlordCount = 0; + + for(uint8 i = 0; i < count; ++i) + { + Creature* Spawn = NULL; + float X = SpawnLocation[locIndex + i].x; + float Y = SpawnLocation[locIndex + i].y; + float Z = SpawnLocation[locIndex + i].z; + float O = SpawnLocation[locIndex + i].o; + Spawn = m_creature->SummonCreature(WavesInfo[WaveCount].CreatureId, X, Y, Z, O, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); + ++LiveCount; + + if(Spawn) + { + Spawn->LoadCreaturesAddon(); + + if(WaveCount == 0)//1 Wave + { + if(rand()%3 == 1 && FelguardCount<2) + { + Spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID,18654); + ++FelguardCount; + } + else if(DreadlordCount < 3) + { + Spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID,19991); + ++DreadlordCount; + } + else if(FelguardCount<2) + { + Spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID,18654); + ++FelguardCount; + } + } + + if(WaveCount < 3)//1-3 Wave + { + if(PlayerGUID) + { + if(Player* pTarget = ((Player*)Unit::GetUnit((*m_creature), PlayerGUID))) + { + float x, y, z; + pTarget->GetPosition(x,y,z); + Spawn->GetMotionMaster()->MovePoint(0,x, y, z); + } + } + ((mob_illidari_spawnAI*)Spawn->AI())->LordIllidanGUID = m_creature->GetGUID(); + } + + if(WavesInfo[WaveCount].CreatureId == 22076) // Torloth + { + ((mob_torloth_the_magnificentAI*)Spawn->AI())->LordIllidanGUID = m_creature->GetGUID(); + if(PlayerGUID) + ((mob_torloth_the_magnificentAI*)Spawn->AI())->AggroTargetGUID = PlayerGUID; + } + } + } + ++WaveCount; + WaveTimer = WavesInfo[WaveCount].SpawnTimer; + AnnounceTimer = WavesInfo[WaveCount].YellTimer; + } + + void CheckEventFail() + { + Player* pPlayer = ((Player*)Unit::GetUnit((*m_creature), PlayerGUID)); + + if(!pPlayer) + return; + + if(Group *EventGroup = pPlayer->GetGroup()) + { + Player* GroupMember; + + uint8 GroupMemberCount = 0; + uint8 DeadMemberCount = 0; + uint8 FailedMemberCount = 0; + + const Group::MemberSlotList members = EventGroup->GetMemberSlots(); + + for(Group::member_citerator itr = members.begin(); itr!= members.end(); itr++) + { + GroupMember = ((Player*)Unit::GetUnit((*m_creature), itr->guid)); + if(GroupMember && !GroupMember->IsWithinDistInMap(m_creature, EVENT_AREA_RADIUS) && GroupMember->GetQuestStatus(QUEST_BATTLE_OF_THE_CRIMSON_WATCH) == QUEST_STATUS_INCOMPLETE) + { + GroupMember->FailQuest(QUEST_BATTLE_OF_THE_CRIMSON_WATCH); + GroupMember->SetQuestStatus(QUEST_BATTLE_OF_THE_CRIMSON_WATCH, QUEST_STATUS_NONE); + ++FailedMemberCount; + } + ++GroupMemberCount; + + if(GroupMember->isDead()) + { + ++DeadMemberCount; + } + } + + if(GroupMemberCount == FailedMemberCount) + { + Failed = true; + } + + if(GroupMemberCount == DeadMemberCount) + { + for(Group::member_citerator itr = members.begin(); itr!= members.end(); itr++) + { + GroupMember = ((Player*)Unit::GetUnit((*m_creature), itr->guid)); + + if(GroupMember && GroupMember->GetQuestStatus(QUEST_BATTLE_OF_THE_CRIMSON_WATCH) == QUEST_STATUS_INCOMPLETE) + { + GroupMember->FailQuest(QUEST_BATTLE_OF_THE_CRIMSON_WATCH); + GroupMember->SetQuestStatus(QUEST_BATTLE_OF_THE_CRIMSON_WATCH, QUEST_STATUS_NONE); + } + } + Failed = true; + } + }else if (pPlayer->isDead() || !pPlayer->IsWithinDistInMap(m_creature, EVENT_AREA_RADIUS)) + { + pPlayer->FailQuest(QUEST_BATTLE_OF_THE_CRIMSON_WATCH); + Failed = true; + } + } + + void LiveCounter() + { + --LiveCount; + if(!LiveCount) + Announced = false; + } + + void UpdateAI(const uint32 diff) + { + if(!PlayerGUID || !EventStarted) + return; + + if(!LiveCount && WaveCount < 4) + { + if(!Announced && AnnounceTimer < diff) + { + DoScriptText(WavesInfo[WaveCount].WaveTextId, m_creature); + Announced = true; + }else AnnounceTimer -= diff; + + if(WaveTimer < diff) + { + SummonNextWave(); + }else WaveTimer -= diff; + } + CheckEventFail(); + + if(Failed) + EnterEvadeMode(); + } +}; + +void mob_illidari_spawnAI::JustDied(Unit *slayer) +{ + m_creature->RemoveCorpse(); + if(Creature* LordIllidan = ((Creature*)Unit::GetUnit(*m_creature, LordIllidanGUID))) + if(LordIllidan) + ((npc_lord_illidan_stormrageAI*)LordIllidan->AI())->LiveCounter(); +} + +/*##### +# go_crystal_prison +######*/ + +bool GOQuestAccept_GO_crystal_prison(Player* plr, GameObject* go, Quest const* quest) +{ + if(quest->GetQuestId() == QUEST_BATTLE_OF_THE_CRIMSON_WATCH ) + { + Creature* Illidan = SelectCreatureInGrid(plr, 22083, 50); + + if(Illidan && !(((npc_lord_illidan_stormrageAI*)Illidan->AI())->EventStarted)) + { + ((npc_lord_illidan_stormrageAI*)Illidan->AI())->PlayerGUID = plr->GetGUID(); + ((npc_lord_illidan_stormrageAI*)Illidan->AI())->LiveCount = 0; + ((npc_lord_illidan_stormrageAI*)Illidan->AI())->EventStarted=true; + } + } + return true; +} + +CreatureAI* GetAI_npc_lord_illidan_stormrage(Creature* c) +{ + return new npc_lord_illidan_stormrageAI(c); +} + +CreatureAI* GetAI_mob_illidari_spawn(Creature* c) +{ + return new mob_illidari_spawnAI(c); +} + +CreatureAI* GetAI_mob_torloth_the_magnificent(Creature* c) +{ + return new mob_torloth_the_magnificentAI(c); +} + +/*##### +# +######*/ + void AddSC_shadowmoon_valley() { Script *newscript; @@ -1125,4 +1714,24 @@ void AddSC_shadowmoon_valley() newscript->GetAI = &GetAI_npc_earthmender_wildaAI; newscript->pQuestAccept = &QuestAccept_npc_earthmender_wilda; newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_lord_illidan_stormrage"; + newscript->GetAI = GetAI_npc_lord_illidan_stormrage; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "go_crystal_prison"; + newscript->pGOQuestAccept = GOQuestAccept_GO_crystal_prison; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "mob_illidari_spawn"; + newscript->GetAI = GetAI_mob_illidari_spawn; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "mob_torloth_the_magnificent"; + newscript->GetAI = GetAI_mob_torloth_the_magnificent; + newscript->RegisterSelf(); } diff --git a/src/game/Map.cpp b/src/game/Map.cpp index d64a1736fe1..9ebd3357175 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -797,6 +797,10 @@ void Map::Update(const uint32 &t_diff) void Map::Remove(Player *player, bool remove) { + player->DestroyForNearbyPlayers(); + player->m_IsInNotifyList = false; + player->m_Notified = false; + // this may be called during Map::Update // after decrement+unlink, ++m_mapRefIter will continue correctly // when the first element of the list is being removed @@ -835,7 +839,7 @@ void Map::Remove(Player *player, bool remove) SendRemoveTransports(player); //UpdateObjectsVisibilityFor(player,cell,p); - AddUnitToNotify(player); + //AddUnitToNotify(player); if( remove ) DeleteFromWorld(player); diff --git a/src/game/NPCHandler.cpp b/src/game/NPCHandler.cpp index 4f721c8a9de..fda02c08977 100644 --- a/src/game/NPCHandler.cpp +++ b/src/game/NPCHandler.cpp @@ -504,6 +504,10 @@ void WorldSession::HandleListStabledPetsOpcode( WorldPacket & recv_data ) if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); + // remove mounts this fix bug where getting pet from stable while mounted deletes pet. + if(GetPlayer()->IsMounted()) + GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_MOUNTED); + SendStablePet(npcGUID); } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 2d584da26f7..c1b97530320 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1758,7 +1758,15 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati ResetContestedPvP(); - DestroyForNearbyPlayers(); + /*DestroyForNearbyPlayers(); + { + UpdateData data; + for(ClientGUIDs::iterator i = m_clientGUIDs.begin(); i != m_clientGUIDs.end(); ++i) + data.AddOutOfRangeGUID(*i); + WorldPacket packet; + data.BuildPacket(&packet); + GetSession()->SendPacket(&packet); + }*/ m_clientGUIDs.clear(); // remove player from battleground on far teleport (when changing maps) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index c640dc58af4..86c1fa1afe6 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -501,6 +501,8 @@ bool IsPositiveEffect(uint32 spellId, uint32 effIndex) return true; case 28441: // not positive dummy spell case 37675: // Chaos Blast + case 41519: // Mark of Stormrage + case 34877: // Custodian of Time return false; } diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp index 5bb52fe5de6..6ec807b710f 100644 --- a/src/game/WorldSession.cpp +++ b/src/game/WorldSession.cpp @@ -255,7 +255,7 @@ void WorldSession::LogoutPlayer(bool Save) // Remove any possession of this player on logout _player->RemoveCharmedOrPossessedBy(NULL); - _player->DestroyForNearbyPlayers(); + //_player->DestroyForNearbyPlayers(); if (uint64 lguid = GetPlayer()->GetLootGUID()) DoLootRelease(lguid); |