122 lines
4.1 KiB
C++
122 lines
4.1 KiB
C++
#pragma once
|
||
//=============================================================================================================================
|
||
/*
|
||
|
||
DOMINATION_EVENT_END:
|
||
允许进入(会馆状态)
|
||
|
||
DOMINATION_EVENT_SYSTEM_RESET:
|
||
入口块
|
||
驱逐当前用户
|
||
攻击公会设置
|
||
场销毁、创建(触发设置)
|
||
|
||
DOMINATION_EVENT_WAIT:
|
||
可以入学
|
||
战争定时器时间设置(停止状态)
|
||
- 同步进入用户的时间
|
||
|
||
DOMINATION_EVENT_START:
|
||
可以入学
|
||
开始战争计时器
|
||
- 同步进入用户的时间
|
||
|
||
// 状态值
|
||
DOMINATION_EVENT_ACTION_START : 拍卖时间 [可以拍卖,可以设置门,允许入场(周三)]
|
||
DOMINATION_EVENT_ACTION_END :拍卖结束[不允许拍卖,可以设置门,允许入场(周三)]
|
||
DOMINATION_EVENT_SELECT_ATTACKGUILD:攻击公会选择[不允许拍卖,可以设置门,允许入场(周三)]
|
||
DOMINATION_EVENT_SELECT_ATTACKGUILD_END:攻击公会选择结束[不允许拍卖,可以设置门,允许进入(周三)]
|
||
DOMINATION_EVENT_SYSTEM_RESET : 系统重置[无拍卖,无门设置,无入场(官方,周三)]
|
||
DOMINATION_EVENT_WAIT:等待战争[不允许拍卖,不允许设置门,允许入场(关闭,周三)]
|
||
DOMINATION_EVENT_START:战争开始[无法拍卖,不允许设置大门,允许入场(关闭,周三)]
|
||
DOMINATION_EVENT_END :战争结束[可以拍卖,可以设置门,允许入场(周三)]
|
||
DOMINATION_EVENT_ACTION_START2 :不存在的状态
|
||
DOMINATION_EVENT_MAX : 异常状态
|
||
|
||
*/
|
||
//=============================================================================================================================
|
||
|
||
#include "ZoneInterface.h"
|
||
|
||
typedef std::pair<GUILDGUID, INT> GUILD_COUNT;
|
||
typedef std::pair<DWORD, DWORD> OUTSIDER; //<key, count>
|
||
typedef STLX_LIST<OUTSIDER> OUTSIDERS;
|
||
typedef OUTSIDERS::iterator OUTSIDERS_IT;
|
||
|
||
typedef std::pair<GUILDGUID, GUILDGUID> KICK_GUILD;
|
||
|
||
class DominationField : public ZoneInterface
|
||
{
|
||
_DECLARE_POOL(DominationField)
|
||
|
||
enum { empty_guild_idx = -1 };
|
||
enum { offense_guild, defense_guild, max_guild };
|
||
enum { OUTSIDER_UPDATE_TIME = 100, EVENT_UPDATE_TIME = 500, KICK_TIME = 10 * 1000 };
|
||
//0.1 秒、0.5 秒、10 秒
|
||
|
||
public:
|
||
DominationField(void);
|
||
virtual ~DominationField(void);
|
||
|
||
VOID Create(KEYTYPE key, MAPCODE MapCode, ServerSession* pServerSession);
|
||
inline virtual eZONETYPE GetType() { return eZONETYPE_DOMINATION_FIELD; }
|
||
|
||
virtual BOOL Process();
|
||
virtual VOID ReadyUser(User * pUser, eSEND_TYPE type, MAPCODE FieldCode = 0,
|
||
DWORD dwAreaID = 0, WzVector * pwvStartPos = NULL, bool bFirstJoin = false);
|
||
VOID SetGuildGuid(GUILDGUID offense, GUILDGUID defense, eDOMINATION_EVENT_TYPE eSetType);
|
||
VOID KickUser(DWORD playerKey);
|
||
|
||
protected:
|
||
virtual VOID On_create();
|
||
virtual VOID On_destroy();
|
||
virtual VOID On_readyuser(User* pUser);
|
||
virtual VOID On_enteruser(User* pUser);
|
||
virtual VOID On_leaveuser(User* pUser);
|
||
virtual RC::eROOM_RESULT _CanJoinEach(User* pUser, eZONEPUBLIC RoomPublic, TCHAR* pszRoomPWD);
|
||
|
||
|
||
private:
|
||
#ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION
|
||
typedef STLX_MULTIMAP<WORD, sDOMINATION_EVENT_INFO> EventInfos;
|
||
//从解析器中检索当前字段的预占事件并将其存储在 EventInfos 中
|
||
VOID _SetEventInfos(MAPCODE map_code);
|
||
//从您的 EventInfos 中获取征服战争的当前状态
|
||
eDOMINATION_EVENT_STATE _GetCurEventState(const WORD day_of_week, const DWORD time) const;
|
||
EventInfos event_infos_;
|
||
#endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION
|
||
|
||
RC::eROOM_RESULT _GuildCount(User* pUser, INT count = 1);
|
||
std::pair<BOOL, INT> _Counting(GUILDGUID guildGuid, INT count);
|
||
|
||
BOOL _ReturnToEntrance(User* pUser);
|
||
INT _GetGuildCountIndex(GUILDGUID guildGuid);
|
||
VOID _ReSetDomination();
|
||
VOID _KickUser(GUILDGUID guildGuid);
|
||
VOID _UpdateTimeEvent();
|
||
|
||
BYTE _CountingPlayer(GUILDGUID guild_guid);
|
||
|
||
#ifdef _NA_006826_20130722_DOMINATION_RENEWAL
|
||
void _KickUsers_ExceptWinGuild(GUILDGUID winner_guild);
|
||
#endif //_NA_006826_20130722_DOMINATION_RENEWAL
|
||
|
||
public:
|
||
static BOOL is_gm_observer; // 你打算让 gm 成为观察员吗? 与 gm 命令一起使用.
|
||
|
||
private:
|
||
GUILD_COUNT guild_count_[max_guild];
|
||
OUTSIDERS outSider_; // 错误的用户
|
||
OUTSIDERS outSiderOb_; // 观察员用户 (GM)
|
||
|
||
util::Timer outsider_updatetimer_; // outSider_ 处理计时器 //_0_20100419_DOMINATION_RETURN_TO_ENTRANCE_BUG
|
||
|
||
BOOL bReCreate_;
|
||
util::Timer kickTimer_; // 退休等待时间(10秒),
|
||
KICK_GUILD pairKickGuild_;
|
||
|
||
util::Timer eventUpdateTimer_; // 以分钟为单位的事件(以秒为单位检查)
|
||
eDOMINATION_EVENT_STATE curEventState_;
|
||
};
|
||
|