aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-07-14 22:26:42 +0200
committerShauren <shauren.trinity@gmail.com>2025-07-14 22:26:42 +0200
commit9ffc85485a2404651d9b8a40b69fb06d4161b1ee (patch)
tree403fe89c9f2cc12c2e8f05fa6cf5a462488e0a9a /src/server
parentf40409ce68624fc907d7f1e272317411b5a2fa65 (diff)
Core/Misc: Reduce differences between branches
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Chat/Chat.cpp2
-rw-r--r--src/server/game/Chat/Chat.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp79
-rw-r--r--src/server/game/Entities/Player/Player.h4
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp4
-rw-r--r--src/server/game/Guilds/Guild.cpp62
-rw-r--r--src/server/game/Guilds/Guild.h4
-rw-r--r--src/server/game/Handlers/GuildHandler.cpp18
-rw-r--r--src/server/game/Handlers/MailHandler.cpp11
-rw-r--r--src/server/game/Scripting/ScriptMgr.h1
-rw-r--r--src/server/game/Spells/SpellInfo.h8
-rw-r--r--src/server/game/World/World.h2
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp49
13 files changed, 123 insertions, 123 deletions
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index 31424d7ee43..8059ebc55a2 100644
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -694,7 +694,7 @@ int ChatHandler::GetSessionDbLocaleIndex() const
return m_session->GetSessionDbLocaleIndex();
}
-std::string ChatHandler::GetNameLink(Player* chr) const
+std::string ChatHandler::GetNameLink(Player const* chr) const
{
return playerLink(chr->GetName());
}
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index 10412099edf..16bb4dd1cac 100644
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -117,7 +117,7 @@ class TC_GAME_API ChatHandler
bool extractPlayerTarget(char* args, Player** player, ObjectGuid* player_guid = nullptr, std::string* player_name = nullptr);
std::string playerLink(std::string const& name) const { return m_session ? "|cffffffff|Hplayer:"+name+"|h["+name+"]|h|r" : name; }
- std::string GetNameLink(Player* chr) const;
+ std::string GetNameLink(Player const* chr) const;
GameObject* GetNearbyGameObject();
GameObject* GetObjectFromPlayerMapByDbGuid(ObjectGuid::LowType lowguid);
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 4919eb8c781..e50c46ee1f2 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -5614,69 +5614,68 @@ bool Player::UpdateFishingSkill()
return false;
}
-// levels sync. with spell requirement for skill levels to learn
-// bonus abilities in sSkillLineAbilityStore
-// Used only to avoid scan DBC at each skill grow
-static uint32 bonusSkillLevels[ ] = {75, 150, 225, 300, 375, 450};
-static const size_t bonusSkillLevelsSize = sizeof(bonusSkillLevels) / sizeof(uint32);
-
-bool Player::UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step)
+bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step)
{
+ // levels sync. with spell requirement for skill levels to learn
+ // bonus abilities in sSkillLineAbilityStore
+ // Used only to avoid scan DBC at each skill grow
+ uint32 const bonusSkillLevels[] = { 75, 150, 225, 300, 375, 450 };
+
TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}%)",
- GetName(), GetGUID().ToString(), SkillId, Chance / 10.0f);
- if (!SkillId)
+ GetName(), GetGUID().ToString(), skillId, chance / 10.0f);
+ if (!skillId)
return false;
- if (Chance <= 0) // speedup in 0 chance case
+ if (chance <= 0) // speedup in 0 chance case
{
TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}% missed",
- GetName(), GetGUID().ToString(), SkillId, Chance / 10.0f);
+ GetName(), GetGUID().ToString(), skillId, chance / 10.0f);
return false;
}
- SkillStatusMap::iterator itr = mSkillStatus.find(SkillId);
+ SkillStatusMap::iterator itr = mSkillStatus.find(skillId);
if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED)
return false;
uint32 valueIndex = PLAYER_SKILL_VALUE_INDEX(itr->second.pos);
uint32 data = GetUInt32Value(valueIndex);
- uint16 SkillValue = SKILL_VALUE(data);
- uint16 MaxValue = SKILL_MAX(data);
+ uint16 value = SKILL_VALUE(data);
+ uint16 max = SKILL_MAX(data);
- if (!MaxValue || !SkillValue || SkillValue >= MaxValue)
+ if (!max || !value || value >= max)
return false;
- int32 Roll = irand(1, 1000);
-
- if (Roll <= Chance)
+ if (irand(1, 1000) > chance)
{
- uint32 new_value = SkillValue+step;
- if (new_value > MaxValue)
- new_value = MaxValue;
+ TC_LOG_DEBUG("entities.player.skills",
+ "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}% missed",
+ GetName(), GetGUID().ToString(), skillId, chance / 10.0f);
+ return false;
+ }
- SetUInt32Value(valueIndex, MAKE_SKILL_VALUE(new_value, MaxValue));
- if (itr->second.uState != SKILL_NEW)
- itr->second.uState = SKILL_CHANGED;
- for (size_t i = 0; i < bonusSkillLevelsSize; ++i)
+ uint16 new_value = value + step;
+ if (new_value > max)
+ new_value = max;
+
+ SetUInt32Value(valueIndex, MAKE_SKILL_VALUE(new_value, max));
+ if (itr->second.uState != SKILL_NEW)
+ itr->second.uState = SKILL_CHANGED;
+
+ for (uint32 bsl : bonusSkillLevels)
+ {
+ if (value < bsl && new_value >= bsl)
{
- uint32 bsl = bonusSkillLevels[i];
- if (SkillValue < bsl && new_value >= bsl)
- {
- LearnSkillRewardedSpells(SkillId, new_value);
- break;
- }
+ LearnSkillRewardedSpells(skillId, new_value);
+ break;
}
- UpdateSkillEnchantments(SkillId, SkillValue, new_value);
- UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, SkillId);
- TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}% taken",
- GetName(), GetGUID().ToString(), SkillId, Chance / 10.0f);
- return true;
}
- TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}% missed",
- GetName(), GetGUID().ToString(), SkillId, Chance / 10.0f);
- return false;
+ UpdateSkillEnchantments(skillId, value, new_value);
+ UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, skillId);
+ TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '{}' ({}), SkillID: {}, Chance: {:3.1f}% taken",
+ GetName(), GetGUID().ToString(), skillId, chance / 10.0f);
+ return true;
}
void Player::UpdateWeaponSkill(Unit* victim, WeaponAttackType attType)
@@ -23717,7 +23716,7 @@ uint32 Player::GetResurrectionSpellId()
}
// Used in triggers for check "Only to targets that grant experience or honor" req
-bool Player::isHonorOrXPTarget(Unit* victim) const
+bool Player::isHonorOrXPTarget(Unit const* victim) const
{
uint8 v_level = victim->GetLevel();
uint8 k_grey = Trinity::XP::GetGrayLevel(GetLevel());
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 29c98bb71d2..efe5e6231dc 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1633,7 +1633,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void StoreRaidMapDifficulty();
bool UpdateSkill(uint32 skill_id, uint32 step);
- bool UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step);
+ bool UpdateSkillPro(uint16 skillId, int32 chance, uint32 step);
bool UpdateCraftSkill(uint32 spellid);
bool UpdateGatherSkill(uint32 SkillId, uint32 SkillValue, uint32 RedLevel, uint32 Multiplicator = 1);
@@ -1818,7 +1818,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
bool IsAtRecruitAFriendDistance(WorldObject const* pOther) const;
void RewardPlayerAndGroupAtKill(Unit* victim, bool isBattleGround);
void RewardPlayerAndGroupAtEvent(uint32 creature_id, WorldObject* pRewardSource);
- bool isHonorOrXPTarget(Unit* victim) const;
+ bool isHonorOrXPTarget(Unit const* victim) const;
bool GetsRecruitAFriendBonus(bool forXP);
uint8 GetGrantableLevels() const { return m_grantableLevels; }
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index af083b1532e..2f06d93c6bb 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -7628,7 +7628,7 @@ inline void CheckGOSpellId(GameObjectTemplate const* goInfo, uint32 dataN, uint3
goInfo->entry, goInfo->type, N, dataN, dataN);
}
-inline void CheckAndFixGOChairHeightId(GameObjectTemplate const* goInfo, uint32 const& dataN, uint32 N)
+inline void CheckAndFixGOChairHeightId(GameObjectTemplate const* goInfo, uint32& dataN, uint32 N)
{
if (dataN <= (UNIT_STAND_STATE_SIT_HIGH_CHAIR-UNIT_STAND_STATE_SIT_LOW_CHAIR))
return;
@@ -7637,7 +7637,7 @@ inline void CheckAndFixGOChairHeightId(GameObjectTemplate const* goInfo, uint32
goInfo->entry, goInfo->type, N, dataN, UNIT_STAND_STATE_SIT_HIGH_CHAIR-UNIT_STAND_STATE_SIT_LOW_CHAIR);
// prevent client and server unexpected work
- const_cast<uint32&>(dataN) = 0;
+ dataN = 0;
}
inline void CheckGONoDamageImmuneId(GameObjectTemplate* goTemplate, uint32 dataN, uint32 N)
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 5864e8c4d14..78d88531dda 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -1363,25 +1363,31 @@ void Guild::HandleSetEmblem(WorldSession* session, EmblemInfo const& emblemInfo)
}
}
-void Guild::HandleSetLeader(WorldSession* session, std::string_view name)
+void Guild::HandleSetNewGuildMaster(WorldSession* session, std::string_view name)
{
Player* player = session->GetPlayer();
- // Only leader can assign new leader
+
+ Member* oldGuildMaster = GetMember(GetLeaderGUID());
+ ASSERT(oldGuildMaster);
+
if (!_IsLeader(player))
- SendCommandResult(session, GUILD_COMMAND_CHANGE_LEADER, ERR_GUILD_PERMISSIONS);
- // Old leader must be a member of guild
- else if (Member* pOldLeader = GetMember(player->GetGUID()))
{
- // New leader must be a member of guild
- if (Member* pNewLeader = GetMember(name))
- {
- _SetLeaderGUID(*pNewLeader);
-
- CharacterDatabaseTransaction trans(nullptr);
- pOldLeader->ChangeRank(trans, GR_OFFICER);
- _BroadcastEvent(GE_LEADER_CHANGED, ObjectGuid::Empty, player->GetName(), pNewLeader->GetName());
- }
+ SendCommandResult(session, GUILD_COMMAND_CHANGE_LEADER, ERR_GUILD_PERMISSIONS);
+ return;
}
+
+ Member* newGuildMaster = GetMember(name);
+ if (!newGuildMaster)
+ return;
+
+ CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
+
+ _SetLeader(trans, *newGuildMaster);
+ oldGuildMaster->ChangeRank(trans, GR_OFFICER);
+
+ _BroadcastEvent(GE_LEADER_CHANGED, ObjectGuid::Empty, player->GetName(), newGuildMaster->GetName());
+
+ CharacterDatabase.CommitTransaction(trans);
}
void Guild::HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string_view name, std::string_view icon)
@@ -2095,15 +2101,15 @@ bool Guild::Validate()
// Repair the structure of the guild.
// If the guildmaster doesn't exist or isn't member of the guild
// attempt to promote another member.
- Member* pLeader = GetMember(m_leaderGuid);
- if (!pLeader)
+ Member* leader = GetMember(m_leaderGuid);
+ if (!leader)
{
CharacterDatabaseTransaction dummy(nullptr);
if (DeleteMember(dummy, m_leaderGuid))
return false;
}
- else if (!pLeader->IsRank(GR_GUILDMASTER))
- _SetLeaderGUID(*pLeader);
+ else if (!leader->IsRank(GR_GUILDMASTER))
+ _SetLeader(trans, *leader);
// Check config if multiple guildmasters are allowed
if (!sConfigMgr->GetBoolDefault("Guild.AllowMultipleGuildMaster", false))
@@ -2271,9 +2277,9 @@ bool Guild::DeleteMember(CharacterDatabaseTransaction trans, ObjectGuid guid, bo
{
Member* oldLeader = nullptr;
Member* newLeader = nullptr;
- for (auto& [guid, member] : m_members)
+ for (auto& [memberGuid, member] : m_members)
{
- if (guid == lowguid)
+ if (memberGuid == lowguid)
oldLeader = &member;
else if (!newLeader || newLeader->GetRankId() > member.GetRankId())
newLeader = &member;
@@ -2285,7 +2291,7 @@ bool Guild::DeleteMember(CharacterDatabaseTransaction trans, ObjectGuid guid, bo
return true;
}
- _SetLeaderGUID(*newLeader);
+ _SetLeader(trans, *newLeader);
// If player not online data in data field will be loaded from guild tabs no need to update it !!
if (Player* newLeaderPlayer = newLeader->FindPlayer())
@@ -2524,18 +2530,22 @@ bool Guild::_ModifyBankMoney(CharacterDatabaseTransaction trans, uint64 amount,
return true;
}
-void Guild::_SetLeaderGUID(Member& pLeader)
+void Guild::_SetLeader(CharacterDatabaseTransaction trans, Member& leader)
{
- CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
- m_leaderGuid = pLeader.GetGUID();
- pLeader.ChangeRank(trans, GR_GUILDMASTER);
+ bool isInTransaction = bool(trans);
+ if (!isInTransaction)
+ trans = CharacterDatabase.BeginTransaction();
+
+ m_leaderGuid = leader.GetGUID();
+ leader.ChangeRank(trans, GR_GUILDMASTER);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_LEADER);
stmt->setUInt32(0, m_leaderGuid.GetCounter());
stmt->setUInt32(1, m_id);
trans->Append(stmt);
- CharacterDatabase.CommitTransaction(trans);
+ if (!isInTransaction)
+ CharacterDatabase.CommitTransaction(trans);
}
void Guild::_SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay)
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index 5e93660f877..f9727e31013 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -652,7 +652,7 @@ class TC_GAME_API Guild
void HandleSetMOTD(WorldSession* session, std::string_view motd);
void HandleSetInfo(WorldSession* session, std::string_view info);
void HandleSetEmblem(WorldSession* session, EmblemInfo const& emblemInfo);
- void HandleSetLeader(WorldSession* session, std::string_view name);
+ void HandleSetNewGuildMaster(WorldSession* session, std::string_view name);
void HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string_view name, std::string_view icon);
void HandleSetMemberNote(WorldSession* session, std::string_view note, std::string_view name, bool isPublic);
void HandleSetRankInfo(WorldSession* session, uint8 rankId, std::string_view name, uint32 rights, uint32 moneyPerDay, std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> const& rightsAndSlots);
@@ -801,7 +801,7 @@ class TC_GAME_API Guild
bool _IsLeader(Player* player) const;
void _DeleteBankItems(CharacterDatabaseTransaction trans, bool removeItemsFromDB = false);
bool _ModifyBankMoney(CharacterDatabaseTransaction trans, uint64 amount, bool add);
- void _SetLeaderGUID(Member& pLeader);
+ void _SetLeader(CharacterDatabaseTransaction trans, Member& leader);
void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay);
void _SetRankBankTabRightsAndSlots(uint8 rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true);
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp
index 8a7e32e7e2c..ae3dec9922b 100644
--- a/src/server/game/Handlers/GuildHandler.cpp
+++ b/src/server/game/Handlers/GuildHandler.cpp
@@ -127,15 +127,6 @@ void WorldSession::HandleGuildDelete(WorldPackets::Guild::GuildDelete& /*packet*
guild->HandleDisband(this);
}
-void WorldSession::HandleGuildSetGuildMaster(WorldPackets::Guild::GuildSetGuildMaster& packet)
-{
- TC_LOG_DEBUG("guild", "CMSG_GUILD_LEADER [{}]: Target: {}", GetPlayerInfo(), packet.NewMasterName);
-
- if (normalizePlayerName(packet.NewMasterName))
- if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleSetLeader(this, packet.NewMasterName);
-}
-
void WorldSession::HandleGuildUpdateMotdText(WorldPackets::Guild::GuildUpdateMotdText& packet)
{
TC_LOG_DEBUG("guild", "CMSG_GUILD_MOTD [{}]: MOTD: {}", GetPlayerInfo(), packet.MotdText);
@@ -381,3 +372,12 @@ void WorldSession::HandleGuildBankSetTabText(WorldPackets::Guild::GuildBankSetTa
if (Guild* guild = GetPlayer()->GetGuild())
guild->SetBankTabText(packet.Tab, packet.TabText);
}
+
+void WorldSession::HandleGuildSetGuildMaster(WorldPackets::Guild::GuildSetGuildMaster& packet)
+{
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_LEADER [{}]: Target: {}", GetPlayerInfo(), packet.NewMasterName);
+
+ if (normalizePlayerName(packet.NewMasterName))
+ if (Guild* guild = GetPlayer()->GetGuild())
+ guild->HandleSetNewGuildMaster(this, packet.NewMasterName);
+}
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp
index 22fe050c80d..16a4df4dc0b 100644
--- a/src/server/game/Handlers/MailHandler.cpp
+++ b/src/server/game/Handlers/MailHandler.cpp
@@ -361,8 +361,7 @@ void WorldSession::HandleMailReturnToSender(WorldPackets::Mail::MailReturnToSend
player->SendMailResult(returnToSender.MailID, MAIL_RETURNED_TO_SENDER, MAIL_ERR_INTERNAL_ERROR);
return;
}
- //we can return mail now
- //so firstly delete the old one
+ //we can return mail now, so firstly delete the old one
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_BY_ID);
@@ -386,14 +385,8 @@ void WorldSession::HandleMailReturnToSender(WorldPackets::Mail::MailReturnToSend
{
for (MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
{
- Item* item = player->GetMItem(itr2->item_guid);
- if (item)
+ if (Item* item = player->GetMItem(itr2->item_guid))
draft.AddItem(item);
- else
- {
- //WTF?
- }
-
player->RemoveMItem(itr2->item_guid);
}
}
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index e329fbaeeb3..42ffefbf7f5 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -63,7 +63,6 @@ class WorldSocket;
class WorldObject;
class WorldSession;
-struct AchievementCriteriaData;
struct AreaTriggerEntry;
struct AuctionEntry;
struct ConditionSourceInfo;
diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h
index 03e909872c9..9261a6132bd 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -31,15 +31,11 @@ class Spell;
class SpellMgr;
class SpellInfo;
class Unit;
+class WorldObject;
struct Condition;
struct SpellChainNode;
-struct SpellTargetPosition;
-struct SpellDurationEntry;
struct SpellModifier;
-struct SpellRangeEntry;
-struct SpellRadiusEntry;
-struct SpellEntry;
-struct SpellCastTimesEntry;
+enum WeaponAttackType : uint8;
enum SpellTargetSelectionCategories
{
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 4df77613332..e245c419b43 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -844,7 +844,7 @@ class TC_GAME_API World
// CLI command holder to be thread safe
LockedQueue<CliCommandHolder*> cliCmdQueue;
- // next daily quests and random bg reset time
+ // scheduled reset times
time_t m_NextDailyQuestReset;
time_t m_NextWeeklyQuestReset;
time_t m_NextMonthlyQuestReset;
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp
index bd78a177d57..2945c116ab7 100644
--- a/src/server/scripts/Commands/cs_wp.cpp
+++ b/src/server/scripts/Commands/cs_wp.cpp
@@ -29,6 +29,7 @@ EndScriptData */
#include "Language.h"
#include "Map.h"
#include "MotionMaster.h"
+#include "ObjectMgr.h"
#include "Player.h"
#include "RBAC.h"
#include "WaypointDefines.h"
@@ -245,43 +246,45 @@ public:
static bool HandleWpUnLoadCommand(ChatHandler* handler, char const* /*args*/)
{
-
Creature* target = handler->getSelectedCreature();
WorldDatabasePreparedStatement* stmt = nullptr;
if (!target)
{
- handler->PSendSysMessage("%s%s|r", "|cff33ffff", "You must select target.");
+ handler->PSendSysMessage("%s%s|r", "|cff33ffff", "You must select a target.");
return true;
}
- uint32 guildLow = target->GetSpawnId();
+ ObjectGuid::LowType guidLow = target->GetSpawnId();
+ if (!guidLow)
+ {
+ handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target is not saved to DB.");
+ return true;
+ }
- if (target->GetCreatureAddon())
+ CreatureAddon const* addon = sObjectMgr->GetCreatureAddon(guidLow);
+ if (!addon || addon->path_id == 0)
{
- if (target->GetCreatureAddon()->path_id != 0)
- {
- stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON);
- stmt->setUInt32(0, guildLow);
- WorldDatabase.Execute(stmt);
+ handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target does not have a loaded path.");
+ return true;
+ }
- target->UpdateCurrentWaypointInfo(0, 0);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON);
+ stmt->setUInt32(0, guidLow);
+ WorldDatabase.Execute(stmt);
- stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
- stmt->setUInt8(0, uint8(IDLE_MOTION_TYPE));
- stmt->setUInt32(1, guildLow);
- WorldDatabase.Execute(stmt);
+ target->UpdateCurrentWaypointInfo(0, 0);
- target->LoadPath(0);
- target->SetDefaultMovementType(IDLE_MOTION_TYPE);
- target->GetMotionMaster()->MoveTargetedHome();
- target->GetMotionMaster()->Initialize();
- target->Say("Path unloaded.", LANG_UNIVERSAL);
+ stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE);
+ stmt->setUInt8(0, uint8(IDLE_MOTION_TYPE));
+ stmt->setUInt32(1, guidLow);
+ WorldDatabase.Execute(stmt);
- return true;
- }
- handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target have no loaded path.");
- }
+ target->LoadPath(0);
+ target->SetDefaultMovementType(IDLE_MOTION_TYPE);
+ target->GetMotionMaster()->MoveTargetedHome();
+ target->GetMotionMaster()->Initialize();
+ target->Say("Path unloaded.", LANG_UNIVERSAL);
return true;
}