#include "stdafx.h" #include "./TriggerInfo.h" #include #include #include "ActionInfo.h" #include "ConditionInfo.h" #include "TriggerInfoManager.h" #include //================================================================================================== #define TYPESWITCH_BEGIN(s) sSWITCH(s) #define TYPE_BEGIN(c) CASE(e##c) \ c##_INFO* partial_info = TAllocNew(c##_INFO); #define __SET(dataType, v) dataType _value##v; \ archive >> _value##v; \ partial_info->Set##v(_value##v); #define __ARRAY_SET(dataType, num , v) dataType _value##v; \ for (WORD i=0;i> _value##v; \ partial_info->Set##v(i, _value##v); \ } #define TYPE_END return partial_info; #define TYPESWICH_END eSWITCH //================================================================================================== TriggerInfo::TriggerInfo() { } TriggerInfo::~TriggerInfo() { Release(); } void TriggerInfo::Release() { FOREACH_CONTAINER(const ns_trigger::CONDITION_INFO_LIST::value_type& info_node, condition_info_list_, ns_trigger::CONDITION_INFO_LIST) { TAllocDelete(ConditionInfo, info_node); } FOREACH_CONTAINER(const ns_trigger::ACTION_INFO_LIST::value_type& info_node, action_info_list_, ns_trigger::ACTION_INFO_LIST) { TAllocDelete(ActionInfo, info_node); } condition_info_list_.clear(); action_info_list_.clear(); } void TriggerInfo::Load(CWzArchive& IN archive, TriggerInfoManager* trigger_info_manager) { //MessageBoxA(0,"A","A",0); ASSERT(condition_info_list_.empty()); ASSERT(action_info_list_.empty()); INT iIDTriggerListIndex = 0; if (159 < archive.GetVersion()) { archive >> iIDTriggerListIndex; #ifdef _DH_TRIGGER_LOG_MESSAGE_IN_TRIGGER set_condition_index(iIDTriggerListIndex); #endif } // ¾ÆÀ̵ð + ¼Ó¼º archive >> trigger_id_; TCHAR making_msg[2048] = {0}; sprintf((TCHAR *)making_msg, _T("TRIGGER_DO_ACTION: ID(%lu)\n "), trigger_id_ ); OutputDebugStringA(making_msg); archive >> trigger_attributes_; ASSERT(trigger_attributes_ < 16); // ÄÁµð¼Ç °³¼ö WORD wNumberOfConditions = 0; archive >> wNumberOfConditions; INT iLastIDConditionTriggerIndex = 0; if (159 < archive.GetVersion()) { archive >> iLastIDConditionTriggerIndex; } always_trigger_ = false; // ÄÁµð¼Ç ŸÀÔº°·Î ÀÐÀ½ WORD wConditionType = 0; INT iConditionIDIndex = 0; for (WORD i = 0; i < wNumberOfConditions; ++i) { archive >> wConditionType; ASSERT(eCONDITION_ALWAYS <= wConditionType && wConditionType < eCONDITION_MAX); if (159 < archive.GetVersion()) { archive >> iConditionIDIndex; }; ConditionInfo* pConditionInfo = _ParseCondition(archive, wConditionType, trigger_info_manager); if (eCONDITION_ALWAYS == wConditionType) { always_trigger_ = true; }; ASSERT(pConditionInfo); condition_info_list_.push_back(pConditionInfo); } // ¾×¼Ç Æ®¸®°Å °³¼ö WORD wNumberOfActions = 0; archive >> wNumberOfActions; INT iLastIDActionTriggerIndex = 0; if (159 < archive.GetVersion()) { archive >> iLastIDActionTriggerIndex; } // ¾×¼Ç ŸÀÔº°·Î ÀÐÀ½ WORD wActionType = 0; INT iActionIDIndex; for (WORD i = 0; i < wNumberOfActions; ++i) { archive >> wActionType; ASSERT(eACTION_CHANGE_OBJECTANI <= wActionType && wActionType < eACTION_MAX); if (159 < archive.GetVersion()) { archive >> iActionIDIndex; }; ActionInfo* pActionInfo = _ParseAction(archive, wActionType, trigger_info_manager); ASSERT(pActionInfo); action_info_list_.push_back(pActionInfo); } #ifdef _HARDMODE_TRIGGER_PRINT_ /*;{ std::ofstream out_trigger("TRIGGER.txt", std::ios::app); CHAR buffer[512] = { 0, }; sprintf(buffer, "TRIGGER_DO_ACTION: ID(%u) Ä«Å×°í¸®(%s)\n", TriggerID(), CategoryName()); out_trigger << buffer; };*/ FOREACH_CONTAINER(const ns_trigger::CONDITION_INFO_LIST::value_type& rNode, condition_info_list_, ns_trigger::CONDITION_INFO_LIST) { ConditionInfo* pConditionInfo = rNode; eCONDITION_TYPE condition_type = pConditionInfo->TriggerType(); switch(condition_type) { case eCONDITION_COUNT_NPCKILL: { CONDITION_COUNT_NPCKILL_INFO* condition_info = \ static_cast(pConditionInfo); ;{ std::ofstream out_trigger("TRIGGER.txt", std::ios::app); CHAR buffer[512] = { 0, }; sprintf(buffer, "%d\t%d\t%d\t;CONDITION_COUNT_NPCKILL\n", \ condition_info->GetMonsterCode(), 0, 0); out_trigger << buffer; }; } break; } } FOREACH_CONTAINER(const ns_trigger::ACTION_INFO_LIST::value_type& rNode, action_info_list_, ns_trigger::ACTION_INFO_LIST) { ActionInfo* pActionInfo = rNode; eACTION_TYPE action_type = pActionInfo->TriggerType(); switch(action_type) { case eACTION_CREATE_MONSTER: { ACTION_CREATE_MONSTER_INFO* action_info = \ static_cast(pActionInfo); ;{ std::ofstream out_trigger("TRIGGER.txt", std::ios::app); CHAR buffer[512] = { 0, }; sprintf(buffer, "%d\t%d\t%d\t;ACTION_CREATE_MONSTER_INFO\n", \ action_info->GetMonsterCode(), 0, 0); out_trigger << buffer; }; } break; case eACTION_CREATE_DIR_MONSTER: { ACTION_CREATE_DIR_MONSTER_INFO* action_info = \ static_cast(pActionInfo); ;{ std::ofstream out_trigger("TRIGGER.txt", std::ios::app); CHAR buffer[512] = { 0, }; sprintf(buffer, "%d\t%d\t%d\t;ACTION_CREATE_DIR_MONSTER\n", \ action_info->GetMonsterCode(), 0, 0); out_trigger << buffer; }; } break; } } #endif //_HARDMODE_TRIGGER_PRINT_ } ConditionInfo* TriggerInfo::_ParseCondition(CWzArchive& IN archive, WORD condition_type, TriggerInfoManager* trigger_info_manager) { TYPESWITCH_BEGIN(condition_type) TYPE_BEGIN(CONDITION_ALWAYS) TYPE_END TYPE_BEGIN(CONDITION_COMPARE_SWITCH) __SET(BYTE, SwitchID) __SET(BYTE, OperationType) __SET(INT, Value) TYPE_END TYPE_BEGIN(CONDITION_COMPARE_SWITCH_EX) __SET(BYTE, Target) __SET(BYTE, SwitchID) __SET(BYTE, OperationType) __SET(INT, Value) TYPE_END TYPE_BEGIN(CONDITION_CLICK_OBJECT) __SET(INT, ObjectID) TYPE_END TYPE_BEGIN(CONDITION_DAMAGE_OBJECT) __SET(INT, ObjectID) __SET(FLOAT, Damage) TYPE_END TYPE_BEGIN(CONDITION_COUNT_NPCKILL) __SET(INT, AreaID) __SET(INT, MonsterCode) //< ¸÷ Á¾·ù ¸÷ Code __SET(BYTE, IsParty) // if (_valueIsParty == PERSONAL) _asm int 3; __SET(INT, KillCount) //< ¸î¸¶¸® __SET(BYTE, Method) //< ¹æ¹ý = {ÀϹÝ, ´©Àû} #if defined(_SERVER) // (NOTE) ¸ó½ºÅÍ Äڵ忡 ´ëÇØ¼­´Â Åø¸¸ ¹Ï°Ú´Ù if (trigger_info_manager) { trigger_info_manager->NotifyTriggerRegisterNpcKill(\ static_cast(partial_info->GetMonsterCode())); } #endif TYPE_END TYPE_BEGIN(CONDITION_PASS_TIME) __SET(INT, PassTime) TYPE_END TYPE_BEGIN(CONDITION_ENTER_AREA) __SET(INT, AreaID) __SET(INT, PlayerCount) __SET(BYTE, IsParty) TYPE_END TYPE_BEGIN(CONDITION_HAVE_ITEM) __SET(INT, ItemCode) __SET(INT, ItemNum) // °®°í ÀÖ´Â ¾ÆÀÌÅÛ °³¼ö TYPE_END TYPE_BEGIN(CONDITION_MULTI_SWITCH) __ARRAY_SET(BYTE, CONDITION_MULTI_SWITCH_INFO::_MAX_SWITCH_ID_NUM, SwitchID) __SET(BYTE, OperationType1) __SET(INT, Value1) __SET(BYTE, OperationType2) __SET(INT, Value2) TYPE_END TYPE_BEGIN(CONDITION_MISSION_POINT) __SET(INT, MissionPoint) // ÀÌ Æ÷ÀÎÆ®º¸´Ù __SET(BYTE, Flag) // 0:ÀÌ»ó 1:ÀÌÇÏ 2:µ¿µî TYPE_END TYPE_BEGIN(CONDITION_COMPARE_VARIABLE) __SET(INT, VarID) __SET(BYTE, OperationType) __SET(INT, Value) TYPE_END TYPE_BEGIN(CONDITION_QUEST_PROGRESS) __SET(/*QCODE*/ ULONG, QuestID) // Quest ID __SET(BYTE, Progress) // (ÁøÇàÁß, ¿Ï·áÇÑ) TYPE_END TYPE_BEGIN(CONDITION_CHECK_CLASS_ID) __SET(INT, ClassID) TYPE_END TYPE_BEGIN(CONDITION_NPCKILL_FOR_UNITID) __SET(WzID, MonsterUnitID) #if defined(_SERVER) if (trigger_info_manager) { trigger_info_manager->NotifyTriggerRegisterUnitKill(partial_info->GetMonsterUnitID()); }; #endif TYPE_END TYPE_BEGIN(CONDITION_LIVE_PARTY_MEMBER) __SET(BYTE, LiveFlag) // 0:»ç¸Á 1:»ýÁ¸ TYPE_END TYPE_BEGIN(CONDITION_CHECK_OBJECT_HP) __SET(DWORD, dwObjKey) __SET(BYTE, btHPPercentage) TYPE_END TYPE_BEGIN(CONDITION_DESTROY_OBJECT) __SET(DWORD, dwObjKey) TYPE_END TYPE_BEGIN(CONDITION_CHECK_OBJECTKIND_HP) __SET(BYTE, byObjectType) // ´ë»óÀÇ Å¸ÀÔ(¸ó½ºÅÍ/À¯´Ö/¿ÀºêÁ§Æ®) __SET(DWORD, dwObjectKey) // ´ë»ó °´Ã¼ÀÇ Å°°ª __SET(BYTE, btHPPercentage) // HP Á¶°Ç TYPE_END // _NA_002098_20110307_ADD_NPC_CONTROL_TRIGGER TYPE_BEGIN(CONDITION_NPC_ENTER_AREA) __SET(CODETYPE, AreaID) __SET(CODETYPE, NPCUnitID) TYPE_END // _NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER TYPE_BEGIN(CONDITION_COMPLETE_COLLECTION) __SET(DWORD, ObjectKey) TYPE_END // _NA_000000_20130103_ADD_SERVER_EVENT_TRIGGER TYPE_BEGIN(CONDITION_SERVER_EVENT) __SET(int, EventID) TYPE_END // _NA_000000_20130104_ADD_CONDITION_TRIGGER_CHECK_TEAM TYPE_BEGIN(CONDITION_CHECK_TEAM) __SET(int, TeamKey) TYPE_END TYPE_BEGIN(CONDITION_MONSTER_ENTER_AREA) __SET(int, AreaID) __SET(int, MonsterCode) TYPE_END TYPESWICH_END return NULL; } ActionInfo* TriggerInfo::_ParseAction(CWzArchive& IN archive, WORD action_type, TriggerInfoManager* trigger_info_manager) { __UNUSED(trigger_info_manager); TYPESWITCH_BEGIN(action_type) TYPE_BEGIN(ACTION_CHANGE_OBJECTANI) __SET(INT, ObjectID) __SET(DWORD, WzAniID) __SET(BYTE, Direction) // ¹æÇâ(Á¤¹æÇâ 0, ¿ª¹æÇâ 1) TYPE_END TYPE_BEGIN(ACTION_CHANGE_PATHTILE) __SET(INT, TileID) __SET(BYTE, Attribute) TYPE_END TYPE_BEGIN(ACTION_CHANGE_OBJECTSTATE) __SET(INT, ObjectID) __SET(BYTE, State) TYPE_END TYPE_BEGIN(ACTION_PLAY_EVENT) __SET(INT, EventID) TYPE_END TYPE_BEGIN(ACTION_SET_ISATTACK) __SET(BYTE, TargetType) // °ø°Ý´ë»ó Á¾·ù(0 : À¯Àú, 1 : ¸ó½ºÅÍ, 2 : µÑ´Ù) __SET(BYTE, IsAttack) // °ø°Ý °¡´É ¿©ºÎ(0 : °ø°Ý°¡´É, 1 : °ø°ÝºÒ°¡) TYPE_END TYPE_BEGIN(ACTION_PORTAL_PLAYER) __SET(INT, MapCode) __SET(INT, AreaID) __SET(BYTE, IsParty) // À̵¿½Ãų ´ë»ó (0 : °³ÀÎ 1: ÆÄƼ) __SET(INT, Type) TYPE_END TYPE_BEGIN(ACTION_SET_OBJECTTHRUST) __SET(BYTE, State) TYPE_END TYPE_BEGIN(ACTION_APPLY_DAMAGE) __SET(BYTE, DamageType) __SET(BYTE, TargetType) __SET(FLOAT, Damage) TYPE_END TYPE_BEGIN(ACTION_REFLECT_DAMAGE) __SET(INT, ObjectID) __SET(FLOAT, Damage) TYPE_END //TYPE_BEGIN(ACTION_CREATE_MONSTER) // __SET(INT, MonsterCode) // __SET(INT, AreaID) // __SET(BYTE, IsParty) // __SET(INT, CreateCount) // ¸ó½ºÅÍ »ý¼º °¹¼ö // __SET(INT, DelayTime) // »ý¼º ½Ã°£ °£°Ý // __SET(INT, LoopCount) // ¸ó½ºÅÍ »ý¼º ȸ¼ö // __SET(BYTE, CreateDestroy) // ¸ó½ºÅÍ »ý¼º/Á¦°Å // __SET(INT, Type) // ŸÀÔ (¸®´õ ³Ä ²¿ºØÀ̳Ä) //TYPE_END } break; case(eACTION_CREATE_MONSTER): { ACTION_CREATE_MONSTER_INFO* partial_info = TAllocNew(ACTION_CREATE_MONSTER_INFO); //__SET(INT, MonsterCode) INT _valueMonsterCode; archive >> _valueMonsterCode; partial_info->SetMonsterCode(_valueMonsterCode); //__SET(INT, AreaID) INT _valueAreaID; archive >> _valueAreaID; partial_info->SetAreaID(_valueAreaID); //__SET(BYTE, IsParty) BYTE _valueIsParty; archive >> _valueIsParty; partial_info->SetIsParty(_valueIsParty); //__SET(INT, CreateCount) // ¸ó½ºÅÍ »ý¼º °¹¼ö INT _valueCreateCount; archive >> _valueCreateCount; partial_info->SetCreateCount(_valueCreateCount); //__SET(INT, DelayTime) // »ý¼º ½Ã°£ °£°Ý INT _valueDelayTime; archive >> _valueDelayTime; partial_info->SetDelayTime(_valueDelayTime); //__SET(INT, LoopCount) // ¸ó½ºÅÍ »ý¼º ȸ¼ö INT _valueLoopCount; archive >> _valueLoopCount; partial_info->SetLoopCount(_valueLoopCount); //__SET(BYTE, CreateDestroy) // ¸ó½ºÅÍ »ý¼º/Á¦°Å BYTE _valueCreateDestroy; archive >> _valueCreateDestroy; partial_info->SetCreateDestroy(_valueCreateDestroy); //__SET(INT, Type) // ŸÀÔ (¸®´õ ³Ä ²¿ºØÀ̳Ä) INT _valueType; archive >> _valueType; partial_info->SetType(_valueType); return partial_info; //} //break; TYPE_BEGIN(ACTION_DISPLAY_MSGBOX) __SET(INT, TextID) __SET(BYTE, Target) // 0:°³ÀÎ 1:Àüü 2:°ø°Ý 3:¼öºñ __SET(INT, DisplayWindow) // Ãâ·ÂÇÒ Ã¢ TYPE_END TYPE_BEGIN(ACTION_REMOVE_ITEM) __SET(INT, ItemCode) __SET(INT, ItemNum) // ¾ÆÀÌÅÛ °³¼ö TYPE_END TYPE_BEGIN(ACTION_REWARD_PLAYER) __SET(INT, ItemCode) __SET(INT, Count) __SET(BYTE, IsParty) __SET(BYTE, IsDrop) // Áִ¹æ½Ä(0 : Àκ¥¿¡ ³Ö¾î¼­,1 ¹Ù´Ú¿¡ ¶³±À) TYPE_END TYPE_BEGIN(ACTION_CLEAR_MISSION) __SET(BYTE, ResultType) TYPE_END TYPE_BEGIN(ACTION_PORTAL_RANDOM) __SET(INT, MapID) __ARRAY_SET(INT, ACTION_PORTAL_RANDOM_INFO::_MAX_AREA_ID_NUM, AreaID) __SET(BYTE, Random) // ·£´ý ¼øÂ÷ÀûÀ¸·Î __SET(BYTE, Target) // (0: °³ÀÎ 1: ÆÄƼ) TYPE_END TYPE_BEGIN(ACTION_NPC_RANDOM_AREA_MOVE) __ARRAY_SET(INT, ACTION_NPC_RANDOM_AREA_MOVE_INFO::_MAX_AREA_ID_NUM, AreaID) __SET(BYTE, MoveOrWarp) // (0: move 1: warp) TYPE_END TYPE_BEGIN(ACTION_ACTIVATE_TRIGGER) __SET(DWORD, WzTriggerID) __SET(BYTE, Flag) // 0 : Ȱ¼º, 1 : ºñȰ¼º TYPE_END TYPE_BEGIN(ACTION_AREA_DAMAGE) __SET(DWORD, ObjectIndex) __SET(FLOAT, Range) __SET(BYTE, Target) // ¸ñÇ¥ (°³ÀÎ/ÆÄƼ) __SET(BYTE, DamageType) // µ¥¹ÌÁö ŸÀÔ __SET(FLOAT, Damage) TYPE_END TYPE_BEGIN(ACTION_OPERATE_SWITCH) __SET(BYTE, SwitchID) __SET(BYTE, OperationType) __SET(INT, Argument) // ¸Å°³º¯¼ö TYPE_END TYPE_BEGIN(ACTION_OPERATE_SWITCH_EX) __SET(BYTE, Target) // (0: °³ÀÎ 1: ÆÄƼ) __SET(BYTE, SwitchID) __SET(BYTE, OperationType) __SET(INT, Argument) // ¸Å°³º¯¼ö TYPE_END TYPE_BEGIN(ACTION_OPERATE_VARIABLE) __SET(INT, VarID) __SET(BYTE, OperationType) __SET(INT, Argument) // ¸Å°³º¯¼ö TYPE_END TYPE_BEGIN(ACTION_ROAD_CONNECT) // ±æ ¿¬°áÀ» ¼³Á¤/ÇØÁ¦ ÇÑ´Ù __SET(INT, AreaIndex) __SET(BYTE, CanGo) // °¥ ¼ö ÀÖ´Ù=0, ¾ø´Ù=1 TYPE_END TYPE_BEGIN(ACTION_CREATE_DIR_MONSTER) // ¸ó½ºÅÍ »ý¼ºÇÑ´Ù(¹æÇâ) __SET(INT, MonsterCode) __SET(INT, AreaID) __SET(BYTE, IsParty) __SET(INT, CreateCount) // ¸ó½ºÅÍ »ý¼º °¹¼ö __SET(INT, DelayTime) // »ý¼º ½Ã°£ °£°Ý __SET(INT, LoopCount) // ¸ó½ºÅÍ »ý¼º ȸ¼ö __SET(FLOAT, DirX) // x¹æÇâ __SET(FLOAT, DirY) // y¹æÇâ __SET(FLOAT, DirZ) // z¹æÇâ __SET(INT, Type) // Type[0] TYPE_END TYPE_BEGIN(ACTION_CHANGE_LIGHT) // ¶óÀÌÆ® ¼³Á¤À» º¯°æÇÑ´Ù __SET(INT, LightIndex) // ÀÌ À妽ºÀÇ ¶óÀÌÆ®¸¦ __SET(INT, DelayTime) // À̸¸Å­ÀÇ ½Ã°£ ÈÄ¿¡ __SET(BYTE, Status) // 0:²ö´Ù 1:ÄÒ´Ù 2:Åä±ÛÇÑ´Ù TYPE_END TYPE_BEGIN(ACTION_CHANGE_OBJECT_TYPE) // ¿ÀºêÁ§Æ® »óŸ¦ ¹Ù²Û´Ù [ŸÀÔ] __SET(INT, ObjectID) __SET(INT, DelayTime) __SET(INT, ObjectType) TYPE_END TYPE_BEGIN(ACTION_QUEST_SATISFACTION) __SET(ULONG, QuestID) __SET(LONG, ScriptCode) TYPE_END TYPE_BEGIN(ACTION_QUEST_GRANT) __SET(ULONG, QuestID) __SET(BYTE, PartyState) TYPE_END TYPE_BEGIN(ACTION_QUEST_SETUP) __SET(ULONG, QuestID) __SET(BYTE, Completed) TYPE_END TYPE_BEGIN(ACTION_USE_CATEGORY) __SET(INT, FieldID) __ARRAY_SET(TCHAR, ACTION_USE_CATEGORY_INFO::_MAX_USE_CATEGORY_NAME, CategoryName) TYPE_END // ±âÁ¸¿¡ Á¸ÀçÇÏ´Â ¾×¼Ç Æ®¸®°Å //BEGIN_DECL_ACTION(ACTION_CREATE_MONSTER) //__END_DECL_ACTION TYPE_BEGIN(ACTION_CREATE_MONSTER_GROUP) __SET(INT, GroupID) __SET(INT, AreaID) __SET(BYTE, PartyState) __SET(INT, GroupCount) TYPE_END // À¯´Ö ³ªÅ¸³²/»ç¶óÁü (¼­¹ö¿¡¼­´Â ¸ó½ºÅÍ »ý¼º/Á¦°Å¿Í µ¿ÀÏ) TYPE_BEGIN(ACTION_SHOW_OR_HIDE_UNIT) __SET(WzID, MonsterUnitID) __SET(INT, IsHide) //0: ³ªÅ¸³ª°Ô, 1:»ç¶óÁö°Ô TYPE_END TYPE_BEGIN(ACTION_SHOW_GUIDE_MSGBOX) __SET(LONG, HelpIndex) TYPE_END // ¸Þ½ÃÁö ¹Ú½ºÀÇ ³ªÅ¸³²/»ç¶óÁü TYPE_BEGIN(ACTION_SHOW_OR_HIDE_MSGBOX) __SET(INT, TextID) __SET(BYTE, IsParty) __SET(INT, DisplayWindow) // Ãâ·ÂÇÒ Ã¢ __SET(INT, IsShow) //1: ³ªÅ¸³ª°Ô, 0:»ç¶óÁö°Ô TYPE_END TYPE_BEGIN(ACTION_RANDOM_MONSTER_SPAWN) __SET(INT, MonsterID_1); // 1-5¹ø ¸ó½ºÅÍ ID __SET(INT, MonsterRate_1); // 1-5¹ø ¸ó½ºÅÍ »ý¼ºÈ®·ü __SET(INT, MonsterID_2); __SET(INT, MonsterRate_2); __SET(INT, MonsterID_3); __SET(INT, MonsterRate_3); __SET(INT, MonsterID_4); __SET(INT, MonsterRate_4); __SET(INT, MonsterID_5); __SET(INT, MonsterRate_5); __SET(INT, AreaID); // ¸ó½ºÅÍ »ý¼º Áö¿ª __SET(BYTE, IsParty); // °³ÀÎ ? ÆÄƼ ? __SET(INT, MinCreateMonsterCnt); // ÃÖ¼Ò ¸ó½ºÅÍ »ý¼º °¹¼ö __SET(INT, MaxCreateMonsterCnt); // ÃÖ¼Ò ¸ó½ºÅÍ »ý¼º °¹¼ö __SET(INT, RegenTime) // ¸®Á¨ ½Ã°£ °£°Ý __SET(INT, MaxRegenCount) // ¸ó½ºÅÍ ÃÑ ¸®Á¨ ȸ¼ö __SET(FLOAT, DirX) // x¹æÇâ __SET(FLOAT, DirY) // y¹æÇâ __SET(FLOAT, DirZ) // z¹æÇâ TYPE_END TYPE_BEGIN(ACTION_TOWER_OF_TRIAL_SHOW_THE_FLOOR) __SET(INT, Floor); // 1-5¹ø ¸ó½ºÅÍ ID TYPE_END TYPE_BEGIN(ACTION_RANDOM_MAP_MOVE) __ARRAY_SET(INT, ACTION_RANDOM_MAP_MOVE_INFO::_MAX_FIELDCODE_ID, FieldID); __SET(BYTE, Random); // ·£´ý, ¼øÂ÷ÀûÀ¸·Î __SET(WzID, AreaID); // ¿µ¿ª ID __SET(BYTE, Target); // (0: °³ÀÎ 1: ÆÄƼ) __SET(INT, Type); // (0: ¸¶À», 1:±Í¼Ó¸¶À»(?), 2:¹èƲ¸Ê TYPE_END TYPE_BEGIN(ACTION_RANDOM_AREA_MOVE) __ARRAY_SET(INT, ACTION_RANDOM_AREA_MOVE_INFO::_MAX_AREA_ID, AreaIDX); // À̵¿½Ãų ¿µ¿ª IDs __SET(BYTE, Target); // (0: °³ÀÎ 1: ÆÄƼ) __SET(BYTE, ProcType); // (0: °³º°, 1: µ¿ÀÏ) TYPE_END TYPE_BEGIN(ACTION_REMOVE_MONSTER) __SET(INT, MonsterCode); // ¸ó½ºÅÍÄÚµå __SET(BYTE, IsExpItemDrop); // °æÇèÄ¡¹×¾ÆÀÌÅ۵巴 Áö±Þ (0: ¾ÈÇÑ´Ù. 1: ÇÑ´Ù) TYPE_END TYPE_BEGIN(ACTION_ADD_EXP) __SET(BYTE, IsParty); // °³ÀÎÀÌ³Ä ÆÄƼ³Ä (0 : °³ÀÎ, 1:ÆÄƼ) __SET(DWORD, Exp); // Exp ÁÖ´Â °æÇèÄ¡. TYPE_END TYPE_BEGIN(ACTION_MONSTER_STAT_UP_OR_DOWN) __SET(INT, MonsterCode) // ¸ó½ºÅÍÄÚµå __SET(WORD, AbilityID) // ¾îºô¸®Æ¼ ID __SET(int, AbilityParameter1) // ŸÀÔ¼³Á¤ 1. ¼öÄ¡, 2. ÇöÀçÄ¡ ´ëºñ ºñÀ², 3. ÃÖ´ëÄ¡ ´ëºñ ºñÀ² __SET(int, AbilityParameter2) // ¼öÄ¡/ºñÀ²°ª __SET(BYTE, OperationType) // ¿¬»êÀÚ 1 : eOPERATION_PLUS(+) , 0 : eOPERATION_MINUS(-) TYPE_END TYPE_BEGIN(ACTION_RANDUM_TRIGER_ON_OR_OFF) __ARRAY_SET(DWORD, ACTION_RANDUM_TRIGER_ON_OR_OFF_INFO::_MAX_TRIGGER_ID, WzTriggerID) __SET(BYTE, TriggerState) TYPE_END TYPE_BEGIN(ACTION_PLAY_MUSIC) __SET(BYTE, Target); // (0: °³ÀÎ 1: ÇʵåÀüü) __SET(INT, MusCode); // (¹ÂÁ÷ÄÚµå) TYPE_END TYPE_BEGIN(ACTION_DOWN_OBJETC_HP) __SET(DWORD, dwObjKey); // mapobjectkey __SET(BYTE, btHPPercentage); // Ç϶ô ¼öÄ¡ TYPE_END TYPE_BEGIN(ACTION_CHANGE_ATTACK_KIND) __SET(DWORD, dwObjKey); // mapobjectkey __SET(BYTE, btPossibility); // 0 : °ø°Ý ºÒ°¡, 1 : °ø°Ý °¡´É TYPE_END TYPE_BEGIN(ACTION_ACTIVE_STAMP) TYPE_END TYPE_BEGIN(ACTION_ATTACK_OBJECTKIND) __SET(BYTE, byObjectType); // eOBJECTCODE_TYPE __SET(DWORD, dwObjectKey); // ŸÀÔ¿¡ µû¶ó º¯È­. __SET(BYTE, byAttack); // eACTION_ATTACK_TYPE TYPE_END TYPE_BEGIN(ACTION_ACTIVE_SKILL_OBJECTKIND) __SET(BYTE, byObjectType); // eOBJECTCODE_TYPE __SET(DWORD, dwObjectKey); // ŸÀÔ¿¡ µû¶ó º¯È­. __SET(DWORD, dwSkillCode); // ¹ßµ¿ ½ºÅ³ ÄÚµå TYPE_END TYPE_BEGIN(ACTION_SHOW_MESSAGEBOX_OBJECTKIND) __SET(BYTE, byObjectType); // eOBJECTCODE_TYPE __SET(DWORD, dwObjectKey); // ŸÀÔ¿¡ µû¶ó º¯È­. __SET(DWORD, dwMessageCode); // Ãâ·ÂÇÒ ¸Þ½ÃÁöÄÚµå TYPE_END TYPE_BEGIN(ACTION_SET_ATTACK_STATE_OBJECTKIND) __SET(BYTE, byObjectType); // eOBJECTCODE_TYPE __SET(DWORD, dwObjectKey); // ŸÀÔ¿¡ µû¶ó º¯È­. __SET(BYTE, byDestObjectType); // ´ë»ó eOBJECTCODE_TYPE __SET(DWORD, dwDestObjectKey); // ´ë»ó ŸÀÔ¿¡ µû¶ó º¯È­. __SET(BYTE, byAttack); // eACTION_ATTACK_TYPE TYPE_END TYPE_BEGIN(ACTION_DESTROY_OBJECTKIND) __SET(BYTE, byObjectType); // eOBJECTCODE_TYPE __SET(DWORD, dwObjectKey); // ŸÀÔ¿¡ µû¶ó º¯È­. __SET(BYTE, byReward); // °æÇèÄ¡¹×¾ÆÀÌÅ۵巴 Áö±Þ (0: ¾ÈÇÑ´Ù. 1: ÇÑ´Ù) TYPE_END TYPE_BEGIN(ACTION_CREATE_MONSTER_LINKED_MAPOBJECT) __SET(DWORD, dwObjectKey); TYPE_END TYPE_BEGIN(ACTION_CONTROL_TIMER) __SET(DWORD, dwTime); // ½Ã°£ (ms), »ý¼º½Ã Ãʱâ½Ã°£, ÆÄ±«½Ã À¯Áö ½Ã°£(delay) __SET(BYTE, byControlType); // º¯µ¿ eTIMER_CONTROL_TYPE TYPE_END // (0:¿ª¹æÇâ »ý¼º(°¨¼Ò), 1:Á¤¹æÇâ »ý¼º(Áõ°¡), 2:ÆÄ±«) //_NA_0_20100705_DOMINATION_EVENT TYPE_BEGIN(ACTION_DO_COMMAND) __SET(BYTE, byCommandType); // ¸Þ½ÃÁö Á¾·ù TYPE_END TYPE_BEGIN(ACTION_MOVE_CONTROL) __SET(BYTE, byObjectType); // eOBJECTCODE_TYPE __SET(DWORD, dwObjectKey); // ŸÀÔ¿¡ µû¶ó º¯È­. __SET(BYTE, byMove); // eACTION_MOVE_TYPE TYPE_END TYPE_BEGIN(ACTION_ANIMATION_CONTROL) __SET(BYTE, byObjectType); // eOBJECTCODE_TYPE __SET(DWORD, dwObjectKey); // ŸÀÔ¿¡ µû¶ó º¯È­. __SET(DWORD, dwAnimationCode1); // µ¿ÀÛ ÄÚµå1 __SET(BYTE, byLoop1); //µ¿ÀÛ ÄÚµå1 ÀÇ (·çÇÁ/1ȸ) ¿©ºÎ __SET(DWORD, dwAnimationCode2); // µ¿ÀÛ ÄÚµå2 __SET(BYTE, byLoop2); //µ¿ÀÛ ÄÚµå2 ÀÇ (·çÇÁ/1ȸ) ¿©ºÎ TYPE_END // _NA_002098_20110307_ADD_NPC_CONTROL_TRIGGER TYPE_BEGIN(ACTION_NPC_APPLY_DAMAGE) __SET(BYTE, ObjectType); // °´Ã¼ Á¾·ù __SET(DWORD, ObjectKey); // °´Ã¼ Á¾·ù¿¡ µû¶ó º¯°æ __SET(INT, Damage); // °íÁ¤Çü µ¥¹ÌÁö TYPE_END // _NA_002098_20110307_ADD_NPC_CONTROL_TRIGGER TYPE_BEGIN(ACTION_COMPLETE_COLLECTION) __ARRAY_SET(CODETYPE, ACTION_COMPLETE_COLLECTION_INFO::kMaxCollectObject, ObjectKey); // äÁýID __SET(BYTE, EnableType); // °´Ã¼ Á¾·ù TYPE_END TYPE_BEGIN(ACTION_APPLY_HPMPSD) __SET(BYTE, TargetType); // TargetType __SET(int, TeamKey); // Áõ°¡/°¨¼Ò __SET(BYTE, PointType); // HP/MP/SD __SET(DWORD, Figure); // ¼öÄ¡ __SET(BYTE, ApplyType); // Áõ°¡/°¨¼Ò TYPE_END TYPE_BEGIN(ACTION_CHANGE_OBJECT_HP) __SET(DWORD, Objectkey); // ´ë»ó ¿ÀºêÁ§Æ®Å° __SET(BYTE, CalcType); // ºñÀ²/¼öÄ¡ __SET(DWORD, Figure); // °ª __SET(BYTE, ApplyType); // Áõ°¨¿©ºÎ TYPE_END TYPE_BEGIN(ACTION_CHANGE_RADAR_MAP) __SET(WzID, SubMapID); // ¼­ºê¸ÊID TYPE_END TYPE_BEGIN(ACTION_ATTACH_STATE_RANGE) __SET(BYTE, byObjectType); // eOBJECTCODE_TYPE __SET(DWORD, dwObjectKey); // ŸÀÔ¿¡ µû¶ó º¯È­. __SET(FLOAT, fRange); // ¹üÀ§ __SET(DWORD, dwStateCode); // ºÎ¿©ÇÒ »óÅÂÄÚµå __SET(DWORD, dwTimeDuration); // »óÅÂÀÇ Áö¼Ó½Ã°£ __SET(BYTE, byApplyType); // 0:ºÎ¿©ÇÑ´Ù, 1:Á¦°ÅÇÑ´Ù TYPE_END TYPE_BEGIN(ACTION_CHANGE_PLAYER_HP) __SET(BYTE, TargetType); // ÆÄƼ/°³ÀÎ __SET(BYTE, CalcType); // ºñÀ²/¼öÄ¡ __SET(DWORD, Figure); // °ª __SET(BYTE, ApplyType); // Áõ°¨¿©ºÎ TYPE_END TYPESWICH_END return NULL; }