Files
Sun1602/Server/GameServer/GameZoneCommon.h
T
2022-10-26 12:25:11 +08:00

107 lines
4.2 KiB
C++

#pragma once
#define __DECL_GAMEZONEPOOL(_ClassType)
#define __IMPL_GAMEZONEPOOL(_ClassType)
#define WzVector_FiniteCheck( _wzVectorPtr ) \
( _finite((_wzVectorPtr)->x) && _finite((_wzVectorPtr)->y) && _finite((_wzVectorPtr)->z) )
class sPOLICY_ZONE
{
public: typedef DWORD POLICY_T;
enum eFLAG {
DISABLE_ALL = 0,
//////////////////////////////////////////////////////////////////////////
//ENABLE_SECTOR_VAR_RESOLUTION = 1<< 0, // f110531.4L, set to default, Sector Variable Resolution 적용 여부
//ENABLE_FIELD_HIGH_LOAD_BALANCING = 1<< 1, // f110531.4L, set to default, 동기화 패킷이 많이 발생하는 필드에 대한 패킷 로드벨런싱 처리 여부
//////////////////////////////////////////////////////////////////////////
ENABLE_TRIGGER = 1<< 3, // 트리거 처리 적용 여부
ENABLE_SAVE_LOCATION = 1<< 4, // 해당 필드에서의 플레이어 위치 저장 적용 여부
ENABLE_CHANGE_MOB_ABILITY = 1<< 5, // 입장 플레이어 수에 따른 몬스터 능력치 재계산 적용 여부
ENABLE_SUPERROOM = 1<< 6, // SuperRoom으로 설정된... PC방일 경우 처리 적용 여부
ENABLE_PARTY = 1<< 7, // 파티 관련 처리 적용 여부
#ifdef _NA_008012_20150130_RANKING_SYSTEM
ENABLE_RANKING = 1<< 8, // RankingSystemCtl 적용 여부
#endif // _NA_008012_20150130_RANKING_SYSTEM
//ENABLE_NvN_SYNC = 1<< 9, // synchronization control flag based on room related to PvP, GvG, and NvN|added by (WAVERIX) (f100329.2L)
ENABLE_ITEM_OBTAIN_ALL_PARTY_MEMBER = 1 << 10, // 파티원 전원이 아이템을 획득하는 지역 - arycoat.2012.02.03
//////////////////////////////////////////////////////////////////////////
ENABLE_DOMINATION_CONTROL = 1<<19, // 지역점령전 룰 설정 added by waverix
ENABLE_NPC_UPDATE_REF_SKIP = 1<<20, // Sector의 ReferenceCount에 의한 UpdateSkip 무시 여부 (부하 무시 못한다. 특수한 경우에만 사용)
ENABLE_SSQ_CONTROL = 1<<21, // 타락한 사원만의 특수 컨트롤
//////////////////////////////////////////////////////////////////////////
ENABLE_GROUP_VILLAGE
= ENABLE_TRIGGER
| ENABLE_SAVE_LOCATION
| ENABLE_PARTY
,
ENABLE_GROUP_HUNTING_FIELD
= ENABLE_TRIGGER
| ENABLE_PARTY
,
ENABLE_GROUP_ROOM_BASE // 일반 Room 상태에서 공통적으로 가지는 기능 (경우에 따라 빠질 수도 있다.), 로비는 별도 처리
= ENABLE_TRIGGER
| ENABLE_CHANGE_MOB_ABILITY
| ENABLE_SUPERROOM
#ifdef _NA_008012_20150130_RANKING_SYSTEM
| ENABLE_RANKING
#endif // _NA_008012_20150130_RANKING_SYSTEM
| ENABLE_PARTY
,
#ifdef _NA_008069_20150210_ADD_SPA_SYSTEM
ENABLE_GROUP_SPAFIELD
= ENABLE_TRIGGER
| ENABLE_SAVE_LOCATION
| ENABLE_PARTY
#endif //_NA_008069_20150210_ADD_SPA_SYSTEM
//////////////////////////////////////////////////////////////////////////
};
public:
const POLICY_T& FIELD;
private: POLICY_T m_Field; // FIELD
public: sPOLICY_ZONE() : FIELD(m_Field), m_Field( DISABLE_ALL ) {}
inline VOID Clear() { m_Field = DISABLE_ALL; }
inline VOID SetField( const POLICY_T flags ) { m_Field = (POLICY_T)flags; }
inline POLICY_T GetField() const { return m_Field; }
inline BOOLEAN IsChecked( const eFLAG flag ) const { return !!(m_Field & flag); }
__DISABLE_COPY(sPOLICY_ZONE);
};
//==================================================================================================
struct IObjectFinder
{
virtual bool operator()(Object* object) const = 0;
};
#if SUN_CODE_SAMPLE // Sample to use IObjectFinder
/*
void Sample_for_IObjectFinder_usage()
{
struct ObjectFinder : public IObjectFinder {
ObjectFinder(DWORD item_key) : item_key_(item_key) {}
virtual bool operator()(Object* object) const {
if (object->GetObjectKey() == item_key_) {
if (object->IsDeleteReserved()) {
return false;
}
return true;
}
return false;
}
DWORD item_key_;
} object_finder(dwFieldItemObjectKey);
Item* pItem = pField->SearchNeighborItem(pPlayer->GetSectorIndex(), &object_finder);
};
*/
#endif
//==================================================================================================