Files
git 9cb257e7ae Add GameClients drops and keep current 1602 source work.
CN1602 is the local client. KR is the official tree with unpacked Data, System, and Sound. Packed .wpk files stay off git.
2026-08-30 23:24:31 +03:00

232 lines
5.6 KiB
C++

#include "stdafx.h"
#include "DominationArea.h"
#include "DominationAuction.h"
#include "PacketStruct_GZ.h"
#ifdef _NA001385_20090924_DOMINATION
DominationArea::DominationArea(MAPCODE map_code) :
map_code_(map_code),
transaction_increase_deffense_wall_(false),
is_load_data_(false),
auction_(map_code)
//_NA_20110406_CHANGE_RULE_FOR_DOMINATION_JOIN
, member_(map_code)
{
}
DominationArea::~DominationArea()
{
}
void
DominationArea::SetInfo(const DOMINATION_INFO& domination_info)
{
domination_info_ = domination_info;
SUNLOG(eFULL_LOG, __FUNCTION__":Set area info : %d", domination_info.m_FieldCode);
_IsLoadData(true);
}
#ifdef _NA_006826_20130722_DOMINATION_RENEWAL
void DominationArea::SetInfo( const DOMINATION_INFO& domination_info, const eDOMINATION_EVENT_STATE domi_state )
{
domination_info_ = domination_info;
#ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION
//由于SetInfo被调用的时间是占领战初始化的时间,所以此时储存占领的公会信息.
m_PrevInGuildInfo = domination_info.m_inGuildInfo;
#endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION
SUNLOG(eFULL_LOG, __FUNCTION__":Set area info : %d", domination_info.m_FieldCode);
switch (domi_state)
{
case DOMINATION_EVENT_WAIT:
domination_info_.progress_state_ = DOMINATION_PROGRESS_STATE_READY;
break;
case DOMINATION_EVENT_START:
domination_info_.progress_state_ = DOMINATION_PROGRESS_STATE_START;
break;
default:
domination_info_.progress_state_ = DOMINATION_PROGRESS_STATE_NONE;
break;
}
_IsLoadData(true);
}
#endif //_NA_006826_20130722_DOMINATION_RENEWAL
bool
DominationArea::ExistGuild(GUILDGUID guild_guid)const
{
const DOMINATION_INFO& domination_info = GetInfo();
return (domination_info.m_inGuildInfo.m_GuildGuid == guild_guid ||
domination_info.m_disGuildInfo.m_GuildGuid == guild_guid)? true : false;
}
DOMINATION_BASIC_GUILD_INFO*
DominationArea::_WhatGuild(GUILDGUID guild_guid)
{
DOMINATION_INFO& domination_info = GetInfo();
if (domination_info.m_inGuildInfo.m_GuildGuid == guild_guid)
{
//占领行会
return &(domination_info.m_inGuildInfo);
}
else if (domination_info.m_disGuildInfo.m_GuildGuid == guild_guid)
{
//攻击公会
return &(domination_info.m_disGuildInfo);
}
SUNLOG(eCRITICAL_LOG, __FUNCTION__":Guild not found : %d", guild_guid);
return NULL;
}
void
DominationArea::ChangeGuildMark(GUILDGUID guild_guid,
GUILDMARKIDX pattern_index, GUILDMARKIDX background_index)
{
DOMINATION_BASIC_GUILD_INFO* guild_info = _WhatGuild(guild_guid);
if (guild_info == NULL)
{
return;
}
guild_info->m_PatternIndex = pattern_index;
guild_info->m_BackGroundIndex = background_index;
}
void
DominationArea::ChangeGuildName(GUILDGUID guild_guid, TCHAR* guild_name)
{
DOMINATION_BASIC_GUILD_INFO* guild_info = _WhatGuild(guild_guid);
if (guild_info == NULL)
{
return;
}
_tcsncpy(guild_info->m_tszGuildName, guild_name, _countof(guild_info->m_tszGuildName));
guild_info->m_tszGuildName[_countof(guild_info->m_tszGuildName) - 1] = '\0';
}
void
DominationArea::ChangeGuildMaster(GUILDGUID guild_guid, TCHAR* master_name)
{
DOMINATION_BASIC_GUILD_INFO* guild_info = _WhatGuild(guild_guid);
if (guild_info == NULL)
{
return;
}
_tcsncpy(guild_info->m_tszGuildMaster, master_name, _countof(guild_info->m_tszGuildMaster));
guild_info->m_tszGuildMaster[_countof(guild_info->m_tszGuildMaster) - 1] = '\0';
}
bool
DominationArea::CanIncreaseDeffenseWall()const
{
if (transaction_increase_deffense_wall_ == true)
{
SUNLOG(eFULL_LOG, "["__FUNCTION__"]Do not add wall defense points [transaction]");
return false;
}
return true;
}
bool
DominationArea::IsDeffenseGuild(GUILDGUID guild_guid)const
{
if(domination_info_.m_inGuildInfo.m_GuildGuid == guild_guid)
{
return true;
}
return false;
}
bool
DominationArea::IsAttackGuild(GUILDGUID guild_guid)const
{
if(domination_info_.m_disGuildInfo.m_GuildGuid == guild_guid)
{
return true;
}
return false;
}
bool
DominationArea::IsApplyGuild(GUILDGUID guild_guid)const
{
if(domination_info_.m_disGuildInfo.m_GuildGuid == guild_guid ||
domination_info_.m_inGuildInfo.m_GuildGuid == guild_guid)
{
return true;
}
return false;
}
#ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION
bool
DominationArea::IsPrevInGuild( GUILDGUID guild_guid ) const
{
if (m_PrevInGuildInfo.m_GuildGuid == guild_guid)
{
return true;
}
return false;
}
#endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION
void
DominationArea::DataLoad()const
{
if (is_load_data_ == false)
{
_RequestData();
}
if (auction_.IsLoaded() == false)
{
auction_.RequestData();
}
//_NA_20110406_CHANGE_RULE_FOR_DOMINATION_JOIN
if (member_.IsLoaded() == false)
{
member_.RequestData();
}
}
void
DominationArea::_RequestData()const
{
MSG_GZ_DOMINATION_INFO_SYN send_msg;
send_msg.m_MapCode = GetMapCode();
g_pGameServer->SendToServer(GUILD_SERVER, &send_msg, sizeof(send_msg));
WAVERIX_WRAPPER((WAVERIX_LC_CALL2("waverix_log_trace_domination",
_T("|["__FUNCTION__"]|{mapcode}="), send_msg.m_MapCode)));
}
const RC::eDOMINATION_RESULT
DominationArea::CanJoinMember(const GUILDGUID guild_guid, const CHARGUID char_guid)const
{
if (IsApplyGuild(guild_guid) == false)
{
return RC::DOMINATION_RESULT_NOT_JOIN_GUILD;
}
//_NA_20110406_CHANGE_RULE_FOR_DOMINATION_JOIN
bool guild_type = (IsAttackGuild(guild_guid)) ? true : false;
if (GetMember()->MemberCount(guild_type, char_guid) > MAX_DOMINATION_MEMBER)
{
return RC::DOMINATION_RESULT_OVERFLOW_MEMBER;
}
return RC::DOMINATION_RESULT_SUCCESS;
}
#endif//_NA001385_20090924_DOMINATION
#ifdef _NA_006826_20130722_DOMINATION_RENEWAL
void DominationArea::ChangeAreaProgressState( const eDOMINATION_PROGRESS_STATE area_state )
{
domination_info_.progress_state_ = area_state;
}
#endif //_NA_006826_20130722_DOMINATION_RENEWAL