Files
Sun1602/SolarTrigger/ConditionInfo.h
T
2022-10-26 12:25:11 +08:00

241 lines
6.3 KiB
C++

#pragma once
#ifndef SOLARTRIGGER_CONDITION_INFO_H
#define SOLARTRIGGER_CONDITION_INFO_H
//==================================================================================================
/// ConditionInfo's class
/**
@author Kim Min Wook < taiyo@webzen.com >
@since 2004. 12. 29
@remark
- 컨디션 트리거(ConditionInfo class)을 상속받은 각종 컨디션 트리거 타입 클래스들 집합
@note
-
@history
- ~2011. 07. 20
- 2011. 07. 20, waverix, code improvement
*/
//==================================================================================================
#include "TriggerCommon.h"
//-----------------------------------------------------------------------
//
// 최상위 클래스
//
//-----------------------------------------------------------------------
class ConditionInfo
{
public:
ConditionInfo(eCONDITION_TYPE trigger_type);
virtual ~ConditionInfo();
eCONDITION_TYPE TriggerType() const;
private:
eCONDITION_TYPE trigger_type_;
};
inline ConditionInfo::ConditionInfo(eCONDITION_TYPE trigger_type)
: trigger_type_(trigger_type)
{
}
inline ConditionInfo::~ConditionInfo()
{
}
inline eCONDITION_TYPE ConditionInfo::TriggerType() const
{
return trigger_type_;
}
//-----------------------------------------------------------------------
//
// 하위 클래스 선언 정의문
//
//-----------------------------------------------------------------------
#define BEGIN_DECL_CONDITION(ConcreteCondition) \
class ConcreteCondition##_INFO : public ConditionInfo \
{ \
public: \
ConcreteCondition##_INFO() : ConditionInfo(e##ConcreteCondition) {} \
virtual ~ConcreteCondition##_INFO() {}
#define END_DECL_CONDITION \
};
//-----------------------------------------------------------------------
//
// 하위 클래스
//
// Warnings : ObjectID가 INT
// ItemCode가 INT
//
//-----------------------------------------------------------------------
namespace ns_trigger {
;
enum
{
PERSONAL = 0,
PARTY = 1,
ZONE = 2,
};
enum // NOTE: f110721.2L, unused type
{
METHOD_GENERAL = 0,
METHOD_ACCUMULATE = 1,
};
}; //end of namespace
BEGIN_DECL_CONDITION(CONDITION_ALWAYS)
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_COMPARE_SWITCH)
__PROPERTY(BYTE, SwitchID);
__PROPERTY(BYTE, OperationType);
__PROPERTY(INT, Value);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_COMPARE_SWITCH_EX)
__PROPERTY(BYTE, Target);
__PROPERTY(BYTE, SwitchID);
__PROPERTY(BYTE, OperationType);
__PROPERTY(INT, Value);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_CLICK_OBJECT)
__PROPERTY(INT, ObjectID);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_DAMAGE_OBJECT)
__PROPERTY(INT, ObjectID);
__PROPERTY(FLOAT, Damage);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_COUNT_NPCKILL)
__PROPERTY(INT, AreaID);
__PROPERTY(INT, MonsterCode); //< 몹 종류 몹 Code
__PROPERTY(BYTE, IsParty);
__PROPERTY(INT, KillCount); //< 몇마리
__PROPERTY(BYTE, Method); //< 방법 = { 일반 , 누적 }
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_PASS_TIME)
__PROPERTY(INT, PassTime);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_ENTER_AREA)
__PROPERTY(INT, AreaID);
__PROPERTY(INT, PlayerCount);
__PROPERTY(BYTE, IsParty);
END_DECL_CONDITION;
// _NA_002098_20110307_ADD_NPC_CONTROL_TRIGGER
// NPC가 특정 지역에 들어갔을 때
BEGIN_DECL_CONDITION(CONDITION_NPC_ENTER_AREA)
__PROPERTY(CODETYPE, AreaID);
__PROPERTY(CODETYPE, NPCUnitID);
END_DECL_CONDITION;
//_NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER
BEGIN_DECL_CONDITION(CONDITION_COMPLETE_COLLECTION)
public:
__PROPERTY(CODETYPE, ObjectKey); // 객체 종류에 따라 변경
END_DECL_CONDITION;
//_NA_000000_20130103_ADD_SERVER_EVENT_TRIGGER
BEGIN_DECL_CONDITION(CONDITION_SERVER_EVENT)
public:
__PROPERTY(int, EventID); // 이벤트 종류에 따라 변경
END_DECL_CONDITION;
// _NA_000000_20130104_ADD_CONDITION_TRIGGER_CHECK_TEAM
BEGIN_DECL_CONDITION(CONDITION_CHECK_TEAM)
public:
__PROPERTY(int, TeamKey); // 이벤트 종류에 따라 변경
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_HAVE_ITEM)
__PROPERTY(INT, ItemCode);
__PROPERTY(INT, ItemNum);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_MULTI_SWITCH)
public: enum { _MAX_SWITCH_ID_NUM = 10 };
__ARRAY_PROPERTY(BYTE, _MAX_SWITCH_ID_NUM, SwitchID);
__PROPERTY(BYTE, OperationType1);
__PROPERTY(INT, Value1);
__PROPERTY(BYTE, OperationType2);
__PROPERTY(INT, Value2);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_MISSION_POINT)
__PROPERTY(INT, MissionPoint); // 이 포인트보다
__PROPERTY(BYTE, Flag); // 0:이상 1:이하 2:동등
END_DECL_CONDITION;
// [변수IDX] 가 [비교] [int]를 만족하면
BEGIN_DECL_CONDITION(CONDITION_COMPARE_VARIABLE)
__PROPERTY(INT, VarID);
__PROPERTY(BYTE, OperationType);
__PROPERTY(INT, Value);
END_DECL_CONDITION;
// Quest 완료 체크 트리거, 있는것인지 확인할 것
BEGIN_DECL_CONDITION(CONDITION_QUEST_PROGRESS)
enum ePROGRESS { IN_PROGRESS, COMPLETED, DONTHAVE };
__PROPERTY(/*QCODE*/ ULONG, QuestID);// Quest ID
__PROPERTY(BYTE, Progress); // (진행중, 완료한)
END_DECL_CONDITION;
// 유저 클래스 설정(의존 트리거)
// [USER CLASS ID] 이면, //0:모두, 1:버서커, 2:드래곤, 3:쉐도우, 4:발키리, 5:엘리멘탈리스트
BEGIN_DECL_CONDITION(CONDITION_CHECK_CLASS_ID)
__PROPERTY(INT, ClassID);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_NPCKILL_FOR_UNITID)
__PROPERTY(WzID, MonsterUnitID);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_LIVE_PARTY_MEMBER)
public:
enum{ MEMBER_DIE = 0, MEMBER_LIVE = 1 };
__PROPERTY(BYTE, LiveFlag); // 0:사망 1:생존
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_CHECK_OBJECT_HP)
public:
__PROPERTY(DWORD, dwObjKey); // mapobject
__PROPERTY(BYTE, btHPPercentage);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_DESTROY_OBJECT)
public:
__PROPERTY(DWORD, dwObjKey);
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_CHECK_OBJECTKIND_HP)
public:
__PROPERTY(BYTE, byObjectType); // 대상의 타입(몬스터/유닛/오브젝트);
__PROPERTY(DWORD, dwObjectKey); // 대상 객체의 키값
__PROPERTY(BYTE, btHPPercentage); // HP 조건
END_DECL_CONDITION;
BEGIN_DECL_CONDITION(CONDITION_MONSTER_ENTER_AREA)
public:
__PROPERTY(int, AreaID); // 영역ID
__PROPERTY(int, MonsterCode); // 몬스터코드
END_DECL_CONDITION;
#endif //SOLARTRIGGER_CONDITION_INFO_H