Files
2022-10-26 12:25:11 +08:00

272 lines
14 KiB
C++

#ifndef _SOLARTRIGGER_COMMON_H
#define _SOLARTRIGGER_COMMON_H
#pragma once
#include <UtilityCommon.h>
#include <MemoryPoolFactory.h>
//--------------------------------------------------------------------------------------------------
// 조건 트리거 타입
// 3D엔진팀에서 타입 값을 변경될 경우
// 1. enum eCONDITION_TYPE을 변경한다.
// 2. ConditionInfo를 상속받는 하위 클래스를 변경한다.
enum eCONDITION_TYPE
{
eCONDITION_ALWAYS = 0, // 항상
eCONDITION_COMPARE_SWITCH = 1, // 스위치 비교
eCONDITION_CLICK_OBJECT = 2, // 오브젝트 클릭
eCONDITION_DAMAGE_OBJECT = 3, // 오브젝트 데미지 입음
eCONDITION_COUNT_NPCKILL = 4, // 몬스터 사냥 마리수
eCONDITION_PASS_TIME = 5, // 일정시간이 흐름
eCONDITION_ENTER_AREA = 6, // 특정 영역에 들어감
eCONDITION_HAVE_ITEM = 7, // 아이템을 소유하고 있다
eCONDITION_MULTI_SWITCH = 8, // 다중 스위치 비교
eCONDITION_MISSION_POINT = 9, // 미션 포인트 만족
eCONDITION_COMPARE_VARIABLE = 10, // 변수 비교
eCONDITION_QUEST_PROGRESS = 11, // Quest 완료 체크 트리거
eCONDITION_CHECK_CLASS_ID = 12, // 유저 클래스 설정(의존 트리거)
eCONDITION_NPCKILL_FOR_UNITID = 13, // 몬스터 유닛을 잡으면
eCONDITION_LIVE_PARTY_MEMBER = 14, // 파티원 생존/사망 상태라면
//_NA001385_20090924_DOMINATION_TRIGGER
eCONDITION_CHECK_OBJECT_HP = 15, // Mapobject의 HP수치가 %이하일경우
eCONDITION_DESTROY_OBJECT = 16, // mapobject가 파괴 되었다면.
//_NA_0_20100222_UNIT_TRIGGERS_ADD
// 17번 맵툴 여유 공간
eCONDITION_CHECK_OBJECTKIND_HP = 18, // [UnitID,Mapobject]의 HP수치가 %이하일경우
// _NA_002098_20110307_ADD_NPC_CONTROL_TRIGGER
eCONDITION_NPC_ENTER_AREA = 19, // NPC가 특정 영역에 들어갔을 때
//_NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER
eCONDITION_COMPLETE_COLLECTION = 20, // 미션내 수집 트리거
// _NA_000000_20130103_ADD_SERVER_EVENT_TRIGGER
eCONDITION_SERVER_EVENT = 21, // 서버이벤트 트리거
// _NA_000000_20130104_ADD_CONDITION_TRIGGER_CHECK_TEAM
eCONDITION_CHECK_TEAM = 22, // 팀 체크(의존 트리거)
eCONDITION_COMPARE_SWITCH_EX = 23, // 스위치(확장형) 비교
eCONDITION_MONSTER_ENTER_AREA = 24, // 몬스터가 특정 영역에 들어갔을 때
eCONDITION_MAX, // 에러 검출용으로 쓰임 (define 내부에 넣지 않는다. 작업시 값만 상승)
};
//--------------------------------------------------------------------------------------------------
enum eACTION_TYPE
{
eACTION_CHANGE_OBJECTANI = 1001, // 오브젝트 애니메이션 변경 (서버-구현X)(클라-구현O)
eACTION_CHANGE_PATHTILE = 1002, // 길찾기 타일 속성 변경 (서버-구현O)(클라-구현O)
eACTION_CHANGE_OBJECTSTATE = 1003, // 오브젝트 상태 변경 (서버-구현X)(클라-구현O)
eACTION_PLAY_EVENT = 1004, // 이벤트 플레이 (서버-구현O)(클라-구현O)
eACTION_SET_ISATTACK = 1005, // 공격 가능/불가 설정 (서버-구현O)(클라-구현X)
eACTION_PORTAL_PLAYER = 1006, // 플레이어 포탈 (서버-구현O)(클라-구현X)
eACTION_SET_OBJECTTHRUST = 1007, // 오브젝트 밀기 설정 (서버-구현X)(클라-구현X) X
eACTION_APPLY_DAMAGE = 1008, // 데미지 적용 (서버-구현X)(클라-구현X) X
eACTION_REFLECT_DAMAGE = 1009, // 데미지 반사 (서버-구현X)(클라-구현X) X
eACTION_CREATE_MONSTER = 1010, // 몬스터 생성 (서버-구현O)(클라-구현O)
eACTION_DISPLAY_MSGBOX = 1011, // 메세지 박스 출력 (서버-구현O)(클라-구현X)
eACTION_REMOVE_ITEM = 1012, // 인벤토리 아이템 제거 (서버-구현O)(클라-구현X)
eACTION_REWARD_PLAYER = 1014, // 플레이어 보상 (서버-구현O)(클라-구현X)
eACTION_CLEAR_MISSION = 1015, // 미션 결과 (서버-구현O)(클라-구현O)
eACTION_PORTAL_RANDOM = 1016, // 랜덤 포탈 (서버-구현O)(클라-구현X)
eACTION_ACTIVATE_TRIGGER = 1017, // 트리거 활성 비활성 (서버-구현O)(클라-구현O)
eACTION_AREA_DAMAGE = 1018, // 범위데미지 (서버-구현O)(클라-구현X)
eACTION_OPERATE_SWITCH = 1019, // 스위치 연산 (서버-구현O)(클라-구현X)
eACTION_OPERATE_VARIABLE = 1020, // 스위치 설정 변경 (서버-구현O)(클라-구현X)
eACTION_ROAD_CONNECT = 1021, // 길 연결을 설정/해제한다 (서버-구현O)(클라-구현O)
eACTION_CREATE_DIR_MONSTER = 1022, // 몬스터를 생성한다(방향) (서버-구현O)(클라-구현O)
eACTION_CHANGE_LIGHT = 1023, // 라이트 설정을 변경한다 (서버-구현X)(클라-구현O)
eACTION_CHANGE_OBJECT_TYPE = 1024, // 오브젝트 상태를 바꾼다 (서버-구현X)(클라-구현O)
eACTION_RANDOM_MAP_MOVE = 1025, // 랜덤 맵 이동 (서버-구현O)(클라-구현X)
eACTION_DROP_TRESUREBOX = 1026, // 보물 상자 떨어뜨리기 (서버-구현X)(클라-구현X) X
//eACTION_CREATE_MONSTER,
eACTION_QUEST_SATISFACTION = 1027, // 퀘스트 조건 만족 (서버-구현X)(클라-구현X) X
eACTION_QUEST_GRANT = 1028, // 퀘스트 부여 (서버-구현O)(클라-구현X)
eACTION_QUEST_SETUP = 1029, // 퀘스트 완료/실패 설정 (서버-구현O)(클라-구현X)
//
eACTION_USE_CATEGORY = 1031, // (필드)의 (카테고리)를 사용한다 (서버-구현X)(클라-구현X) X
eACTION_HOLD_CHARACTER = 1032, // (Character)의 이동을 (시간)동안 막는다 (서버-구현X)(클라-구현X) X
eACTION_CREATE_MONSTER_GROUP = 1033, // 몬스터그룹 생성 (서버-구현X)(클라-구현X) X
eACTION_SHOW_GUIDE_MSGBOX = 1034, // 안내메시지박스 출력 (서버-구현X)(클라-구현O)
eACTION_SHOW_OR_HIDE_UNIT = 1035, // 유닛 나타남/사라짐 (서버-구현X)(클라-구현X) X
eACTION_SHOW_OR_HIDE_MSGBOX = 1036, // 메시지 박스의 나타남/사라짐 (서버-구현X)(클라-구현O)
eACTION_RANDOM_AREA_MOVE = 1038, // 유저를 영역 이동 시킨다 (서버-구현O)(클라-구현X)
eACTION_RANDOM_MONSTER_SPAWN = 1039, // 몬스터 랜덤 스폰 (서버-구현O)(클라-구현O)
eACTION_TOWER_OF_TRIAL_SHOW_THE_FLOOR = 1040, // (서버-구현O)(클라-구현X)
eACTION_REMOVE_MONSTER = 1041, // (서버-구현O)(클라-구현X)
eACTION_ADD_EXP = 1042, // (서버-구현O)(클라-구현X)
eACTION_MONSTER_STAT_UP_OR_DOWN = 1043, // 몬스터의 능력치중 하나를 증가/감소 시킨다. (서버-구현O)(클라-구현X)
eACTION_RANDUM_TRIGER_ON_OR_OFF = 1044, // 해당 트리거중 하나를 on/off 시킨다. (서버-구현O)(클라-구현X)
//__NA001140_20080128_SOUND_TRIGGER_ADD
eACTION_PLAY_MUSIC = 1045, // 사운드 파일을 재생한다. (서버-구현O)(클라-구현X)
//_NA001385_20090924_DOMINATION_TRIGGER
eACTION_DOWN_OBJETC_HP = 1046, // 맵 오브젝트의 HP를 깍는다. (서버-구현O)(클라-구현X)
eACTION_CHANGE_ATTACK_KIND = 1047, // 자신을 공격가능[불가능] 하게 만든다. (서버-구현O)(클라-구현O)
eACTION_ACTIVE_STAMP = 1048, // 각인 가능 상태로 변경시(에테르 파괴) 각인물의 (서버-구현O)(클라-구현X)
// 활성화 상태 동기화를 위한 이벤트로 사용
// 현재 eCONDITION_DESTROY_OBJECT 상태 일시 동작
//_NA_0_20100222_UNIT_TRIGGERS_ADD
eACTION_ATTACK_OBJECTKIND = 1049, // [몬스터/유닛/오브젝트]를 공격 할 수 [있게/없게] 만든다 (특정 몬스터 객체가 플레이어에게 공격 당하지 않게 만든다.)
eACTION_ACTIVE_SKILL_OBJECTKIND = 1050, // [몬스터/유닛/오브젝트]가 [스킬ID]스킬을 발동시킨다.
eACTION_SHOW_MESSAGEBOX_OBJECTKIND = 1051, // [몬스터/유닛/오브젝트]의 위치에 [메시지코드]메시지를 보여준다.
eACTION_SET_ATTACK_STATE_OBJECTKIND = 1052, // [몬스터/유닛]가 [몬스터]를 [공격/멈춤]한다.
eACTION_DESTROY_OBJECTKIND = 1053, // [몬스터/유닛/오브젝트]를 제거하며 보상을 [지급/미지급]한다.
eACTION_CREATE_MONSTER_LINKED_MAPOBJECT = 1054, // [오브젝트]를 생성한다. (MapObject에 연결된 Npc 생성)
// _NA_0_20100525_ADD_TIMER_ACTION_TRIGGER
eACTION_CONTROL_TIMER = 1055, // 시계를 보여준다.
//_NA_0_20100616_DOMINATION_EVENT
eACTION_DO_COMMAND = 1056, // 타입에 해당 하는 동작을 실행(트리거를 통한 메시지 전달)
//_NA_0_20100817_HELLON_LAST_TRIGGER
eACTION_MOVE_CONTROL = 1057,
eACTION_ANIMATION_CONTROL = 1058,
// _NA_002098_20110307_ADD_NPC_CONTROL_TRIGGER
eACTION_NPC_APPLY_DAMAGE = 1059, // 몬스터/유닛/오브젝트에게 데미지를 적용한다.
//_NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER
eACTION_COMPLETE_COLLECTION = 1060, //미션내 채집 트리거
//_NA_000000_20130104_ADD_ACTION_TRIGGER_APPLY_HPMPSD
eACTION_APPLY_HPMPSD = 1061, // [개인/전체]에게 [HP/MP/SD]를 [수치]만큼 [증가/감소]를 적용
//_NA_006658_20130422_ADD_ACTION_TRIGGER_CHANGE_OBJECT_HP
eACTION_CHANGE_OBJECT_HP = 1062, // [ObjectKey]오브젝트의 HP를 [비율/수치] [숫자]만큼 [내린다/올린다]
//_NA_006619_20130422_ADD_ACTION_TRIGGER_CHANGE_RADAR_MAP
eACTION_CHANGE_RADAR_MAP = 1063, // 레이더맵(미니맵)을 변경한다.
eACTION_ATTACH_STATE_RANGE = 1064, // 대상의 범위내에 상태를 지속시간동안 부여한다.
eACTION_CHANGE_PLAYER_HP = 1065, // [파티/개인]의 HP를 [비율/수치] [숫자]만큼 [내린다/올린다]
eACTION_OPERATE_SWITCH_EX = 1066, // 스위치 연산(확장형)
eACTION_NPC_RANDOM_AREA_MOVE = 1067, // NPC 랜덤 영역 이동
eACTION_MAX, // 에러 검출용으로 쓰임 (define 내부에 넣지 않는다. 작업시 값만 상승)
};
//--------------------------------------------------------------------------------------------------
// 비교 종류
enum eCOMPARE_TYPE
{
eCOMPARE_EQUAL = 0, // "=="
eCOMPARE_MORE, // ">"
eCOMPARE_LESS, // "<"
eCOMPARE_LESSTHAN, // "<="
eCOMPARE_MORETHAN, // ">="
eCOMPARE_NOTEQUAL, // "!="
};
// 연산 종류
enum eOPERATION_TYPE
{
eOPERATION_EQUAL = 0, // "="
eOPERATION_PLUS, // "+"
eOPERATION_MINUS, // "-"
eOPERATION_MULTIPLE, // "*"
eOPERATION_DIVIDE, // "/"
};
// _NA_0_20100222_UNIT_TRIGGERS_ADD
enum eOBJECTCODE_TYPE
{
NPCCODE_TYPE = 0,
UNITID_TYPE = 1,
MAPNPC_TYPE = 2,
NON_TYPE = 3, // _NA_0_20100817_HELLON_LAST_TRIGGER
};
enum eACTION_ATTACK_TYPE
{
ATTACK_IMPOSSIBILITY = 0,
ATTACK_POSSIBILITY = 1,
};
//_NA_0_20100817_HELLON_LAST_TRIGGER
enum eACTION_MOVE_TYPE
{
MOVE_IMPOSSIBILITY = 0,
MOVE_POSSIBILITY = 1,
};
//_NA_0_20100525_ADD_TIMER_ACTION_TRIGGER
enum eTIMER_CONTROL_TYPE
{
eTIMER_CREATE_DECREASE = 0, // 타이머 생성후 시간값 감소.
eTIMER_CREATE_INCREASE = 1, // 타이머 생성후 시간값 증가.
eTIMER_DESTROY = 2, // 일정 시간 ui 유지후 파괴.
};
// 사용하지 않는 값
#define INVALID_SWITCH_ID_VALUE 255
//--------------------------------------------------------------------------------------------------
#if !defined(_SERVER)
template<typename _TYPE>
class TRIGGER_POOL
{
public:
enum {
eDEFUALT_TRIGGER_POOL_SIZE = 10,
};
TRIGGER_POOL(INT iSize = eDEFUALT_TRIGGER_POOL_SIZE)
{
#ifndef _SERVER
m_pool.Initialize(iSize);
#else
m_pool.Initialize(iSize, iSize, "TRIGGER_POOL", AssertionLogger4Pool_Server);
#endif //
}
~TRIGGER_POOL()
{
m_pool.Release();
}
_TYPE * Alloc()
{
return (_TYPE*)m_pool.Alloc();
}
void Free(_TYPE* pType)
{
m_pool.Free(pType);
}
private:
util::CMemoryPoolFactory<_TYPE> m_pool;
};
#define __DECLARE_POOL(CLASSNAME) \
private: \
static TRIGGER_POOL<CLASSNAME> m_Pool; \
public: \
static CLASSNAME* Create() \
{ \
return m_Pool.Alloc(); \
} \
static void Destroy(CLASSNAME* pObject) \
{ \
m_Pool.Free(pObject); \
}
#define __IMPL_POOL(CLASSNAME) \
TRIGGER_POOL<CLASSNAME> CLASSNAME::m_Pool;
//--------------------------------------------------------------------------------------------------
#elif defined(_SERVER)
#define __DECLARE_POOL(class_name) \
public: \
static class_name* Create() { \
return TAllocNew(class_name); \
} \
static void Destroy(class_name* object_ptr) { \
TAllocDelete(class_name, object_ptr); \
}
#define __IMPL_POOL(class_name)
#endif
//--------------------------------------------------------------------------------------------------
#endif //_SOLARTRIGGER_COMMON_H