aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp92
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h10
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp59
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h65
-rw-r--r--src/server/game/Server/Packets/ReputationPackets.h2
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h5
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp8
-rw-r--r--src/server/game/Server/WorldSession.cpp26
-rw-r--r--src/server/game/Server/WorldSession.h24
-rw-r--r--src/server/game/Spells/SpellEffects.cpp12
-rw-r--r--src/server/game/World/World.cpp7
-rw-r--r--src/server/shared/Common.h1
13 files changed, 225 insertions, 87 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index fabdf61c2c0..eef2276423d 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -28,7 +28,6 @@
#include "BattlegroundMgr.h"
#include "BattlegroundScore.h"
#include "CellImpl.h"
-#include "Channel.h"
#include "ChannelMgr.h"
#include "CharacterDatabaseCleaner.h"
#include "CharacterPackets.h"
@@ -16830,6 +16829,17 @@ void Player::SetHomebind(WorldLocation const& loc, uint32 areaId)
CharacterDatabase.Execute(stmt);
}
+void Player::SendBindPointUpdate()
+{
+ WorldPackets::Misc::BindPointUpdate packet;
+ packet.BindPosition.x = m_homebindX;
+ packet.BindPosition.y = m_homebindY;
+ packet.BindPosition.z = m_homebindZ;
+ packet.BindMapID = m_homebindMapId;
+ packet.BindAreaID = m_homebindAreaId;
+ SendDirectMessage(packet.Write());
+}
+
uint32 Player::GetUInt32ValueFromArray(Tokenizer const& data, uint16 index)
{
if (index >= data.size())
@@ -22972,65 +22982,71 @@ void Player::SendInitialPacketsBeforeAddToMap()
// guild bank list wtf?
+ /// SMSG_SPELL_CATEGORY_COOLDOWN
GetSession()->SendSpellCategoryCooldowns();
- // Homebind
- WorldPacket data(SMSG_BINDPOINTUPDATE, 5*4);
- data << m_homebindX << m_homebindY << m_homebindZ;
- data << (uint32) m_homebindMapId;
- data << (uint32) m_homebindAreaId;
- GetSession()->SendPacket(&data);
+ /// SMSG_BINDPOINTUPDATE
+ SendBindPointUpdate();
// SMSG_SET_PROFICIENCY
// SMSG_SET_PCT_SPELL_MODIFIER
// SMSG_SET_FLAT_SPELL_MODIFIER
// SMSG_UPDATE_AURA_DURATION
+ /// SMSG_TALENTS_INFO
SendTalentsInfoData();
-
- data.Initialize(SMSG_WORLD_SERVER_INFO, 1 + 1 + 4 + 4);
- data.WriteBit(0); // HasRestrictedLevel
- data.WriteBit(0); // HasRestrictedMoney
- data.WriteBit(0); // IneligibleForLoot
- data.FlushBits();
- //if (IneligibleForLoot)
- // data << uint32(0); // EncounterMask
-
- data << uint8(0); // IsOnTournamentRealm
- //if (HasRestrictedMoney)
- // data << uint32(100000); // RestrictedMoney (starter accounts)
- //if (HasRestrictedLevel)
- // data << uint32(20); // RestrictedLevel (starter accounts)
-
- data << uint32(sWorld->GetNextWeeklyQuestsResetTime() - WEEK); // LastWeeklyReset (not instance reset)
- data << uint32(GetMap()->GetDifficulty());
- GetSession()->SendPacket(&data);
-
+ /// SMSG_INITIAL_SPELLS
SendKnownSpells();
- WorldPackets::Spell::SendUnlearnSpells packet;
- GetSession()->SendPacket(packet.Write());
+ /// SMSG_SEND_UNLEARN_SPELLS
+ {
+ WorldPackets::Spell::SendUnlearnSpells packet;
+ SendDirectMessage(packet.Write());
+ }
+ /// SMSG_ACTION_BUTTONS
SendInitialActionButtons();
+
+ /// SMSG_INITIALIZE_FACTIONS
m_reputationMgr->SendInitialReputations();
- m_achievementMgr->SendAllAchievementData(this);
+ /// SMSG_SET_FORCED_REACTIONS
+ m_reputationMgr->SendForceReactions();
+ SendCurrencies();
SendEquipmentSetList();
- data.Initialize(SMSG_LOGIN_SETTIMESPEED, 4 + 4 + 4);
- data.AppendPackedTime(sWorld->GetGameTime());
- data << float(0.01666667f); // game speed
- data << uint32(0); // added in 3.1.2
- GetSession()->SendPacket(&data);
+ m_achievementMgr->SendAllAchievementData(this);
- GetReputationMgr().SendForceReactions(); // SMSG_SET_FORCED_REACTIONS
+ /// SMSG_LOGIN_SETTIMESPEED
+ {
+ static float const TimeSpeed = 0.01666667f;
+ WorldPackets::Misc::LoginSetTimeSpeed packet;
+ packet.NewSpeed = TimeSpeed;
+ packet.GameTime = sWorld->GetGameTime();
+ packet.ServerTime = sWorld->GetGameTime();
+ packet.GameTimeHolidayOffset = 0; /// @todo
+ packet.ServerTimeHolidayOffset = 0; /// @todo
+ SendDirectMessage(packet.Write());
+ }
+
+ /// SMSG_WORLD_SERVER_INFO
+ {
+ WorldPackets::Misc::WorldServerInfo packet;
+ packet.IneligibleForLootMask.Clear(); /// @todo
+ packet.WeeklyReset = sWorld->GetNextWeeklyQuestsResetTime() - WEEK;
+ packet.InstanceGroupSize.Clear(); /// @todo
+ packet.IsTournamentRealm = 0; /// @todo
+ packet.RestrictedAccountMaxLevel.Clear(); /// @todo
+ packet.RestrictedAccountMaxMoney.Clear(); /// @todo
+ packet.DifficultyID = GetMap()->GetDifficulty();
+ SendDirectMessage(packet.Write());
+ }
// SMSG_TALENTS_INFO x 2 for pet (unspent points and talents in separate packets...)
// SMSG_PET_GUIDS
// SMSG_UPDATE_WORLD_STATE
// SMSG_POWER_UPDATE
- SendCurrencies();
SetMover(this);
}
@@ -25417,7 +25433,7 @@ void Player::CompletedAchievement(AchievementEntry const* entry)
bool Player::LearnTalent(uint32 talentId)
{
uint8 group = GetActiveTalentGroup();
-
+
// check if talent specialization is learnt
if (!GetTalentSpec(group))
return false;
@@ -25498,7 +25514,7 @@ void Player::LearnTalentSpecialization(uint32 talentSpec)
if (masterySpell->IsPassive() && IsNeedCastPassiveSpellAtLearn(masterySpell))
CastSpell(this, masterySpell->Id, true);
}
-
+
SendTalentsInfoData();
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 5f3eda1d69d..ac3becd987a 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2368,6 +2368,7 @@ class Player : public Unit, public GridObject<Player>
void SaveRecallPosition();
void SetHomebind(WorldLocation const& loc, uint32 areaId);
+ void SendBindPointUpdate();
// Homebind coordinates
uint32 m_homebindMapId;
diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h
index 47735177dd9..15764afe152 100644
--- a/src/server/game/Server/Packets/ChatPackets.h
+++ b/src/server/game/Server/Packets/ChatPackets.h
@@ -130,7 +130,7 @@ namespace WorldPackets
class Chat final : public ServerPacket
{
public:
- Chat() : ServerPacket(SMSG_MESSAGECHAT, 1+1+8+8+8+8+8+4+4+4+1+4+20) { }
+ Chat() : ServerPacket(SMSG_MESSAGECHAT, 100) { }
WorldPacket const* Write() override;
@@ -138,7 +138,7 @@ namespace WorldPackets
uint8 Language = LANG_UNIVERSAL;
ObjectGuid SenderGUID;
ObjectGuid SenderGuildGUID;
- ObjectGuid SenderAccountGUID; // Not in JAM messages but appears in packet?
+ ObjectGuid SenderAccountGUID;
ObjectGuid TargetGUID;
ObjectGuid PartyGUID;
uint32 SenderVirtualAddress;
@@ -158,7 +158,7 @@ namespace WorldPackets
class Emote final : public ServerPacket
{
public:
- Emote() : ServerPacket(SMSG_EMOTE, 8+4) { }
+ Emote() : ServerPacket(SMSG_EMOTE, 18 + 4) { }
WorldPacket const* Write() override;
@@ -181,12 +181,12 @@ namespace WorldPackets
class STextEmote final : public ServerPacket
{
public:
- STextEmote() : ServerPacket(SMSG_TEXT_EMOTE, 8+8+4+4) { }
+ STextEmote() : ServerPacket(SMSG_TEXT_EMOTE, 3 * 18 + 2 * 4) { }
WorldPacket const* Write() override;
ObjectGuid SourceGUID;
- ObjectGuid SourceAccountGUID; // Not in JAM
+ ObjectGuid SourceAccountGUID;
ObjectGuid TargetGUID;
int32 SoundIndex;
int32 EmoteID;
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index d223b73e310..967e60a1f49 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -17,6 +17,35 @@
#include "MiscPackets.h"
+WorldPacket const* WorldPackets::Misc::BindPointUpdate::Write()
+{
+ _worldPacket << float(BindPosition.x);
+ _worldPacket << float(BindPosition.y);
+ _worldPacket << float(BindPosition.z);
+ _worldPacket << uint32(BindMapID);
+ _worldPacket << uint32(BindAreaID);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Misc::InvalidatePlayer::Write()
+{
+ _worldPacket << Guid;
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Misc::LoginSetTimeSpeed::Write()
+{
+ _worldPacket.AppendPackedTime(ServerTime);
+ _worldPacket.AppendPackedTime(GameTime);
+ _worldPacket << float(NewSpeed);
+ _worldPacket << uint32(ServerTimeHolidayOffset);
+ _worldPacket << uint32(GameTimeHolidayOffset);
+
+ return &_worldPacket;
+}
+
void WorldPackets::Misc::ViolenceLevel::Read()
{
_worldPacket >> ViolenceLvl;
@@ -44,8 +73,34 @@ WorldPacket const* WorldPackets::Misc::UITime::Write()
WorldPacket const* WorldPackets::Misc::TutorialFlags::Write()
{
- for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
- _worldPacket << TutorialData[i];
+ _worldPacket.append(TutorialData, MAX_ACCOUNT_TUTORIAL_VALUES);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Misc::WorldServerInfo::Write()
+{
+ _worldPacket << uint32(DifficultyID);
+ _worldPacket << uint8(IsTournamentRealm);
+ _worldPacket << uint32(WeeklyReset);
+ _worldPacket.WriteBit(IneligibleForLootMask.HasValue);
+ _worldPacket.WriteBit(InstanceGroupSize.HasValue);
+ _worldPacket.WriteBit(RestrictedAccountMaxLevel.HasValue);
+ _worldPacket.WriteBit(RestrictedAccountMaxMoney.HasValue);
+
+ if (IneligibleForLootMask.HasValue)
+ _worldPacket << uint32(IneligibleForLootMask.value);
+
+ if (InstanceGroupSize.HasValue)
+ _worldPacket << uint32(InstanceGroupSize.value);
+
+ if (RestrictedAccountMaxLevel.HasValue)
+ _worldPacket << uint32(RestrictedAccountMaxLevel.value);
+
+ if (RestrictedAccountMaxMoney.HasValue)
+ _worldPacket << uint32(RestrictedAccountMaxMoney.value);
+
+ _worldPacket.FlushBits();
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 86f2f4c5eb4..7bb2cb3fb9b 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -19,11 +19,49 @@
#define MiscPackets_h__
#include "Packet.h"
+#include "ObjectGuid.h"
+#include "WorldSession.h"
namespace WorldPackets
{
namespace Misc
{
+ class BindPointUpdate final : public ServerPacket
+ {
+ public:
+ BindPointUpdate() : ServerPacket(SMSG_BINDPOINTUPDATE, 20) { }
+
+ WorldPacket const* Write() override;
+
+ uint32 BindMapID = MAPID_INVALID;
+ G3D::Vector3 BindPosition;
+ uint32 BindAreaID = 0;
+ };
+
+ class InvalidatePlayer final : public ServerPacket
+ {
+ public:
+ InvalidatePlayer() : ServerPacket(SMSG_INVALIDATE_PLAYER, 18) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Guid;
+ };
+
+ class LoginSetTimeSpeed final : public ServerPacket
+ {
+ public:
+ LoginSetTimeSpeed() : ServerPacket(SMSG_LOGIN_SETTIMESPEED, 20) { }
+
+ WorldPacket const* Write() override;
+
+ float NewSpeed = 0.0f;
+ int32 ServerTimeHolidayOffset = 0;
+ uint32 GameTime = 0;
+ uint32 ServerTime = 0;
+ int32 GameTimeHolidayOffset = 0;
+ };
+
class ViolenceLevel final : public ClientPacket
{
public:
@@ -54,7 +92,7 @@ namespace WorldPackets
uint32 ClientTime = 0; // Client ticks in ms
uint32 SequenceIndex = 0; // Same index as in request
};
-
+
class UITime final : public ServerPacket
{
public:
@@ -64,15 +102,34 @@ namespace WorldPackets
uint32 Time = 0;
};
-
+
class TutorialFlags : public ServerPacket
{
public:
- TutorialFlags() : ServerPacket(SMSG_TUTORIAL_FLAGS, 32) { }
+ TutorialFlags() : ServerPacket(SMSG_TUTORIAL_FLAGS, 32)
+ {
+ std::memset(TutorialData, 0, sizeof(TutorialData));
+ }
+
+ WorldPacket const* Write() override;
+
+ uint32 TutorialData[MAX_ACCOUNT_TUTORIAL_VALUES];
+ };
+
+ class WorldServerInfo final : public ServerPacket
+ {
+ public:
+ WorldServerInfo() : ServerPacket(SMSG_WORLD_SERVER_INFO, 26) { }
WorldPacket const* Write() override;
- uint32 TutorialData[8];
+ Optional<uint32> IneligibleForLootMask; ///< Encountermask?
+ uint32 WeeklyReset = 0; ///< UnixTime of last Weekly Reset Time
+ Optional<uint32> InstanceGroupSize;
+ uint8 IsTournamentRealm = 0;
+ Optional<uint32> RestrictedAccountMaxLevel;
+ Optional<uint32> RestrictedAccountMaxMoney;
+ uint32 DifficultyID = 0;
};
}
}
diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h
index b893d6b522f..387ae9b0318 100644
--- a/src/server/game/Server/Packets/ReputationPackets.h
+++ b/src/server/game/Server/Packets/ReputationPackets.h
@@ -28,7 +28,7 @@ namespace WorldPackets
class InitializeFactions final : public ServerPacket
{
public:
- InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS)
+ InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, 1312)
{
for (uint16 i = 0; i < FactionCount; ++i)
{
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index 2b4e4c3c146..c02f5cc2a5f 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -58,7 +58,10 @@ namespace WorldPackets
class UpdateActionButtons final : public ServerPacket
{
public:
- UpdateActionButtons() : ServerPacket(SMSG_ACTION_BUTTONS, MAX_ACTION_BUTTONS*8+1) { }
+ UpdateActionButtons() : ServerPacket(SMSG_ACTION_BUTTONS, MAX_ACTION_BUTTONS * 8 + 1)
+ {
+ std::memset(ActionButtons, 0, sizeof(ActionButtons));
+ }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 6e506e2544e..9f97e53df42 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -767,7 +767,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_NAME_QUERY_RESPONSE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDER_CONFIRM, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDPOINTUPDATE, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDPOINTUPDATE, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDZONEREPLY, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BREAK_TARGET, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_BUY_BANK_SLOT_RESULT, STATUS_UNHANDLED);
@@ -1010,7 +1010,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_RESET_FAILED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_SAVE_CREATED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_DANCE, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_PLAYER, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_PLAYER, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALID_PROMOTION_CODE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVENTORY_CHANGE_FAILURE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_ADD_PASSIVE, STATUS_UNHANDLED);
@@ -1052,7 +1052,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_RECRUIT_LIST_UPDATED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIST_INVENTORY, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_CUF_PROFILES, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_SETTIMESPEED, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_SETTIMESPEED, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_VERIFY_WORLD, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_CANCEL_ACK, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_COMPLETE, STATUS_NEVER);
@@ -1416,7 +1416,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_SPELL_USAGE_UPDATE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WHO, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WHOIS, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_SERVER_INFO, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_SERVER_INFO, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_STATE_UI_TIMER_UPDATE, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_XP_GAIN_ABORTED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ZONE_UNDER_ATTACK, STATUS_UNHANDLED);
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 18fe28344b0..a8d19434cc3 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -695,7 +695,7 @@ void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask)
{
for (uint32 i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i)
if (mask & (1 << i))
- m_accountData[i] = AccountData();
+ _accountData[i] = AccountData();
if (!result)
return;
@@ -718,20 +718,20 @@ void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask)
continue;
}
- m_accountData[type].Time = time_t(fields[1].GetUInt32());
- m_accountData[type].Data = fields[2].GetString();
+ _accountData[type].Time = time_t(fields[1].GetUInt32());
+ _accountData[type].Data = fields[2].GetString();
}
while (result->NextRow());
}
-void WorldSession::SetAccountData(AccountDataType type, time_t tm, std::string const& data)
+void WorldSession::SetAccountData(AccountDataType type, uint32 time, std::string const& data)
{
if ((1 << type) & GLOBAL_CACHE_MASK)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_ACCOUNT_DATA);
stmt->setUInt32(0, GetAccountId());
stmt->setUInt8(1, type);
- stmt->setUInt32(2, uint32(tm));
+ stmt->setUInt32(2, time);
stmt->setString(3, data);
CharacterDatabase.Execute(stmt);
}
@@ -744,24 +744,24 @@ void WorldSession::SetAccountData(AccountDataType type, time_t tm, std::string c
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_PLAYER_ACCOUNT_DATA);
stmt->setUInt64(0, m_GUIDLow);
stmt->setUInt8(1, type);
- stmt->setUInt32(2, uint32(tm));
+ stmt->setUInt32(2, time);
stmt->setString(3, data);
CharacterDatabase.Execute(stmt);
}
- m_accountData[type].Time = tm;
- m_accountData[type].Data = data;
+ _accountData[type].Time = time_t(time);
+ _accountData[type].Data = data;
}
void WorldSession::LoadTutorialsData()
{
- memset(m_Tutorials, 0, sizeof(uint32) * MAX_ACCOUNT_TUTORIAL_VALUES);
+ memset(_tutorials, 0, sizeof(uint32) * MAX_ACCOUNT_TUTORIAL_VALUES);
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_TUTORIALS);
stmt->setUInt32(0, GetAccountId());
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
- m_Tutorials[i] = (*result)[i].GetUInt32();
+ _tutorials[i] = (*result)[i].GetUInt32();
m_TutorialsChanged = false;
}
@@ -769,11 +769,11 @@ void WorldSession::LoadTutorialsData()
void WorldSession::SendTutorialsData()
{
WorldPackets::Misc::TutorialFlags packet;
- memcpy(packet.TutorialData, m_Tutorials, sizeof(packet.TutorialData));
+ memcpy(packet.TutorialData, _tutorials, sizeof(_tutorials));
SendPacket(packet.Write());
}
-void WorldSession::SaveTutorialsData(SQLTransaction &trans)
+void WorldSession::SaveTutorialsData(SQLTransaction& trans)
{
if (!m_TutorialsChanged)
return;
@@ -784,7 +784,7 @@ void WorldSession::SaveTutorialsData(SQLTransaction &trans)
// Modify data in DB
stmt = CharacterDatabase.GetPreparedStatement(hasTutorials ? CHAR_UPD_TUTORIALS : CHAR_INS_TUTORIALS);
for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
- stmt->setUInt32(i, m_Tutorials[i]);
+ stmt->setUInt32(i, _tutorials[i]);
stmt->setUInt32(MAX_ACCOUNT_TUTORIAL_VALUES, GetAccountId());
trans->Append(stmt);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 14513730e84..652ce589eac 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -130,7 +130,7 @@ namespace WorldPackets
{
class QueryGuildInfo;
}
-
+
namespace Talent
{
class SetSpecialization;
@@ -180,6 +180,20 @@ enum AccountDataType
#define REGISTERED_ADDON_PREFIX_SOFTCAP 64
+enum Tutorials
+{
+ TUTORIAL_TALENT = 0,
+ TUTORIAL_SPEC = 1,
+ TUTORIAL_GLYPH = 2,
+ TUTORIAL_SPELLBOOK = 3,
+ TUTORIAL_PROFESSIONS = 4,
+ TUTORIAL_CORE_ABILITITES = 5,
+ TUTORIAL_PET_JOURNAL = 6,
+ TUTORIAL_WHAT_HAS_CHANGED = 7
+};
+
+#define MAX_ACCOUNT_TUTORIAL_VALUES 8
+
struct AccountData
{
time_t Time = 0;
@@ -398,8 +412,8 @@ class WorldSession
bool CheckStableMaster(ObjectGuid guid);
// Account Data
- AccountData const* GetAccountData(AccountDataType type) const { return &m_accountData[type]; }
- void SetAccountData(AccountDataType type, time_t tm, std::string const& data);
+ AccountData const* GetAccountData(AccountDataType type) const { return &_accountData[type]; }
+ void SetAccountData(AccountDataType type, uint32 time, std::string const& data);
void LoadGlobalAccountData();
void LoadAccountData(PreparedQueryResult result, uint32 mask);
@@ -1194,8 +1208,8 @@ class WorldSession
LocaleConstant m_sessionDbLocaleIndex;
std::atomic<uint32> m_latency;
std::atomic<uint32> m_clientTimeDelay;
- AccountData m_accountData[NUM_ACCOUNT_DATA_TYPES];
- uint32 m_Tutorials[MAX_ACCOUNT_TUTORIAL_VALUES];
+ AccountData _accountData[NUM_ACCOUNT_DATA_TYPES];
+ uint32 _tutorials[MAX_ACCOUNT_TUTORIAL_VALUES];
bool m_TutorialsChanged;
AddonsList m_addonsList;
std::vector<std::string> _registeredAddonPrefixes;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 9c12abbe6e2..98de817e7a3 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -5668,21 +5668,13 @@ void Spell::EffectBind(SpellEffIndex effIndex)
homeLoc = player->GetWorldLocation();
player->SetHomebind(homeLoc, areaId);
-
- // binding
- WorldPacket data(SMSG_BINDPOINTUPDATE, 4 + 4 + 4 + 4 + 4);
- data << float(homeLoc.GetPositionX());
- data << float(homeLoc.GetPositionY());
- data << float(homeLoc.GetPositionZ());
- data << uint32(homeLoc.GetMapId());
- data << uint32(areaId);
- player->SendDirectMessage(&data);
+ player->SendBindPointUpdate();
TC_LOG_DEBUG("spells", "EffectBind: New homebind X: %f, Y: %f, Z: %f, MapId: %u, AreaId: %u",
homeLoc.GetPositionX(), homeLoc.GetPositionY(), homeLoc.GetPositionZ(), homeLoc.GetMapId(), areaId);
// zone update
- data.Initialize(SMSG_PLAYERBOUND, 8 + 4);
+ WorldPacket data(SMSG_PLAYERBOUND, 8 + 4);
data << m_caster->GetGUID();
data << uint32(areaId);
player->SendDirectMessage(&data);
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index a7a5a8ae7bb..a9d12fd11f8 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -46,6 +46,7 @@
#include "LFGMgr.h"
#include "MapManager.h"
#include "Memory.h"
+#include "MiscPackets.h"
#include "MMapFactory.h"
#include "ObjectMgr.h"
#include "OutdoorPvPMgr.h"
@@ -3307,9 +3308,9 @@ void World::UpdateCharacterInfo(ObjectGuid const& guid, std::string const& name,
if (race != RACE_NONE)
itr->second.Race = race;
- WorldPacket data(SMSG_INVALIDATE_PLAYER, 8);
- data << guid;
- SendGlobalMessage(&data);
+ WorldPackets::Misc::InvalidatePlayer data;
+ data.Guid = guid;
+ SendGlobalMessage(data.Write());
}
void World::UpdateCharacterInfoLevel(ObjectGuid const& guid, uint8 level)
diff --git a/src/server/shared/Common.h b/src/server/shared/Common.h
index 4e23b4a4770..4bd4d16a6d7 100644
--- a/src/server/shared/Common.h
+++ b/src/server/shared/Common.h
@@ -118,7 +118,6 @@ const uint8 TOTAL_LOCALES = 9;
#define DEFAULT_LOCALE LOCALE_enUS
#define MAX_LOCALES 8
-#define MAX_ACCOUNT_TUTORIAL_VALUES 8
extern char const* localeNames[TOTAL_LOCALES];