diff options
Diffstat (limited to 'src/server/game')
23 files changed, 81 insertions, 72 deletions
diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp index 95a5a9a5116..7f0cec1a41d 100644 --- a/src/server/game/AI/CoreAI/CombatAI.cpp +++ b/src/server/game/AI/CoreAI/CombatAI.cpp @@ -32,7 +32,7 @@ int AggressorAI::Permissible(const Creature* creature) return PERMIT_BASE_NO; } -void AggressorAI::UpdateAI(const uint32 /*diff*/) +void AggressorAI::UpdateAI(uint32 /*diff*/) { if (!UpdateVictim()) return; @@ -93,7 +93,7 @@ void CombatAI::EnterCombat(Unit* who) } } -void CombatAI::UpdateAI(const uint32 diff) +void CombatAI::UpdateAI(uint32 diff) { if (!UpdateVictim()) return; @@ -157,7 +157,7 @@ void CasterAI::EnterCombat(Unit* who) } } -void CasterAI::UpdateAI(const uint32 diff) +void CasterAI::UpdateAI(uint32 diff) { if (!UpdateVictim()) return; @@ -219,7 +219,7 @@ void ArcherAI::AttackStart(Unit* who) me->GetMotionMaster()->MoveIdle(); } -void ArcherAI::UpdateAI(const uint32 /*diff*/) +void ArcherAI::UpdateAI(uint32 /*diff*/) { if (!UpdateVictim()) return; @@ -260,7 +260,7 @@ void TurretAI::AttackStart(Unit* who) me->Attack(who, false); } -void TurretAI::UpdateAI(const uint32 /*diff*/) +void TurretAI::UpdateAI(uint32 /*diff*/) { if (!UpdateVictim()) return; @@ -280,7 +280,7 @@ VehicleAI::VehicleAI(Creature* c) : CreatureAI(c), m_vehicle(c->GetVehicleKit()) } //NOTE: VehicleAI::UpdateAI runs even while the vehicle is mounted -void VehicleAI::UpdateAI(const uint32 diff) +void VehicleAI::UpdateAI(uint32 diff) { CheckConditions(diff); diff --git a/src/server/game/AI/CoreAI/CombatAI.h b/src/server/game/AI/CoreAI/CombatAI.h index 8b10a8d6190..315ff861da9 100644 --- a/src/server/game/AI/CoreAI/CombatAI.h +++ b/src/server/game/AI/CoreAI/CombatAI.h @@ -30,7 +30,7 @@ class AggressorAI : public CreatureAI public: explicit AggressorAI(Creature* c) : CreatureAI(c) {} - void UpdateAI(const uint32); + void UpdateAI(uint32); static int Permissible(const Creature*); }; @@ -45,7 +45,7 @@ class CombatAI : public CreatureAI void Reset(); void EnterCombat(Unit* who); void JustDied(Unit* killer); - void UpdateAI(const uint32 diff); + void UpdateAI(uint32 diff); void SpellInterrupted(uint32 spellId, uint32 unTimeMs); static int Permissible(const Creature*); protected: @@ -59,7 +59,7 @@ class CasterAI : public CombatAI explicit CasterAI(Creature* c) : CombatAI(c) { m_attackDist = MELEE_RANGE; } void InitializeAI(); void AttackStart(Unit* victim) { AttackStartCaster(victim, m_attackDist); } - void UpdateAI(const uint32 diff); + void UpdateAI(uint32 diff); void EnterCombat(Unit* /*who*/); private: float m_attackDist; @@ -70,7 +70,7 @@ struct ArcherAI : public CreatureAI public: explicit ArcherAI(Creature* c); void AttackStart(Unit* who); - void UpdateAI(const uint32 diff); + void UpdateAI(uint32 diff); static int Permissible(const Creature*); protected: @@ -83,7 +83,7 @@ struct TurretAI : public CreatureAI explicit TurretAI(Creature* c); bool CanAIAttack(const Unit* who) const; void AttackStart(Unit* who); - void UpdateAI(const uint32 diff); + void UpdateAI(uint32 diff); static int Permissible(const Creature*); protected: @@ -97,7 +97,7 @@ struct VehicleAI : public CreatureAI public: explicit VehicleAI(Creature* c); - void UpdateAI(const uint32 diff); + void UpdateAI(uint32 diff); static int Permissible(const Creature*); void Reset(); void MoveInLineOfSight(Unit*) {} diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index feb3bbefcb8..32a6e9a670c 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -40,7 +40,7 @@ class GameObjectAI virtual void Reset() { } // Pass parameters between AI - virtual void DoAction(const int32 /*param = 0 */) {} + virtual void DoAction(int32 /*param = 0 */) {} virtual void SetGUID(uint64 /*guid*/, int32 /*id = 0 */) {} virtual uint64 GetGUID(int32 /*id = 0 */) const { return 0; } diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp index 2407b1f71e6..187a72bae92 100644 --- a/src/server/game/AI/CoreAI/PassiveAI.cpp +++ b/src/server/game/AI/CoreAI/PassiveAI.cpp @@ -24,7 +24,7 @@ PassiveAI::PassiveAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASS PossessedAI::PossessedAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASSIVE); } NullCreatureAI::NullCreatureAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASSIVE); } -void PassiveAI::UpdateAI(const uint32) +void PassiveAI::UpdateAI(uint32) { if (me->isInCombat() && me->getAttackers().empty()) EnterEvadeMode(); @@ -35,7 +35,7 @@ void PossessedAI::AttackStart(Unit* target) me->Attack(target, true); } -void PossessedAI::UpdateAI(const uint32 /*diff*/) +void PossessedAI::UpdateAI(uint32 /*diff*/) { if (me->getVictim()) { diff --git a/src/server/game/AI/CoreAI/PassiveAI.h b/src/server/game/AI/CoreAI/PassiveAI.h index cb513234be3..cb047ff364b 100644 --- a/src/server/game/AI/CoreAI/PassiveAI.h +++ b/src/server/game/AI/CoreAI/PassiveAI.h @@ -28,7 +28,7 @@ class PassiveAI : public CreatureAI void MoveInLineOfSight(Unit*) {} void AttackStart(Unit*) {} - void UpdateAI(const uint32); + void UpdateAI(uint32); static int Permissible(const Creature*) { return PERMIT_BASE_IDLE; } }; @@ -40,7 +40,7 @@ class PossessedAI : public CreatureAI void MoveInLineOfSight(Unit*) {} void AttackStart(Unit* target); - void UpdateAI(const uint32); + void UpdateAI(uint32); void EnterEvadeMode() {} void JustDied(Unit*); @@ -56,7 +56,7 @@ class NullCreatureAI : public CreatureAI void MoveInLineOfSight(Unit*) {} void AttackStart(Unit*) {} - void UpdateAI(const uint32) {} + void UpdateAI(uint32) {} void EnterEvadeMode() {} void OnCharmed(bool /*apply*/) {} diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp index 2792f68004f..dd32d2363d7 100644 --- a/src/server/game/AI/CoreAI/PetAI.cpp +++ b/src/server/game/AI/CoreAI/PetAI.cpp @@ -74,7 +74,7 @@ void PetAI::_stopAttack() HandleReturnMovement(); } -void PetAI::UpdateAI(const uint32 diff) +void PetAI::UpdateAI(uint32 diff) { if (!me->isAlive() || !me->GetCharmInfo()) return; diff --git a/src/server/game/AI/CoreAI/PetAI.h b/src/server/game/AI/CoreAI/PetAI.h index 674c3dc1748..efb088160f3 100644 --- a/src/server/game/AI/CoreAI/PetAI.h +++ b/src/server/game/AI/CoreAI/PetAI.h @@ -31,7 +31,7 @@ class PetAI : public CreatureAI explicit PetAI(Creature* c); - void UpdateAI(const uint32); + void UpdateAI(uint32); static int Permissible(const Creature*); void KilledUnit(Unit* /*victim*/); diff --git a/src/server/game/AI/CoreAI/ReactorAI.cpp b/src/server/game/AI/CoreAI/ReactorAI.cpp index b9c235176bc..b99885088d4 100644 --- a/src/server/game/AI/CoreAI/ReactorAI.cpp +++ b/src/server/game/AI/CoreAI/ReactorAI.cpp @@ -31,7 +31,7 @@ int ReactorAI::Permissible(const Creature* creature) return PERMIT_BASE_NO; } -void ReactorAI::UpdateAI(uint32 const /*diff*/) +void ReactorAI::UpdateAI(uint32 /*diff*/) { if (!UpdateVictim()) return; diff --git a/src/server/game/AI/CoreAI/ReactorAI.h b/src/server/game/AI/CoreAI/ReactorAI.h index f7de3b99565..449458f39be 100644 --- a/src/server/game/AI/CoreAI/ReactorAI.h +++ b/src/server/game/AI/CoreAI/ReactorAI.h @@ -30,7 +30,7 @@ class ReactorAI : public CreatureAI explicit ReactorAI(Creature* c) : CreatureAI(c) {} void MoveInLineOfSight(Unit*) {} - void UpdateAI(uint32 const diff); + void UpdateAI(uint32 diff); static int Permissible(const Creature*); }; diff --git a/src/server/game/AI/CoreAI/TotemAI.cpp b/src/server/game/AI/CoreAI/TotemAI.cpp index 8846066fee4..45865c5dbc2 100644 --- a/src/server/game/AI/CoreAI/TotemAI.cpp +++ b/src/server/game/AI/CoreAI/TotemAI.cpp @@ -49,7 +49,7 @@ void TotemAI::EnterEvadeMode() me->CombatStop(true); } -void TotemAI::UpdateAI(uint32 const /*diff*/) +void TotemAI::UpdateAI(uint32 /*diff*/) { if (me->ToTotem()->GetTotemType() != TOTEM_ACTIVE) return; diff --git a/src/server/game/AI/CoreAI/TotemAI.h b/src/server/game/AI/CoreAI/TotemAI.h index f9a6acc7fce..897cfea1c44 100644 --- a/src/server/game/AI/CoreAI/TotemAI.h +++ b/src/server/game/AI/CoreAI/TotemAI.h @@ -35,7 +35,7 @@ class TotemAI : public CreatureAI void AttackStart(Unit* victim); void EnterEvadeMode(); - void UpdateAI(uint32 const diff); + void UpdateAI(uint32 diff); static int Permissible(Creature const* creature); private: diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index 3cb7c15dce4..5ab97ac5978 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -125,7 +125,7 @@ class UnitAI virtual bool CanAIAttack(Unit const* /*target*/) const { return true; } virtual void AttackStart(Unit* /*target*/); - virtual void UpdateAI(uint32 const diff) = 0; + virtual void UpdateAI(uint32 diff) = 0; virtual void InitializeAI() { if (!me->isDead()) Reset(); } @@ -135,7 +135,7 @@ class UnitAI virtual void OnCharmed(bool apply) = 0; // Pass parameters between AI - virtual void DoAction(int32 const /*param*/) {} + virtual void DoAction(int32 /*param*/) {} virtual uint32 GetData(uint32 /*id = 0*/) const { return 0; } virtual void SetData(uint32 /*id*/, uint32 /*value*/) {} virtual void SetGUID(uint64 /*guid*/, int32 /*id*/ = 0) {} @@ -278,7 +278,7 @@ class PlayerAI : public UnitAI class SimpleCharmedAI : public PlayerAI { public: - void UpdateAI(uint32 const diff); + void UpdateAI(uint32 diff); SimpleCharmedAI(Player* player): PlayerAI(player) {} }; diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 7cee0e20dd5..1b7948c4774 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -116,7 +116,7 @@ void ScriptedAI::AttackStart(Unit* who) AttackStartNoMove(who); } -void ScriptedAI::UpdateAI(uint32 const /*diff*/) +void ScriptedAI::UpdateAI(uint32 /*diff*/) { //Check if we have a current target if (!UpdateVictim()) @@ -566,7 +566,7 @@ void BossAI::SummonedCreatureDespawn(Creature* summon) summons.Despawn(summon); } -void BossAI::UpdateAI(uint32 const diff) +void BossAI::UpdateAI(uint32 diff) { if (!UpdateVictim()) return; @@ -639,7 +639,7 @@ void WorldBossAI::SummonedCreatureDespawn(Creature* summon) summons.Despawn(summon); } -void WorldBossAI::UpdateAI(uint32 const diff) +void WorldBossAI::UpdateAI(uint32 diff) { if (!UpdateVictim()) return; diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index a9da02fda38..5098d353cac 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -90,7 +90,7 @@ struct ScriptedAI : public CreatureAI void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) {} //Called at World update tick - virtual void UpdateAI(uint32 const diff); + virtual void UpdateAI(uint32 diff); //Called at creature death void JustDied(Unit* /*killer*/) {} @@ -288,13 +288,13 @@ class BossAI : public ScriptedAI void JustSummoned(Creature* summon); void SummonedCreatureDespawn(Creature* summon); - virtual void UpdateAI(uint32 const diff); + virtual void UpdateAI(uint32 diff); // Hook used to execute events scheduled into EventMap without the need // to override UpdateAI // note: You must re-schedule the event within this method if the event // is supposed to run more than once - virtual void ExecuteEvent(uint32 const /*eventId*/) { } + virtual void ExecuteEvent(uint32 /*eventId*/) { } void Reset() { _Reset(); } void EnterCombat(Unit* /*who*/) { _EnterCombat(); } @@ -337,13 +337,13 @@ class WorldBossAI : public ScriptedAI void JustSummoned(Creature* summon); void SummonedCreatureDespawn(Creature* summon); - virtual void UpdateAI(uint32 const diff); + virtual void UpdateAI(uint32 diff); // Hook used to execute events scheduled into EventMap without the need // to override UpdateAI // note: You must re-schedule the event within this method if the event // is supposed to run more than once - virtual void ExecuteEvent(uint32 const /*eventId*/) { } + virtual void ExecuteEvent(uint32 /*eventId*/) { } void Reset() { _Reset(); } void EnterCombat(Unit* /*who*/) { _EnterCombat(); } diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index 3f5952a210d..b43cd1e7cd4 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -205,7 +205,7 @@ bool npc_escortAI::IsPlayerOrGroupInRange() return false; } -void npc_escortAI::UpdateAI(uint32 const diff) +void npc_escortAI::UpdateAI(uint32 diff) { //Waypoint Updating if (HasEscortState(STATE_ESCORT_ESCORTING) && !me->getVictim() && m_uiWPWaitTimer && !HasEscortState(STATE_ESCORT_RETURNING)) @@ -293,7 +293,7 @@ void npc_escortAI::UpdateAI(uint32 const diff) UpdateEscortAI(diff); } -void npc_escortAI::UpdateEscortAI(uint32 const /*diff*/) +void npc_escortAI::UpdateEscortAI(uint32 /*diff*/) { if (!UpdateVictim()) return; diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h index 4b4f3656a8d..4a350acab2c 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h @@ -54,7 +54,7 @@ struct npc_escortAI : public ScriptedAI void EnterEvadeMode(); - void UpdateAI(uint32 const diff); //the "internal" update, calls UpdateEscortAI() + void UpdateAI(uint32 diff); //the "internal" update, calls UpdateEscortAI() virtual void UpdateEscortAI(uint32 const diff); //used when it's needed to add code in update (abilities, scripted events, etc) void MovementInform(uint32, uint32); diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp index 96209084240..63d5ad1fd05 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp @@ -184,7 +184,7 @@ void FollowerAI::EnterEvadeMode() Reset(); } -void FollowerAI::UpdateAI(const uint32 uiDiff) +void FollowerAI::UpdateAI(uint32 uiDiff) { if (HasFollowState(STATE_FOLLOW_INPROGRESS) && !me->getVictim()) { @@ -246,7 +246,7 @@ void FollowerAI::UpdateAI(const uint32 uiDiff) UpdateFollowerAI(uiDiff); } -void FollowerAI::UpdateFollowerAI(const uint32 /*uiDiff*/) +void FollowerAI::UpdateFollowerAI(uint32 /*uiDiff*/) { if (!UpdateVictim()) return; diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h index 1c81b5f73fc..ccc8af6197a 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h @@ -38,8 +38,8 @@ class FollowerAI : public ScriptedAI void JustRespawned(); - void UpdateAI(const uint32); //the "internal" update, calls UpdateFollowerAI() - virtual void UpdateFollowerAI(const uint32); //used when it's needed to add code in update (abilities, scripted events, etc) + void UpdateAI(uint32); //the "internal" update, calls UpdateFollowerAI() + virtual void UpdateFollowerAI(uint32); //used when it's needed to add code in update (abilities, scripted events, etc) void StartFollow(Player* player, uint32 factionForFollower = 0, const Quest* quest = NULL); diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 501bc35b77a..30cc3cf246b 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -330,7 +330,7 @@ void SmartAI::UpdatePath(const uint32 diff) } } -void SmartAI::UpdateAI(const uint32 diff) +void SmartAI::UpdateAI(uint32 diff) { GetScript()->OnUpdate(diff); UpdatePath(diff); @@ -422,6 +422,9 @@ void SmartAI::MovepointReached(uint32 id) void SmartAI::MovementInform(uint32 MovementType, uint32 Data) { + if ((MovementType == POINT_MOTION_TYPE && Data == SMART_ESCORT_LAST_OOC_POINT) || MovementType == FOLLOW_MOTION_TYPE) + me->ClearUnitState(UNIT_STATE_EVADE); + GetScript()->ProcessEventsFor(SMART_EVENT_MOVEMENTINFORM, NULL, MovementType, Data); if (MovementType != POINT_MOTION_TYPE || !HasEscortState(SMART_ESCORT_ESCORTING)) return; @@ -443,11 +446,12 @@ void SmartAI::RemoveAuras() void SmartAI::EnterEvadeMode() { - if (!me->isAlive()) + if (!me->isAlive() || me->IsInEvadeMode()) return; RemoveAuras(); + me->AddUnitState(UNIT_STATE_EVADE); me->DeleteThreatList(); me->CombatStop(true); me->LoadCreaturesAddon(); @@ -694,7 +698,7 @@ void SmartAI::OnCharmed(bool apply) GetScript()->ProcessEventsFor(SMART_EVENT_CHARMED, NULL, 0, 0, apply); } -void SmartAI::DoAction(const int32 param) +void SmartAI::DoAction(int32 param) { GetScript()->ProcessEventsFor(SMART_EVENT_ACTION_DONE, NULL, param); } diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index ab2ffb7229d..b5b92efdcd2 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -111,7 +111,7 @@ class SmartAI : public CreatureAI void HealReceived(Unit* doneBy, uint32& addhealth); // Called at World update tick - void UpdateAI(const uint32 diff); + void UpdateAI(uint32 diff); // Called at text emote receive from player void ReceiveEmote(Player* player, uint32 textEmote); @@ -147,7 +147,7 @@ class SmartAI : public CreatureAI bool CanAIAttack(const Unit* who) const; // Used in scripts to share variables - void DoAction(const int32 param = 0); + void DoAction(int32 param = 0); // Used in scripts to share variables uint32 GetData(uint32 id = 0) const; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 85022c9164c..b5273c72468 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1013,7 +1013,7 @@ EquipmentInfo const* ObjectMgr::GetEquipmentInfo(uint32 entry, int8& id) if (id == -1) // select a random element { EquipmentInfoContainerInternal::const_iterator ritr = itr->second.begin(); - std::advance(ritr, urand(0u, itr->second.size())); + std::advance(ritr, urand(0u, itr->second.size() - 1)); id = std::distance(itr->second.begin(), ritr) + 1; return &ritr->second; } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 30ed39932ae..45fee50c5e5 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -36,12 +36,6 @@ #include "Vehicle.h" #include "VMapFactory.h" -union u_map_magic -{ - char asChar[4]; - uint32 asUInt; -}; - u_map_magic MapMagic = { {'M','A','P','S'} }; u_map_magic MapVersionMagic = { {'v','1','.','3'} }; u_map_magic MapAreaMagic = { {'A','R','E','A'} }; @@ -77,28 +71,30 @@ Map::~Map() bool Map::ExistMap(uint32 mapid, int gx, int gy) { - int len = sWorld->GetDataPath().length()+strlen("maps/%03u%02u%02u.map")+1; - char* tmp = new char[len]; - snprintf(tmp, len, (char *)(sWorld->GetDataPath()+"maps/%03u%02u%02u.map").c_str(), mapid, gx, gy); + int len = sWorld->GetDataPath().length() + strlen("maps/%03u%02u%02u.map") + 1; + char* fileName = new char[len]; + snprintf(fileName, len, (char *)(sWorld->GetDataPath() + "maps/%03u%02u%02u.map").c_str(), mapid, gx, gy); bool ret = false; - FILE* pf=fopen(tmp, "rb"); + FILE* pf = fopen(fileName, "rb"); if (!pf) - sLog->outError(LOG_FILTER_MAPS, "Map file '%s': does not exist!", tmp); + sLog->outError(LOG_FILTER_MAPS, "Map file '%s': does not exist!", fileName); else { map_fileheader header; if (fread(&header, sizeof(header), 1, pf) == 1) { - if (header.mapMagic != MapMagic.asUInt || header.versionMagic != MapVersionMagic.asUInt) - sLog->outError(LOG_FILTER_MAPS, "Map file '%s' is from an incompatible clientversion. Please recreate using the mapextractor.", tmp); + if (header.mapMagic.asUInt != MapMagic.asUInt || header.versionMagic.asUInt != MapVersionMagic.asUInt) + sLog->outError(LOG_FILTER_MAPS, "Map file '%s' is from an incompatible map version (%.*s %.*s), %.*s %.*s is expected. Please recreate using the mapextractor.", + fileName, 4, header.mapMagic.asChar, 4, header.versionMagic.asChar, 4, MapMagic.asChar, 4, MapVersionMagic.asChar); else ret = true; } fclose(pf); } - delete [] tmp; + + delete[] fileName; return ret; } @@ -1102,23 +1098,23 @@ bool GridMap::loadData(char* filename) return false; } - if (header.mapMagic == MapMagic.asUInt && header.versionMagic == MapVersionMagic.asUInt) + if (header.mapMagic.asUInt == MapMagic.asUInt && header.versionMagic.asUInt == MapVersionMagic.asUInt) { - // loadup area data + // load up area data if (header.areaMapOffset && !loadAreaData(in, header.areaMapOffset, header.areaMapSize)) { sLog->outError(LOG_FILTER_MAPS, "Error loading map area data\n"); fclose(in); return false; } - // loadup height data + // load up height data if (header.heightMapOffset && !loadHeightData(in, header.heightMapOffset, header.heightMapSize)) { sLog->outError(LOG_FILTER_MAPS, "Error loading map height data\n"); fclose(in); return false; } - // loadup liquid data + // load up liquid data if (header.liquidMapOffset && !loadLiquidData(in, header.liquidMapOffset, header.liquidMapSize)) { sLog->outError(LOG_FILTER_MAPS, "Error loading map liquids data\n"); @@ -1128,7 +1124,9 @@ bool GridMap::loadData(char* filename) fclose(in); return true; } - sLog->outError(LOG_FILTER_MAPS, "Map file '%s' is from an incompatible clientversion. Please recreate using the mapextractor.", filename); + + sLog->outError(LOG_FILTER_MAPS, "Map file '%s' is from an incompatible map version (%.*s %.*s), %.*s %.*s is expected. Please recreate using the mapextractor.", + filename, 4, header.mapMagic.asChar, 4, header.versionMagic.asChar, 4, MapMagic.asChar, 4, MapVersionMagic.asChar); fclose(in); return false; } diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index e66e0869686..cbc17901d02 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -58,8 +58,15 @@ struct ScriptAction { uint64 sourceGUID; uint64 targetGUID; - uint64 ownerGUID; // owner of source if source is item - ScriptInfo const* script; // pointer to static script data + uint64 ownerGUID; ///> owner of source if source is item + ScriptInfo const* script; ///> pointer to static script data +}; + +/// Represents a map magic value of 4 bytes (used in versions) +union u_map_magic +{ + char asChar[4]; ///> Non-null terminated string + uint32 asUInt; ///> uint32 representation }; // ****************************************** @@ -67,9 +74,9 @@ struct ScriptAction // ****************************************** struct map_fileheader { - uint32 mapMagic; - uint32 versionMagic; - uint32 buildMagic; + u_map_magic mapMagic; + u_map_magic versionMagic; + u_map_magic buildMagic; uint32 areaMapOffset; uint32 areaMapSize; uint32 heightMapOffset; |
