Merge pull request #14710 from et65/6.x
Core/PacketsIO: Implemented or updated most of party related packets.
This commit is contained in:
@@ -71,7 +71,7 @@ namespace Trinity
|
||||
void do_helper(WorldPacket& data, char const* text)
|
||||
{
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(_msgtype, LANG_UNIVERSAL, _source, _source, text);
|
||||
packet.Initialize(_msgtype, LANG_UNIVERSAL, _source, _source, text);
|
||||
packet.Write();
|
||||
data = packet.Move();
|
||||
}
|
||||
@@ -98,7 +98,7 @@ namespace Trinity
|
||||
snprintf(str, 2048, text, arg1str, arg2str);
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(_msgtype, LANG_UNIVERSAL, _source, _source, str);
|
||||
packet.Initialize(_msgtype, LANG_UNIVERSAL, _source, _source, str);
|
||||
packet.Write();
|
||||
data = packet.Move();
|
||||
}
|
||||
|
||||
@@ -626,10 +626,10 @@ void Channel::Say(ObjectGuid const& guid, std::string const& what, uint32 lang)
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
if (Player* player = ObjectAccessor::FindConnectedPlayer(guid))
|
||||
packet.Initalize(CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _name);
|
||||
packet.Initialize(CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _name);
|
||||
else
|
||||
{
|
||||
packet.Initalize(CHAT_MSG_CHANNEL, Language(lang), nullptr, nullptr, what, 0, _name);
|
||||
packet.Initialize(CHAT_MSG_CHANNEL, Language(lang), nullptr, nullptr, what, 0, _name);
|
||||
packet.SenderGUID = guid;
|
||||
packet.TargetGUID = guid;
|
||||
}
|
||||
|
||||
@@ -201,7 +201,7 @@ void ChatHandler::SendSysMessage(const char *str)
|
||||
|
||||
while (char* line = LineFromMessage(pos))
|
||||
{
|
||||
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
|
||||
packet.Initialize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
|
||||
m_session->SendPacket(packet.Write());
|
||||
}
|
||||
|
||||
@@ -219,7 +219,7 @@ void ChatHandler::SendGlobalSysMessage(const char *str)
|
||||
|
||||
while (char* line = LineFromMessage(pos))
|
||||
{
|
||||
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
|
||||
packet.Initialize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
|
||||
sWorld->SendGlobalMessage(packet.Write());
|
||||
}
|
||||
|
||||
@@ -237,7 +237,7 @@ void ChatHandler::SendGlobalGMSysMessage(const char *str)
|
||||
|
||||
while (char* line = LineFromMessage(pos))
|
||||
{
|
||||
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
|
||||
packet.Initialize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
|
||||
sWorld->SendGlobalGMMessage(packet.Write());
|
||||
}
|
||||
|
||||
|
||||
@@ -412,7 +412,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const
|
||||
joinData.result = LFG_JOIN_NOT_MEET_REQS;
|
||||
else if (grp)
|
||||
{
|
||||
if (grp->GetMembersCount() > MAXGROUPSIZE)
|
||||
if (grp->GetMembersCount() > MAX_GROUP_SIZE)
|
||||
joinData.result = LFG_JOIN_TOO_MUCH_MEMBERS;
|
||||
else
|
||||
{
|
||||
|
||||
@@ -323,7 +323,7 @@ LfgCompatibility LFGQueue::CheckCompatibility(GuidList check)
|
||||
LfgRolesMap proposalRoles;
|
||||
|
||||
// Check for correct size
|
||||
if (check.size() > MAXGROUPSIZE || check.empty())
|
||||
if (check.size() > MAX_GROUP_SIZE || check.empty())
|
||||
{
|
||||
TC_LOG_DEBUG("lfg.queue.match.compatibility.check", "Guids: (%s): Size wrong - Not compatibles", strGuids.c_str());
|
||||
return LFG_INCOMPATIBLES_WRONG_GROUP_SIZE;
|
||||
@@ -349,7 +349,7 @@ LfgCompatibility LFGQueue::CheckCompatibility(GuidList check)
|
||||
// Check if more than one LFG group and number of players joining
|
||||
uint8 numPlayers = 0;
|
||||
uint8 numLfgGroups = 0;
|
||||
for (GuidList::const_iterator it = check.begin(); it != check.end() && numLfgGroups < 2 && numPlayers <= MAXGROUPSIZE; ++it)
|
||||
for (GuidList::const_iterator it = check.begin(); it != check.end() && numLfgGroups < 2 && numPlayers <= MAX_GROUP_SIZE; ++it)
|
||||
{
|
||||
ObjectGuid guid = *it;
|
||||
LfgQueueDataContainer::iterator itQueue = QueueDataStore.find(guid);
|
||||
@@ -374,8 +374,8 @@ LfgCompatibility LFGQueue::CheckCompatibility(GuidList check)
|
||||
}
|
||||
}
|
||||
|
||||
// Group with less that MAXGROUPSIZE members always compatible
|
||||
if (check.size() == 1 && numPlayers != MAXGROUPSIZE)
|
||||
// Group with less that MAX_GROUP_SIZE members always compatible
|
||||
if (check.size() == 1 && numPlayers != MAX_GROUP_SIZE)
|
||||
{
|
||||
TC_LOG_DEBUG("lfg.queue.match.compatibility.check", "Guids: (%s) single group. Compatibles", strGuids.c_str());
|
||||
LfgQueueDataContainer::iterator itQueue = QueueDataStore.find(check.front());
|
||||
@@ -396,7 +396,7 @@ LfgCompatibility LFGQueue::CheckCompatibility(GuidList check)
|
||||
return LFG_INCOMPATIBLES_MULTIPLE_LFG_GROUPS;
|
||||
}
|
||||
|
||||
if (numPlayers > MAXGROUPSIZE)
|
||||
if (numPlayers > MAX_GROUP_SIZE)
|
||||
{
|
||||
TC_LOG_DEBUG("lfg.queue.match.compatibility.check", "Guids: (%s) Too much players (%u)", strGuids.c_str(), numPlayers);
|
||||
SetCompatibles(strGuids, LFG_INCOMPATIBLES_TOO_MUCH_PLAYERS);
|
||||
@@ -473,7 +473,7 @@ LfgCompatibility LFGQueue::CheckCompatibility(GuidList check)
|
||||
}
|
||||
|
||||
// Enough players?
|
||||
if (numPlayers != MAXGROUPSIZE)
|
||||
if (numPlayers != MAX_GROUP_SIZE)
|
||||
{
|
||||
TC_LOG_DEBUG("lfg.queue.match.compatibility.check", "Guids: (%s) Compatibles but not enough players(%u)", strGuids.c_str(), numPlayers);
|
||||
LfgCompatibilityData data(LFG_COMPATIBLES_WITH_LESS_PLAYERS);
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
Pet::Pet(Player* owner, PetType type) :
|
||||
Guardian(NULL, owner, true), m_usedTalentCount(0), m_removed(false),
|
||||
m_petType(type), m_duration(0), m_auraRaidUpdateMask(0), m_loading(false),
|
||||
m_petType(type), m_duration(0), m_groupUpdateMask(0), m_loading(false),
|
||||
m_declinedname(NULL)
|
||||
{
|
||||
ASSERT(GetOwner());
|
||||
@@ -337,8 +337,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
|
||||
|
||||
owner->PetSpellInitialize();
|
||||
|
||||
if (owner->GetGroup())
|
||||
owner->SetGroupUpdateFlag(GROUP_UPDATE_PET);
|
||||
SetGroupUpdateFlag(GROUP_UPDATE_PET_FULL);
|
||||
|
||||
// TODO: 6.x remove/update pet talents
|
||||
//owner->SendTalentsInfoData(true);
|
||||
@@ -1938,6 +1937,21 @@ void Pet::SetDisplayId(uint32 modelId)
|
||||
if (!isControlled())
|
||||
return;
|
||||
|
||||
if (GetOwner()->GetGroup())
|
||||
GetOwner()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MODEL_ID);
|
||||
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MODEL_ID);
|
||||
}
|
||||
|
||||
void Pet::SetGroupUpdateFlag(uint32 flag)
|
||||
{
|
||||
if (GetOwner()->GetGroup())
|
||||
{
|
||||
m_groupUpdateMask |= flag;
|
||||
GetOwner()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET);
|
||||
}
|
||||
}
|
||||
|
||||
void Pet::ResetGroupUpdateFlag()
|
||||
{
|
||||
m_groupUpdateMask = GROUP_UPDATE_FLAG_PET_NONE;
|
||||
if (GetOwner()->GetGroup())
|
||||
GetOwner()->RemoveGroupUpdateFlag(GROUP_UPDATE_FLAG_PET);
|
||||
}
|
||||
|
||||
@@ -134,9 +134,9 @@ class Pet : public Guardian
|
||||
|
||||
uint32 m_usedTalentCount;
|
||||
|
||||
uint64 GetAuraUpdateMaskForRaid() const { return m_auraRaidUpdateMask; }
|
||||
void SetAuraUpdateMaskForRaid(uint8 slot) { m_auraRaidUpdateMask |= (uint64(1) << slot); }
|
||||
void ResetAuraUpdateMaskForRaid() { m_auraRaidUpdateMask = 0; }
|
||||
uint32 GetGroupUpdateFlag() const { return m_groupUpdateMask; }
|
||||
void SetGroupUpdateFlag(uint32 flag);
|
||||
void ResetGroupUpdateFlag();
|
||||
|
||||
DeclinedName const* GetDeclinedNames() const { return m_declinedname; }
|
||||
|
||||
@@ -147,9 +147,9 @@ class Pet : public Guardian
|
||||
protected:
|
||||
PetType m_petType;
|
||||
int32 m_duration; // time until unsummon (used mostly for summoned guardians and not used for controlled pets)
|
||||
uint64 m_auraRaidUpdateMask;
|
||||
bool m_loading;
|
||||
uint32 m_regenTimer;
|
||||
uint32 m_groupUpdateMask;
|
||||
|
||||
DeclinedName *m_declinedname;
|
||||
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
#include "WorldPacket.h"
|
||||
#include "WorldSession.h"
|
||||
#include "WorldStatePackets.h"
|
||||
#include "InstancePackets.h"
|
||||
|
||||
#define ZONE_UPDATE_INTERVAL (1*IN_MILLISECONDS)
|
||||
|
||||
@@ -701,7 +702,6 @@ Player::Player(WorldSession* session): Unit(true)
|
||||
// group is initialized in the reference constructor
|
||||
SetGroupInvite(NULL);
|
||||
m_groupUpdateMask = 0;
|
||||
m_auraRaidUpdateMask = 0;
|
||||
m_bPassOnGroupLoot = false;
|
||||
|
||||
duel = NULL;
|
||||
@@ -887,7 +887,6 @@ Player::Player(WorldSession* session): Unit(true)
|
||||
_maxPersonalArenaRate = 0;
|
||||
|
||||
memset(_voidStorageItems, 0, VOID_STORAGE_MAX_SLOT * sizeof(VoidStorageItem*));
|
||||
memset(_CUFProfiles, 0, MAX_CUF_PROFILES * sizeof(CUFProfile*));
|
||||
|
||||
m_achievementMgr = new AchievementMgr<Player>(this);
|
||||
m_reputationMgr = new ReputationMgr(this);
|
||||
@@ -927,9 +926,6 @@ Player::~Player()
|
||||
for (uint8 i = 0; i < VOID_STORAGE_MAX_SLOT; ++i)
|
||||
delete _voidStorageItems[i];
|
||||
|
||||
for (uint8 i = 0; i < MAX_CUF_PROFILES; ++i)
|
||||
delete _CUFProfiles[i];
|
||||
|
||||
ClearResurrectRequestData();
|
||||
|
||||
sWorld->DecreasePlayerCount();
|
||||
@@ -7387,7 +7383,11 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
|
||||
|
||||
// group update
|
||||
if (GetGroup())
|
||||
{
|
||||
SetGroupUpdateFlag(GROUP_UPDATE_FULL);
|
||||
if (Pet* pet = GetPet())
|
||||
pet->SetGroupUpdateFlag(GROUP_UPDATE_PET_FULL);
|
||||
}
|
||||
|
||||
m_zoneUpdateId = newZone;
|
||||
m_zoneUpdateTimer = ZONE_UPDATE_INTERVAL;
|
||||
@@ -17350,7 +17350,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder)
|
||||
|
||||
_LoadCUFProfiles(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_CUF_PROFILES));
|
||||
|
||||
std::unique_ptr<Garrison> garrison(new Garrison(this));
|
||||
std::unique_ptr<Garrison> garrison = Trinity::make_unique<Garrison>(this);
|
||||
if (garrison->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GARRISON),
|
||||
holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GARRISON_BLUEPRINTS),
|
||||
holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GARRISON_BUILDINGS)))
|
||||
@@ -17369,19 +17369,19 @@ void Player::_LoadCUFProfiles(PreparedQueryResult result)
|
||||
// SELECT id, name, frameHeight, frameWidth, sortBy, healthText, boolOptions, unk146, unk147, unk148, unk150, unk152, unk154 FROM character_cuf_profiles WHERE guid = ?
|
||||
Field* fields = result->Fetch();
|
||||
|
||||
uint8 id = fields[0].GetUInt8();
|
||||
std::string name = fields[1].GetString();
|
||||
uint16 frameHeight = fields[2].GetUInt16();
|
||||
uint16 frameWidth = fields[3].GetUInt16();
|
||||
uint8 sortBy = fields[4].GetUInt8();
|
||||
uint8 healthText = fields[5].GetUInt8();
|
||||
uint32 boolOptions = fields[6].GetUInt32();
|
||||
uint8 unk146 = fields[7].GetUInt8();
|
||||
uint8 unk147 = fields[8].GetUInt8();
|
||||
uint8 unk148 = fields[9].GetUInt8();
|
||||
uint16 unk150 = fields[10].GetUInt16();
|
||||
uint16 unk152 = fields[11].GetUInt16();
|
||||
uint16 unk154 = fields[12].GetUInt16();
|
||||
uint8 id = fields[0].GetUInt8();
|
||||
std::string name = fields[1].GetString();
|
||||
uint16 frameHeight = fields[2].GetUInt16();
|
||||
uint16 frameWidth = fields[3].GetUInt16();
|
||||
uint8 sortBy = fields[4].GetUInt8();
|
||||
uint8 healthText = fields[5].GetUInt8();
|
||||
uint32 boolOptions = fields[6].GetUInt32();
|
||||
uint8 topPoint = fields[7].GetUInt8();
|
||||
uint8 bottomPoint = fields[8].GetUInt8();
|
||||
uint8 leftPoint = fields[9].GetUInt8();
|
||||
uint16 topOffset = fields[10].GetUInt16();
|
||||
uint16 bottomOffset = fields[11].GetUInt16();
|
||||
uint16 leftOffset = fields[12].GetUInt16();
|
||||
|
||||
if (id > MAX_CUF_PROFILES)
|
||||
{
|
||||
@@ -17389,7 +17389,7 @@ void Player::_LoadCUFProfiles(PreparedQueryResult result)
|
||||
continue;
|
||||
}
|
||||
|
||||
_CUFProfiles[id] = new CUFProfile(name, frameHeight, frameWidth, sortBy, healthText, boolOptions, unk146, unk147, unk148, unk150, unk152, unk154);
|
||||
_CUFProfiles[id] = Trinity::make_unique<CUFProfile>(name, frameHeight, frameWidth, sortBy, healthText, boolOptions, topPoint, bottomPoint, leftPoint, topOffset, bottomOffset, leftOffset);
|
||||
}
|
||||
while (result->NextRow());
|
||||
}
|
||||
@@ -18557,12 +18557,7 @@ void Player::SetPendingBind(uint32 instanceId, uint32 bindTimer)
|
||||
|
||||
void Player::SendRaidInfo()
|
||||
{
|
||||
uint32 counter = 0;
|
||||
|
||||
WorldPacket data(SMSG_INSTANCE_INFO, 4);
|
||||
|
||||
size_t p_counter = data.wpos();
|
||||
data << uint32(counter); // placeholder
|
||||
WorldPackets::Instance::InstanceInfo instanceInfo;
|
||||
|
||||
time_t now = time(NULL);
|
||||
|
||||
@@ -18573,27 +18568,28 @@ void Player::SendRaidInfo()
|
||||
if (itr->second.perm)
|
||||
{
|
||||
InstanceSave* save = itr->second.save;
|
||||
bool isHeroic = save->GetDifficultyID() == DIFFICULTY_10_HC || save->GetDifficultyID() == DIFFICULTY_25_HC;
|
||||
uint32 completedEncounters = 0;
|
||||
|
||||
WorldPackets::Instance::InstanceLockInfos lockInfos;
|
||||
|
||||
lockInfos.InstanceID = save->GetInstanceId();
|
||||
lockInfos.MapID = save->GetMapId();
|
||||
lockInfos.DifficultyID = save->GetDifficultyID();
|
||||
lockInfos.TimeRemaining = save->GetResetTime() - now;
|
||||
|
||||
lockInfos.CompletedMask = 0;
|
||||
if (Map* map = sMapMgr->FindMap(save->GetMapId(), save->GetInstanceId()))
|
||||
if (InstanceScript* instanceScript = ((InstanceMap*)map)->GetInstanceScript())
|
||||
completedEncounters = instanceScript->GetCompletedEncounterMask();
|
||||
lockInfos.CompletedMask = instanceScript->GetCompletedEncounterMask();
|
||||
|
||||
data << uint32(save->GetMapId()); // map id
|
||||
data << uint32(save->GetDifficultyID()); // difficulty
|
||||
data << uint32(isHeroic); // heroic
|
||||
data << uint64(save->GetInstanceId()); // instance id
|
||||
data << uint8(1); // expired = 0
|
||||
data << uint8(0); // extended = 1
|
||||
data << uint32(save->GetResetTime() - now); // reset time
|
||||
data << uint32(completedEncounters); // completed encounters mask
|
||||
++counter;
|
||||
lockInfos.Locked = lockInfos.TimeRemaining <= 0;
|
||||
lockInfos.Extended = false;
|
||||
|
||||
instanceInfo.LockList.push_back(lockInfos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data.put<uint32>(p_counter, counter);
|
||||
GetSession()->SendPacket(&data);
|
||||
GetSession()->SendPacket(instanceInfo.Write());
|
||||
}
|
||||
|
||||
/// convert the player's binds to the group
|
||||
@@ -19418,13 +19414,13 @@ void Player::_SaveCUFProfiles(SQLTransaction& trans)
|
||||
stmt->setUInt16(4, _CUFProfiles[i]->FrameWidth);
|
||||
stmt->setUInt8(5, _CUFProfiles[i]->SortBy);
|
||||
stmt->setUInt8(6, _CUFProfiles[i]->HealthText);
|
||||
stmt->setUInt32(7, _CUFProfiles[i]->BoolOptions.to_ulong()); // 27 of 32 fields used, fits in an int
|
||||
stmt->setUInt8(8, _CUFProfiles[i]->Unk146);
|
||||
stmt->setUInt8(9, _CUFProfiles[i]->Unk147);
|
||||
stmt->setUInt8(10, _CUFProfiles[i]->Unk148);
|
||||
stmt->setUInt16(11, _CUFProfiles[i]->Unk150);
|
||||
stmt->setUInt16(12, _CUFProfiles[i]->Unk152);
|
||||
stmt->setUInt16(13, _CUFProfiles[i]->Unk154);
|
||||
stmt->setUInt32(7, _CUFProfiles[i]->BoolOptions.to_ulong()); // 25 of 32 fields used, fits in an int
|
||||
stmt->setUInt8(8, _CUFProfiles[i]->TopPoint);
|
||||
stmt->setUInt8(9, _CUFProfiles[i]->BottomPoint);
|
||||
stmt->setUInt8(10, _CUFProfiles[i]->LeftPoint);
|
||||
stmt->setUInt16(11, _CUFProfiles[i]->TopOffset);
|
||||
stmt->setUInt16(12, _CUFProfiles[i]->BottomOffset);
|
||||
stmt->setUInt16(13, _CUFProfiles[i]->LeftOffset);
|
||||
}
|
||||
|
||||
trans->Append(stmt);
|
||||
@@ -20220,7 +20216,7 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent)
|
||||
GetSession()->SendPacket(&data);
|
||||
|
||||
if (GetGroup())
|
||||
SetGroupUpdateFlag(GROUP_UPDATE_PET);
|
||||
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20259,7 +20255,7 @@ void Player::Say(std::string const& text, Language language, WorldObject const*
|
||||
sScriptMgr->OnPlayerChat(this, CHAT_MSG_SAY, language, _text);
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(CHAT_MSG_SAY, language, this, this, _text);
|
||||
packet.Initialize(CHAT_MSG_SAY, language, this, this, _text);
|
||||
SendMessageToSetInRange(packet.Write(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), true);
|
||||
}
|
||||
|
||||
@@ -20269,7 +20265,7 @@ void Player::Yell(std::string const& text, Language language, WorldObject const*
|
||||
sScriptMgr->OnPlayerChat(this, CHAT_MSG_YELL, language, _text);
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(CHAT_MSG_YELL, language, this, this, _text);
|
||||
packet.Initialize(CHAT_MSG_YELL, language, this, this, _text);
|
||||
SendMessageToSetInRange(packet.Write(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), true);
|
||||
}
|
||||
|
||||
@@ -20279,7 +20275,7 @@ void Player::TextEmote(std::string const& text, WorldObject const* /*= nullptr*/
|
||||
sScriptMgr->OnPlayerChat(this, CHAT_MSG_EMOTE, LANG_UNIVERSAL, _text);
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(CHAT_MSG_EMOTE, LANG_UNIVERSAL, this, this, _text);
|
||||
packet.Initialize(CHAT_MSG_EMOTE, LANG_UNIVERSAL, this, this, _text);
|
||||
SendMessageToSetInRange(packet.Write(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true, !GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHAT));
|
||||
}
|
||||
|
||||
@@ -20292,7 +20288,7 @@ void Player::WhisperAddon(std::string const& text, const std::string& prefix, Pl
|
||||
return;
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(CHAT_MSG_WHISPER, LANG_ADDON, this, this, text, 0, "", DEFAULT_LOCALE, prefix);
|
||||
packet.Initialize(CHAT_MSG_WHISPER, LANG_ADDON, this, this, text, 0, "", DEFAULT_LOCALE, prefix);
|
||||
receiver->SendDirectMessage(packet.Write());
|
||||
}
|
||||
|
||||
@@ -20309,14 +20305,14 @@ void Player::Whisper(std::string const& text, Language language, Player* target,
|
||||
sScriptMgr->OnPlayerChat(this, CHAT_MSG_WHISPER, language, _text, target);
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(CHAT_MSG_WHISPER, Language(language), this, this, _text);
|
||||
packet.Initialize(CHAT_MSG_WHISPER, Language(language), this, this, _text);
|
||||
target->SendDirectMessage(packet.Write());
|
||||
|
||||
// rest stuff shouldn't happen in case of addon message
|
||||
if (isAddonMessage)
|
||||
return;
|
||||
|
||||
packet.Initalize(CHAT_MSG_WHISPER_INFORM, Language(language), target, target, _text);
|
||||
packet.Initialize(CHAT_MSG_WHISPER_INFORM, Language(language), target, target, _text);
|
||||
SendDirectMessage(packet.Write());
|
||||
|
||||
if (!isAcceptWhispers() && !IsGameMaster() && !target->IsGameMaster())
|
||||
@@ -22636,9 +22632,8 @@ void Player::SendUpdateToOutOfRangeGroupMembers()
|
||||
group->UpdatePlayerOutOfRange(this);
|
||||
|
||||
m_groupUpdateMask = GROUP_UPDATE_FLAG_NONE;
|
||||
m_auraRaidUpdateMask = 0;
|
||||
if (Pet* pet = GetPet())
|
||||
pet->ResetAuraUpdateMaskForRaid();
|
||||
pet->ResetGroupUpdateFlag();
|
||||
}
|
||||
|
||||
void Player::SendTransferAborted(uint32 mapid, TransferAbortReason reason, uint8 arg)
|
||||
|
||||
@@ -207,8 +207,9 @@ enum CUFBoolOptions
|
||||
CUF_DISPLAY_POWER_BAR,
|
||||
CUF_DISPLAY_BORDER,
|
||||
CUF_USE_CLASS_COLORS,
|
||||
CUF_DISPLAY_NON_BOSS_DEBUFFS,
|
||||
CUF_DISPLAY_HORIZONTAL_GROUPS,
|
||||
CUF_DISPLAY_NON_BOSS_DEBUFFS,
|
||||
CUF_DYNAMIC_POSITION,
|
||||
CUF_LOCKED,
|
||||
CUF_SHOWN,
|
||||
CUF_AUTO_ACTIVATE_2_PLAYERS,
|
||||
@@ -222,9 +223,6 @@ enum CUFBoolOptions
|
||||
CUF_AUTO_ACTIVATE_SPEC_2,
|
||||
CUF_AUTO_ACTIVATE_PVP,
|
||||
CUF_AUTO_ACTIVATE_PVE,
|
||||
CUF_UNK_145,
|
||||
CUF_UNK_156,
|
||||
CUF_UNK_157,
|
||||
|
||||
// The unks is _LOCKED and _SHOWN and _DYNAMIC, unknown order
|
||||
|
||||
@@ -236,32 +234,32 @@ struct CUFProfile
|
||||
{
|
||||
CUFProfile() : ProfileName(), BoolOptions() // might want to change default value for options
|
||||
{
|
||||
FrameHeight = 0;
|
||||
FrameWidth = 0;
|
||||
SortBy = 0;
|
||||
HealthText = 0;
|
||||
Unk146 = 0;
|
||||
Unk147 = 0;
|
||||
Unk148 = 0;
|
||||
Unk150 = 0;
|
||||
Unk152 = 0;
|
||||
Unk154 = 0;
|
||||
FrameHeight = 0;
|
||||
FrameWidth = 0;
|
||||
SortBy = 0;
|
||||
HealthText = 0;
|
||||
TopPoint = 0;
|
||||
BottomPoint = 0;
|
||||
LeftPoint = 0;
|
||||
TopOffset = 0;
|
||||
BottomOffset = 0;
|
||||
LeftOffset = 0;
|
||||
}
|
||||
|
||||
CUFProfile(const std::string& name, uint16 frameHeight, uint16 frameWidth, uint8 sortBy, uint8 healthText, uint32 boolOptions,
|
||||
uint8 unk146, uint8 unk147, uint8 unk148, uint16 unk150, uint16 unk152, uint16 unk154)
|
||||
uint8 topPoint, uint8 bottomPoint, uint8 leftPoint, uint16 topOffset, uint16 bottomOffset, uint16 leftOffset)
|
||||
: ProfileName(name), BoolOptions((int)boolOptions)
|
||||
{
|
||||
FrameHeight = frameHeight;
|
||||
FrameWidth = frameWidth;
|
||||
SortBy = sortBy;
|
||||
HealthText = healthText;
|
||||
Unk146 = unk146;
|
||||
Unk147 = unk147;
|
||||
Unk148 = unk148;
|
||||
Unk150 = unk150;
|
||||
Unk152 = unk152;
|
||||
Unk154 = unk154;
|
||||
FrameHeight = frameHeight;
|
||||
FrameWidth = frameWidth;
|
||||
SortBy = sortBy;
|
||||
HealthText = healthText;
|
||||
TopPoint = topPoint;
|
||||
BottomPoint = bottomPoint;
|
||||
LeftPoint = leftPoint;
|
||||
TopOffset = topOffset;
|
||||
BottomOffset = bottomOffset;
|
||||
LeftOffset = leftOffset;
|
||||
}
|
||||
|
||||
std::string ProfileName;
|
||||
@@ -270,15 +268,15 @@ struct CUFProfile
|
||||
uint8 SortBy;
|
||||
uint8 HealthText;
|
||||
|
||||
// LeftAlign, TopAlight, BottomAllign (unk order)
|
||||
uint8 Unk146;
|
||||
uint8 Unk147;
|
||||
uint8 Unk148;
|
||||
// LeftAlign, TopAlight, BottomAlign
|
||||
uint8 TopPoint;
|
||||
uint8 BottomPoint;
|
||||
uint8 LeftPoint;
|
||||
|
||||
// LeftOffset, TopOffset and BottomOffset (unk order)
|
||||
uint16 Unk150;
|
||||
uint16 Unk152;
|
||||
uint16 Unk154;
|
||||
// LeftOffset, TopOffset and BottomOffset
|
||||
uint16 TopOffset;
|
||||
uint16 BottomOffset;
|
||||
uint16 LeftOffset;
|
||||
|
||||
std::bitset<CUF_BOOL_OPTIONS_COUNT> BoolOptions;
|
||||
|
||||
@@ -1737,8 +1735,9 @@ class Player : public Unit, public GridObject<Player>
|
||||
void AddTimedQuest(uint32 questId) { m_timedquests.insert(questId); }
|
||||
void RemoveTimedQuest(uint32 questId) { m_timedquests.erase(questId); }
|
||||
|
||||
void SaveCUFProfile(uint8 id, CUFProfile* profile) { delete _CUFProfiles[id]; _CUFProfiles[id] = profile; } ///> Replaces a CUF profile at position 0-4
|
||||
CUFProfile* GetCUFProfile(uint8 id) const { return _CUFProfiles[id]; } ///> Retrieves a CUF profile at position 0-4
|
||||
void SaveCUFProfile(uint8 id, std::nullptr_t) { _CUFProfiles[id] = nullptr; } ///> Empties a CUF profile at position 0-4
|
||||
void SaveCUFProfile(uint8 id, std::unique_ptr<CUFProfile> profile) { _CUFProfiles[id] = std::move(profile); } ///> Replaces a CUF profile at position 0-4
|
||||
CUFProfile* GetCUFProfile(uint8 id) const { return _CUFProfiles[id].get(); } ///> Retrieves a CUF profile at position 0-4
|
||||
uint8 GetCUFProfilesCount() const
|
||||
{
|
||||
uint8 count = 0;
|
||||
@@ -2522,8 +2521,7 @@ class Player : public Unit, public GridObject<Player>
|
||||
uint8 GetSubGroup() const { return m_group.getSubGroup(); }
|
||||
uint32 GetGroupUpdateFlag() const { return m_groupUpdateMask; }
|
||||
void SetGroupUpdateFlag(uint32 flag) { m_groupUpdateMask |= flag; }
|
||||
uint64 GetAuraUpdateMaskForRaid() const { return m_auraRaidUpdateMask; }
|
||||
void SetAuraUpdateMaskForRaid(uint8 slot) { m_auraRaidUpdateMask |= (uint64(1) << slot); }
|
||||
void RemoveGroupUpdateFlag(uint32 flag) { m_groupUpdateMask &= ~flag; }
|
||||
Player* GetNextRandomRaidMember(float radius);
|
||||
PartyResult CanUninviteFromGroup(ObjectGuid guidMember = ObjectGuid::Empty) const;
|
||||
|
||||
@@ -2889,7 +2887,6 @@ class Player : public Unit, public GridObject<Player>
|
||||
GroupReference m_originalGroup;
|
||||
Group* m_groupInvite;
|
||||
uint32 m_groupUpdateMask;
|
||||
uint64 m_auraRaidUpdateMask;
|
||||
bool m_bPassOnGroupLoot;
|
||||
|
||||
// last used pet number (for BG's)
|
||||
@@ -2912,7 +2909,7 @@ class Player : public Unit, public GridObject<Player>
|
||||
|
||||
uint8 m_grantableLevels;
|
||||
|
||||
CUFProfile* _CUFProfiles[MAX_CUF_PROFILES];
|
||||
std::array<std::unique_ptr<CUFProfile>, MAX_CUF_PROFILES> _CUFProfiles = {};
|
||||
|
||||
private:
|
||||
// internal common parts for CanStore/StoreItem functions
|
||||
|
||||
@@ -6957,15 +6957,11 @@ void Unit::setPowerType(Powers new_powertype)
|
||||
if (ToPlayer()->GetGroup())
|
||||
ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POWER_TYPE);
|
||||
}
|
||||
else if (Pet* pet = ToCreature()->ToPet())
|
||||
/*else if (Pet* pet = ToCreature()->ToPet()) TODO 6.x
|
||||
{
|
||||
if (pet->isControlled())
|
||||
{
|
||||
Unit* owner = GetOwner();
|
||||
if (owner && (owner->GetTypeId() == TYPEID_PLAYER) && owner->ToPlayer()->GetGroup())
|
||||
owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_POWER_TYPE);
|
||||
}
|
||||
}
|
||||
pet->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_POWER_TYPE);
|
||||
}*/
|
||||
|
||||
float powerMultiplier = 1.0f;
|
||||
if (!IsPet())
|
||||
@@ -11470,11 +11466,7 @@ void Unit::SetHealth(uint32 val)
|
||||
else if (Pet* pet = ToCreature()->ToPet())
|
||||
{
|
||||
if (pet->isControlled())
|
||||
{
|
||||
Unit* owner = GetOwner();
|
||||
if (owner && (owner->GetTypeId() == TYPEID_PLAYER) && owner->ToPlayer()->GetGroup())
|
||||
owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_CUR_HP);
|
||||
}
|
||||
pet->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_CUR_HP);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11495,11 +11487,7 @@ void Unit::SetMaxHealth(uint32 val)
|
||||
else if (Pet* pet = ToCreature()->ToPet())
|
||||
{
|
||||
if (pet->isControlled())
|
||||
{
|
||||
Unit* owner = GetOwner();
|
||||
if (owner && (owner->GetTypeId() == TYPEID_PLAYER) && owner->ToPlayer()->GetGroup())
|
||||
owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MAX_HP);
|
||||
}
|
||||
pet->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MAX_HP);
|
||||
}
|
||||
|
||||
if (val < health)
|
||||
@@ -11551,15 +11539,11 @@ void Unit::SetPower(Powers power, int32 val)
|
||||
if (player->GetGroup())
|
||||
player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_CUR_POWER);
|
||||
}
|
||||
else if (Pet* pet = ToCreature()->ToPet())
|
||||
/*else if (Pet* pet = ToCreature()->ToPet()) TODO 6.x
|
||||
{
|
||||
if (pet->isControlled())
|
||||
{
|
||||
Unit* owner = GetOwner();
|
||||
if (owner && (owner->GetTypeId() == TYPEID_PLAYER) && owner->ToPlayer()->GetGroup())
|
||||
owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_CUR_POWER);
|
||||
}
|
||||
}
|
||||
pet->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_CUR_POWER);
|
||||
}*/
|
||||
}
|
||||
|
||||
void Unit::SetMaxPower(Powers power, int32 val)
|
||||
@@ -11577,15 +11561,11 @@ void Unit::SetMaxPower(Powers power, int32 val)
|
||||
if (ToPlayer()->GetGroup())
|
||||
ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_MAX_POWER);
|
||||
}
|
||||
else if (Pet* pet = ToCreature()->ToPet())
|
||||
/*else if (Pet* pet = ToCreature()->ToPet()) TODO 6.x
|
||||
{
|
||||
if (pet->isControlled())
|
||||
{
|
||||
Unit* owner = GetOwner();
|
||||
if (owner && (owner->GetTypeId() == TYPEID_PLAYER) && owner->ToPlayer()->GetGroup())
|
||||
owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MAX_POWER);
|
||||
}
|
||||
}
|
||||
pet->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MAX_POWER);
|
||||
}*/
|
||||
|
||||
if (val < cur_power)
|
||||
SetPower(power, val);
|
||||
@@ -13007,23 +12987,13 @@ void Unit::UpdateAuraForGroup(uint8 slot)
|
||||
if (Player* player = ToPlayer())
|
||||
{
|
||||
if (player->GetGroup())
|
||||
{
|
||||
player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_AURAS);
|
||||
player->SetAuraUpdateMaskForRaid(slot);
|
||||
}
|
||||
}
|
||||
else if (GetTypeId() == TYPEID_UNIT && ToCreature()->IsPet())
|
||||
{
|
||||
Pet* pet = ((Pet*)this);
|
||||
if (pet->isControlled())
|
||||
{
|
||||
Unit* owner = GetOwner();
|
||||
if (owner && (owner->GetTypeId() == TYPEID_PLAYER) && owner->ToPlayer()->GetGroup())
|
||||
{
|
||||
owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_AURAS);
|
||||
pet->SetAuraUpdateMaskForRaid(slot);
|
||||
}
|
||||
}
|
||||
pet->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_AURAS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16401,7 +16371,7 @@ void Unit::Whisper(std::string const& text, Language language, Player* target, b
|
||||
|
||||
LocaleConstant locale = target->GetSession()->GetSessionDbLocaleIndex();
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, language, this, target, text, 0, "", locale);
|
||||
packet.Initialize(isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, language, this, target, text, 0, "", locale);
|
||||
target->SendDirectMessage(packet.Write());
|
||||
}
|
||||
|
||||
@@ -16448,7 +16418,7 @@ void Unit::Whisper(uint32 textId, Player* target, bool isBossWhisper /*= false*/
|
||||
|
||||
LocaleConstant locale = target->GetSession()->GetSessionDbLocaleIndex();
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, LANG_UNIVERSAL, this, target, DB2Manager::GetBroadcastTextValue(bct, locale, getGender()), 0, "", locale);
|
||||
packet.Initialize(isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, LANG_UNIVERSAL, this, target, DB2Manager::GetBroadcastTextValue(bct, locale, getGender()), 0, "", locale);
|
||||
target->SendDirectMessage(packet.Write());
|
||||
}
|
||||
|
||||
|
||||
@@ -2242,6 +2242,25 @@ bool ObjectMgr::GetPlayerNameByGUID(ObjectGuid const& guid, std::string& name)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ObjectMgr::GetPlayerNameAndClassByGUID(ObjectGuid const& guid, std::string& name, uint8& _class)
|
||||
{
|
||||
if (Player* player = ObjectAccessor::FindConnectedPlayer(guid))
|
||||
{
|
||||
name = player->GetName();
|
||||
_class = player->getClass();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid))
|
||||
{
|
||||
name = characterInfo->Name;
|
||||
_class = characterInfo->Class;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32 ObjectMgr::GetPlayerTeamByGUID(ObjectGuid const& guid)
|
||||
{
|
||||
if (Player* player = ObjectAccessor::FindConnectedPlayer(guid))
|
||||
|
||||
@@ -780,6 +780,7 @@ class ObjectMgr
|
||||
* @return true if player was found, false otherwise
|
||||
*/
|
||||
static bool GetPlayerNameByGUID(ObjectGuid const& guid, std::string& name);
|
||||
static bool GetPlayerNameAndClassByGUID(ObjectGuid const& guid, std::string& name, uint8& _class);
|
||||
static uint32 GetPlayerTeamByGUID(ObjectGuid const& guid);
|
||||
static uint32 GetPlayerAccountIdByGUID(ObjectGuid const& guid);
|
||||
static uint32 GetPlayerAccountIdByPlayerName(std::string const& name);
|
||||
@@ -1364,7 +1365,7 @@ class ObjectMgr
|
||||
{
|
||||
auto itr = _guidGenerators.find(high);
|
||||
if (itr == _guidGenerators.end())
|
||||
itr = _guidGenerators.insert(std::make_pair(high, std::unique_ptr<ObjectGuidGenerator<high>>(new ObjectGuidGenerator<high>()))).first;
|
||||
itr = _guidGenerators.insert(std::make_pair(high, Trinity::make_unique<ObjectGuidGenerator<high>>())).first;
|
||||
|
||||
return *itr->second;
|
||||
}
|
||||
|
||||
+333
-122
@@ -21,6 +21,7 @@
|
||||
#include "WorldPacket.h"
|
||||
#include "WorldSession.h"
|
||||
#include "Player.h"
|
||||
#include "Pet.h"
|
||||
#include "World.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "GroupMgr.h"
|
||||
@@ -35,6 +36,7 @@
|
||||
#include "Util.h"
|
||||
#include "LFGMgr.h"
|
||||
#include "UpdateFieldFlags.h"
|
||||
#include "PartyPackets.h"
|
||||
|
||||
Roll::Roll(ObjectGuid _guid, LootItem const& li) : itemGUID(_guid), itemid(li.itemid),
|
||||
itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count),
|
||||
@@ -55,11 +57,15 @@ Loot* Roll::getLoot()
|
||||
|
||||
Group::Group() : m_leaderGuid(), m_leaderName(""), m_groupType(GROUPTYPE_NORMAL),
|
||||
m_dungeonDifficulty(DIFFICULTY_NORMAL), m_raidDifficulty(DIFFICULTY_NORMAL_RAID), m_legacyRaidDifficulty(DIFFICULTY_10_N),
|
||||
m_bgGroup(NULL), m_bfGroup(NULL), m_lootMethod(FREE_FOR_ALL), m_lootThreshold(ITEM_QUALITY_UNCOMMON), m_looterGuid(),
|
||||
m_masterLooterGuid(), m_subGroupsCounts(NULL), m_guid(), m_counter(0), m_maxEnchantingLevel(0), m_dbStoreId(0)
|
||||
m_bgGroup(nullptr), m_bfGroup(nullptr), m_lootMethod(FREE_FOR_ALL), m_lootThreshold(ITEM_QUALITY_UNCOMMON), m_looterGuid(),
|
||||
m_masterLooterGuid(), m_subGroupsCounts(nullptr), m_guid(), m_counter(0), m_maxEnchantingLevel(0), m_dbStoreId(0),
|
||||
m_readyCheckStarted(false), m_readyCheckTimer(0), m_activeMarkers(0)
|
||||
{
|
||||
for (uint8 i = 0; i < TARGETICONCOUNT; ++i)
|
||||
for (uint8 i = 0; i < TARGET_ICONS_COUNT; ++i)
|
||||
m_targetIcons[i].Clear();
|
||||
|
||||
for (uint8 i = 0; i < RAID_MARKERS_COUNT; ++i)
|
||||
m_markers[i] = nullptr;
|
||||
}
|
||||
|
||||
Group::~Group()
|
||||
@@ -176,7 +182,7 @@ void Group::LoadGroupFromDB(Field* fields)
|
||||
m_looterGuid = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt64());
|
||||
m_lootThreshold = ItemQualities(fields[3].GetUInt8());
|
||||
|
||||
for (uint8 i = 0; i < TARGETICONCOUNT; ++i)
|
||||
for (uint8 i = 0; i < TARGET_ICONS_COUNT; ++i)
|
||||
m_targetIcons[i].SetRawValue(fields[4 + i].GetBinary());
|
||||
|
||||
m_groupType = GroupType(fields[12].GetUInt8());
|
||||
@@ -199,7 +205,7 @@ void Group::LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uin
|
||||
member.guid = ObjectGuid::Create<HighGuid::Player>(guidLow);
|
||||
|
||||
// skip non-existed member
|
||||
if (!ObjectMgr::GetPlayerNameByGUID(member.guid, member.name))
|
||||
if (!ObjectMgr::GetPlayerNameAndClassByGUID(member.guid, member.name, member._class))
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_MEMBER);
|
||||
stmt->setUInt64(0, guidLow);
|
||||
@@ -207,9 +213,10 @@ void Group::LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uin
|
||||
return;
|
||||
}
|
||||
|
||||
member.group = subgroup;
|
||||
member.flags = memberFlags;
|
||||
member.roles = roles;
|
||||
member.group = subgroup;
|
||||
member.flags = memberFlags;
|
||||
member.roles = roles;
|
||||
member.readyChecked = false;
|
||||
|
||||
m_memberSlots.push_back(member);
|
||||
|
||||
@@ -368,7 +375,7 @@ bool Group::AddMember(Player* player)
|
||||
bool groupFound = false;
|
||||
for (; subGroup < MAX_RAID_SUBGROUPS; ++subGroup)
|
||||
{
|
||||
if (m_subGroupsCounts[subGroup] < MAXGROUPSIZE)
|
||||
if (m_subGroupsCounts[subGroup] < MAX_GROUP_SIZE)
|
||||
{
|
||||
groupFound = true;
|
||||
break;
|
||||
@@ -380,11 +387,13 @@ bool Group::AddMember(Player* player)
|
||||
}
|
||||
|
||||
MemberSlot member;
|
||||
member.guid = player->GetGUID();
|
||||
member.name = player->GetName();
|
||||
member.group = subGroup;
|
||||
member.flags = 0;
|
||||
member.roles = 0;
|
||||
member.guid = player->GetGUID();
|
||||
member.name = player->GetName();
|
||||
member._class = player->getClass();
|
||||
member.group = subGroup;
|
||||
member.flags = 0;
|
||||
member.roles = 0;
|
||||
member.readyChecked = false;
|
||||
m_memberSlots.push_back(member);
|
||||
|
||||
SubGroupCounterIncrease(subGroup);
|
||||
@@ -407,7 +416,7 @@ bool Group::AddMember(Player* player)
|
||||
|
||||
if (!isRaidGroup()) // reset targetIcons for non-raid-groups
|
||||
{
|
||||
for (uint8 i = 0; i < TARGETICONCOUNT; ++i)
|
||||
for (uint8 i = 0; i < TARGET_ICONS_COUNT; ++i)
|
||||
m_targetIcons[i].Clear();
|
||||
}
|
||||
|
||||
@@ -455,7 +464,11 @@ bool Group::AddMember(Player* player)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
player->SetGroupUpdateFlag(GROUP_UPDATE_FULL);
|
||||
if (Pet* pet = player->GetPet())
|
||||
pet->SetGroupUpdateFlag(GROUP_UPDATE_PET_FULL);
|
||||
|
||||
UpdatePlayerOutOfRange(player);
|
||||
|
||||
// quest related GO state dependent from raid membership
|
||||
@@ -552,12 +565,6 @@ bool Group::RemoveMember(ObjectGuid guid, const RemoveMethod& method /*= GROUP_R
|
||||
player->GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
||||
// Do we really need to send this opcode?
|
||||
data.Initialize(SMSG_PARTY_UPDATE, 1+1+1+1+8+4+4+8);
|
||||
data << uint8(0x10) << uint8(0) << uint8(0) << uint8(0);
|
||||
data << m_guid << uint32(m_counter) << uint32(0) << uint64(0);
|
||||
player->GetSession()->SendPacket(&data);
|
||||
|
||||
_homebindIfInstance(player);
|
||||
}
|
||||
|
||||
@@ -644,7 +651,7 @@ bool Group::RemoveMember(ObjectGuid guid, const RemoveMethod& method /*= GROUP_R
|
||||
}
|
||||
}
|
||||
|
||||
void Group::ChangeLeader(ObjectGuid newLeaderGuid)
|
||||
void Group::ChangeLeader(ObjectGuid newLeaderGuid, int8 partyIndex)
|
||||
{
|
||||
member_witerator slot = _getMemberWSlot(newLeaderGuid);
|
||||
|
||||
@@ -707,9 +714,10 @@ void Group::ChangeLeader(ObjectGuid newLeaderGuid)
|
||||
m_leaderName = newLeader->GetName();
|
||||
ToggleGroupMemberFlag(slot, MEMBER_FLAG_ASSISTANT, false);
|
||||
|
||||
WorldPacket data(SMSG_GROUP_NEW_LEADER, m_leaderName.size()+1);
|
||||
data << slot->name;
|
||||
BroadcastPacket(&data, true);
|
||||
WorldPackets::Party::GroupNewLeader groupNewLeader;
|
||||
groupNewLeader.Name = m_leaderName;
|
||||
groupNewLeader.PartyIndex = partyIndex;
|
||||
BroadcastPacket(groupNewLeader.Write(), true);
|
||||
}
|
||||
|
||||
void Group::Disband(bool hideDestroy /* = false */)
|
||||
@@ -1491,45 +1499,38 @@ void Group::CountTheRoll(Rolls::iterator rollI)
|
||||
delete roll;
|
||||
}
|
||||
|
||||
void Group::SetTargetIcon(uint8 id, ObjectGuid whoGuid, ObjectGuid targetGuid)
|
||||
void Group::SetTargetIcon(uint8 symbol, ObjectGuid target, ObjectGuid changedBy, uint8 partyIndex)
|
||||
{
|
||||
if (id >= TARGETICONCOUNT)
|
||||
if (symbol >= TARGET_ICONS_COUNT)
|
||||
return;
|
||||
|
||||
// clean other icons
|
||||
if (!targetGuid.IsEmpty())
|
||||
for (int i = 0; i < TARGETICONCOUNT; ++i)
|
||||
if (m_targetIcons[i] == targetGuid)
|
||||
SetTargetIcon(i, ObjectGuid::Empty, ObjectGuid::Empty);
|
||||
if (!target.IsEmpty())
|
||||
for (uint8 i = 0; i < TARGET_ICONS_COUNT; ++i)
|
||||
if (m_targetIcons[i] == target)
|
||||
SetTargetIcon(i, ObjectGuid::Empty, changedBy, partyIndex);
|
||||
|
||||
m_targetIcons[id] = targetGuid;
|
||||
m_targetIcons[symbol] = target;
|
||||
|
||||
WorldPacket data(SMSG_SEND_RAID_TARGET_UPDATE_SINGLE, (1+8+1+8));
|
||||
data << uint8(0); // set targets
|
||||
data << whoGuid;
|
||||
data << uint8(id);
|
||||
data << targetGuid;
|
||||
BroadcastPacket(&data, true);
|
||||
WorldPackets::Party::SendRaidTargetUpdateSingle updateSingle;
|
||||
updateSingle.PartyIndex = partyIndex;
|
||||
updateSingle.Target = target;
|
||||
updateSingle.ChangedBy = changedBy;
|
||||
updateSingle.Symbol = symbol;
|
||||
BroadcastPacket(updateSingle.Write(), true);
|
||||
}
|
||||
|
||||
void Group::SendTargetIconList(WorldSession* session)
|
||||
void Group::SendTargetIconList(WorldSession* session, int8 partyIndex)
|
||||
{
|
||||
if (!session)
|
||||
return;
|
||||
|
||||
WorldPacket data(SMSG_SEND_RAID_TARGET_UPDATE_ALL, (1+TARGETICONCOUNT*9));
|
||||
data << uint8(1); // list targets
|
||||
WorldPackets::Party::SendRaidTargetUpdateAll updateAll;
|
||||
updateAll.PartyIndex = partyIndex;
|
||||
for (uint8 i = 0; i < TARGET_ICONS_COUNT; i++)
|
||||
updateAll.TargetIcons.insert(std::pair<uint8, ObjectGuid>(i, m_targetIcons[i]));
|
||||
|
||||
for (uint8 i = 0; i < TARGETICONCOUNT; ++i)
|
||||
{
|
||||
if (m_targetIcons[i].IsEmpty())
|
||||
continue;
|
||||
|
||||
data << uint8(i);
|
||||
data << m_targetIcons[i];
|
||||
}
|
||||
|
||||
session->SendPacket(&data);
|
||||
session->SendPacket(updateAll.Write());
|
||||
}
|
||||
|
||||
void Group::SendUpdate()
|
||||
@@ -1556,56 +1557,79 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot)
|
||||
slot = &(*witr);
|
||||
}
|
||||
|
||||
WorldPacket data(SMSG_PARTY_UPDATE, (1+1+1+1+1+4+8+4+4+(GetMembersCount()-1)*(13+8+1+1+1+1)+8+1+8+1+1+1+1));
|
||||
data << uint8(m_groupType); // group type (flags in 3.3)
|
||||
data << uint8(slot->group);
|
||||
data << uint8(slot->flags);
|
||||
data << uint8(slot->roles);
|
||||
if (isLFGGroup())
|
||||
{
|
||||
data << uint8(sLFGMgr->GetState(m_guid) == lfg::LFG_STATE_FINISHED_DUNGEON ? 2 : 0); // FIXME - Dungeon save status? 2 = done
|
||||
data << uint32(sLFGMgr->GetDungeon(m_guid));
|
||||
data << uint8(0); // 4.x new
|
||||
}
|
||||
WorldPackets::Party::PartyUpdate partyUpdate;
|
||||
|
||||
data << m_guid;
|
||||
data << uint32(m_counter++); // 3.3, value increases every time this packet gets sent
|
||||
data << uint32(GetMembersCount()-1);
|
||||
for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr)
|
||||
partyUpdate.PartyType = m_groupType;
|
||||
partyUpdate.PartyIndex = 0;
|
||||
partyUpdate.PartyFlags = uint8(IsCreated());
|
||||
|
||||
partyUpdate.PartyGUID = m_guid;
|
||||
partyUpdate.LeaderGUID = m_leaderGuid;
|
||||
|
||||
partyUpdate.SequenceNum = m_counter++; // 3.3, value increases every time this packet gets sent
|
||||
|
||||
partyUpdate.MyIndex = -1;
|
||||
uint8 index = 0;
|
||||
for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr, ++index)
|
||||
{
|
||||
if (slot->guid == citr->guid)
|
||||
continue;
|
||||
partyUpdate.MyIndex = index;
|
||||
|
||||
Player* member = ObjectAccessor::FindConnectedPlayer(citr->guid);
|
||||
|
||||
uint8 onlineState = (member && !member->GetSession()->PlayerLogout()) ? MEMBER_STATUS_ONLINE : MEMBER_STATUS_OFFLINE;
|
||||
onlineState = onlineState | ((isBGGroup() || isBFGroup()) ? MEMBER_STATUS_PVP : 0);
|
||||
WorldPackets::Party::GroupPlayerInfos playerInfos;
|
||||
|
||||
data << citr->name;
|
||||
data << citr->guid; // guid
|
||||
data << uint8(onlineState); // online-state
|
||||
data << uint8(citr->group); // groupid
|
||||
data << uint8(citr->flags); // See enum GroupMemberFlags
|
||||
data << uint8(citr->roles); // Lfg Roles
|
||||
playerInfos.GUID = citr->guid;
|
||||
playerInfos.Name = citr->name;
|
||||
playerInfos.Class = citr->_class;
|
||||
|
||||
playerInfos.Status = MEMBER_STATUS_OFFLINE;
|
||||
if (member && member->GetSession() && !member->GetSession()->PlayerLogout())
|
||||
playerInfos.Status = MEMBER_STATUS_ONLINE | (isBGGroup() || isBFGroup() ? MEMBER_STATUS_PVP : 0);
|
||||
|
||||
playerInfos.Subgroup = citr->group; // groupid
|
||||
playerInfos.Flags = citr->flags; // See enum GroupMemberFlags
|
||||
playerInfos.RolesAssigned = citr->roles; // Lfg Roles
|
||||
|
||||
partyUpdate.PlayerList.push_back(playerInfos);
|
||||
}
|
||||
|
||||
data << m_leaderGuid; // leader guid
|
||||
|
||||
if (GetMembersCount() - 1)
|
||||
if (GetMembersCount() > 1)
|
||||
{
|
||||
data << uint8(m_lootMethod); // loot method
|
||||
// LootSettings
|
||||
partyUpdate.LootSettings = boost::in_place();
|
||||
partyUpdate.LootSettings->Method = m_lootMethod;
|
||||
partyUpdate.LootSettings->Threshold = m_lootThreshold;
|
||||
partyUpdate.LootSettings->LootMaster = m_lootMethod == MASTER_LOOT ? m_masterLooterGuid : ObjectGuid::Empty;
|
||||
|
||||
if (m_lootMethod == MASTER_LOOT)
|
||||
data << m_masterLooterGuid; // master looter guid
|
||||
else
|
||||
data << uint64(0);
|
||||
|
||||
data << uint8(m_lootThreshold); // loot threshold
|
||||
data << uint8(m_dungeonDifficulty); // Dungeon Difficulty
|
||||
data << uint8(m_raidDifficulty); // Raid Difficulty
|
||||
// Difficulty Settings
|
||||
partyUpdate.DifficultySettings = boost::in_place();
|
||||
partyUpdate.DifficultySettings->DungeonDifficultyID = m_dungeonDifficulty;
|
||||
partyUpdate.DifficultySettings->RaidDifficultyID = m_raidDifficulty;
|
||||
partyUpdate.DifficultySettings->LegacyRaidDifficultyID = m_legacyRaidDifficulty;
|
||||
}
|
||||
|
||||
player->GetSession()->SendPacket(&data);
|
||||
// LfgInfos
|
||||
if (isLFGGroup())
|
||||
{
|
||||
partyUpdate.LfgInfos = boost::in_place();
|
||||
|
||||
partyUpdate.LfgInfos->Slot = sLFGMgr->GetDungeon(m_guid);
|
||||
partyUpdate.LfgInfos->BootCount = 0; // new 6.x
|
||||
partyUpdate.LfgInfos->Aborted = false; // new 6.x
|
||||
|
||||
partyUpdate.LfgInfos->MyFlags = 0; // new 6.x
|
||||
partyUpdate.LfgInfos->MyRandomSlot = 0; // new 6.x
|
||||
|
||||
partyUpdate.LfgInfos->MyPartialClear = sLFGMgr->GetState(m_guid) == lfg::LFG_STATE_FINISHED_DUNGEON ? 2 : 0; // FIXME - Dungeon save status? 2 = done
|
||||
partyUpdate.LfgInfos->MyGearDiff = 0.f; // new 6.x
|
||||
partyUpdate.LfgInfos->MyFirstReward = false; // new 6.x
|
||||
|
||||
partyUpdate.LfgInfos->MyStrangerCount = 0; // new 6.x
|
||||
partyUpdate.LfgInfos->MyKickVoteCount = 0; // new 6.x
|
||||
}
|
||||
|
||||
player->GetSession()->SendPacket(partyUpdate.Write());
|
||||
}
|
||||
|
||||
void Group::UpdatePlayerOutOfRange(Player* player)
|
||||
@@ -1613,15 +1637,15 @@ void Group::UpdatePlayerOutOfRange(Player* player)
|
||||
if (!player || !player->IsInWorld())
|
||||
return;
|
||||
|
||||
WorldPacket data;
|
||||
player->GetSession()->BuildPartyMemberStatsChangedPacket(player, &data);
|
||||
WorldPackets::Party::PartyMemberStats packet;
|
||||
packet.Initialize(player);
|
||||
|
||||
Player* member;
|
||||
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
{
|
||||
member = itr->GetSource();
|
||||
if (member && member != player && (!member->IsInMap(player) || !member->IsWithinDist(player, member->GetSightRange(), false)))
|
||||
member->GetSession()->SendPacket(&data);
|
||||
member->GetSession()->SendPacket(packet.Write());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1653,32 +1677,6 @@ void Group::BroadcastPacket(WorldPacket const* packet, bool ignorePlayersInBGRai
|
||||
}
|
||||
}
|
||||
|
||||
void Group::BroadcastReadyCheck(WorldPacket const* packet)
|
||||
{
|
||||
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
{
|
||||
Player* player = itr->GetSource();
|
||||
if (player && player->GetSession())
|
||||
if (IsLeader(player->GetGUID()) || IsAssistant(player->GetGUID()))
|
||||
player->GetSession()->SendPacket(packet);
|
||||
}
|
||||
}
|
||||
|
||||
void Group::OfflineReadyCheck()
|
||||
{
|
||||
for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr)
|
||||
{
|
||||
Player* player = ObjectAccessor::FindConnectedPlayer(citr->guid);
|
||||
if (!player || !player->GetSession())
|
||||
{
|
||||
WorldPacket data(SMSG_READY_CHECK_RESPONSE, 9);
|
||||
data << citr->guid;
|
||||
data << uint8(0);
|
||||
BroadcastReadyCheck(&data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Group::_setMembersGroup(ObjectGuid guid, uint8 group)
|
||||
{
|
||||
member_witerator slot = _getMemberWSlot(guid);
|
||||
@@ -1725,8 +1723,8 @@ void Group::ChangeMembersGroup(ObjectGuid guid, uint8 group)
|
||||
if (slot == m_memberSlots.end())
|
||||
return;
|
||||
|
||||
uint8 prevSubGroup = slot->group;
|
||||
// Abort if the player is already in the target sub group
|
||||
uint8 prevSubGroup = GetMemberGroup(guid);
|
||||
if (prevSubGroup == group)
|
||||
return;
|
||||
|
||||
@@ -1758,7 +1756,6 @@ void Group::ChangeMembersGroup(ObjectGuid guid, uint8 group)
|
||||
else
|
||||
{
|
||||
// If player is in BG raid, it is possible that he is also in normal raid - and that normal raid is stored in m_originalGroup reference
|
||||
prevSubGroup = player->GetOriginalSubGroup();
|
||||
player->GetOriginalGroupRef().setSubGroup(group);
|
||||
}
|
||||
}
|
||||
@@ -1767,6 +1764,51 @@ void Group::ChangeMembersGroup(ObjectGuid guid, uint8 group)
|
||||
SendUpdate();
|
||||
}
|
||||
|
||||
void Group::SwapMembersGroups(ObjectGuid firstGuid, ObjectGuid secondGuid)
|
||||
{
|
||||
if (!isRaidGroup())
|
||||
return;
|
||||
|
||||
member_witerator slots[2];
|
||||
slots[0] = _getMemberWSlot(firstGuid);
|
||||
slots[1] = _getMemberWSlot(secondGuid);
|
||||
if (slots[0] == m_memberSlots.end() || slots[1] == m_memberSlots.end())
|
||||
return;
|
||||
|
||||
if (slots[0]->group == slots[1]->group)
|
||||
return;
|
||||
|
||||
uint8 tmp = slots[0]->group;
|
||||
slots[0]->group = slots[1]->group;
|
||||
slots[1]->group = tmp;
|
||||
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
for (uint8 i = 0; i < 2; i++)
|
||||
{
|
||||
// Preserve new sub group in database for non-raid groups
|
||||
if (!isBGGroup() && !isBFGroup())
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_MEMBER_SUBGROUP);
|
||||
|
||||
stmt->setUInt8(0, slots[i]->group);
|
||||
stmt->setUInt64(1, slots[i]->guid.GetCounter());
|
||||
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
if (Player* player = ObjectAccessor::FindConnectedPlayer(slots[i]->guid))
|
||||
{
|
||||
if (player->GetGroup() == this)
|
||||
player->GetGroupRef().setSubGroup(slots[i]->group);
|
||||
else
|
||||
player->GetOriginalGroupRef().setSubGroup(slots[i]->group);
|
||||
}
|
||||
}
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
SendUpdate();
|
||||
}
|
||||
|
||||
// Retrieve the next Round-Roubin player for the group
|
||||
//
|
||||
// No update done if loot method is FFA.
|
||||
@@ -2262,9 +2304,167 @@ void Group::SetLfgRoles(ObjectGuid guid, uint8 roles)
|
||||
SendUpdate();
|
||||
}
|
||||
|
||||
uint8 Group::GetLfgRoles(ObjectGuid guid)
|
||||
{
|
||||
member_witerator slot = _getMemberWSlot(guid);
|
||||
if (slot == m_memberSlots.end())
|
||||
return 0;
|
||||
|
||||
return slot->roles;
|
||||
}
|
||||
|
||||
void Group::Update(uint32 diff)
|
||||
{
|
||||
UpdateReadyCheck(diff);
|
||||
}
|
||||
|
||||
void Group::UpdateReadyCheck(uint32 diff)
|
||||
{
|
||||
if (!m_readyCheckStarted)
|
||||
return;
|
||||
|
||||
m_readyCheckTimer -= diff;
|
||||
if (m_readyCheckTimer <= 0)
|
||||
EndReadyCheck();
|
||||
}
|
||||
|
||||
void Group::StartReadyCheck(ObjectGuid starterGuid, int8 partyIndex, uint32 duration)
|
||||
{
|
||||
if (m_readyCheckStarted)
|
||||
return;
|
||||
|
||||
member_witerator slot = _getMemberWSlot(starterGuid);
|
||||
if (slot == m_memberSlots.end())
|
||||
return ;
|
||||
|
||||
m_readyCheckStarted = true;
|
||||
m_readyCheckTimer = duration;
|
||||
|
||||
SetOfflineMembersReadyChecked();
|
||||
|
||||
SetMemberReadyChecked(&(*slot));
|
||||
|
||||
WorldPackets::Party::ReadyCheckStarted readyCheckStarted;
|
||||
readyCheckStarted.PartyGUID = m_guid;
|
||||
readyCheckStarted.PartyIndex = partyIndex;
|
||||
readyCheckStarted.InitiatorGUID = starterGuid;
|
||||
readyCheckStarted.Duration = duration;
|
||||
BroadcastPacket(readyCheckStarted.Write(), false);
|
||||
}
|
||||
|
||||
void Group::EndReadyCheck(void)
|
||||
{
|
||||
if (!m_readyCheckStarted)
|
||||
return;
|
||||
|
||||
m_readyCheckStarted = false;
|
||||
m_readyCheckTimer = 0;
|
||||
|
||||
ResetMemberReadyChecked();
|
||||
|
||||
WorldPackets::Party::ReadyCheckCompleted readyCheckCompleted;
|
||||
readyCheckCompleted.PartyIndex = 0;
|
||||
readyCheckCompleted.PartyGUID = m_guid;
|
||||
BroadcastPacket(readyCheckCompleted.Write(), false);
|
||||
}
|
||||
|
||||
bool Group::IsReadyCheckCompleted(void) const
|
||||
{
|
||||
for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr)
|
||||
if (!citr->readyChecked)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void Group::SetMemberReadyCheck(ObjectGuid guid, bool ready)
|
||||
{
|
||||
if (!m_readyCheckStarted)
|
||||
return;
|
||||
|
||||
member_witerator slot = _getMemberWSlot(guid);
|
||||
if (slot != m_memberSlots.end())
|
||||
SetMemberReadyCheck(&(*slot), ready);
|
||||
}
|
||||
|
||||
void Group::SetMemberReadyCheck(MemberSlot* slot, bool ready)
|
||||
{
|
||||
WorldPackets::Party::ReadyCheckResponse response;
|
||||
response.PartyGUID = m_guid;
|
||||
response.Player = slot->guid;
|
||||
response.IsReady = ready;
|
||||
BroadcastPacket(response.Write(), false);
|
||||
|
||||
SetMemberReadyChecked(slot);
|
||||
}
|
||||
|
||||
void Group::SetOfflineMembersReadyChecked(void)
|
||||
{
|
||||
for (member_witerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr)
|
||||
{
|
||||
Player* player = ObjectAccessor::FindConnectedPlayer(itr->guid);
|
||||
if (!player || !player->GetSession())
|
||||
SetMemberReadyCheck(&(*itr), false);
|
||||
}
|
||||
}
|
||||
|
||||
void Group::SetMemberReadyChecked(MemberSlot* slot)
|
||||
{
|
||||
slot->readyChecked = true;
|
||||
if (IsReadyCheckCompleted())
|
||||
EndReadyCheck();
|
||||
}
|
||||
|
||||
void Group::ResetMemberReadyChecked(void)
|
||||
{
|
||||
for (member_witerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr)
|
||||
itr->readyChecked = false;
|
||||
}
|
||||
|
||||
void Group::AddRaidMarker(uint8 markerId, uint32 mapId, float positionX, float positionY, float positionZ, ObjectGuid transportGuid)
|
||||
{
|
||||
if (markerId >= RAID_MARKERS_COUNT || m_markers[markerId])
|
||||
return;
|
||||
|
||||
m_activeMarkers |= (1 << markerId);
|
||||
m_markers[markerId] = Trinity::make_unique<RaidMarker>(mapId, positionX, positionY, positionZ, transportGuid);
|
||||
SendRaidMarkersChanged();
|
||||
}
|
||||
|
||||
void Group::DeleteRaidMarker(uint8 markerId)
|
||||
{
|
||||
if (markerId > RAID_MARKERS_COUNT)
|
||||
return;
|
||||
|
||||
for (uint8 i = 0; i < RAID_MARKERS_COUNT; i++)
|
||||
if (m_markers[i] && (markerId == i || markerId == RAID_MARKERS_COUNT))
|
||||
{
|
||||
m_markers[i] = nullptr;
|
||||
m_activeMarkers &= ~(1 << i);
|
||||
}
|
||||
|
||||
SendRaidMarkersChanged();
|
||||
}
|
||||
|
||||
void Group::SendRaidMarkersChanged(WorldSession* session, int8 partyIndex)
|
||||
{
|
||||
WorldPackets::Party::RaidMarkersChanged packet;
|
||||
|
||||
packet.PartyIndex = partyIndex;
|
||||
packet.ActiveMarkers = m_activeMarkers;
|
||||
|
||||
for (uint8 i = 0; i < RAID_MARKERS_COUNT; i++)
|
||||
if (m_markers[i])
|
||||
packet.RaidMarkers.push_back(m_markers[i].get());
|
||||
|
||||
if (session)
|
||||
session->SendPacket(packet.Write());
|
||||
else
|
||||
BroadcastPacket(packet.Write(), false);
|
||||
}
|
||||
|
||||
bool Group::IsFull() const
|
||||
{
|
||||
return isRaidGroup() ? (m_memberSlots.size() >= MAXRAIDSIZE) : (m_memberSlots.size() >= MAXGROUPSIZE);
|
||||
return isRaidGroup() ? (m_memberSlots.size() >= MAX_RAID_SIZE) : (m_memberSlots.size() >= MAX_GROUP_SIZE);
|
||||
}
|
||||
|
||||
bool Group::isLFGGroup() const
|
||||
@@ -2371,10 +2571,9 @@ bool Group::SameSubGroup(ObjectGuid guid1, MemberSlot const* slot2) const
|
||||
|
||||
bool Group::HasFreeSlotSubGroup(uint8 subgroup) const
|
||||
{
|
||||
return (m_subGroupsCounts && m_subGroupsCounts[subgroup] < MAXGROUPSIZE);
|
||||
return (m_subGroupsCounts && m_subGroupsCounts[subgroup] < MAX_GROUP_SIZE);
|
||||
}
|
||||
|
||||
|
||||
uint8 Group::GetMemberGroup(ObjectGuid guid) const
|
||||
{
|
||||
member_citerator mslot = _getMemberCSlot(guid);
|
||||
@@ -2522,3 +2721,15 @@ void Group::ToggleGroupMemberFlag(member_witerator slot, uint8 flag, bool apply)
|
||||
slot->flags &= ~flag;
|
||||
}
|
||||
|
||||
void Group::SetEveryoneIsAssistant(bool apply)
|
||||
{
|
||||
if (apply)
|
||||
m_groupType = GroupType(m_groupType | GROUPTYPE_EVERYONE_ASSISTANT);
|
||||
else
|
||||
m_groupType = GroupType(m_groupType & ~GROUPTYPE_EVERYONE_ASSISTANT);
|
||||
|
||||
for (member_witerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr)
|
||||
ToggleGroupMemberFlag(itr, MEMBER_FLAG_ASSISTANT, apply);
|
||||
|
||||
SendUpdate();
|
||||
}
|
||||
|
||||
+105
-46
@@ -38,10 +38,14 @@ class WorldSession;
|
||||
|
||||
struct MapEntry;
|
||||
|
||||
#define MAXGROUPSIZE 5
|
||||
#define MAXRAIDSIZE 40
|
||||
#define MAX_RAID_SUBGROUPS MAXRAIDSIZE/MAXGROUPSIZE
|
||||
#define TARGETICONCOUNT 8
|
||||
#define MAX_GROUP_SIZE 5
|
||||
#define MAX_RAID_SIZE 40
|
||||
#define MAX_RAID_SUBGROUPS MAX_RAID_SIZE / MAX_GROUP_SIZE
|
||||
|
||||
#define TARGET_ICONS_COUNT 8
|
||||
#define RAID_MARKERS_COUNT 8
|
||||
|
||||
#define READYCHECK_DURATION 35000
|
||||
|
||||
enum RollVote
|
||||
{
|
||||
@@ -81,50 +85,59 @@ enum GroupMemberAssignment
|
||||
|
||||
enum GroupType
|
||||
{
|
||||
GROUPTYPE_NORMAL = 0x00,
|
||||
GROUPTYPE_BG = 0x01,
|
||||
GROUPTYPE_RAID = 0x02,
|
||||
GROUPTYPE_BGRAID = GROUPTYPE_BG | GROUPTYPE_RAID, // mask
|
||||
GROUPTYPE_LFG_RESTRICTED = 0x04, // Script_HasLFGRestrictions()
|
||||
GROUPTYPE_LFG = 0x08,
|
||||
GROUPTYPE_NORMAL = 0x00,
|
||||
GROUPTYPE_BG = 0x01,
|
||||
GROUPTYPE_RAID = 0x02,
|
||||
GROUPTYPE_BGRAID = GROUPTYPE_BG | GROUPTYPE_RAID, // mask
|
||||
GROUPTYPE_LFG_RESTRICTED = 0x04, // Script_HasLFGRestrictions()
|
||||
GROUPTYPE_LFG = 0x08,
|
||||
GROUPTYPE_EVERYONE_ASSISTANT = 0x40, // Script_IsEveryoneAssistant() (4.x)
|
||||
// 0x10, leave/change group?, I saw this flag when leaving group and after leaving BG while in group
|
||||
// GROUPTYPE_ONE_PERSON_PARTY = 0x20, 4.x Script_IsOnePersonParty()
|
||||
// GROUPTYPE_EVERYONE_ASSISTANT = 0x40 4.x Script_IsEveryoneAssistant()
|
||||
};
|
||||
|
||||
enum GroupUpdateFlags
|
||||
{
|
||||
GROUP_UPDATE_FLAG_NONE = 0x00000000, // nothing
|
||||
GROUP_UPDATE_FLAG_STATUS = 0x00000001, // uint16 (GroupMemberStatusFlag)
|
||||
GROUP_UPDATE_FLAG_CUR_HP = 0x00000002, // uint32 (HP)
|
||||
GROUP_UPDATE_FLAG_MAX_HP = 0x00000004, // uint32 (HP)
|
||||
GROUP_UPDATE_FLAG_POWER_TYPE = 0x00000008, // uint8 (PowerType)
|
||||
GROUP_UPDATE_FLAG_CUR_POWER = 0x00000010, // int16 (power value)
|
||||
GROUP_UPDATE_FLAG_MAX_POWER = 0x00000020, // int16 (power value)
|
||||
GROUP_UPDATE_FLAG_LEVEL = 0x00000040, // uint16 (level value)
|
||||
GROUP_UPDATE_FLAG_ZONE = 0x00000080, // uint16 (zone id)
|
||||
GROUP_UPDATE_FLAG_UNK100 = 0x00000100, // int16 (unk)
|
||||
GROUP_UPDATE_FLAG_POSITION = 0x00000200, // uint16 (x), uint16 (y), uint16 (z)
|
||||
GROUP_UPDATE_FLAG_AURAS = 0x00000400, // uint8 (unk), uint64 (mask), uint32 (count), for each bit set: uint32 (spell id) + uint16 (AuraFlags) (if has flags Scalable -> 3x int32 (bps))
|
||||
GROUP_UPDATE_FLAG_PET_GUID = 0x00000800, // uint64 (pet guid)
|
||||
GROUP_UPDATE_FLAG_PET_NAME = 0x00001000, // cstring (name, NULL terminated string)
|
||||
GROUP_UPDATE_FLAG_PET_MODEL_ID = 0x00002000, // uint16 (model id)
|
||||
GROUP_UPDATE_FLAG_PET_CUR_HP = 0x00004000, // uint32 (HP)
|
||||
GROUP_UPDATE_FLAG_PET_MAX_HP = 0x00008000, // uint32 (HP)
|
||||
GROUP_UPDATE_FLAG_PET_POWER_TYPE = 0x00010000, // uint8 (PowerType)
|
||||
GROUP_UPDATE_FLAG_PET_CUR_POWER = 0x00020000, // uint16 (power value)
|
||||
GROUP_UPDATE_FLAG_PET_MAX_POWER = 0x00040000, // uint16 (power value)
|
||||
GROUP_UPDATE_FLAG_PET_AURAS = 0x00080000, // [see GROUP_UPDATE_FLAG_AURAS]
|
||||
GROUP_UPDATE_FLAG_VEHICLE_SEAT = 0x00100000, // int32 (vehicle seat id)
|
||||
GROUP_UPDATE_FLAG_PHASE = 0x00200000, // int32 (unk), uint32 (phase count), for (count) uint16(phaseId)
|
||||
GROUP_UPDATE_FLAG_UNK704 = 0x00000001, // uint8[2] (unk)
|
||||
GROUP_UPDATE_FLAG_STATUS = 0x00000002, // uint16 (GroupMemberStatusFlag)
|
||||
GROUP_UPDATE_FLAG_POWER_TYPE = 0x00000004, // uint8 (PowerType)
|
||||
GROUP_UPDATE_FLAG_UNK322 = 0x00000008, // uint16 (unk)
|
||||
GROUP_UPDATE_FLAG_CUR_HP = 0x00000010, // uint32 (HP)
|
||||
GROUP_UPDATE_FLAG_MAX_HP = 0x00000020, // uint32 (max HP)
|
||||
GROUP_UPDATE_FLAG_CUR_POWER = 0x00000040, // int16 (power value)
|
||||
GROUP_UPDATE_FLAG_MAX_POWER = 0x00000080, // int16 (max power value)
|
||||
GROUP_UPDATE_FLAG_LEVEL = 0x00000100, // uint16 (level value)
|
||||
GROUP_UPDATE_FLAG_UNK200000 = 0x00000200, // int16 (unk)
|
||||
GROUP_UPDATE_FLAG_ZONE = 0x00000400, // uint16 (zone id)
|
||||
GROUP_UPDATE_FLAG_UNK2000000 = 0x00000800, // int16 (unk)
|
||||
GROUP_UPDATE_FLAG_UNK4000000 = 0x00001000, // int32 (unk)
|
||||
GROUP_UPDATE_FLAG_POSITION = 0x00002000, // uint16 (x), uint16 (y), uint16 (z)
|
||||
GROUP_UPDATE_FLAG_VEHICLE_SEAT = 0x00104000, // int32 (vehicle seat id)
|
||||
GROUP_UPDATE_FLAG_AURAS = 0x00008000, // uint8 (unk), uint64 (mask), uint32 (count), for each bit set: uint32 (spell id) + uint16 (AuraFlags) (if has flags Scalable -> 3x int32 (bps))
|
||||
GROUP_UPDATE_FLAG_PET = 0x00010000, // complex (pet)
|
||||
GROUP_UPDATE_FLAG_PHASE = 0x00020000, // int32 (unk), uint32 (phase count), for (count) uint16(phaseId)
|
||||
|
||||
GROUP_UPDATE_PET = GROUP_UPDATE_FLAG_PET_GUID | GROUP_UPDATE_FLAG_PET_NAME | GROUP_UPDATE_FLAG_PET_MODEL_ID |
|
||||
GROUP_UPDATE_FLAG_PET_CUR_HP | GROUP_UPDATE_FLAG_PET_MAX_HP | GROUP_UPDATE_FLAG_PET_POWER_TYPE |
|
||||
GROUP_UPDATE_FLAG_PET_CUR_POWER | GROUP_UPDATE_FLAG_PET_MAX_POWER | GROUP_UPDATE_FLAG_PET_AURAS, // all pet flags
|
||||
GROUP_UPDATE_FULL = GROUP_UPDATE_FLAG_STATUS | GROUP_UPDATE_FLAG_CUR_HP | GROUP_UPDATE_FLAG_MAX_HP |
|
||||
GROUP_UPDATE_FLAG_POWER_TYPE | GROUP_UPDATE_FLAG_CUR_POWER | GROUP_UPDATE_FLAG_MAX_POWER |
|
||||
GROUP_UPDATE_FLAG_LEVEL | GROUP_UPDATE_FLAG_ZONE | GROUP_UPDATE_FLAG_POSITION |
|
||||
GROUP_UPDATE_FLAG_AURAS | GROUP_UPDATE_PET | GROUP_UPDATE_FLAG_PHASE // all known flags, except UNK100 and VEHICLE_SEAT
|
||||
GROUP_UPDATE_FULL = GROUP_UPDATE_FLAG_UNK704 | GROUP_UPDATE_FLAG_STATUS | GROUP_UPDATE_FLAG_POWER_TYPE |
|
||||
GROUP_UPDATE_FLAG_UNK322 | GROUP_UPDATE_FLAG_CUR_HP | GROUP_UPDATE_FLAG_MAX_HP |
|
||||
GROUP_UPDATE_FLAG_CUR_POWER | GROUP_UPDATE_FLAG_MAX_POWER | GROUP_UPDATE_FLAG_LEVEL |
|
||||
GROUP_UPDATE_FLAG_UNK200000 | GROUP_UPDATE_FLAG_ZONE | GROUP_UPDATE_FLAG_UNK2000000 |
|
||||
GROUP_UPDATE_FLAG_UNK4000000 | GROUP_UPDATE_FLAG_POSITION | GROUP_UPDATE_FLAG_VEHICLE_SEAT |
|
||||
GROUP_UPDATE_FLAG_AURAS | GROUP_UPDATE_FLAG_PET | GROUP_UPDATE_FLAG_PHASE // all known flags
|
||||
};
|
||||
|
||||
enum GroupUpdatePetFlags
|
||||
{
|
||||
GROUP_UPDATE_FLAG_PET_NONE = 0x00000000, // nothing
|
||||
GROUP_UPDATE_FLAG_PET_GUID = 0x00000001, // ObjectGuid (pet guid)
|
||||
GROUP_UPDATE_FLAG_PET_NAME = 0x00000002, // cstring (name, NULL terminated string)
|
||||
GROUP_UPDATE_FLAG_PET_MODEL_ID = 0x00000004, // uint16 (model id)
|
||||
GROUP_UPDATE_FLAG_PET_CUR_HP = 0x00000008, // uint32 (HP)
|
||||
GROUP_UPDATE_FLAG_PET_MAX_HP = 0x00000010, // uint32 (max HP)
|
||||
GROUP_UPDATE_FLAG_PET_AURAS = 0x00000020, // [see GROUP_UPDATE_FLAG_AURAS]
|
||||
|
||||
GROUP_UPDATE_PET_FULL = GROUP_UPDATE_FLAG_PET_GUID | GROUP_UPDATE_FLAG_PET_NAME | GROUP_UPDATE_FLAG_PET_MODEL_ID |
|
||||
GROUP_UPDATE_FLAG_PET_CUR_HP | GROUP_UPDATE_FLAG_PET_MAX_HP | GROUP_UPDATE_FLAG_PET_AURAS // all pet flags
|
||||
};
|
||||
|
||||
class Roll : public LootValidatorRef
|
||||
@@ -160,6 +173,18 @@ struct InstanceGroupBind
|
||||
InstanceGroupBind() : save(NULL), perm(false) { }
|
||||
};
|
||||
|
||||
struct RaidMarker
|
||||
{
|
||||
WorldLocation Location;
|
||||
ObjectGuid TransportGUID;
|
||||
|
||||
RaidMarker(uint32 mapId, float positionX, float positionY, float positionZ, ObjectGuid transportGuid = ObjectGuid::Empty)
|
||||
{
|
||||
Location.WorldRelocate(mapId, positionX, positionY, positionZ);
|
||||
TransportGUID = transportGuid;
|
||||
}
|
||||
};
|
||||
|
||||
/** request member stats checken **/
|
||||
/// @todo uninvite people that not accepted invite
|
||||
class Group
|
||||
@@ -169,9 +194,11 @@ class Group
|
||||
{
|
||||
ObjectGuid guid;
|
||||
std::string name;
|
||||
uint8 _class;
|
||||
uint8 group;
|
||||
uint8 flags;
|
||||
uint8 roles;
|
||||
bool readyChecked;
|
||||
};
|
||||
typedef std::list<MemberSlot> MemberSlotList;
|
||||
typedef MemberSlotList::const_iterator member_citerator;
|
||||
@@ -197,7 +224,7 @@ class Group
|
||||
bool AddLeaderInvite(Player* player);
|
||||
bool AddMember(Player* player);
|
||||
bool RemoveMember(ObjectGuid guid, const RemoveMethod &method = GROUP_REMOVEMETHOD_DEFAULT, ObjectGuid kicker = ObjectGuid::Empty, const char* reason = NULL);
|
||||
void ChangeLeader(ObjectGuid guid);
|
||||
void ChangeLeader(ObjectGuid guid, int8 partyIndex = 0);
|
||||
void SetLootMethod(LootMethod method);
|
||||
void SetLooterGuid(ObjectGuid guid);
|
||||
void SetMasterLooterGuid(ObjectGuid guid);
|
||||
@@ -205,6 +232,31 @@ class Group
|
||||
void SetLootThreshold(ItemQualities threshold);
|
||||
void Disband(bool hideDestroy = false);
|
||||
void SetLfgRoles(ObjectGuid guid, uint8 roles);
|
||||
uint8 GetLfgRoles(ObjectGuid guid);
|
||||
void SetEveryoneIsAssistant(bool apply);
|
||||
|
||||
// Update
|
||||
void Update(uint32 diff);
|
||||
void UpdateReadyCheck(uint32 diff);
|
||||
|
||||
// Ready check
|
||||
void StartReadyCheck(ObjectGuid starterGuid, int8 partyIndex, uint32 duration = READYCHECK_DURATION);
|
||||
void EndReadyCheck();
|
||||
|
||||
bool IsReadyCheckStarted(void) const { return m_readyCheckStarted; }
|
||||
bool IsReadyCheckCompleted(void) const;
|
||||
|
||||
void SetOfflineMembersReadyChecked(void);
|
||||
void SetMemberReadyCheck(ObjectGuid guid, bool ready);
|
||||
void SetMemberReadyCheck(MemberSlot* slot, bool ready);
|
||||
|
||||
void SetMemberReadyChecked(MemberSlot* slot);
|
||||
void ResetMemberReadyChecked(void);
|
||||
|
||||
// Raid Markers
|
||||
void AddRaidMarker(uint8 markerId, uint32 mapId, float positionX, float positionY, float positionZ, ObjectGuid transportGuid = ObjectGuid::Empty);
|
||||
void DeleteRaidMarker(uint8 markerId);
|
||||
void SendRaidMarkersChanged(WorldSession* session = nullptr, int8 partyIndex = 0);
|
||||
|
||||
// properties accessories
|
||||
bool IsFull() const;
|
||||
@@ -254,7 +306,8 @@ class Group
|
||||
GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const* bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot, ObjectGuid& errorGuid);
|
||||
|
||||
void ChangeMembersGroup(ObjectGuid guid, uint8 group);
|
||||
void SetTargetIcon(uint8 id, ObjectGuid whoGuid, ObjectGuid targetGuid);
|
||||
void SwapMembersGroups(ObjectGuid firstGuid, ObjectGuid secondGuid);
|
||||
void SetTargetIcon(uint8 symbol, ObjectGuid target, ObjectGuid changedBy, uint8 partyIndex);
|
||||
void SetGroupMemberFlag(ObjectGuid guid, bool apply, GroupMemberFlags flag);
|
||||
void RemoveUniqueGroupMemberFlag(GroupMemberFlags flag);
|
||||
|
||||
@@ -269,7 +322,7 @@ class Group
|
||||
|
||||
// -no description-
|
||||
//void SendInit(WorldSession* session);
|
||||
void SendTargetIconList(WorldSession* session);
|
||||
void SendTargetIconList(WorldSession* session, int8 partyIndex = 0);
|
||||
void SendUpdate();
|
||||
void SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot = NULL);
|
||||
void UpdatePlayerOutOfRange(Player* player);
|
||||
@@ -290,8 +343,6 @@ class Group
|
||||
|
||||
void BroadcastPacket(WorldPacket const* packet, bool ignorePlayersInBGRaid, int group = -1, ObjectGuid ignoredPlayer = ObjectGuid::Empty);
|
||||
void BroadcastAddonMessagePacket(WorldPacket const* packet, const std::string& prefix, bool ignorePlayersInBGRaid, int group = -1, ObjectGuid ignore = ObjectGuid::Empty);
|
||||
void BroadcastReadyCheck(WorldPacket const* packet);
|
||||
void OfflineReadyCheck();
|
||||
|
||||
/*********************************************************/
|
||||
/*** LOOT SYSTEM ***/
|
||||
@@ -351,7 +402,7 @@ class Group
|
||||
Difficulty m_legacyRaidDifficulty;
|
||||
Battleground* m_bgGroup;
|
||||
Battlefield* m_bfGroup;
|
||||
ObjectGuid m_targetIcons[TARGETICONCOUNT];
|
||||
ObjectGuid m_targetIcons[TARGET_ICONS_COUNT];
|
||||
LootMethod m_lootMethod;
|
||||
ItemQualities m_lootThreshold;
|
||||
ObjectGuid m_looterGuid;
|
||||
@@ -363,5 +414,13 @@ class Group
|
||||
uint32 m_counter; // used only in SMSG_GROUP_LIST
|
||||
uint32 m_maxEnchantingLevel;
|
||||
uint32 m_dbStoreId; // Represents the ID used in database (Can be reused by other groups if group was disbanded)
|
||||
|
||||
// Ready Check
|
||||
bool m_readyCheckStarted;
|
||||
int32 m_readyCheckTimer;
|
||||
|
||||
// Raid markers
|
||||
std::array<std::unique_ptr<RaidMarker>, RAID_MARKERS_COUNT> m_markers;
|
||||
uint32 m_activeMarkers;
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -233,3 +233,10 @@ void GroupMgr::LoadGroups()
|
||||
TC_LOG_INFO("server.loading", ">> Loaded %u group-instance saves in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
}
|
||||
|
||||
void GroupMgr::Update(uint32 diff)
|
||||
{
|
||||
for (GroupContainer::iterator itr = GroupStore.begin(); itr != GroupStore.end(); itr++)
|
||||
if (itr->second)
|
||||
itr->second->Update(diff);
|
||||
}
|
||||
|
||||
@@ -50,6 +50,8 @@ public:
|
||||
void AddGroup(Group* group);
|
||||
void RemoveGroup(Group* group);
|
||||
|
||||
void Update(uint32 diff);
|
||||
|
||||
|
||||
protected:
|
||||
ObjectGuid::LowType NextGroupId;
|
||||
|
||||
@@ -2466,7 +2466,7 @@ void Guild::BroadcastToGuild(WorldSession* session, bool officerOnly, std::strin
|
||||
if (session && session->GetPlayer() && _HasRankRight(session->GetPlayer(), officerOnly ? GR_RIGHT_OFFCHATSPEAK : GR_RIGHT_GCHATSPEAK))
|
||||
{
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, Language(language), session->GetPlayer(), nullptr, msg);
|
||||
packet.Initialize(officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, Language(language), session->GetPlayer(), nullptr, msg);
|
||||
WorldPacket const* data = packet.Write();
|
||||
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
if (Player* player = itr->second->FindConnectedPlayer())
|
||||
@@ -2481,7 +2481,7 @@ void Guild::BroadcastAddonToGuild(WorldSession* session, bool officerOnly, std::
|
||||
if (session && session->GetPlayer() && _HasRankRight(session->GetPlayer(), officerOnly ? GR_RIGHT_OFFCHATSPEAK : GR_RIGHT_GCHATSPEAK))
|
||||
{
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, LANG_ADDON, session->GetPlayer(), nullptr, msg, 0, "", DEFAULT_LOCALE, prefix);
|
||||
packet.Initialize(officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, LANG_ADDON, session->GetPlayer(), nullptr, msg, 0, "", DEFAULT_LOCALE, prefix);
|
||||
WorldPacket const* data = packet.Write();
|
||||
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
if (Player* player = itr->second->FindPlayer())
|
||||
|
||||
@@ -288,7 +288,7 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
|
||||
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(ChatMsg(type), Language(lang), sender, nullptr, msg);
|
||||
packet.Initialize(ChatMsg(type), Language(lang), sender, nullptr, msg);
|
||||
group->BroadcastPacket(packet.Write(), false, group->GetMemberGroup(GetPlayer()->GetGUID()));
|
||||
break;
|
||||
}
|
||||
@@ -320,8 +320,8 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
|
||||
}
|
||||
case CHAT_MSG_RAID:
|
||||
{
|
||||
Group* group = GetPlayer()->GetOriginalGroup();
|
||||
if (!group)
|
||||
Group* group = GetPlayer()->GetGroup();
|
||||
if (!group || !group->isRaidGroup() || group->isBGGroup())
|
||||
return;
|
||||
|
||||
if (group->IsLeader(GetPlayer()->GetGUID()))
|
||||
@@ -330,7 +330,7 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
|
||||
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(ChatMsg(type), Language(lang), sender, nullptr, msg);
|
||||
packet.Initialize(ChatMsg(type), Language(lang), sender, nullptr, msg);
|
||||
group->BroadcastPacket(packet.Write(), false);
|
||||
break;
|
||||
}
|
||||
@@ -344,7 +344,7 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
//in battleground, raid warning is sent only to players in battleground - code is ok
|
||||
packet.Initalize(CHAT_MSG_RAID_WARNING, Language(lang), sender, NULL, msg);
|
||||
packet.Initialize(CHAT_MSG_RAID_WARNING, Language(lang), sender, NULL, msg);
|
||||
group->BroadcastPacket(packet.Write(), false);
|
||||
break;
|
||||
}
|
||||
@@ -381,7 +381,7 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
|
||||
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(ChatMsg(type), Language(lang), sender, nullptr, msg);
|
||||
packet.Initialize(ChatMsg(type), Language(lang), sender, nullptr, msg);
|
||||
group->BroadcastPacket(packet.Write(), false);
|
||||
break;
|
||||
}
|
||||
@@ -484,7 +484,7 @@ void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std:
|
||||
}
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(type, LANG_ADDON, sender, nullptr, text, 0, "", DEFAULT_LOCALE, prefix);
|
||||
packet.Initialize(type, LANG_ADDON, sender, nullptr, text, 0, "", DEFAULT_LOCALE, prefix);
|
||||
group->BroadcastAddonMessagePacket(packet.Write(), prefix, true, subGroup, sender->GetGUID());
|
||||
break;
|
||||
}
|
||||
@@ -666,7 +666,7 @@ void WorldSession::HandleChatIgnoredOpcode(WorldPacket& recvData)
|
||||
return;
|
||||
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(CHAT_MSG_IGNORED, LANG_UNIVERSAL, _player, _player, GetPlayer()->GetName());
|
||||
packet.Initialize(CHAT_MSG_IGNORED, LANG_UNIVERSAL, _player, _player, GetPlayer()->GetName());
|
||||
player->SendDirectMessage(packet.Write());
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -86,7 +86,7 @@ void WorldSession::HandleLfgJoinOpcode(WorldPacket& recvData)
|
||||
{
|
||||
if (!sLFGMgr->isOptionEnabled(lfg::LFG_OPTION_ENABLE_DUNGEON_FINDER | lfg::LFG_OPTION_ENABLE_RAID_BROWSER) ||
|
||||
(GetPlayer()->GetGroup() && GetPlayer()->GetGroup()->GetLeaderGUID() != GetPlayer()->GetGUID() &&
|
||||
(GetPlayer()->GetGroup()->GetMembersCount() == MAXGROUPSIZE || !GetPlayer()->GetGroup()->isLFGGroup())))
|
||||
(GetPlayer()->GetGroup()->GetMembersCount() == MAX_GROUP_SIZE || !GetPlayer()->GetGroup()->isLFGGroup())))
|
||||
{
|
||||
recvData.rfinish();
|
||||
return;
|
||||
|
||||
@@ -1213,129 +1213,28 @@ void WorldSession::HandleObjectUpdateRescuedOpcode(WorldPackets::Misc::ObjectUpd
|
||||
_player->m_clientGUIDs.insert(objectUpdateRescued.ObjectGUID);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSaveCUFProfiles(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleSaveCUFProfiles(WorldPackets::Misc::SaveCUFProfiles& packet)
|
||||
{
|
||||
uint8 count = (uint8)recvPacket.ReadBits(20);
|
||||
|
||||
if (count > MAX_CUF_PROFILES)
|
||||
if (packet.CUFProfiles.size() > MAX_CUF_PROFILES)
|
||||
{
|
||||
TC_LOG_ERROR("entities.player", "HandleSaveCUFProfiles - %s tried to save more than %i CUF profiles. Hacking attempt?", GetPlayerName().c_str(), MAX_CUF_PROFILES);
|
||||
recvPacket.rfinish();
|
||||
return;
|
||||
}
|
||||
|
||||
CUFProfile* profiles[MAX_CUF_PROFILES];
|
||||
uint8 strlens[MAX_CUF_PROFILES];
|
||||
for (uint8 i = 0; i < packet.CUFProfiles.size(); ++i)
|
||||
GetPlayer()->SaveCUFProfile(i, std::move(packet.CUFProfiles[i]));
|
||||
|
||||
for (uint8 i = 0; i < count; ++i)
|
||||
{
|
||||
profiles[i] = new CUFProfile;
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_SPEC_2 , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_10_PLAYERS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_UNK_157 , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_DISPLAY_HEAL_PREDICTION , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_SPEC_1 , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_PVP , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_DISPLAY_POWER_BAR , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_15_PLAYERS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_40_PLAYERS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_DISPLAY_PETS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_5_PLAYERS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_DISPLAY_ONLY_DISPELLABLE_DEBUFFS, recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_2_PLAYERS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_UNK_156 , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_DISPLAY_NON_BOSS_DEBUFFS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_DISPLAY_MAIN_TANK_AND_ASSIST , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_DISPLAY_AGGRO_HIGHLIGHT , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_3_PLAYERS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_DISPLAY_BORDER , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_USE_CLASS_COLORS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_UNK_145 , recvPacket.ReadBit());
|
||||
strlens[i] = (uint8)recvPacket.ReadBits(8);
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_PVE , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_DISPLAY_HORIZONTAL_GROUPS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_AUTO_ACTIVATE_25_PLAYERS , recvPacket.ReadBit());
|
||||
profiles[i]->BoolOptions.set(CUF_KEEP_GROUPS_TOGETHER , recvPacket.ReadBit());
|
||||
}
|
||||
|
||||
for (uint8 i = 0; i < count; ++i)
|
||||
{
|
||||
recvPacket >> profiles[i]->Unk146;
|
||||
profiles[i]->ProfileName = recvPacket.ReadString(strlens[i]);
|
||||
recvPacket >> profiles[i]->Unk152;
|
||||
recvPacket >> profiles[i]->FrameHeight;
|
||||
recvPacket >> profiles[i]->FrameWidth;
|
||||
recvPacket >> profiles[i]->Unk150;
|
||||
recvPacket >> profiles[i]->HealthText;
|
||||
recvPacket >> profiles[i]->Unk147;
|
||||
recvPacket >> profiles[i]->SortBy;
|
||||
recvPacket >> profiles[i]->Unk154;
|
||||
recvPacket >> profiles[i]->Unk148;
|
||||
|
||||
GetPlayer()->SaveCUFProfile(i, profiles[i]);
|
||||
}
|
||||
|
||||
for (uint8 i = count; i < MAX_CUF_PROFILES; ++i)
|
||||
GetPlayer()->SaveCUFProfile(i, NULL);
|
||||
for (uint8 i = packet.CUFProfiles.size(); i < MAX_CUF_PROFILES; ++i)
|
||||
GetPlayer()->SaveCUFProfile(i, nullptr);
|
||||
}
|
||||
|
||||
void WorldSession::SendLoadCUFProfiles()
|
||||
{
|
||||
Player* player = GetPlayer();
|
||||
|
||||
uint8 count = player->GetCUFProfilesCount();
|
||||
WorldPackets::Misc::LoadCUFProfiles loadCUFProfiles;
|
||||
|
||||
ByteBuffer byteBuffer(25 * count);
|
||||
WorldPacket data(SMSG_LOAD_CUF_PROFILES, 5 * count + 25 * count);
|
||||
|
||||
data.WriteBits(count, 20);
|
||||
for (uint8 i = 0; i < MAX_CUF_PROFILES; ++i)
|
||||
{
|
||||
CUFProfile* profile = player->GetCUFProfile(i);
|
||||
if (!profile)
|
||||
continue;
|
||||
|
||||
data.WriteBit(profile->BoolOptions[CUF_UNK_157]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_10_PLAYERS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_5_PLAYERS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_25_PLAYERS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_DISPLAY_HEAL_PREDICTION]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_PVE]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_DISPLAY_HORIZONTAL_GROUPS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_40_PLAYERS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_3_PLAYERS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_DISPLAY_AGGRO_HIGHLIGHT]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_DISPLAY_BORDER]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_2_PLAYERS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_DISPLAY_NON_BOSS_DEBUFFS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_DISPLAY_MAIN_TANK_AND_ASSIST]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_UNK_156]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_SPEC_2]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_USE_CLASS_COLORS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_DISPLAY_POWER_BAR]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_SPEC_1]);
|
||||
data.WriteBits(profile->ProfileName.size(), 8);
|
||||
data.WriteBit(profile->BoolOptions[CUF_DISPLAY_ONLY_DISPELLABLE_DEBUFFS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_KEEP_GROUPS_TOGETHER]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_UNK_145]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_15_PLAYERS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_DISPLAY_PETS]);
|
||||
data.WriteBit(profile->BoolOptions[CUF_AUTO_ACTIVATE_PVP]);
|
||||
|
||||
byteBuffer << uint16(profile->Unk154);
|
||||
byteBuffer << uint16(profile->FrameHeight);
|
||||
byteBuffer << uint16(profile->Unk152);
|
||||
byteBuffer << uint8(profile->Unk147);
|
||||
byteBuffer << uint16(profile->Unk150);
|
||||
byteBuffer << uint8(profile->Unk146);
|
||||
byteBuffer << uint8(profile->HealthText);
|
||||
byteBuffer << uint8(profile->SortBy);
|
||||
byteBuffer << uint16(profile->FrameWidth);
|
||||
byteBuffer << uint8(profile->Unk148);
|
||||
byteBuffer.WriteString(profile->ProfileName);
|
||||
}
|
||||
|
||||
data.FlushBits();
|
||||
data.append(byteBuffer);
|
||||
SendPacket(&data);
|
||||
for (uint8 i = 0; i < MAX_CUF_PROFILES; i++)
|
||||
loadCUFProfiles.CUFProfiles.push_back(player->GetCUFProfile(i));
|
||||
SendPacket(loadCUFProfiles.Write());
|
||||
}
|
||||
|
||||
@@ -616,8 +616,7 @@ void WorldSession::HandlePetRename(WorldPacket& recvData)
|
||||
|
||||
pet->SetName(name);
|
||||
|
||||
if (pet->GetOwner()->GetGroup())
|
||||
pet->GetOwner()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_NAME);
|
||||
pet->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_NAME);
|
||||
|
||||
pet->RemoveByteFlag(UNIT_FIELD_BYTES_2, 2, UNIT_CAN_BE_RENAMED);
|
||||
|
||||
|
||||
@@ -281,8 +281,8 @@ void WorldSession::HandleCastSpellOpcode(WorldPackets::Spells::CastSpell& cast)
|
||||
caster = _player;
|
||||
}
|
||||
|
||||
// check known spell
|
||||
if (caster->GetTypeId() == TYPEID_PLAYER && !caster->ToPlayer()->HasActiveSpell(spellInfo->Id))
|
||||
// check known spell or raid marker spell (which not requires player to know it)
|
||||
if (caster->GetTypeId() == TYPEID_PLAYER && !caster->ToPlayer()->HasActiveSpell(spellInfo->Id) && !spellInfo->HasEffect(SPELL_EFFECT_CHANGE_RAID_MARKER))
|
||||
return;
|
||||
|
||||
// Check possible spell cast overrides
|
||||
|
||||
@@ -699,7 +699,7 @@ class Map : public GridRefManager<NGridType>
|
||||
{
|
||||
auto itr = _guidGenerators.find(high);
|
||||
if (itr == _guidGenerators.end())
|
||||
itr = _guidGenerators.insert(std::make_pair(high, std::unique_ptr<ObjectGuidGenerator<high>>(new ObjectGuidGenerator<high>()))).first;
|
||||
itr = _guidGenerators.insert(std::make_pair(high, Trinity::make_unique<ObjectGuidGenerator<high>>())).first;
|
||||
|
||||
return *itr->second;
|
||||
}
|
||||
|
||||
@@ -1113,7 +1113,7 @@ enum SpellEffectName
|
||||
SPELL_EFFECT_REPUTATION = 103,
|
||||
SPELL_EFFECT_SUMMON_OBJECT_SLOT1 = 104,
|
||||
SPELL_EFFECT_SUMMON_OBJECT_SLOT2 = 105,
|
||||
SPELL_EFFECT_SUMMON_OBJECT_SLOT3 = 106,
|
||||
SPELL_EFFECT_CHANGE_RAID_MARKER = 106,
|
||||
SPELL_EFFECT_SUMMON_OBJECT_SLOT4 = 107,
|
||||
SPELL_EFFECT_DISPEL_MECHANIC = 108,
|
||||
SPELL_EFFECT_RESURRECT_PET = 109,
|
||||
|
||||
@@ -92,7 +92,7 @@ void WorldPackets::Chat::ChatMessageEmote::Read()
|
||||
Text = _worldPacket.ReadString(len);
|
||||
}
|
||||
|
||||
void WorldPackets::Chat::Chat::Initalize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message,
|
||||
void WorldPackets::Chat::Chat::Initialize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message,
|
||||
uint32 achievementId /*= 0*/, std::string channelName /*= ""*/, LocaleConstant locale /*= DEFAULT_LOCALE*/, std::string addonPrefix /*= ""*/)
|
||||
{
|
||||
// Clear everything because same packet can be used multiple times
|
||||
|
||||
@@ -151,7 +151,7 @@ namespace WorldPackets
|
||||
public:
|
||||
Chat() : ServerPacket(SMSG_CHAT, 100) { }
|
||||
|
||||
void Initalize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message, uint32 achievementId = 0, std::string channelName = "", LocaleConstant locale = DEFAULT_LOCALE, std::string addonPrefix = "");
|
||||
void Initialize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message, uint32 achievementId = 0, std::string channelName = "", LocaleConstant locale = DEFAULT_LOCALE, std::string addonPrefix = "");
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint8 SlashCmd = 0; ///< @see enum ChatMsg
|
||||
|
||||
@@ -30,3 +30,29 @@ WorldPacket const* WorldPackets::Instance::UpdateInstanceOwnership::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Instance::InstanceInfo::Write()
|
||||
{
|
||||
_worldPacket << int32(LockList.size());
|
||||
|
||||
for (InstanceLockInfos const& lockInfos : LockList)
|
||||
_worldPacket << lockInfos;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInfos const& lockInfos)
|
||||
{
|
||||
data << lockInfos.MapID;
|
||||
data << lockInfos.DifficultyID;
|
||||
data << lockInfos.InstanceID;
|
||||
data << lockInfos.TimeRemaining;
|
||||
data << lockInfos.CompletedMask;
|
||||
|
||||
data.WriteBit(lockInfos.Locked);
|
||||
data.WriteBit(lockInfos.Extended);
|
||||
|
||||
data.FlushBits();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -46,7 +46,31 @@ namespace WorldPackets
|
||||
int32 IOwnInstance = 0; // Used to control whether "Reset all instances" button appears on the UI - Script_CanShowResetInstances()
|
||||
// but it has been deperecated in favor of simply checking group leader, being inside an instance or using dungeon finder
|
||||
};
|
||||
|
||||
struct InstanceLockInfos
|
||||
{
|
||||
uint64 InstanceID = 0u;
|
||||
uint32 MapID = 0u;
|
||||
uint32 DifficultyID = 0u;
|
||||
int32 TimeRemaining = 0;
|
||||
uint32 CompletedMask = 0u;
|
||||
|
||||
bool Locked = false;
|
||||
bool Extended = false;
|
||||
};
|
||||
|
||||
class InstanceInfo final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
InstanceInfo() : ServerPacket(SMSG_INSTANCE_INFO, 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::vector<InstanceLockInfos> LockList;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInfos const& lockInfos);
|
||||
|
||||
#endif // InstancePackets_h__
|
||||
|
||||
@@ -451,3 +451,72 @@ WorldPacket const* WorldPackets::Misc::Dismount::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Misc::SaveCUFProfiles::Read()
|
||||
{
|
||||
uint32 count;
|
||||
_worldPacket >> count;
|
||||
|
||||
for (uint8 i = 0; i < count && i < MAX_CUF_PROFILES; i++)
|
||||
{
|
||||
std::unique_ptr<CUFProfile> cufProfile = Trinity::make_unique<CUFProfile>();
|
||||
|
||||
uint8 strLen = _worldPacket.ReadBits(7);
|
||||
|
||||
// Bool Options
|
||||
for (uint8 option = 0; option < CUF_BOOL_OPTIONS_COUNT; option++)
|
||||
cufProfile->BoolOptions.set(option, _worldPacket.ReadBit());
|
||||
|
||||
// Other Options
|
||||
_worldPacket >> cufProfile->FrameHeight;
|
||||
_worldPacket >> cufProfile->FrameWidth;
|
||||
|
||||
_worldPacket >> cufProfile->SortBy;
|
||||
_worldPacket >> cufProfile->HealthText;
|
||||
|
||||
_worldPacket >> cufProfile->TopPoint;
|
||||
_worldPacket >> cufProfile->BottomPoint;
|
||||
_worldPacket >> cufProfile->LeftPoint;
|
||||
|
||||
_worldPacket >> cufProfile->TopOffset;
|
||||
_worldPacket >> cufProfile->BottomOffset;
|
||||
_worldPacket >> cufProfile->LeftOffset;
|
||||
|
||||
cufProfile->ProfileName = _worldPacket.ReadString(strLen);
|
||||
|
||||
CUFProfiles.push_back(std::move(cufProfile));
|
||||
}
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Misc::LoadCUFProfiles::Write()
|
||||
{
|
||||
_worldPacket << uint32(CUFProfiles.size());
|
||||
|
||||
for (CUFProfile const* cufProfile : CUFProfiles)
|
||||
{
|
||||
_worldPacket.WriteBits(cufProfile->ProfileName.size(), 7);
|
||||
|
||||
// Bool Options
|
||||
for (uint8 option = 0; option < CUF_BOOL_OPTIONS_COUNT; option++)
|
||||
_worldPacket.WriteBit(cufProfile->BoolOptions[option]);
|
||||
|
||||
// Other Options
|
||||
_worldPacket << cufProfile->FrameHeight;
|
||||
_worldPacket << cufProfile->FrameWidth;
|
||||
|
||||
_worldPacket << cufProfile->SortBy;
|
||||
_worldPacket << cufProfile->HealthText;
|
||||
|
||||
_worldPacket << cufProfile->TopPoint;
|
||||
_worldPacket << cufProfile->BottomPoint;
|
||||
_worldPacket << cufProfile->LeftPoint;
|
||||
|
||||
_worldPacket << cufProfile->TopOffset;
|
||||
_worldPacket << cufProfile->BottomOffset;
|
||||
_worldPacket << cufProfile->LeftOffset;
|
||||
|
||||
_worldPacket.WriteString(cufProfile->ProfileName);
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "G3D/Vector3.h"
|
||||
#include "Object.h"
|
||||
#include "Unit.h"
|
||||
#include "Player.h"
|
||||
#include "Weather.h"
|
||||
|
||||
namespace WorldPackets
|
||||
@@ -642,6 +643,26 @@ namespace WorldPackets
|
||||
|
||||
ObjectGuid Guid;
|
||||
};
|
||||
|
||||
class SaveCUFProfiles final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
SaveCUFProfiles(WorldPacket&& packet) : ClientPacket(CMSG_SAVE_CUF_PROFILES, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
std::vector<std::unique_ptr<CUFProfile>> CUFProfiles;
|
||||
};
|
||||
|
||||
class LoadCUFProfiles final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
LoadCUFProfiles() : ServerPacket(SMSG_LOAD_CUF_PROFILES, 20) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::vector<CUFProfile const*> CUFProfiles;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,716 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "PartyPackets.h"
|
||||
|
||||
#include "Player.h"
|
||||
#include "Pet.h"
|
||||
#include "Vehicle.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
|
||||
WorldPacket const* WorldPackets::Party::PartyCommandResult::Write()
|
||||
{
|
||||
_worldPacket.WriteBits(Name.size(), 9);
|
||||
|
||||
_worldPacket.WriteBits(Command, 4);
|
||||
_worldPacket.WriteBits(Result, 6);
|
||||
|
||||
_worldPacket << ResultData;
|
||||
_worldPacket << ResultGUID;
|
||||
_worldPacket.WriteString(Name);
|
||||
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::PartyInviteClient::Read()
|
||||
{
|
||||
uint32 targetNameLen, targetRealmLen;
|
||||
|
||||
_worldPacket >> PartyIndex;
|
||||
_worldPacket >> ProposedRoles;
|
||||
_worldPacket >> TargetGUID;
|
||||
_worldPacket >> TargetCfgRealmID;
|
||||
|
||||
targetNameLen = _worldPacket.ReadBits(9);
|
||||
targetRealmLen = _worldPacket.ReadBits(9);
|
||||
|
||||
TargetName = _worldPacket.ReadString(targetNameLen);
|
||||
TargetRealm = _worldPacket.ReadString(targetRealmLen);
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::PartyInvite::Write()
|
||||
{
|
||||
// Order guessed
|
||||
_worldPacket.WriteBit(CanAccept);
|
||||
_worldPacket.WriteBit(MightCRZYou);
|
||||
_worldPacket.WriteBit(MustBeBNetFriend);
|
||||
_worldPacket.WriteBit(AllowMultipleRoles);
|
||||
_worldPacket.WriteBit(IsXRealm);
|
||||
|
||||
_worldPacket.WriteBits(InviterName.size(), 6);
|
||||
|
||||
_worldPacket << InviterGUID;
|
||||
_worldPacket << InviterBNetAccountId;
|
||||
|
||||
_worldPacket << InviterVirtualRealmAddress;
|
||||
_worldPacket << Unk1;
|
||||
|
||||
_worldPacket.WriteBit(IsLocal);
|
||||
_worldPacket.WriteBit(Unk2);
|
||||
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
_worldPacket.WriteBits(InviterRealmNameActual.size(), 8);
|
||||
_worldPacket.WriteBits(InviterRealmNameNormalized.size(), 8);
|
||||
_worldPacket.WriteString(InviterRealmNameActual);
|
||||
_worldPacket.WriteString(InviterRealmNameNormalized);
|
||||
|
||||
_worldPacket << ProposedRoles;
|
||||
_worldPacket << int32(LfgSlots.size());
|
||||
_worldPacket << LfgCompletedMask;
|
||||
|
||||
_worldPacket.WriteString(InviterName);
|
||||
|
||||
for (int32 LfgSlot : LfgSlots)
|
||||
_worldPacket << LfgSlot;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::PartyInvite::Initialize(Player* const inviter, int32 proposedRoles, bool canAccept)
|
||||
{
|
||||
CanAccept = canAccept;
|
||||
|
||||
InviterName = inviter->GetName();
|
||||
InviterGUID = inviter->GetGUID();
|
||||
InviterBNetAccountId = inviter->GetSession()->GetAccountGUID();
|
||||
|
||||
ProposedRoles = proposedRoles;
|
||||
|
||||
std::string realmName = sObjectMgr->GetRealmName(realmHandle.Index);
|
||||
|
||||
InviterVirtualRealmAddress = GetVirtualRealmAddress();
|
||||
InviterRealmNameActual = realmName;
|
||||
InviterRealmNameNormalized = realmName;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::PartyInviteResponse::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
|
||||
Accept = _worldPacket.ReadBit();
|
||||
|
||||
bool hasRolesDesired = _worldPacket.ReadBit();
|
||||
if (hasRolesDesired)
|
||||
{
|
||||
RolesDesired = boost::in_place();
|
||||
_worldPacket >> *RolesDesired;
|
||||
}
|
||||
}
|
||||
|
||||
void WorldPackets::Party::PartyUninvite::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
_worldPacket >> TargetGUID;
|
||||
|
||||
uint8 reasonLen = _worldPacket.ReadBits(8);
|
||||
Reason = _worldPacket.ReadString(reasonLen);
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::GroupDecline::Write()
|
||||
{
|
||||
_worldPacket.WriteBits(Name.length(), 9);
|
||||
_worldPacket.FlushBits();
|
||||
_worldPacket.WriteString(Name);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::RequestPartyMemberStats::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
_worldPacket >> TargetGUID;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::PartyMemberStats::Write()
|
||||
{
|
||||
_worldPacket.WriteBit(ForEnemy);
|
||||
|
||||
_worldPacket << MemberStats;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::SetPartyLeader::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
_worldPacket >> TargetGUID;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::SetRole::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
_worldPacket >> TargetGUID;
|
||||
_worldPacket >> Role;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::RoleChangedInform::Write()
|
||||
{
|
||||
_worldPacket << PartyIndex;
|
||||
_worldPacket << From;
|
||||
_worldPacket << ChangedUnit;
|
||||
_worldPacket << OldRole;
|
||||
_worldPacket << NewRole;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::LeaveGroup::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::SetLootMethod::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
_worldPacket >> LootMethod;
|
||||
_worldPacket >> LootMasterGUID;
|
||||
_worldPacket >> LootThreshold;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::MinimapPingClient::Read()
|
||||
{
|
||||
_worldPacket >> PositionX;
|
||||
_worldPacket >> PositionY;
|
||||
_worldPacket >> PartyIndex;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::MinimapPing::Write()
|
||||
{
|
||||
_worldPacket << Sender;
|
||||
_worldPacket << PositionX;
|
||||
_worldPacket << PositionY;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::UpdateRaidTarget::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
_worldPacket >> Target;
|
||||
_worldPacket >> Symbol;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::SendRaidTargetUpdateSingle::Write()
|
||||
{
|
||||
_worldPacket << PartyIndex;
|
||||
_worldPacket << Symbol;
|
||||
_worldPacket << Target;
|
||||
_worldPacket << ChangedBy;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::SendRaidTargetUpdateAll::Write()
|
||||
{
|
||||
_worldPacket << PartyIndex;
|
||||
|
||||
_worldPacket << int32(TargetIcons.size());
|
||||
|
||||
std::map<uint8, ObjectGuid>::const_iterator itr;
|
||||
for (itr = TargetIcons.begin(); itr != TargetIcons.end(); itr++)
|
||||
{
|
||||
_worldPacket << itr->second;
|
||||
_worldPacket << itr->first;
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::ConvertRaid::Read()
|
||||
{
|
||||
Raid = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
void WorldPackets::Party::RequestPartyJoinUpdates::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::SetAssistantLeader::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
_worldPacket >> Target;
|
||||
Apply = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
void WorldPackets::Party::DoReadyCheck::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::ReadyCheckStarted::Write()
|
||||
{
|
||||
_worldPacket << PartyIndex;
|
||||
_worldPacket << PartyGUID;
|
||||
_worldPacket << InitiatorGUID;
|
||||
_worldPacket << Duration;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::ReadyCheckResponseClient::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
IsReady = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::ReadyCheckResponse::Write()
|
||||
{
|
||||
_worldPacket << PartyGUID;
|
||||
_worldPacket << Player;
|
||||
|
||||
_worldPacket.WriteBit(IsReady);
|
||||
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::ReadyCheckCompleted::Write()
|
||||
{
|
||||
_worldPacket << PartyIndex;
|
||||
_worldPacket << PartyGUID;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::OptOutOfLoot::Read()
|
||||
{
|
||||
PassOnLoot = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
void WorldPackets::Party::InitiateRolePoll::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::RolePollInform::Write()
|
||||
{
|
||||
_worldPacket << PartyIndex;
|
||||
_worldPacket << From;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::GroupNewLeader::Write()
|
||||
{
|
||||
_worldPacket << PartyIndex;
|
||||
_worldPacket.WriteBits(Name.size(), 6);
|
||||
_worldPacket.WriteString(Name);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::PartyUpdate::Write()
|
||||
{
|
||||
_worldPacket << PartyType;
|
||||
_worldPacket << PartyIndex;
|
||||
_worldPacket << PartyFlags;
|
||||
|
||||
_worldPacket << MyIndex;
|
||||
_worldPacket << PartyGUID;
|
||||
_worldPacket << SequenceNum;
|
||||
_worldPacket << LeaderGUID;
|
||||
|
||||
_worldPacket << PlayerList;
|
||||
|
||||
_worldPacket.WriteBit(LfgInfos.is_initialized());
|
||||
_worldPacket.WriteBit(LootSettings.is_initialized());
|
||||
_worldPacket.WriteBit(DifficultySettings.is_initialized());
|
||||
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
if (LfgInfos.is_initialized())
|
||||
_worldPacket << *LfgInfos;
|
||||
|
||||
if (LootSettings.is_initialized())
|
||||
_worldPacket << *LootSettings;
|
||||
|
||||
if (DifficultySettings.is_initialized())
|
||||
_worldPacket << *DifficultySettings;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::SetEveryoneIsAssistant::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
EveryoneIsAssistant = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
void WorldPackets::Party::ChangeSubGroup::Read()
|
||||
{
|
||||
_worldPacket >> TargetGUID;
|
||||
_worldPacket >> PartyIndex;
|
||||
_worldPacket >> NewSubGroup;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::SwapSubGroups::Read()
|
||||
{
|
||||
_worldPacket >> PartyIndex;
|
||||
_worldPacket >> FirstTarget;
|
||||
_worldPacket >> SecondTarget;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::ClearRaidMarker::Read()
|
||||
{
|
||||
_worldPacket >> MarkerId;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Party::RaidMarkersChanged::Write()
|
||||
{
|
||||
_worldPacket << PartyIndex;
|
||||
_worldPacket << ActiveMarkers;
|
||||
|
||||
_worldPacket.WriteBits(RaidMarkers.size(), 4);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
for (RaidMarker* raidMarker : RaidMarkers)
|
||||
{
|
||||
_worldPacket << raidMarker->TransportGUID;
|
||||
_worldPacket << raidMarker->Location.GetMapId();
|
||||
_worldPacket << raidMarker->Location.PositionXYZStream();
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Party::PartyMemberStats::Initialize(Player const* player)
|
||||
{
|
||||
ForEnemy = false;
|
||||
|
||||
MemberStats.GUID = player->GetGUID();
|
||||
|
||||
// Status
|
||||
MemberStats.Status = MEMBER_STATUS_ONLINE;
|
||||
|
||||
if (player->IsPvP())
|
||||
MemberStats.Status |= MEMBER_STATUS_PVP;
|
||||
|
||||
if (!player->IsAlive())
|
||||
{
|
||||
if (player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
|
||||
MemberStats.Status |= MEMBER_STATUS_GHOST;
|
||||
else
|
||||
MemberStats.Status |= MEMBER_STATUS_DEAD;
|
||||
}
|
||||
|
||||
if (player->IsFFAPvP())
|
||||
MemberStats.Status |= MEMBER_STATUS_PVP_FFA;
|
||||
|
||||
if (player->isAFK())
|
||||
MemberStats.Status |= MEMBER_STATUS_AFK;
|
||||
|
||||
if (player->isDND())
|
||||
MemberStats.Status |= MEMBER_STATUS_DND;
|
||||
|
||||
// Level
|
||||
MemberStats.Level = player->getLevel();
|
||||
|
||||
// Health
|
||||
MemberStats.CurrentHealth = player->GetHealth();
|
||||
MemberStats.MaxHealth = player->GetMaxHealth();
|
||||
|
||||
// Power
|
||||
MemberStats.PowerType = player->getPowerType();
|
||||
MemberStats.CurrentPower = player->GetPower(player->getPowerType());
|
||||
MemberStats.MaxPower = player->GetMaxPower(player->getPowerType());
|
||||
|
||||
// Position
|
||||
MemberStats.ZoneID = player->GetZoneId();
|
||||
MemberStats.PositionX = int16(player->GetPositionX());
|
||||
MemberStats.PositionY = int16(player->GetPositionY());
|
||||
MemberStats.PositionZ = int16(player->GetPositionZ());
|
||||
|
||||
// Unk
|
||||
MemberStats.Unk322 = 0; // Always 0
|
||||
MemberStats.Unk704[0] = 1; // Always 1
|
||||
MemberStats.Unk704[1] = 0; // Always 0
|
||||
MemberStats.Unk200000 = 0; // Always 0
|
||||
|
||||
MemberStats.Unk2000000 = 0;
|
||||
MemberStats.Unk4000000 = 0;
|
||||
|
||||
// Vehicle
|
||||
if (player->GetVehicle() && player->GetVehicle()->GetVehicleInfo())
|
||||
MemberStats.VehicleSeat = player->GetVehicle()->GetVehicleInfo()->SeatID[player->m_movementInfo.transport.seat];
|
||||
|
||||
// Auras
|
||||
for (uint8 i = 0; i < MAX_AURAS; ++i)
|
||||
{
|
||||
if (AuraApplication const* aurApp = player->GetVisibleAura(i))
|
||||
{
|
||||
WorldPackets::Party::GroupAura aura;
|
||||
|
||||
aura.SpellId = aurApp->GetBase()->GetId();
|
||||
aura.EffectMask = aurApp->GetEffectMask();
|
||||
aura.Scalings = aurApp->GetFlags(); // ??
|
||||
|
||||
if (aurApp->GetFlags() & AFLAG_SCALABLE)
|
||||
{
|
||||
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
{
|
||||
float scale = 0.f;
|
||||
if (AuraEffect const* eff = aurApp->GetBase()->GetEffect(i))
|
||||
scale = float(eff->GetAmount());
|
||||
aura.EffectScales.push_back(scale);
|
||||
}
|
||||
}
|
||||
|
||||
MemberStats.AuraList.push_back(aura);
|
||||
}
|
||||
}
|
||||
|
||||
// Phases
|
||||
std::set<uint32> const& phases = player->GetPhases();
|
||||
MemberStats.Phases.PhaseShiftFlags = 0x08 | (phases.size() ? 0x10 : 0);
|
||||
MemberStats.Phases.PersonalGUID = ObjectGuid::Empty;
|
||||
for (uint32 phaseId : phases)
|
||||
{
|
||||
WorldPackets::Party::GroupPhase phase;
|
||||
phase.Id = phaseId;
|
||||
phase.Flags = 1;
|
||||
MemberStats.Phases.List.push_back(phase);
|
||||
}
|
||||
|
||||
// Pet
|
||||
if (player->GetPet())
|
||||
{
|
||||
Pet* pet = player->GetPet();
|
||||
|
||||
MemberStats.PetStats = boost::in_place();
|
||||
|
||||
MemberStats.PetStats->GUID = pet->GetGUID();
|
||||
MemberStats.PetStats->Name = pet->GetName();
|
||||
MemberStats.PetStats->ModelId = pet->GetDisplayId();
|
||||
|
||||
MemberStats.PetStats->CurrentHealth = pet->GetHealth();
|
||||
MemberStats.PetStats->MaxHealth = pet->GetMaxHealth();
|
||||
|
||||
for (uint8 i = 0; i < MAX_AURAS; ++i)
|
||||
{
|
||||
if (AuraApplication const* aurApp = pet->GetVisibleAura(i))
|
||||
{
|
||||
WorldPackets::Party::GroupAura aura;
|
||||
|
||||
aura.SpellId = aurApp->GetBase()->GetId();
|
||||
aura.EffectMask = aurApp->GetEffectMask();
|
||||
aura.Scalings = aurApp->GetFlags(); // ??
|
||||
|
||||
if (aurApp->GetFlags() & AFLAG_SCALABLE)
|
||||
{
|
||||
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
{
|
||||
float scale = 0.f;
|
||||
if (AuraEffect const* eff = aurApp->GetBase()->GetEffect(i))
|
||||
scale = float(eff->GetAmount());
|
||||
aura.EffectScales.push_back(scale);
|
||||
}
|
||||
}
|
||||
|
||||
MemberStats.PetStats->AuraList.push_back(aura);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupPhase const& phase)
|
||||
{
|
||||
data << phase.Flags;
|
||||
data << phase.Id;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupPhases const& phases)
|
||||
{
|
||||
data << phases.PhaseShiftFlags;
|
||||
data << int32(phases.List.size());
|
||||
data << phases.PersonalGUID;
|
||||
|
||||
for (WorldPackets::Party::GroupPhase const& phase : phases.List)
|
||||
data << phase;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupAura const& aura)
|
||||
{
|
||||
data << aura.SpellId;
|
||||
data << aura.Scalings;
|
||||
data << aura.EffectMask;
|
||||
|
||||
data << int32(aura.EffectScales.size());
|
||||
for (float scale : aura.EffectScales)
|
||||
data << scale;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, std::vector<WorldPackets::Party::GroupAura> const& auraList)
|
||||
{
|
||||
data << int32(auraList.size());
|
||||
for (WorldPackets::Party::GroupAura const& aura : auraList)
|
||||
data << aura;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupPetStats const& petStats)
|
||||
{
|
||||
data << petStats.GUID;
|
||||
|
||||
data << petStats.ModelId;
|
||||
|
||||
data << petStats.CurrentHealth;
|
||||
data << petStats.MaxHealth;
|
||||
|
||||
data << petStats.AuraList;
|
||||
|
||||
data.WriteBits(petStats.Name.size(), 8);
|
||||
data.FlushBits();
|
||||
data.WriteString(petStats.Name);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupMemberStats const& memberStats)
|
||||
{
|
||||
data << memberStats.GUID;
|
||||
|
||||
for (uint8 i = 0; i < 2; i++)
|
||||
data << memberStats.Unk704[i];
|
||||
|
||||
data << memberStats.Status;
|
||||
|
||||
data << memberStats.PowerType;
|
||||
|
||||
data << memberStats.Unk322;
|
||||
|
||||
data << memberStats.CurrentHealth;
|
||||
data << memberStats.MaxHealth;
|
||||
|
||||
data << memberStats.CurrentPower;
|
||||
data << memberStats.MaxPower;
|
||||
|
||||
data << memberStats.Level;
|
||||
|
||||
data << memberStats.Unk200000;
|
||||
|
||||
data << memberStats.ZoneID;
|
||||
|
||||
data << memberStats.Unk2000000;
|
||||
data << memberStats.Unk4000000;
|
||||
|
||||
data << memberStats.PositionX;
|
||||
data << memberStats.PositionY;
|
||||
data << memberStats.PositionZ;
|
||||
|
||||
data << memberStats.VehicleSeat;
|
||||
|
||||
data << int32(memberStats.AuraList.size());
|
||||
|
||||
data << memberStats.Phases;
|
||||
|
||||
for (WorldPackets::Party::GroupAura const& aura : memberStats.AuraList)
|
||||
data << aura;
|
||||
|
||||
data.WriteBit(memberStats.PetStats.is_initialized());
|
||||
data.FlushBits();
|
||||
|
||||
if (memberStats.PetStats.is_initialized())
|
||||
data << *memberStats.PetStats;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, std::vector<WorldPackets::Party::GroupPlayerInfos> const& playerList)
|
||||
{
|
||||
data << int32(playerList.size());
|
||||
|
||||
for (WorldPackets::Party::GroupPlayerInfos const& playerInfos : playerList)
|
||||
data << playerInfos;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupPlayerInfos const& playerInfos)
|
||||
{
|
||||
data.WriteBits(playerInfos.Name.size(), 6);
|
||||
data.FlushBits();
|
||||
|
||||
data << playerInfos.GUID;
|
||||
data << playerInfos.Status;
|
||||
data << playerInfos.Subgroup;
|
||||
data << playerInfos.Flags;
|
||||
data << playerInfos.RolesAssigned;
|
||||
data << playerInfos.Class;
|
||||
|
||||
data.WriteString(playerInfos.Name);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupLfgInfos const& lfgInfos)
|
||||
{
|
||||
data << lfgInfos.MyFlags;
|
||||
data << lfgInfos.Slot;
|
||||
data << lfgInfos.MyRandomSlot;
|
||||
data << lfgInfos.MyPartialClear;
|
||||
data << lfgInfos.MyGearDiff;
|
||||
data << lfgInfos.MyStrangerCount;
|
||||
data << lfgInfos.MyKickVoteCount;
|
||||
data << lfgInfos.BootCount;
|
||||
|
||||
data.WriteBit(lfgInfos.Aborted);
|
||||
data.WriteBit(lfgInfos.MyFirstReward);
|
||||
data.FlushBits();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupLootSettings const& lootSettings)
|
||||
{
|
||||
data << lootSettings.Method;
|
||||
data << lootSettings.LootMaster;
|
||||
data << lootSettings.Threshold;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupDifficultySettings const& difficultySettings)
|
||||
{
|
||||
data << difficultySettings.DungeonDifficultyID;
|
||||
data << difficultySettings.RaidDifficultyID;
|
||||
data << difficultySettings.LegacyRaidDifficultyID;
|
||||
|
||||
return data;
|
||||
}
|
||||
@@ -0,0 +1,616 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef PartyPackets_h__
|
||||
#define PartyPackets_h__
|
||||
|
||||
#include "Packet.h"
|
||||
#include "ObjectGuid.h"
|
||||
#include "Group.h"
|
||||
|
||||
namespace WorldPackets
|
||||
{
|
||||
namespace Party
|
||||
{
|
||||
class PartyCommandResult final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
PartyCommandResult() : ServerPacket(SMSG_PARTY_COMMAND_RESULT, 23) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::string Name;
|
||||
uint8 Command = 0u;
|
||||
uint8 Result = 0u;
|
||||
uint32 ResultData = 0u;
|
||||
ObjectGuid ResultGUID;
|
||||
};
|
||||
|
||||
class PartyInviteClient final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
PartyInviteClient(WorldPacket&& packet) : ClientPacket(CMSG_PARTY_INVITE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
int32 ProposedRoles = 0;
|
||||
int32 TargetCfgRealmID = 0;
|
||||
std::string TargetName;
|
||||
std::string TargetRealm;
|
||||
ObjectGuid TargetGUID;
|
||||
};
|
||||
|
||||
class PartyInvite final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
PartyInvite() : ServerPacket(SMSG_PARTY_INVITE, 55) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
void Initialize(Player* const inviter, int32 proposedRoles, bool canAccept);
|
||||
|
||||
bool MightCRZYou = false;
|
||||
bool MustBeBNetFriend = false;
|
||||
bool AllowMultipleRoles = false;
|
||||
bool Unk2 = false;
|
||||
int16 Unk1 = 0;
|
||||
|
||||
bool CanAccept = false;
|
||||
|
||||
// Inviter
|
||||
ObjectGuid InviterGUID;
|
||||
ObjectGuid InviterBNetAccountId;
|
||||
std::string InviterName;
|
||||
|
||||
// Realm
|
||||
bool IsXRealm = false;
|
||||
bool IsLocal = true;
|
||||
uint32 InviterVirtualRealmAddress = 0u;
|
||||
std::string InviterRealmNameActual;
|
||||
std::string InviterRealmNameNormalized;
|
||||
|
||||
// Lfg
|
||||
int32 ProposedRoles = 0;
|
||||
int32 LfgCompletedMask = 0;
|
||||
std::vector<int32> LfgSlots;
|
||||
};
|
||||
|
||||
class PartyInviteResponse final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
PartyInviteResponse(WorldPacket&& packet) : ClientPacket(CMSG_PARTY_INVITE_RESPONSE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
bool Accept = false;
|
||||
Optional<int32> RolesDesired;
|
||||
};
|
||||
|
||||
class PartyUninvite final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
PartyUninvite(WorldPacket&& packet) : ClientPacket(CMSG_PARTY_UNINVITE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid TargetGUID;
|
||||
std::string Reason;
|
||||
};
|
||||
|
||||
class GroupDecline final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GroupDecline(std::string const& name) : ServerPacket(SMSG_GROUP_DECLINE, 2 + name.size()), Name(name) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::string Name;
|
||||
};
|
||||
|
||||
class RequestPartyMemberStats final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
RequestPartyMemberStats(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_PARTY_MEMBER_STATS, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid TargetGUID;
|
||||
};
|
||||
|
||||
struct GroupPhase
|
||||
{
|
||||
uint16 Flags = 0u;
|
||||
uint16 Id = 0u;
|
||||
};
|
||||
|
||||
struct GroupPhases
|
||||
{
|
||||
int32 PhaseShiftFlags = 0;
|
||||
ObjectGuid PersonalGUID;
|
||||
std::vector<GroupPhase> List;
|
||||
};
|
||||
|
||||
struct GroupAura
|
||||
{
|
||||
uint32 SpellId = 0u;
|
||||
uint8 Scalings = 0;
|
||||
uint32 EffectMask = 0u;
|
||||
std::vector<float> EffectScales;
|
||||
};
|
||||
|
||||
struct GroupPetStats
|
||||
{
|
||||
ObjectGuid GUID;
|
||||
std::string Name;
|
||||
int16 ModelId = 0;
|
||||
|
||||
int32 CurrentHealth = 0;
|
||||
int32 MaxHealth = 0;
|
||||
|
||||
std::vector<GroupAura> AuraList;
|
||||
};
|
||||
|
||||
struct GroupMemberStats
|
||||
{
|
||||
ObjectGuid GUID;
|
||||
int16 Level = 0;
|
||||
int16 Status = 0;
|
||||
|
||||
int32 CurrentHealth = 0;
|
||||
int32 MaxHealth;
|
||||
|
||||
uint8 PowerType = 0u;
|
||||
int16 CurrentPower = 0;
|
||||
int16 MaxPower = 0;
|
||||
|
||||
int16 ZoneID = 0;
|
||||
int16 PositionX = 0;
|
||||
int16 PositionY = 0;
|
||||
int16 PositionZ = 0;
|
||||
|
||||
int32 VehicleSeat = 0;
|
||||
|
||||
GroupPhases Phases;
|
||||
std::vector<GroupAura> AuraList;
|
||||
Optional<GroupPetStats> PetStats;
|
||||
|
||||
int16 Unk322 = 0;
|
||||
int16 Unk200000 = 0;
|
||||
int16 Unk2000000 = 0;
|
||||
int32 Unk4000000 = 0;
|
||||
int8 Unk704[2];
|
||||
};
|
||||
|
||||
class PartyMemberStats final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
PartyMemberStats() : ServerPacket(SMSG_PARTY_MEMBER_STATE, 80) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
void Initialize(Player const* player);
|
||||
|
||||
GroupMemberStats MemberStats;
|
||||
bool ForEnemy = false;
|
||||
};
|
||||
|
||||
class SetPartyLeader final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
SetPartyLeader(WorldPacket&& packet) : ClientPacket(CMSG_SET_PARTY_LEADER, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid TargetGUID;
|
||||
};
|
||||
|
||||
class SetRole final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
SetRole(WorldPacket&& packet) : ClientPacket(CMSG_SET_ROLE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid TargetGUID;
|
||||
int32 Role = 0;
|
||||
};
|
||||
|
||||
class RoleChangedInform final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
RoleChangedInform() : ServerPacket(SMSG_ROLE_CHANGED_INFORM, 41) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid From;
|
||||
ObjectGuid ChangedUnit;
|
||||
int32 OldRole = 0;
|
||||
int32 NewRole = 0;
|
||||
};
|
||||
|
||||
class LeaveGroup final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
LeaveGroup(WorldPacket&& packet) : ClientPacket(CMSG_LEAVE_GROUP, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
};
|
||||
|
||||
class SetLootMethod final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
SetLootMethod(WorldPacket&& packet) : ClientPacket(CMSG_SET_LOOT_METHOD, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid LootMasterGUID;
|
||||
uint8 LootMethod = 0u;
|
||||
uint32 LootThreshold = 0u;
|
||||
};
|
||||
|
||||
class MinimapPingClient final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
MinimapPingClient(WorldPacket&& packet) : ClientPacket(CMSG_MINIMAP_PING, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
float PositionX = 0.f;
|
||||
float PositionY = 0.f;
|
||||
};
|
||||
|
||||
class MinimapPing final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
MinimapPing() : ServerPacket(SMSG_MINIMAP_PING, 24) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid Sender;
|
||||
float PositionX = 0.f;
|
||||
float PositionY = 0.f;
|
||||
};
|
||||
|
||||
class UpdateRaidTarget final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
UpdateRaidTarget(WorldPacket&& packet) : ClientPacket(CMSG_UPDATE_RAID_TARGET, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid Target;
|
||||
int8 Symbol = 0;
|
||||
};
|
||||
|
||||
class SendRaidTargetUpdateSingle final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
SendRaidTargetUpdateSingle() : ServerPacket(SMSG_SEND_RAID_TARGET_UPDATE_SINGLE, 34) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid Target;
|
||||
ObjectGuid ChangedBy;
|
||||
int8 Symbol = 0;
|
||||
};
|
||||
|
||||
class SendRaidTargetUpdateAll final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
SendRaidTargetUpdateAll() : ServerPacket(SMSG_SEND_RAID_TARGET_UPDATE_ALL, 1 + TARGET_ICONS_COUNT * (1 + 16)) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
std::map<uint8, ObjectGuid> TargetIcons;
|
||||
};
|
||||
|
||||
class ConvertRaid final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
ConvertRaid(WorldPacket&& packet) : ClientPacket(CMSG_CONVERT_RAID, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
bool Raid = false;
|
||||
};
|
||||
|
||||
class RequestPartyJoinUpdates final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
RequestPartyJoinUpdates(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_PARTY_JOIN_UPDATES, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
};
|
||||
|
||||
class SetAssistantLeader final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
SetAssistantLeader(WorldPacket&& packet) : ClientPacket(CMSG_SET_ASSISTANT_LEADER, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Target;
|
||||
int8 PartyIndex = 0;
|
||||
bool Apply = false;
|
||||
};
|
||||
|
||||
class DoReadyCheck final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
DoReadyCheck(WorldPacket&& packet) : ClientPacket(CMSG_DO_READY_CHECK, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
};
|
||||
|
||||
class ReadyCheckStarted final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
ReadyCheckStarted() : ServerPacket(SMSG_READY_CHECK_STARTED, 37) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid PartyGUID;
|
||||
ObjectGuid InitiatorGUID;
|
||||
uint32 Duration = 0u;
|
||||
};
|
||||
|
||||
class ReadyCheckResponseClient final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
ReadyCheckResponseClient(WorldPacket&& packet) : ClientPacket(CMSG_READY_CHECK_RESPONSE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
bool IsReady = false;
|
||||
};
|
||||
|
||||
class ReadyCheckResponse final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
ReadyCheckResponse() : ServerPacket(SMSG_READY_CHECK_RESPONSE, 19) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid PartyGUID;
|
||||
ObjectGuid Player;
|
||||
bool IsReady = false;
|
||||
};
|
||||
|
||||
class ReadyCheckCompleted final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
ReadyCheckCompleted() : ServerPacket(SMSG_READY_CHECK_COMPLETED, 17) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid PartyGUID;
|
||||
};
|
||||
|
||||
class RequestRaidInfo final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
RequestRaidInfo(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_RAID_INFO, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class OptOutOfLoot final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
OptOutOfLoot(WorldPacket&& packet) : ClientPacket(CMSG_OPT_OUT_OF_LOOT, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
bool PassOnLoot = false;
|
||||
};
|
||||
|
||||
class InitiateRolePoll final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
InitiateRolePoll(WorldPacket&& packet) : ClientPacket(CMSG_INITIATE_ROLE_POLL, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
};
|
||||
|
||||
class RolePollInform final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
RolePollInform() : ServerPacket(SMSG_ROLE_POLL_INFORM, 17) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
ObjectGuid From;
|
||||
};
|
||||
|
||||
class GroupNewLeader final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GroupNewLeader() : ServerPacket(SMSG_GROUP_NEW_LEADER, 14) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
std::string Name;
|
||||
};
|
||||
|
||||
struct GroupPlayerInfos
|
||||
{
|
||||
ObjectGuid GUID;
|
||||
std::string Name;
|
||||
uint8 Class = 0;
|
||||
|
||||
uint8 Status = 0u;
|
||||
uint8 Subgroup = 0u;
|
||||
uint8 Flags = 0u;
|
||||
uint8 RolesAssigned = 0u;
|
||||
};
|
||||
|
||||
struct GroupLfgInfos
|
||||
{
|
||||
int32 Slot = 0u;
|
||||
int8 BootCount = 0;
|
||||
|
||||
bool Aborted = false;
|
||||
|
||||
int32 MyRandomSlot = 0;
|
||||
uint8 MyFlags = 0u;
|
||||
uint8 MyPartialClear = 0u;
|
||||
float MyGearDiff = 0.f;
|
||||
|
||||
int8 MyStrangerCount = 0;
|
||||
int8 MyKickVoteCount = 0;
|
||||
|
||||
bool MyFirstReward = false;
|
||||
};
|
||||
|
||||
struct GroupLootSettings
|
||||
{
|
||||
uint8 Method = 0u;
|
||||
ObjectGuid LootMaster;
|
||||
uint8 Threshold = 0u;
|
||||
};
|
||||
|
||||
struct GroupDifficultySettings
|
||||
{
|
||||
uint32 DungeonDifficultyID = 0u;
|
||||
uint32 RaidDifficultyID = 0u;
|
||||
uint32 LegacyRaidDifficultyID = 0u;
|
||||
};
|
||||
|
||||
class PartyUpdate final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
PartyUpdate() : ServerPacket(SMSG_PARTY_UPDATE, 200) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int8 PartyFlags = 0;
|
||||
int8 PartyIndex = 0;
|
||||
int8 PartyType = 0;
|
||||
|
||||
ObjectGuid PartyGUID;
|
||||
ObjectGuid LeaderGUID;
|
||||
|
||||
int32 MyIndex = 0;
|
||||
int32 SequenceNum = 0;
|
||||
|
||||
std::vector<GroupPlayerInfos> PlayerList;
|
||||
|
||||
Optional<GroupLfgInfos> LfgInfos;
|
||||
Optional<GroupLootSettings> LootSettings;
|
||||
Optional<GroupDifficultySettings> DifficultySettings;
|
||||
};
|
||||
|
||||
class SetEveryoneIsAssistant final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
SetEveryoneIsAssistant(WorldPacket&& packet) : ClientPacket(CMSG_SET_EVERYONE_IS_ASSISTANT, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
bool EveryoneIsAssistant = false;
|
||||
};
|
||||
|
||||
class ChangeSubGroup final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
ChangeSubGroup(WorldPacket&& packet) : ClientPacket(CMSG_CHANGE_SUB_GROUP, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid TargetGUID;
|
||||
int8 PartyIndex = 0;
|
||||
uint8 NewSubGroup = 0u;
|
||||
};
|
||||
|
||||
class SwapSubGroups final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
SwapSubGroups(WorldPacket&& packet) : ClientPacket(CMSG_SWAP_SUB_GROUPS, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid FirstTarget;
|
||||
ObjectGuid SecondTarget;
|
||||
int8 PartyIndex = 0;
|
||||
};
|
||||
|
||||
class ClearRaidMarker final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
ClearRaidMarker(WorldPacket&& packet) : ClientPacket(CMSG_CLEAR_RAID_MARKER, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
uint8 MarkerId = 0u;
|
||||
};
|
||||
|
||||
class RaidMarkersChanged final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
RaidMarkersChanged() : ServerPacket(SMSG_RAID_MARKERS_CHANGED, 6) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int8 PartyIndex = 0;
|
||||
uint32 ActiveMarkers = 0u;
|
||||
|
||||
std::vector<RaidMarker*> RaidMarkers;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupPhase const& phase);
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupPhases const& phases);
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupAura const& aura);
|
||||
ByteBuffer& operator<<(ByteBuffer& data, std::vector<WorldPackets::Party::GroupAura> const& auraList);
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupPetStats const& petStats);
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupMemberStats const& memberStats);
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, std::vector<WorldPackets::Party::GroupPlayerInfos> const& playerList);
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupPlayerInfos const& playerInfos);
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupLfgInfos const& lfgInfos);
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupLootSettings const& lootSettings);
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::GroupDifficultySettings const& difficultySettings);
|
||||
|
||||
#endif // PartyPackets_h__
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "Packets/GameObjectPackets.h"
|
||||
#include "Packets/GarrisonPackets.h"
|
||||
#include "Packets/GuildPackets.h"
|
||||
#include "Packets/PartyPackets.h"
|
||||
#include "Packets/InspectPackets.h"
|
||||
#include "Packets/InstancePackets.h"
|
||||
#include "Packets/ItemPackets.h"
|
||||
@@ -259,7 +260,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_CHALLENGE_MODE_REQUEST_MAP_STATS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_MONUMENT_APPEARANCE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHANGE_SUB_GROUP, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGroupChangeSubGroupOpcode );
|
||||
DEFINE_HANDLER(CMSG_CHANGE_SUB_GROUP, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::ChangeSubGroup, &WorldSession::HandleChangeSubGroupOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHARACTER_RENAME_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::CharacterRenameRequest, &WorldSession::HandleCharRenameOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAR_CUSTOMIZE, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::CharCustomize, &WorldSession::HandleCharCustomizeOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAR_DELETE, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::CharDelete, &WorldSession::HandleCharDeleteOpcode);
|
||||
@@ -315,7 +316,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_CHECK_RAF_EMAIL_ENABLED, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHOICE_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLEAR_RAID_MARKER, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CLEAR_RAID_MARKER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::ClearRaidMarker, &WorldSession::HandleClearRaidMarker);
|
||||
DEFINE_HANDLER(CMSG_CLEAR_TRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Trade::ClearTradeItem, &WorldSession::HandleClearTradeItemOpcode);
|
||||
DEFINE_HANDLER(CMSG_CLIENT_PORT_GRAVEYARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::PortGraveyard, &WorldSession::HandlePortGraveyard);
|
||||
DEFINE_HANDLER(CMSG_CLOSE_INTERACTION, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
@@ -331,7 +332,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_COMPLETE_MOVIE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_CONFIRM_RESPEC_WIPE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleConfirmRespecWipeOpcode );
|
||||
DEFINE_HANDLER(CMSG_CONNECT_TO_FAILED, STATUS_NEVER, PROCESS_INPLACE, WorldPacket, &WorldSession::Handle_EarlyProccess);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_CONVERT_RAID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGroupRaidConvertOpcode );
|
||||
DEFINE_HANDLER(CMSG_CONVERT_RAID, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::ConvertRaid, &WorldSession::HandleConvertRaidOpcode);
|
||||
DEFINE_HANDLER(CMSG_CREATE_CHARACTER, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::CreateCharacter, &WorldSession::HandleCharCreateOpcode);
|
||||
DEFINE_HANDLER(CMSG_CREATE_SHIPMENT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_DB_QUERY_BULK, STATUS_AUTHED, PROCESS_INPLACE, WorldPackets::Query::DBQueryBulk, &WorldSession::HandleDBQueryBulk);
|
||||
@@ -357,7 +358,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_DISCARDED_TIME_SYNC_ACKS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_DISMISS_CRITTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleDismissCritter );
|
||||
DEFINE_HANDLER(CMSG_DO_MASTER_LOOT_ROLL, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_DO_READY_CHECK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRaidReadyCheckOpcode );
|
||||
DEFINE_HANDLER(CMSG_DO_READY_CHECK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::DoReadyCheck, &WorldSession::HandleDoReadyCheckOpcode);
|
||||
DEFINE_HANDLER(CMSG_DUEL_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Duel::DuelResponse, &WorldSession::HandleDuelResponseOpcode);
|
||||
DEFINE_HANDLER(CMSG_EJECT_PASSENGER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Vehicle::EjectPassenger, &WorldSession::HandleEjectPassenger);
|
||||
DEFINE_HANDLER(CMSG_EMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::EmoteClient, &WorldSession::HandleEmoteOpcode);
|
||||
@@ -458,7 +459,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_HEARTH_AND_RESURRECT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Battleground::HearthAndResurrect, &WorldSession::HandleHearthAndResurrect);
|
||||
DEFINE_HANDLER(CMSG_IGNORE_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Trade::IgnoreTrade, &WorldSession::HandleIgnoreTradeOpcode);
|
||||
DEFINE_HANDLER(CMSG_INCREASE_CAST_TIME_FOR_SPELL, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_INITIATE_ROLE_POLL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRolePollBeginOpcode);
|
||||
DEFINE_HANDLER(CMSG_INITIATE_ROLE_POLL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::InitiateRolePoll, &WorldSession::HandleInitiateRolePoll);
|
||||
DEFINE_HANDLER(CMSG_INITIATE_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Trade::InitiateTrade, &WorldSession::HandleInitiateTradeOpcode);
|
||||
DEFINE_HANDLER(CMSG_INSPECT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Inspect::Inspect, &WorldSession::HandleInspectOpcode);
|
||||
DEFINE_HANDLER(CMSG_INSPECT_PVP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Inspect::InspectPVPRequest, &WorldSession::HandleInspectPVP);
|
||||
@@ -471,7 +472,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_KEYBOUND_OVERRIDE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_LEARN_PET_SPECIALIZATION_GROUP, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_LEARN_TALENTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Talent::LearnTalents, &WorldSession::HandleLearnTalentsOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_LEAVE_GROUP, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGroupDisbandOpcode );
|
||||
DEFINE_HANDLER(CMSG_LEAVE_GROUP, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::LeaveGroup, &WorldSession::HandleLeaveGroupOpcode);
|
||||
DEFINE_HANDLER(CMSG_LEAVE_PET_BATTLE_QUEUE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_LFG_LIST_APPLY_TO_GROUP, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_LFG_LIST_CANCEL_APPLICATION, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
@@ -514,7 +515,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_MAIL_TAKE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailTakeItem, &WorldSession::HandleMailTakeItem);
|
||||
DEFINE_HANDLER(CMSG_MAIL_TAKE_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailTakeMoney, &WorldSession::HandleMailTakeMoney);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_MASTER_LOOT_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLootMasterGiveOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_MINIMAP_PING, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMinimapPingOpcode );
|
||||
DEFINE_HANDLER(CMSG_MINIMAP_PING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::MinimapPingClient, &WorldSession::HandleMinimapPingOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_MISSILE_TRAJECTORY_COLLISION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateProjectilePosition );
|
||||
DEFINE_HANDLER(CMSG_MOUNT_SET_FAVORITE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_MOUNT_SPECIAL_ANIM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMountSpecialAnimOpcode );
|
||||
@@ -590,10 +591,10 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_OPEN_MISSION_NPC, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_OPEN_SHIPMENT_NPC, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_OPEN_TRADESKILL_NPC, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_OPT_OUT_OF_LOOT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleOptOutOfLootOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_PARTY_INVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupInviteOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_PARTY_INVITE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupInviteResponseOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_PARTY_UNINVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupUninviteOpcode );
|
||||
DEFINE_HANDLER(CMSG_OPT_OUT_OF_LOOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::OptOutOfLoot, &WorldSession::HandleOptOutOfLootOpcode);
|
||||
DEFINE_HANDLER(CMSG_PARTY_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::PartyInviteClient, &WorldSession::HandlePartyInviteOpcode);
|
||||
DEFINE_HANDLER(CMSG_PARTY_INVITE_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::PartyInviteResponse, &WorldSession::HandlePartyInviteResponseOpcode);
|
||||
DEFINE_HANDLER(CMSG_PARTY_UNINVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::PartyUninvite, &WorldSession::HandlePartyUninviteOpcode);
|
||||
DEFINE_HANDLER(CMSG_PETITION_BUY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::PetitionBuy, &WorldSession::HandlePetitionBuy);
|
||||
DEFINE_HANDLER(CMSG_PETITION_RENAME_GUILD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::PetitionRenameGuild, &WorldSession::HandlePetitionRenameGuild);
|
||||
DEFINE_HANDLER(CMSG_PETITION_SHOW_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::PetitionShowList, &WorldSession::HandlePetitionShowList);
|
||||
@@ -655,7 +656,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUEST_PUSH_RESULT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestPushResult );
|
||||
DEFINE_HANDLER(CMSG_QUEUED_MESSAGES_END, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_RANDOM_ROLL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::RandomRollClient, &WorldSession::HandleRandomRollOpcode);
|
||||
DEFINE_HANDLER(CMSG_READY_CHECK_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_READY_CHECK_RESPONSE, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::ReadyCheckResponseClient, &WorldSession::HandleReadyCheckResponseOpcode);
|
||||
DEFINE_HANDLER(CMSG_READ_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::ReadItem, &WorldSession::HandleReadItem);
|
||||
DEFINE_HANDLER(CMSG_RECLAIM_CORPSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::ReclaimCorpse, &WorldSession::HandleReclaimCorpse);
|
||||
DEFINE_HANDLER(CMSG_RECRUIT_A_FRIEND, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
@@ -676,12 +677,12 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_REQUEST_GUILD_REWARDS_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Guild::RequestGuildRewardsList, &WorldSession::HandleRequestGuildRewardsList);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_HONOR_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Inspect::RequestHonorStats, &WorldSession::HandleRequestHonorStatsOpcode);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_LFG_LIST_BLACKLIST, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_PARTY_JOIN_UPDATES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupRequestJoinUpdates);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_PARTY_MEMBER_STATS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPartyMemberStatsOpcode);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_PARTY_JOIN_UPDATES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::RequestPartyJoinUpdates, &WorldSession::HandleRequestPartyJoinUpdates);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_PARTY_MEMBER_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::RequestPartyMemberStats, &WorldSession::HandleRequestPartyMemberStatsOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_PET_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPetInfoOpcode );
|
||||
DEFINE_HANDLER(CMSG_REQUEST_PLAYED_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::RequestPlayedTime, &WorldSession::HandlePlayedTime);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_PVP_REWARDS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleRequestPvpReward );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_RAID_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestRaidInfoOpcode );
|
||||
DEFINE_HANDLER(CMSG_REQUEST_RAID_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::RequestRaidInfo, &WorldSession::HandleRequestRaidInfoOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_RATED_BATTLEFIELD_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestRatedBattlefieldInfo);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_RESEARCH_HISTORY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_STABLED_PETS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleListStabledPetsOpcode );
|
||||
@@ -695,7 +696,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_RESURRECT_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::ResurrectResponse, &WorldSession::HandleResurrectResponse);
|
||||
DEFINE_HANDLER(CMSG_REVERT_MONUMENT_APPEARANCE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_RIDE_VEHICLE_INTERACT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Vehicle::RideVehicleInteract, &WorldSession::HandleRideVehicleInteract);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SAVE_CUF_PROFILES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleSaveCUFProfiles );
|
||||
DEFINE_HANDLER(CMSG_SAVE_CUF_PROFILES, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Misc::SaveCUFProfiles, &WorldSession::HandleSaveCUFProfiles);
|
||||
DEFINE_HANDLER(CMSG_SAVE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::EquipmentSet::SaveEquipmentSet, &WorldSession::HandleEquipmentSetSave);
|
||||
DEFINE_HANDLER(CMSG_SAVE_GUILD_EMBLEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::SaveGuildEmblem, &WorldSession::HandleSaveGuildEmblem);
|
||||
DEFINE_HANDLER(CMSG_SCENE_PLAYBACK_CANCELED, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Scenes::ScenePlaybackCanceled, &WorldSession::HandleScenePlaybackCanceled);
|
||||
@@ -716,7 +717,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_SET_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Movement::SetActiveMover, &WorldSession::HandleSetActiveMoverOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_ACTIVE_VOICE_CHANNEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActiveVoiceChannel );
|
||||
DEFINE_HANDLER(CMSG_SET_ADVANCED_COMBAT_LOGGING, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_ASSISTANT_LEADER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGroupAssistantLeaderOpcode);
|
||||
DEFINE_HANDLER(CMSG_SET_ASSISTANT_LEADER, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::SetAssistantLeader, &WorldSession::HandleSetAssistantLeaderOpcode);
|
||||
DEFINE_HANDLER(CMSG_SET_BACKPACK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_BANK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_BANK_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
@@ -724,22 +725,22 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_SET_CURRENCY_FLAGS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_DIFFICULTY_ID, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_DUNGEON_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::SetDungeonDifficulty, &WorldSession::HandleSetDungeonDifficultyOpcode);
|
||||
DEFINE_HANDLER(CMSG_SET_EVERYONE_IS_ASSISTANT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_EVERYONE_IS_ASSISTANT, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::SetEveryoneIsAssistant, &WorldSession::HandleSetEveryoneIsAssistant);
|
||||
DEFINE_HANDLER(CMSG_SET_FACTION_AT_WAR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::SetFactionAtWar, &WorldSession::HandleSetFactionAtWar);
|
||||
DEFINE_HANDLER(CMSG_SET_FACTION_INACTIVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::SetFactionInactive, &WorldSession::HandleSetFactionInactiveOpcode);
|
||||
DEFINE_HANDLER(CMSG_SET_FACTION_NOT_AT_WAR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::SetFactionNotAtWar, &WorldSession::HandleSetFactionNotAtWar);
|
||||
DEFINE_HANDLER(CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_LFG_BONUS_FACTION_ID, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_LOOT_METHOD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLootMethodOpcode );
|
||||
DEFINE_HANDLER(CMSG_SET_LOOT_METHOD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::SetLootMethod, &WorldSession::HandleSetLootMethodOpcode);
|
||||
DEFINE_HANDLER(CMSG_SET_LOOT_SPECIALIZATION, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_PARTY_ASSIGNMENT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePartyAssignmentOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_PARTY_LEADER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGroupSetLeaderOpcode );
|
||||
DEFINE_HANDLER(CMSG_SET_PARTY_LEADER, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::SetPartyLeader, &WorldSession::HandleSetPartyLeaderOpcode);
|
||||
DEFINE_HANDLER(CMSG_SET_PET_SLOT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_PLAYER_DECLINED_NAMES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetPlayerDeclinedNames );
|
||||
DEFINE_HANDLER(CMSG_SET_PREFERRED_CEMETERY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_PVP, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_RAID_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::SetRaidDifficulty, &WorldSession::HandleSetRaidDifficultyOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_ROLE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGroupSetRolesOpcode );
|
||||
DEFINE_HANDLER(CMSG_SET_ROLE, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::SetRole, &WorldSession::HandleSetRoleOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_SAVED_INSTANCE_EXTEND, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetSavedInstanceExtend );
|
||||
DEFINE_HANDLER(CMSG_SET_SELECTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::SetSelection, &WorldSession::HandleSetSelectionOpcode);
|
||||
DEFINE_HANDLER(CMSG_SET_SHEATHED, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Combat::SetSheathed, &WorldSession::HandleSetSheathedOpcode);
|
||||
@@ -775,7 +776,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_SUSPEND_TOKEN_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SWAP_INV_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::SwapInvItem, &WorldSession::HandleSwapInvItemOpcode);
|
||||
DEFINE_HANDLER(CMSG_SWAP_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::SwapItem, &WorldSession::HandleSwapItem);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_SWAP_SUB_GROUPS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGroupSwapSubGroupOpcode );
|
||||
DEFINE_HANDLER(CMSG_SWAP_SUB_GROUPS, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::SwapSubGroups, &WorldSession::HandleSwapSubGroupsOpcode);
|
||||
DEFINE_HANDLER(CMSG_SWAP_VOID_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::VoidStorage::SwapVoidItem, &WorldSession::HandleVoidSwapItem);
|
||||
DEFINE_HANDLER(CMSG_TABARD_VENDOR_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleTabardVendorActivateOpcode);
|
||||
DEFINE_HANDLER(CMSG_TALK_TO_GOSSIP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleGossipHelloOpcode);
|
||||
@@ -809,7 +810,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::ClientConfig::UserClientUpdateAccountData, &WorldSession::HandleUpdateAccountData);
|
||||
DEFINE_HANDLER(CMSG_UPDATE_CLIENT_SETTINGS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_UPDATE_MISSILE_TRAJECTORY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateMissileTrajectory );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_UPDATE_RAID_TARGET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRaidTargetUpdateOpcode );
|
||||
DEFINE_HANDLER(CMSG_UPDATE_RAID_TARGET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::UpdateRaidTarget, &WorldSession::HandleUpdateRaidTargetOpcode);
|
||||
DEFINE_HANDLER(CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Token::UpdateListedAuctionableTokens, &WorldSession::HandleUpdateListedAuctionableTokens);
|
||||
DEFINE_HANDLER(CMSG_UPDATE_WOW_TOKEN_COUNT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_UPGRADE_GARRISON, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
@@ -1169,10 +1170,10 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_POI, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_ACTION_THROTTLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DECLINE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DESTROYED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_NEW_LEADER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_UNINVITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DECLINE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DESTROYED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_NEW_LEADER, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_UNINVITE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_EARNED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_MEMBERS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1248,7 +1249,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_TIMER_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_GROUP_SIZE_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_INFO, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_RESET_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_SAVE_CREATED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1298,7 +1299,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_CHARACTER_COPY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_CUF_PROFILES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_CUF_PROFILES, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_EQUIPMENT_SET, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_SELECTED_TROPHY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_SET_TIME_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
@@ -1327,7 +1328,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJ_EVENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MASTER_LOOT_CANDIDATE_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MESSAGE_BOX, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MINIMAP_PING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MINIMAP_PING, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_COMPONENTED_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_CREATURE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MISSILE_CANCEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1431,11 +1432,11 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_SHIPMENT_NPC_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OVERRIDE_LIGHT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PAGE_TEXT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_COMMAND_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_INVITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_INVITE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_KILL_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_STATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PAUSE_MIRROR_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PENDING_RAID_LOCK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_ALREADY_SIGNED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1539,12 +1540,12 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_DIFFICULTY_SET, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_GROUP_ONLY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_INSTANCE_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_MARKERS_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_MARKERS_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RANDOM_ROLL, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RATED_BATTLEFIELD_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_STARTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_COMPLETED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_STARTED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_OK, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_QUERY_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1573,9 +1574,9 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_TOKEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESURRECT_REQUEST, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESYNC_RUNES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_CHANGED_INFORM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_CHANGED_INFORM, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_CHOSEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_POLL_INFORM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_POLL_INFORM, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RUNE_REGEN_DEBUG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SCENARIO_BOOT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SCENARIO_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
@@ -1594,8 +1595,8 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SELL_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_ITEM_PASSIVES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_KNOWN_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_RAID_TARGET_UPDATE_ALL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_RAID_TARGET_UPDATE_SINGLE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_RAID_TARGET_UPDATE_ALL, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_RAID_TARGET_UPDATE_SINGLE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_SPELL_CHARGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_SPELL_HISTORY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_UNLEARN_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
|
||||
@@ -171,6 +171,9 @@ namespace WorldPackets
|
||||
class ChannelPlayerCommand;
|
||||
class JoinChannel;
|
||||
class LeaveChannel;
|
||||
class UserlistAdd;
|
||||
class UserlistRemove;
|
||||
class UserlistUpdate;
|
||||
}
|
||||
|
||||
namespace Chat
|
||||
@@ -275,6 +278,11 @@ namespace WorldPackets
|
||||
class RequestHonorStats;
|
||||
}
|
||||
|
||||
namespace Instance
|
||||
{
|
||||
class InstanceInfo;
|
||||
}
|
||||
|
||||
namespace Item
|
||||
{
|
||||
class AutoEquipItem;
|
||||
@@ -338,6 +346,8 @@ namespace WorldPackets
|
||||
class CompleteCinematic;
|
||||
class NextCinematicCamera;
|
||||
class FarSight;
|
||||
class LoadCUFProfiles;
|
||||
class SaveCUFProfiles;
|
||||
}
|
||||
|
||||
namespace Movement
|
||||
@@ -360,6 +370,47 @@ namespace WorldPackets
|
||||
class TrainerBuySpell;
|
||||
}
|
||||
|
||||
namespace Party
|
||||
{
|
||||
class PartyCommandResult;
|
||||
class PartyInviteClient;
|
||||
class PartyInvite;
|
||||
class PartyInviteResponse;
|
||||
class PartyUninvite;
|
||||
class GroupDecline;
|
||||
class RequestPartyMemberStats;
|
||||
class PartyMemberStats;
|
||||
class SetPartyLeader;
|
||||
class SetRole;
|
||||
class RoleChangedInform;
|
||||
class SetLootMethod;
|
||||
class LeaveGroup;
|
||||
class MinimapPingClient;
|
||||
class MinimapPing;
|
||||
class UpdateRaidTarget;
|
||||
class SendRaidTargetUpdateSingle;
|
||||
class SendRaidTargetUpdateAll;
|
||||
class ConvertRaid;
|
||||
class RequestPartyJoinUpdates;
|
||||
class SetAssistantLeader;
|
||||
class DoReadyCheck;
|
||||
class ReadyCheckStarted;
|
||||
class ReadyCheckResponseClient;
|
||||
class ReadyCheckResponse;
|
||||
class ReadyCheckCompleted;
|
||||
class RequestRaidInfo;
|
||||
class OptOutOfLoot;
|
||||
class InitiateRolePoll;
|
||||
class RolePollInform;
|
||||
class GroupNewLeader;
|
||||
class PartyUpdate;
|
||||
class SetEveryoneIsAssistant;
|
||||
class ChangeSubGroup;
|
||||
class SwapSubGroups;
|
||||
class RaidMarkersChanged;
|
||||
class ClearRaidMarker;
|
||||
}
|
||||
|
||||
namespace Petition
|
||||
{
|
||||
class DeclinePetition;
|
||||
@@ -855,8 +906,6 @@ class WorldSession
|
||||
void SendNotInArenaTeamPacket(uint8 type);
|
||||
void SendPetitionShowList(ObjectGuid guid);
|
||||
|
||||
void BuildPartyMemberStatsChangedPacket(Player* player, WorldPacket* data);
|
||||
|
||||
void DoLootRelease(ObjectGuid lguid);
|
||||
|
||||
// Account mute time
|
||||
@@ -1051,28 +1100,31 @@ class WorldSession
|
||||
void HandleMoveTimeSkippedOpcode(WorldPackets::Movement::MoveTimeSkipped& moveTimeSkipped);
|
||||
void HandleMovementAckMessage(WorldPackets::Movement::MovementAckMessage& movementAck);
|
||||
|
||||
void HandleRequestRaidInfoOpcode(WorldPacket& recvData);
|
||||
void HandleRequestRaidInfoOpcode(WorldPackets::Party::RequestRaidInfo& packet);
|
||||
|
||||
void HandleGroupInviteOpcode(WorldPacket& recvPacket);
|
||||
void HandlePartyInviteOpcode(WorldPackets::Party::PartyInviteClient& packet);
|
||||
//void HandleGroupCancelOpcode(WorldPacket& recvPacket);
|
||||
void HandleGroupInviteResponseOpcode(WorldPacket& recvPacket);
|
||||
void HandleGroupUninviteOpcode(WorldPacket& recvPacket);
|
||||
void HandleGroupSetLeaderOpcode(WorldPacket& recvPacket);
|
||||
void HandleGroupSetRolesOpcode(WorldPacket& recvData);
|
||||
void HandleGroupDisbandOpcode(WorldPacket& recvPacket);
|
||||
void HandleOptOutOfLootOpcode(WorldPacket& recvData);
|
||||
void HandleLootMethodOpcode(WorldPacket& recvPacket);
|
||||
void HandlePartyInviteResponseOpcode(WorldPackets::Party::PartyInviteResponse& packet);
|
||||
void HandlePartyUninviteOpcode(WorldPackets::Party::PartyUninvite& packet);
|
||||
void HandleSetPartyLeaderOpcode(WorldPackets::Party::SetPartyLeader& packet);
|
||||
void HandleSetRoleOpcode(WorldPackets::Party::SetRole& packet);
|
||||
void HandleLeaveGroupOpcode(WorldPackets::Party::LeaveGroup& packet);
|
||||
void HandleOptOutOfLootOpcode(WorldPackets::Party::OptOutOfLoot& packet);
|
||||
void HandleSetLootMethodOpcode(WorldPackets::Party::SetLootMethod& packet);
|
||||
void HandleLootRoll(WorldPackets::Loot::LootRoll& packet);
|
||||
void HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData);
|
||||
void HandleRaidTargetUpdateOpcode(WorldPacket& recvData);
|
||||
void HandleRaidReadyCheckOpcode(WorldPacket& recvData);
|
||||
void HandleGroupRaidConvertOpcode(WorldPacket& recvData);
|
||||
void HandleGroupRequestJoinUpdates(WorldPacket& recvData);
|
||||
void HandleGroupChangeSubGroupOpcode(WorldPacket& recvData);
|
||||
void HandleGroupSwapSubGroupOpcode(WorldPacket& recvData);
|
||||
void HandleGroupAssistantLeaderOpcode(WorldPacket& recvData);
|
||||
void HandleRequestPartyMemberStatsOpcode(WorldPackets::Party::RequestPartyMemberStats& packet);
|
||||
void HandleUpdateRaidTargetOpcode(WorldPackets::Party::UpdateRaidTarget& packet);
|
||||
void HandleDoReadyCheckOpcode(WorldPackets::Party::DoReadyCheck& packet);
|
||||
void HandleReadyCheckResponseOpcode(WorldPackets::Party::ReadyCheckResponseClient& packet);
|
||||
void HandleConvertRaidOpcode(WorldPackets::Party::ConvertRaid& packet);
|
||||
void HandleRequestPartyJoinUpdates(WorldPackets::Party::RequestPartyJoinUpdates& packet);
|
||||
void HandleChangeSubGroupOpcode(WorldPackets::Party::ChangeSubGroup& packet);
|
||||
void HandleSwapSubGroupsOpcode(WorldPackets::Party::SwapSubGroups& packet);
|
||||
void HandleSetAssistantLeaderOpcode(WorldPackets::Party::SetAssistantLeader& packet);
|
||||
void HandlePartyAssignmentOpcode(WorldPacket& recvData);
|
||||
void HandleRolePollBeginOpcode(WorldPacket& recvData);
|
||||
void HandleInitiateRolePoll(WorldPackets::Party::InitiateRolePoll& packet);
|
||||
void HandleSetEveryoneIsAssistant(WorldPackets::Party::SetEveryoneIsAssistant& packet);
|
||||
void HandleClearRaidMarker(WorldPackets::Party::ClearRaidMarker& packet);
|
||||
|
||||
void HandleDeclinePetition(WorldPackets::Petition::DeclinePetition& packet);
|
||||
void HandleOfferPetition(WorldPackets::Petition::OfferPetition& packet);
|
||||
@@ -1337,7 +1389,7 @@ class WorldSession
|
||||
|
||||
void HandleWardenDataOpcode(WorldPacket& recvData);
|
||||
void HandleWorldTeleportOpcode(WorldPacket& recvData);
|
||||
void HandleMinimapPingOpcode(WorldPacket& recvData);
|
||||
void HandleMinimapPingOpcode(WorldPackets::Party::MinimapPingClient& packet);
|
||||
void HandleRandomRollOpcode(WorldPackets::Misc::RandomRollClient& packet);
|
||||
void HandleFarSightOpcode(WorldPackets::Misc::FarSight& packet);
|
||||
void HandleSetDungeonDifficultyOpcode(WorldPackets::Misc::SetDungeonDifficulty& setDungeonDifficulty);
|
||||
@@ -1470,7 +1522,7 @@ class WorldSession
|
||||
void HandleRequestWowTokenMarketPrice(WorldPackets::Token::RequestWowTokenMarketPrice& requestWowTokenMarketPrice);
|
||||
|
||||
// Compact Unit Frames (4.x)
|
||||
void HandleSaveCUFProfiles(WorldPacket& recvPacket);
|
||||
void HandleSaveCUFProfiles(WorldPackets::Misc::SaveCUFProfiles& packet);
|
||||
void SendLoadCUFProfiles();
|
||||
|
||||
// Garrison
|
||||
|
||||
@@ -338,6 +338,7 @@ class Spell
|
||||
void EffectApplyGlyph(SpellEffIndex effIndex);
|
||||
void EffectEnchantHeldItem(SpellEffIndex effIndex);
|
||||
void EffectSummonObject(SpellEffIndex effIndex);
|
||||
void EffectChangeRaidMarker(SpellEffIndex effIndex);
|
||||
void EffectResurrect(SpellEffIndex effIndex);
|
||||
void EffectParry(SpellEffIndex effIndex);
|
||||
void EffectBlock(SpellEffIndex effIndex);
|
||||
|
||||
@@ -180,7 +180,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
|
||||
&Spell::EffectReputation, //103 SPELL_EFFECT_REPUTATION
|
||||
&Spell::EffectSummonObject, //104 SPELL_EFFECT_SUMMON_OBJECT_SLOT1
|
||||
&Spell::EffectSummonObject, //105 SPELL_EFFECT_SUMMON_OBJECT_SLOT2
|
||||
&Spell::EffectSummonObject, //106 SPELL_EFFECT_SUMMON_OBJECT_SLOT3
|
||||
&Spell::EffectChangeRaidMarker, //106 SPELL_EFFECT_CHANGE_RAID_MARKER
|
||||
&Spell::EffectSummonObject, //107 SPELL_EFFECT_SUMMON_OBJECT_SLOT4
|
||||
&Spell::EffectDispelMechanic, //108 SPELL_EFFECT_DISPEL_MECHANIC
|
||||
&Spell::EffectResurrectPet, //109 SPELL_EFFECT_RESURRECT_PET
|
||||
@@ -4648,6 +4648,25 @@ void Spell::EffectPullTowards(SpellEffIndex /*effIndex*/)
|
||||
unitTarget->GetMotionMaster()->MoveJump(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), speedXY, speedZ);
|
||||
}
|
||||
|
||||
void Spell::EffectChangeRaidMarker(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT)
|
||||
return;
|
||||
|
||||
Player* player = m_caster->ToPlayer();
|
||||
if (!player || !m_targets.HasDst())
|
||||
return;
|
||||
|
||||
Group* group = player->GetGroup();
|
||||
if (!group || (group->isRaidGroup() && !group->IsLeader(player->GetGUID()) && !group->IsAssistant(player->GetGUID())))
|
||||
return;
|
||||
|
||||
float x, y, z;
|
||||
destTarget->GetPosition(x, y, z);
|
||||
|
||||
group->AddRaidMarker(damage, player->GetMapId(), x, y, z);
|
||||
}
|
||||
|
||||
void Spell::EffectDispelMechanic(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
|
||||
|
||||
@@ -806,7 +806,7 @@ SpellEffectInfo::StaticData SpellEffectInfo::_data[TOTAL_SPELL_EFFECTS] =
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 103 SPELL_EFFECT_REPUTATION
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_DEST}, // 104 SPELL_EFFECT_SUMMON_OBJECT_SLOT1
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_DEST}, // 105 SPELL_EFFECT_SUMMON_OBJECT_SLOT2
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_DEST}, // 106 SPELL_EFFECT_SUMMON_OBJECT_SLOT3
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_DEST}, // 106 SPELL_EFFECT_CHANGE_RAID_MARKER
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_DEST}, // 107 SPELL_EFFECT_SUMMON_OBJECT_SLOT4
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 108 SPELL_EFFECT_DISPEL_MECHANIC
|
||||
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_DEST}, // 109 SPELL_EFFECT_SUMMON_DEAD_PET
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace Trinity
|
||||
{
|
||||
BroadcastTextEntry const* bct = sBroadcastTextStore.LookupEntry(_textId);
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(_msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? DB2Manager::GetBroadcastTextValue(bct, locale, _source->getGender()) : "", _achievementId, "", locale);
|
||||
packet.Initialize(_msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? DB2Manager::GetBroadcastTextValue(bct, locale, _source->getGender()) : "", _achievementId, "", locale);
|
||||
packet.Write();
|
||||
data = packet.Move();
|
||||
}
|
||||
@@ -56,7 +56,7 @@ namespace Trinity
|
||||
void operator()(WorldPacket& data, LocaleConstant locale)
|
||||
{
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(_msgType, _language, _source, _target, _text, 0, "", locale);
|
||||
packet.Initialize(_msgType, _language, _source, _target, _text, 0, "", locale);
|
||||
packet.Write();
|
||||
data = packet.Move();
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ class CreatureTextBuilder
|
||||
{
|
||||
std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale);
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(_msgType, Language(_language), _source, _target, text, 0, "", locale);
|
||||
packet.Initialize(_msgType, Language(_language), _source, _target, text, 0, "", locale);
|
||||
packet.Write();
|
||||
data = packet.Move();
|
||||
}
|
||||
@@ -62,7 +62,7 @@ class PlayerTextBuilder
|
||||
{
|
||||
std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale);
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(_msgType, Language(_language), _talker, _target, text, 0, "", locale);
|
||||
packet.Initialize(_msgType, Language(_language), _talker, _target, text, 0, "", locale);
|
||||
packet.Write();
|
||||
data = packet.Move();
|
||||
}
|
||||
|
||||
@@ -2252,6 +2252,9 @@ void World::Update(uint32 diff)
|
||||
sLFGMgr->Update(diff);
|
||||
RecordTimeDiff("UpdateLFGMgr");
|
||||
|
||||
sGroupMgr->Update(diff);
|
||||
RecordTimeDiff("GroupMgr");
|
||||
|
||||
// execute callbacks from sql queries that were queued recently
|
||||
ProcessQueryCallbacks();
|
||||
RecordTimeDiff("ProcessQueryCallbacks");
|
||||
@@ -2381,7 +2384,7 @@ namespace Trinity
|
||||
while (char* line = ChatHandler::LineFromMessage(text))
|
||||
{
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
|
||||
packet.Initialize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
|
||||
packet.Write();
|
||||
dataList.emplace_back(new WorldPacket(packet.Move()));
|
||||
}
|
||||
@@ -2447,7 +2450,7 @@ void World::SendGlobalText(const char* text, WorldSession* self)
|
||||
while (char* line = ChatHandler::LineFromMessage(pos))
|
||||
{
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
|
||||
packet.Initialize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, line);
|
||||
SendGlobalMessage(packet.Write(), self);
|
||||
}
|
||||
|
||||
@@ -2481,7 +2484,7 @@ bool World::SendZoneMessage(uint32 zone, WorldPacket const* packet, WorldSession
|
||||
void World::SendZoneText(uint32 zone, const char* text, WorldSession* self, uint32 team)
|
||||
{
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, text);
|
||||
packet.Initialize(CHAT_MSG_SYSTEM, LANG_UNIVERSAL, nullptr, nullptr, text);
|
||||
SendZoneMessage(zone, packet.Write(), self, team);
|
||||
}
|
||||
|
||||
|
||||
@@ -485,7 +485,7 @@ public:
|
||||
char const* msg = "testtest";
|
||||
uint8 type = atoi(args);
|
||||
WorldPackets::Chat::Chat packet;
|
||||
packet.Initalize(ChatMsg(type), LANG_UNIVERSAL, handler->GetSession()->GetPlayer(), handler->GetSession()->GetPlayer(), msg, 0, "chan");
|
||||
packet.Initialize(ChatMsg(type), LANG_UNIVERSAL, handler->GetSession()->GetPlayer(), handler->GetSession()->GetPlayer(), msg, 0, "chan");
|
||||
handler->GetSession()->SendPacket(packet.Write());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <queue>
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
|
||||
#include <boost/optional.hpp>
|
||||
#include <boost/utility/in_place_factory.hpp>
|
||||
@@ -164,4 +165,14 @@ struct LocalizedString
|
||||
template <typename T>
|
||||
using Optional = boost::optional<T>;
|
||||
|
||||
namespace Trinity
|
||||
{
|
||||
//! std::make_unique implementation (TODO: remove this once C++14 is supported)
|
||||
template<typename T, typename ...Args>
|
||||
std::unique_ptr<T> make_unique(Args&& ...args)
|
||||
{
|
||||
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "Appender.h"
|
||||
#include "Logger.h"
|
||||
#include "StringFormat.h"
|
||||
#include "Common.h"
|
||||
#include <boost/asio/io_service.hpp>
|
||||
#include <boost/asio/strand.hpp>
|
||||
|
||||
@@ -64,7 +65,7 @@ class Log
|
||||
template<typename... Args>
|
||||
inline void outMessage(std::string const& filter, LogLevel const level, const char* fmt, Args const&... args)
|
||||
{
|
||||
write(std::unique_ptr<LogMessage>(new LogMessage(level, filter, Trinity::StringFormat(fmt, args...))));
|
||||
write(Trinity::make_unique<LogMessage>(level, filter, Trinity::StringFormat(fmt, args...)));
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
@@ -73,7 +74,7 @@ class Log
|
||||
if (!ShouldLog("commands.gm", LOG_LEVEL_INFO))
|
||||
return;
|
||||
|
||||
std::unique_ptr<LogMessage> msg(new LogMessage(LOG_LEVEL_INFO, "commands.gm", std::move(Trinity::StringFormat(fmt, args...))));
|
||||
std::unique_ptr<LogMessage> msg = Trinity::make_unique<LogMessage>(LOG_LEVEL_INFO, "commands.gm", std::move(Trinity::StringFormat(fmt, args...)));
|
||||
|
||||
msg->param1 = std::to_string(account);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user