Merge branch 'master' into Playerbot

This commit is contained in:
Yunfan Li
2024-07-29 15:40:17 +08:00
129 changed files with 3078 additions and 1132 deletions
@@ -689,12 +689,9 @@ bool AuthSession::HandleReconnectProof()
if (_accountInfo.Login.empty())
return false;
BigNumber t1;
t1.SetBinary(reconnectProof->R1, 16);
Acore::Crypto::SHA1 sha;
sha.UpdateData(_accountInfo.Login);
sha.UpdateData(t1.ToByteArray<16>());
sha.UpdateData(reconnectProof->R1, 16);
sha.UpdateData(_reconnectProof);
sha.UpdateData(_sessionKey);
sha.Finalize();
+26 -6
View File
@@ -962,9 +962,19 @@ uint32 SmartAI::GetData(uint32 /*id*/) const
return 0;
}
void SmartAI::SetData(uint32 id, uint32 value, Unit* invoker)
void SmartAI::SetData(uint32 id, uint32 value, WorldObject* invoker)
{
GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, invoker, id, value);
Unit* unit = nullptr;
GameObject* gob = nullptr;
if (invoker)
{
unit = invoker->ToUnit();
if (!unit)
gob = invoker->ToGameObject();
}
GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, unit, id, value, false, nullptr, gob);
}
void SmartAI::SetGUID(ObjectGuid /*guid*/, int32 /*id*/)
@@ -1132,7 +1142,7 @@ void SmartAI::MoveAway(float distance)
}
}
void SmartAI::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker)
void SmartAI::SetScript9(SmartScriptHolder& e, uint32 entry, WorldObject* invoker)
{
if (invoker)
GetScript()->mLastInvoker = invoker->GetGUID();
@@ -1232,12 +1242,22 @@ void SmartGameObjectAI::Destroyed(Player* player, uint32 eventId)
GetScript()->ProcessEventsFor(SMART_EVENT_DEATH, player, eventId, 0, false, nullptr, me);
}
void SmartGameObjectAI::SetData(uint32 id, uint32 value, Unit* invoker)
void SmartGameObjectAI::SetData(uint32 id, uint32 value, WorldObject* invoker)
{
GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, invoker, id, value);
Unit* unit = nullptr;
GameObject* gob = nullptr;
if (invoker)
{
unit = invoker->ToUnit();
if (!unit)
gob = invoker->ToGameObject();
}
GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, unit, id, value, false, nullptr, gob);
}
void SmartGameObjectAI::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker)
void SmartGameObjectAI::SetScript9(SmartScriptHolder& e, uint32 entry, WorldObject* invoker)
{
if (invoker)
GetScript()->mLastInvoker = invoker->GetGUID();
+4 -4
View File
@@ -70,7 +70,7 @@ public:
void StopFollow(bool complete);
void MoveAway(float distance);
void SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker);
void SetScript9(SmartScriptHolder& e, uint32 entry, WorldObject* invoker);
SmartScript* GetScript() { return &mScript; }
bool IsEscortInvokerInRange();
@@ -160,7 +160,7 @@ public:
// Used in scripts to share variables
void SetData(uint32 id, uint32 value) override { SetData(id, value, nullptr); }
void SetData(uint32 id, uint32 value, Unit* invoker);
void SetData(uint32 id, uint32 value, WorldObject* invoker);
// Used in scripts to share variables
void SetGUID(ObjectGuid guid, int32 id = 0) override;
@@ -274,8 +274,8 @@ public:
bool QuestReward(Player* player, Quest const* quest, uint32 opt) override;
void Destroyed(Player* player, uint32 eventId) override;
void SetData(uint32 id, uint32 value) override { SetData(id, value, nullptr); }
void SetData(uint32 id, uint32 value, Unit* invoker);
void SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker);
void SetData(uint32 id, uint32 value, WorldObject* invoker);
void SetScript9(SmartScriptHolder& e, uint32 entry, WorldObject* invoker);
void OnGameEvent(bool start, uint16 eventId) override;
void OnStateChanged(uint32 state, Unit* unit) override;
void EventInform(uint32 eventId) override;
+53 -24
View File
@@ -167,21 +167,29 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (unit)
mLastInvoker = unit->GetGUID();
else if (gob)
mLastInvoker = gob->GetGUID();
if (Unit* tempInvoker = GetLastInvoker())
if (WorldObject* tempInvoker = GetLastInvoker())
LOG_DEBUG("sql.sql", "SmartScript::ProcessAction: Invoker: {} ({})", tempInvoker->GetName(), tempInvoker->GetGUID().ToString());
bool isControlled = e.action.moveToPos.controlled > 0;
ObjectVector targets;
GetTargets(targets, e, unit);
WorldObject* invoker = nullptr;
if (unit)
invoker = unit;
else if (gob)
invoker = gob;
GetTargets(targets, e, invoker);
switch (e.GetActionType())
{
case SMART_ACTION_TALK:
{
Creature* talker = e.target.type == 0 ? me : nullptr;
Unit* talkTarget = nullptr;
WorldObject* talkTarget = nullptr;
for (WorldObject* target : targets)
{
@@ -232,7 +240,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
sCreatureTextMgr->SendChat(target->ToCreature(), uint8(e.action.simpleTalk.textGroupID), IsPlayer(GetLastInvoker()) ? GetLastInvoker() : 0);
else if (IsPlayer(target) && me)
{
Unit* templastInvoker = GetLastInvoker();
WorldObject* templastInvoker = GetLastInvoker();
sCreatureTextMgr->SendChat(me, uint8(e.action.simpleTalk.textGroupID), IsPlayer(templastInvoker) ? templastInvoker : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_NEUTRAL, false, target->ToPlayer());
}
@@ -783,7 +791,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
case SMART_ACTION_INVOKER_CAST:
{
// Can be used for area trigger cast
Unit* tempLastInvoker = GetLastInvoker(unit);
WorldObject* tempLastInvoker = GetLastInvoker(unit);
if (!tempLastInvoker)
break;
@@ -798,11 +806,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!IsUnit(target))
continue;
if (!IsUnit(tempLastInvoker))
continue;
if (!(e.action.cast.castFlags & SMARTCAST_AURA_NOT_PRESENT) || !target->ToUnit()->HasAura(e.action.cast.spell))
{
if (e.action.cast.castFlags & SMARTCAST_INTERRUPT_PREVIOUS)
{
tempLastInvoker->InterruptNonMeleeSpells(false);
tempLastInvoker->ToUnit()->InterruptNonMeleeSpells(false);
}
TriggerCastFlags triggerFlags = TRIGGERED_NONE;
@@ -818,7 +829,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
}
tempLastInvoker->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlags);
tempLastInvoker->ToUnit()->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlags);
LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_INVOKER_CAST: Invoker {} casts spell {} on target {} with castflags {}",
tempLastInvoker->GetGUID().ToString(), e.action.cast.spell, target->GetGUID().ToString(), e.action.cast.castFlags);
}
@@ -1397,16 +1408,28 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (Creature* cTarget = target->ToCreature())
{
CreatureAI* ai = cTarget->AI();
if (IsSmart(cTarget))
ENSURE_AI(SmartAI, ai)->SetData(e.action.setData.field, e.action.setData.data, me);
// Make sure we check that the sender is either a creature or gameobject
if (IsSmart(cTarget, true) && (me || go))
{
if (me)
ENSURE_AI(SmartAI, ai)->SetData(e.action.setData.field, e.action.setData.data, me);
else
ENSURE_AI(SmartAI, ai)->SetData(e.action.setData.field, e.action.setData.data, go);
}
else
ai->SetData(e.action.setData.field, e.action.setData.data);
}
else if (GameObject* oTarget = target->ToGameObject())
{
GameObjectAI* ai = oTarget->AI();
if (IsSmart(oTarget))
ENSURE_AI(SmartGameObjectAI, ai)->SetData(e.action.setData.field, e.action.setData.data, me);
// Make sure we check that the sender is either a creature or gameobject
if (IsSmart(oTarget, true) && (me || go))
{
if (me)
ENSURE_AI(SmartGameObjectAI, ai)->SetData(e.action.setData.field, e.action.setData.data, me);
else
ENSURE_AI(SmartGameObjectAI, ai)->SetData(e.action.setData.field, e.action.setData.data, go);
}
else
ai->SetData(e.action.setData.field, e.action.setData.data);
}
@@ -2900,7 +2923,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (e.action.setGuid.invokerGUID)
{
if (Unit* invoker = GetLastInvoker())
if (WorldObject* invoker = GetLastInvoker())
{
guidToSend = invoker->GetGUID();
}
@@ -3318,12 +3341,12 @@ SmartScriptHolder SmartScript::CreateSmartEvent(SMART_EVENT e, uint32 event_flag
return script;
}
void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e, Unit* invoker /*= nullptr*/) const
void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e, WorldObject* invoker /*= nullptr*/) const
{
Unit* scriptTrigger = nullptr;
WorldObject* scriptTrigger = nullptr;
if (invoker)
scriptTrigger = invoker;
else if (Unit* tempLastInvoker = GetLastInvoker())
else if (WorldObject* tempLastInvoker = GetLastInvoker())
scriptTrigger = tempLastInvoker;
WorldObject* baseObject = GetBaseObject();
@@ -3399,8 +3422,9 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e,
targets.push_back(scriptTrigger);
break;
case SMART_TARGET_ACTION_INVOKER_VEHICLE:
if (scriptTrigger && scriptTrigger->GetVehicle() && scriptTrigger->GetVehicle()->GetBase())
targets.push_back(scriptTrigger->GetVehicle()->GetBase());
if (scriptTrigger && IsUnit(scriptTrigger))
if (scriptTrigger->ToUnit()->GetVehicle() && scriptTrigger->ToUnit()->GetVehicle()->GetBase())
targets.push_back(scriptTrigger->ToUnit()->GetVehicle()->GetBase());
break;
case SMART_TARGET_INVOKER_PARTY:
if (scriptTrigger)
@@ -4323,7 +4347,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
if (e.event.dataSet.id != var0 || e.event.dataSet.value != var1)
return;
RecalcTimer(e, e.event.dataSet.cooldownMin, e.event.dataSet.cooldownMax);
ProcessAction(e, unit, var0, var1);
ProcessAction(e, unit, var0, var1, false, nullptr, gob);
break;
}
case SMART_EVENT_PASSENGER_REMOVED:
@@ -4352,11 +4376,16 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
case SMART_EVENT_EVENT_PHASE_CHANGE:
{
if (!IsInPhase(e.event.eventPhaseChange.phasemask))
{
return;
}
ProcessAction(e, GetLastInvoker());
WorldObject* templastInvoker = GetLastInvoker();
if (!templastInvoker)
return;
if (!IsUnit(templastInvoker))
return;
ProcessAction(e, templastInvoker->ToUnit());
break;
}
case SMART_EVENT_GAME_EVENT_START:
@@ -5178,14 +5207,14 @@ void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry)
}
}
Unit* SmartScript::GetLastInvoker(Unit* invoker) const
WorldObject* SmartScript::GetLastInvoker(WorldObject* invoker) const
{
// Xinef: Look for invoker only on map of base object... Prevents multithreaded crashes
if (GetBaseObject())
return ObjectAccessor::GetUnit(*GetBaseObject(), mLastInvoker);
return ObjectAccessor::GetWorldObject(*GetBaseObject(), mLastInvoker);
// xinef: used for area triggers invoker cast
else if (invoker)
return ObjectAccessor::GetUnit(*invoker, mLastInvoker);
return ObjectAccessor::GetWorldObject(*invoker, mLastInvoker);
return nullptr;
}
@@ -44,7 +44,7 @@ public:
static void InitTimer(SmartScriptHolder& e);
void ProcessAction(SmartScriptHolder& e, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr);
void ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, uint32 const& max, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr);
void GetTargets(ObjectVector& targets, SmartScriptHolder const& e, Unit* invoker = nullptr) const;
void GetTargets(ObjectVector& targets, SmartScriptHolder const& e, WorldObject* invoker = nullptr) const;
void GetWorldObjectsInDist(ObjectVector& objects, float dist) const;
void InstallTemplate(SmartScriptHolder const& e);
static SmartScriptHolder CreateSmartEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, uint32 event_param6, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 target_param4, uint32 phaseMask);
@@ -186,7 +186,7 @@ public:
//TIMED_ACTIONLIST (script type 9 aka script9)
void SetScript9(SmartScriptHolder& e, uint32 entry);
Unit* GetLastInvoker(Unit* invoker = nullptr) const;
WorldObject* GetLastInvoker(WorldObject* invoker = nullptr) const;
ObjectGuid mLastInvoker;
typedef std::unordered_map<uint32, uint32> CounterMap;
CounterMap mCounterList;
@@ -2473,10 +2473,15 @@ bool AchievementGlobalMgr::IsStatisticAchievement(AchievementEntry const* achiev
bool AchievementGlobalMgr::IsAverageCriteria(AchievementCriteriaEntry const* criteria) const
{
if ((sAchievementStore.LookupEntry(criteria->referredAchievement))->flags & ACHIEVEMENT_FLAG_AVERAGE)
auto referencedAchievement = sAchievementStore.LookupEntry(criteria->referredAchievement);
if (!referencedAchievement)
return false;
if (referencedAchievement->flags & ACHIEVEMENT_FLAG_AVERAGE)
return true;
if (AchievementEntryList const* achRefList = GetAchievementByReferencedId(criteria->referredAchievement))
if (AchievementEntryList const* achRefList = GetAchievementByReferencedId(referencedAchievement->ID))
for (AchievementEntryList::const_iterator itr = achRefList->begin(); itr != achRefList->end(); ++itr)
if ((*itr)->flags & ACHIEVEMENT_FLAG_AVERAGE)
return true;
@@ -120,9 +120,8 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer)
//spawn destroyed aura
for (uint8 i = 0; i <= 9; i++)
SpawnBGObject(BG_AV_OBJECT_BURN_BUILDING_ALLIANCE + i, RESPAWN_IMMEDIATELY);
Creature* creature = GetBGCreature(AV_CPLACE_HERALD);
if (creature)
YellToAll(creature, GetAcoreString(LANG_BG_AV_A_CAPTAIN_DEAD), LANG_UNIVERSAL);
if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
creature->AI()->Talk(AV_TEXT_HERALD_STORMPIKE_GENERAL_DEAD);
DelCreature(AV_CPLACE_TRIGGER16);
}
else if (entry == BG_AV_CreatureInfo[AV_NPC_H_CAPTAIN])
@@ -139,9 +138,8 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer)
//spawn destroyed aura
for (uint8 i = 0; i <= 9; i++)
SpawnBGObject(BG_AV_OBJECT_BURN_BUILDING_HORDE + i, RESPAWN_IMMEDIATELY);
Creature* creature = GetBGCreature(AV_CPLACE_HERALD);
if (creature)
YellToAll(creature, GetAcoreString(LANG_BG_AV_H_CAPTAIN_DEAD), LANG_UNIVERSAL);
if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
creature->AI()->Talk(AV_TEXT_HERALD_FROSTWOLF_GENERAL_DEAD);
DelCreature(AV_CPLACE_TRIGGER18);
}
else if (entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_N_4] || entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_A_4] || entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_H_4])
@@ -646,16 +644,9 @@ void BattlegroundAV::EventPlayerDestroyedPoint(BG_AV_Nodes node)
}
}
}
//send a nice message to all :)
char buf[256];
if (IsTower(node))
snprintf(buf, sizeof(buf), GetAcoreString(LANG_BG_AV_TOWER_TAKEN), GetNodeName(node), (ownerId == TEAM_ALLIANCE) ? GetAcoreString(LANG_BG_AV_ALLY) : GetAcoreString(LANG_BG_AV_HORDE));
else
snprintf(buf, sizeof(buf), GetAcoreString(LANG_BG_AV_GRAVE_TAKEN), GetNodeName(node), (ownerId == TEAM_ALLIANCE) ? GetAcoreString(LANG_BG_AV_ALLY) : GetAcoreString(LANG_BG_AV_HORDE));
Creature* creature = GetBGCreature(AV_CPLACE_HERALD);
if (creature)
YellToAll(creature, buf, LANG_UNIVERSAL);
if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
creature->AI()->Talk(GetDefendString(node, ownerId));
}
void BattlegroundAV::ChangeMineOwner(uint8 mine, TeamId teamId, bool initial)
@@ -727,12 +718,8 @@ void BattlegroundAV::ChangeMineOwner(uint8 mine, TeamId teamId, bool initial)
if (teamId == TEAM_ALLIANCE || teamId == TEAM_HORDE)
{
m_Mine_Reclaim_Timer[mine] = AV_MINE_RECLAIM_TIMER;
char buf[256];
snprintf(buf, sizeof(buf), GetAcoreString(LANG_BG_AV_MINE_TAKEN), (teamId == TEAM_ALLIANCE) ? GetAcoreString(LANG_BG_AV_ALLY) : GetAcoreString(LANG_BG_AV_HORDE),
GetAcoreString((mine == AV_NORTH_MINE) ? LANG_BG_AV_MINE_NORTH : LANG_BG_AV_MINE_SOUTH));
Creature* creature = GetBGCreature(AV_CPLACE_HERALD);
if (creature)
YellToAll(creature, buf, LANG_UNIVERSAL);
if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
creature->AI()->Talk(GetMineString(mine, teamId));
}
else
{
@@ -980,18 +967,12 @@ void BattlegroundAV::EventPlayerDefendsPoint(Player* player, uint32 object)
SpawnBGObject(((teamId == TEAM_ALLIANCE) ? BG_AV_OBJECT_SNOW_EYECANDY_A : BG_AV_OBJECT_SNOW_EYECANDY_H) + i, RESPAWN_IMMEDIATELY);
}
}
//send a nice message to all :)
char buf[256];
snprintf(buf, sizeof(buf), GetAcoreString((IsTower(node)) ? LANG_BG_AV_TOWER_DEFENDED : LANG_BG_AV_GRAVE_DEFENDED), GetNodeName(node), (teamId == TEAM_ALLIANCE) ? GetAcoreString(LANG_BG_AV_ALLY) : GetAcoreString(LANG_BG_AV_HORDE));
Creature* creature = GetBGCreature(AV_CPLACE_HERALD);
if (creature)
YellToAll(creature, buf, LANG_UNIVERSAL);
if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
creature->AI()->Talk(GetDefendString(node, teamId));
//update the statistic for the defending player
UpdatePlayerScore(player, (IsTower(node)) ? SCORE_TOWERS_DEFENDED : SCORE_GRAVEYARDS_DEFENDED, 1);
if (IsTower(node))
PlaySoundToAll(AV_SOUND_BOTH_TOWER_DEFEND);
else
PlaySoundToAll((teamId == TEAM_ALLIANCE) ? AV_SOUND_ALLIANCE_GOOD : AV_SOUND_HORDE_GOOD);
}
void BattlegroundAV::EventPlayerAssaultsPoint(Player* player, uint32 object)
@@ -1092,15 +1073,11 @@ void BattlegroundAV::EventPlayerAssaultsPoint(Player* player, uint32 object)
// xinef: change here is too late, AssaultNode(node, team);
UpdateNodeWorldState(node);
//send a nice message to all :)
char buf[256];
snprintf(buf, sizeof(buf), (IsTower(node)) ? GetAcoreString(LANG_BG_AV_TOWER_ASSAULTED) : GetAcoreString(LANG_BG_AV_GRAVE_ASSAULTED), GetNodeName(node), (teamId == TEAM_ALLIANCE) ? GetAcoreString(LANG_BG_AV_ALLY) : GetAcoreString(LANG_BG_AV_HORDE));
Creature* creature = GetBGCreature(AV_CPLACE_HERALD);
if (creature)
YellToAll(creature, buf, LANG_UNIVERSAL);
if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD))
creature->AI()->Talk(GetAttackString(node, teamId));
//update the statistic for the assaulting player
UpdatePlayerScore(player, (IsTower(node)) ? SCORE_TOWERS_ASSAULTED : SCORE_GRAVEYARDS_ASSAULTED, 1);
PlaySoundToAll((teamId == TEAM_ALLIANCE) ? AV_SOUND_ALLIANCE_ASSAULTS : AV_SOUND_HORDE_ASSAULTS);
player->KilledMonsterCredit((IsTower(node)) ? BG_AV_QUEST_CREDIT_TOWER : BG_AV_QUEST_CREDIT_GRAVEYARD);
}
@@ -1466,46 +1443,226 @@ bool BattlegroundAV::SetupBattleground()
return true;
}
char const* BattlegroundAV::GetNodeName(BG_AV_Nodes node)
uint8 BattlegroundAV::GetAttackString(BG_AV_Nodes node, TeamId teamId)
{
uint8 strId = 0;
switch (node)
{
case BG_AV_NODES_FIRSTAID_STATION:
return GetAcoreString(LANG_BG_AV_NODE_GRAVE_STORM_AID);
case BG_AV_NODES_DUNBALDAR_SOUTH:
return GetAcoreString(LANG_BG_AV_NODE_TOWER_DUN_S);
case BG_AV_NODES_DUNBALDAR_NORTH:
return GetAcoreString(LANG_BG_AV_NODE_TOWER_DUN_N);
case BG_AV_NODES_STORMPIKE_GRAVE:
return GetAcoreString(LANG_BG_AV_NODE_GRAVE_STORMPIKE);
case BG_AV_NODES_ICEWING_BUNKER:
return GetAcoreString(LANG_BG_AV_NODE_TOWER_ICEWING);
case BG_AV_NODES_STONEHEART_GRAVE:
return GetAcoreString(LANG_BG_AV_NODE_GRAVE_STONE);
case BG_AV_NODES_STONEHEART_BUNKER:
return GetAcoreString(LANG_BG_AV_NODE_TOWER_STONE);
case BG_AV_NODES_SNOWFALL_GRAVE:
return GetAcoreString(LANG_BG_AV_NODE_GRAVE_SNOW);
case BG_AV_NODES_ICEBLOOD_TOWER:
return GetAcoreString(LANG_BG_AV_NODE_TOWER_ICE);
case BG_AV_NODES_ICEBLOOD_GRAVE:
return GetAcoreString(LANG_BG_AV_NODE_GRAVE_ICE);
case BG_AV_NODES_TOWER_POINT:
return GetAcoreString(LANG_BG_AV_NODE_TOWER_POINT);
case BG_AV_NODES_FROSTWOLF_GRAVE:
return GetAcoreString(LANG_BG_AV_NODE_GRAVE_FROST);
case BG_AV_NODES_FROSTWOLF_ETOWER:
return GetAcoreString(LANG_BG_AV_NODE_TOWER_FROST_E);
case BG_AV_NODES_FROSTWOLF_WTOWER:
return GetAcoreString(LANG_BG_AV_NODE_TOWER_FROST_W);
case BG_AV_NODES_FROSTWOLF_HUT:
return GetAcoreString(LANG_BG_AV_NODE_GRAVE_FROST_HUT);
default:
LOG_ERROR("bg.battleground", "tried to get name for node {}", node);
break;
case BG_AV_NODES_FIRSTAID_STATION:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_ATTACK;
else
strId = AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_ATTACK;
break;
case BG_AV_NODES_DUNBALDAR_SOUTH:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_ATTACK;
else
strId = AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_ATTACK;
break;
case BG_AV_NODES_DUNBALDAR_NORTH:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_ATTACK;
else
strId = AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_ATTACK;
break;
case BG_AV_NODES_STORMPIKE_GRAVE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_ATTACK;
else
strId = AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_ATTACK;
break;
case BG_AV_NODES_ICEWING_BUNKER:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_ICEWING_BUNKER_ATTACK;
else
strId = AV_TEXT_H_HERALD_ICEWING_BUNKER_ATTACK;
break;
case BG_AV_NODES_STONEHEART_GRAVE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_ATTACK;
else
strId = AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_ATTACK;
break;
case BG_AV_NODES_STONEHEART_BUNKER:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_ATTACK;
else
strId = AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_ATTACK;
break;
case BG_AV_NODES_SNOWFALL_GRAVE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_ATTACK;
else
strId = AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_ATTACK;
break;
case BG_AV_NODES_ICEBLOOD_TOWER:
strId = AV_TEXT_A_HERALD_ICEBLOOD_TOWER_ATTACK;
break;
case BG_AV_NODES_ICEBLOOD_GRAVE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_ATTACK;
else
strId = AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_ATTACK;
break;
case BG_AV_NODES_TOWER_POINT:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_TOWER_POINT_ATTACK;
else
strId = AV_TEXT_H_HERALD_TOWER_POINT_ATTACK;
break;
case BG_AV_NODES_FROSTWOLF_GRAVE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_ATTACK;
else
strId = AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_ATTACK;
break;
case BG_AV_NODES_FROSTWOLF_ETOWER:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_ATTACK;
else
strId = AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_ATTACK;
break;
case BG_AV_NODES_FROSTWOLF_WTOWER:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_ATTACK;
else
strId = AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_ATTACK;
break;
case BG_AV_NODES_FROSTWOLF_HUT:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK;
else
strId = AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK;
break;
default:
break;
}
return "Unknown";
return strId;
}
uint8 BattlegroundAV::GetDefendString(BG_AV_Nodes node, TeamId teamId)
{
uint8 strId = 0;
switch (node)
{
case BG_AV_NODES_FIRSTAID_STATION:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_TAKEN;
else
strId = AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_TAKEN;
break;
case BG_AV_NODES_DUNBALDAR_SOUTH:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_TAKEN;
else
strId = AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_TAKEN;
break;
case BG_AV_NODES_DUNBALDAR_NORTH:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_TAKEN;
else
strId = AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_TAKEN;
break;
case BG_AV_NODES_STORMPIKE_GRAVE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_TAKEN;
else
strId = AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_TAKEN;
break;
case BG_AV_NODES_ICEWING_BUNKER:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_ICEWING_BUNKER_TAKEN;
else
strId = AV_TEXT_H_HERALD_ICEWING_BUNKER_TAKEN;
break;
case BG_AV_NODES_STONEHEART_GRAVE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_TAKEN;
else
strId = AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_TAKEN;
break;
case BG_AV_NODES_STONEHEART_BUNKER:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_TAKEN;
else
strId = AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_TAKEN;
break;
case BG_AV_NODES_SNOWFALL_GRAVE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_TAKEN;
else
strId = AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_TAKEN;
break;
case BG_AV_NODES_ICEBLOOD_TOWER:
strId = AV_TEXT_A_HERALD_ICEBLOOD_TOWER_TAKEN;
break;
case BG_AV_NODES_ICEBLOOD_GRAVE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_TAKEN;
else
strId = AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_TAKEN;
break;
case BG_AV_NODES_TOWER_POINT:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_TOWER_POINT_TAKEN;
else
strId = AV_TEXT_H_HERALD_TOWER_POINT_TAKEN;
break;
case BG_AV_NODES_FROSTWOLF_GRAVE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_TAKEN;
else
strId = AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_TAKEN;
break;
case BG_AV_NODES_FROSTWOLF_ETOWER:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_TAKEN;
else
strId = AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_TAKEN;
break;
case BG_AV_NODES_FROSTWOLF_WTOWER:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_TAKEN;
else
strId = AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_TAKEN;
break;
case BG_AV_NODES_FROSTWOLF_HUT:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN;
else
strId = AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN;
break;
default:
break;
}
return strId;
}
uint8 BattlegroundAV::GetMineString(uint8 mineId, TeamId teamId)
{
uint8 strId = 0;
switch (mineId)
{
case AV_NORTH_MINE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_IRONDEEP_MINE_TAKEN;
else
strId = AV_TEXT_H_HERALD_IRONDEEP_MINE_TAKEN;
break;
case AV_SOUTH_MINE:
if (teamId == TEAM_ALLIANCE)
strId = AV_TEXT_A_HERALD_COLDTOOTH_MINE_TAKEN;
else
strId = AV_TEXT_H_HERALD_COLDTOOTH_MINE_TAKEN;
break;
default:
break;
}
return strId;
}
void BattlegroundAV::AssaultNode(BG_AV_Nodes node, TeamId teamId)
@@ -1645,6 +1645,78 @@ enum BG_AV_Objectives
AV_OBJECTIVE_DEFEND_GRAVEYARD = 65
};
enum BG_AV_HERALD
{
AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_TAKEN = 1,
AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_ATTACK = 2,
AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_TAKEN = 3,
AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_ATTACK = 4,
AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_TAKEN = 5,
AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_ATTACK = 6,
AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_TAKEN = 7,
AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_ATTACK = 8,
AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_TAKEN = 9,
AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_ATTACK = 10,
AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_TAKEN = 11,
AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_ATTACK = 12,
AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_ATTACK = 13,
AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_TAKEN = 14,
AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_ATTACK = 15,
AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_TAKEN = 16,
AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_ATTACK = 17,
AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_TAKEN = 18,
AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_ATTACK = 19,
AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_TAKEN = 20,
AV_TEXT_H_HERALD_ICEWING_BUNKER_ATTACK = 21,
AV_TEXT_H_HERALD_ICEWING_BUNKER_TAKEN = 22,
AV_TEXT_A_HERALD_ICEWING_BUNKER_ATTACK = 23,
AV_TEXT_A_HERALD_ICEWING_BUNKER_TAKEN = 24,
AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_ATTACK = 25,
AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_TAKEN = 26,
AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_ATTACK = 27,
AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_TAKEN = 28,
AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_ATTACK = 29,
AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_TAKEN = 30,
AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_ATTACK = 31,
AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_TAKEN = 32,
AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_ATTACK = 33,
AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_TAKEN = 34,
AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_ATTACK = 35,
AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_TAKEN = 36,
AV_TEXT_H_HERALD_TOWER_POINT_ATTACK = 37,
AV_TEXT_H_HERALD_TOWER_POINT_TAKEN = 38,
AV_TEXT_A_HERALD_TOWER_POINT_ATTACK = 39,
AV_TEXT_A_HERALD_TOWER_POINT_TAKEN = 40,
AV_TEXT_H_HERALD_ICEBLOOD_BUNKER_ATTACK = 41,
AV_TEXT_H_HERALD_ICEBLOOD_BUNKER_TAKEN = 42,
AV_TEXT_A_HERALD_ICEBLOOD_TOWER_ATTACK = 43,
AV_TEXT_A_HERALD_ICEBLOOD_TOWER_TAKEN = 44,
AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_TAKEN = 45,
AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_ATTACK = 46,
AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_TAKEN = 47,
AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_ATTACK = 48,
AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN = 49,
AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK = 50,
AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN = 51,
AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK = 52,
AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_TAKEN = 53,
AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_ATTACK = 54,
AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_TAKEN = 55,
AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_ATTACK = 56,
AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_TAKEN = 57,
AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_ATTACK = 58,
AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_TAKEN = 59,
AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_ATTACK = 60,
AV_TEXT_A_HERALD_COLDTOOTH_MINE_TAKEN = 61,
AV_TEXT_A_HERALD_IRONDEEP_MINE_TAKEN = 62,
AV_TEXT_H_HERALD_COLDTOOTH_MINE_TAKEN = 63,
AV_TEXT_H_HERALD_IRONDEEP_MINE_TAKEN = 64,
AV_TEXT_HERALD_FROSTWOLF_GENERAL_DEAD = 65,
AV_TEXT_HERALD_STORMPIKE_GENERAL_DEAD = 66,
AV_TEXT_A_HERALD_WIN = 67,
AV_TEXT_H_HERALD_WIN = 68
};
struct BG_AV_NodeInfo
{
BG_AV_States State;
@@ -1766,9 +1838,12 @@ private:
BG_AV_Nodes GetNodeThroughObject(uint32 object);
uint32 GetObjectThroughNode(BG_AV_Nodes node);
char const* GetNodeName(BG_AV_Nodes node);
bool IsTower(BG_AV_Nodes node) { return m_Nodes[node].Tower; }
uint8 GetAttackString(BG_AV_Nodes node, TeamId teamId);
uint8 GetDefendString(BG_AV_Nodes node, TeamId teamId);
uint8 GetMineString(uint8 mine, TeamId teamId);
/*mine*/
void ChangeMineOwner(uint8 mine, TeamId teamId, bool initial = false);
@@ -22,7 +22,6 @@
#include "GameTime.h"
#include "Log.h"
#include "ObjectAccessor.h"
#include "Opcodes.h"
#include "Player.h"
#include "UpdateMask.h"
#include "World.h"
@@ -25,7 +25,6 @@
#include "ItemTemplate.h"
#include "LootMgr.h"
#include "Unit.h"
#include "UpdateMask.h"
#include "World.h"
#include <list>
@@ -18,14 +18,11 @@
#ifndef AZEROTHCORE_CREATUREDATA_H
#define AZEROTHCORE_CREATUREDATA_H
#include "Cell.h"
#include "Common.h"
#include "DBCEnums.h"
#include "DatabaseEnv.h"
#include "ItemTemplate.h"
#include "LootMgr.h"
#include "Unit.h"
#include "UpdateMask.h"
#include "World.h"
#include <list>
@@ -18,7 +18,6 @@
#include "GameTime.h"
#include "GridNotifiers.h"
#include "ObjectAccessor.h"
#include "Opcodes.h"
#include "ScriptMgr.h"
#include "SpellAuraEffects.h"
#include "Transport.h"
@@ -20,7 +20,6 @@
#include "CellImpl.h"
#include "CreatureAISelector.h"
#include "DisableMgr.h"
#include "DynamicTree.h"
#include "GameObjectAI.h"
#include "GameObjectModel.h"
#include "GameTime.h"
@@ -26,7 +26,6 @@
#include "Object.h"
#include "SharedDefines.h"
#include "Unit.h"
#include <array>
class GameObjectAI;
class Transport;
@@ -18,7 +18,6 @@
#ifndef _ITEMPROTOTYPE_H
#define _ITEMPROTOTYPE_H
#include "Common.h"
#include "SharedDefines.h"
#include "WorldPacket.h"
#include <unordered_map>
+2
View File
@@ -35,6 +35,8 @@
#include <sstream>
#include <string>
#include "UpdateFields.h"
class ElunaEventProcessor;
enum TempSummonType
@@ -23,9 +23,7 @@
#include <deque>
#include <functional>
#include <list>
#include <memory>
#include <set>
#include <type_traits>
#include <unordered_set>
#include <vector>
@@ -20,7 +20,6 @@
#include "ByteBuffer.h"
#include "Errors.h"
#include "UpdateFields.h"
class UpdateMask
{
@@ -42,7 +42,6 @@
#include "Formulas.h"
#include "GameEventMgr.h"
#include "GameGraveyard.h"
#include "GameObjectAI.h"
#include "GameTime.h"
#include "GossipDef.h"
#include "GridNotifiers.h"
@@ -63,7 +62,6 @@
#include "OutdoorPvPMgr.h"
#include "Pet.h"
#include "PetitionMgr.h"
#include "QueryHolder.h"
#include "QuestDef.h"
#include "Realm.h"
#include "ReputationMgr.h"
-2
View File
@@ -28,7 +28,6 @@
#include "GroupReference.h"
#include "InstanceSaveMgr.h"
#include "Item.h"
#include "KillRewarder.h"
#include "MapReference.h"
#include "ObjectMgr.h"
#include "Optional.h"
@@ -38,7 +37,6 @@
#include "QuestDef.h"
#include "SpellAuras.h"
#include "SpellInfo.h"
#include "SpellMgr.h"
#include "TradeData.h"
#include "Unit.h"
#include "WorldSession.h"
@@ -20,9 +20,7 @@
#include "ArenaTeam.h"
#include "ArenaTeamMgr.h"
#include "Battlefield.h"
#include "BattlefieldMgr.h"
#include "Battleground.h"
#include "BattlegroundAV.h"
#include "BattlegroundMgr.h"
#include "Channel.h"
#include "CharacterDatabaseCleaner.h"
@@ -69,7 +67,6 @@
#include "UpdateFieldFlags.h"
#include "Util.h"
#include "Vehicle.h"
#include "Weather.h"
#include "World.h"
#include "WorldPacket.h"
@@ -19,7 +19,6 @@
#define __PLAYER_TAXI_H__
#include "DBCStructure.h"
#include <vector>
class ByteBuffer;
@@ -18,7 +18,6 @@
#ifndef __ACORE_SOCIALMGR_H
#define __ACORE_SOCIALMGR_H
#include "Common.h"
#include "DatabaseEnv.h"
#include "ObjectGuid.h"
#include <map>
@@ -29,7 +29,6 @@
#include "ScriptMgr.h"
#include "Spell.h"
#include "Vehicle.h"
#include "World.h"
#include "WorldModel.h"
MotionTransport::MotionTransport() : Transport(), _transportInfo(nullptr), _isMoving(true), _pendingStop(false), _triggeredArrivalEvent(false), _triggeredDepartureEvent(false), _passengersLoaded(false), _delayedTeleport(false)
+12 -6
View File
@@ -33,12 +33,10 @@
#include "CreatureGroups.h"
#include "DisableMgr.h"
#include "DynamicVisibility.h"
#include "Formulas.h"
#include "GameObjectAI.h"
#include "GameTime.h"
#include "GridNotifiersImpl.h"
#include "Group.h"
#include "InstanceSaveMgr.h"
#include "Log.h"
#include "MapMgr.h"
#include "MoveSpline.h"
@@ -2343,7 +2341,7 @@ void Unit::CalcAbsorbResist(DamageInfo& dmgInfo, bool Splited)
{
// We're going to call functions which can modify content of the list during iteration over it's elements
// Let's copy the list so we can prevent iterator invalidation
AuraEffectList vSplitDamageFlatCopy(victim->GetAuraEffectsByType(SPELL_AURA_SPLIT_DAMAGE_FLAT));
AuraEffectList vSplitDamageFlatCopy(victim->GetAuraEffectsByType(SPELL_AURA_SPLIT_DAMAGE_FLAT)); // Not used by any spell
for (AuraEffectList::iterator itr = vSplitDamageFlatCopy.begin(); (itr != vSplitDamageFlatCopy.end()) && (dmgInfo.GetDamage() > 0); ++itr)
{
// Check if aura was removed during iteration - we don't need to work on such auras
@@ -2358,6 +2356,13 @@ void Unit::CalcAbsorbResist(DamageInfo& dmgInfo, bool Splited)
if (!caster || (caster == victim) || !caster->IsInWorld() || !caster->IsAlive())
continue;
// Limit effect range to spell's cast range. (Only for single target auras, AreaAuras don't need it)
// Ignore LOS attribute is only used for the cast portion of the spell
SpellInfo const* splitSpellInfo = (*itr)->GetSpellInfo();
if (!splitSpellInfo->Effects[(*itr)->GetEffIndex()].IsAreaAuraEffect())
if (!caster->IsWithinDist(victim, splitSpellInfo->GetMaxRange(splitSpellInfo->IsPositive(), caster)))
continue;
int32 splitDamage = (*itr)->GetAmount();
// absorb must be smaller than the damage itself
@@ -2418,10 +2423,11 @@ void Unit::CalcAbsorbResist(DamageInfo& dmgInfo, bool Splited)
if (!caster || (caster == victim) || !caster->IsInWorld() || !caster->IsAlive())
continue;
// Xinef: Single Target splits require LoS
// Limit effect range to spell's cast range. (Only for single target auras, AreaAuras don't need it)
// Ignore LOS attribute is only used for the cast portion of the spell
SpellInfo const* splitSpellInfo = (*itr)->GetSpellInfo();
if (!splitSpellInfo->Effects[(*itr)->GetEffIndex()].IsAreaAuraEffect() && !splitSpellInfo->HasAttribute(SPELL_ATTR2_IGNORE_LINE_OF_SIGHT))
if (!caster->IsWithinLOSInMap(victim) || !caster->IsWithinDist(victim, splitSpellInfo->GetMaxRange(splitSpellInfo->IsPositive(), caster)))
if (!splitSpellInfo->Effects[(*itr)->GetEffIndex()].IsAreaAuraEffect())
if (!caster->IsWithinDist(victim, splitSpellInfo->GetMaxRange(splitSpellInfo->IsPositive(), caster)))
continue;
uint32 splitDamage = CalculatePct(dmgInfo.GetDamage(), (*itr)->GetAmount());
-1
View File
@@ -26,7 +26,6 @@
#include "ItemTemplate.h"
#include "MotionMaster.h"
#include "Object.h"
#include "Optional.h"
#include "SpellAuraDefines.h"
#include "SpellDefines.h"
#include "ThreatMgr.h"
@@ -22,7 +22,6 @@
#include "ObjectMgr.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "SpellInfo.h"
#include "TemporarySummon.h"
#include "Unit.h"
#include "Util.h"
@@ -18,8 +18,6 @@
#ifndef __ACORE_VEHICLE_H
#define __ACORE_VEHICLE_H
#include "EventProcessor.h"
#include "ObjectDefines.h"
#include "Unit.h"
#include "VehicleDefines.h"
@@ -20,7 +20,6 @@
#include "Define.h"
#include "Map.h"
#include "Object.h"
#include <map>
#include <vector>
@@ -33,6 +33,8 @@
#include "WorldSession.h"
#include <iostream>
#include "SpellMgr.h"
class Player;
//class Map;
@@ -55,7 +55,7 @@ void WorldSession::SendAuctionHello(ObjectGuid guid, Creature* unit)
{
if (GetPlayer()->GetLevel() < sWorld->getIntConfig(CONFIG_AUCTION_LEVEL_REQ))
{
SendNotification(GetAcoreString(LANG_AUCTION_REQ), sWorld->getIntConfig(CONFIG_AUCTION_LEVEL_REQ));
SendNotification(LANG_AUCTION_REQ, sWorld->getIntConfig(CONFIG_AUCTION_LEVEL_REQ));
return;
}
+8 -8
View File
@@ -131,7 +131,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
break;
default:
{
if (sWorld->getBoolConfig(CONFIG_CHAT_MUTE_FIRST_LOGIN))
if (sWorld->getBoolConfig(CONFIG_CHAT_MUTE_FIRST_LOGIN) && lang != LANG_ADDON)
{
uint32 minutes = sWorld->getIntConfig(CONFIG_CHAT_TIME_MUTE_FIRST_LOGIN);
@@ -164,7 +164,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
if (sender->HasAura(1852) && type != CHAT_MSG_WHISPER)
{
SendNotification(GetAcoreString(LANG_GM_SILENCE), sender->GetName().c_str());
SendNotification(LANG_GM_SILENCE, sender->GetName());
recvData.rfinish();
return;
}
@@ -296,7 +296,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
if (!_player->CanSpeak())
{
std::string timeStr = secsToTimeString(m_muteTime - GameTime::GetGameTime().count());
SendNotification(GetAcoreString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str());
SendNotification(LANG_WAIT_BEFORE_SPEAKING, timeStr);
return;
}
}
@@ -361,7 +361,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
if (sender->GetLevel() < sWorld->getIntConfig(CONFIG_CHAT_SAY_LEVEL_REQ))
{
SendNotification(GetAcoreString(LANG_SAY_REQ), sWorld->getIntConfig(CONFIG_CHAT_SAY_LEVEL_REQ));
SendNotification(LANG_SAY_REQ, sWorld->getIntConfig(CONFIG_CHAT_SAY_LEVEL_REQ));
return;
}
@@ -387,7 +387,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
if (sender->GetLevel() < sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ) && receiver != sender)
{
SendNotification(GetAcoreString(LANG_WHISPER_REQ), sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ));
SendNotification(LANG_WHISPER_REQ, sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ));
return;
}
@@ -407,7 +407,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
// pussywizard: optimization
if (GetPlayer()->HasAura(1852) && !receiver->IsGameMaster())
{
SendNotification(GetAcoreString(LANG_GM_SILENCE), GetPlayer()->GetName().c_str());
SendNotification(LANG_GM_SILENCE, GetPlayer()->GetName());
return;
}
@@ -601,7 +601,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
{
if (sender->GetLevel() < sWorld->getIntConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ))
{
SendNotification(GetAcoreString(LANG_CHANNEL_REQ), sWorld->getIntConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ));
SendNotification(LANG_CHANNEL_REQ, sWorld->getIntConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ));
return;
}
}
@@ -746,7 +746,7 @@ void WorldSession::HandleTextEmoteOpcode(WorldPacket& recvData)
if (!GetPlayer()->CanSpeak())
{
std::string timeStr = secsToTimeString(m_muteTime - GameTime::GetGameTime().count());
SendNotification(GetAcoreString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str());
SendNotification(LANG_WAIT_BEFORE_SPEAKING, timeStr);
return;
}
+1 -1
View File
@@ -117,7 +117,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData)
if (player->GetLevel() < sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ))
{
SendNotification(GetAcoreString(LANG_MAIL_SENDER_REQ), sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ));
SendNotification(LANG_MAIL_SENDER_REQ, sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ));
return;
}
+1 -1
View File
@@ -35,7 +35,7 @@ void WorldSession::HandleGMTicketCreateOpcode(WorldPacket& recvData)
if (GetPlayer()->GetLevel() < sWorld->getIntConfig(CONFIG_TICKET_LEVEL_REQ))
{
SendNotification(GetAcoreString(LANG_TICKET_REQ), sWorld->getIntConfig(CONFIG_TICKET_LEVEL_REQ));
SendNotification(LANG_TICKET_REQ, sWorld->getIntConfig(CONFIG_TICKET_LEVEL_REQ));
return;
}
+2 -2
View File
@@ -574,7 +574,7 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
if (GetPlayer()->GetLevel() < sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ))
{
SendNotification(GetAcoreString(LANG_TRADE_REQ), sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ));
SendNotification(LANG_TRADE_REQ, sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ));
return;
}
@@ -639,7 +639,7 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
if (pOther->GetLevel() < sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ))
{
SendNotification(GetAcoreString(LANG_TRADE_OTHER_REQ), sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ));
SendNotification(LANG_TRADE_OTHER_REQ, sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ));
return;
}
+13 -2
View File
@@ -468,9 +468,20 @@ bool LootItem::AllowedForPlayer(Player const* player, ObjectGuid source) const
}
// check quest requirements
if (!(pProto->FlagsCu & ITEM_FLAGS_CU_IGNORE_QUEST_STATUS) && ((needs_quest || (pProto->StartQuest && player->GetQuestStatus(pProto->StartQuest) != QUEST_STATUS_NONE)) && !player->HasQuestForItem(itemid)))
if (!(pProto->FlagsCu & ITEM_FLAGS_CU_IGNORE_QUEST_STATUS))
{
return false;
// Don't drop quest items if the player is missing the relevant quest
if (needs_quest && !player->HasQuestForItem(itemid))
return false;
// for items that start quests
if (pProto->StartQuest)
{
// Don't drop the item if the player has already finished the quest OR player already has the item in their inventory, and that item is unique OR the player has not finished a prerequisite quest
uint32 prevQuestId = sObjectMgr->GetQuestTemplate(pProto->StartQuest) ? sObjectMgr->GetQuestTemplate(pProto->StartQuest)->GetPrevQuestId() : 0;
if (player->GetQuestStatus(pProto->StartQuest) != QUEST_STATUS_NONE || (player->HasItemCount(itemid, pProto->MaxCount) && pProto->MaxCount) || (prevQuestId && !player->GetQuestRewardStatus(prevQuestId)))
return false;
}
}
if (!sScriptMgr->OnAllowedForPlayerLootCheck(player, source))
+7 -38
View File
@@ -415,7 +415,12 @@ enum AcoreStrings
LANG_COMMAND_RESET_ITEMS_ALL_BAGS = 372,
// [END] reset items command strings
// Room for more level 2 373-399 not used
// .aura stack
LANG_COMMAND_AURASTACK_NO_AURA = 373,
LANG_COMMAND_AURASTACK_NO_STACK = 374,
LANG_COMMAND_AURASTACK_CANT_STACK = 375,
// Room for more level 2 376-399 not used
// level 3 chat
LANG_SCRIPTS_RELOADED = 400,
@@ -975,43 +980,7 @@ enum AcoreStrings
LANG_DEBUG_AREATRIGGER_OFF = 1203,
LANG_DEBUG_AREATRIGGER_REACHED = 1204,
// 1205-1299 - free
// 1300-1333
// AV
LANG_BG_AV_ALLY = 1300,
LANG_BG_AV_HORDE = 1301,
LANG_BG_AV_TOWER_TAKEN = 1302,
LANG_BG_AV_TOWER_ASSAULTED = 1303,
LANG_BG_AV_TOWER_DEFENDED = 1304,
LANG_BG_AV_GRAVE_TAKEN = 1305,
LANG_BG_AV_GRAVE_DEFENDED = 1306,
LANG_BG_AV_GRAVE_ASSAULTED = 1307,
LANG_BG_AV_MINE_TAKEN = 1308,
LANG_BG_AV_MINE_NORTH = 1309,
LANG_BG_AV_MINE_SOUTH = 1310,
LANG_BG_AV_NODE_GRAVE_STORM_AID = 1311,
LANG_BG_AV_NODE_TOWER_DUN_S = 1312,
LANG_BG_AV_NODE_TOWER_DUN_N = 1313,
LANG_BG_AV_NODE_GRAVE_STORMPIKE = 1314,
LANG_BG_AV_NODE_TOWER_ICEWING = 1315,
LANG_BG_AV_NODE_GRAVE_STONE = 1316,
LANG_BG_AV_NODE_TOWER_STONE = 1317,
LANG_BG_AV_NODE_GRAVE_SNOW = 1318,
LANG_BG_AV_NODE_TOWER_ICE = 1319,
LANG_BG_AV_NODE_GRAVE_ICE = 1320,
LANG_BG_AV_NODE_TOWER_POINT = 1321,
LANG_BG_AV_NODE_GRAVE_FROST = 1322,
LANG_BG_AV_NODE_TOWER_FROST_E = 1323,
LANG_BG_AV_NODE_TOWER_FROST_W = 1324,
LANG_BG_AV_NODE_GRAVE_FROST_HUT = 1325,
// 1326-1330 - free
LANG_BG_AV_H_CAPTAIN_DEAD = 1331,
LANG_BG_AV_A_CAPTAIN_DEAD = 1332,
// 1205-1333 - free
//Player Ticket Strings
LANG_TICKET_CLOSED = 1334,
+5 -29
View File
@@ -43,6 +43,7 @@
#include "QueryHolder.h"
#include "ScriptMgr.h"
#include "SocialMgr.h"
#include "Tokenize.h"
#include "Transport.h"
#include "Vehicle.h"
#include "WardenMac.h"
@@ -813,37 +814,12 @@ bool WorldSession::DisallowHyperlinksAndMaybeKick(std::string_view str)
return false;
}
void WorldSession::SendNotification(const char* format, ...)
void WorldSession::SendNotification(std::string_view str)
{
if (format)
WorldPacket data(SMSG_NOTIFICATION, str.size() + 1);
for (std::string_view line : Acore::Tokenize(str, '\n', true))
{
va_list ap;
char szStr[1024];
szStr[0] = '\0';
va_start(ap, format);
vsnprintf(szStr, 1024, format, ap);
va_end(ap);
WorldPacket data(SMSG_NOTIFICATION, (strlen(szStr) + 1));
data << szStr;
SendPacket(&data);
}
}
void WorldSession::SendNotification(uint32 string_id, ...)
{
char const* format = GetAcoreString(string_id);
if (format)
{
va_list ap;
char szStr[1024];
szStr[0] = '\0';
va_start(ap, string_id);
vsnprintf(szStr, 1024, format, ap);
va_end(ap);
WorldPacket data(SMSG_NOTIFICATION, (strlen(szStr) + 1));
data << szStr;
data << line.data();
SendPacket(&data);
}
}
+12 -2
View File
@@ -365,9 +365,19 @@ public:
void ReadMovementInfo(WorldPacket& data, MovementInfo* mi);
void WriteMovementInfo(WorldPacket* data, MovementInfo* mi);
void SendNotification(std::string_view str);
template<typename... Args>
void SendNotification(uint32 strId, Args&&... args)
{
SendNotification(Acore::StringFormatFmt(GetAcoreString(strId), std::forward<Args>(args)...));
}
template<typename... Args>
void SendNotification(char const* fmt, Args&&... args)
{
SendNotification(Acore::StringFormatFmt(fmt, std::forward<Args>(args)...));
}
void SendPacket(WorldPacket const* packet);
void SendNotification(const char* format, ...) ATTR_PRINTF(2, 3);
void SendNotification(uint32 string_id, ...);
void SendPetNameInvalid(uint32 error, std::string const& name, DeclinedName* declinedName);
void SendPartyResult(PartyOperation operation, std::string const& member, PartyResult res, uint32 val = 0);
void SendAreaTriggerMessage(const char* Text, ...) ATTR_PRINTF(2, 3);
@@ -290,7 +290,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS] =
&AuraEffect::HandleNoImmediateEffect, //227 SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE implemented in AuraEffect::PeriodicTick
&AuraEffect::HandleNoImmediateEffect, //228 SPELL_AURA_DETECT_STEALTH stealth detection
&AuraEffect::HandleNoImmediateEffect, //229 SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE
&AuraEffect::HandleAuraModIncreaseHealth, //230 SPELL_AURA_MOD_INCREASE_HEALTH_2
&AuraEffect::HandleAuraModIncreaseMaxHealth, //230 SPELL_AURA_MOD_INCREASE_HEALTH_2 only Blood Pact and Commanding Shout
&AuraEffect::HandleNoImmediateEffect, //231 SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE
&AuraEffect::HandleNoImmediateEffect, //232 SPELL_AURA_MECHANIC_DURATION_MOD implement in Unit::CalculateSpellDuration
&AuraEffect::HandleUnused, //233 set model id to the one of the creature with id GetMiscValue() - clientside
@@ -3607,62 +3607,6 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
});
// Dragonmaw Race: All parts
ApplySpellFix({
40890 // Oldie's Rotten Pumpkin
}, [](SpellInfo* spellInfo)
{
spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
spellInfo->Effects[EFFECT_0].TriggerSpell = 40905;
spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
});
// Trope's Slime Cannon
ApplySpellFix({ 40909 }, [](SpellInfo* spellInfo)
{
spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
spellInfo->Effects[EFFECT_0].TriggerSpell = 40905;
spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
});
// Corlok's Skull Barrage
ApplySpellFix({ 40894 }, [](SpellInfo* spellInfo)
{
spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
spellInfo->Effects[EFFECT_0].TriggerSpell = 40900;
spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
});
// Ichman's Blazing Fireball
ApplySpellFix({ 40928 }, [](SpellInfo* spellInfo)
{
spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
spellInfo->Effects[EFFECT_0].TriggerSpell = 40929;
spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
});
// Mulverick's Great Balls of Lightning
ApplySpellFix({ 40930 }, [](SpellInfo* spellInfo)
{
spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
spellInfo->Effects[EFFECT_0].TriggerSpell = 40931;
spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
});
// Sky Shatter
ApplySpellFix({ 40945 }, [](SpellInfo* spellInfo)
{
spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
spellInfo->Effects[EFFECT_0].TriggerSpell = 41064;
spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
});
// Gauging the Resonant Frequency (10594)
ApplySpellFix({ 37390 }, [](SpellInfo* spellInfo)
{
@@ -4834,6 +4778,12 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->AuraInterruptFlags &= ~AURA_INTERRUPT_FLAG_NOT_ABOVEWATER;
});
// Molten Punch
ApplySpellFix({ 40126 }, [](SpellInfo* spellInfo)
{
spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_CASTER);
});
for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i)
{
SpellInfo* spellInfo = mSpellInfoMap[i];
+53 -2
View File
@@ -87,12 +87,18 @@ public:
ChatCommandTable GetCommands() const override
{
static ChatCommandTable auraCommandTable =
{
{ "stack", HandleAuraStacksCommand, SEC_GAMEMASTER, Console::No },
{ "", HandleAuraCommand, SEC_GAMEMASTER, Console::No }
};
static ChatCommandTable commandTable =
{
{ "commentator", HandleCommentatorCommand, SEC_MODERATOR, Console::No },
{ "dev", HandleDevCommand, SEC_ADMINISTRATOR, Console::No },
{ "gps", HandleGPSCommand, SEC_MODERATOR, Console::No },
{ "aura", HandleAuraCommand, SEC_GAMEMASTER, Console::No },
{ "aura", auraCommandTable },
{ "unaura", HandleUnAuraCommand, SEC_GAMEMASTER, Console::No },
{ "appear", HandleAppearCommand, SEC_MODERATOR, Console::No },
{ "summon", HandleSummonCommand, SEC_GAMEMASTER, Console::No },
@@ -129,7 +135,7 @@ public:
{ "cometome", HandleComeToMeCommand, SEC_ADMINISTRATOR, Console::No },
{ "damage", HandleDamageCommand, SEC_GAMEMASTER, Console::No },
{ "combatstop", HandleCombatStopCommand, SEC_GAMEMASTER, Console::Yes },
{ "flusharenapoints", HandleFlushArenaPointsCommand, SEC_ADMINISTRATOR, Console::Yes },
{ "flusharenapoints", HandleFlushArenaPointsCommand, SEC_ADMINISTRATOR, Console::Yes },
{ "freeze", HandleFreezeCommand, SEC_GAMEMASTER, Console::No },
{ "unfreeze", HandleUnFreezeCommand, SEC_GAMEMASTER, Console::No },
{ "possess", HandlePossessCommand, SEC_GAMEMASTER, Console::No },
@@ -653,6 +659,51 @@ public:
return true;
}
static bool HandleAuraStacksCommand(ChatHandler* handler, SpellInfo const* spell, int16 stacks)
{
if (!spell)
{
handler->SendErrorMessage(LANG_COMMAND_NOSPELLFOUND);
return false;
}
if (!SpellMgr::IsSpellValid(spell))
{
handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id);
return false;
}
if (!stacks)
{
handler->SendErrorMessage(LANG_COMMAND_AURASTACK_NO_STACK);
return false;
}
Unit* target = handler->getSelectedUnit();
if (!target)
{
handler->SendErrorMessage(LANG_SELECT_CHAR_OR_CREATURE);
return false;
}
Aura* aur = target->GetAura(spell->Id);
if (!aur)
{
handler->SendErrorMessage(LANG_COMMAND_AURASTACK_NO_AURA, spell->Id);
return false;
}
if (!spell->StackAmount)
{
handler->SendErrorMessage(LANG_COMMAND_AURASTACK_CANT_STACK, spell->Id);
return false;
}
aur->ModStackAmount(stacks);
return true;
}
static bool HandleUnAuraCommand(ChatHandler* handler, Variant<SpellInfo const*, std::string_view> spells)
{
Unit* target = handler->getSelectedUnit();
+1 -1
View File
@@ -279,7 +279,7 @@ public:
handler->PSendSysMessage("Connection peak: {}.", connPeak);
handler->PSendSysMessage(LANG_UPTIME, secsToTimeString(GameTime::GetUptime().count()));
handler->PSendSysMessage("Update time diff: {}ms. Last %d diffs summary:", sWorldUpdateTime.GetLastUpdateTime(), sWorldUpdateTime.GetDatasetSize());
handler->PSendSysMessage("Update time diff: {}ms. Last {} diffs summary:", sWorldUpdateTime.GetLastUpdateTime(), sWorldUpdateTime.GetDatasetSize());
handler->PSendSysMessage("|- Mean: {}ms", sWorldUpdateTime.GetAverageUpdateTime());
handler->PSendSysMessage("|- Median: {}ms", sWorldUpdateTime.GetPercentile(50));
handler->PSendSysMessage("|- Percentiles (95, 99, max): {}ms, {}ms, {}ms",
@@ -15,7 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CreatureScript.h"
#include "InstanceMapScript.h"
#include "InstanceScript.h"
#include "blackfathom_deeps.h"
@@ -16,10 +16,10 @@
*/
#include "CreatureScript.h"
#include "GridNotifiers.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "hyjal.h"
@@ -145,32 +145,35 @@ struct npc_doomfire_spirit : public ScriptedAI
{
npc_doomfire_spirit(Creature* creature) : ScriptedAI(creature){ }
float const turnConstant = 0.785402f;
float fAngle = urand(0, M_PI * 2);
float const turnConstant = 0.785402f; // 45 degree turns, verified with sniffs
void Reset() override
{
scheduler.CancelAll();
ScheduleTimedEvent(0s, [&] {
float nextOrientation = Position::NormalizeOrientation(me->GetOrientation() + irand(-1, 1) * turnConstant);
Position pos = GetFirstRandomAngleCollisionPosition(8.f, nextOrientation); // both orientation and distance verified with sniffs
me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), nextOrientation);
}, 1600ms);
ScheduleUniqueTimedEvent(10ms, [&] {
TryTeleportInDirection(1.f, M_PI, 1.f, true); //turns around and teleports 1 unit on spawn, assuming same logic as later teleports applies
fAngle = urand(0, M_PI * 2);
ScheduleTimedEvent(10ms, [&] {
float angle = irand(-1, 1) * turnConstant;
TryTeleportInDirection(8.f, angle, 2.f, false);
}, 1600ms);
},1);
}
Position GetFirstRandomAngleCollisionPosition(float dist, float angle)
void TryTeleportInDirection(float dist, float angle, float step, bool alwaysturn)
{
Position pos;
for (uint32 i = 0; i < 10; ++i)
while (dist >= 0)
{
pos = me->WorldObject::GetFirstCollisionPosition(dist, angle);
if (me->GetDistance(pos) > dist * 0.8f) // if at least 80% distance, good enough
if (fabsf(dist - me->GetExactDist2d(pos)) < 0.001) // Account for small deviation
break;
angle += (M_PI / 5); // else try slightly different angle
dist -= step; // Distance drops with each unsuccessful attempt
}
return pos;
if (dist || alwaysturn)
me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), Position::NormalizeOrientation(me->GetOrientation() + angle));
else // Orientation does not change if not moving, verified with sniffs
me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), me->GetOrientation());
}
void UpdateAI(uint32 diff) override
@@ -268,10 +271,10 @@ struct boss_archimonde : public BossAI
Talk(SAY_AIR_BURST);
DoCastRandomTarget(SPELL_AIR_BURST);
}, 25s, 40s);
ScheduleTimedEvent(25s, 35s, [&]
ScheduleTimedEvent(8s, [&]
{
DoCastDoomFire();
}, 20s);
}, 8s);
ScheduleTimedEvent(25s, 35s, [&]
{
DoCastRandomTarget(SPELL_GRIP_OF_THE_LEGION);
@@ -400,7 +403,7 @@ struct boss_archimonde : public BossAI
float angle = 2 * M_PI * rand() / RAND_MAX;
float x = me->GetPositionX() + DOOMFIRE_OFFSET * cos(angle);
float y = me->GetPositionY() + DOOMFIRE_OFFSET * sin(angle);
Position spiritPosition = Position(x, y, me->GetPositionZ());
Position spiritPosition = Position(x, y, me->GetPositionZ(), Position::NormalizeOrientation(angle + M_PI)); //spirit faces archimonde on spawn
Position doomfirePosition = Position(x, y, me->GetPositionZ());
if (Creature* doomfireSpirit = me->SummonCreature(CREATURE_DOOMFIRE_SPIRIT, spiritPosition, TEMPSUMMON_TIMED_DESPAWN, 27000))
{
@@ -16,6 +16,7 @@
*/
#include "CreatureScript.h"
#include "GridNotifiers.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
@@ -16,6 +16,7 @@
*/
#include "CreatureScript.h"
#include "GridNotifiers.h"
#include "ScriptedCreature.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
@@ -19,7 +19,6 @@
#define DEF_HYJAL_H
#include "CreatureAIImpl.h"
#include "GridNotifiers.h"
#define DataHeader "HY"
@@ -18,7 +18,6 @@
#include "Chat.h"
#include "InstanceMapScript.h"
#include "InstanceScript.h"
#include "Opcodes.h"
#include "Player.h"
#include "WorldPacket.h"
#include "hyjal.h"
@@ -18,8 +18,10 @@
#include "the_black_morass.h"
#include "CreatureScript.h"
#include "MoveSplineInit.h"
#include "PassiveAI.h"
#include "ScriptedCreature.h"
#include "SmartAI.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
enum medivhMisc
@@ -19,8 +19,6 @@
#define DEF_THEBLACKMORASS_H
#include "CreatureAIImpl.h"
#include "PassiveAI.h"
#include "SpellScript.h"
#define DataHeader "TBM"
@@ -15,7 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CreatureScript.h"
#include "InstanceMapScript.h"
#include "InstanceScript.h"
#include "maraudon.h"
@@ -20,10 +20,16 @@
#include "CellImpl.h"
#include "CreatureScript.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
/// @todo: this import is not necessary for compilation and marked as unused by the IDE
// however, for some reasons removing it would cause a damn linking issue
// there is probably some underlying problem with imports which should properly addressed
// see: https://github.com/azerothcore/azerothcore-wotlk/issues/9766
#include "GridNotifiersImpl.h"
/*######
## npc_belnistrasz for Quest 3525 "Extinguishing the Idol"
######*/
@@ -19,7 +19,6 @@
#define DEF_RAZORFEN_DOWNS_H
#include "CreatureAIImpl.h"
#include "PassiveAI.h"
#define DataHeader "RFD"
@@ -19,7 +19,6 @@
#include "GameObjectAI.h"
#include "GameObjectScript.h"
#include "MiscPackets.h"
#include "Opcodes.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellInfo.h"
@@ -15,7 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CreatureScript.h"
#include "InstanceMapScript.h"
#include "InstanceScript.h"
#include "wailing_caverns.h"
@@ -20,8 +20,6 @@
#define DataHeader "WC"
#include "CreatureAI.h"
enum DataTypes
{
TYPE_LORD_COBRAHN = 0,
@@ -16,10 +16,12 @@
*/
#include "CreatureScript.h"
#include "CellImpl.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "InstanceMapScript.h"
#include "InstanceScript.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "TemporarySummon.h"
#include "zulfarrak.h"
@@ -17,6 +17,7 @@
#include "zulfarrak.h"
#include "Cell.h"
#include "CellImpl.h"
#include "CreatureScript.h"
#include "GameObject.h"
#include "GameObjectAI.h"
@@ -28,6 +29,13 @@
#include "ScriptSystem.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
/// @todo: this import is not necessary for compilation and marked as unused by the IDE
// however, for some reasons removing it would cause a damn linking issue
// there is probably some underlying problem with imports which should properly addressed
// see: https://github.com/azerothcore/azerothcore-wotlk/issues/9766
#include "GridNotifiersImpl.h"
/* ScriptData
SDName: Zulfarrak
SD%Complete: 50
@@ -40,8 +48,6 @@ npc_sergeant_bly
npc_weegli_blastfuse
EndContentData */
#include "GridNotifiersImpl.h"
/*######
## npc_sergeant_bly
######*/
@@ -18,9 +18,7 @@
#ifndef DEF_ZULFARRACK_H
#define DEF_ZULFARRACK_H
#include "CellImpl.h"
#include "CreatureAIImpl.h"
#include "SpellScript.h"
#define DataHeader "ZF"
@@ -31,7 +31,6 @@ EndContentData */
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "SpellInfo.h"
/*####
# npc_rizzle_sprysprocket
@@ -18,7 +18,6 @@
#include "CreatureScript.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
@@ -18,7 +18,6 @@
#include "Group.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
/* ScriptData
@@ -31,7 +31,6 @@ npc_clintar_dreamwalker
EndContentData */
#include "Cell.h"
#include "CellImpl.h"
#include "CreatureScript.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
@@ -19,9 +19,6 @@
#define DEF_AZJOL_NERUB_H
#include "CreatureAIImpl.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellScript.h"
#define DataHeader "AN"
@@ -19,6 +19,8 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "azjol_nerub.h"
#include "SpellInfo.h"
#include "SpellScript.h"
enum Spells
{
@@ -21,6 +21,8 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "azjol_nerub.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
enum Spells
{
@@ -21,6 +21,7 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "azjol_nerub.h"
#include "SpellScript.h"
DoorData const doorData[] =
{
@@ -18,10 +18,12 @@
#include "AreaTriggerScript.h"
#include "CreatureScript.h"
#include "ObjectMgr.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellAuraEffects.h"
#include "SpellScriptLoader.h"
#include "ruby_sanctum.h"
#include "SpellScript.h"
enum Texts
{
@@ -332,34 +334,28 @@ public:
}
};
class spell_baltharus_enervating_brand_trigger : public SpellScriptLoader
class spell_baltharus_enervating_brand_trigger : public SpellScript
{
public:
spell_baltharus_enervating_brand_trigger() : SpellScriptLoader("spell_baltharus_enervating_brand_trigger") { }
PrepareSpellScript(spell_baltharus_enervating_brand_trigger);
class spell_baltharus_enervating_brand_trigger_SpellScript : public SpellScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
PrepareSpellScript(spell_baltharus_enervating_brand_trigger_SpellScript);
return ValidateSpellInfo({ SPELL_SIPHONED_MIGHT });
}
void CheckDistance()
{
if (Unit* caster = GetOriginalCaster())
if (Unit* target = GetHitUnit())
if (target == GetCaster()
// the spell has an unlimited range, so we need this check
&& target->GetDistance2d(caster) <= 12.0f)
target->CastSpell(caster, SPELL_SIPHONED_MIGHT, true);
}
void Register() override
{
OnHit += SpellHitFn(spell_baltharus_enervating_brand_trigger_SpellScript::CheckDistance);
}
};
SpellScript* GetSpellScript() const override
void CheckDistance()
{
return new spell_baltharus_enervating_brand_trigger_SpellScript();
if (Unit* caster = GetOriginalCaster())
if (Unit* target = GetHitUnit())
if (target == GetCaster()
// the spell has an unlimited range, so we need this check
&& target->GetDistance2d(caster) <= 12.0f)
target->CastSpell(caster, SPELL_SIPHONED_MIGHT, true);
}
void Register() override
{
OnHit += SpellHitFn(spell_baltharus_enervating_brand_trigger::CheckDistance);
}
};
@@ -484,7 +480,7 @@ void AddSC_boss_baltharus_the_warborn()
{
new boss_baltharus_the_warborn();
new npc_baltharus_the_warborn_clone();
new spell_baltharus_enervating_brand_trigger();
RegisterSpellScript(spell_baltharus_enervating_brand_trigger);
new npc_xerestrasza();
new at_baltharus_plateau();
}
File diff suppressed because it is too large Load Diff
@@ -19,6 +19,7 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "ruby_sanctum.h"
#include "SpellScript.h"
enum Texts
{
@@ -184,65 +185,48 @@ public:
}
};
class spell_saviana_conflagration_init : public SpellScriptLoader
class spell_saviana_conflagration_init : public SpellScript
{
public:
spell_saviana_conflagration_init() : SpellScriptLoader("spell_saviana_conflagration_init") { }
PrepareSpellScript(spell_saviana_conflagration_init);
class spell_saviana_conflagration_init_SpellScript : public SpellScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
PrepareSpellScript(spell_saviana_conflagration_init_SpellScript);
return ValidateSpellInfo({ SPELL_FLAME_BEACON, SPELL_CONFLAGRATION_MISSLE });
}
void HandleDummy(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
GetCaster()->CastSpell(GetHitUnit(), SPELL_FLAME_BEACON, true);
GetCaster()->CastSpell(GetHitUnit(), SPELL_CONFLAGRATION_MISSLE, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_init_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const override
void HandleDummy(SpellEffIndex effIndex)
{
return new spell_saviana_conflagration_init_SpellScript();
PreventHitDefaultEffect(effIndex);
GetCaster()->CastSpell(GetHitUnit(), SPELL_FLAME_BEACON, true);
GetCaster()->CastSpell(GetHitUnit(), SPELL_CONFLAGRATION_MISSLE, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_init::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
class spell_saviana_conflagration_throwback : public SpellScriptLoader
class spell_saviana_conflagration_throwback : public SpellScript
{
public:
spell_saviana_conflagration_throwback() : SpellScriptLoader("spell_saviana_conflagration_throwback") { }
PrepareSpellScript(spell_saviana_conflagration_throwback);
class spell_saviana_conflagration_throwback_SpellScript : public SpellScript
void HandleScript(SpellEffIndex effIndex)
{
PrepareSpellScript(spell_saviana_conflagration_throwback_SpellScript);
PreventHitDefaultEffect(effIndex);
GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
void HandleScript(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_throwback_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const override
void Register() override
{
return new spell_saviana_conflagration_throwback_SpellScript();
OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_throwback::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
void AddSC_boss_saviana_ragefire()
{
new boss_saviana_ragefire();
new spell_saviana_conflagration_init();
new spell_saviana_conflagration_throwback();
RegisterSpellScript(spell_saviana_conflagration_init);
RegisterSpellScript(spell_saviana_conflagration_throwback);
}
@@ -23,6 +23,7 @@
#include "TemporarySummon.h"
#include "WorldPacket.h"
#include "ruby_sanctum.h"
#include "SpellScript.h"
BossBoundaryData const boundaries =
{
@@ -244,41 +245,35 @@ public:
}
};
class spell_ruby_sanctum_rallying_shout : public SpellScriptLoader
class spell_ruby_sanctum_rallying_shout : public SpellScript
{
public:
spell_ruby_sanctum_rallying_shout() : SpellScriptLoader("spell_ruby_sanctum_rallying_shout") { }
PrepareSpellScript(spell_ruby_sanctum_rallying_shout);
class spell_ruby_sanctum_rallying_shout_SpellScript : public SpellScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
PrepareSpellScript(spell_ruby_sanctum_rallying_shout_SpellScript);
return ValidateSpellInfo({ SPELL_RALLY });
}
void CountAllies()
{
uint32 count = GetSpell()->GetUniqueTargetInfo()->size();
if (count == GetCaster()->GetAuraCount(SPELL_RALLY))
return;
GetCaster()->RemoveAurasDueToSpell(SPELL_RALLY);
if (count > 0)
GetCaster()->CastCustomSpell(SPELL_RALLY, SPELLVALUE_AURA_STACK, count, GetCaster(), true);
}
void Register() override
{
AfterHit += SpellHitFn(spell_ruby_sanctum_rallying_shout_SpellScript::CountAllies);
}
};
SpellScript* GetSpellScript() const override
void CountAllies()
{
return new spell_ruby_sanctum_rallying_shout_SpellScript();
uint32 count = GetSpell()->GetUniqueTargetInfo()->size();
if (count == GetCaster()->GetAuraCount(SPELL_RALLY))
return;
GetCaster()->RemoveAurasDueToSpell(SPELL_RALLY);
if (count > 0)
GetCaster()->CastCustomSpell(SPELL_RALLY, SPELLVALUE_AURA_STACK, count, GetCaster(), true);
}
void Register() override
{
AfterHit += SpellHitFn(spell_ruby_sanctum_rallying_shout::CountAllies);
}
};
void AddSC_instance_ruby_sanctum()
{
new instance_ruby_sanctum();
new spell_ruby_sanctum_rallying_shout();
RegisterSpellScript(spell_ruby_sanctum_rallying_shout);
}
@@ -18,14 +18,7 @@
#ifndef RUBY_SANCTUM_H_
#define RUBY_SANCTUM_H_
#include "Creature.h"
#include "CreatureAIImpl.h"
#include "GameObjectAI.h"
#include "Map.h"
#include "Opcodes.h"
#include "PassiveAI.h"
#include "Player.h"
#include "SpellScript.h"
#define DataHeader "RS"
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CombatAI.h"
#include "CreatureScript.h"
#include "PassiveAI.h"
#include "Player.h"
@@ -18,7 +18,6 @@
#ifndef DEF_TOC_H
#define DEF_TOC_H
#include "CombatAI.h"
#include "CreatureAIImpl.h"
#define DataHeader "TC"
@@ -19,6 +19,7 @@
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "trial_of_the_crusader.h"
@@ -20,7 +20,6 @@
#include "CreatureAIImpl.h"
#include "GridNotifiers.h"
#include "SpellAuraEffects.h"
#define DataHeader "TCR"
@@ -20,6 +20,7 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "drak_tharon_keep.h"
#include "SpellScript.h"
enum Yells
{
@@ -19,6 +19,7 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "drak_tharon_keep.h"
#include "SpellScript.h"
enum Yells
{
@@ -21,6 +21,8 @@
#include "SpellAuras.h"
#include "SpellScriptLoader.h"
#include "drak_tharon_keep.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
enum Yells
{
@@ -19,8 +19,6 @@
#define DEF_DRAK_THARON_H
#include "CreatureAIImpl.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
#define DataHeader "DTK"
@@ -20,6 +20,7 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "drak_tharon_keep.h"
#include "SpellScript.h"
DoorData const doorData[] =
{
@@ -17,6 +17,7 @@
#include "CreatureScript.h"
#include "halls_of_reflection.h"
#include "ScriptedCreature.h"
enum Yells
{
@@ -18,6 +18,9 @@
#include "CreatureScript.h"
#include "SpellScriptLoader.h"
#include "halls_of_reflection.h"
#include "ScriptedCreature.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
enum Yells
{
@@ -18,7 +18,12 @@
#include "halls_of_reflection.h"
#include "AreaTriggerScript.h"
#include "CreatureScript.h"
#include "InstanceScript.h"
#include "MotionMaster.h"
#include "PassiveAI.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
enum Events
@@ -19,14 +19,7 @@
#define DEF_HALLS_OF_REFLECTION_H
#include "CreatureAIImpl.h"
#include "CreatureScript.h"
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellScript.h"
#define DataHeader "HOR"
@@ -19,6 +19,7 @@
#include "MapMgr.h"
#include "Transport.h"
#include "halls_of_reflection.h"
#include "InstanceScript.h"
class UtherBatteredHiltEvent : public BasicEvent
{
@@ -17,7 +17,6 @@
#include "CreatureGroups.h"
#include "CreatureScript.h"
#include "Opcodes.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellAuras.h"
@@ -16,7 +16,6 @@
*/
#include "CreatureScript.h"
#include "Opcodes.h"
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
@@ -19,6 +19,7 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "gundrak.h"
#include "SpellScript.h"
enum Spells
{
@@ -20,6 +20,7 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "gundrak.h"
#include "SpellScript.h"
enum Spells
{
@@ -20,6 +20,8 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "gundrak.h"
#include "SpellInfo.h"
#include "SpellScript.h"
enum eSpells
{
@@ -20,6 +20,7 @@
#include "ScriptedCreature.h"
#include "SpellScriptLoader.h"
#include "gundrak.h"
#include "SpellScript.h"
enum Spells
{
@@ -19,7 +19,6 @@
#define DEF_GUNDRAK_H
#include "CreatureAIImpl.h"
#include "SpellScript.h"
#define DataHeader "GD"
@@ -16,7 +16,6 @@
*/
#include "icecrown_citadel.h"
#include "AccountMgr.h"
#include "AreaTriggerScript.h"
#include "Cell.h"
#include "CellImpl.h"
@@ -28,8 +28,6 @@
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "SpellMgr.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
@@ -19,6 +19,7 @@
#include "CreatureScript.h"
#include "ScriptedCreature.h"
#include "naxxramas.h"
#include "SpellInfo.h"
using namespace Razuvious;
@@ -19,7 +19,6 @@
#define DEF_NAXXRAMAS_H
#include "CreatureAIImpl.h"
#include "SpellScript.h"
#define DataHeader "NAX"
@@ -15,7 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CreatureScript.h"
#include "InstanceMapScript.h"
#include "Player.h"
#include "ScriptedCreature.h"
@@ -18,8 +18,10 @@
#include "AchievementCriteriaScript.h"
#include "CreatureScript.h"
#include "MapReference.h"
#include "ScriptedCreature.h"
#include "nexus.h"
#include "Player.h"
enum eEnums
{

Some files were not shown because too many files have changed in this diff Show More