Files
Sun1602/Server/GameServer/DominationArea.cpp
T
2022-10-26 12:25:11 +08: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__":设置区域信息 : %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__":设置区域信息 : %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__":找不到帮会 : %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__"]不增加城墙防御点[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