📄 triggerinfo.cpp
字号:
#include "StdAfx.h"
#include ".\triggerinfo.h"
#include <ProgramCommon/WzArchive.h>
#include "ActionInfo.h"
#include "ConditionInfo.h"
#define TYPESWITCH_BEGIN(s) sSWITCH( Type )
#define TYPE_BEGIN(c) CASE( e##c ) \
c##_INFO * pInfo = new c##_INFO();
#define __SET(dataType, v) dataType _value##v; \
rArchive >> _value##v; \
pInfo->Set##v(_value##v);
#define __ARRAY_SET(dataType, num , v) dataType _value##v; \
for(WORD i=0;i<num;++i) { \
rArchive >> _value##v; \
pInfo->Set##v( i, _value##v ); \
}
#define TYPE_END return pInfo;
#define TYPESWICH_END eSWITCH
TriggerInfo::TriggerInfo(void)
{
}
TriggerInfo::~TriggerInfo(void)
{
ConditionInfo * pCInfo = NULL;
m_ConditionHash.SetFirst();
while( (pCInfo = m_ConditionHash.GetNext()) != NULL )
{
SAFE_DELETE( pCInfo );
}
m_ConditionHash.RemoveAll();
ActionInfo * pAInfo = NULL;
m_ActionHash.SetFirst();
while( (pAInfo = m_ActionHash.GetNext()) != NULL )
{
SAFE_DELETE( pAInfo );
}
m_ActionHash.RemoveAll();
}
VOID TriggerInfo::Load( CWzArchive & IN rArchive )
{
ASSERT( m_ConditionHash.GetDataNum() == 0 );
ASSERT( m_ActionHash.GetDataNum() == 0 );
// 酒捞叼 + 加己
rArchive >> m_wzTriggerID;
rArchive >> m_wAttribute;
ASSERT( m_wAttribute < 16 );
// 牧叼记 俺荐
WORD wNumberOfConditions = 0;
rArchive >> wNumberOfConditions;
m_ConditionHash.Initialize( wNumberOfConditions*2 );
// 牧叼记 鸥涝喊肺 佬澜
WORD wConditionType = 0;
for( WORD i = 0 ; i < wNumberOfConditions ; ++i )
{
rArchive >> wConditionType;
ASSERT( eCONDITION_ALWAYS <= wConditionType && wConditionType < eCONDITION_MAX );
ConditionInfo * pInfo = _ParseCondition( rArchive, wConditionType );
ASSERT( pInfo );
m_ConditionHash.Add( pInfo, (DWORD)pInfo );
}
// 咀记 飘府芭 俺荐
WORD wNumberOfActions = 0;
rArchive >> wNumberOfActions;
m_ActionHash.Initialize( wNumberOfActions*2 );
// 咀记 鸥涝喊肺 佬澜
WORD wActionType = 0;
for( WORD i = 0 ; i < wNumberOfActions ; ++i )
{
rArchive >> wActionType;
ASSERT( eACTION_CHANGE_OBJECTANI <= wActionType && wActionType < eACTION_MAX );
ActionInfo * pInfo = _ParseAction( rArchive, wActionType );
ASSERT( pInfo );
m_ActionHash.Add( pInfo, (DWORD)pInfo );
}
}
ConditionInfo * TriggerInfo::_ParseCondition( CWzArchive & IN rArchive, WORD Type )
{
TYPESWITCH_BEGIN( 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_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 ) //< 规过 = {老馆, 穿利}
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
TYPESWICH_END
return NULL;
}
ActionInfo * TriggerInfo::_ParseAction( CWzArchive & IN rArchive, WORD Type )
{
TYPESWITCH_BEGIN( 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 ) // 傍拜措惑 辆幅
__SET( BYTE, IsAttack ) // 傍拜 啊瓷 咯何
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( INT, Type ) // 鸥涝 ( 府歹 衬 部贺捞衬 )
TYPE_END
TYPE_BEGIN( ACTION_DISPLAY_MSGBOX )
__SET( INT, TextID )
__SET( BYTE, IsParty ) // 颇萍咯何
__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_ACTIVATE_TRIGGER )
__SET( DWORD, WzTriggerID )
__SET( BYTE, Flag ) // 0 : 劝己, 1 : 厚劝己
TYPE_END
TYPE_BEGIN( ACTION_AREA_DAMAGE )
__SET( BYTE, 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_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
TYPESWICH_END
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -