⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 triggerinfo.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 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 + -