From 89ee8cbac1252edc50282b8ac1216f78d1946f8e Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Sun, 15 Dec 2013 14:09:49 +0200 Subject: [PATCH 01/21] Core/Unit: Add switch to prevent COMMAND_ATTACK being added to action bar for supplied creature entries. --- src/server/game/Entities/Unit/Unit.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index da5edc0ea6..025e0b21a9 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13617,6 +13617,8 @@ void CharmInfo::InitPossessCreateSpells() // Adding entrys to this switch will prevent COMMAND_ATTACK being added to pet bar. switch (_unit->GetEntry()) { + case 40281: //Crashin' Thrashin' Racer + case 27664: //Crashin' Thrashin' Racer case 23575: // Mindless Abomination break; default: From f0a742a8c471ba948d5d86c1ab5e3a74329a9a92 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 15 Dec 2013 13:37:49 +0100 Subject: [PATCH 02/21] Core/Misc: Remove unused code Remove unused debugging code added in MaNGOS r5067. Remove dead code from a switch found by Coverity. --- src/server/game/Entities/Unit/Unit.cpp | 3 --- src/server/game/Maps/MapManager.cpp | 36 -------------------------- src/server/game/Maps/MapManager.h | 5 ---- 3 files changed, 44 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 025e0b21a9..de331d5caf 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15904,9 +15904,6 @@ void Unit::RemoveCharmedBy(Unit* charmer) } } break; - default: - case CHARM_TYPE_CONVERT: - break; } } diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index 75ca3de3fe..3ac965acbb 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -37,14 +37,10 @@ #include "WorldSession.h" #include "Opcodes.h" -extern GridState* si_GridStates[]; // debugging code, should be deleted some day - MapManager::MapManager() { i_gridCleanUpDelay = sWorld->getIntConfig(CONFIG_INTERVAL_GRIDCLEAN); i_timer.SetInterval(sWorld->getIntConfig(CONFIG_INTERVAL_MAPUPDATE)); - memset(i_GridStates, 0, sizeof(i_GridStates)); - i_GridStateErrorCount = 0; _nextInstanceId = 0; } @@ -54,13 +50,6 @@ void MapManager::Initialize() { Map::InitStateMachine(); - // debugging code, should be deleted some day - { - for (uint8 i = 0; i < MAX_GRID_STATE; ++i) - i_GridStates[i] = si_GridStates[i]; - - i_GridStateErrorCount = 0; - } int num_threads(sWorld->getIntConfig(CONFIG_NUMTHREADS)); // Start mtmaps if needed. if (num_threads > 0 && m_updater.activate(num_threads) == -1) @@ -73,31 +62,6 @@ void MapManager::InitializeVisibilityDistanceInfo() (*iter).second->InitVisibilityDistance(); } -// debugging code, should be deleted some day -void MapManager::checkAndCorrectGridStatesArray() -{ - bool ok = true; - for (int i=0; icheckMagic()) - { - ok = false; - si_GridStates[i]->setMagic(); - } - #endif - } - if (!ok) - ++i_GridStateErrorCount; -} - Map* MapManager::CreateBaseMap(uint32 id) { Map* map = FindBaseMap(id); diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h index 230b4648f4..4853755805 100644 --- a/src/server/game/Maps/MapManager.h +++ b/src/server/game/Maps/MapManager.h @@ -129,11 +129,6 @@ class MapManager typedef UNORDERED_MAP MapMapType; typedef std::vector InstanceIds; - // debugging code, should be deleted some day - void checkAndCorrectGridStatesArray(); // just for debugging to find some memory overwrites - GridState* i_GridStates[MAX_GRID_STATE]; // shadow entries to the global array in Map.cpp - int i_GridStateErrorCount; - MapManager(); ~MapManager(); From a2e7191b2665cb8dafeb9623e114b5c2f339b82c Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 15 Dec 2013 13:43:18 -0330 Subject: [PATCH 03/21] Core/Unit: prevent COMMAND_ATTACK being added for Trained Rock Falcon. Also added spells for Trained Rock Falcon to db. --- sql/updates/world/2013_12_15_00_world_creature_template.sql | 2 ++ src/server/game/Entities/Unit/Unit.cpp | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 sql/updates/world/2013_12_15_00_world_creature_template.sql diff --git a/sql/updates/world/2013_12_15_00_world_creature_template.sql b/sql/updates/world/2013_12_15_00_world_creature_template.sql new file mode 100644 index 0000000000..a7b1c9ea6e --- /dev/null +++ b/sql/updates/world/2013_12_15_00_world_creature_template.sql @@ -0,0 +1,2 @@ +-- Trained Rock Falcon spells for quest 11470 "There Exists No Honor Among Birds" +UPDATE `creature_template` SET `spell1`=44422,`spell2`=44423,`spell3`=44424 WHERE `entry`=24783; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index de331d5caf..93831ab038 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13617,9 +13617,10 @@ void CharmInfo::InitPossessCreateSpells() // Adding entrys to this switch will prevent COMMAND_ATTACK being added to pet bar. switch (_unit->GetEntry()) { - case 40281: //Crashin' Thrashin' Racer - case 27664: //Crashin' Thrashin' Racer case 23575: // Mindless Abomination + case 24783: // Trained Rock Falcon + case 27664: // Crashin' Thrashin' Racer + case 40281: // Crashin' Thrashin' Racer break; default: InitEmptyActionBar(); From dd4a774c4ca7d9a4a5c9df84235e5cfe52d5d2d3 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 15 Dec 2013 18:51:34 +0100 Subject: [PATCH 04/21] Core/Transports: Fix memory leak on shutdown Fix world transports not being deleted on shutdown. --- src/server/game/Maps/Map.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 411e023eab..b57b50dd42 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -68,12 +68,8 @@ Map::~Map() Transport* transport = *itr; ++itr; - // Destroy local transports - if (transport->GetTransportTemplate()->inInstance) - { - transport->RemoveFromWorld(); - delete transport; - } + transport->RemoveFromWorld(); + delete transport; } if (!m_scriptSchedule.empty()) From 9dd30ac5ff13b1e5c6c94044e0caeb6dd961dd4c Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 15 Dec 2013 14:35:15 -0330 Subject: [PATCH 05/21] DB/Creature: Misc template updates --- sql/updates/world/2013_12_15_01_world_creature_template.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2013_12_15_01_world_creature_template.sql diff --git a/sql/updates/world/2013_12_15_01_world_creature_template.sql b/sql/updates/world/2013_12_15_01_world_creature_template.sql new file mode 100644 index 0000000000..c7961d6f5c --- /dev/null +++ b/sql/updates/world/2013_12_15_01_world_creature_template.sql @@ -0,0 +1,4 @@ +-- Fix Trained Rock Falcon InhabitType +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=24783; +-- Fix faction for Earthen Dwarf +UPDATE `creature_template` SET `faction_A`=1868,`faction_H`=1868 WHERE entry IN (27980,31391); From e90a7f82d4417400ff2db4c9da0f324190fa4e27 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 15 Dec 2013 21:14:47 +0100 Subject: [PATCH 06/21] Core/AI: Fix CreatureAI left uninitialized Fix CreatureAI left uninitialized for 1 server tick for Creatures with DeathState:DEAD . This is a workaround required after c9cf2f059f8f33c3fcb58ad472871515e59df7c3 changes . Valgrind log: Conditional jump or move depends on uninitialised value(s) at : npc_draenei_survivor::npc_draenei_survivorAI::MoveInLineOfSight(Unit*) (zone_azuremyst_isle.cpp:104) by : CreatureAI::MoveInLineOfSight_Safe(Unit*) (CreatureAI.cpp:123) by : CreatureUnitRelocationWorker(Creature*, Unit*) (GridNotifiers.cpp:134) by : Trinity::AIRelocationNotifier::Visit(GridRefManager&) (GridNotifiers.cpp:252) Uninitialised value was created by a heap allocation at : operator new(unsigned long) (vg_replace_malloc.c:319) by : npc_draenei_survivor::GetAI(Creature*) const (zone_azuremyst_isle.cpp:66) by : ScriptMgr::GetCreatureAI(Creature*) (ScriptMgr.cpp:792) by : FactorySelector::selectAI(Creature*) (CreatureAISelector.cpp:41) by : Creature::AIM_Initialize(CreatureAI*) (Creature.cpp:716) by : Creature::AddToWorld() (Creature.cpp:190) --- src/server/game/Entities/Creature/Creature.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index dfc35bcce5..d039ee385e 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1533,7 +1533,11 @@ void Creature::Respawn(bool force) //Call AI respawn virtual function if (IsAIEnabled) + { + //reset the AI to be sure no dirty or uninitialized values will be used till next tick + AI()->Reset(); TriggerJustRespawned = true;//delay event to next tick so all creatures are created on the map before processing + } uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool(GetDBTableGUIDLow()) : 0; if (poolid) From f1a82a578be525624c416ba5f882b2f1a7e13536 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 15 Dec 2013 20:26:11 -0330 Subject: [PATCH 07/21] Core/Waypoints: Stop creatures from skipping at waypoint nodes and add smoothing to pathing. --- .../MovementGenerators/WaypointMovementGenerator.cpp | 12 +++++++++--- src/server/game/Movement/Spline/MoveSpline.h | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 45b61c828f..a7674755bc 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -74,19 +74,24 @@ void WaypointMovementGenerator::OnArrived(Creature* creature) if (m_isArrivalDone) return; - creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE); m_isArrivalDone = true; if (i_path->at(i_currentNode)->event_id && urand(0, 99) < i_path->at(i_currentNode)->event_chance) { TC_LOG_DEBUG("maps.script", "Creature movement start script %u at point %u for " UI64FMTD ".", i_path->at(i_currentNode)->event_id, i_currentNode, creature->GetGUID()); + creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE); creature->GetMap()->ScriptsStart(sWaypointScripts, i_path->at(i_currentNode)->event_id, creature, NULL); } // Inform script MovementInform(creature); creature->UpdateWaypointID(i_currentNode); - Stop(i_path->at(i_currentNode)->delay); + + if (i_path->at(i_currentNode)->delay) + { + creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE); + Stop(i_path->at(i_currentNode)->delay); + } } bool WaypointMovementGenerator::StartMove(Creature* creature) @@ -188,7 +193,8 @@ bool WaypointMovementGenerator::DoUpdate(Creature* creature, uint32 di { if (creature->IsStopped()) Stop(STOP_TIME_FOR_PLAYER); - else if (creature->movespline->Finalized()) + // Checking just before reaching waypoint gives smother movement than using FinalDestination + else if (creature->movespline->timeElapsed() < 150) { OnArrived(creature); return StartMove(creature); diff --git a/src/server/game/Movement/Spline/MoveSpline.h b/src/server/game/Movement/Spline/MoveSpline.h index 209f978d65..5a788201e7 100644 --- a/src/server/game/Movement/Spline/MoveSpline.h +++ b/src/server/game/Movement/Spline/MoveSpline.h @@ -79,10 +79,10 @@ namespace Movement UpdateResult _updateState(int32& ms_time_diff); int32 next_timestamp() const { return spline.length(point_Idx + 1); } int32 segment_time_elapsed() const { return next_timestamp() - time_passed; } - int32 timeElapsed() const { return Duration() - time_passed; } int32 timePassed() const { return time_passed; } public: + int32 timeElapsed() const { return Duration() - time_passed; } int32 Duration() const { return spline.length(); } MySpline const& _Spline() const { return spline; } int32 _currentSplineIdx() const { return point_Idx; } From b8908606fc511a02fd61faa38e6fb275bf6bf02e Mon Sep 17 00:00:00 2001 From: jackpoz Date: Mon, 16 Dec 2013 19:38:49 +0100 Subject: [PATCH 08/21] Core/AH: Fix memory leak Fix memory leak in Auction House when creating an auction with stackable items and a stack of the same amount in the inventory. Leak added in 15a2acfb528728b824291cb49cdd9196e6f0d57d . --- src/server/game/Handlers/AuctionHouseHandler.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index 8e86f43f19..1e5c35cf3f 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -332,6 +332,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) item2->DeleteFromInventoryDB(trans); item2->DeleteFromDB(trans); CharacterDatabase.CommitTransaction(trans); + delete item2; } else // Item stack count is bigger than required count, update item stack count and save to database - cloned item will be used for auction { From b3c810a0fbb09c17085af0f9010b723b0d48d0fc Mon Sep 17 00:00:00 2001 From: jackpoz Date: Mon, 16 Dec 2013 19:52:50 +0100 Subject: [PATCH 09/21] Core/Misc: Fix warning Partially revert f0a742a8c471ba948d5d86c1ab5e3a74329a9a92 to fix a warning about unhandled switch case (the same case that Coverity reported as dead code) . --- src/server/game/Entities/Unit/Unit.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 93831ab038..32dfee3409 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15905,6 +15905,8 @@ void Unit::RemoveCharmedBy(Unit* charmer) } } break; + case CHARM_TYPE_CONVERT: + break; } } From b8f9442ec9659ac9617c9b1647148f6b1727db24 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Mon, 16 Dec 2013 18:50:51 -0330 Subject: [PATCH 10/21] Core/Player: Fix logic for questgiver cast spell --- src/server/game/Entities/Player/Player.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 402713100c..94c2f2e9f2 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15379,7 +15379,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, if (quest->GetRewSpellCast() > 0) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(quest->GetRewSpellCast()); - if (questGiver->isType(TYPEMASK_UNIT) && (!spellInfo->HasEffect(SPELL_EFFECT_LEARN_SPELL) || !spellInfo->HasEffect(SPELL_EFFECT_CREATE_ITEM))) + if (questGiver->isType(TYPEMASK_UNIT) && !spellInfo->HasEffect(SPELL_EFFECT_LEARN_SPELL) && !spellInfo->HasEffect(SPELL_EFFECT_CREATE_ITEM)) { if (Creature* creature = GetMap()->GetCreature(questGiver->GetGUID())) creature->CastSpell(this, quest->GetRewSpellCast(), true); @@ -15390,7 +15390,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, else if (quest->GetRewSpell() > 0) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(quest->GetRewSpell()); - if (questGiver->isType(TYPEMASK_UNIT) && (!spellInfo->HasEffect(SPELL_EFFECT_LEARN_SPELL) || !spellInfo->HasEffect(SPELL_EFFECT_CREATE_ITEM))) + if (questGiver->isType(TYPEMASK_UNIT) && !spellInfo->HasEffect(SPELL_EFFECT_LEARN_SPELL) && !spellInfo->HasEffect(SPELL_EFFECT_CREATE_ITEM)) { if (Creature* creature = GetMap()->GetCreature(questGiver->GetGUID())) creature->CastSpell(this, quest->GetRewSpell(), true); From 1339d38d4c7e1c356d7a36734deb557db18acaf9 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Mon, 16 Dec 2013 20:23:29 -0330 Subject: [PATCH 11/21] DB/SAI: Fix some duplicate aura errors and clean up the SAI. --- sql/updates/world/2013_12_16_00_world_sai.sql | 186 ++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 sql/updates/world/2013_12_16_00_world_sai.sql diff --git a/sql/updates/world/2013_12_16_00_world_sai.sql b/sql/updates/world/2013_12_16_00_world_sai.sql new file mode 100644 index 0000000000..028f91fce6 --- /dev/null +++ b/sql/updates/world/2013_12_16_00_world_sai.sql @@ -0,0 +1,186 @@ +-- Runed Giant SAI +SET @ENTRY := 26417; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +UPDATE `creature_addon` SET `auras`= '' WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,47329,0,0,0,0,0,1,0,0,0,0,0,0,0,"Runed Giant - On Spawn - Cast Runic Compulsion"), +(@ENTRY,0,1,0,8,0,25,0,47604,0,10000,10000,80,2641700,2,2,0,0,0,1,0,0,0,0,0,0,0,"Runed Giant - On Spell Hit - Start Script for Free At Last"); + +-- Inquisitor Salrand SAI +SET @ENTRY := 25584; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,38,0,100,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Salrand - On Data 1 1 - Say 0"), +(@ENTRY,0,1,2,38,0,100,1,1,2,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Salrand - On Data 1 2 - Say 1"), +(@ENTRY,0,2,0,61,0,100,1,0,0,0,0,80,2558400,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Salrand - On Data 1 2 - Run script"), +(@ENTRY,0,3,4,6,0,100,1,0,0,0,0,11,45809,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Salrand - On Death - Cast Summon Salrand's Lockbox"), +(@ENTRY,0,4,0,61,0,100,1,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Inquisitor Salrand - On Death - Say 2"), +(@ENTRY,0,5,0,11,0,100,0,0,0,0,0,11,45775,0,0,0,0,0,1,0,0,0,0,0,0,0,"Runed Giant - On Spawn - Cast Cosmetic - Divine Shield Blue"); + +-- Image of Drakuru SAI +SET @ENTRY := 26543; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,19,0,100,0,12042,0,0,0,11,47308,0,0,0,0,0,7,0,0,0,0,0,0,0,"Image of Drakuru - On quest accepted - Spellcast Strip Detect Drakuru 02"), +(@ENTRY,0,1,2,11,0,100,0,0,0,0,0,11,43167,0,0,0,0,0,1,0,0,0,0,0,0,0,"Image of Drakuru - On Spawn - Cast Spirit Particles (green)"), +(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,11,47119,0,0,0,0,0,1,0,0,0,0,0,0,0,"Image of Drakuru - On Spawn - Cast Drakuru (Quest Invis)"); + +-- Image of Drakuru SAI +SET @ENTRY := 26787; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,19,0,100,0,12238,0,0,0,11,48417,0,0,0,0,0,7,0,0,0,0,0,0,0,"Image of Drakuru - On quest accepted - Spellcast Strip Detect Drakuru 04"), +(@ENTRY,0,1,2,11,0,100,0,0,0,0,0,11,43167,0,0,0,0,0,1,0,0,0,0,0,0,0,"Image of Drakuru - On Spawn - Cast Spirit Particles (green)"), +(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,11,47119,0,0,0,0,0,1,0,0,0,0,0,0,0,"Image of Drakuru - On Spawn - Cast Drakuru (Quest Invis)"); + +-- Fix frenzy for Kvaldir Berserker +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `source_type`=0 AND `entryorguid`=34947 AND `id`=2; + +-- Scarlet Infantryman SAI +SET @ENTRY := 28609; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +UPDATE `creature_addon` SET `auras`= '' WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,20,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Infantryman - On Aggro - Say Line 0"), +(@ENTRY,0,1,0,9,0,100,0,0,5,6000,9000,11,25710,0,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Infantryman - At 0 - 5 Range - Cast Heroic Strike"), +(@ENTRY,0,2,0,0,0,100,0,9000,15000,16000,19000,11,53399,1,1,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Infantryman - In Combat - Cast Sweeping Slam"), +(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,11,48356,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Infantryman - On Spawn - Cast See Wintergarde Invisibility"); + +-- Kvaldir Mist Binder SAI +SET @ENTRY := 34839; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,45658,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kvaldir Mist Binder - On Spawn - Cast Call of the Mist "), +(@ENTRY,0,1,0,0,0,100,0,6000,9000,12000,17000,11,49816,0,0,0,0,0,5,0,0,0,0,0,0,0,"Kvaldir Mist Binder - In Combat - Cast Mist of Strangulation"); + +-- Scarlet Commander SAI +SET @ENTRY := 28936; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,2404, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,9,0,100,0,0,0,2300,3900,11,52818,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Commander - In Combat CMC - Cast Shoot"), +(@ENTRY,0,1,0,9,0,100,0,0,5,6000,9000,11,52221,0,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Commander - Between 0-5 Range - Cast Heroic Strike"), +(@ENTRY,0,2,0,7,0,100,1,0,0,0,0,40,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Commander - On Evade - Set Sheath Melee"), +(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,11,48356,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Commander - On Spawn - Cast See Wintergarde Invisibility"); + +-- Scarlet Peasant SAI +SET @ENTRY := 28557; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,1,234, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,2,0,100,1,0,20,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Peasant - At 0-20% hp - Say text"), +(@ENTRY,0,1,0,11,0,100,0,0,0,0,0,11,48356,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Peasant - On Spawn - Cast See Wintergarde Invisibility"); + +-- Scarlet Captain SAI +SET @ENTRY := 28611; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,2404, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,9,0,100,0,0,0,2300,3900,11,52818,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Captain - In Combat CMC - Cast Shoot"), +(@ENTRY,0,1,0,9,0,100,0,0,5,6000,9000,11,52221,0,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Captain - Between 0-5 Range - Cast Heroic Strike"), +(@ENTRY,0,2,0,7,0,100,1,0,0,0,0,40,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Captain - On Evade - Set Sheath Melee"), +(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,11,48356,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Captain - On Spawn - Cast See Wintergarde Invisibility"); + +-- Firemane Flamecaller SAI +SET @ENTRY := 4334; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3400,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Firemane Flamecaller - In Combat CMC - Cast Fireball"), +(@ENTRY,0,1,0,0,0,100,0,1000,5000,600000,600000,11,18968,1,0,0,0,0,1,0,0,0,0,0,0,0,"Firemane Flamecaller - In Combat - Cast Fire Shield"), +(@ENTRY,0,2,0,0,0,100,0,9000,16000,30000,45000,11,11990,1,0,0,0,0,2,0,0,0,0,0,0,0,"Firemane Flamecaller - In Combat - Cast Rain of Fire"); + +-- Plague Eruptor SAI +SET @ENTRY := 27611; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,65536,1,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,8000,28000,38000,11,49350,0,0,0,0,0,5,0,0,0,0,0,0,0,"Plague Eruptor - In Combat - Cast Plague Cloud"); + +-- Fordragon High Priest SAI +SET @ENTRY := 27677; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +UPDATE `creature_addon` SET `auras`= '' WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,25054,64,0,0,0,0,2,0,0,0,0,0,0,0,"Fordragon High Priest - In Combat CMC - Cast Holy Smite"), +(@ENTRY,0,1,0,0,0,100,0,18000,25000,40000,53000,11,32595,1,0,0,0,0,1,0,0,0,0,0,0,0,"Fordragon High Priest - In Combat - Cast Power Word: Shield"), +(@ENTRY,0,2,0,0,0,100,0,9000,15000,15000,23000,11,49306,1,0,0,0,0,1,0,0,0,0,0,0,0,"Fordragon High Priest - In Combat - Cast Circle of Healing"), +(@ENTRY,0,3,0,14,0,100,0,3000,40,17000,21000,11,25058,1,0,0,0,0,7,0,0,0,0,0,0,0,"Fordragon High Priest - On Friendly Unit At 3000 Health Within 40 Range - Cast Renew"), +(@ENTRY,0,4,0,2,0,100,1,0,15,0,0,11,49348,1,0,0,0,0,1,0,0,0,0,0,0,0,"Fordragon High Priest - Between 0-15% Health - Cast Greater Heal"); + +-- Angrathar Aberration SAI +SET @ENTRY := 27631; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,65536,1,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,2,0,100,1,0,30,0,0,11,31540,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angrathar Aberration - HP@30% - Cast Enrage"), +(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angrathar Aberration - HP@30% - Say 0"); +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ENTRY,0,0, '%s becomes enraged!',16,0,100,0,0,0, 'Angrathar Aberration on enrage'); + +-- Scarlet Medic SAI +SET @ENTRY := 28608; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,48356,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Medic - On Spawn - Cast See Wintergarde Invisibility"), +(@ENTRY,0,1,0,1,0,100,0,1000,1000,1800000,1800000,11,13864,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Medic - Out Of Combat - Cast Power Word: Fortitude"), +(@ENTRY,0,2,0,4,0,30,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Medic - On Aggro - Say Line 0"), +(@ENTRY,0,3,0,0,0,100,0,0,0,3400,4800,11,15498,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Medic - In Combat CMC - Cast Holy Smite"), +(@ENTRY,0,4,0,2,0,100,1,0,0,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Medic - Between 0-15% Health - Flee For Assist"); + +-- Bloodspore Firestarter SAI +SET @ENTRY := 25470; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,1000,1000,600000,600000,11,45985,1,1,0,0,0,1,0,0,0,0,0,0,0,"Bloodspore Firestarter - Out Of Combat - Cast Flaming Touch"), +(@ENTRY,0,1,0,0,0,100,0,0,0,3800,6200,11,20793,64,0,0,0,0,2,0,0,0,0,0,0,0,"Bloodspore Firestarter - In Combat CMC - Cast Fireball"); + +-- Citizen of New Avalon SAI +SET @ENTRY := 28941; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@ENTRY,0,1,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,11,52716,2,0,0,0,0,1,0,0,0,0,0,0,0,"Citizen of New Avalon - On Aggro - Cast fear"); From 54b7162f1def59387ecf3c031705f56fa1b10b02 Mon Sep 17 00:00:00 2001 From: Discover- Date: Tue, 17 Dec 2013 09:44:06 +0100 Subject: [PATCH 12/21] Core/SAI: Make SMART_ACTION_SET_INGAME_PHASE_MASK set the phasemask of the target_type instead of always the source calling the action type. --- src/server/game/AI/SmartScripts/SmartScript.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index a272cb79f5..164ace2eb4 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1046,8 +1046,18 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } case SMART_ACTION_SET_INGAME_PHASE_MASK: { - if (WorldObject* baseObj = GetBaseObject()) - baseObj->SetPhaseMask(e.action.ingamePhaseMask.mask, true); + ObjectList* targets = GetTargets(e, unit); + + if (!targets) + break; + + for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) + { + if (!IsUnit(*itr)) + continue; + + (*itr)->ToUnit()->SetPhaseMask(e.action.ingamePhaseMask.mask, true); + } break; } From 20a22662df5442ba9b171f2cde22be50ed75bdc3 Mon Sep 17 00:00:00 2001 From: Discover- Date: Tue, 17 Dec 2013 10:12:23 +0100 Subject: [PATCH 13/21] Core/SAI: Using SMART_ACTION_SET_FOLLOW with target_type 0 (SMART_TARGET_NONE) will now stop the following completely. Fixes 6 scripts in a clean TDB already using this functionality even though it wasn't implemented. --- src/server/game/AI/SmartScripts/SmartAI.cpp | 48 +++++++++++-------- src/server/game/AI/SmartScripts/SmartAI.h | 1 + .../game/AI/SmartScripts/SmartScript.cpp | 3 ++ 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 1c78b97866..1ced9e7967 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -339,27 +339,10 @@ void SmartAI::UpdateAI(uint32 diff) { if (me->FindNearestCreature(mFollowArrivedEntry, INTERACTION_DISTANCE, true)) { - if (Player* player = ObjectAccessor::GetPlayer(*me, mFollowGuid)) - { - if (!mFollowCreditType) - player->RewardPlayerAndGroupAtEvent(mFollowCredit, me); - else - player->GroupEventHappens(mFollowCredit, me); - } - mFollowGuid = 0; - mFollowDist = 0; - mFollowAngle = 0; - mFollowCredit = 0; - mFollowArrivedTimer = 1000; - mFollowArrivedEntry = 0; - mFollowCreditType = 0; - SetDespawnTime(5000); - me->StopMoving(); - me->GetMotionMaster()->MoveIdle(); - StartDespawn(); - GetScript()->ProcessEventsFor(SMART_EVENT_FOLLOW_COMPLETED); + StopFollow(); return; } + mFollowArrivedTimer = 1000; } else @@ -803,7 +786,11 @@ void SmartAI::SetCombatMove(bool on) void SmartAI::SetFollow(Unit* target, float dist, float angle, uint32 credit, uint32 end, uint32 creditType) { if (!target) + { + StopFollow(); return; + } + SetRun(mRun); mFollowGuid = target->GetGUID(); mFollowDist = dist >= 0.0f ? dist : PET_FOLLOW_DIST; @@ -815,6 +802,29 @@ void SmartAI::SetFollow(Unit* target, float dist, float angle, uint32 credit, ui mFollowCreditType = creditType; } +void SmartAI::StopFollow() +{ + if (Player* player = ObjectAccessor::GetPlayer(*me, mFollowGuid)) + { + if (!mFollowCreditType) + player->RewardPlayerAndGroupAtEvent(mFollowCredit, me); + else + player->GroupEventHappens(mFollowCredit, me); + } + + mFollowGuid = 0; + mFollowDist = 0; + mFollowAngle = 0; + mFollowCredit = 0; + mFollowArrivedTimer = 1000; + mFollowArrivedEntry = 0; + mFollowCreditType = 0; + SetDespawnTime(5000); + me->StopMoving(); + me->GetMotionMaster()->MoveIdle(); + StartDespawn(); + GetScript()->ProcessEventsFor(SMART_EVENT_FOLLOW_COMPLETED); +} void SmartAI::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker) { if (invoker) diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 085859a6d8..5c56736a67 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -63,6 +63,7 @@ class SmartAI : public CreatureAI void SetCombatMove(bool on); bool CanCombatMove() { return mCanCombatMove; } void SetFollow(Unit* target, float dist = 0.0f, float angle = 0.0f, uint32 credit = 0, uint32 end = 0, uint32 creditType = 0); + void StopFollow(); void SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker); SmartScript* GetScript() { return &mScript; } diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 164ace2eb4..5043464912 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -825,7 +825,10 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u ObjectList* targets = GetTargets(e, unit); if (!targets) + { + CAST_AI(SmartAI, me->AI())->StopFollow(); break; + } for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) { From b5e333255b38c61deda8d6ae519c51097d5214d2 Mon Sep 17 00:00:00 2001 From: Discover- Date: Tue, 17 Dec 2013 10:23:31 +0100 Subject: [PATCH 14/21] DB/SAI: Fix two wrong action_types that would make the creature cast the Death Touch spell on no target (SMART_TARGET_NONE) instead of move to given target_x/y/z/o co-ordinates. The person who wrote this script accidently used action_type 11 (SMART_ACTION_CAST) instead of 69 (SMART_ACTION_MOVE_TO_POS), and since the action_param1 field of SMART_ACTION_MOVE_TO_POS is the motion id (point id given back to SMART_EVENT_MOVEMENTINFORM), it was set to 5. Ironically, the first parameter of SMART_ACTION_CAST is the spell id and it was spell id 5 is Death Touch. However this script would do nothing because I changed it so that SMART_TARGET_NONE no longer functioned as SMART_TARGET_ACTION_INVOKER in this commit: 9653576cb4cc9449898d6af691c045d68e9361c5. Before this commit, though, it WOULD cast Death Touch. Fun fun fun. --- sql/updates/world/2013_12_17_00_world_sai.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2013_12_17_00_world_sai.sql diff --git a/sql/updates/world/2013_12_17_00_world_sai.sql b/sql/updates/world/2013_12_17_00_world_sai.sql new file mode 100644 index 0000000000..3ebe6e9561 --- /dev/null +++ b/sql/updates/world/2013_12_17_00_world_sai.sql @@ -0,0 +1 @@ +UPDATE `smart_scripts` SET `action_type`=69 WHERE `entryorguid`=137300 AND `id` IN (19,20); From 1f4d585bef865747994d5358f95f06dc86e59a37 Mon Sep 17 00:00:00 2001 From: Discover- Date: Tue, 17 Dec 2013 11:06:07 +0100 Subject: [PATCH 15/21] Core/SAI: In all npc flag related action_types we now check if the target is a creature instead of an unit (creature/player). --- src/server/game/AI/SmartScripts/SmartScript.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 5043464912..e72d9af160 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1145,6 +1145,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (WorldObject* baseObj = GetBaseObject()) baseObj->setActive(e.action.active.state); + break; } case SMART_ACTION_ATTACK_START: @@ -1661,7 +1662,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) - if (IsUnit(*itr)) + if (IsCreature(*itr)) (*itr)->ToUnit()->SetUInt32Value(UNIT_NPC_FLAGS, e.action.unitFlag.flag); delete targets; @@ -1674,7 +1675,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) - if (IsUnit(*itr)) + if (IsCreature(*itr)) (*itr)->ToUnit()->SetFlag(UNIT_NPC_FLAGS, e.action.unitFlag.flag); delete targets; @@ -1687,7 +1688,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) - if (IsUnit(*itr)) + if (IsCreature(*itr)) (*itr)->ToUnit()->RemoveFlag(UNIT_NPC_FLAGS, e.action.unitFlag.flag); delete targets; From 154ee466eb74c9b5d00a7838c7c6231f2786469b Mon Sep 17 00:00:00 2001 From: Discover- Date: Tue, 17 Dec 2013 11:10:23 +0100 Subject: [PATCH 16/21] Core/SAI: Using the action_type SMART_ACTION_SET_REACT_STATE now sets the react state of the target_type. Won't break any scripts as all current cases of this action_type have target_type 1 (SMART_TARGET_SELF). --- src/server/game/AI/SmartScripts/SmartScript.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index e72d9af160..f0a469496b 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -367,12 +367,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) { if (IsPlayer(*itr)) + { if (Quest const* q = sObjectMgr->GetQuestTemplate(e.action.quest.quest)) { (*itr)->ToPlayer()->AddQuestAndCheckCompletion(q, NULL); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ADD_QUEST: Player guidLow %u add quest %u", (*itr)->GetGUIDLow(), e.action.quest.quest); } + } } delete targets; @@ -380,12 +382,18 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } case SMART_ACTION_SET_REACT_STATE: { - if (!me) + ObjectList* targets = GetTargets(e, unit); + if (!targets) break; - me->SetReactState(ReactStates(e.action.react.state)); - TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_REACT_STATE: Creature guidLow %u set reactstate %u", - me->GetGUIDLow(), e.action.react.state); + for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) + { + if (!IsUnit(*itr)) + continue; + + (*itr)->ToUnit()->SetReactState(ReactStates(e.action.react.state)); + } + break; } case SMART_ACTION_RANDOM_EMOTE: From a0f7fee922e4f568fe24223234461f9824cc7307 Mon Sep 17 00:00:00 2001 From: Discover- Date: Tue, 17 Dec 2013 11:38:29 +0100 Subject: [PATCH 17/21] Core/SAI: Fix compile Core/SAI: Don't limit SMART_ACTION_SET_INGAME_PHASE_MASK to unit targets only. Thanks to @Shauren for the notice. --- src/server/game/AI/SmartScripts/SmartScript.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index f0a469496b..9b97124de6 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -388,10 +388,10 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) { - if (!IsUnit(*itr)) + if (!IsCreature(*itr)) continue; - (*itr)->ToUnit()->SetReactState(ReactStates(e.action.react.state)); + (*itr)->ToCreature()->SetReactState(ReactStates(e.action.react.state)); } break; @@ -1064,10 +1064,10 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) { - if (!IsUnit(*itr)) - continue; - - (*itr)->ToUnit()->SetPhaseMask(e.action.ingamePhaseMask.mask, true); + if (IsUnit(*itr)) + (*itr)->ToUnit()->SetPhaseMask(e.action.ingamePhaseMask.mask, true); + else if (IsGameObject(*itr)) + (*itr)->ToGameObject()->SetPhaseMask(e.action.ingamePhaseMask.mask, true); } break; From e5f7beecf5fabefa13fbe2645cc7d7ca707e46e8 Mon Sep 17 00:00:00 2001 From: Discover- Date: Wed, 18 Dec 2013 10:06:19 +0100 Subject: [PATCH 18/21] Core/SAI: Using SMART_ACTION_FORCE_DESPAWN now despawns the given target_type instead of always the creature itself. --- .../game/AI/SmartScripts/SmartScript.cpp | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 9b97124de6..a36621f87d 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1040,18 +1040,24 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } case SMART_ACTION_FORCE_DESPAWN: { - if (!IsSmart()) + ObjectList* targets = GetTargets(e, unit); + + if (!targets) break; - // The AI is only updated if the creature is alive - if (me->IsAlive()) + for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) { - CAST_AI(SmartAI, me->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick - CAST_AI(SmartAI, me->AI())->StartDespawn(); + if (!IsCreature(*itr)) + continue; + + if ((*itr)->ToUnit()->IsAlive() && IsSmart((*itr)->ToCreature())) + { + CAST_AI(SmartAI, (*itr)->ToCreature()->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick + CAST_AI(SmartAI, (*itr)->ToCreature()->AI())->StartDespawn(); + } + else + (*itr)->ToCreature()->DespawnOrUnsummon(e.action.forceDespawn.delay); } - // Otherwise we call the despawn directly - else - me->DespawnOrUnsummon(e.action.forceDespawn.delay); break; } From 676baa890fc8d32b883f6eed581fb708e49a2493 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Wed, 18 Dec 2013 18:06:30 -0330 Subject: [PATCH 19/21] Scripting/Dragonblight: Commander Eligor Dawnbringer now scripted. Purely cosmetic but it was a fun thing to script :) --- .../world/2013_12_18_00_world_misc.sql | 161 +++++++++ .../scripts/Northrend/zone_dragonblight.cpp | 336 +++++++++++++++++- 2 files changed, 492 insertions(+), 5 deletions(-) create mode 100644 sql/updates/world/2013_12_18_00_world_misc.sql diff --git a/sql/updates/world/2013_12_18_00_world_misc.sql b/sql/updates/world/2013_12_18_00_world_misc.sql new file mode 100644 index 0000000000..1ea7b8550e --- /dev/null +++ b/sql/updates/world/2013_12_18_00_world_misc.sql @@ -0,0 +1,161 @@ +-- Add script to Commander Eligor Dawnbringer +UPDATE creature_template SET `AIName`= '',ScriptName = 'npc_commander_eligor_dawnbringer' WHERE entry=27784; + +-- NPC talk text insert for Commander Eligor Dawnbringer +DELETE FROM `creature_text` WHERE `entry`=27784; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(27784,0,0, 'Next, I shall speak of the most powerful entities within the pinnacle of Naxxramas. Truly, these are two of the greatest threats to all of Northrend.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - Pinnacle of Naxxramas'), +(27784,1,0, 'Next, I shall speak of the death knight wing of Naxxramas. Within its corrupted halls, the echo of battle rings day and night, as our finest warriors are corrupted and twisted into the Scourge''s greatest warriors.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - Death knight wing of Naxxramas'), +(27784,2,0, 'Next, I shall speak of the blighted abomination wing of Naxxramas. There, the Scourge develop the strongest and most hideous aberrations of their armies.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - Blighted abomination wing of Naxxramas'), +(27784,3,0, 'Next, I shall speak of the accursed spider wing of Naxxramas. It is there that the Scourge breed even more poisonous and dangerous versions of their kin.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - Accursed spider wing of Naxxramas'), +(27784,4,0, 'Next, I shall speak of the dread plague wing of Naxxramas, where the scourge seek to improve upon the deadly blight which they spread upon Lordaeron.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - Dread plague wing of Naxxramas'), +(27784,5,0, 'I shall leave this image on display for your perusal. Study your opponents'' strengths, for a creature''s strength can also be its weakness.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer - End of talk'), +(27784,6,0, 'Sapphiron. Once a noble blue dragon within the mountains of Northrend, Sapphiron was slain by Arthas during his campaign through the frozen north. Resurrected to serve him, Sapphiron guards Kel''Thuzad''s lair eternally, awaiting those who would dare tresspass upon his master.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,7,0, 'The Lich, Kel''Thuzad. He serves the Lich King without question, a necromancer of great prowess in life, turned to a master of necromancy after his death. It is said he is the most loyal of the Lich King''s subjects.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,8,0, 'Kel''Thuzad has survived trials that would have long since shattered the souls of even the greatest of the Brotherhood. He readily gave his life at Arthas''s hand, later to be brought back - reborn in the power of the Sunwell.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,9,0, 'In the plaguelands, Kel''Thuzad was again defeated by the agents of the Argent Dawn. However, his phylactery was delivered to a false agent of the brotherhood. We have yet to discover who stole his phylactery or why.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,10,0, 'Pay attention. This is Instructor Razuvious, Kel''Thuzad''s appointed trainer of all death knights. It is said that his own technique is so potent, only a disciple of his could possibly withstand his might.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,11,0, 'Gothik, the Harvester. A master of necromancy and conjuration, Gothik is said to be able to beckon forth legions of the undead at a moment''s notice. It is with his guidance that even the weakest of Death Knights can raise the dead.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,12,0, 'The most powerful Death Knights within Naxxramas are the four horsemen. They represent the pinnacle of Kel''Thuzad''s guard. The first, Thane Korth''azz, holds the power of flame.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,13,0, 'The next, Lady Blaumeux, calls forth the power of shadows, drawing the souls of the living into the voracious embrace.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,14,0, 'Sir Zeliek, a paladin in life, so strong in his faith, that even in undeath, the power of the light still heeds his call, smiting his foes in battle.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,15,0, 'The final Death Knight, Lord Mograine, was the finest warrior that the Death Knights had ever seen. However, after the events in Azeroth, he vanished without a trace. Kel''Thuzad has appointed Baron Rivendare in his place.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,16,0, 'Behold, Patchwerk. When word of his existence first reached the ears of the Brotherhood, none believed the tales of an abomination with such immense speed and strength. Fewer still believed it when he fell the first time...',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,17,0, 'Grobbulus, the first of what was to be an army of flesh giants. It carried the plague slime of Naxxramas within its body, injecting the living ooze into the bodies of its foe. The recipient of this foul injection would usually flee to his allies, bringing them down with him.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,18,0, 'Gluth, the foul plague-dog of Naxxramas, was said to have an appetitie so voracious that even the living were not enough to satisfy his hunger. Feugen was said to feed him an army of Zombies daily, recycling the remains of undead too weak to use in combat.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,19,0, 'Thaddius, built from the flesh of women and children, it is said that their souls are fused together - eternally bound within that foul prison of flesh.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,20,0, 'Anub''Rekhan, one of the finest Spider Lords of Azjol''Nerub, was brought under the control of the Scourge when he and his former commander, Anub''arak, were finally defeated by the Lich King many years ago. It is said that he was the most loyal of Anub''arak''s commanders.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,21,0, 'The Grand Widow Faerlina, a botanist in life, breeder and caretaker of arachnids in death, she oversees the spider wing, developing the most potent of poisons for the Lich King.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,22,0, 'Maexxna, born deep within the mountains of Northrend many ages ago, she was captured within the dread citadel Naxxramas, where she gives birth to her brood, feeding them the corpses of all who dare venture too deeply into Naxxramas.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,23,0, 'Behold, Noth, the Plaguebringer. Responsible for the creation of the process that distills the souls of the living and places them within the cold cage of undeath, Noth was observed to be refining this process even now.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,24,0, 'Observe, Heigan the Unclean. The mastermind behind the plague cauldrons that turned the wilderness of Azeroth into the Plaguelands.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,25,0, 'It is said that Heigan has rigged the very walls and floors of Naxxramas itself with a vast array of traps, which he can trigger at will.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'), +(27784,26,0, 'Loatheb. The hideous result of fusing the living plague of the plaguelands with the bog beasts of Azeroth, Loatheb is said to control the power of healing itself.',12,7,100,0,0,0, 'Commander Eligor Dawnbringer'); + +-- 7th Legion Sentinel SAI +SET @ENTRY := 27162; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=@ENTRY) AND `emote`=376; +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,258,376, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,18950,0,0,0,0,0,1,0,0,0,0,0,0,0,"7th Legion Sentinel - On Spawn - Cast Invisibility and Stealth Detection"), +(@ENTRY,0,1,0,0,0,100,0,0,0,2300,3900,11,15547,64,0,0,0,0,2,0,0,0,0,0,0,0,"7th Legion Sentinel - In Combat CMC - Cast Shoot"), +(@ENTRY,0,2,0,0,0,100,0,9000,14000,17000,22000,11,49481,1,0,0,0,0,5,0,0,0,0,0,0,0,"7th Legion Sentinel - In Combat - Cast Glaive Throw"); + +-- Remove some duplicate spawns +DELETE FROM `creature` WHERE `guid` IN (131126, 131132, 131133, 131251, 131253, 131182, 131183, 107389, 107814, 131184, 131249); +DELETE FROM `creature_addon` WHERE `guid` IN (131126, 131132, 131133, 131251, 131253, 131182, 131183, 107389, 107814, 131184, 131249); + +-- remove random movement +UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `guid`=133347; + +UPDATE `creature` SET `id`=27776 WHERE `guid`=107609; +UPDATE `creature` SET `modelid`=0, `curhealth`=1 WHERE `id` IN (27766,27768,27773,27776,27779); +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (27766,27768,27773,27776,27779); + +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` BETWEEN 27766 AND 27782; +DELETE FROM `creature_template_addon` WHERE `entry` BETWEEN 27766 AND 27782; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`) VALUES +(27766,0,1),(27767,0,1),(27768,0,1),(27769,0,1),(27770,0,1),(27771,0,1), +(27772,0,1),(27773,0,1),(27774,0,1),(27775,0,1),(27776,0,1),(27777,0,1), +(27778,0,1),(27779,0,1),(27780,0,1),(27781,0,1),(27782,0,1); + +-- Commander Eligor Dawnbringer and gang +UPDATE `creature` SET `position_x`=3798.05,`position_y`=-680.611,`position_z`=222.9825, `orientation`=6.038839 WHERE `guid`=133420; +UPDATE `creature` SET `orientation`=3.384053 WHERE `guid`=131157; +UPDATE `creature` SET `orientation`=3.649463 WHERE `guid`=131171; +UPDATE `creature` SET `orientation`=3.633209 WHERE `guid`=133210; +UPDATE `creature` SET `orientation`=1.793558 WHERE `guid`=131154; +UPDATE `creature` SET `orientation`=1.942263 WHERE `guid`=131155; +UPDATE `creature` SET `orientation`=2.368085 WHERE `guid`=131170; +UPDATE `creature` SET `orientation`=2.026036 WHERE `guid`=133225; +UPDATE `creature` SET `orientation`=3.397538 WHERE `guid`=133227; +UPDATE `creature` SET `orientation`=3.839286 WHERE `guid`=131172; +UPDATE `creature` SET `orientation`=2.225338 WHERE `guid`=131173; + +-- Condition for spell targets +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=49519; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 49519, 0, 0, 31, 0, 3, 23033, 0, 0, 0, 0, '', 'Heroic Image Channel Targets Invisible Stalker (Floating)'); + +-- Pathing for Invisible Stalker (Floating) Entry: 23033 +SET @NPC := 131250; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3804.403,`position_y`=-695.9564,`position_z`=224.0008 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3804.403,-695.9564,224.0008,0,0,0,0,100,0), +(@PATH,2,3805.12,-693.7753,224.1427,0,0,0,0,100,0), +(@PATH,3,3807.3,-691.3777,224.4204,0,0,0,0,100,0), +(@PATH,4,3811.286,-692.7845,224.0623,0,0,0,0,100,0), +(@PATH,5,3813.058,-695.1207,224.999,0,0,0,0,100,0), +(@PATH,6,3813.632,-697.7827,224.9997,0,0,0,0,100,0), +(@PATH,7,3812.425,-700.1073,224.0008,0,0,0,0,100,0), +(@PATH,8,3809.649,-700.7341,224.0008,0,0,0,0,100,0), +(@PATH,9,3805.123,-698.4109,224.0008,0,0,0,0,100,0); + +-- Pathing for Invisible Stalker (Floating) Entry: 23033 +SET @NPC := 131252; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3804.225,`position_y`=-669.8109,`position_z`=224.8465 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3804.225,-669.8109,224.8465,0,0,0,0,100,0), +(@PATH,2,3806.744,-669.3193,224.8465,0,0,0,0,100,0), +(@PATH,3,3809.637,-670.4093,224.8465,0,0,0,0,100,0), +(@PATH,4,3810.651,-674.6262,224.8465,0,0,0,0,100,0), +(@PATH,5,3808.057,-677.2673,224.8465,0,0,0,0,100,0), +(@PATH,6,3804.191,-676.4904,224.8465,0,0,0,0,100,0), +(@PATH,7,3802.311,-673.4647,224.8465,0,0,0,0,100,0); + +-- Pathing for Invisible Stalker (Floating) Entry: 23033 +SET @NPC := 133899; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3816.468,`position_y`=-672.7212,`position_z`=224.0009 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3816.468,-672.7212,224.0009,0,0,0,0,100,0), +(@PATH,2,3819.056,-673.5551,222.9989,0,0,0,0,100,0), +(@PATH,3,3820.681,-676.2151,224.0009,0,0,0,0,100,0), +(@PATH,4,3819.998,-679.0777,224.0009,0,0,0,0,100,0), +(@PATH,5,3815.454,-680.2464,224.0009,0,0,0,0,100,0), +(@PATH,6,3813.004,-677.2374,224.0009,0,0,0,0,100,0), +(@PATH,7,3814.027,-673.7756,224.0009,0,0,0,0,100,0); + +-- Pathing for Invisible Stalker (Floating) Entry: 23033 +SET @NPC := 133894; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3805.747,`position_y`=-687.1393,`position_z`=224.1568 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3805.747,-687.1393,224.1568,0,0,0,0,100,0), +(@PATH,2,3804.891,-684.0416,224.1568,0,0,0,0,100,0), +(@PATH,3,3807.519,-679.4173,224.1568,0,0,0,0,100,0), +(@PATH,4,3811.978,-681.2499,224.1568,0,0,0,0,100,0), +(@PATH,5,3811.325,-686.3337,224.1568,0,0,0,0,100,0), +(@PATH,6,3808.847,-687.7697,224.1568,0,0,0,0,100,0); + +-- Pathing for Invisible Stalker (Floating) Entry: 23033 +SET @NPC := 133900; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3794.607,`position_y`=-693.5101,`position_z`=224.7538 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3794.607,-693.5101,224.7538,0,0,0,0,100,0), +(@PATH,2,3794.899,-689.9442,224.7538,0,0,0,0,100,0), +(@PATH,3,3798.899,-687.9035,224.7538,0,0,0,0,100,0), +(@PATH,4,3802.577,-690.2576,224.7538,0,0,0,0,100,0), +(@PATH,5,3801.8,-694.2828,224.7538,0,0,0,0,100,0), +(@PATH,6,3797.656,-695.3698,224.7538,0,0,0,0,100,0); diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 76ce586aa9..2c311e20a7 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -37,6 +37,331 @@ EndContentData */ #include "CombatAI.h" #include "Player.h" +/*##### +# npc_commander_eligor_dawnbringer +#####*/ + +enum CommanderEligorDawnbringer +{ + MODEL_IMAGE_OF_KELTHUZAD = 24787, // Image of Kel'Thuzad + MODEL_IMAGE_OF_SAPPHIRON = 24788, // Image of Sapphiron + MODEL_IMAGE_OF_RAZUVIOUS = 24799, // Image of Razuvious + MODEL_IMAGE_OF_GOTHIK = 24804, // Image of Gothik + MODEL_IMAGE_OF_THANE = 24802, // Image of Thane Korth'azz + MODEL_IMAGE_OF_BLAUMEUX = 24794, // Image of Lady Blaumeux + MODEL_IMAGE_OF_ZELIEK = 24800, // Image of Sir Zeliek + MODEL_IMAGE_OF_PATCHWERK = 24798, // Image of Patchwerk + MODEL_IMAGE_OF_GROBBULUS = 24792, // Image of Grobbulus + MODEL_IMAGE_OF_THADDIUS = 24801, // Image of Thaddius + MODEL_IMAGE_OF_GLUTH = 24803, // Image of Gluth + MODEL_IMAGE_OF_ANUBREKHAN = 24789, // Image of Anub'rekhan + MODEL_IMAGE_OF_FAERLINA = 24790, // Image of Faerlina + MODEL_IMAGE_OF_MAEXXNA = 24796, // Image of Maexxna + MODEL_IMAGE_OF_NOTH = 24797, // Image of Noth + MODEL_IMAGE_OF_HEIGAN = 24793, // Image of Heigan + MODEL_IMAGE_OF_LOATHEB = 24795, // Image of Loatheb + + NPC_IMAGE_OF_KELTHUZAD = 27766, // Image of Kel'Thuzad + NPC_IMAGE_OF_SAPPHIRON = 27767, // Image of Sapphiron + NPC_IMAGE_OF_RAZUVIOUS = 27768, // Image of Razuvious + NPC_IMAGE_OF_GOTHIK = 27769, // Image of Gothik + NPC_IMAGE_OF_THANE = 27770, // Image of Thane Korth'azz + NPC_IMAGE_OF_BLAUMEUX = 27771, // Image of Lady Blaumeux + NPC_IMAGE_OF_ZELIEK = 27772, // Image of Sir Zeliek + NPC_IMAGE_OF_PATCHWERK = 27773, // Image of Patchwerk + NPC_IMAGE_OF_GROBBULUS = 27774, // Image of Grobbulus + NPC_IMAGE_OF_THADDIUS = 27775, // Image of Thaddius + NPC_IMAGE_OF_GLUTH = 27782, // Image of Gluth + NPC_IMAGE_OF_ANUBREKHAN = 27776, // Image of Anub'rekhan + NPC_IMAGE_OF_FAERLINA = 27777, // Image of Faerlina + NPC_IMAGE_OF_MAEXXNA = 27778, // Image of Maexxna + NPC_IMAGE_OF_NOTH = 27779, // Image of Noth + NPC_IMAGE_OF_HEIGAN = 27780, // Image of Heigan + NPC_IMAGE_OF_LOATHEB = 27781, // Image of Loatheb + + NPC_INFANTRYMAN = 27160, // Add in case I randomize the spawning + NPC_SENTINAL = 27162, + NPC_BATTLE_MAGE = 27164, + + // Five platforms to choose from + SAY_PINNACLE = 0, + SAY_DEATH_KNIGHT_WING = 1, + SAY_ABOMINATION_WING = 2, + SAY_SPIDER_WING = 3, + SAY_PLAGUE_WING = 4, + // Used in all talks + SAY_TALK_COMPLETE = 5, + // Pinnacle of Naxxramas + SAY_SAPPHIRON = 6, + SAY_KELTHUZAD_1 = 7, + SAY_KELTHUZAD_2 = 8, + SAY_KELTHUZAD_3 = 9, + // Death knight wing of Naxxramas + SAY_RAZUVIOUS = 10, + SAY_GOTHIK = 11, + SAY_DEATH_KNIGHTS_1 = 12, + SAY_DEATH_KNIGHTS_2 = 13, + SAY_DEATH_KNIGHTS_3 = 14, + SAY_DEATH_KNIGHTS_4 = 15, + // Blighted abomination wing of Naxxramas + SAY_PATCHWERK = 16, + SAY_GROBBULUS = 17, + SAY_GLUTH = 18, + SAY_THADDIUS = 19, + // Accursed spider wing of Naxxramas + SAY_ANUBREKHAN = 20, + SAY_FAERLINA = 21, + SAY_MAEXXNA = 22, + // Dread plague wing of Naxxramas + SAY_NOTH = 23, + SAY_HEIGAN_1 = 24, + SAY_HEIGAN_2 = 25, + SAY_LOATHEB = 26, + + SPELL_HEROIC_IMAGE_CHANNEL = 49519, + + EVENT_START_RANDOM = 1, + EVENT_MOVE_TO_POINT = 2, + EVENT_TALK_COMPLETE = 3, + EVENT_GET_TARGETS = 4, + EVENT_KELTHUZAD_2 = 5, + EVENT_KELTHUZAD_3 = 6, + EVENT_DEATH_KNIGHTS_2 = 7, + EVENT_DEATH_KNIGHTS_3 = 8, + EVENT_DEATH_KNIGHTS_4 = 9, + EVENT_HEIGAN_2 = 10 +}; + +uint32 const AudienceMobs[3] = { NPC_INFANTRYMAN, NPC_SENTINAL, NPC_BATTLE_MAGE }; + +Position const PosTalkLocations[6] = +{ + { 3805.453f, -682.9075f, 222.2917f, 2.793398f }, // Pinnacle of Naxxramas + { 3807.508f, -691.0882f, 221.9688f, 2.094395f }, // Death knight wing of Naxxramas + { 3797.228f, -690.3555f, 222.5019f, 1.134464f }, // Blighted abomination wing of Naxxramas + { 3804.038f, -672.3098f, 222.5019f, 4.578917f }, // Accursed spider wing of Naxxramas + { 3815.097f, -680.2596f, 221.9777f, 2.86234f }, // Dread plague wing of Naxxramas + { 3798.05f, -680.611f, 222.9825f, 6.038839f }, // Home +}; + +class npc_commander_eligor_dawnbringer : public CreatureScript +{ + public: npc_commander_eligor_dawnbringer() : CreatureScript("npc_commander_eligor_dawnbringer") {} + + struct npc_commander_eligor_dawnbringerAI : public ScriptedAI + { + npc_commander_eligor_dawnbringerAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() OVERRIDE + { + talkWing = 0; + memset(audienceList, 0, sizeof(audienceList)); + memset(imageList, 0, sizeof(imageList)); + _events.ScheduleEvent(EVENT_GET_TARGETS, 5000); + _events.ScheduleEvent(EVENT_START_RANDOM, 20000); + } + + void MovementInform(uint32 type, uint32 id) OVERRIDE + { + if (type == POINT_MOTION_TYPE) + { + if (id == 1) + { + me->SetFacingTo(PosTalkLocations[talkWing].m_orientation); + TurnAudience(); + + switch (talkWing) + { + case 0: // Pinnacle of Naxxramas + { + switch (urand (0, 1)) + { + case 0: ChangeImage(NPC_IMAGE_OF_KELTHUZAD, MODEL_IMAGE_OF_KELTHUZAD, SAY_KELTHUZAD_1); + _events.ScheduleEvent(EVENT_KELTHUZAD_2, 8000); break; + case 1: ChangeImage(NPC_IMAGE_OF_SAPPHIRON, MODEL_IMAGE_OF_SAPPHIRON, SAY_SAPPHIRON); break; + } + } + break; + case 1: // Death knight wing of Naxxramas + { + switch (urand (0, 2)) + { + case 0: ChangeImage(NPC_IMAGE_OF_RAZUVIOUS, MODEL_IMAGE_OF_RAZUVIOUS, SAY_RAZUVIOUS); break; + case 1: ChangeImage(NPC_IMAGE_OF_GOTHIK, MODEL_IMAGE_OF_GOTHIK, SAY_GOTHIK); break; + case 2: ChangeImage(NPC_IMAGE_OF_THANE, MODEL_IMAGE_OF_THANE, SAY_DEATH_KNIGHTS_1); + _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_2, 10000); break; + } + } + break; + case 2: // Blighted abomination wing of Naxxramas + { + switch (urand (0, 3)) + { + case 0: ChangeImage(NPC_IMAGE_OF_PATCHWERK, MODEL_IMAGE_OF_PATCHWERK, SAY_PATCHWERK); break; + case 1: ChangeImage(NPC_IMAGE_OF_GROBBULUS, MODEL_IMAGE_OF_GROBBULUS, SAY_GROBBULUS); break; + case 2: ChangeImage(NPC_IMAGE_OF_THADDIUS, MODEL_IMAGE_OF_THADDIUS, SAY_THADDIUS); break; + case 3: ChangeImage(NPC_IMAGE_OF_GLUTH, MODEL_IMAGE_OF_GLUTH, SAY_GLUTH); break; + } + } + break; + case 3: // Accursed spider wing of Naxxramas + { + switch (urand (0, 2)) + { + case 0: ChangeImage(NPC_IMAGE_OF_ANUBREKHAN, MODEL_IMAGE_OF_ANUBREKHAN, SAY_ANUBREKHAN); break; + case 1: ChangeImage(NPC_IMAGE_OF_FAERLINA, MODEL_IMAGE_OF_FAERLINA, SAY_FAERLINA); break; + case 2: ChangeImage(NPC_IMAGE_OF_MAEXXNA, MODEL_IMAGE_OF_MAEXXNA, SAY_MAEXXNA); break; + } + } + break; + case 4: // Dread plague wing of Naxxramas + { + switch (urand (0, 2)) + { + case 0: ChangeImage(NPC_IMAGE_OF_NOTH, MODEL_IMAGE_OF_NOTH, SAY_NOTH); break; + case 1: ChangeImage(NPC_IMAGE_OF_HEIGAN, MODEL_IMAGE_OF_HEIGAN, SAY_HEIGAN_1); + _events.ScheduleEvent(EVENT_HEIGAN_2, 8000); break; + case 2: ChangeImage(NPC_IMAGE_OF_LOATHEB, MODEL_IMAGE_OF_LOATHEB, SAY_LOATHEB); break; + } + } + break; + case 5: // Home + _events.ScheduleEvent(EVENT_START_RANDOM, 30000); + break; + } + } + } + } + + void StoreTargets() + { + uint8 creaturecount; + + creaturecount = 0; + + for (uint8 ii = 0; ii < 3; ++ii) + { + std::list creatureList; + GetCreatureListWithEntryInGrid(creatureList, me, AudienceMobs[ii], 15.0f); + for (std::list::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) + { + if (Creature* creatureList = *itr) + { + audienceList[creaturecount] = creatureList->GetGUID(); + ++creaturecount; + } + } + } + + if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_KELTHUZAD, 20.0f, true)) + imageList[0] = creature->GetGUID(); + if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_RAZUVIOUS, 20.0f, true)) + imageList[1] = creature->GetGUID(); + if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_PATCHWERK, 20.0f, true)) + imageList[2] = creature->GetGUID(); + if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_ANUBREKHAN, 20.0f, true)) + imageList[3] = creature->GetGUID(); + if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_NOTH, 20.0f, true)) + imageList[4] = creature->GetGUID(); + } + + void ChangeImage(uint32 entry, uint32 model, uint8 text) + { + if (Creature* creature = ObjectAccessor::GetCreature(*me, imageList[talkWing])) + { + Talk(text); + creature->SetEntry(entry); + creature->SetDisplayId(model); + creature->CastSpell(creature, SPELL_HEROIC_IMAGE_CHANNEL); + _events.ScheduleEvent(EVENT_TALK_COMPLETE, 40000); + } + } + + void TurnAudience() + { + for (uint8 i = 0; i < 10; ++i) + { + if (Creature* creature = ObjectAccessor::GetCreature(*me, audienceList[i])) + creature->SetFacingToObject(me); + } + } + + void UpdateAI(uint32 diff) OVERRIDE + { + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_START_RANDOM: + talkWing = urand (0, 4); + Talk(talkWing); + _events.ScheduleEvent(EVENT_MOVE_TO_POINT, 8000); + break; + case EVENT_MOVE_TO_POINT: + me->SetWalk(true); + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MovePoint(1, PosTalkLocations[talkWing].m_positionX, PosTalkLocations[talkWing].m_positionY, PosTalkLocations[talkWing].m_positionZ); + break; + case EVENT_TALK_COMPLETE: + talkWing = 5; + Talk(talkWing); + _events.ScheduleEvent(EVENT_MOVE_TO_POINT, 5000); + break; + case EVENT_GET_TARGETS: + StoreTargets(); + break; + case EVENT_KELTHUZAD_2: + Talk(SAY_KELTHUZAD_2); + _events.ScheduleEvent(EVENT_KELTHUZAD_3, 8000); + break; + case EVENT_KELTHUZAD_3: + Talk(SAY_KELTHUZAD_3); + break; + case EVENT_DEATH_KNIGHTS_2: + Talk(SAY_DEATH_KNIGHTS_2); + if (Creature* creature = ObjectAccessor::GetCreature(*me, imageList[talkWing])) + { + creature->SetEntry(NPC_IMAGE_OF_BLAUMEUX); + creature->SetDisplayId(MODEL_IMAGE_OF_BLAUMEUX); + } + _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_3, 10000); + break; + case EVENT_DEATH_KNIGHTS_3: + Talk(SAY_DEATH_KNIGHTS_3); + if (Creature* creature = ObjectAccessor::GetCreature(*me, imageList[talkWing])) + { + creature->SetEntry(NPC_IMAGE_OF_ZELIEK); + creature->SetDisplayId(MODEL_IMAGE_OF_ZELIEK); + } + _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_4, 10000); + break; + case EVENT_DEATH_KNIGHTS_4: + Talk(SAY_DEATH_KNIGHTS_4); + break; + case EVENT_HEIGAN_2: + Talk(SAY_HEIGAN_2); + break; + default: + break; + } + } + DoMeleeAttackIfReady(); + } + private: + EventMap _events; + uint64 audienceList[10]; + uint64 imageList[5]; + uint8 talkWing; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_commander_eligor_dawnbringerAI(creature); + } +}; + enum AlexstraszaWrGate { // Quest @@ -405,9 +730,10 @@ class npc_torturer_lecraft : public CreatureScript void AddSC_dragonblight() { - new npc_alexstrasza_wr_gate; - new spell_q12096_q12092_dummy; - new spell_q12096_q12092_bark; - new npc_wyrmrest_defender; - new npc_torturer_lecraft; + new npc_commander_eligor_dawnbringer(); + new npc_alexstrasza_wr_gate(); + new spell_q12096_q12092_dummy(); + new spell_q12096_q12092_bark(); + new npc_wyrmrest_defender(); + new npc_torturer_lecraft(); } From cb3825266af963821dc362c7b12d3e69f4f9f3ea Mon Sep 17 00:00:00 2001 From: Malcrom Date: Wed, 18 Dec 2013 18:20:40 -0330 Subject: [PATCH 20/21] DB/SAI: Some SAI updates to remove dup aura errors and some additions. --- sql/updates/world/2013_12_18_01_world_sai.sql | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 sql/updates/world/2013_12_18_01_world_sai.sql diff --git a/sql/updates/world/2013_12_18_01_world_sai.sql b/sql/updates/world/2013_12_18_01_world_sai.sql new file mode 100644 index 0000000000..5c494ce925 --- /dev/null +++ b/sql/updates/world/2013_12_18_01_world_sai.sql @@ -0,0 +1,173 @@ +-- Dragonflayer Metalworker SAI +SET @ENTRY := 24078; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,1,233, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=4; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,4,0,11,0,100,6,0,0,0,0,11,43929,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Metalworker - On Spawn - Cast Fiery Weapon Proc"); +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ENTRY,0,0, '%s goes into a frenzy!',16,0,100,0,0,0, 'Dragonflayer Metalworker'); + +-- Zeth'Gor Quest Credit Marker, They Must Burn, Tower Foothill +SET @ENTRY := 24078; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,4097,0, ''); + +-- Plagued Dragonflayer Handler SAI +SET @ENTRY := 24199; +UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=10; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,10,0,11,0,100,6,0,0,0,0,11,21862,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Handler - On Spawn - Cast Radiation"); + +-- Plagued Dragonflayer Tribesman SAI +SET @ENTRY := 23564; +UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=12; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,12,0,11,0,100,6,0,0,0,0,11,21862,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Tribesman - On Spawn - Cast Radiation"); + +-- Murkgill Lord SAI +SET @ENTRY := 4460; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,1000,1000,1800000,1800000,11,12544,1,1,0,0,0,1,0,0,0,0,0,0,0,"Murkgill Lord - Out Of Combat - Cast Frost Armor"), +(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,9672,64,0,0,0,0,2,0,0,0,0,0,0,0,"Murkgill Lord - In Combat CMC - Cast Frostbolt"), +(@ENTRY,0,2,0,0,0,100,0,9800,11100,16100,25700,11,38033,1,1,0,0,0,1,0,0,0,0,0,0,0,"Murkgill Lord - In Combat - Cast Frost Nova"), +(@ENTRY,0,3,0,2,0,100,1,0,0,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Murkgill Lord - Between 0-15% Health - Flee For Assist"); + +-- Fordragon Marksman SAI +SET @ENTRY := 27540; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,65536,258,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,5000,7000,11,32103,64,0,0,0,0,2,0,0,0,0,0,0,0,"Fordragon Marksman - In Combat CMC - Cast Shoot"), +(@ENTRY,0,1,0,0,0,100,0,10000,17000,10000,17000,11,7896,0,0,0,0,0,5,0,0,0,0,0,0,0,"Fordragon Marksman - Between In Combat - Cast Exploding Shot"), +(@ENTRY,0,2,0,0,0,100,0,12000,17000,22000,26000,11,49474,1,0,0,0,0,1,0,0,0,0,0,0,0,"Fordragon Marksman - In Combat - Cast Rapid Shot"); + +-- Sunfury Nethermancer SAI +SET @ENTRY := 20248; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=@ENTRY) AND `bytes1`=0 AND `emote`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,1000,1000,300000,300000,11,36477,1,0,0,0,0,1,0,0,0,0,0,0,0,"Sunfury Nethermancer - Out Of Combat - Cast Summon Mana Beast"), +(@ENTRY,0,1,0,9,0,100,0,500,500,3400,4800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sunfury Nethermancer - Combat CMC - Cast Shadow Bolt"), +(@ENTRY,0,2,0,0,0,100,0,0,0,30000,35000,11,35778,1,0,0,0,0,1,0,0,0,0,0,0,0,"Sunfury Nethermancer - In Combat - Cast Bloodcrystal Surge"), +(@ENTRY,0,3,0,2,0,100,0,0,75,15000,20000,11,17173,1,0,0,0,0,2,0,0,0,0,0,0,0,"Sunfury Nethermancer - Between 0-75% Health - Cast Drain Life"), +(@ENTRY,0,4,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Sunfury Nethermancer - Between 0-15% Health - Flee For Assist"); + +-- Darkspear Axe Thrower SAI +SET @ENTRY := 18970; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,4097,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,10277,64,0,0,0,0,2,0,0,0,0,0,0,0,"Darkspear Axe Thrower - In Combat CMC - Cast Throw"), +(@ENTRY,0,1,0,2,0,100,1,0,0,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Darkspear Axe Thrower - Between 0-15% Health - Flee For Assist"); + +-- Blood of the Old God SAI +SET @ENTRY := 28854; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,52561,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blood of the Old God - On Spawn - Cast Oil Coat"), +(@ENTRY,0,1,0,9,0,100,1,0,2,0,0,11,52564,0,0,0,0,0,1,0,0,0,0,0,0,0,"Blood of the Old God - Range 2 yards - Cast Corruption of the Old God"); + +-- Scourge Necromancer SAI +SET @ENTRY := 31096; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,20298,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scourge Necromancer - In Combat CMC - Cast Shadow Bolt"), +(@ENTRY,0,1,0,0,0,100,0,12000,15000,16000,19000,11,51337,1,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Necromancer - In Combat - Cast Shadowflame"), +(@ENTRY,0,2,0,2,0,100,1,0,0,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scourge Necromancer - At 15% HP - Flee For Assist"); + +-- Venture Co. Geologist SAI +SET @ENTRY := 1096; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,4097,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Venture Co. Geologist - In Combat CMC - Cast 9532"), +(@ENTRY,0,1,0,0,0,100,0,5400,9600,24000,37200,11,184,1,0,0,0,0,1,0,0,0,0,0,0,0,"Venture Co. Geologist - In Combat - Cast 184"), +(@ENTRY,0,2,0,2,0,100,0,0,50,10100,19800,11,4979,1,0,0,0,0,1,0,0,0,0,0,0,0,"Venture Co. Geologist - Between 0-50% Health - Cast 4979"), +(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Venture Co. Geologist - Between 0-15% Health - Flee For Assist"); + +-- Death Knight Champion +SET @ENTRY := 27288; +UPDATE `creature_template_addon` SET `auras`= '' WHERE `entry`=@ENTRY; + +-- Citizen of New Avalon +SET @ENTRY := 28942; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,1,0, ''); + +-- Deadwood Shaman SAI +SET @ENTRY := 7158; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +UPDATE `creature_addon` SET `bytes2`=4097 WHERE `guid`=40394; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=@ENTRY) AND `path_id`=0; +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,4097,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,1000,1000,600000,600000,11,13585,1,0,0,0,0,1,0,0,0,0,0,0,0,"Deadwood Shaman - Out Of Combat - Cast 13585"), +(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Deadwood Shaman - In Combat CMC - Cast 9532"), +(@ENTRY,0,2,0,0,0,100,0,2500,7000,120000,130000,11,13583,0,0,0,0,0,2,0,0,0,0,0,0,0,"Deadwood Shaman - In Combat - Cast 13583"), +(@ENTRY,0,3,0,0,0,100,0,5500,9000,6500,9500,11,12058,1,0,0,0,0,2,0,0,0,0,0,0,0,"Deadwood Shaman - In Combat - Cast 12058"); + +-- Ahn'kahar Swarmer SAI +SET @ENTRY := 30338; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,1,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,11,0,100,6,0,0,0,0,11,56158,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ahn'kahar Swarmer - On Spawn - Cast Swarm (Dungeon Only)"), +(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,11,56281,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ahn'kahar Swarmer - On Spawn - Cast Swarm (Dungeon Only)"), +(@ENTRY,0,2,0,0,0,100,6,1000,1000,35000,45000,11,56354,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ahn'kahar Swarmer - In Combat - Cast Sprint (Dungeon Only)"); + +-- Deep Crawler SAI +SET @ENTRY := 30279; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY) AND `path_id`=0; +UPDATE `creature_addon` SET `auras`= '' WHERE `guid` IN (SELECT guid FROM creature WHERE id=@ENTRY); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@ENTRY,0,1,0, ''); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,11,0,100,6,0,0,0,0,11,56583,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Crawler - On Spawn - Cast Combined Toxins (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,4000,7000,9000,12000,11,56580,0,0,0,0,0,5,0,0,0,0,0,0,0,"Deep Crawler - In Combat - Cast 56580 (Normal Dungeon)"), +(@ENTRY,0,2,0,0,0,100,4,4000,7000,9000,12000,11,59108,0,0,0,0,0,5,0,0,0,0,0,0,0,"Deep Crawler - In Combat - Cast 59108 (Heroic Dungeon)"), +(@ENTRY,0,3,0,12,0,100,2,0,20,14000,17000,11,56581,33,0,0,0,0,2,0,0,0,0,0,0,0,"Deep Crawler - On Target Between 0-20% Health - Cast 56581 (Normal Dungeon)"), +(@ENTRY,0,4,0,12,0,100,4,0,20,14000,17000,11,59109,33,0,0,0,0,2,0,0,0,0,0,0,0,"Deep Crawler - On Target Between 0-20% Health - Cast 59109 (Heroic Dungeon)"); + +UPDATE `smart_scripts` SET `comment`= "Inquisitor Salrand - On Spawn - Cast Cosmetic - Divine Shield Blue" WHERE `entryorguid`=25584 AND `source_type`=0 AND `id`=5; + +-- Tree Warden Chawn SAI +SET @ENTRY := 22007; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,25000,25000,300000,300000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tree Warden Chawn - Out of Combat - Say text 0"), +(@ENTRY,0,1,0,1,0,100,0,30000,30000,305000,305000,1,0,0,0,0,0,0,19,21983,10,0,0,0,0,0,"Tree Warden Chawn - Out of Combat - Samia Inkling Say text 0"); +DELETE FROM `creature_text` WHERE `entry` IN (22007,21983); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(22007,0,0, 'Samia, do you know who Kolphis Darkscale is?',12,0,100,6,0,0, 'Tree Warden Chawn OOC text'), +(21983,0,0, 'Yes, he''s the second-in-command of the wyrmcult at the Blackwing Coven to the west.',12,0,100,1,0,0, 'Samia Inkling OOC text'); From 18cc0758395896f705a5dfd6e363b06367d617e9 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Wed, 18 Dec 2013 19:02:22 -0330 Subject: [PATCH 21/21] DB/Misc: Fixups for Toshley's Station, Blades Edge. --- .../world/2013_12_18_02_world_misc.sql | 332 ++++++++++++++++++ 1 file changed, 332 insertions(+) create mode 100644 sql/updates/world/2013_12_18_02_world_misc.sql diff --git a/sql/updates/world/2013_12_18_02_world_misc.sql b/sql/updates/world/2013_12_18_02_world_misc.sql new file mode 100644 index 0000000000..a52a71948b --- /dev/null +++ b/sql/updates/world/2013_12_18_02_world_misc.sql @@ -0,0 +1,332 @@ +-- Pathing for Razak Ironsides Entry: 21118 +SET @NPC := 74169; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1898.282,`position_y`=5588.863,`position_z`=267.5799 WHERE `guid`=@NPC; +UPDATE `creature_template_addon` SET `path_id`=@PATH WHERE `entry`=21118; +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1898.282,5588.863,267.5799,0,0,0,0,100,0), +(@PATH,2,1901.311,5591.437,267.5729,2.268928,12000,0,0,100,0), +(@PATH,3,1898.282,5588.863,267.5799,0,0,0,0,100,0), +(@PATH,4,1903.68,5582.878,263.0307,0,0,0,0,100,0), +(@PATH,5,1912.105,5576.249,263.5081,0,0,0,0,100,0), +(@PATH,6,1933.132,5582.547,263.7424,0,0,0,0,100,0), +(@PATH,7,1936.292,5592.606,263.6276,0,0,0,0,100,0), +(@PATH,8,1926.111,5594.334,267.2368,0,0,0,0,100,0), +(@PATH,9,1926.288,5600.459,267.3679,0,0,0,0,100,0), +(@PATH,10,1938.523,5601.16,267.3898,1.448623,10000,0,0,100,0), +(@PATH,11,1926.537,5599.701,267.3592,0,0,0,0,100,0), +(@PATH,12,1926.136,5594.247,267.2361,0,0,0,0,100,0), +(@PATH,13,1935.867,5592.542,263.6276,0,0,0,0,100,0), +(@PATH,14,1941.244,5582.967,263.5026,0,0,0,0,100,0), +(@PATH,15,1947.379,5586.251,263.8776,0,0,0,0,100,0), +(@PATH,16,1953.378,5591.493,268.5281,0,0,0,0,100,0), +(@PATH,17,1956.4,5589.018,268.5525,0.715585,12000,0,0,100,0), +(@PATH,18,1953.378,5591.493,268.5281,0,0,0,0,100,0), +(@PATH,19,1946.525,5585.453,263.715,0,0,0,0,100,0), +(@PATH,20,1941.921,5576.632,263.6276,0,0,0,0,100,0), +(@PATH,21,1947.023,5567.701,263.2973,0,0,0,0,100,0), +(@PATH,22,1952.134,5567.827,262.4904,0,14000,0,0,100,0), +(@PATH,23,1941.256,5567.2,263.1159,0,0,0,0,100,0), +(@PATH,24,1931.549,5558.535,263.5149,0,0,0,0,100,0), +(@PATH,25,1921.011,5561.81,263.1283,0,0,0,0,100,0), +(@PATH,26,1910.488,5564.503,262.6283,0,0,0,0,100,0), +(@PATH,27,1899.725,5566.792,261.2341,2.80998,14000,0,0,100,0), +(@PATH,28,1905.735,5566.743,262.228,0,0,0,0,100,0), +(@PATH,29,1911.517,5567.898,262.866,0,0,0,0,100,0), +(@PATH,30,1913.893,5572.75,263.3232,0,0,0,0,100,0), +(@PATH,31,1910.438,5577.884,263.4108,0,0,0,0,100,0), +(@PATH,32,1903.363,5583.145,263.0307,0,0,0,0,100,0); + +-- Pathing for Station Technician Entry: 21114 +SET @NPC := 74157; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1927.036,`position_y`=5599.061,`position_z`=267.3522 WHERE `guid`=@NPC; +UPDATE `creature_addon` SET `path_id`=@PATH WHERE `guid`=74157; +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1927.036,5599.061,267.3522,0,0,0,0,100,0), +(@PATH,2,1933.268,5600.586,267.3755,0,0,0,0,100,0), +(@PATH,3,1942.31,5599.332,267.372,0,0,0,0,100,0), +(@PATH,4,1933.268,5600.586,267.3755,0,0,0,0,100,0), +(@PATH,5,1927.036,5599.061,267.3522,0,0,0,0,100,0), +(@PATH,6,1933.268,5600.586,267.3755,0,0,0,0,100,0), +(@PATH,7,1942.31,5599.332,267.372,0,0,0,0,100,0), +(@PATH,8,1933.268,5600.586,267.3755,0,0,0,0,100,0), +(@PATH,9,1927.036,5599.061,267.3522,0,0,0,0,100,0), +(@PATH,10,1933.268,5600.586,267.3755,0,0,0,0,100,0), +(@PATH,11,1942.31,5599.332,267.372,0,0,0,0,100,0), +(@PATH,12,1944.908,5599.906,267.3809,0.541052,20000,0,0,100,0); + +UPDATE `creature` SET `spawndist`=5,`MovementType`=1 WHERE `guid`=74216; +UPDATE `creature` SET `spawndist`=10,`MovementType`=1 WHERE `id`=21423; +UPDATE `creature` SET `spawndist`=0,`MovementType`=0 WHERE `guid` IN (74147,74148,74149,74151,74152,74153,74154,74156); +UPDATE `Creature_template` SET InhabitType=4 WHERE `entry`=21757; +UPDATE `creature_template` SET `InhabitType`=4, `flags_extra`=`flags_extra`|128 WHERE `entry` IN (21393,21413,21819); +UPDATE `Creature_template_addon` SET bytes2=258 WHERE `entry`=21115; + +DELETE FROM `creature_template_addon` WHERE `entry`=21441; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`bytes2`,`emote`,`auras`) VALUES (21441,0,258,214, ''); + +-- Station Guard SAI "npc had no ai" +SET @ENTRY := 21115; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3000,3000,11,36246,64,0,0,0,0,2,0,0,0,0,0,0,0,"Station Guard - In Combat - Cast Shoot Tech Gun"); + +-- Station Sharpshooter SAI "npc had no ai" +SET @ENTRY := 21441; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3000,3000,11,36246,64,0,0,0,0,2,0,0,0,0,0,0,0,"Station Sharpshooter - In Combat - Cast Shoot Tech Gun"); + +UPDATE `creature_template` SET `InhabitType`=1 WHERE `entry`=21004; +UPDATE `creature_template` SET `flags_extra`=`flags_extra`|128 WHERE `entry`=21203; +UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `id`=21203; + +-- Pathing for Blade's Edge Invisible Stalker Entry: 21234 +SET @NPC := 74445; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1925.933,`position_y`=5574.994,`position_z`=263.9057 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1925.933,5574.994,263.9057,0,0,0,0,100,0), +(@PATH,2,1923.862,5571.222,264.5634,0,0,0,0,100,0), +(@PATH,3,1918.887,5573.768,263.9057,0,0,0,0,100,0), +(@PATH,4,1918.378,5580.262,263.9057,0,0,0,0,100,0), +(@PATH,5,1921.742,5581.211,263.9057,0,0,0,0,100,0), +(@PATH,6,1921.567,5583.882,263.9057,0,0,0,0,100,0), +(@PATH,7,1918.75,5579.688,263.9057,0,0,0,0,100,0), +(@PATH,8,1918.887,5573.768,263.9057,0,0,0,0,100,0), +(@PATH,9,1923.862,5571.222,264.5634,0,0,0,0,100,0); + +-- Pathing for Blade's Edge Invisible Stalker Entry: 21234 +SET @NPC := 74435; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1930.208,`position_y`=5586.458,`position_z`=263.7807 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1930.208,5586.458,263.7807,0,0,0,0,100,0), +(@PATH,2,1924.03,5583.297,269.222,0,0,0,0,100,0), +(@PATH,3,1920.99,5584.492,269.222,0,0,0,0,100,0), +(@PATH,4,1917.851,5583.545,269.222,0,0,0,0,100,0), +(@PATH,5,1917.235,5581.401,269.222,0,0,0,0,100,0), +(@PATH,6,1918.989,5579.888,269.222,0,0,0,0,100,0), +(@PATH,7,1923.064,5581.889,269.222,0,0,0,0,100,0), +(@PATH,8,1921.47,5580.008,269.222,0,0,0,0,100,0), +(@PATH,9,1917.235,5581.401,269.222,0,0,0,0,100,0), +(@PATH,10,1920.99,5584.492,269.222,0,0,0,0,100,0), +(@PATH,11,1923.452,5583.202,269.222,0,0,0,0,100,0); + +-- Pathing for Blade's Edge Invisible Stalker Entry: 21234 +SET @NPC := 74432; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1923.565,`position_y`=5554.142,`position_z`=264.0841 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1923.565,5554.142,264.0841,0,0,0,0,100,0), +(@PATH,2,1919.271,5553.125,263.7533,0,0,0,0,100,0), +(@PATH,3,1917.914,5550.622,263.8282,0,0,0,0,100,0), +(@PATH,4,1919.061,5546.854,265.3362,0,0,0,0,100,0), +(@PATH,5,1922.396,5545.313,267.0033,0,0,0,0,100,0), +(@PATH,6,1924.869,5545.137,268.5815,0,0,0,0,100,0), +(@PATH,7,1921.442,5545.314,266.4293,0,0,0,0,100,0), +(@PATH,8,1918.229,5550.521,263.8783,0,0,0,0,100,0), +(@PATH,9,1919.271,5552.083,263.8783,0,0,0,0,100,0); + +-- Pathing for Blade's Edge Invisible Stalker Entry: 21234 +SET @NPC := 74441; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1928.164,`position_y`=5571.725,`position_z`=269.162 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1928.164,5571.725,269.162,0,0,0,0,100,0), +(@PATH,2,1928.04,5573.644,269.162,0,0,0,0,100,0), +(@PATH,3,1926.483,5574.808,269.162,0,0,0,0,100,0), +(@PATH,4,1928.04,5573.644,269.162,0,0,0,0,100,0), +(@PATH,5,1924.417,5570.661,269.162,0,0,0,0,100,0), +(@PATH,6,1923.467,5571.99,269.162,0,0,0,0,100,0), +(@PATH,7,1924.153,5574.196,269.162,0,0,0,0,100,0), +(@PATH,8,1923.467,5571.99,269.162,0,0,0,0,100,0); + +-- Pathing for Blade's Edge Invisible Stalker Entry: 21234 +SET @NPC := 74433; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1927.253,`position_y`=5578.909,`position_z`=263.9057 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1927.253,5578.909,263.9057,0,0,0,0,100,0), +(@PATH,2,1931.318,5580.051,263.9057,0,0,0,0,100,0), +(@PATH,3,1929.688,5578.125,263.9057,0,0,0,0,100,0), +(@PATH,4,1925.712,5578.032,263.9057,0,0,0,0,100,0); + +-- Pathing for Blade's Edge Invisible Stalker Entry: 21234 +SET @NPC := 74434; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1929.118,`position_y`=5532.288,`position_z`=266.8577 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1929.118,5532.288,266.8577,0,0,0,0,100,0), +(@PATH,2,1933.571,5532.64,267.3299,0,0,0,0,100,0), +(@PATH,3,1929.192,5531.739,267.5261,0,0,0,0,100,0), +(@PATH,4,1925.521,5531.25,266.7585,0,0,0,0,100,0), +(@PATH,5,1929.192,5531.739,267.5261,0,0,0,0,100,0), +(@PATH,6,1933.571,5532.64,267.3299,0,0,0,0,100,0), +(@PATH,7,1929.192,5531.739,267.5261,0,0,0,0,100,0), +(@PATH,8,1925.521,5531.25,266.7585,0,0,0,0,100,0), +(@PATH,9,1929.192,5531.739,267.5261,0,0,0,0,100,0), +(@PATH,10,1933.571,5532.64,267.3299,0,0,0,0,100,0), +(@PATH,11,1929.192,5531.739,267.5261,0,0,0,0,100,0), +(@PATH,12,1926.394,5530.808,266.6537,0,0,0,0,100,0), +(@PATH,13,1929.192,5531.739,267.5261,0,0,0,0,100,0), +(@PATH,14,1933.571,5532.64,267.3299,0,0,0,0,100,0), +(@PATH,15,1929.192,5531.739,267.5261,0,0,0,0,100,0), +(@PATH,16,1926.394,5530.808,266.6537,0,0,0,0,100,0), +(@PATH,17,1929.192,5531.739,267.5261,0,0,0,0,100,0), +(@PATH,18,1933.571,5532.64,267.3299,0,0,0,0,100,0), +(@PATH,19,1929.192,5531.739,267.5261,0,0,0,0,100,0), +(@PATH,20,1926.394,5530.808,266.6537,0,0,0,0,100,0), +(@PATH,21,1929.192,5531.739,267.5261,0,0,0,0,100,0), +(@PATH,22,1933.571,5532.64,267.3299,0,0,0,0,100,0), +(@PATH,23,1926.394,5530.808,266.6537,0,0,0,0,100,0); + +-- Pathing for Blade's Edge Invisible Stalker Entry: 21234 +SET @NPC := 74447; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1938.432,`position_y`=5539.722,`position_z`=266.5296 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1938.432,5539.722,266.5296,0,0,0,0,100,0), +(@PATH,2,1937.34,5536.819,266.5726,0,0,0,0,100,0), +(@PATH,3,1937.305,5535.265,266.5568,0,0,0,0,100,0), +(@PATH,4,1938.837,5533.25,266.4304,0,0,0,0,100,0), +(@PATH,5,1937.302,5535.26,266.5613,0,0,0,0,100,0); + +-- Pathing for Blade's Edge Invisible Stalker Entry: 21234 +SET @NPC := 74448; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1958.761,`position_y`=5585.456,`position_z`=268.5192 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1958.761,5585.456,268.5192,0,0,0,0,100,0), +(@PATH,2,1957.849,5587.807,268.5635,0,0,0,0,100,0); + +-- Pathing for Blade's Edge Invisible Stalker Entry: 21234 +SET @NPC := 74427; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1905.77,`position_y`=5550.124,`position_z`=263.926 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1905.77,5550.124,263.926,0,0,0,0,100,0), +(@PATH,2,1906.093,5546.895,264.1884,0,0,0,0,100,0), +(@PATH,3,1903.544,5544.234,264.8871,0,0,0,0,100,0), +(@PATH,4,1898.493,5549.161,264.5766,0,0,0,0,100,0), +(@PATH,5,1903.544,5544.234,264.8871,0,0,0,0,100,0), +(@PATH,6,1906.093,5546.895,264.1884,0,0,0,0,100,0), +(@PATH,7,1905.77,5550.124,263.926,0,0,0,0,100,0), +(@PATH,8,1902.604,5552.604,263.7533,0,0,0,0,100,0); + +-- Pathing for Blade's Edge Invisible Stalker Entry: 21234 +SET @NPC := 74430; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1885.685,`position_y`=5573.016,`position_z`=260.2205 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1885.685,5573.016,260.2205,0,0,0,0,100,0), +(@PATH,2,1903.292,5566.08,261.9607,0,0,0,0,100,0), +(@PATH,3,1895.033,5554.773,264.8015,0,0,0,0,100,0), +(@PATH,4,1879.357,5548.936,268.2559,0,0,0,0,100,0), +(@PATH,5,1867.17,5544.657,273.0115,0,0,0,0,100,0), +(@PATH,6,1853.044,5537.785,276.9887,0,0,0,0,100,0), +(@PATH,7,1863.808,5542.95,274.4838,0,0,0,0,100,0), +(@PATH,8,1871.133,5545.963,271.3029,0,0,0,0,100,0), +(@PATH,9,1884.797,5550.7,266.1573,0,0,0,0,100,0), +(@PATH,10,1900.419,5557.055,263.4814,0,0,0,0,100,0), +(@PATH,11,1911.849,5555.216,263.1897,0,0,0,0,100,0), +(@PATH,12,1915.648,5534.096,267.2911,0,0,0,0,100,0), +(@PATH,13,1926.042,5532.813,266.6335,0,0,0,0,100,0), +(@PATH,14,1934.861,5540.538,266.9522,0,0,0,0,100,0), +(@PATH,15,1935.881,5550.045,265.9952,0,0,0,0,100,0), +(@PATH,16,1919.127,5569.151,263.7807,0,0,0,0,100,0), +(@PATH,17,1922.958,5581.576,263.9057,0,0,0,0,100,0), +(@PATH,18,1897.795,5574.03,261.5737,0,0,0,0,100,0), +(@PATH,19,1922.958,5581.576,263.9057,0,0,0,0,100,0), +(@PATH,20,1919.127,5569.151,263.7807,0,0,0,0,100,0), +(@PATH,21,1935.881,5550.045,265.9952,0,0,0,0,100,0), +(@PATH,22,1934.861,5540.538,266.9522,0,0,0,0,100,0), +(@PATH,23,1926.632,5533.106,266.6335,0,0,0,0,100,0), +(@PATH,24,1915.648,5534.096,267.2911,0,0,0,0,100,0), +(@PATH,25,1911.849,5555.216,263.1897,0,0,0,0,100,0), +(@PATH,26,1900.419,5557.055,263.4814,0,0,0,0,100,0), +(@PATH,27,1884.797,5550.7,266.1573,0,0,0,0,100,0), +(@PATH,28,1871.133,5545.963,271.3029,0,0,0,0,100,0), +(@PATH,29,1863.808,5542.95,274.4838,0,0,0,0,100,0), +(@PATH,30,1853.044,5537.785,276.9887,0,0,0,0,100,0), +(@PATH,31,1867.17,5544.657,273.0115,0,0,0,0,100,0), +(@PATH,32,1879.357,5548.936,268.2559,0,0,0,0,100,0), +(@PATH,33,1894.842,5554.514,264.766,0,0,0,0,100,0), +(@PATH,34,1903.292,5566.08,261.9607,0,0,0,0,100,0); + +-- Station Technician text +SET @ENTRY := 21114; +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ENTRY,0,0, 'YEOW!!',12,0,100,0,0,0, 'Station Technician'), +(@ENTRY,0,1, 'I''M ON FIRE!!!',12,0,100,0,0,0, 'Station Technician'), +(@ENTRY,0,2, 'IT BURNS!!',12,0,100,0,0,0, 'Station Technician'), +(@ENTRY,0,3, 'I''M ON FIRE!!! AGAIN!!',12,0,100,0,0,0, 'Station Technician'), +(@ENTRY,0,4, 'WHY ME!?!',12,0,100,0,0,0, 'Station Technician'), +(@ENTRY,0,5, 'Not again...',12,0,100,0,0,0, 'Station Technician'); + +-- Razak Ironsides text +SET @ENTRY := 21118; +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ENTRY,0,0, 'LET''S ROCK!!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'), +(@ENTRY,1,0, 'FIRE UP THE DEF GUNS!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'), +(@ENTRY,2,0, 'Where''s our back up? I want them here now!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'), +(@ENTRY,3,0, 'Last push boys! Let ''em have it!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'), +(@ENTRY,4,0, 'Nice work Solders! This is the last of them!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'), +(@ENTRY,4,1, 'This is the last of them. Don''t get sloppy!',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'), +(@ENTRY,5,0, 'We can handle it from here. Roughriders you are dismissed.',14,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event'), +(@ENTRY,6,0, 'Come on you apes. You want to live forever?',12,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event random combat text'), +(@ENTRY,6,1, 'Warm it up and give ''em everything you''ve got.',12,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event random combat text'), +(@ENTRY,6,2, 'I have only one rule. Everyone fights. No one quits.',12,0,100,0,0,0, 'Razak Ironsides - Ravager invasion event random combat text'); + +-- Strider Jock text +SET @ENTRY := 21427; +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ENTRY,0,0, 'You boys need some help?',14,0,100,0,0,0, 'Strider Jock - Ravager invasion event'); + +-- Gnome Defender 209 text +SET @ENTRY := 21426; +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ENTRY,0,0, 'Cavalry, let''s roll out!',14,0,100,0,0,0, 'Gnome Defender 209 - Ravager invasion event'); + +-- Remove some spawns that should only be spawned with attck script +DELETE FROM `creature` WHERE `guid` IN (84336,84341,84342,84346,84347,84348,84349); +DELETE FROM `creature_addon` WHERE `guid` IN (84336,84341,84342,84346,84347,84348,84349);