mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
[9992] Fixed MSG_PARTY_ASSIGNMENT processing.
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
4206230f0d
commit
db93e78f50
4 changed files with 49 additions and 20 deletions
|
|
@ -1298,29 +1298,47 @@ bool Group::_setAssistantFlag(const uint64 &guid, const bool &state)
|
||||||
|
|
||||||
bool Group::_setMainTank(const uint64 &guid)
|
bool Group::_setMainTank(const uint64 &guid)
|
||||||
{
|
{
|
||||||
member_citerator slot = _getMemberCSlot(guid);
|
if (m_mainTank == guid)
|
||||||
if(slot == m_memberSlots.end())
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(m_mainAssistant == guid)
|
if (guid)
|
||||||
_setMainAssistant(0);
|
{
|
||||||
|
member_citerator slot = _getMemberCSlot(guid);
|
||||||
|
if(slot == m_memberSlots.end())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(m_mainAssistant == guid)
|
||||||
|
_setMainAssistant(0);
|
||||||
|
}
|
||||||
|
|
||||||
m_mainTank = guid;
|
m_mainTank = guid;
|
||||||
|
|
||||||
if(!isBGGroup())
|
if(!isBGGroup())
|
||||||
CharacterDatabase.PExecute("UPDATE groups SET mainTank='%u' WHERE groupId='%u'", GUID_LOPART(m_mainTank), m_Id);
|
CharacterDatabase.PExecute("UPDATE groups SET mainTank='%u' WHERE groupId='%u'", GUID_LOPART(m_mainTank), m_Id);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Group::_setMainAssistant(const uint64 &guid)
|
bool Group::_setMainAssistant(const uint64 &guid)
|
||||||
{
|
{
|
||||||
member_witerator slot = _getMemberWSlot(guid);
|
if (m_mainAssistant == guid)
|
||||||
if(slot == m_memberSlots.end())
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(m_mainTank == guid)
|
if (guid)
|
||||||
_setMainTank(0);
|
{
|
||||||
|
member_witerator slot = _getMemberWSlot(guid);
|
||||||
|
if(slot == m_memberSlots.end())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(m_mainTank == guid)
|
||||||
|
_setMainTank(0);
|
||||||
|
}
|
||||||
|
|
||||||
m_mainAssistant = guid;
|
m_mainAssistant = guid;
|
||||||
|
|
||||||
if(!isBGGroup())
|
if(!isBGGroup())
|
||||||
CharacterDatabase.PExecute("UPDATE groups SET mainAssistant='%u' WHERE groupId='%u'", GUID_LOPART(m_mainAssistant), m_Id);
|
CharacterDatabase.PExecute("UPDATE groups SET mainAssistant='%u' WHERE groupId='%u'", GUID_LOPART(m_mainAssistant), m_Id);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -286,6 +286,9 @@ class MANGOS_DLL_SPEC Group
|
||||||
void ChangeMembersGroup(const uint64 &guid, uint8 group);
|
void ChangeMembersGroup(const uint64 &guid, uint8 group);
|
||||||
void ChangeMembersGroup(Player *player, uint8 group);
|
void ChangeMembersGroup(Player *player, uint8 group);
|
||||||
|
|
||||||
|
uint64 const& GetMainTank() const { return m_mainTank; }
|
||||||
|
uint64 const& GetMainAssistant() const { return m_mainAssistant; }
|
||||||
|
|
||||||
void SetAssistant(uint64 guid, bool state)
|
void SetAssistant(uint64 guid, bool state)
|
||||||
{
|
{
|
||||||
if(!isRaidGroup())
|
if(!isRaidGroup())
|
||||||
|
|
|
||||||
|
|
@ -555,9 +555,10 @@ void WorldSession::HandleGroupAssistantLeaderOpcode( WorldPacket & recv_data )
|
||||||
|
|
||||||
void WorldSession::HandlePartyAssignmentOpcode( WorldPacket & recv_data )
|
void WorldSession::HandlePartyAssignmentOpcode( WorldPacket & recv_data )
|
||||||
{
|
{
|
||||||
uint8 flag1, flag2;
|
uint8 role;
|
||||||
|
uint8 apply;
|
||||||
uint64 guid;
|
uint64 guid;
|
||||||
recv_data >> flag1 >> flag2;
|
recv_data >> role >> apply; // role 0 = Main Tank, 1 = Main Assistant
|
||||||
recv_data >> guid;
|
recv_data >> guid;
|
||||||
|
|
||||||
DEBUG_LOG("MSG_PARTY_ASSIGNMENT");
|
DEBUG_LOG("MSG_PARTY_ASSIGNMENT");
|
||||||
|
|
@ -566,21 +567,28 @@ void WorldSession::HandlePartyAssignmentOpcode( WorldPacket & recv_data )
|
||||||
if(!group)
|
if(!group)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// if(flag1) Main Assist
|
|
||||||
// 0x4
|
|
||||||
// if(flag2) Main Tank
|
|
||||||
// 0x2
|
|
||||||
|
|
||||||
/** error handling **/
|
/** error handling **/
|
||||||
if(!group->IsLeader(GetPlayer()->GetGUID()))
|
if(!group->IsLeader(GetPlayer()->GetGUID()))
|
||||||
return;
|
return;
|
||||||
/********************/
|
/********************/
|
||||||
|
|
||||||
// everything is fine, do it
|
// everything is fine, do it
|
||||||
if(flag1 == 1)
|
if (apply)
|
||||||
group->SetMainAssistant(guid);
|
{
|
||||||
if(flag2 == 1)
|
switch(role)
|
||||||
group->SetMainTank(guid);
|
{
|
||||||
|
case 0: group->SetMainTank(guid); break;
|
||||||
|
case 1: group->SetMainAssistant(guid); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (group->GetMainTank() == guid)
|
||||||
|
group->SetMainTank(0);
|
||||||
|
if (group->GetMainAssistant() == guid)
|
||||||
|
group->SetMainAssistant(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleRaidReadyCheckOpcode( WorldPacket & recv_data )
|
void WorldSession::HandleRaidReadyCheckOpcode( WorldPacket & recv_data )
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "9991"
|
#define REVISION_NR "9992"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue