mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
Group loot should work now.
This commit is contained in:
parent
7b1e8cae76
commit
dcb0d4e484
4 changed files with 98 additions and 97 deletions
|
|
@ -235,7 +235,7 @@ uint32 Group::RemoveInvite(Player *player)
|
||||||
|
|
||||||
void Group::RemoveAllInvites()
|
void Group::RemoveAllInvites()
|
||||||
{
|
{
|
||||||
for(InvitesList::iterator itr=m_invitees.begin(); itr!=m_invitees.end(); ++itr)
|
for(InvitesList::iterator itr = m_invitees.begin(); itr!=m_invitees.end(); ++itr)
|
||||||
(*itr)->SetGroupInvite(NULL);
|
(*itr)->SetGroupInvite(NULL);
|
||||||
|
|
||||||
m_invitees.clear();
|
m_invitees.clear();
|
||||||
|
|
@ -265,6 +265,7 @@ bool Group::AddMember(const uint64 &guid, const char* name)
|
||||||
{
|
{
|
||||||
if(!_addMember(guid, name))
|
if(!_addMember(guid, name))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SendUpdate();
|
SendUpdate();
|
||||||
|
|
||||||
Player *player = sObjectMgr.GetPlayer(guid);
|
Player *player = sObjectMgr.GetPlayer(guid);
|
||||||
|
|
@ -445,10 +446,11 @@ void Group::Disband(bool hideDestroy)
|
||||||
/*** LOOT SYSTEM ***/
|
/*** LOOT SYSTEM ***/
|
||||||
/*********************************************************/
|
/*********************************************************/
|
||||||
|
|
||||||
void Group::SendLootStartRoll(uint32 CountDown, const Roll &r)
|
void Group::SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll &r)
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_LOOT_START_ROLL, (8+4+4+4+4+4+4+1));
|
WorldPacket data(SMSG_LOOT_START_ROLL, (8+4+4+4+4+4+4+1));
|
||||||
data << r.lootedTargetGUID; // creature guid what we're looting
|
data << r.lootedTargetGUID; // creature guid what we're looting
|
||||||
|
data << uint32(mapid); // 3.3.3 mapid
|
||||||
data << uint32(r.itemSlot); // item slot in loot
|
data << uint32(r.itemSlot); // item slot in loot
|
||||||
data << uint32(r.itemid); // the itemEntryId for the item that shall be rolled for
|
data << uint32(r.itemid); // the itemEntryId for the item that shall be rolled for
|
||||||
data << uint32(r.itemRandomSuffix); // randomSuffix
|
data << uint32(r.itemRandomSuffix); // randomSuffix
|
||||||
|
|
@ -479,7 +481,7 @@ void Group::SendLootRoll(ObjectGuid const& targetGuid, uint8 rollNumber, uint8 r
|
||||||
data << uint32(r.itemRandomPropId); // Item random property ID
|
data << uint32(r.itemRandomPropId); // Item random property ID
|
||||||
data << uint8(rollNumber); // 0: "Need for: [item name]" > 127: "you passed on: [item name]" Roll number
|
data << uint8(rollNumber); // 0: "Need for: [item name]" > 127: "you passed on: [item name]" Roll number
|
||||||
data << uint8(rollType); // 0: "Need for: [item name]" 0: "You have selected need for [item name] 1: need roll 2: greed roll
|
data << uint8(rollType); // 0: "Need for: [item name]" 0: "You have selected need for [item name] 1: need roll 2: greed roll
|
||||||
data << uint8(0); // 2.4.0
|
data << uint8(0); // auto pass on loot
|
||||||
|
|
||||||
for( Roll::PlayerVote::const_iterator itr = r.playerVote.begin(); itr != r.playerVote.end(); ++itr)
|
for( Roll::PlayerVote::const_iterator itr = r.playerVote.begin(); itr != r.playerVote.end(); ++itr)
|
||||||
{
|
{
|
||||||
|
|
@ -501,7 +503,7 @@ void Group::SendLootRollWon(ObjectGuid const& targetGuid, uint8 rollNumber, uint
|
||||||
data << uint32(r.itemRandomSuffix); // randomSuffix
|
data << uint32(r.itemRandomSuffix); // randomSuffix
|
||||||
data << uint32(r.itemRandomPropId); // Item random property
|
data << uint32(r.itemRandomPropId); // Item random property
|
||||||
data << targetGuid; // guid of the player who won.
|
data << targetGuid; // guid of the player who won.
|
||||||
data << uint8(rollNumber); // rollnumber realted to SMSG_LOOT_ROLL
|
data << uint8(rollNumber); // rollnumber related to SMSG_LOOT_ROLL
|
||||||
data << uint8(rollType); // Rolltype related to SMSG_LOOT_ROLL
|
data << uint8(rollType); // Rolltype related to SMSG_LOOT_ROLL
|
||||||
|
|
||||||
for( Roll::PlayerVote::const_iterator itr = r.playerVote.begin(); itr != r.playerVote.end(); ++itr)
|
for( Roll::PlayerVote::const_iterator itr = r.playerVote.begin(); itr != r.playerVote.end(); ++itr)
|
||||||
|
|
@ -555,7 +557,7 @@ void Group::GroupLoot(ObjectGuid const& playerGUID, Loot *loot, Creature *creatu
|
||||||
//roll for over-threshold item if it's one-player loot
|
//roll for over-threshold item if it's one-player loot
|
||||||
if (item->Quality >= uint32(m_lootThreshold) && !i->freeforall)
|
if (item->Quality >= uint32(m_lootThreshold) && !i->freeforall)
|
||||||
{
|
{
|
||||||
Roll* r=new Roll(creature->GetGUID(),*i);
|
Roll* r = new Roll(creature->GetGUID(), *i);
|
||||||
|
|
||||||
//a vector is filled with only near party members
|
//a vector is filled with only near party members
|
||||||
for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next())
|
for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next())
|
||||||
|
|
@ -582,7 +584,7 @@ void Group::GroupLoot(ObjectGuid const& playerGUID, Loot *loot, Creature *creatu
|
||||||
r->playerVote.begin()->second = NEED;
|
r->playerVote.begin()->second = NEED;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
group->SendLootStartRoll(60000, *r);
|
group->SendLootStartRoll(60000, creature->GetMapId(), *r);
|
||||||
|
|
||||||
loot->items[itemSlot].is_blocked = true;
|
loot->items[itemSlot].is_blocked = true;
|
||||||
|
|
||||||
|
|
@ -607,14 +609,14 @@ void Group::NeedBeforeGreed(ObjectGuid const& playerGUID, Loot *loot, Creature *
|
||||||
Group *group = player->GetGroup();
|
Group *group = player->GetGroup();
|
||||||
|
|
||||||
uint8 itemSlot = 0;
|
uint8 itemSlot = 0;
|
||||||
for(std::vector<LootItem>::iterator i=loot->items.begin(); i != loot->items.end(); ++i, ++itemSlot)
|
for(std::vector<LootItem>::iterator i = loot->items.begin(); i != loot->items.end(); ++i, ++itemSlot)
|
||||||
{
|
{
|
||||||
item = ObjectMgr::GetItemPrototype(i->itemid);
|
item = ObjectMgr::GetItemPrototype(i->itemid);
|
||||||
|
|
||||||
//only roll for one-player items, not for ones everyone can get
|
//only roll for one-player items, not for ones everyone can get
|
||||||
if (item->Quality >= uint32(m_lootThreshold) && !i->freeforall)
|
if (item->Quality >= uint32(m_lootThreshold) && !i->freeforall)
|
||||||
{
|
{
|
||||||
Roll* r=new Roll(creature->GetGUID(),*i);
|
Roll* r = new Roll(creature->GetGUID(), *i);
|
||||||
|
|
||||||
for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next())
|
for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next())
|
||||||
{
|
{
|
||||||
|
|
@ -641,7 +643,7 @@ void Group::NeedBeforeGreed(ObjectGuid const& playerGUID, Loot *loot, Creature *
|
||||||
r->playerVote.begin()->second = NEED;
|
r->playerVote.begin()->second = NEED;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
group->SendLootStartRoll(60000, *r);
|
group->SendLootStartRoll(60000, creature->GetMapId(), *r);
|
||||||
loot->items[itemSlot].is_blocked = true;
|
loot->items[itemSlot].is_blocked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -666,7 +668,7 @@ void Group::MasterLoot(ObjectGuid const& playerGUID, Loot* /*loot*/, Creature *c
|
||||||
uint32 real_count = 0;
|
uint32 real_count = 0;
|
||||||
|
|
||||||
WorldPacket data(SMSG_LOOT_MASTER_LIST, 330);
|
WorldPacket data(SMSG_LOOT_MASTER_LIST, 330);
|
||||||
data << (uint8)GetMembersCount();
|
data << uint8(GetMembersCount());
|
||||||
|
|
||||||
for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next())
|
for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next())
|
||||||
{
|
{
|
||||||
|
|
@ -676,7 +678,7 @@ void Group::MasterLoot(ObjectGuid const& playerGUID, Loot* /*loot*/, Creature *c
|
||||||
|
|
||||||
if (looter->IsWithinDist(creature, sWorld.getConfig(CONFIG_FLOAT_GROUP_XP_DISTANCE), false))
|
if (looter->IsWithinDist(creature, sWorld.getConfig(CONFIG_FLOAT_GROUP_XP_DISTANCE), false))
|
||||||
{
|
{
|
||||||
data << looter->GetGUID();
|
data << uint64(looter->GetGUID());
|
||||||
++real_count;
|
++real_count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -757,7 +759,7 @@ bool Group::CountRollVote(ObjectGuid const& playerGUID, Rolls::iterator& rollI,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//called when roll timer expires
|
// called when roll timer expires
|
||||||
void Group::EndRoll()
|
void Group::EndRoll()
|
||||||
{
|
{
|
||||||
while(!RollId.empty())
|
while(!RollId.empty())
|
||||||
|
|
@ -1064,8 +1066,8 @@ void Group::OfflineReadyCheck()
|
||||||
if (!pl || !pl->GetSession())
|
if (!pl || !pl->GetSession())
|
||||||
{
|
{
|
||||||
WorldPacket data(MSG_RAID_READY_CHECK_CONFIRM, 9);
|
WorldPacket data(MSG_RAID_READY_CHECK_CONFIRM, 9);
|
||||||
data << citr->guid;
|
data << uint64(citr->guid);
|
||||||
data << (uint8)0;
|
data << uint8(0);
|
||||||
BroadcastReadyCheck(&data);
|
BroadcastReadyCheck(&data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1190,7 +1192,7 @@ bool Group::_removeMember(const uint64 &guid)
|
||||||
void Group::_setLeader(const uint64 &guid)
|
void Group::_setLeader(const uint64 &guid)
|
||||||
{
|
{
|
||||||
member_citerator slot = _getMemberCSlot(guid);
|
member_citerator slot = _getMemberCSlot(guid);
|
||||||
if(slot==m_memberSlots.end())
|
if(slot == m_memberSlots.end())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(!isBGGroup())
|
if(!isBGGroup())
|
||||||
|
|
|
||||||
|
|
@ -312,7 +312,7 @@ class MANGOS_DLL_SPEC Group
|
||||||
/*** LOOT SYSTEM ***/
|
/*** LOOT SYSTEM ***/
|
||||||
/*********************************************************/
|
/*********************************************************/
|
||||||
|
|
||||||
void SendLootStartRoll(uint32 CountDown, const Roll &r);
|
void SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll &r);
|
||||||
void SendLootRoll(ObjectGuid const& targetGuid, uint8 rollNumber, uint8 rollType, const Roll &r);
|
void SendLootRoll(ObjectGuid const& targetGuid, uint8 rollNumber, uint8 rollType, const Roll &r);
|
||||||
void SendLootRollWon(ObjectGuid const& targetGuid, uint8 rollNumber, uint8 rollType, const Roll &r);
|
void SendLootRollWon(ObjectGuid const& targetGuid, uint8 rollNumber, uint8 rollType, const Roll &r);
|
||||||
void SendLootAllPassed(const Roll &r);
|
void SendLootAllPassed(const Roll &r);
|
||||||
|
|
|
||||||
|
|
@ -43,9 +43,9 @@
|
||||||
void WorldSession::SendPartyResult(PartyOperation operation, const std::string& member, PartyResult res)
|
void WorldSession::SendPartyResult(PartyOperation operation, const std::string& member, PartyResult res)
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_PARTY_COMMAND_RESULT, (8+member.size()+1));
|
WorldPacket data(SMSG_PARTY_COMMAND_RESULT, (8+member.size()+1));
|
||||||
data << (uint32)operation;
|
data << uint32(operation);
|
||||||
data << member;
|
data << member;
|
||||||
data << (uint32)res;
|
data << uint32(res);
|
||||||
|
|
||||||
SendPacket( &data );
|
SendPacket( &data );
|
||||||
}
|
}
|
||||||
|
|
@ -171,7 +171,7 @@ void WorldSession::HandleGroupAcceptOpcode( WorldPacket & recv_data )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove in from ivites in any case
|
// remove in from invites in any case
|
||||||
group->RemoveInvite(GetPlayer());
|
group->RemoveInvite(GetPlayer());
|
||||||
|
|
||||||
/** error handling **/
|
/** error handling **/
|
||||||
|
|
@ -197,10 +197,9 @@ void WorldSession::HandleGroupAcceptOpcode( WorldPacket & recv_data )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// everything's fine, do it, PLAYER'S GROUP IS SET IN ADDMEMBER!!!
|
// everything is fine, do it, PLAYER'S GROUP IS SET IN ADDMEMBER!!!
|
||||||
if(!group->AddMember(GetPlayer()->GetGUID(), GetPlayer()->GetName()))
|
if(!group->AddMember(GetPlayer()->GetGUID(), GetPlayer()->GetName()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGroupDeclineOpcode( WorldPacket & /*recv_data*/ )
|
void WorldSession::HandleGroupDeclineOpcode( WorldPacket & /*recv_data*/ )
|
||||||
|
|
@ -320,7 +319,7 @@ void WorldSession::HandleGroupSetLeaderOpcode( WorldPacket & recv_data )
|
||||||
return;
|
return;
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
group->ChangeLeader(guid);
|
group->ChangeLeader(guid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -338,7 +337,7 @@ void WorldSession::HandleGroupDisbandOpcode( WorldPacket & /*recv_data*/ )
|
||||||
/** error handling **/
|
/** error handling **/
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
SendPartyResult(PARTY_OP_LEAVE, GetPlayer()->GetName(), PARTY_RESULT_OK);
|
SendPartyResult(PARTY_OP_LEAVE, GetPlayer()->GetName(), PARTY_RESULT_OK);
|
||||||
|
|
||||||
GetPlayer()->RemoveFromGroup();
|
GetPlayer()->RemoveFromGroup();
|
||||||
|
|
@ -360,7 +359,7 @@ void WorldSession::HandleLootMethodOpcode( WorldPacket & recv_data )
|
||||||
return;
|
return;
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
group->SetLootMethod((LootMethod)lootMethod);
|
group->SetLootMethod((LootMethod)lootMethod);
|
||||||
group->SetLooterGuid(lootMaster);
|
group->SetLooterGuid(lootMaster);
|
||||||
group->SetLootThreshold((ItemQualities)lootThreshold);
|
group->SetLootThreshold((ItemQualities)lootThreshold);
|
||||||
|
|
@ -382,7 +381,7 @@ void WorldSession::HandleLootRoll( WorldPacket &recv_data )
|
||||||
if(!group)
|
if(!group)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
group->CountRollVote(GetPlayer()->GetObjectGuid(), lootedTarget, itemSlot, rollType);
|
group->CountRollVote(GetPlayer()->GetObjectGuid(), lootedTarget, itemSlot, rollType);
|
||||||
|
|
||||||
switch (rollType)
|
switch (rollType)
|
||||||
|
|
@ -429,7 +428,7 @@ void WorldSession::HandleRandomRollOpcode(WorldPacket& recv_data)
|
||||||
return;
|
return;
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
roll = urand(minimum, maximum);
|
roll = urand(minimum, maximum);
|
||||||
|
|
||||||
//sLog.outDebug("ROLL: MIN: %u, MAX: %u, ROLL: %u", minimum, maximum, roll);
|
//sLog.outDebug("ROLL: MIN: %u, MAX: %u, ROLL: %u", minimum, maximum, roll);
|
||||||
|
|
@ -457,7 +456,7 @@ void WorldSession::HandleRaidTargetUpdateOpcode( WorldPacket & recv_data )
|
||||||
/** error handling **/
|
/** error handling **/
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
if(x == 0xFF) // target icon request
|
if(x == 0xFF) // target icon request
|
||||||
{
|
{
|
||||||
group->SendTargetIconList(this);
|
group->SendTargetIconList(this);
|
||||||
|
|
@ -487,7 +486,7 @@ void WorldSession::HandleGroupRaidConvertOpcode( WorldPacket & /*recv_data*/ )
|
||||||
return;
|
return;
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything's fine, do it (is it 0 (PARTY_OP_INVITE) correct code)
|
// everything is fine, do it (is it 0 (PARTY_OP_INVITE) correct code)
|
||||||
SendPartyResult(PARTY_OP_INVITE, "", PARTY_RESULT_OK);
|
SendPartyResult(PARTY_OP_INVITE, "", PARTY_RESULT_OK);
|
||||||
group->ConvertToRaid();
|
group->ConvertToRaid();
|
||||||
}
|
}
|
||||||
|
|
@ -513,7 +512,7 @@ void WorldSession::HandleGroupChangeSubGroupOpcode( WorldPacket & recv_data )
|
||||||
return;
|
return;
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
group->ChangeMembersGroup(sObjectMgr.GetPlayer(name.c_str()), groupNr);
|
group->ChangeMembersGroup(sObjectMgr.GetPlayer(name.c_str()), groupNr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -533,7 +532,7 @@ void WorldSession::HandleGroupAssistantLeaderOpcode( WorldPacket & recv_data )
|
||||||
return;
|
return;
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
group->SetAssistant(guid, (flag==0?false:true));
|
group->SetAssistant(guid, (flag==0?false:true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -560,7 +559,7 @@ void WorldSession::HandlePartyAssignmentOpcode( WorldPacket & recv_data )
|
||||||
return;
|
return;
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
if(flag1 == 1)
|
if(flag1 == 1)
|
||||||
group->SetMainAssistant(guid);
|
group->SetMainAssistant(guid);
|
||||||
if(flag2 == 1)
|
if(flag2 == 1)
|
||||||
|
|
@ -580,7 +579,7 @@ void WorldSession::HandleRaidReadyCheckOpcode( WorldPacket & recv_data )
|
||||||
return;
|
return;
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
WorldPacket data(MSG_RAID_READY_CHECK, 8);
|
WorldPacket data(MSG_RAID_READY_CHECK, 8);
|
||||||
data << GetPlayer()->GetGUID();
|
data << GetPlayer()->GetGUID();
|
||||||
group->BroadcastPacket(&data, false, -1);
|
group->BroadcastPacket(&data, false, -1);
|
||||||
|
|
@ -596,10 +595,10 @@ void WorldSession::HandleRaidReadyCheckOpcode( WorldPacket & recv_data )
|
||||||
if(!group)
|
if(!group)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// everything's fine, do it
|
// everything is fine, do it
|
||||||
WorldPacket data(MSG_RAID_READY_CHECK_CONFIRM, 9);
|
WorldPacket data(MSG_RAID_READY_CHECK_CONFIRM, 9);
|
||||||
data << GetPlayer()->GetGUID();
|
data << uint64(GetPlayer()->GetGUID());
|
||||||
data << state;
|
data << uint8(state);
|
||||||
group->BroadcastReadyCheck(&data);
|
group->BroadcastReadyCheck(&data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -636,45 +635,45 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player *player, WorldPacke
|
||||||
|
|
||||||
data->Initialize(SMSG_PARTY_MEMBER_STATS, 8 + 4 + byteCount);
|
data->Initialize(SMSG_PARTY_MEMBER_STATS, 8 + 4 + byteCount);
|
||||||
*data << player->GetPackGUID();
|
*data << player->GetPackGUID();
|
||||||
*data << (uint32) mask;
|
*data << uint32(mask);
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_STATUS)
|
if (mask & GROUP_UPDATE_FLAG_STATUS)
|
||||||
{
|
{
|
||||||
if (player)
|
if (player)
|
||||||
{
|
{
|
||||||
if (player->IsPvP())
|
if (player->IsPvP())
|
||||||
*data << (uint16) (MEMBER_STATUS_ONLINE | MEMBER_STATUS_PVP);
|
*data << uint16(MEMBER_STATUS_ONLINE | MEMBER_STATUS_PVP);
|
||||||
else
|
else
|
||||||
*data << (uint16) MEMBER_STATUS_ONLINE;
|
*data << uint16(MEMBER_STATUS_ONLINE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
*data << (uint16) MEMBER_STATUS_OFFLINE;
|
*data << uint16(MEMBER_STATUS_OFFLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_CUR_HP)
|
if (mask & GROUP_UPDATE_FLAG_CUR_HP)
|
||||||
*data << (uint32) player->GetHealth();
|
*data << uint32(player->GetHealth());
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_MAX_HP)
|
if (mask & GROUP_UPDATE_FLAG_MAX_HP)
|
||||||
*data << (uint32) player->GetMaxHealth();
|
*data << uint32(player->GetMaxHealth());
|
||||||
|
|
||||||
Powers powerType = player->getPowerType();
|
Powers powerType = player->getPowerType();
|
||||||
if (mask & GROUP_UPDATE_FLAG_POWER_TYPE)
|
if (mask & GROUP_UPDATE_FLAG_POWER_TYPE)
|
||||||
*data << (uint8) powerType;
|
*data << uint8(powerType);
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_CUR_POWER)
|
if (mask & GROUP_UPDATE_FLAG_CUR_POWER)
|
||||||
*data << (uint16) player->GetPower(powerType);
|
*data << uint16(player->GetPower(powerType));
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_MAX_POWER)
|
if (mask & GROUP_UPDATE_FLAG_MAX_POWER)
|
||||||
*data << (uint16) player->GetMaxPower(powerType);
|
*data << uint16(player->GetMaxPower(powerType));
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_LEVEL)
|
if (mask & GROUP_UPDATE_FLAG_LEVEL)
|
||||||
*data << (uint16) player->getLevel();
|
*data << uint16(player->getLevel());
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_ZONE)
|
if (mask & GROUP_UPDATE_FLAG_ZONE)
|
||||||
*data << (uint16) player->GetZoneId();
|
*data << uint16(player->GetZoneId());
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_POSITION)
|
if (mask & GROUP_UPDATE_FLAG_POSITION)
|
||||||
*data << (uint16) player->GetPositionX() << (uint16) player->GetPositionY();
|
*data << uint16(player->GetPositionX()) << uint16(player->GetPositionY());
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_AURAS)
|
if (mask & GROUP_UPDATE_FLAG_AURAS)
|
||||||
{
|
{
|
||||||
|
|
@ -694,9 +693,9 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player *player, WorldPacke
|
||||||
if (mask & GROUP_UPDATE_FLAG_PET_GUID)
|
if (mask & GROUP_UPDATE_FLAG_PET_GUID)
|
||||||
{
|
{
|
||||||
if(pet)
|
if(pet)
|
||||||
*data << (uint64) pet->GetGUID();
|
*data << uint64(pet->GetGUID());
|
||||||
else
|
else
|
||||||
*data << (uint64) 0;
|
*data << uint64(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_PET_NAME)
|
if (mask & GROUP_UPDATE_FLAG_PET_NAME)
|
||||||
|
|
@ -704,55 +703,55 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player *player, WorldPacke
|
||||||
if(pet)
|
if(pet)
|
||||||
*data << pet->GetName();
|
*data << pet->GetName();
|
||||||
else
|
else
|
||||||
*data << (uint8) 0;
|
*data << uint8(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_PET_MODEL_ID)
|
if (mask & GROUP_UPDATE_FLAG_PET_MODEL_ID)
|
||||||
{
|
{
|
||||||
if(pet)
|
if(pet)
|
||||||
*data << (uint16) pet->GetDisplayId();
|
*data << uint16(pet->GetDisplayId());
|
||||||
else
|
else
|
||||||
*data << (uint16) 0;
|
*data << uint16(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_PET_CUR_HP)
|
if (mask & GROUP_UPDATE_FLAG_PET_CUR_HP)
|
||||||
{
|
{
|
||||||
if(pet)
|
if(pet)
|
||||||
*data << (uint32) pet->GetHealth();
|
*data << uint32(pet->GetHealth());
|
||||||
else
|
else
|
||||||
*data << (uint32) 0;
|
*data << uint32(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_PET_MAX_HP)
|
if (mask & GROUP_UPDATE_FLAG_PET_MAX_HP)
|
||||||
{
|
{
|
||||||
if(pet)
|
if(pet)
|
||||||
*data << (uint32) pet->GetMaxHealth();
|
*data << uint32(pet->GetMaxHealth());
|
||||||
else
|
else
|
||||||
*data << (uint32) 0;
|
*data << uint32(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_PET_POWER_TYPE)
|
if (mask & GROUP_UPDATE_FLAG_PET_POWER_TYPE)
|
||||||
{
|
{
|
||||||
if(pet)
|
if(pet)
|
||||||
*data << (uint8) pet->getPowerType();
|
*data << uint8(pet->getPowerType());
|
||||||
else
|
else
|
||||||
*data << (uint8) 0;
|
*data << uint8(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_PET_CUR_POWER)
|
if (mask & GROUP_UPDATE_FLAG_PET_CUR_POWER)
|
||||||
{
|
{
|
||||||
if(pet)
|
if(pet)
|
||||||
*data << (uint16) pet->GetPower(pet->getPowerType());
|
*data << uint16(pet->GetPower(pet->getPowerType()));
|
||||||
else
|
else
|
||||||
*data << (uint16) 0;
|
*data << uint16(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_PET_MAX_POWER)
|
if (mask & GROUP_UPDATE_FLAG_PET_MAX_POWER)
|
||||||
{
|
{
|
||||||
if(pet)
|
if(pet)
|
||||||
*data << (uint16) pet->GetMaxPower(pet->getPowerType());
|
*data << uint16(pet->GetMaxPower(pet->getPowerType()));
|
||||||
else
|
else
|
||||||
*data << (uint16) 0;
|
*data << uint16(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask & GROUP_UPDATE_FLAG_PET_AURAS)
|
if (mask & GROUP_UPDATE_FLAG_PET_AURAS)
|
||||||
|
|
@ -771,7 +770,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player *player, WorldPacke
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
*data << (uint64) 0;
|
*data << uint64(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -788,8 +787,8 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode( WorldPacket &recv_data )
|
||||||
WorldPacket data(SMSG_PARTY_MEMBER_STATS_FULL, 3+4+2);
|
WorldPacket data(SMSG_PARTY_MEMBER_STATS_FULL, 3+4+2);
|
||||||
data << uint8(0); // only for SMSG_PARTY_MEMBER_STATS_FULL, probably arena/bg related
|
data << uint8(0); // only for SMSG_PARTY_MEMBER_STATS_FULL, probably arena/bg related
|
||||||
data.appendPackGUID(Guid);
|
data.appendPackGUID(Guid);
|
||||||
data << (uint32) GROUP_UPDATE_FLAG_STATUS;
|
data << uint32(GROUP_UPDATE_FLAG_STATUS);
|
||||||
data << (uint16) MEMBER_STATUS_OFFLINE;
|
data << uint16(MEMBER_STATUS_OFFLINE);
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -805,68 +804,68 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode( WorldPacket &recv_data )
|
||||||
mask1 = 0x7FFFFFFF; // for hunters and other classes with pets
|
mask1 = 0x7FFFFFFF; // for hunters and other classes with pets
|
||||||
|
|
||||||
Powers powerType = player->getPowerType();
|
Powers powerType = player->getPowerType();
|
||||||
data << (uint32) mask1; // group update mask
|
data << uint32(mask1); // group update mask
|
||||||
data << (uint16) MEMBER_STATUS_ONLINE; // member's online status
|
data << uint16(MEMBER_STATUS_ONLINE); // member's online status
|
||||||
data << (uint32) player->GetHealth(); // GROUP_UPDATE_FLAG_CUR_HP
|
data << uint32(player->GetHealth()); // GROUP_UPDATE_FLAG_CUR_HP
|
||||||
data << (uint32) player->GetMaxHealth(); // GROUP_UPDATE_FLAG_MAX_HP
|
data << uint32(player->GetMaxHealth()); // GROUP_UPDATE_FLAG_MAX_HP
|
||||||
data << (uint8) powerType; // GROUP_UPDATE_FLAG_POWER_TYPE
|
data << uint8(powerType); // GROUP_UPDATE_FLAG_POWER_TYPE
|
||||||
data << (uint16) player->GetPower(powerType); // GROUP_UPDATE_FLAG_CUR_POWER
|
data << uint16(player->GetPower(powerType)); // GROUP_UPDATE_FLAG_CUR_POWER
|
||||||
data << (uint16) player->GetMaxPower(powerType); // GROUP_UPDATE_FLAG_MAX_POWER
|
data << uint16(player->GetMaxPower(powerType)); // GROUP_UPDATE_FLAG_MAX_POWER
|
||||||
data << (uint16) player->getLevel(); // GROUP_UPDATE_FLAG_LEVEL
|
data << uint16(player->getLevel()); // GROUP_UPDATE_FLAG_LEVEL
|
||||||
data << (uint16) player->GetZoneId(); // GROUP_UPDATE_FLAG_ZONE
|
data << uint16(player->GetZoneId()); // GROUP_UPDATE_FLAG_ZONE
|
||||||
data << (uint16) player->GetPositionX(); // GROUP_UPDATE_FLAG_POSITION
|
data << uint16(player->GetPositionX()); // GROUP_UPDATE_FLAG_POSITION
|
||||||
data << (uint16) player->GetPositionY(); // GROUP_UPDATE_FLAG_POSITION
|
data << uint16(player->GetPositionY()); // GROUP_UPDATE_FLAG_POSITION
|
||||||
|
|
||||||
uint64 auramask = 0;
|
uint64 auramask = 0;
|
||||||
size_t maskPos = data.wpos();
|
size_t maskPos = data.wpos();
|
||||||
data << (uint64) auramask; // placeholder
|
data << uint64(auramask); // placeholder
|
||||||
for(uint8 i = 0; i < MAX_AURAS; ++i)
|
for(uint8 i = 0; i < MAX_AURAS; ++i)
|
||||||
{
|
{
|
||||||
if(uint32 aura = player->GetVisibleAura(i))
|
if(uint32 aura = player->GetVisibleAura(i))
|
||||||
{
|
{
|
||||||
auramask |= (uint64(1) << i);
|
auramask |= (uint64(1) << i);
|
||||||
data << (uint32) aura;
|
data << uint32(aura);
|
||||||
data << (uint8) 1;
|
data << uint8(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data.put<uint64>(maskPos,auramask); // GROUP_UPDATE_FLAG_AURAS
|
data.put<uint64>(maskPos, auramask); // GROUP_UPDATE_FLAG_AURAS
|
||||||
|
|
||||||
if(pet)
|
if(pet)
|
||||||
{
|
{
|
||||||
Powers petpowertype = pet->getPowerType();
|
Powers petpowertype = pet->getPowerType();
|
||||||
data << (uint64) pet->GetGUID(); // GROUP_UPDATE_FLAG_PET_GUID
|
data << uint64(pet->GetGUID()); // GROUP_UPDATE_FLAG_PET_GUID
|
||||||
data << pet->GetName(); // GROUP_UPDATE_FLAG_PET_NAME
|
data << pet->GetName(); // GROUP_UPDATE_FLAG_PET_NAME
|
||||||
data << (uint16) pet->GetDisplayId(); // GROUP_UPDATE_FLAG_PET_MODEL_ID
|
data << uint16(pet->GetDisplayId()); // GROUP_UPDATE_FLAG_PET_MODEL_ID
|
||||||
data << (uint32) pet->GetHealth(); // GROUP_UPDATE_FLAG_PET_CUR_HP
|
data << uint32(pet->GetHealth()); // GROUP_UPDATE_FLAG_PET_CUR_HP
|
||||||
data << (uint32) pet->GetMaxHealth(); // GROUP_UPDATE_FLAG_PET_MAX_HP
|
data << uint32(pet->GetMaxHealth()); // GROUP_UPDATE_FLAG_PET_MAX_HP
|
||||||
data << (uint8) petpowertype; // GROUP_UPDATE_FLAG_PET_POWER_TYPE
|
data << uint8(petpowertype); // GROUP_UPDATE_FLAG_PET_POWER_TYPE
|
||||||
data << (uint16) pet->GetPower(petpowertype); // GROUP_UPDATE_FLAG_PET_CUR_POWER
|
data << uint16(pet->GetPower(petpowertype)); // GROUP_UPDATE_FLAG_PET_CUR_POWER
|
||||||
data << (uint16) pet->GetMaxPower(petpowertype); // GROUP_UPDATE_FLAG_PET_MAX_POWER
|
data << uint16(pet->GetMaxPower(petpowertype)); // GROUP_UPDATE_FLAG_PET_MAX_POWER
|
||||||
|
|
||||||
uint64 petauramask = 0;
|
uint64 petauramask = 0;
|
||||||
size_t petMaskPos = data.wpos();
|
size_t petMaskPos = data.wpos();
|
||||||
data << (uint64) petauramask; // placeholder
|
data << uint64(petauramask); // placeholder
|
||||||
for(uint8 i = 0; i < MAX_AURAS; ++i)
|
for(uint8 i = 0; i < MAX_AURAS; ++i)
|
||||||
{
|
{
|
||||||
if(uint32 petaura = pet->GetVisibleAura(i))
|
if(uint32 petaura = pet->GetVisibleAura(i))
|
||||||
{
|
{
|
||||||
petauramask |= (uint64(1) << i);
|
petauramask |= (uint64(1) << i);
|
||||||
data << (uint32) petaura;
|
data << uint32(petaura);
|
||||||
data << (uint8) 1;
|
data << uint8(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data.put<uint64>(petMaskPos,petauramask); // GROUP_UPDATE_FLAG_PET_AURAS
|
data.put<uint64>(petMaskPos, petauramask); // GROUP_UPDATE_FLAG_PET_AURAS
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
data << (uint8) 0; // GROUP_UPDATE_FLAG_PET_NAME
|
data << uint8(0); // GROUP_UPDATE_FLAG_PET_NAME
|
||||||
data << (uint64) 0; // GROUP_UPDATE_FLAG_PET_AURAS
|
data << uint64(0); // GROUP_UPDATE_FLAG_PET_AURAS
|
||||||
}
|
}
|
||||||
|
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!*/void WorldSession::HandleRequestRaidInfoOpcode( WorldPacket & /*recv_data*/ )
|
void WorldSession::HandleRequestRaidInfoOpcode( WorldPacket & /*recv_data*/ )
|
||||||
{
|
{
|
||||||
// every time the player checks the character screen
|
// every time the player checks the character screen
|
||||||
_player->SendRaidInfo();
|
_player->SendRaidInfo();
|
||||||
|
|
@ -882,11 +881,11 @@ void WorldSession::HandleOptOutOfLootOpcode( WorldPacket & recv_data )
|
||||||
// ignore if player not loaded
|
// ignore if player not loaded
|
||||||
if(!GetPlayer()) // needed because STATUS_AUTHED
|
if(!GetPlayer()) // needed because STATUS_AUTHED
|
||||||
{
|
{
|
||||||
if(unkn!=0)
|
if(unkn != 0)
|
||||||
sLog.outError("CMSG_GROUP_PASS_ON_LOOT value<>0 for not-loaded character!");
|
sLog.outError("CMSG_GROUP_PASS_ON_LOOT value<>0 for not-loaded character!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(unkn!=0)
|
if(unkn != 0)
|
||||||
sLog.outError("CMSG_GROUP_PASS_ON_LOOT: activation not implemented!");
|
sLog.outError("CMSG_GROUP_PASS_ON_LOOT: activation not implemented!");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1334,7 +1334,7 @@ enum Opcodes
|
||||||
SMSG_UNKNOWN_1297 = 0x511, //
|
SMSG_UNKNOWN_1297 = 0x511, //
|
||||||
CMSG_UNKNOWN_1298 = 0x512, // something with networking
|
CMSG_UNKNOWN_1298 = 0x512, // something with networking
|
||||||
UMSG_UNKNOWN_1299 = 0x513, // not found
|
UMSG_UNKNOWN_1299 = 0x513, // not found
|
||||||
SMSG_UNKNOWN_1300 = 0x514, // SMSG
|
SMSG_UNKNOWN_1300 = 0x514, // SMSG, multi combatlog
|
||||||
SMSG_UNKNOWN_1301 = 0x515, // event EVENT_LFG_OPEN_FROM_GOSSIP (opens dungeon finder, probably for outdoor bosses)
|
SMSG_UNKNOWN_1301 = 0x515, // event EVENT_LFG_OPEN_FROM_GOSSIP (opens dungeon finder, probably for outdoor bosses)
|
||||||
SMSG_UNKNOWN_1302 = 0x516, // something with player movement (move event 58?)
|
SMSG_UNKNOWN_1302 = 0x516, // something with player movement (move event 58?)
|
||||||
CMSG_UNKNOWN_1303 = 0x517, // something with player movement (move event 58?)
|
CMSG_UNKNOWN_1303 = 0x517, // something with player movement (move event 58?)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue