253 lines
6.3 KiB
C++
253 lines
6.3 KiB
C++
#include "StdAfx.h"
|
|
#include "BaseParty.h"
|
|
|
|
|
|
BaseParty::BaseParty()
|
|
{
|
|
Init(0, 0, ePARTY_MAX);
|
|
}
|
|
|
|
BaseParty::~BaseParty()
|
|
{
|
|
}
|
|
|
|
void
|
|
BaseParty::Init(WORD party_key, DWORD master_key, ePARTY_TYPE party_type)
|
|
{
|
|
party_key_ = party_key;
|
|
master_key_ = master_key;
|
|
target_key_ = 0;
|
|
party_type_ = party_type;
|
|
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
|
|
distribution_type_ = eITEM_DISTRIBUTION_DICE_AND_DEFAULT;
|
|
#else // changed by _NA_002229_20110302_PARTY_DEFUALT_LOOTING_CHANGE
|
|
distribution_type_ = eITEM_DISTRIBUTION_FIFO_PRIORITY;
|
|
#endif
|
|
party_member_map_.clear();
|
|
}
|
|
|
|
void
|
|
BaseParty::Release()
|
|
{
|
|
Init(0, 0, ePARTY_MAX);
|
|
}
|
|
|
|
RC::ePARTY_RESULT
|
|
BaseParty::Join(const _PARTY_MEMBER_INFO& member_info)
|
|
{
|
|
if (GetMemberInfo(member_info.m_dwMemberKey))
|
|
{
|
|
return RC::RC_PARTY_ALREADY_IS_MEMBEROFPARTY;
|
|
}
|
|
party_member_map_.insert(MEMBER_MAP::value_type(member_info.m_dwMemberKey, member_info));
|
|
return RC::RC_PARTY_SUCCESS;
|
|
}
|
|
|
|
RC::ePARTY_RESULT
|
|
BaseParty::Leave(DWORD member_key)
|
|
{
|
|
if (!GetMemberInfo(member_key)) {
|
|
return RC::RC_PARTY_ISNOT_MEMBEROFPARTY;
|
|
};
|
|
party_member_map_.erase(member_key);
|
|
|
|
return RC::RC_PARTY_SUCCESS;
|
|
}
|
|
|
|
RC::ePARTY_RESULT
|
|
BaseParty::ChangeMaster(DWORD next_master_key)
|
|
{
|
|
if (master_key_ == next_master_key) {
|
|
return RC::RC_PARTY_CANNOT_CHANGE_MASTER;
|
|
};
|
|
if (!GetMemberInfo(next_master_key)) {
|
|
return RC::RC_PARTY_ISNOT_MEMBEROFPARTY;
|
|
};
|
|
master_key_ = next_master_key;
|
|
|
|
return RC::RC_PARTY_SUCCESS;
|
|
}
|
|
|
|
const _PARTY_MEMBER_INFO*
|
|
BaseParty::GetHeadUser()
|
|
{
|
|
if (!GetMemberNum()) {
|
|
return NULL;
|
|
};
|
|
_PARTY_MEMBER_INFO* member_info = &(*party_member_map_.begin()).second;
|
|
|
|
return member_info;
|
|
}
|
|
|
|
const _PARTY_MEMBER_INFO*
|
|
BaseParty::GetMemberInfo(DWORD member_key)const
|
|
{
|
|
MEMBER_MAP::const_iterator it = party_member_map_.find(member_key);
|
|
if (it == party_member_map_.end()) {
|
|
return NULL;
|
|
};
|
|
return &it->second;
|
|
}
|
|
|
|
void
|
|
BaseParty::GetMemberInfoAll(PARTY_MEMBER_TOTAL_INFO& member_info_all)
|
|
{
|
|
member_info_all.m_Count = 0;
|
|
|
|
MEMBER_MAP::iterator it = party_member_map_.begin(),
|
|
end = party_member_map_.end();
|
|
for ( ; it != end; ++it)
|
|
{
|
|
if (member_info_all.m_Count >= MAX_PARTYMEMBER_NUM) {
|
|
break;
|
|
};
|
|
_PARTY_MEMBER_INFO& memberInfo = it->second;
|
|
|
|
BOOST_STATIC_ASSERT(sizeof(member_info_all.m_Slot[member_info_all.m_Count]) ==
|
|
sizeof(memberInfo));
|
|
member_info_all.m_Slot[member_info_all.m_Count] = memberInfo;
|
|
++member_info_all.m_Count;
|
|
}
|
|
}
|
|
|
|
DWORD
|
|
BaseParty::GetMemberInfoAll(_GUIDANCE_MEMBER_INFO* member_info_all)
|
|
{
|
|
DWORD count = 0;
|
|
MEMBER_MAP::iterator it = party_member_map_.begin(),
|
|
end = party_member_map_.end();
|
|
for ( ; it != end; ++it, ++count)
|
|
{
|
|
if (count >= MAX_PARTYMEMBER_NUM) {
|
|
break;
|
|
};
|
|
_PARTY_MEMBER_INFO& memberInfo = it->second;
|
|
_GUIDANCE_MEMBER_INFO& guidanceInfo = member_info_all[count];
|
|
guidanceInfo.m_PartyKey = (BYTE)party_key_;
|
|
guidanceInfo.m_bMaster = master_key_ == memberInfo.m_dwMemberKey;
|
|
BOOST_STATIC_ASSERT(sizeof(guidanceInfo.m_MemberInfo) == sizeof(memberInfo));
|
|
guidanceInfo.m_MemberInfo = memberInfo;
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
BOOL
|
|
BaseParty::SetMemberInfo(DWORD member_key, _PARTY_MEMBER_INFO& member_info)
|
|
{
|
|
_PARTY_MEMBER_INFO* current_info = const_cast<_PARTY_MEMBER_INFO*>(GetMemberInfo(member_key));
|
|
if (current_info == NULL) {
|
|
return false;
|
|
};
|
|
*current_info = member_info;
|
|
|
|
return true;
|
|
}
|
|
|
|
//_NA_20110630_BATTLE_ZONE_RENEWAL
|
|
VOID
|
|
BaseParty::SetMemberMapCode(DWORD member_key, MAPCODE map_code)
|
|
{
|
|
MEMBER_MAP::iterator find_iterator = party_member_map_.find(member_key);
|
|
if (find_iterator == party_member_map_.end())
|
|
{
|
|
SUNLOG(eCRITICAL_LOG, __FUNCTION__" : Not found party member : %d", member_key);
|
|
return;
|
|
}
|
|
|
|
_PARTY_MEMBER_INFO& member_info = find_iterator->second;
|
|
member_info.map_code_ = map_code;
|
|
}
|
|
|
|
VOID
|
|
BaseParty::ResetReadyStateAllMember()
|
|
{
|
|
MEMBER_MAP::iterator begin_iterator = party_member_map_.begin(),
|
|
end_iterator = party_member_map_.end();
|
|
for ( ; begin_iterator != end_iterator; ++begin_iterator)
|
|
{
|
|
_PARTY_MEMBER_INFO& member_info = begin_iterator->second;
|
|
member_info.m_isReady = false;
|
|
member_info.m_selecteTeam = 0;
|
|
}
|
|
}
|
|
|
|
VOID
|
|
BaseParty::SetMemeberReadyState(DWORD member_key, BOOL ready_state)
|
|
{
|
|
_PARTY_MEMBER_INFO* current_info = const_cast<_PARTY_MEMBER_INFO*>(GetMemberInfo(member_key));
|
|
if (current_info == NULL)
|
|
{
|
|
SUNLOG(eCRITICAL_LOG, __FUNCTION__" : Not found member info : %d", member_key);
|
|
return;
|
|
}
|
|
|
|
if (current_info->m_isReady == (ready_state != false))
|
|
{
|
|
SUNLOG(eFULL_LOG, __FUNCTION__" : Already ready state is same : %d", ready_state);
|
|
return;
|
|
}
|
|
|
|
current_info->m_isReady = (ready_state != false);
|
|
}
|
|
|
|
BOOL
|
|
BaseParty::GetMemeberReadyState(DWORD member_key)const
|
|
{
|
|
const _PARTY_MEMBER_INFO* current_info = GetMemberInfo(member_key);
|
|
if (current_info == NULL)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return current_info->m_isReady;
|
|
}
|
|
|
|
VOID
|
|
BaseParty::SetMemeberTeam(DWORD member_key, BYTE selected_team)
|
|
{
|
|
_PARTY_MEMBER_INFO* current_info = const_cast<_PARTY_MEMBER_INFO*>(GetMemberInfo(member_key));
|
|
if (current_info == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (current_info->m_selecteTeam == selected_team)
|
|
{
|
|
SUNLOG(eCRITICAL_LOG, __FUNCTION__" : Already seleted team is same : %d", selected_team);
|
|
return;
|
|
}
|
|
|
|
current_info->m_selecteTeam = selected_team;
|
|
}
|
|
|
|
BYTE
|
|
BaseParty::GetMemeberTeam(DWORD member_key)const
|
|
{
|
|
const _PARTY_MEMBER_INFO* current_info = GetMemberInfo(member_key);
|
|
if (current_info == NULL)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return current_info->m_selecteTeam;
|
|
}
|
|
|
|
|
|
|
|
BOOL
|
|
BaseParty::IsReadyToAllMember()
|
|
{
|
|
MEMBER_MAP::iterator begin_iterator = party_member_map_.begin(),
|
|
end_iterator = party_member_map_.end();
|
|
for ( ; begin_iterator != end_iterator; ++begin_iterator)
|
|
{
|
|
_PARTY_MEMBER_INFO& member_info = begin_iterator->second;
|
|
|
|
if (member_info.m_isReady == false) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|