aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_ban.cpp16
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp46
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp83
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp72
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp12
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp10
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h14
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp16
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp150
-rw-r--r--src/server/scripts/Outland/zone_netherstorm.cpp323
-rw-r--r--src/server/scripts/Pet/pet_hunter.cpp2
-rw-r--r--src/server/scripts/Spells/spell_item.cpp2
12 files changed, 218 insertions, 528 deletions
diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp
index 2f74132fe21..121da6489a3 100644
--- a/src/server/scripts/Commands/cs_ban.cpp
+++ b/src/server/scripts/Commands/cs_ban.cpp
@@ -109,21 +109,23 @@ public:
return false;
}
- switch (sWorld->BanCharacter(name, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : ""))
+ std::string author = handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Server";
+
+ switch (sWorld->BanCharacter(name, durationStr, reasonStr, author))
{
case BAN_SUCCESS:
{
if (atoi(durationStr) > 0)
{
if (sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
- sWorld->SendWorldText(LANG_BAN_CHARACTER_YOUBANNEDMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), name.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
+ sWorld->SendWorldText(LANG_BAN_CHARACTER_YOUBANNEDMESSAGE_WORLD, author.c_str(), name.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
else
handler->PSendSysMessage(LANG_BAN_YOUBANNED, name.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
}
else
{
if (sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
- sWorld->SendWorldText(LANG_BAN_CHARACTER_YOUPERMBANNEDMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), name.c_str(), reasonStr);
+ sWorld->SendWorldText(LANG_BAN_CHARACTER_YOUPERMBANNEDMESSAGE_WORLD, author.c_str(), name.c_str(), reasonStr);
else
handler->PSendSysMessage(LANG_BAN_YOUPERMBANNED, name.c_str(), reasonStr);
}
@@ -195,20 +197,22 @@ public:
break;
}
- switch (sWorld->BanAccount(mode, nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : ""))
+ std::string author = handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Server";
+
+ switch (sWorld->BanAccount(mode, nameOrIP, durationStr, reasonStr, author))
{
case BAN_SUCCESS:
if (atoi(durationStr) > 0)
{
if (sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
- sWorld->SendWorldText(LANG_BAN_ACCOUNT_YOUBANNEDMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), nameOrIP.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
+ sWorld->SendWorldText(LANG_BAN_ACCOUNT_YOUBANNEDMESSAGE_WORLD, author.c_str(), nameOrIP.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
else
handler->PSendSysMessage(LANG_BAN_YOUBANNED, nameOrIP.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
}
else
{
if (sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
- sWorld->SendWorldText(LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), nameOrIP.c_str(), reasonStr);
+ sWorld->SendWorldText(LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD, author.c_str(), nameOrIP.c_str(), reasonStr);
else
handler->PSendSysMessage(LANG_BAN_YOUPERMBANNED, nameOrIP.c_str(), reasonStr);
}
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 9d763cb8d71..2afdff94a0b 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1610,16 +1610,7 @@ public:
banReason = fields[3].GetString();
}
- // Can be used to query data from World database
- stmt2 = WorldDatabase.GetPreparedStatement(WORLD_SEL_REQ_XP);
- stmt2->setUInt8(0, level);
- PreparedQueryResult result3 = WorldDatabase.Query(stmt2);
- if (result3)
- {
- Field* fields = result3->Fetch();
- xptotal = fields[0].GetUInt32();
- }
// Can be used to query data from Characters database
stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_XP);
@@ -1631,6 +1622,7 @@ public:
Field* fields = result4->Fetch();
xp = fields[0].GetUInt32(); // Used for "current xp" output and "%u XP Left" calculation
uint32 gguid = fields[1].GetUInt32(); // We check if have a guild for the person, so we might not require to query it at all
+ xptotal = sObjectMgr->GetXPForLevel(level);
if (gguid != 0)
{
@@ -1767,10 +1759,10 @@ public:
Player* player = handler->GetSession()->GetPlayer();
// accept only explicitly selected target (not implicitly self targeting case)
- Unit* target = handler->getSelectedUnit();
- if (player->GetTarget() && target)
+ Creature* target = player->GetTarget() ? handler->getSelectedCreature() : nullptr;
+ if (target)
{
- if (target->GetTypeId() != TYPEID_UNIT || target->IsPet())
+ if (target->IsPet())
{
handler->SendSysMessage(LANG_SELECT_CREATURE);
handler->SetSentErrorMessage(true);
@@ -1778,19 +1770,13 @@ public:
}
if (target->isDead())
- target->ToCreature()->Respawn();
+ target->Respawn();
return true;
}
- CellCoord p(Trinity::ComputeCellCoord(player->GetPositionX(), player->GetPositionY()));
- Cell cell(p);
- cell.SetNoCreate();
-
Trinity::RespawnDo u_do;
Trinity::WorldObjectWorker<Trinity::RespawnDo> worker(player, u_do);
-
- TypeContainerVisitor<Trinity::WorldObjectWorker<Trinity::RespawnDo>, GridTypeMapContainer > obj_worker(worker);
- cell.Visit(p, obj_worker, *player->GetMap(), *player, player->GetGridActivationRange());
+ player->VisitNearbyGridObject(player->GetGridActivationRange(), worker);
return true;
}
@@ -1844,14 +1830,9 @@ public:
std::string nameLink = handler->playerLink(targetName);
if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD))
- {
- sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
- ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notSpeakTime, muteBy.c_str(), muteReasonStr.c_str());
- }
- else
- {
- ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notSpeakTime, muteBy.c_str(), muteReasonStr.c_str());
- }
+ sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
+
+ ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notSpeakTime, muteBy.c_str(), muteReasonStr.c_str());
}
else
{
@@ -1866,10 +1847,11 @@ public:
LoginDatabase.Execute(stmt);
std::string nameLink = handler->playerLink(targetName);
- if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target)
- sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, handler->GetSession()->GetPlayerName().c_str(), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
- else
- handler->PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED, nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
+ if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target)
+ sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
+ else
+ handler->PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED, nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
+
return true;
}
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index 2988c2c50c9..4b78ab880d4 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -438,7 +438,7 @@ public:
continue;
}
- CreatureTemplate* cInfo = const_cast<CreatureTemplate*>(sObjectMgr->GetCreatureTemplate(entry));
+ CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(entry);
if (!cInfo)
{
handler->PSendSysMessage(LANG_COMMAND_CREATURESTORAGE_NOTFOUND, entry);
@@ -448,86 +448,7 @@ public:
TC_LOG_INFO("misc", "Reloading creature template entry %u", entry);
Field* fields = result->Fetch();
-
- for (uint8 i = 0; i < MAX_DIFFICULTY - 1; ++i)
- cInfo->DifficultyEntry[i] = fields[0 + i].GetUInt32();
-
- for (uint8 i = 0; i < MAX_KILL_CREDIT; ++i)
- cInfo->KillCredit[i] = fields[3 + i].GetUInt32();
-
- cInfo->Modelid1 = fields[5].GetUInt32();
- cInfo->Modelid2 = fields[6].GetUInt32();
- cInfo->Modelid3 = fields[7].GetUInt32();
- cInfo->Modelid4 = fields[8].GetUInt32();
- cInfo->Name = fields[9].GetString();
- cInfo->SubName = fields[10].GetString();
- cInfo->FemaleName = fields[11].GetString();
- cInfo->IconName = fields[12].GetString();
- cInfo->GossipMenuId = fields[13].GetUInt32();
- cInfo->minlevel = fields[14].GetUInt8();
- cInfo->maxlevel = fields[15].GetUInt8();
- cInfo->expansion = fields[16].GetUInt16();
- cInfo->expansionUnknown = fields[17].GetUInt16();
- cInfo->faction = fields[18].GetUInt16();
- cInfo->npcflag = fields[19].GetUInt32();
- cInfo->speed_walk = fields[20].GetFloat();
- cInfo->speed_run = fields[21].GetFloat();
- cInfo->scale = fields[22].GetFloat();
- cInfo->rank = fields[23].GetUInt8();
- cInfo->mindmg = fields[24].GetFloat();
- cInfo->maxdmg = fields[25].GetFloat();
- cInfo->dmgschool = fields[26].GetUInt8();
- cInfo->attackpower = fields[27].GetUInt32();
- cInfo->dmg_multiplier = fields[28].GetFloat();
- cInfo->baseattacktime = fields[29].GetUInt32();
- cInfo->rangeattacktime = fields[30].GetUInt32();
- cInfo->unit_class = fields[31].GetUInt8();
- cInfo->unit_flags = fields[32].GetUInt32();
- cInfo->unit_flags2 = fields[33].GetUInt32();
- cInfo->dynamicflags = fields[34].GetUInt32();
- cInfo->family = fields[35].GetUInt8();
- cInfo->trainer_type = fields[36].GetUInt8();
- cInfo->trainer_class = fields[37].GetUInt8();
- cInfo->trainer_race = fields[38].GetUInt8();
- cInfo->minrangedmg = fields[39].GetFloat();
- cInfo->maxrangedmg = fields[40].GetFloat();
- cInfo->rangedattackpower = fields[41].GetUInt16();
- cInfo->type = fields[42].GetUInt8();
- cInfo->type_flags = fields[43].GetUInt32();
- cInfo->type_flags2 = fields[44].GetUInt32();
- cInfo->lootid = fields[45].GetUInt32();
- cInfo->pickpocketLootId = fields[46].GetUInt32();
- cInfo->SkinLootId = fields[47].GetUInt32();
-
- for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
- cInfo->resistance[i] = fields[48 + i -1].GetUInt16();
-
- for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i)
- cInfo->spells[i] = fields[54 + i].GetUInt32();
-
- cInfo->PetSpellDataId = fields[62].GetUInt32();
- cInfo->VehicleId = fields[63].GetUInt32();
- cInfo->mingold = fields[64].GetUInt32();
- cInfo->maxgold = fields[65].GetUInt32();
- cInfo->AIName = fields[66].GetString();
- cInfo->MovementType = fields[67].GetUInt8();
- cInfo->InhabitType = fields[68].GetUInt8();
- cInfo->HoverHeight = fields[69].GetFloat();
- cInfo->ModHealth = fields[70].GetFloat();
- cInfo->ModMana = fields[71].GetFloat();
- cInfo->ModManaExtra = fields[72].GetFloat();
- cInfo->ModArmor = fields[73].GetFloat();
- cInfo->RacialLeader = fields[74].GetBool();
-
- for (uint8 i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i)
- cInfo->questItems[i] = fields[75 + i].GetUInt32();
-
- cInfo->movementId = fields[81].GetUInt32();
- cInfo->RegenHealth = fields[82].GetBool();
- cInfo->MechanicImmuneMask = fields[83].GetUInt32();
- cInfo->flags_extra = fields[84].GetUInt32();
- cInfo->ScriptID = sObjectMgr->GetScriptId(fields[85].GetCString());
-
+ sObjectMgr->LoadCreatureTemplate(fields);
sObjectMgr->CheckCreatureTemplate(cInfo);
}
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
index f996bcc6f70..e3021ff7a95 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
@@ -47,27 +47,20 @@ class npc_willix : public CreatureScript
public:
npc_willix() : CreatureScript("npc_willix") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_WILLIX_THE_IMPORTER)
- {
- ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
- creature->AI()->Talk(SAY_READY, player);
- creature->setFaction(113);
- }
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_willixAI(creature);
- }
-
struct npc_willixAI : public npc_escortAI
{
npc_willixAI(Creature* creature) : npc_escortAI(creature) { }
+ void sQuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_WILLIX_THE_IMPORTER)
+ {
+ Start(true, false, player->GetGUID());
+ Talk(SAY_READY, player);
+ me->setFaction(113);
+ }
+ }
+
void WaypointReached(uint32 waypointId) override
{
Player* player = GetPlayerForEscort();
@@ -137,6 +130,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_willixAI(creature);
+ }
};
enum SnufflenoseGopher
@@ -147,18 +144,6 @@ enum SnufflenoseGopher
POINT_TUBBER = 0
};
-struct DistanceOrder : public std::binary_function<GameObject, GameObject, bool>
-{
- DistanceOrder(Creature* me) : me(me) { }
-
- bool operator() (GameObject* first, GameObject* second)
- {
- return me->GetDistanceOrder(first, second);
- }
-
- Creature* me;
-};
-
struct npc_snufflenose_gopher : public CreatureScript
{
public:
@@ -208,18 +193,14 @@ public:
if (tubbersInRange.empty())
return;
- tubbersInRange.sort(DistanceOrder(me));
- GameObject* nearestTubber = NULL;
-
- for (std::list<GameObject*>::const_iterator itr = tubbersInRange.begin(); itr != tubbersInRange.end(); ++itr)
+ tubbersInRange.remove_if([](GameObject* go)
{
- if (!(*itr)->isSpawned() && (*itr)->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND))
- {
- nearestTubber = *itr;
- break;
- }
- }
+ return go->isSpawned() || !go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
+ });
+ tubbersInRange.sort(Trinity::ObjectDistanceOrderPred(me));
+
+ GameObject* nearestTubber = tubbersInRange.front();
if (!nearestTubber)
return;
@@ -259,21 +240,16 @@ class spell_snufflenose_command : public SpellScriptLoader
{
PrepareSpellScript(spell_snufflenose_commandSpellScript);
- bool Load() override
- {
- return GetCaster()->GetTypeId() == TYPEID_PLAYER;
- }
-
- void HandleAfterCast()
+ void HandleEffect(SpellEffIndex /*effIndex*/)
{
- if (Unit* target = GetCaster()->ToPlayer()->GetSelectedUnit())
+ if (Creature* target = GetHitCreature())
if (target->GetEntry() == NPC_SNUFFLENOSE_GOPHER)
- target->ToCreature()->AI()->DoAction(ACTION_FIND_NEW_TUBBER);
+ target->AI()->DoAction(ACTION_FIND_NEW_TUBBER);
}
void Register() override
{
- AfterCast += SpellCastFn(spell_snufflenose_commandSpellScript::HandleAfterCast);
+ OnEffectHitTarget += SpellEffectFn(spell_snufflenose_commandSpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index e1658e564ec..5ef84c7bb40 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -299,6 +299,12 @@ class boss_deathbringer_saurfang : public CreatureScript
_introDone = true;
+ if (GameObject* teleporter = GameObject::GetGameObject(*me, instance->GetData64(GO_SCOURGE_TRANSPORTER_DEATHBRINGER)))
+ {
+ instance->HandleGameObject(0, false, teleporter);
+ teleporter->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ }
+
Talk(SAY_AGGRO);
events.ScheduleEvent(EVENT_SUMMON_BLOOD_BEAST, 30000, 0, PHASE_COMBAT);
events.ScheduleEvent(EVENT_BERSERK, IsHeroic() ? 360000 : 480000, 0, PHASE_COMBAT);
@@ -538,12 +544,6 @@ class boss_deathbringer_saurfang : public CreatureScript
case PHASE_INTRO_A:
case PHASE_INTRO_H:
{
- if (GameObject* teleporter = GameObject::GetGameObject(*me, instance->GetData64(GO_SCOURGE_TRANSPORTER_SAURFANG)))
- {
- instance->HandleGameObject(0, false, teleporter);
- teleporter->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
- }
-
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
// controls what events will execute
events.SetPhase(uint32(action));
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 592c44940a4..e85ddc21dda 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -2102,7 +2102,15 @@ class at_icc_shutdown_traps : public AreaTriggerScript
bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
{
if (InstanceScript* instance = player->GetInstanceScript())
- instance->SetData(DATA_COLDFLAME_JETS, DONE);
+ {
+ instance->SetData(DATA_UPPERSPIRE_TELE_ACT, DONE);
+ uint64 teleporterGUID = instance->GetData64(GO_SCOURGE_TRANSPORTER_UPPERSPIRE);
+ if (GameObject* go = instance->instance->GetGameObject(teleporterGUID))
+ {
+ go->SetGoState(GO_STATE_ACTIVE);
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ }
+ }
return true;
}
};
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
index da4a8f089cc..fbd3a715fb8 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
@@ -116,7 +116,8 @@ enum DataTypes
DATA_HIGHLORD_TIRION_FORDRING = 37,
DATA_ARTHAS_PLATFORM = 38,
DATA_TERENAS_MENETHIL = 39,
- DATA_ENEMY_GUNSHIP = 40
+ DATA_ENEMY_GUNSHIP = 40,
+ DATA_UPPERSPIRE_TELE_ACT = 41,
};
enum CreaturesIds
@@ -322,6 +323,15 @@ enum CreaturesIds
enum GameObjectsIds
{
+ // ICC Teleporters
+ GO_SCOURGE_TRANSPORTER_LICHKING = 202223,
+ GO_SCOURGE_TRANSPORTER_UPPERSPIRE = 202235,
+ GO_SCOURGE_TRANSPORTER_LIGHTSHAMMER = 202242,
+ GO_SCOURGE_TRANSPORTER_RAMPART = 202243,
+ GO_SCOURGE_TRANSPORTER_DEATHBRINGER = 202244,
+ GO_SCOURGE_TRANSPORTER_ORATORY = 202245,
+ GO_SCOURGE_TRANSPORTER_SINDRAGOSA = 202246,
+
// Lower Spire Trash
GO_SPIRIT_ALARM_1 = 201814,
GO_SPIRIT_ALARM_2 = 201815,
@@ -359,7 +369,6 @@ enum GameObjectsIds
GO_DEATHBRINGER_S_CACHE_25N = 202240,
GO_DEATHBRINGER_S_CACHE_10H = 202238,
GO_DEATHBRINGER_S_CACHE_25H = 202241,
- GO_SCOURGE_TRANSPORTER_SAURFANG = 202244,
// Professor Putricide
GO_ORANGE_PLAGUE_MONSTER_ENTRANCE = 201371,
@@ -404,7 +413,6 @@ enum GameObjectsIds
GO_SIGIL_OF_THE_FROSTWING = 202181,
// The Lich King
- GO_SCOURGE_TRANSPORTER_LK = 202223,
GO_ARTHAS_PLATFORM = 202161,
GO_ARTHAS_PRECIPICE = 202078,
GO_DOODAD_ICECROWN_THRONEFROSTYWIND01 = 202188,
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
index 537c3c7354d..469bfc1d310 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp
@@ -31,19 +31,23 @@ class icecrown_citadel_teleport : public GameObjectScript
bool OnGossipHello(Player* player, GameObject* go) override
{
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Light's Hammer.", GOSSIP_SENDER_ICC_PORT, LIGHT_S_HAMMER_TELEPORT);
if (InstanceScript* instance = go->GetInstanceScript())
{
if (instance->GetBossState(DATA_LORD_MARROWGAR) == DONE)
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Oratory of the Damned.", GOSSIP_SENDER_ICC_PORT, ORATORY_OF_THE_DAMNED_TELEPORT);
- if (instance->GetBossState(DATA_LADY_DEATHWHISPER) == DONE)
+ {
+ if (go->GetEntry() != GO_SCOURGE_TRANSPORTER_LIGHTSHAMMER)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Light's Hammer.", GOSSIP_SENDER_ICC_PORT, LIGHT_S_HAMMER_TELEPORT);
+ if (go->GetEntry() != GO_SCOURGE_TRANSPORTER_ORATORY)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Oratory of the Damned.", GOSSIP_SENDER_ICC_PORT, ORATORY_OF_THE_DAMNED_TELEPORT);
+ }
+ if (instance->GetBossState(DATA_LADY_DEATHWHISPER) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_RAMPART)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Rampart of Skulls.", GOSSIP_SENDER_ICC_PORT, RAMPART_OF_SKULLS_TELEPORT);
- if (instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == DONE)
+ if (instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_DEATHBRINGER)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Deathbringer's Rise.", GOSSIP_SENDER_ICC_PORT, DEATHBRINGER_S_RISE_TELEPORT);
- if (instance->GetData(DATA_COLDFLAME_JETS) == DONE)
+ if (instance->GetData(DATA_UPPERSPIRE_TELE_ACT) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_UPPERSPIRE)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Upper Spire.", GOSSIP_SENDER_ICC_PORT, UPPER_SPIRE_TELEPORT);
/// @todo Gauntlet event before Sindragosa
- if (instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE)
+ if (instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_SINDRAGOSA)
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Sindragosa's Lair", GOSSIP_SENDER_ICC_PORT, SINDRAGOSA_S_LAIR_TELEPORT);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index febcf22ba6d..86e4efc5db7 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -127,7 +127,13 @@ class instance_icecrown_citadel : public InstanceMapScript
DeathbringerSaurfangDoorGUID = 0;
DeathbringerSaurfangEventGUID = 0;
DeathbringersCacheGUID = 0;
- SaurfangTeleportGUID = 0;
+ TeleporterLichKingGUID = 0;
+ TeleporterUpperSpireGUID = 0;
+ TeleporterLightsHammerGUID = 0;
+ TeleporterRampartsGUID = 0;
+ TeleporterDeathBringerGUID = 0;
+ TeleporterOratoryGUID = 0;
+ TeleporterSindragosaGUID = 0;
PlagueSigilGUID = 0;
BloodwingSigilGUID = 0;
FrostwingSigilGUID = 0;
@@ -164,10 +170,26 @@ class instance_icecrown_citadel : public InstanceMapScript
IsNauseaEligible = true;
IsOrbWhispererEligible = true;
ColdflameJetsState = NOT_STARTED;
+ UpperSpireTeleporterActiveState = NOT_STARTED;
BloodQuickeningState = NOT_STARTED;
BloodQuickeningMinutes = 0;
}
+ // A function to help reduce the number of lines for teleporter management.
+ void SetTeleporterState(GameObject* go, bool usable)
+ {
+ if (usable)
+ {
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->SetGoState(GO_STATE_ACTIVE);
+ }
+ else
+ {
+ go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->SetGoState(GO_STATE_READY);
+ }
+ }
+
void FillInitialWorldStates(WorldPacket& data) override
{
data << uint32(WORLDSTATE_SHOW_TIMER) << uint32(BloodQuickeningState == IN_PROGRESS);
@@ -542,8 +564,37 @@ class instance_icecrown_citadel : public InstanceMapScript
case GO_DEATHBRINGER_S_CACHE_25H:
DeathbringersCacheGUID = go->GetGUID();
break;
- case GO_SCOURGE_TRANSPORTER_SAURFANG:
- SaurfangTeleportGUID = go->GetGUID();
+ case GO_SCOURGE_TRANSPORTER_LICHKING:
+ TeleporterLichKingGUID = go->GetGUID();
+ if (GetBossState(DATA_PROFESSOR_PUTRICIDE) == DONE && GetBossState(DATA_BLOOD_QUEEN_LANA_THEL) == DONE && GetBossState(DATA_SINDRAGOSA) == DONE)
+ go->SetGoState(GO_STATE_ACTIVE);
+ break;
+ case GO_SCOURGE_TRANSPORTER_UPPERSPIRE:
+ TeleporterUpperSpireGUID = go->GetGUID();
+ if (GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE || GetData(DATA_UPPERSPIRE_TELE_ACT) != DONE)
+ SetTeleporterState(go, false);
+ else
+ SetTeleporterState(go, true);
+ break;
+ case GO_SCOURGE_TRANSPORTER_LIGHTSHAMMER:
+ TeleporterLightsHammerGUID = go->GetGUID();
+ SetTeleporterState(go, GetBossState(DATA_LORD_MARROWGAR) == DONE);
+ break;
+ case GO_SCOURGE_TRANSPORTER_RAMPART:
+ TeleporterRampartsGUID = go->GetGUID();
+ SetTeleporterState(go, GetBossState(DATA_LADY_DEATHWHISPER) == DONE);
+ break;
+ case GO_SCOURGE_TRANSPORTER_DEATHBRINGER:
+ TeleporterDeathBringerGUID = go->GetGUID();
+ SetTeleporterState(go, GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == DONE);
+ break;
+ case GO_SCOURGE_TRANSPORTER_ORATORY:
+ TeleporterOratoryGUID = go->GetGUID();
+ SetTeleporterState(go, GetBossState(DATA_LORD_MARROWGAR) == DONE);
+ break;
+ case GO_SCOURGE_TRANSPORTER_SINDRAGOSA:
+ TeleporterSindragosaGUID = go->GetGUID();
+ SetTeleporterState(go, GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE);
break;
case GO_PLAGUE_SIGIL:
PlagueSigilGUID = go->GetGUID();
@@ -600,11 +651,6 @@ class instance_icecrown_citadel : public InstanceMapScript
go->SetLootRecipient(valithria->GetLootRecipient());
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
break;
- case GO_SCOURGE_TRANSPORTER_LK:
- TheLichKingTeleportGUID = go->GetGUID();
- if (GetBossState(DATA_PROFESSOR_PUTRICIDE) == DONE && GetBossState(DATA_BLOOD_QUEEN_LANA_THEL) == DONE && GetBossState(DATA_SINDRAGOSA) == DONE)
- go->SetGoState(GO_STATE_ACTIVE);
- break;
case GO_ARTHAS_PLATFORM:
ArthasPlatformGUID = go->GetGUID();
break;
@@ -690,6 +736,8 @@ class instance_icecrown_citadel : public InstanceMapScript
return RimefangTrash.size();
case DATA_COLDFLAME_JETS:
return ColdflameJetsState;
+ case DATA_UPPERSPIRE_TELE_ACT:
+ return UpperSpireTeleporterActiveState;
case DATA_TEAM_IN_INSTANCE:
return TeamInInstance;
case DATA_BLOOD_QUICKENING_STATE:
@@ -717,8 +765,20 @@ class instance_icecrown_citadel : public InstanceMapScript
return DeathbringerSaurfangEventGUID;
case GO_SAURFANG_S_DOOR:
return DeathbringerSaurfangDoorGUID;
- case GO_SCOURGE_TRANSPORTER_SAURFANG:
- return SaurfangTeleportGUID;
+ case GO_SCOURGE_TRANSPORTER_LICHKING:
+ return TeleporterLichKingGUID;
+ case GO_SCOURGE_TRANSPORTER_UPPERSPIRE:
+ return TeleporterUpperSpireGUID;
+ case GO_SCOURGE_TRANSPORTER_LIGHTSHAMMER:
+ return TeleporterLightsHammerGUID;
+ case GO_SCOURGE_TRANSPORTER_RAMPART:
+ return TeleporterRampartsGUID;
+ case GO_SCOURGE_TRANSPORTER_DEATHBRINGER:
+ return TeleporterDeathBringerGUID;
+ case GO_SCOURGE_TRANSPORTER_ORATORY:
+ return TeleporterOratoryGUID;
+ case GO_SCOURGE_TRANSPORTER_SINDRAGOSA:
+ return TeleporterSindragosaGUID;
case DATA_FESTERGUT:
return FestergutGUID;
case DATA_ROTFACE:
@@ -780,10 +840,24 @@ class instance_icecrown_citadel : public InstanceMapScript
switch (type)
{
+ case DATA_LORD_MARROWGAR:
+ {
+ if (state == DONE)
+ {
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterLightsHammerGUID))
+ SetTeleporterState(teleporter, true);
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterOratoryGUID))
+ SetTeleporterState(teleporter, true);
+ }
+ break;
+ }
case DATA_LADY_DEATHWHISPER:
{
if (state == DONE)
{
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterRampartsGUID))
+ SetTeleporterState(teleporter, true);
+
if (GameObject* elevator = instance->GetGameObject(LadyDeathwisperElevatorGUID))
{
elevator->SetUInt32Value(GAMEOBJECT_LEVEL, 0);
@@ -797,6 +871,9 @@ class instance_icecrown_citadel : public InstanceMapScript
case DATA_ICECROWN_GUNSHIP_BATTLE:
if (state == DONE)
{
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterDeathBringerGUID))
+ SetTeleporterState(teleporter, true);
+
if (GameObject* loot = instance->GetGameObject(GunshipArmoryGUID))
loot->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
}
@@ -807,20 +884,28 @@ class instance_icecrown_citadel : public InstanceMapScript
switch (state)
{
case DONE:
+ {
if (GameObject* loot = instance->GetGameObject(DeathbringersCacheGUID))
{
if (Creature* deathbringer = instance->GetCreature(DeathbringerSaurfangGUID))
loot->SetLootRecipient(deathbringer->GetLootRecipient());
loot->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
}
- // no break
+
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterUpperSpireGUID))
+ SetTeleporterState(teleporter, true);
+
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterDeathBringerGUID))
+ SetTeleporterState(teleporter, true);
+ break;
+ }
case NOT_STARTED:
- if (GameObject* teleporter = instance->GetGameObject(SaurfangTeleportGUID))
- {
- HandleGameObject(SaurfangTeleportGUID, true, teleporter);
- teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
- }
+ {
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterDeathBringerGUID))
+ SetTeleporterState(teleporter, true);
+
break;
+ }
default:
break;
}
@@ -890,8 +975,13 @@ class instance_icecrown_citadel : public InstanceMapScript
}
break;
case DATA_VALITHRIA_DREAMWALKER:
- if (state == DONE && sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[8].questId[instance->GetSpawnMode() & 1]))
- instance->SummonCreature(NPC_VALITHRIA_DREAMWALKER_QUEST, ValithriaSpawnPos);
+ if (state == DONE)
+ {
+ if (sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[8].questId[instance->GetSpawnMode() & 1]))
+ instance->SummonCreature(NPC_VALITHRIA_DREAMWALKER_QUEST, ValithriaSpawnPos);
+ if (GameObject* teleporter = instance->GetGameObject(TeleporterSindragosaGUID))
+ SetTeleporterState(teleporter, true);
+ }
break;
case DATA_SINDRAGOSA:
HandleGameObject(FrostwingSigilGUID, state != DONE);
@@ -1025,6 +1115,11 @@ class instance_icecrown_citadel : public InstanceMapScript
SaveToDB();
break;
}
+ case DATA_UPPERSPIRE_TELE_ACT:
+ UpperSpireTeleporterActiveState = data;
+ if (UpperSpireTeleporterActiveState == DONE)
+ SaveToDB();
+ break;
default:
break;
}
@@ -1231,7 +1326,7 @@ class instance_icecrown_citadel : public InstanceMapScript
std::ostringstream saveStream;
saveStream << "I C " << GetBossSaveData() << HeroicAttempts << ' '
- << ColdflameJetsState << ' ' << BloodQuickeningState << ' ' << BloodQuickeningMinutes;
+ << ColdflameJetsState << ' ' << BloodQuickeningState << ' ' << BloodQuickeningMinutes << ' ' << UpperSpireTeleporterActiveState;
OUT_SAVE_INST_DATA_COMPLETE;
return saveStream.str();
@@ -1267,11 +1362,17 @@ class instance_icecrown_citadel : public InstanceMapScript
uint32 temp = 0;
loadStream >> temp;
- ColdflameJetsState = temp ? DONE : NOT_STARTED;
+ if (temp == IN_PROGRESS)
+ ColdflameJetsState = NOT_STARTED;
+ else
+ ColdflameJetsState = temp ? DONE : NOT_STARTED;
loadStream >> temp;
BloodQuickeningState = temp ? DONE : NOT_STARTED; // DONE means finished (not success/fail)
loadStream >> BloodQuickeningMinutes;
+
+ loadStream >> temp;
+ UpperSpireTeleporterActiveState = temp ? DONE : NOT_STARTED;
}
else
OUT_LOAD_INST_DATA_FAIL;
@@ -1412,7 +1513,13 @@ class instance_icecrown_citadel : public InstanceMapScript
uint64 DeathbringerSaurfangDoorGUID;
uint64 DeathbringerSaurfangEventGUID; // Muradin Bronzebeard or High Overlord Saurfang
uint64 DeathbringersCacheGUID;
- uint64 SaurfangTeleportGUID;
+ uint64 TeleporterLichKingGUID;
+ uint64 TeleporterUpperSpireGUID;
+ uint64 TeleporterLightsHammerGUID;
+ uint64 TeleporterRampartsGUID;
+ uint64 TeleporterDeathBringerGUID;
+ uint64 TeleporterOratoryGUID;
+ uint64 TeleporterSindragosaGUID;
uint64 PlagueSigilGUID;
uint64 BloodwingSigilGUID;
uint64 FrostwingSigilGUID;
@@ -1449,6 +1556,7 @@ class instance_icecrown_citadel : public InstanceMapScript
uint64 PillarsUnchainedGUID;
uint32 TeamInInstance;
uint32 ColdflameJetsState;
+ uint32 UpperSpireTeleporterActiveState;
std::set<uint32> FrostwyrmGUIDs;
std::set<uint32> SpinestalkerTrash;
std::set<uint32> RimefangTrash;
diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp
index 42be5ba8c90..f82c1f5fb58 100644
--- a/src/server/scripts/Outland/zone_netherstorm.cpp
+++ b/src/server/scripts/Outland/zone_netherstorm.cpp
@@ -19,13 +19,11 @@
/* ScriptData
SDName: Netherstorm
SD%Complete: 80
-SDComment: Quest support: 10337, 10438, 10652 (special flight paths), 10299, 10321, 10322, 10323, 10329, 10330, 10338, 10365(Shutting Down Manaforge), 10198, 10191
+SDComment: Quest support: 10337, 10438, 10652 (special flight paths), 10198, 10191
SDCategory: Netherstorm
EndScriptData */
/* ContentData
-npc_manaforge_control_console
-go_manaforge_control_console
npc_commander_dawnforge
npc_bessy
npc_maxx_a_million
@@ -39,323 +37,6 @@ EndContentData */
#include "Player.h"
/*######
-## npc_manaforge_control_console
-######*/
-
-//used by 20209, 20417, 20418, 20440, signed for 20209
-enum ManaforgeConsoleData
-{
- EMOTE_START = 0,
- EMOTE_60 = 1,
- EMOTE_30 = 2,
- EMOTE_10 = 3,
- EMOTE_COMPLETE = 4,
- EMOTE_ABORT = 5,
-
- ENTRY_BNAAR_C_CONSOLE = 20209,
- ENTRY_CORUU_C_CONSOLE = 20417,
- ENTRY_DURO_C_CONSOLE = 20418,
- ENTRY_ARA_C_CONSOLE = 20440,
-
- ENTRY_SUNFURY_TECH = 20218,
- ENTRY_SUNFURY_PROT = 20436,
-
- ENTRY_ARA_TECH = 20438,
- ENTRY_ARA_ENGI = 20439,
- ENTRY_ARA_GORKLONN = 20460,
-
- SPELL_DISABLE_VISUAL = 35031,
- SPELL_INTERRUPT_1 = 35016, //ACID mobs should cast this
- SPELL_INTERRUPT_2 = 35176, //ACID mobs should cast this (Manaforge Ara-version)
-};
-
-class npc_manaforge_control_console : public CreatureScript
-{
-public:
- npc_manaforge_control_console() : CreatureScript("npc_manaforge_control_console") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_manaforge_control_consoleAI(creature);
- }
-
- struct npc_manaforge_control_consoleAI : public ScriptedAI
- {
- npc_manaforge_control_consoleAI(Creature* creature) : ScriptedAI(creature) { }
-
- uint32 Event_Timer;
- uint32 Wave_Timer;
- uint32 Phase;
- bool Wave;
- uint64 someplayer;
- uint64 goConsole;
- Creature* add;
-
- void Reset() override
- {
- Event_Timer = 3000;
- Wave_Timer = 0;
- Phase = 1;
- Wave = false;
- someplayer = 0;
- goConsole = 0;
- add = NULL;
- }
-
- void EnterCombat(Unit* /*who*/) override { }
-
- /*void SpellHit(Unit* caster, const SpellInfo* spell) override
- {
- //we have no way of telling the Creature was hit by spell -> got aura applied after 10-12 seconds
- //then no way for the mobs to actually stop the shutdown as intended.
- if (spell->Id == SPELL_INTERRUPT_1)
- DoSay("Silence! I kill you!", LANG_UNIVERSAL, NULL);
- }*/
-
- void JustDied(Unit* /*killer*/) override
- {
- Talk(EMOTE_ABORT);
-
- if (someplayer)
- {
- if (Player* player = ObjectAccessor::GetPlayer(*me, someplayer))
- {
- switch (me->GetEntry())
- {
- case ENTRY_BNAAR_C_CONSOLE:
- player->FailQuest(10299);
- player->FailQuest(10329);
- break;
- case ENTRY_CORUU_C_CONSOLE:
- player->FailQuest(10321);
- player->FailQuest(10330);
- break;
- case ENTRY_DURO_C_CONSOLE:
- player->FailQuest(10322);
- player->FailQuest(10338);
- break;
- case ENTRY_ARA_C_CONSOLE:
- player->FailQuest(10323);
- player->FailQuest(10365);
- break;
- }
- }
- }
-
- if (goConsole)
- if (GameObject* go = GameObject::GetGameObject(*me, goConsole))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
- }
-
- void DoWaveSpawnForCreature(Creature* creature)
- {
- switch (creature->GetEntry())
- {
- case ENTRY_BNAAR_C_CONSOLE:
- if (rand32() % 2)
- {
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2933.68f, 4162.55f, 164.00f, 1.60f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2927.36f, 4212.97f, 164.00f);
- }
- else
- {
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2927.36f, 4212.97f, 164.00f, 4.94f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2933.68f, 4162.55f, 164.00f);
- }
- Wave_Timer = 30000;
- break;
- case ENTRY_CORUU_C_CONSOLE:
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2445.21f, 2765.26f, 134.49f, 3.93f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2424.21f, 2740.15f, 133.81f);
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2429.86f, 2731.85f, 134.53f, 1.31f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2435.37f, 2766.04f, 133.81f);
- Wave_Timer = 20000;
- break;
- case ENTRY_DURO_C_CONSOLE:
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2986.80f, 2205.36f, 165.37f, 3.74f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2985.15f, 2197.32f, 164.79f);
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2952.91f, 2191.20f, 165.32f, 0.22f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2060.01f, 2185.27f, 164.67f);
- Wave_Timer = 15000;
- break;
- case ENTRY_ARA_C_CONSOLE:
- if (rand32() % 2)
- {
- add = me->SummonCreature(ENTRY_ARA_TECH, 4035.11f, 4038.97f, 194.27f, 2.57f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4003.42f, 4040.19f, 193.49f);
- add = me->SummonCreature(ENTRY_ARA_TECH, 4033.66f, 4036.79f, 194.28f, 2.57f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4003.42f, 4040.19f, 193.49f);
- add = me->SummonCreature(ENTRY_ARA_TECH, 4037.13f, 4037.30f, 194.23f, 2.57f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4003.42f, 4040.19f, 193.49f);
- }
- else
- {
- add = me->SummonCreature(ENTRY_ARA_TECH, 3099.59f, 4049.30f, 194.22f, 0.05f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4028.01f, 4035.17f, 193.59f);
- add = me->SummonCreature(ENTRY_ARA_TECH, 3999.72f, 4046.75f, 194.22f, 0.05f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4028.01f, 4035.17f, 193.59f);
- add = me->SummonCreature(ENTRY_ARA_TECH, 3996.81f, 4048.26f, 194.22f, 0.05f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4028.01f, 4035.17f, 193.59f);
- }
- Wave_Timer = 15000;
- break;
- }
- }
- void DoFinalSpawnForCreature(Creature* creature)
- {
- switch (creature->GetEntry())
- {
- case ENTRY_BNAAR_C_CONSOLE:
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2946.52f, 4201.42f, 163.47f, 3.54f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2927.49f, 4192.81f, 163.00f);
- break;
- case ENTRY_CORUU_C_CONSOLE:
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2453.88f, 2737.85f, 133.27f, 2.59f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2433.96f, 2751.53f, 133.85f);
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2441.62f, 2735.32f, 134.49f, 1.97f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2433.96f, 2751.53f, 133.85f);
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2450.73f, 2754.50f, 134.49f, 3.29f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2433.96f, 2751.53f, 133.85f);
- break;
- case ENTRY_DURO_C_CONSOLE:
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2956.18f, 2202.85f, 165.32f, 5.45f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2972.27f, 2193.22f, 164.48f);
- add = me->SummonCreature(ENTRY_SUNFURY_TECH, 2975.30f, 2211.50f, 165.32f, 4.55f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2972.27f, 2193.22f, 164.48f);
- add = me->SummonCreature(ENTRY_SUNFURY_PROT, 2965.02f, 2217.45f, 164.16f, 4.96f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 2972.27f, 2193.22f, 164.48f);
- break;
- case ENTRY_ARA_C_CONSOLE:
- add = me->SummonCreature(ENTRY_ARA_ENGI, 3994.51f, 4020.46f, 192.18f, 0.91f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4008.35f, 4035.04f, 192.70f);
- add = me->SummonCreature(ENTRY_ARA_GORKLONN, 4021.56f, 4059.35f, 193.59f, 4.44f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
- if (add) add->GetMotionMaster()->MovePoint(0, 4016.62f, 4039.89f, 193.46f);
- break;
- }
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (Event_Timer <= diff)
- {
- switch (Phase)
- {
- case 1:
- if (someplayer)
- {
- Unit* u = ObjectAccessor::GetUnit(*me, someplayer);
- if (u && u->GetTypeId() == TYPEID_PLAYER)
- Talk(EMOTE_START, u);
- }
- Event_Timer = 60000;
- Wave = true;
- ++Phase;
- break;
- case 2:
- Talk(EMOTE_60);
- Event_Timer = 30000;
- ++Phase;
- break;
- case 3:
- Talk(EMOTE_30);
- Event_Timer = 20000;
- DoFinalSpawnForCreature(me);
- ++Phase;
- break;
- case 4:
- Talk(EMOTE_10);
- Event_Timer = 10000;
- Wave = false;
- ++Phase;
- break;
- case 5:
- Talk(EMOTE_COMPLETE);
- if (someplayer)
- {
- if (Player* player = ObjectAccessor::GetPlayer(*me, someplayer))
- player->KilledMonsterCredit(me->GetEntry(), me->GetGUID());
- DoCast(me, SPELL_DISABLE_VISUAL);
- }
-
- if (goConsole)
- if (GameObject* go = GameObject::GetGameObject(*me, goConsole))
- go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
-
- ++Phase;
- break;
- }
- }
- else
- Event_Timer -= diff;
-
- if (Wave)
- {
- if (Wave_Timer <= diff)
- {
- DoWaveSpawnForCreature(me);
- }
- else
- Wave_Timer -= diff;
- }
- }
- };
-};
-
-/*######
-## go_manaforge_control_console
-######*/
-
-/// @todo clean up this workaround when Trinity adds support to do it properly (with gossip selections instead of instant summon)
-class go_manaforge_control_console : public GameObjectScript
-{
-public:
- go_manaforge_control_console() : GameObjectScript("go_manaforge_control_console") { }
-
- bool OnGossipHello(Player* player, GameObject* go) override
- {
- if (go->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER)
- {
- player->PrepareQuestMenu(go->GetGUID());
- player->SendPreparedQuest(go->GetGUID());
- }
-
- Creature* manaforge = NULL;
-
- switch (go->GetAreaId())
- {
- case 3726: //b'naar
- if ((player->GetQuestStatus(10299) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10329) == QUEST_STATUS_INCOMPLETE) &&
- player->HasItemCount(29366))
- manaforge = player->SummonCreature(ENTRY_BNAAR_C_CONSOLE, 2918.95f, 4189.98f, 161.88f, 0.34f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000);
- break;
- case 3730: //coruu
- if ((player->GetQuestStatus(10321) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10330) == QUEST_STATUS_INCOMPLETE) &&
- player->HasItemCount(29396))
- manaforge = player->SummonCreature(ENTRY_CORUU_C_CONSOLE, 2426.77f, 2750.38f, 133.24f, 2.14f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000);
- break;
- case 3734: //duro
- if ((player->GetQuestStatus(10322) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10338) == QUEST_STATUS_INCOMPLETE) &&
- player->HasItemCount(29397))
- manaforge = player->SummonCreature(ENTRY_DURO_C_CONSOLE, 2976.48f, 2183.29f, 163.20f, 1.85f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000);
- break;
- case 3722: //ara
- if ((player->GetQuestStatus(10323) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10365) == QUEST_STATUS_INCOMPLETE) &&
- player->HasItemCount(29411))
- manaforge = player->SummonCreature(ENTRY_ARA_C_CONSOLE, 4013.71f, 4028.76f, 192.10f, 1.25f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000);
- break;
- }
-
- if (manaforge)
- {
- ENSURE_AI(npc_manaforge_control_console::npc_manaforge_control_consoleAI, manaforge->AI())->someplayer = player->GetGUID();
- ENSURE_AI(npc_manaforge_control_console::npc_manaforge_control_consoleAI, manaforge->AI())->goConsole = go->GetGUID();
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
- }
- return true;
- }
-};
-
-/*######
## npc_commander_dawnforge
######*/
@@ -1054,8 +735,6 @@ class go_captain_tyralius_prison : public GameObjectScript
void AddSC_netherstorm()
{
- new go_manaforge_control_console();
- new npc_manaforge_control_console();
new npc_commander_dawnforge();
new at_commander_dawnforge();
new npc_professor_dabiri();
diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp
index 7dbdc7af63f..8fd6cb54b0e 100644
--- a/src/server/scripts/Pet/pet_hunter.cpp
+++ b/src/server/scripts/Pet/pet_hunter.cpp
@@ -57,7 +57,7 @@ class npc_pet_hunter_snake_trap : public CreatureScript
me->SetMaxHealth(uint32(107 * (me->getLevel() - 40) * 0.025f));
// Add delta to make them not all hit the same time
uint32 delta = (rand32() % 7) * 100;
- me->SetAttackTime(BASE_ATTACK, Info->baseattacktime + delta);
+ me->SetAttackTime(BASE_ATTACK, Info->BaseAttackTime + delta);
//me->SetStatFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER, float(Info->attackpower));
// Start attacking attacker of owner on first ai update after spawn - move in line of sight may choose better target
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index c4bd473f1d1..70451888c07 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -991,7 +991,7 @@ class spell_item_unsated_craving : public SpellScriptLoader
return false;
Unit* target = procInfo.GetActionTarget();
- if (!target || target->GetTypeId() != TYPEID_UNIT || target->GetCreatureType() == CREATURE_TYPE_CRITTER || (target->GetEntry() != NPC_SINDRAGOSA && target->IsSummon()))
+ if (!target || target->GetTypeId() != TYPEID_UNIT || target->IsCritter() || (target->GetEntry() != NPC_SINDRAGOSA && target->IsSummon()))
return false;
return true;