//----------------------------------------------------------------------------------------
//			遊戲所有物件基本資料
//----------------------------------------------------------------------------------------
#ifndef	__OBJECTSTRUCT_H_2003_09_16__
#define __OBJECTSTRUCT_H_2003_09_16__
#pragma		warning (disable:4819)
#include	<windows.h>
//----------------------------------------------------------------------------------------
#define		_MAX_OBJ_NAME_STR_SIZE_		    32			//名字字串長度定義
#define		_MAX_NPC_DROPITEM_COUNT_		5			//定義物品最多掉落種類數量
#define		_MAX_SKILL_COUNT_				30			//最多多少數值技能(熟練度)
#define		_MAX_RACE_COUNT_			    32			//32個種族數量
#define		_MAX_VOCATION_COUNT_		    32			//32個職業
#define		_MAX_SEX_COUNT_		            3			//性別數量
#define		_MAX_FILENAME_SIZE_		        128			//檔案名稱
#define     _MAX_LEVEL_                     200         //最高等級
#define     _MAX_DROPITEM_COUNT_            8           //最多怪物可掉物品數量
#define     _MAX_NPC_EQSEL_COUNT_           5           //怪物可選的武器最大量
#define     _MAX_SPSkill_COUNT_             30          //最大職業專屬技能
#define     _MAX_NormalSkill_COUNT_         50          //最大一般職業技能
#define     _MAX_PASSIVESKILL_COUNT_        10          //最多同時有多少個被動技能
#define     _MAX_SELL_ITEM_SAVE_COUNT_      10          //拍賣物品貝份最大量
														
#define     _MAX_SKILLVALUE_BASETYPE        20          //基本武器熟練度的分種總類 (s+ s s- ..... )
#define     _MAX_SKILLVALUE_TYPE            30          //基本武器熟練度的種類
														
#define		_MAX_QUESTLINK_COUNT			20			// 每個 NPC 最多和多少個任務有所關連
//----------------------------------------------------------------------------------------
#define Def_ObjectClass_Player				1000		// 玩家物件
#define Def_ObjectClass_BodyObj				2000		// 身體物件
#define Def_ObjectClass_NPC					100000		// NPC
#define Def_ObjectClass_QuestNPC			110000		// QuestNPC ( 110000-119999 )
#define Def_ObjectClass_Item				200000		// 物品(200000) 裝備 武器 金錢 
#define Def_ObjectClass_Weapon				210000		// 武器
#define Def_ObjectClass_Armor				220000		// 防具
#define Def_ObjectClass_Table				300000		// 
#define Def_ObjectClass_QuestCollect		400000		// ( 20000  ) 能給予 Quest 的 NPC 代號
#define Def_ObjectClass_QuestDetail			420000		// ( 200000 ) Quest
#define Def_ObjectClass_MagicCollect		490000		// 法術集合資料
#define Def_ObjectClass_Magic				500000		// 法術資料
#define Def_ObjectClass_Attribute   		510000		// 附加能力
#define Def_ObjectClass_Rune           		520000		// 符文
#define Def_ObjectClass_Title          		530000		// 頭銜
#define Def_ObjectClass_KeyItem        		540000		// Key Item
#define Def_ObjectClass_Recipe        		550000		// 配方表
#define Def_ObjectClass_Mine          		560000		// 礦產
#define Def_ObjectClass_Image          		570000		// 圖形
#define Def_ObjectClass_Flag          		580000		// 旗子
#define Def_ObjectClass_LearnMagic          590000		// 法術學習表
#define Def_ObjectClass_Shop                600000		// 商店資訊
#define Def_ObjectClass_Suit                610000		// 套裝資訊
#define Def_ObjectClass_LuaScript           700000		// lua劇情物件
#define Def_ObjectClass_Camp	            710000		// 陣營資訊
#define Def_ObjectClass_Treasure            720000		// 寶物掉落表


#define Def_ObjectClass_Item_Total			100000
#define Def_ObjectClass_QuestDetail_Total	 80000
#define Def_ObjectClass_QuestNPC_Total		 10000		// QuestNPC
#define Def_ObjectClass_KeyItem_Total		 10000	
//----------------------------------------------------------------------------------------
// Quest 相關
//----------------------------------------------------------------------------------------
#define _MAX_SIZE_QUEST_NAME				32
#define _MAX_SIZE_QUEST_DESC				256
#define _MAX_SIZE_QUEST_ACCEPT_DETAIL		1200
#define _MAX_SIZE_QUEST_UNCOMPLETE_DETAIL	400
#define _MAX_SIZE_QUEST_COMPLETE_DETAIL		1200
#define _MAX_SIZE_QUEST_NPC_TEXT			512
#define _MAX_SIZE_QUEST_CATALOG				32
#define _MAX_SIZE_QUEST_TYPE				8
#define _MAX_SIZE_QUEST_FLAG				3
#define _MAX_SIZE_QUEST_ITEM				5
#define _MAX_SIZE_QUEST_SCRIPT				32
#define _MAX_SIZE64_QUEST_SCRIPT			64
//----------------------------------------------------------------------------------------
//AC 物品搜尋分類定意
//----------------------------------------------------------------------------------------
#define _DEF_ACSEARCHTYPE_EMPTY				-1

#define _DEF_ACSEARCHTYPE_WEAPON			0
#define _DEF_ACSEARCHTYPE_ARMOR				1
#define _DEF_ACSEARCHTYPE_STUFF				2
#define _DEF_ACSEARCHTYPE_SUPPLIES			3
#define _DEF_ACSEARCHTYPE_RUNE				4
#define _DEF_ACSEARCHTYPE_OTHER				5

#define _DEF_ACSEARCHTYPE_WEAPON_SWORD		0
#define _DEF_ACSEARCHTYPE_WEAPON_AXE		1
#define _DEF_ACSEARCHTYPE_WEAPON_HAMMER		2
#define _DEF_ACSEARCHTYPE_WEAPON_DAGGER		3
#define _DEF_ACSEARCHTYPE_WEAPON_BOW		4
#define _DEF_ACSEARCHTYPE_WEAPON_COSSBOW	5
#define _DEF_ACSEARCHTYPE_WEAPON_STAFF		6
#define _DEF_ACSEARCHTYPE_WEAPON_AMMO		7
#define _DEF_ACSEARCHTYPE_WEAPON_THROW		8
#define _DEF_ACSEARCHTYPE_WEAPON_OTHER		9

#define _DEF_ACSEARCHTYPE_ARMOR_HEAVYARMED	0
#define _DEF_ACSEARCHTYPE_ARMOR_LIGHTARMED	1
#define _DEF_ACSEARCHTYPE_ARMOR_LEATHER		2
#define _DEF_ACSEARCHTYPE_ARMOR_CLOTHES		3
#define _DEF_ACSEARCHTYPE_ARMOR_ROBE		4
#define _DEF_ACSEARCHTYPE_ARMOR_DRESS		5
#define _DEF_ACSEARCHTYPE_ARMOR_SECONDHAND	6

#define _DEF_ACSEARCHTYPE_ARMOR_X_HEAD		0
#define _DEF_ACSEARCHTYPE_ARMOR_X_CLOTHES	1
#define _DEF_ACSEARCHTYPE_ARMOR_X_BELT		2
#define _DEF_ACSEARCHTYPE_ARMOR_X_PANTS		3
#define _DEF_ACSEARCHTYPE_ARMOR_X_GLOVES	4
#define _DEF_ACSEARCHTYPE_ARMOR_X_SHOES		5
#define _DEF_ACSEARCHTYPE_ARMOR_X_BACK		6
#define _DEF_ACSEARCHTYPE_ARMOR_X_SHOULDER	7

#define _DEF_ACSEARCHTYPE_ARMOR_DRESS_EARRING	0
#define _DEF_ACSEARCHTYPE_ARMOR_DRESS_RING		1
#define _DEF_ACSEARCHTYPE_ARMOR_DRESS_NECKLACE	2

#define _DEF_ACSEARCHTYPE_ARMOR_SECONDHAND_SHIELD		0
#define _DEF_ACSEARCHTYPE_ARMOR_SECONDHAND_IMPLEMENT	1


#define _DEF_ACSEARCHTYPE_STUFF_MINE		0		
#define _DEF_ACSEARCHTYPE_STUFF_WOOD		1
#define _DEF_ACSEARCHTYPE_STUFF_HERB		2
#define _DEF_ACSEARCHTYPE_STUFF_FOOD		3
#define _DEF_ACSEARCHTYPE_STUFF_PLANT		4
#define _DEF_ACSEARCHTYPE_STUFF_FISH		5
#define _DEF_ACSEARCHTYPE_STUFF_TOOLS		6
#define _DEF_ACSEARCHTYPE_STUFF_RECIPE		7
#define _DEF_ACSEARCHTYPE_STUFF_OTHERSTUFF	8
#define _DEF_ACSEARCHTYPE_STUFF_JEWEL		9

#define _DEF_ACSEARCHTYPE_SUPPLIES_FOOD			0	
#define _DEF_ACSEARCHTYPE_SUPPLIES_SWEETFOOD	1
#define _DEF_ACSEARCHTYPE_SUPPLIES_MEDICINE		2

#define _DEF_ACSEARCHTYPE_STUFF_RECIPE_BLACKSMITH	0
#define _DEF_ACSEARCHTYPE_STUFF_RECIPE_CARPENTER	1
#define _DEF_ACSEARCHTYPE_STUFF_RECIPE_ARMOR		2
#define _DEF_ACSEARCHTYPE_STUFF_RECIPE_TAILOR		3
#define _DEF_ACSEARCHTYPE_STUFF_RECIPE_ALCHEMY		4
#define _DEF_ACSEARCHTYPE_STUFF_RECIPE_COOK			5

#define _DEF_ACSEARCHTYPE_RUNE_MANUFACTURE	0
#define _DEF_ACSEARCHTYPE_RUNE_WEAPON		1
#define _DEF_ACSEARCHTYPE_RUNE_HEAD			2
#define _DEF_ACSEARCHTYPE_RUNE_BODY			3
#define _DEF_ACSEARCHTYPE_RUNE_PANT			4
#define _DEF_ACSEARCHTYPE_RUNE_SPECIAL		5
//----------------------------------------------------------------------------------------
enum    YesNoENUM
{    
    EM_No       ,
	EM_Yes      ,
    EM_Unknow   ,
};
//-----------------------------------------------------------------------------
enum BaseMagicTypeENUM
{
	EM_BaseMagic_Unbeatable		,
	EM_BaseMagic_Slow			,
	EM_BaseMagic_MaxCount		,
};
//-----------------------------------------------------------------------------
//角色狀態
//----------------------------------------------------------------------------------------
struct	GameObjDbStruct;
struct RoleSpriteStatus
{
	// flag
	union {
		int			flag;

		struct {
			short		action				:16;

			bool		isFadeOut			:1;		// true 淡出
			bool		isUnholster			:1;		// true 取出武器
			bool		isWalk				:1;		// true 走路
			bool		isStraight			:1;		// true 自動面向移動方向
			bool		isCombat			:1;		// true 戰鬥中
			bool		isDead				:1;		// true 死亡中
			bool		isSpell				:1;		// true 施法中
			bool		isSit				:1;		// true 座下
		};
	};
};
//----------------------------------------------------------------------------------------
//遊戲物件類型列舉
//----------------------------------------------------------------------------------------
enum	GameObjectClassificationENUM
{
    EM_ObjectClass_None   = -1      ,
	EM_ObjectClass_Player = 0		,
	EM_ObjectClass_NPC			    ,		// 1	
	EM_ObjectClass_Item			    ,		//物品	裝備 武器 金錢 2
	EM_ObjectClass_MagicBase		,		// 3 
    EM_ObjectClass_BodyObj			,		// 4 
    EM_ObjectClass_Attribute        ,		//復加屬性	
    EM_ObjectClass_QuestCollect     ,
    EM_ObjectClass_QuestDetail      ,		
    EM_ObjectClass_Title            ,		//頭銜
    EM_ObjectClass_KeyItem          ,		//重要物品
    EM_ObjectClass_Recipe           ,		//配方表
    EM_ObjectClass_Mine             ,		//礦產
    EM_ObjectClass_Flag             ,		//旗子資料
    EM_ObjectClass_Image            ,		//圖象資料
	EM_ObjectClass_QuestNPC			,		//任務
    EM_ObjectClass_LearnMagic       ,		//法術學習
    EM_ObjectClass_Shop             ,		//商店
	EM_ObjectClass_Suit             ,		//套裝
	EM_ObjectClass_LuaScript        ,		//劇情
	EM_ObjectClass_Camp		        ,		//陣營
	EM_ObjectClass_Treasure	        ,		//寶箱
	EM_ObjectClass_MagicCollect     ,		//法術集合

    EM_GameObjectClassificationEM_FORCE_DWORD   = 0x7fffffff, 
};
//-------------------------------------------------------------------------------------
//種族列舉
enum	Race_ENUM
{
    EM_Race1			= 0,
    EM_Race2			,
    EM_Race3			,
    EM_Race4			,
    EM_Max_Race       ,
    EM_Race_EM_FORCE_DWORD   = 0x7fffffff, 
};
//-------------------------------------------------------------------------------------
//性別列舉
enum	Sex_ENUM
{
    EM_Sex_Boy			= 0,
    EM_Sex_Girl			   ,
    EM_Sex_Unknow   	   ,
    EM_Sex_Max_Sex         ,
    EM_Sex_EM_FORCE_DWORD   = 0x7fffffff, 
};
//-------------------------------------------------------------------------------------
//職業列舉
enum	Voc_ENUM
{
    EM_Vocation_None	    = -1,       		//沒有職業
    EM_Vocation_GameMaster	= 0	,
    EM_Vocation_Warrior			,				// 戰士
    EM_Vocation_Ranger			,				// 遊俠
    EM_Vocation_Rogue			,				// 盜賊
    EM_Vocation_Wizard			,				// 法師
    EM_Vocation_Priest			,				// 僧侶
    EM_Vocation7		,
    EM_Vocation8		,
    EM_Vocation9		,
    EM_Vocation10		,
    EM_Vocation11		,
    EM_Vocation12		,
    EM_Vocation13		,
    EM_Vocation14		,
    EM_Vocation15		,
    EM_Vocation16		,
    EM_Max_Vocation     ,
    EM_Vocation_EM_FORCE_DWORD   = 0x7fffffff, 
};
//----------------------------------------------------------------------------------------
//職業旗標
//----------------------------------------------------------------------------------------
struct VocationFlagStruct
{
	union
	{
		int		_Voc;
		struct 
		{
			bool	Voc0		:1;			
			bool	Voc1		:1;
			bool	Voc2		:1;
			bool	Voc3		:1;
			bool	Voc4		:1;
			bool	Voc5		:1;
		};
	};
};
//----------------------------------------------------------------------------------------
//種族旗標
//----------------------------------------------------------------------------------------
struct RaceFlagStruct
{
	union
	{
		int		_Race;
		struct 
		{
			bool	Race0		:1;			
			bool	Race1		:1;
			bool	Race2		:1;
			bool	Race3		:1;
			bool	Race4		:1;
			bool	Race5		:1;
		};
	};
};
//----------------------------------------------------------------------------------------
//性別旗標
struct SexFlagStruct
{
	union
	{
		int		_Sex;
		struct 
		{
			bool	Boy		:1;			
			bool	Girl	:1;
            bool    Unknow  :1;
		};
	};
};
//----------------------------------------------------------------------------------------
// 數質計算參數
//----------------------------------------------------------------------------------------
//固定參數
struct FixFightArgumentStruct
{
    union
    {
        float Arg[ 100 ];
        struct
        {
            float BAbr;
            float AbrArg;
            float DefUnit;
            float MaxAbr;
            float DefDmgRate;
            float HitArg;
            float HitLvArg;
            float BaseHitRate;
            float DogArg;
            float DogLVArg;
            float BaseDogRate;
            float DmgAtkArg;
            float BMagAbr;
            float MagAbrArg;
            float MagUnit;
            float MaxMagAbr;
            float BMagPow;
            float MagPowArg;
            float MagPowUnit;
            float MaxMagPow;
            float Crit_DLV;     //等級差影響 致命一擊率
            float DMG_DLV;      //等級差影響 傷害
            float Miss_DLV;     //等級差影響 命中率
            float Dmg_Rand;
			float Miss_Skill_DLV;	//技能差影響　攻方命中 與 守方閃避 
			float JobExSkillExp;	//job經驗值與 Skill的經驗值的比值
			float Miss_SecHand;		//副手命中下降
			float Dmg_SecHand;		//副手攻擊下降(%)
			float BaseCritHit;			//基本的Critial 機率
			float BaseCritPower;		//基本的Critial 威力
			float BaseMagicCritHit;		//基本的魔法 Critial 機率
			float BaseMagicCritPower;	//基本的魔法 Critial 威力

        };
    };

};
//----------------------------------------------------------------------------------------
//由種足職業等級算出來的值
struct FightArgumentStruct
{
    union
    {
        float Arg[ 100 ];
        struct
        {
            float BStrLv1 , BStaLv1 ,BIntLv1    ,BMndLv1 , BAgiLv1 , BHpLv1  ,BMpLv1 ;
            float BStrArg , BStaArg ,BIntArg    ,BMndArg , BAgiArg , BHpArg  ,BMpArg ;
			float StrArg  , StaArg  ,IntArg     ,MndArg;
            float AgiArg        ,HPArg      ,MPArg      ,HpStrArg   ,HpStaArg   ,MPIntArg;
            float MpMndArg      ,AtkStrArg  ,AtkIntArg  ,AtkAgiArg  ,DefArg;
            float BaseReHP      ,BaseReMP   ,ReHpArg    ,ReMpArg    ,MAtkArg;
            float MDefArg ;
			float BaseMoveSpeed;
            float ReSPNormal_Move , ReSPNormal_Stop , ReSPAttack , ReSPUnderAttack;
			float ReSPAttackTime_Move , ReSPAttackTime_Stop ;
			float MaxSP;
        };
    };
};
//----------------------------------------------------------------------------------------
//抗性表基本結構
//----------------------------------------------------------------------------------------
enum	ResistArgType_ENUM
{
	EM_ResistArgType_Power0		,
	EM_ResistArgType_Power25	,
	EM_ResistArgType_Power50	,
	EM_ResistArgType_Power75	,
	EM_ResistArgType_Power100	,

	EM_ResistArgType_Power_MaxCount,
};

struct ResistArgumentStruct
{
	int		Resist;
	union
	{
		int		PowerList[ EM_ResistArgType_Power_MaxCount ];
		struct  
		{
			int		Power0;			//抗100%
			int		Power25;		//抗75%
			int		Power50;		//抗50%
			int		Power75;		//抗25%
			int		Power100;		//完全承受
		};
	};
};
//----------------------------------------------------------------------------------------
//基本物件屬性定義 (物件產生可設定項目) 每個物件的共用設定
//----------------------------------------------------------------------------------------
struct	ObjectModeStruct
{
	union
	{
		int			_Mode;
		struct
		{
            //顯像物件
			bool	Show	    	:1;		    //0x00000001	秀出(不論秀出或隱藏, 標記/致能)
			bool	Mark	    	:1;		    //0x00000002	可標記/點選(可以讓玩家點選)
			bool	Obstruct    	:1;		    //0x00000004	會阻擋(阻擋其他的物件)
			bool	Gravity	    	:1;		    //0x00000008	有重力(地心引力, 計算物件與地面的碰撞, 否則依照 Client 送來的座標, 不會依地面高度改變 y)
			bool	Save	    	:1;		    //0x00000010	此物件是否要儲存
            bool    Drag            :1;         //0x00000020    有阻力的
            bool    R6              :1;
            bool    R7              :1;
            //物品資料
            bool	Trade			:1;			//0x00000100	可交易
            bool	Sell			:1;			//0x00000200	可買賣
            bool	Logoutdel		:1;			//0x00000400	離線消失
            bool	Expense			:1;			//0x00000800	消耗
            bool	Coloring		:1;			//0x00001000	可染色
            bool	GuildMark		:1;			//0x00002000	公會章
            bool    EQSoulBound     :1;         //0x00004000	裝備禁制
            bool    R15             :1;
            //NPC行為
            bool	Strikback		:1;			//0x00010000	反擊
            bool	Move			:1;			//0x00020000	移動
            bool	Searchenemy		:1;			//0x00040000	搜尋敵人
            bool	Revive			:1;			//0x00080000	可重生(告知 SERVER, 開啟此旗標的物件需要重生, 重生時間查看 Revive)
            bool	Fight			:1;			//0x00100000	可砍殺攻擊(開啟此旗標的物件可以被砍殺)
            bool    Escape          :1;         //0x00200000    逃跑
		};
	};

	bool	GetMode( int i )
	{
		int T = 0x1 << i;
		return (_Mode & T) != 0;
	};


};
//----------------------------------------------------------------------------------------
//	法術屬性影響效果
//----------------------------------------------------------------------------------------
struct		MagicEffectStruct
{
	union
	{
		int			_Value;
		struct
		{

            //一般
            bool    UseMagicDisable     :1;     //不可用法術攻擊
            bool    UsePhyDisable       :1;     //不可用物理攻擊
            bool    MagicInvincible     :1;     //法術無效(法術技能無效)
            bool    PhyInvincible       :1;     //物理無效(物理技能與一般攻擊無效)
            bool    UseItemDisable      :1;     //不可使用物品
            bool    SearchEmenyDisable  :1;     //不可索敵
            bool    Stop                :1;     //不可移動

            //Client 端效果型
            bool    Cover               :1;     //隱形
            bool    Detect              :1;     //偵測隱形
            bool    Blind               :1;     //失明(螢幕全黑)
			bool	Sneak				:1;		//潛行

            //其他
            bool	PlayDead			:1;	    //裝死
            bool    Insure              :1;     //保險(抵死一次)
            bool    Chaos               :1;     //混亂
            bool    Fear                :1;     //恐懼
			bool    Forget              :1;     //遺忘

			bool	LockTarget			:1;		//攻擊目標索定			
			
		};
	};
};
//----------------------------------------------------------------------------------------
//輔助法術施效條件
//----------------------------------------------------------------------------------------
struct  MagicClearTimeStruct
{
    union
    {
        int			_Value;
        struct
        {
            bool    Attack      :1;    //攻擊消失
            bool    Move        :1;    //移動消失
            bool    Atk         :1;    //施法/用物理技/使用物品消失
//            bool    SP0         :1;    //SP為0消失
            bool    MP0         :1;    //MP為0消失
            bool    ChangeZone  :1;    //換區消失
            bool    Logout      :1;    //離線消失
            bool    UnderAtk    :1;    //被攻擊消失
            bool    Click       :1;    //點選消失
        };
    };
};
//----------------------------------------------------------------------------------------
//	物品列舉
//----------------------------------------------------------------------------------------
enum	GameObjectItemENUM
{
	EM_Item_Normal	= 0	    ,
	EM_Item_Money			,
	EM_Item_Weapon		    ,
	EM_Item_Armor			,
    EM_Item_Rune			,

    EM_GameObjectItemEM_FORCE_DWORD   = 0x7fffffff, 
};
//----------------------------------------------------------------------------------------
//武器總類列舉
//----------------------------------------------------------------------------------------

enum	GameObjectWeaponENUM
{
    EM_Weapon_None                  = -1,
	EM_Weapon_Unarmed			,// Unarmed空手
    EM_Weapon_Blade             ,// 劍
    EM_Weapon_Dagger            ,// 匕首
    EM_Weapon_Wand              ,// 權杖
    EM_Weapon_Axe               ,// 斧
    EM_Weapon_Bludgeon          ,// 鎚棍棒
    EM_Weapon_Claymore          ,// 雙手劍
    EM_Weapon_Staff             ,// 杖
    EM_Weapon_2H_Axe            ,// 雙手斧
    EM_Weapon_2H_Hammer         ,// 雙手鎚
	EM_Weapon_Polearm			,// 槍(長矛)
	EM_Weapon_Bow				,// 遠程武器 弓
	EM_Weapon_CossBow			,// 遠程武器 十字弓
	EM_Weapon_Gun				,// 遠程武器 槍
	EM_Weapon_Ammo_Bow			,// 子彈 弓
	EM_Weapon_Ammo_CossBow		,// 子彈 十字弓
	EM_Weapon_Ammo_Gun			,// 子彈 槍
	EM_Weapon_Throw				,// 投擲類武器

    EM_GameObjectWeaponEM_FORCE_DWORD   = 0x7fffffff, 
};

enum	GameObjectArmorENUM
{
    EM_Armor_HeavyArmed	        ,
    EM_Armor_LightArmed	        ,
	EM_Armor_Leather			,
    EM_Armor_Clothes	        ,
    EM_Armor_Robe		        ,
    EM_Armor_Shield		        ,

	// [6/27] Added a new item
	EM_Armor_Implement			,	// 手持器具

	EM_Armor_MaxCount			,	

    EM_GameObjectArmorEM_FORCE_DWORD   = 0x7fffffff, 
};
//----------------------------------------------------------------------------------------
//裝備技能資料
struct EqWearSkillStruct
{
	union
	{
		int _Skill;
		struct
		{
			bool    Unarmed		  	: 1;		//0x00000001
			bool    Blade           : 1;		//0x00000002
			bool    Dagger          : 1;		//0x00000004
			bool    Wand            : 1;		//0x00000008
			bool    Axe             : 1;		//0x00000010
			bool    Bludgeon        : 1;		//0x00000020
			bool    Claymore        : 1;		//0x00000040
			bool    Staff           : 1;		//0x00000080
			bool    Axe_2H          : 1;		//0x00000100
			bool    Hammer_2H       : 1;		//0x00000200
			bool    Polearm		  	: 1;		//0x00000400
			bool    Bow			  	: 1;		//0x00000800
			bool    CossBow		  	: 1;		//0x00001000
			bool    Gun			  	: 1;		//0x00002000
			bool    Throw			: 1;		//0x00004000
			bool    HeavyArmed	    : 1;		//0x00008000
			bool    LightArmed	    : 1;		//0x00010000
			bool    Leather		    : 1;		//0x00020000
			bool    Clothes	      	: 1;		//0x00040000
			bool    Robe		    : 1;		//0x00080000
			bool	Shield		  	: 1;		//0x00100000
			bool	Implement		: 1;		//0x00200000
			bool	SecondHand		: 1;		//0x00400000
		};
	};
};

//----------------------------------------------------------------------------------------
//裝備位置
//----------------------------------------------------------------------------------------
enum GameObjectWeaponPosENUM
{
    EM_WeaponPos_MainHand     ,   //主手
    EM_WeaponPos_SecondHand   ,   //副手
    EM_WeaponPos_OneHand      ,   //雙手都可以裝備
    EM_WeaponPos_TwoHand      ,   //兩手
    EM_WeaponPos_Ammo         ,   //子彈
	EM_WeaponPos_Manufacture  ,   //生產工具

    EM_GameObjectWeaponPosENUM_FORCE_DWORD   = 0x7fffffff, 
};

enum GameObjectArmorPosENUM
{
    EM_ArmorPos_Head        ,   //頭
    EM_ArmorPos_Gloves	    ,   //手套
    EM_ArmorPos_Shoes	    ,   //鞋子
    EM_ArmorPos_Clothes	    ,   //上衣
    EM_ArmorPos_Pants	    ,   //褲子
    EM_ArmorPos_Back	    ,   //背部
    EM_ArmorPos_Belt	    ,   //腰帶
    EM_ArmorPos_Shoulder    ,   //肩甲
    EM_ArmorPos_Necklace    ,   //項鍊 
    EM_ArmorPos_Ring        ,   //戒子
    EM_ArmorPos_Earring     ,   //耳飾
    EM_ArmorPos_SecondHand  ,   //副手

	EM_ArmorPos_MaxCount	,	
    EM_GameObjectArmorPosENUM_FORCE_DWORD   = 0x7fffffff, 
};
//-------------------------------------------------------------------------------------
//抗性烈舉
enum    MagicResistENUM
{
    EM_MagicResist_None     = -1,
    EM_MagicResist_Earth    ,
    EM_MagicResist_Water    ,   
    EM_MagicResist_Fire     ,
    EM_MagicResist_Wind     ,
    EM_MagicResist_Light    ,
    EM_MagicResist_Darkness ,
    EM_MagicResist_MAXCOUNT ,

    EM_MagicResist_FORCE_DWORD   = 0x7fffffff, 
};
//-------------------------------------------------------------------------------------
//抗性結構
struct  MagicResistStruct
{
	union
	{
		float     _ArrList[ EM_MagicResist_MAXCOUNT ];
		struct
		{
			float     Earth;
			float     Water;        
			float     Fire;
			float     Wind;
			float     Light;
			float     Darkness;
		};
	};
};
//----------------------------------------------------------------------------------------
//NPC抗性資料表
//----------------------------------------------------------------------------------------
struct NpcResistBaseInfoStruct
{
	char				Name[ 32 ];
	MagicResistENUM		Type;
	MagicResistStruct	Resist;
};
//-------------------------------------------------------------------------------------
//		技能結構
//-------------------------------------------------------------------------------------
enum	SkillValueTypeENUM
{
	EM_SkillValueType_Unarmed			,// Unarmed空手
	EM_SkillValueType_Blade             ,// 劍
	EM_SkillValueType_Dagger            ,// 匕首
	EM_SkillValueType_Wand              ,// 權杖
	EM_SkillValueType_Axe               ,// 斧
	EM_SkillValueType_Bludgeon          ,// 鎚棍棒
	EM_SkillValueType_Claymore          ,// 雙手劍
	EM_SkillValueType_Staff             ,// 杖
	EM_SkillValueType_2H_Axe            ,// 雙手斧
	EM_SkillValueType_2H_Hammer         ,// 雙手鎚
	EM_SkillValueType_Polearm			,// 槍(長矛)
	EM_SkillValueType_Bow				,// 遠程武器 弓
	EM_SkillValueType_CossBow			,// 遠程武器 十字弓
	EM_SkillValueType_Gun				,// 遠程武器 槍
	EM_SkillValueType_Define			,// 防禦

	EM_SkillValueType_BlackSmith		,// 打鐵
	EM_SkillValueType_Carpenter			,// 木工
	EM_SkillValueType_MakeArmor			,// 製甲
	EM_SkillValueType_Tailor			,// 裁縫
	EM_SkillValueType_Cook				,// 烹飪
	EM_SkillValueType_Alchemy			,// 煉金

	EM_SkillValueType_MaxCount			,
};

struct	SkillValueStruct
{
		
	union
	{
		float	Skill[_MAX_SKILL_COUNT_];
		struct
		{
			float Unarmed	, Blade		, Dagger	, Wand		, Axe ;
			float Bludgeon  , Claymore  , Staff		, Axe_2H	, Hammer_2H;
			float Polearm	, Bow		, CossBow	, Gun		;
			float Define;
			//生活技
			float BlackSmith , Carpenter , MakeArmor , Tailor , Cook , Alchemy  ;
		};
	};
	float GetSkill( int ID )
	{
		if( (unsigned)ID < _MAX_SKILL_COUNT_ )
			return Skill[ ID ];
		return 0;
	}
};
//----------------------------------------------------------------------------------------
//	NPC Title 顯示設定列舉
//----------------------------------------------------------------------------------------
enum NpcTitleTypeENUM
{
	EM_NpcTitleTypeENUM_Nornal			,		//一般
	EM_NpcTitleTypeENUM_Invisible		,		//不顯示
	EM_NpcTitleTypeENUM_QuestNPC		,		//任務型npc
	EM_NpcTitleTypeENUM_Neutral			,		//中立怪
};

//----------------------------------------------------------------------------------------
//	法術消耗列舉
//----------------------------------------------------------------------------------------
enum MagicSpellCostTypeENUM
{
	EM_MagicSpellCostType_None			,		//無消耗
	EM_MagicSpellCostType_HP			,		//消耗 HP
	EM_MagicSpellCostType_MP			,		//消耗 MP
	EM_MagicSpellCostType_SP_Warrior	,		//消耗 SP 戰士
	EM_MagicSpellCostType_SP_Ranger		,		//消耗 SP 遊俠
	EM_MagicSpellCostType_SP_Rogue		,		//消耗 SP 盜賊
	EM_MagicSpellCostType_Item			,		//消耗 物品
	EM_MagicSpellCostType_Ammo_Gun		,		//消耗 子彈
	EM_MagicSpellCostType_Ammo_Bow		,		//消耗 弓箭矢
	EM_MagicSpellCostType_Ammo_CossBow	,		//消耗 十字弓箭矢
	EM_MagicSpellCostType_Ammo_Throw	,		//消耗 投擲物
};
//----------------------------------------------------------------------------------------
//	法術需求列舉
//----------------------------------------------------------------------------------------
enum MagicSpellNeedTypeENUM
{
	EM_MagicSpellNeedType_None					,	//無需求
	EM_MagicSpellNeedType_Weapon				,	//需求 自己裝 武器
	EM_MagicSpellNeedType_EQ					,	//需求 自己裝 裝備
	EM_MagicSpellNeedType_Suit					,	//需求 自己裝 套裝
	EM_MagicSpellNeedType_Buf					,	//需求 自己有 法術Buf
	EM_MagicSpellNeedType_Buf_Target			,	//需求 目標有 法術Buf
	EM_MagicSpellNeedType_NoBuf					,	//需求 自己沒有 法術Buf
	EM_MagicSpellNeedType_NoBuf_Target			,	//需求 目標沒有 法術Buf
	EM_MagicSpellNeedType_NoAtk					,	//需求 自己非戰鬥
	EM_MagicSpellNeedType_NoAtk_Target			,	//需求 目標非戰鬥
	EM_MagicSpellNeedType_WeaponType_Unarmed	,	//需求 自己裝 武器類型 空手
	EM_MagicSpellNeedType_WeaponType_Blade      ,	//需求 自己裝 武器類型 單手劍
	EM_MagicSpellNeedType_WeaponType_Dagger     ,	//需求 自己裝 武器類型 匕首
	EM_MagicSpellNeedType_WeaponType_Wand       ,	//需求 自己裝 武器類型 權杖
	EM_MagicSpellNeedType_WeaponType_Axe        ,	//需求 自己裝 武器類型 單手斧
	EM_MagicSpellNeedType_WeaponType_Bludgeon   ,	//需求 自己裝 武器類型 鎚棍棒
	EM_MagicSpellNeedType_WeaponType_Claymore   ,	//需求 自己裝 武器類型 雙手劍
	EM_MagicSpellNeedType_WeaponType_Staff      ,	//需求 自己裝 武器類型 杖
	EM_MagicSpellNeedType_WeaponType_2H_Axe     ,	//需求 自己裝 武器類型 雙手斧
	EM_MagicSpellNeedType_WeaponType_2H_Hammer  ,	//需求 自己裝 武器類型 雙手鎚
	EM_MagicSpellNeedType_WeaponType_Polearm	,	//需求 自己裝 武器類型 槍(長矛)
	EM_MagicSpellNeedType_WeaponType_SwordType  ,	//需求 自己裝 武器類型 劍類(單雙手)
	EM_MagicSpellNeedType_WeaponType_AxeType    ,	//需求 自己裝 武器類型 斧類(單雙手)

};
//----------------------------------------------------------------------------------------
//其他法術設定
//----------------------------------------------------------------------------------------
struct	MagicSpellFlagStruct
{
	union
	{
		int _Type;
		struct
		{
			bool	GoodMagic			: 1;	//好的法術
			bool    ShowBuf			    : 1;	//顯示Buf
			bool	ContinueMagic		: 1;	//連續產生法術
			bool	DotMagic			: 1;	//DOT法術
			bool	FaceOffMagic		: 1;	//變身術 			
			bool	CancelBuff			: 1;	//可取消
			bool	ShowBuffTime		: 1;	//Client端顯示Buff時間
			bool	SpecialMagic		: 1;	//產生特殊法術
			bool	MagicShield			: 1;	//魔法盾
		};
	};
};

//----------------------------------------------------------------------------------------
//	武器防具或法術會修改玩家能力的結構
//----------------------------------------------------------------------------------------
enum WearEqTypeENUM
{
    EM_WearEqType_None          			,   // 無效果
    EM_WearEqType_Durable       			,   // 耐久度
    EM_WearEqType_STR           			,   // 屬性 STR 力量
    EM_WearEqType_STA           			,	// 屬性 STA 耐力			
    EM_WearEqType_INT           			,	// 屬性 INT 智力			
    EM_WearEqType_MND           			,	// 屬性 MND 靈力
    EM_WearEqType_AGI           			,	// 屬性 AGI 敏捷			
    EM_WearEqType_AllState      			,   // 屬性 所有(基本五個屬性)
    EM_WearEqType_MaxHP         			,	// 上限 HP
    EM_WearEqType_MaxMP		    			,	// 上限 MP
    EM_WearEqType_ReHP		    			,	// 回復率 HP
    EM_WearEqType_ReMP		    			,	// 回復率 MP
    EM_WearEqType_ATK		    			,	// ATK 攻擊力
    EM_WearEqType_DEF		    			,	// DEF 防禦力
    EM_WearEqType_MDEF   	    			,	// MDEF 魔法防禦
    EM_WearEqType_MATK	        			,	// MATK 魔法攻擊
    EM_WearEqType_HitRate	    			,	// 命中率
    EM_WearEqType_DodgeRate	    			,	// 迴避率
    EM_WearEqType_CritRate	    			,   // 致命一擊率
	EM_WearEqType_CritPower	    			,   // 致命一擊率威力加強(%)
	EM_WearEqType_MagicCritRate	    		,   // 魔法致命一擊率
	EM_WearEqType_MagicCritPower	    	,   // 魔法致命一擊率威力加強(%)
    EM_WearEqType_ParryRate     			,   // 格擋率
    EM_WearEqType_AtkSpeed	    			,   // 攻擊速度
    EM_WearEqType_MoveSpeed	    			,	// 移動速度
    EM_WearEqType_DMG           			,   // 武器威力 所有近戰或遠程 ( DMG )
    EM_WearEqType_MPow          			,   // 魔法威力( MPow )
    EM_WearEqType_AllResist     			,   // 抗性 所有
    EM_WearEqType_Resist_Earth  			,   // 抗性 地
    EM_WearEqType_Resist_Water  			,   // 抗性 水
    EM_WearEqType_Resist_Fire   			,   // 抗性 火
    EM_WearEqType_Resist_Wind   			,   // 抗性 風
    EM_WearEqType_Resist_Light  			,   // 抗性 光
    EM_WearEqType_Resist_Darkness			,   // 抗性 闇

	EM_WearEqType_ManaDecrease				,	// MP消耗減少(%)
	EM_WearEqType_Resist_Exp				,	// 經驗值
	EM_WearEqType_Resist_Treasure			,	// 掉寶率
	EM_WearEqType_Resist_ItemLV				,	// 物品等級微調

	EM_WearEqType_SecHand_HitRate			,	// 副手 命中率
	EM_WearEqType_SecHand_DMG_Per			,	// 副手 傷害力(DMG%)

	EM_WearEqType_DEF_HeavyArmed			,	// 防禦加強 鎧甲(%)
	EM_WearEqType_DEF_LightArmed			,	// 防禦加強 鎖甲(%)
	EM_WearEqType_DEF_Leather				,	// 防禦加強 皮甲(%)
	EM_WearEqType_DEF_Clothes	    		,	// 防禦加強 衣服(%)
	EM_WearEqType_DEF_Robe					,	// 防禦加強 長袍(%)
	EM_WearEqType_DEF_Shield				,	// 防禦加強 盾(%)

	EM_WearEqType_MagicPow_AllMagic 		, 	// 魔法威力 所有(%)
	EM_WearEqType_MagicPow_Earth  			, 	// 魔法威力 地(%)
	EM_WearEqType_MagicPow_Water  			, 	// 魔法威力 水(%) 
	EM_WearEqType_MagicPow_Fire   			, 	// 魔法威力 火(%) 
	EM_WearEqType_MagicPow_Wind   			, 	// 魔法威力 風(%) 
	EM_WearEqType_MagicPow_Light  			, 	// 魔法威力 光(%) 
	EM_WearEqType_MagicPow_Darkness			,	// 魔法威力 闇(%) 
	EM_WearEqType_SpellSpeed_AllMagic		, 	// 施法速度 所有(%)
	EM_WearEqType_SpellSpeed_Earth  		, 	// 施法速度 地(%) 
	EM_WearEqType_SpellSpeed_Water  		, 	// 施法速度 水(%) 
	EM_WearEqType_SpellSpeed_Fire   		, 	// 施法速度 火(%) 
	EM_WearEqType_SpellSpeed_Wind   		, 	// 施法速度 風(%) 
	EM_WearEqType_SpellSpeed_Light  		, 	// 施法速度 光(%) 
	EM_WearEqType_SpellSpeed_Darkness		, 	// 施法速度 闇(%) 
	EM_WearEqType_MagicPow_AllRange			,	// 遠程武器威力(%) 所有
	EM_WearEqType_MagicPow_Bow				,	// 遠程武器威力(%) 弓 
	EM_WearEqType_MagicPow_Cossbow			,	// 遠程武器威力(%) 十字弓 
	EM_WearEqType_MagicPow_Gun				,	// 遠程武器威力(%) 槍 
	EM_WearEqType_DMG_AllWeapon				,	// 近戰武器威力(%) 所有
	EM_WearEqType_DMG_Unarmed				,	// 近戰武器威力(%) 空手
	EM_WearEqType_DMG_Blade     			,	// 近戰武器威力(%) 劍
	EM_WearEqType_DMG_Dagger    			,	// 近戰武器威力(%) 匕首
	EM_WearEqType_DMG_Wand      			,	// 近戰武器威力(%) 權杖
	EM_WearEqType_DMG_Axe       			,	// 近戰武器威力(%) 斧
	EM_WearEqType_DMG_Bludgeon  			,	// 近戰武器威力(%) 鎚棍棒
	EM_WearEqType_DMG_Claymore  			,	// 近戰武器威力(%) 雙手劍
	EM_WearEqType_DMG_Staff     			,	// 近戰武器威力(%) 杖
	EM_WearEqType_DMG_2H_Axe    			,	// 近戰武器威力(%) 雙手斧
	EM_WearEqType_DMG_2H_Hammer 			,	// 近戰武器威力(%) 雙手鎚
	EM_WearEqType_DMG_Polearm				,	// 近戰武器威力(%) 槍(長矛)
	EM_WearEqType_AttackSpeed_AllWeapon		,	// 近戰武器速度 所有
	EM_WearEqType_AttackSpeed_Unarmed		,	// 近戰武器速度 空手
	EM_WearEqType_AttackSpeed_Blade     	,	// 近戰武器速度 劍
	EM_WearEqType_AttackSpeed_Dagger    	,	// 近戰武器速度 匕首
	EM_WearEqType_AttackSpeed_Wand      	,	// 近戰武器速度 權杖
	EM_WearEqType_AttackSpeed_Axe       	,	// 近戰武器速度 斧
	EM_WearEqType_AttackSpeed_Bludgeon  	,	// 近戰武器速度 鎚棍棒
	EM_WearEqType_AttackSpeed_Claymore  	,	// 近戰武器速度 雙手劍
	EM_WearEqType_AttackSpeed_Staff     	,	// 近戰武器速度 杖
	EM_WearEqType_AttackSpeed_2H_Axe    	,	// 近戰武器速度 雙手斧
	EM_WearEqType_AttackSpeed_2H_Hammer 	,	// 近戰武器速度 雙手鎚
	EM_WearEqType_AttackSpeed_Polearm		,	// 近戰武器速度 槍(長矛)
	EM_WearEqType_WeaponAttack_Earth  		,   // 武器附加屬性攻擊 地
	EM_WearEqType_WeaponAttack_Water  		,   // 武器附加屬性攻擊 水
	EM_WearEqType_WeaponAttack_Fire   		,   // 武器附加屬性攻擊 火
	EM_WearEqType_WeaponAttack_Wind   		,   // 武器附加屬性攻擊 風
	EM_WearEqType_WeaponAttack_Light  		,   // 武器附加屬性攻擊 光
	EM_WearEqType_WeaponAttack_Darkness		,   // 武器附加屬性攻擊 闇
	EM_WearEqType_WearEqAbility_Unarmed 	,	// 裝備能力 空手 	  	
	EM_WearEqType_WearEqAbility_Blade   	,	// 裝備能力 劍	  	  	
	EM_WearEqType_WearEqAbility_Dagger  	,	// 裝備能力 匕首	  	
	EM_WearEqType_WearEqAbility_Wand    	,	// 裝備能力 權杖	  	
	EM_WearEqType_WearEqAbility_Axe     	,	// 裝備能力 斧	  	
	EM_WearEqType_WearEqAbility_Bludgeon	,	// 裝備能力 鎚棍棒
	EM_WearEqType_WearEqAbility_Claymore	,	// 裝備能力 雙手劍
	EM_WearEqType_WearEqAbility_Staff   	,	// 裝備能力 杖
	EM_WearEqType_WearEqAbility_Axe_2H  	,	// 裝備能力 雙手斧
	EM_WearEqType_WearEqAbility_Hammer_2H	,	// 裝備能力 雙手鎚
	EM_WearEqType_WearEqAbility_Polearm		,	// 裝備能力 槍(長矛)
	EM_WearEqType_WearEqAbility_Bow			,	// 裝備能力 弓 
	EM_WearEqType_WearEqAbility_CossBow		,	// 裝備能力 十字弓
	EM_WearEqType_WearEqAbility_Gun			,	// 裝備能力 槍 
	EM_WearEqType_WearEqAbility_Throw		,	// 裝備能力 投擲
	EM_WearEqType_WearEqAbility_HeavyArmed	,	// 裝備能力 鎧甲
	EM_WearEqType_WearEqAbility_LightArmed	,	// 裝備能力 鎖甲
	EM_WearEqType_WearEqAbility_Leather		,	// 裝備能力 皮甲
	EM_WearEqType_WearEqAbility_Clothes	    ,	// 裝備能力 衣服
	EM_WearEqType_WearEqAbility_Robe		,	// 裝備能力 長袍
	EM_WearEqType_WearEqAbility_Shield		,	// 裝備能力 盾
	EM_WearEqType_WearEqAbility_Implement	,	// 裝備能力 手持法器
	EM_WearEqType_WearEqAbility_SecondHand	,	// 裝備能力 雙手持

	EM_WearEqType_SkillValue_Unarmed		,	// 技能上升 Unarmed空手
	EM_WearEqType_SkillValue_Blade          ,	// 技能上升 劍
	EM_WearEqType_SkillValue_Dagger         ,	// 技能上升 匕首
	EM_WearEqType_SkillValue_Wand           ,	// 技能上升 權杖
	EM_WearEqType_SkillValue_Axe            ,	// 技能上升 斧
	EM_WearEqType_SkillValue_Bludgeon       ,	// 技能上升 鎚棍棒
	EM_WearEqType_SkillValue_Claymore       ,	// 技能上升 雙手劍
	EM_WearEqType_SkillValue_Staff          ,	// 技能上升 杖
	EM_WearEqType_SkillValue_2H_Axe         ,	// 技能上升 雙手斧
	EM_WearEqType_SkillValue_2H_Hammer      ,	// 技能上升 雙手鎚
	EM_WearEqType_SkillValue_Polearm		,	// 技能上升 槍(長矛)
	EM_WearEqType_SkillValue_Bow			,	// 技能上升 遠程武器 弓
	EM_WearEqType_SkillValue_CossBow		,	// 技能上升 遠程武器 十字弓
	EM_WearEqType_SkillValue_Gun			,	// 技能上升 遠程武器 槍
	EM_WearEqType_SkillValue_Define			,	// 技能上升 防禦
	EM_WearEqType_SkillValue_BlackSmith		,	// 技能上升 打鐵
	EM_WearEqType_SkillValue_Carpenter		,	// 技能上升 木工
	EM_WearEqType_SkillValue_MakeArmor		,	// 技能上升 製甲
	EM_WearEqType_SkillValue_Tailor			,	// 技能上升 裁縫
	EM_WearEqType_SkillValue_Cook			,	// 技能上升 烹飪
	EM_WearEqType_SkillValue_Alchemy		,	// 技能上升 煉金

	EM_WearEqType_HQ_BlackSmith				,	// HQ品機率上升 打鐵
	EM_WearEqType_HQ_Carpenter				,	// HQ品機率上升上升 木工
	EM_WearEqType_HQ_MakeArmor				,	// HQ品機率上升上升 製甲
	EM_WearEqType_HQ_Tailor					,	// HQ品機率上升上升 裁縫
	EM_WearEqType_HQ_Cook					,	// HQ品機率上升上升 烹飪
	EM_WearEqType_HQ_Alchemy				,	// HQ品機率上升上升 煉金


	  
	EM_WearEqType_MaxCount				,
};	  
	  
#define Max_WearEqType_Count   5   //最多有幾個屬性可加
struct  GameObjectWearEqStruct
{
    WearEqTypeENUM  EqType[ Max_WearEqType_Count ];
    int             EqTypeValue[ Max_WearEqType_Count ];
};
//----------------------------------------------------------------------------------------
//物品掉落的結構
//----------------------------------------------------------------------------------------
struct ItemDropStruct
{
	int		OrgID;					//物品號碼
	int		Rate;					//掉落機率
};
//----------------------------------------------------------------------------------------
//屬於Player的基本資料
//----------------------------------------------------------------------------------------
struct GameObjectPlayerStruct
{
    int     None;
};
//----------------------------------------------------------------------------------------
//屬於BodyObj的基本資料
//----------------------------------------------------------------------------------------
struct GameObjectBodyObjStruct
{
    int     None;
};

//----------------------------------------------------------------------------------------
// Quest  詳細內容的資料, 描述了 Quest 開頭 / 過程 / 獎勵
//----------------------------------------------------------------------------------------
struct GameObjectQuestDetail
{
	// 判斷部份
	// 用作 Client 判斷 User 是否可以接 Quest ( 也用做在 Client及小地圖上顯示 )
	//---------------------------------------------------------
	int		iCheck_Class_Type;
	int		iCheck_Class1;
	int		iCheck_Class2;
	int		iCheck_Sex;
	int		iCheck_BaseLV;
	int		iCheck_RangeLV;
	int		iCheck_Title;
	int		iCheck_Group;
	int		iCheck_Flag			[ _MAX_SIZE_QUEST_FLAG		];
	int		iCheck_Time;
	int		iCheck_Rep;

	int		iCheck_ObjID		[ _MAX_SIZE_QUEST_ITEM		];
	int		iCheck_ObjVal		[ _MAX_SIZE_QUEST_ITEM		];
	int		iCheck_Loop;


	// 任務說明
	//---------------------------------------------------------
	int		iQuestID;
	char*	szQuest_Name;
	char*	szQuest_Desc;

	char*	szQuest_Accept_Detail;
	char*	szQuest_UnComplete_Detail;
	char*	szQuest_Complete_Detail;

	char*	iQuest_Catalog;
	char*	iQuest_Type;

	// 接受任務後所置的狀態或給予的物品
	//--------------------------------------------------------
	int		iAccept_FlagOn		[ _MAX_SIZE_QUEST_FLAG		];
	int		iAccept_FlagOff		[ _MAX_SIZE_QUEST_FLAG		];
	int		iAccept_ItemID		[ _MAX_SIZE_QUEST_ITEM		];
	int		iAccept_ItemVal		[ _MAX_SIZE_QUEST_ITEM		];

	// 完成任務所須要的條件
	//--------------------------------------------------------
	int		iRequest_ItemID		[ _MAX_SIZE_QUEST_ITEM		];
	int		iRequest_ItemVal	[ _MAX_SIZE_QUEST_ITEM		];
	int		iRequest_KillID		[ _MAX_SIZE_QUEST_ITEM		];
	int		iRequest_KillVal	[ _MAX_SIZE_QUEST_ITEM		];
	int		iRequest_Timer;
	int		iRequest_Money;
	int		iRequest_QuestID;

	// 接受任務後進行任務時, 對特定目標動作, 所產生的影響
	//--------------------------------------------------------
	int		iProcess_ClickToGetItem_ObjID		[ _MAX_SIZE_QUEST_ITEM		];
	int		iProcess_ClickToGetItem_ProcPercent	[ _MAX_SIZE_QUEST_ITEM		];
	int		iProcess_ClickToGetItem_GetItem		[ _MAX_SIZE_QUEST_ITEM		];
	int		iProcess_ClickToGetItem_GetItemVal	[ _MAX_SIZE_QUEST_ITEM		];

	int		iProcess_KilltoGetItem_ObjID		[ _MAX_SIZE_QUEST_ITEM		];
	int		iProcess_KilltoGetItem_ProcPercent	[ _MAX_SIZE_QUEST_ITEM		];
	int		iProcess_KilltoGetItem_GetItem		[ _MAX_SIZE_QUEST_ITEM		];
	int		iProcess_KilltoGetItem_GetItemVal	[ _MAX_SIZE_QUEST_ITEM		];

	// 完成任務後, 所接收的獎賞
	//--------------------------------------------------------
	int		iReward_ChoiceID	[ _MAX_SIZE_QUEST_ITEM		];
	int		iReward_ChoiceVal	[ _MAX_SIZE_QUEST_ITEM		];
	int		iReward_ItemID		[ _MAX_SIZE_QUEST_ITEM		];
	int		iReward_ItemVal		[ _MAX_SIZE_QUEST_ITEM		];
	int		iReward_Spell		[ _MAX_SIZE_QUEST_ITEM		];
	int		iReward_Money;
	int		iReward_Exp;	
	int		iReward_Rep;

	// 完成任務後, 所設定的狀態
	//--------------------------------------------------------
	int		iComplete_ShowQuest;
	int		iComplete_FlagOn	[ _MAX_SIZE_QUEST_FLAG		];
	int		iComplete_FlagOff	[ _MAX_SIZE_QUEST_FLAG		];

	// 完成任務後, 所設定的狀態
	//--------------------------------------------------------
	char*	szScript_OnBegin;
	char*	szScript_OnAccept;
	char*	szScript_OnComplete;
	char*	szScript_OnClickObjBegin;
	char*	szScript_OnClickObjEnd;
};

//----------------------------------------------------------------------------------------
//NPC施法的結構
//----------------------------------------------------------------------------------------
#define	_MAX_NPC_SPELL_MAGIC_COUNT_	8
//施法時機
enum NPCSpellRightTimeENUM
{
	EM_NPCSpellRightTime_None			,//無
	EM_NPCSpellRightTime_Normal			,//一般狀態   (60秒)
	EM_NPCSpellRightTime_OnAttack		,//戰鬥啟動
	EM_NPCSpellRightTime_Attack			,//戰鬥狀態   (5秒)
	EM_NPCSpellRightTime_AttackHPHalf	,//戰鬥HP1/2  (5秒)
	EM_NPCSpellRightTime_AttackHPQuarter,//戰鬥HP1/4  (5秒)
	EM_NPCSpellRightTime_FriendDead		,//友方死亡   (5秒)
	EM_NPCSpellRightTime_KeepDistance	,//保持距離   (5秒)
};
//NPC施法目標
enum NPCSpellTargetENUM
{
	EM_NPCSpellTarget_Self				,//自己
	EM_NPCSpellTarget_Target			,//目標
	EM_NPCSpellTarget_Target_HP_Half	,//目標(HP 1/2)
	EM_NPCSpellTarget_Target_HP_Quarter	,//目標(HP 1/4)
	EM_NPCSpellTarget_Target_Distance_30_,//目標(距離30以上 )
	EM_NPCSpellTarget_Target_Escape		,//目標(逃跑)
	
	EM_NPCSpellTarget_Friend			,//友方
	EM_NPCSpellTarget_Friend_HP_Half	,//友方(HP 1/2)
	EM_NPCSpellTarget_Friend_HP_Quarter	,//友方(HP 1/4)
	EM_NPCSpellTarget_Enemy				,//敵方
	EM_NPCSpellTarget_Enemy_HP_Half		,//敵方(HP 1/2)
	EM_NPCSpellTarget_Enemy_HP_Quarter	,//敵方(HP 1/4)

};

struct  NPCSpellBaseStruct
{
	NPCSpellRightTimeENUM	RigthTime;	//施法時機
	NPCSpellTargetENUM		TargetType;	//目標類型
	int		Rate;						//發動機率
	int		MagicID;					//法術
	
};
//----------------------------------------------------------------------------------------
//屬於NPC的基本資料
//----------------------------------------------------------------------------------------
struct GameObjectNpcStruct
{
	int			Race;					//種族
	int			Vocation;				//職業
	int         Sex;                    //性別
	int 		ExpRate;				//怪物打死後可得到的經驗值百分比
	int			Level;					//基本等級
	int         LevelRange;

	int         AddPowerLV;             //增強武器希有度等級
	
	int			STR;
	int			STA;
	int			INT;
	int			MND;
	int			AGI;

	int         MoveSpeed;
	int         SearchRange;

    int         DropMoney_Base;
    int         DropMoney_Rand;

	ItemDropStruct DropItem[ _MAX_DROPITEM_COUNT_ ];
	int         MainHandEQ[ _MAX_NPC_EQSEL_COUNT_ ];        //每一個 20 %機會會裝備
	int         SecHandEQ[ _MAX_NPC_EQSEL_COUNT_];          //每一個 20 %機會會裝備
	
	int			iQuestMode;
	char*		szQuestNpcText;								// 任務 NPC 所說的費話
	char*		szQuestDoingText;
    int			iQuestID[20];								// 任務 NPC 所能給的 Quest

    int         Brave;              //勇敢度
    int         LinkType;           //怪物連鎖類型
	int			EscapeType;			//逃跑類型

	NPCSpellBaseStruct		Spell[_MAX_NPC_SPELL_MAGIC_COUNT_];

	NpcTitleTypeENUM		TitleType;
	GameObjDbStruct*		pQuestLink[ _MAX_QUESTLINK_COUNT ];

	int			iQuestNPCRefID;

	int					DB_ResistID;						//資料庫類型id(呼略)
	MagicResistENUM		ResistType;							//NPC的屬性	
	MagicResistStruct	Resist;								//抗幸值

	char*		szLuaScript;								// 初始化劇情或對話時所載入的 LUA
};
//----------------------------------------------------------------------------------------
//附加屬性的基本資料
//----------------------------------------------------------------------------------------
enum  MagicActionTypeENUM
{   
    EM_MagicAction_Attack           ,
    EM_MagicAction_UnderAttack      ,
    EM_MagicAction_EQ               ,
    EM_MagicAction_Used             ,
};

enum    AttributeTypeENUM
{
    EM_AttributeType_AddPower   ,
    EM_AttributeType_Rune       ,
    EM_AttributeType_Title      ,
};

enum AddonPosENUM
{
	EM_AddonPos_None = -1		,
	EM_AddonPos_Head    		,
	EM_AddonPos_Gloves			,
	EM_AddonPos_Shoes			,
	EM_AddonPos_Clothes			,
	EM_AddonPos_Pants			,
	EM_AddonPos_Back			,
	EM_AddonPos_Belt			,
	EM_AddonPos_Shoulder		,
	EM_AddonPos_Necklace		,
	EM_AddonPos_Ring    		,
	EM_AddonPos_Earring 		,
	EM_AddonPos_Shield			,
	EM_AddonPos_Weapon  		,
};
struct  AddonPosTypeStruct
{
    union
    {
        int _Type;
        struct
        {
            bool    Head        : 1;
            bool    Gloves	    : 1;
            bool    Shoes	    : 1;
            bool    Clothes	    : 1;
            bool    Pants	    : 1;
            bool    Back	    : 1;
            bool    Belt	    : 1;
            bool    Shoulder    : 1;
            bool    Necklace    : 1;
            bool    Ring        : 1;
            bool    Earring     : 1;
			bool	Shield		: 1;
            bool    Weapon      : 1;
        };
    };
};

struct	GameObjectAttributeStruct
{
    AttributeTypeENUM   Type;   //附加能力類型

	int		InheritRate;		//繼承機率(萬分之一)
    int		InheritLV;			//繼承等級
    int     InheritLV_Range;    //範圍

    int     Inc_Magic;          //內含的法術
    int     Inc_Magic_ActionRate;//法術發生機率( 攻擊 被攻擊 )

    MagicActionTypeENUM     Inc_MagicType;
    AddonPosTypeStruct      AddPos;             //可裝備部位

	GameObjectWearEqStruct	Ability;
};
//----------------------------------------------------------------------------------------
//礦產設定
//----------------------------------------------------------------------------------------
enum GameObjectMineType
{
    EM_GameObjectMineType_Mine      ,
    EM_GameObjectMineType_Wood      ,
    EM_GameObjectMineType_Herb      ,
    EM_GameObjectMineType_Fish      ,
    EM_GameObjectMineTypeENUM_FORCE_DWORD   = 0x7fffffff, 
};

enum GameObjectCreateType
{
    EM_GameObjectCreateType_Always      ,           //永遠存在
    EM_GameObjectCreateType_EmptyDel    ,           //取完刪除
    EM_GameObjectCreateTypeENUM_FORCE_DWORD   = 0x7fffffff, 
};

struct	GameObjectMineStruct
{   
    GameObjectMineType      Type;
    float                   BaseCount;                      //初始量
    GameObjectCreateType    CreateType;                     //是否消失
    int                     LvLimit;                        //等級限制

    int                     GetItem[7];                     //取得物品 ..(怪物則是產生)
    float                   GetItemRate[7];                 //產生率
    float                   GetItemCount[7];                //數量

};
//----------------------------------------------------------------------------------------
//重要物品
//----------------------------------------------------------------------------------------
enum	KeyItemTypeENUM
{
	EM_KeyItemType_Invisible		,
	EM_KeyItemType_Normal			,	//一般
	EM_KeyItemType_Key				,	//鑰匙
	EM_KeyItemType_Map				,	//地圖
	EM_KeyItemType_SkillBook		,	//技能書
	EM_KeyItemType_Recipe			,	//配方表
};
//----------------------------------------------------------------------------------------
struct	GameObjectKeyItemStruct
{
    KeyItemTypeENUM     Type;
    int					QuestID;
};
//----------------------------------------------------------------------------------------
//配方表
//----------------------------------------------------------------------------------------
#define _MAX_RECIPE_SOURCE_COUNT_	8
struct RecipeItemStruct
{
    int     OrgObjID;   //樣板物件
    int     Count;      //數量
    int     Rate;       //產生率(十萬分之一)
};
struct GameObjectRecipeStruct
{
	
    RecipeItemStruct Source[ _MAX_RECIPE_SOURCE_COUNT_ ];                 //原料

	union
	{
		RecipeItemStruct ItemAll[9];              //產生物品一

		struct 
		{
			union
			{
				RecipeItemStruct Item1[6];              //產生物品一
				struct
				{
					RecipeItemStruct Item1_Normal;
					RecipeItemStruct Item1_HQ;
					RecipeItemStruct Item1_Slot1;
					RecipeItemStruct Item1_Slot2;
					RecipeItemStruct Item1_Slot3;
					RecipeItemStruct Item1_Slot4;

				};
			};

			union
			{
				RecipeItemStruct ItemOther[3];                  //產生物品2-4
				struct  
				{
					RecipeItemStruct Item2;                     //產生物品2
					RecipeItemStruct Item3;                     //產生物品3
					RecipeItemStruct Item4;                     //產生物品4
				};

			};
		};

	};
	
	//需求
	struct
	{
		SkillValueTypeENUM		Skill;			//技能種類
		int						SkillLV;			//技能等級
		int						KeyItemID;			//重要物品
	}Request;

	int	Coldown;	//冷卻時間(秒)
};
//----------------------------------------------------------------------------------------
//頭銜資料
//----------------------------------------------------------------------------------------
struct  GameObjectTitleStruct
{
    int     Type;                   //企劃分類用(暫時無用)
    //=----------------------------------
    //需求
    //=----------------------------------
    int     Famous;                 
    int     MainJob;
    int     MainJobLV;
    int     SubJob;
    int     SubJobLV;               
    //=----------------------------------
    GameObjectWearEqStruct	Ability;
   // int     AttributeID;            //能力
};
//----------------------------------------------------------------------------------------
//圖型設定
//----------------------------------------------------------------------------------------
enum GameObjectImageTypENUM
{
    EM_GameObjectImageType_Normal   ,
    EM_GameObjectImageType_Magic    ,
    EM_GameObjectImageType_Armor    ,
    EM_GameObjectImageType_Weapon   ,

    EM_GameObjectImageTypeENUM_FORCE_DWORD   = 0x7fffffff,
};

enum ArgumentPointENUM 
{
    EM_Argument_Null		= 0	,
    EM_Argument_Hit_Point		,
    EM_Argument_Back_Staff		,
    EM_Argument_Back_Shield		,
    EM_Argument_Back_Sworld		,
    EM_Argument_Name_Title		,
    EM_Argument_Hand_Shield		,
    EM_Argument_Left_Hand		,
    EM_Argument_Right_Hand		,
    EM_Argument_Left_Foot		,
    EM_Argument_Right_Foot		,
    EM_Argument_Left_Weapon		,
    EM_Argument_Right_Weapon	,
};

/*
enum MotionENUM 
{
    EM_Motion_Null			= 0	,
    EM_Motion_Casting_Delay		,				// "casting_delay" 施法等待
    EM_Motion_Cast_01			,				// "cast01" 出手對自身
    EM_Motion_Cast_02			,				// "cast02" 出手對目標	
};
*/
//----------------------------------------------------------------------------------------
enum ObjectImageTypeENUM 
{
    EM_ObjectImage_2Foots       ,
    EM_ObjectImage_4Foots       ,
};
//----------------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------------
struct MagicPartical
{
    char				Point[_MAX_FILENAME_SIZE_];	// 考點位置
    char				Name[_MAX_FILENAME_SIZE_];	// 特效名稱
};

enum	Image_MagicTypeENUM
{
	EM_Image_MagicType_Collect	,	//集合
	EM_Image_MagicType_Base		,	//基本
};

struct GameObjectImageStruct
{
    GameObjectImageTypENUM          ImageType;                      //顯示模式

    char							ACTField[_MAX_FILENAME_SIZE_];	//物品欄位的 ACT 2D
    char							ACTWorld[_MAX_FILENAME_SIZE_];	//顯像ACT
    int 							ModelSize;			            //放大倍率
    int                             BoundRadius;                    //碰撞半徑
	Image_MagicTypeENUM				MagicType;
    //-----------------------------------------------------------------------------------------
    //裝備資料
    //-----------------------------------------------------------------------------------------
    GameObjectArmorPosENUM          ArmorPos;
    //-----------------------------------------------------------------------------------------
    //法術圖型資訊
    //-----------------------------------------------------------------------------------------
    // 對施法者自身
    char							GatherMotion[_MAX_FILENAME_SIZE_];		// 集氣動作
    MagicPartical					GatherPartical[3];						// 集氣特效

    // 出手	
    char							ShootMotion[_MAX_FILENAME_SIZE_];		// 出手動作
    int 							ShootMotionScale;						// %
    char							ShootACT[_MAX_FILENAME_SIZE_];			// 出手特效ACT

    // 飛行
	char							FlyBeginPoint[_MAX_OBJ_NAME_STR_SIZE_];	// 指定飛行特效開始所在角色參考點位置
    char							FlyACT[_MAX_FILENAME_SIZE_];			// 飛行特效ACT

    // 目的
    char							ExplodeACT[_MAX_FILENAME_SIZE_];		// 目的爆炸效果ACT
	char							TargetPoint[_MAX_OBJ_NAME_STR_SIZE_];	// 對象參考點位置

	// 延伸目的特效,主要用以當目地特效撥放時,臨近物件受撥及所要做的效果表現
	// 比如目的產生大爆炸特效,延伸則產生燃燒特效
	char							ExtendACT[_MAX_FILENAME_SIZE_];			// 延伸目的特效ACT
	char							ExtenPoint[_MAX_OBJ_NAME_STR_SIZE_];	// 延伸對象參考點位置

	// Buff
	char							BuffACT[_MAX_FILENAME_SIZE_];			// Buff效果ACT	
	char							BuffPoint[_MAX_OBJ_NAME_STR_SIZE_];		// Buff效果對象參考點位置
    //-----------------------------------------------------------------------------------------
    //物件類型
    //-----------------------------------------------------------------------------------------
    ObjectImageTypeENUM             ObjectType;                             //是兩腳還是四角動物
};

//----------------------------------------------------------------------------------------
//使用限制結構
//----------------------------------------------------------------------------------------
struct LimitStruct
{
    VocationFlagStruct  Voc;
    RaceFlagStruct      Race;
    SexFlagStruct       Sex;
    int     Level;
    int     STR;
    int     STA;
    int     INT;
    int     MND;
    int     AGI;
};
//----------------------------------------------------------------------------------------
//企劃物品規類
//----------------------------------------------------------------------------------------
enum ItemType_ENUM
{
    EM_ItemType_Normal          	, //一般
    EM_ItemType_Plot            	, //劇情物品
    EM_ItemType_Food            	, //食物
    EM_ItemType_SweetFood       	, //甜食
    EM_ItemType_Water           	, //藥水
    EM_ItemType_Ore             	, //礦石
    EM_ItemType_Wood            	, //木材
    EM_ItemType_Herb            	, //藥草
    EM_ItemType_Hunt            	, //獵物
    EM_ItemType_Seed            	, //種子
    EM_ItemType_Flowerpot       	, //花盆
    EM_ItemType_Crop            	, //作物
    EM_ItemType_Fish            	, //魚
    EM_ItemType_Tool            	, //採集工具
    EM_ItemType_Stuff           	, //製造材料
    EM_ItemType_Recipe_BlackSmith   , //配方 打鐵
	EM_ItemType_Recipe_Carpenter    , //配方 木工
	EM_ItemType_Recipe_Armor     	, //配方 製甲
	EM_ItemType_Recipe_Tailor     	, //配方 裁縫
	EM_ItemType_Recipe_Alchemy     	, //配方 煉金
	EM_ItemType_Recipe_Cook     	, //配方 烹飪
    EM_ItemType_Jewel           	, //衝等寶石
    EM_ItemType_PowerLight      	, //效果光球
    EM_ItemType_Money           	, //金錢
};
enum RareType_ENUM
{
    EM_RareType_Normal      ,
    EM_RareType_Good        ,
    EM_RareType_Magic       ,
    EM_RareType_Legend      ,
    EM_RareType_FORCE_DWORD   = 0x7fffffff, 
};

enum RuneType_ENUM
{
	EM_RuneType_Manufacture		,//生產
	EM_RuneType_Weapon			,//武器
	EM_RuneType_Head			,//頭部
	EM_RuneType_Body			,//上身
	EM_RuneType_Pant			,//下身
	EM_RuneType_Special			,//特殊
};
//----------------------------------------------------------------------------------------
//屬於物品的基本資料
//----------------------------------------------------------------------------------------
struct GameObjectItemStruct
{
	GameObjectItemENUM		Class;

    ItemType_ENUM           ItemType; 

	int						IncMagic_Onuse;		    //產生的法術效果(使用的效果)
    int                     IncMagic_OnAttack;      //產生的法術效果(功擊時)
    int                     IncMagic_OnAttackRate;  //攻擊發生的機率

    int                     DisappearRate;      //合成失敗消失率
    int                     SrcRecipe;          //合成配方

    union
    {
	    GameObjectWeaponENUM	WeaponType;			//武器類型
        GameObjectArmorENUM     ArmorType;			//防具類型
    };
    union
    {
        GameObjectWeaponPosENUM WeaponPos;
        GameObjectArmorPosENUM  ArmorPos;
    };

	GameObjectWearEqStruct	Ability;

	int						AttackDistance;		//攻擊距離
    int                     HoleBase;           //基本洞數(符文容量)
    int                     HoleRange;          //可變範圍
    YesNoENUM               AddPowerOn;         //物品掉落是否跑一般附加屬性規則(or符文能力)


    AddonPosTypeStruct      AddPos;             //(符文)鑲入裝備部位
    RuneType_ENUM           RuneType;           //符文類型(企劃用)
    int                     Durable;
	int						Level;				//使用等級
	int						Volume;				//符文容量
	int						ManuFactureType;	//製造類型
	int						ManuFactureLV;		//製造等級

	int						BuyUnit;			//購買單位(Client商店購買使用)
	int						SuitID;				//套裝ID

	int						AttackRange;		//攻擊範圍
	YesNoENUM               StandardType;		//標準型

	int						ACSearchType[3];	//AC 拍賣的分類
	EqWearSkillStruct		ItemEqType;			//AC 搜尋分類用
};
//----------------------------------------------------------------------------------------
//法術種類列舉
//----------------------------------------------------------------------------------------
enum	GameObjectMagicENUM
{
	//立即反應
	EM_Magic_Attack			    ,	//攻擊
	EM_Magic_Cure				,	//治療
	EM_Magic_Rebuff			    ,	//去Buff

	//持續效果
	EM_Magic_Assist			    ,	//輔助效果的法術
	EM_Magic_Disease			,	//不好的狀態
    EM_GameObjectMagicEM_FORCE_DWORD   = 0x7fffffff, 
};
//----------------------------------------------------------------------------------------
//	法術目標設定
//----------------------------------------------------------------------------------------

enum	GameObjectRelationENUM
{
	EM_Releation_Self			,	//自己
	EM_Releation_Member		    ,	//隊友

	EM_Releation_Self_Pet		,	//自己(pet)
	EM_Releation_Member_Pet	    ,	//隊友(pet)

	EM_Releation_Friend		    ,	//友方,(對玩家 則為所有玩家   對不屬於玩家的NPC 則為不屬於玩家的NPC)
	EM_Releation_Friend_NPC	    ,	//友方的寵物(如寵物，召喚出來的，屬於跟隨自己的NPC)

	EM_Releation_Enemy		    ,	//所有可砍殺的對項
	EM_Releation_Player		    ,	//所有玩家
	EM_Releation_All			,	//所有物件

	EM_Releation_GuildPlayer	,	//同公會玩家
	EM_Releation_NotGuildPlayer ,	//不同公會玩家

    EM_Releation_CountryPlayer	,	//同國家玩家
    EM_Releation_NoCountryPlayer,	//不同國家玩家

	EM_Releation_Corpse			,	//屍體
	EM_Releation_Npc_Corpse		,	//NPC屍體
	EM_Releation_Player_Corpse	,	//玩家屍體
	EM_Releation_Locatoin		,	//指定位置( 範圍法術 )

    EM_GameObjectRelationEM_FORCE_DWORD   = 0x7fffffff, 
};

//----------------------------------------------------------------------------------------
//有效範圍
//----------------------------------------------------------------------------------------
//(好的有效範圍)自己 隊友 同工會
//(壞的有效範圍)可以砍殺者
enum	GameObjectMagicEffectRangeENUM
{
	EM_MagicEffect_Target			,	//目標有效
	EM_MagicEffect_Good_Range		,	//好的範圍法術
	EM_MagicEffect_Good_Member	    ,	//好的成員法術
	EM_MagicEffect_Bad_Range		,	//壞的範圍法術
    EM_GameObjectMagicEffectRangeEM_FORCE_DWORD   = 0x7fffffff, 
};
//----------------------------------------------------------------------------------------
enum MagicFuncENUM
{
	EM_MAGICFUN_HPMP		= 0	,
	EM_MAGICFUN_Assist		    ,	//輔助
	EM_MAGICFUN_Teleport		,	//傳送
	EM_MAGICFUN_RecordRecipe	,	//登入配方
	EM_MAGICFUN_RecordMagic	    ,	//登入法術
	EM_MAGICFUN_SummonCreature  ,	//招換生物(寵物)
	EM_MAGICFUN_SummonItem	    ,	//招換物品
	EM_MAGICFUN_Steal			,	//偷竊
	EM_MAGICFUN_ItemRunPlot	    ,	//產生物品並且執行劇情
	EM_MAGICFUN_RunPlot		    ,	//執行劇情
	EM_MAGICFUN_Raise		   	,	//復活
};
//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------
// 輔助法術類型
//----------------------------------------------------------------------------------------
enum	GameObjectMagicTypeENUM
{
	EM_Magic_Type_NULL	=	-1  ,
	EM_Magic_Type0				,
	EM_Magic_Type1				,
	EM_Magic_Type2				,
	EM_Magic_Type3				,
	EM_Magic_Type4				,
	EM_Magic_Type5				,
	EM_Magic_Type6				,
	EM_Magic_Type7				,
	EM_Magic_Type8				,
	EM_Magic_Type9				,
	EM_Magic_Type10				,
	EM_Magic_Type11				,
	EM_Magic_Type12				,
	EM_Magic_Type13				,
	EM_Magic_Type14				,
	EM_Magic_Type15				,
    EM_GameObjectMagicTypeEM_FORCE_DWORD   = 0x7fffffff, 
};
//----------------------------------------------------------------------------------------
enum    ShootItemType
{
	EM_ShootItem_None			,
    EM_ShootItem_Ammunition     ,
    EM_ShootItem_Arrow          ,
    EM_ShootItem_Throw          ,
};
//----------------------------------------------------------------------------------------
//法術消耗結構
//----------------------------------------------------------------------------------------
struct MagicCostStruct
{
	MagicSpellCostTypeENUM	Type;		//消耗類型
	int				Value;				//消耗數值
};
//----------------------------------------------------------------------------------------
//法術需求結構
//----------------------------------------------------------------------------------------
struct MagicNeedStruct
{
	MagicSpellNeedTypeENUM	Type;		//需求類型
	int						Value;		//值
};
//-----------------------------------------------------------------------
//傳送魔法
//-----------------------------------------------------------------------
struct	MagicTeleport
{
	int	ZoneID;
	int	X , Y , Z;
	int Dir;
};


//-----------------------------------------------------------------------
//	攻擊魔法
//-----------------------------------------------------------------------
enum  MagicAttackCalENUM
{
    EM_MagicAttackCal_None      ,
    EM_MagicAttackCal_MPow      ,
    EM_MagicAttackCal_Weapon    ,// (本身DMG + 主手DMG)
    EM_MagicAttackCal_Shoot     ,//  射擊類( 本身DMG + 弓DMG + 彈藥DMG)
    EM_MagicAttackCal_Throw     ,//  投擲類( 本身DMG + 彈藥DMG)
    EM_MagicAttackCal_INT       ,
    EM_MagicAttackCal_STR       ,
    EM_MagicAttackCal_AGI       ,
    EM_MagicAttackCal_STA       ,
    EM_MagicAttackCal_MND       ,  
};

//攻擊類型
enum	MagicAttackTypeENUM
{
	EM_MagicAttackType_HP			,	
	EM_MagicAttackType_MP			,
	EM_MagicAttackType_SP_Warrior	,
	EM_MagicAttackType_SP_Ranger	,
	EM_MagicAttackType_SP_Rogue		,
};

struct MagicAttackStruct
{
	MagicAttackTypeENUM	AtkType;

    float               Value[2];
    MagicAttackCalENUM  Type[2];

    float               VampireRate;    //吸收比
    float               Rand;           //傷害 變化範圍
};
//-----------------------------------------------------------------------
//復活術
//-----------------------------------------------------------------------
struct MagicRaise
{
	int		ExpPrecnt;
};
//-----------------------------------------------------------------------
//燒錄型
//-----------------------------------------------------------------------
enum	MagicRecodeTypeENUM
{
	EM_MAGICRECODE_NULL	= 0     ,	//沒資料
	EM_MAGICRECODE_RECIPE		,	//燒錄配方表
//	EM_MAGICRECODE_Magic			//燒錄法術
};

struct MagicRecord
{
	MagicRecodeTypeENUM Class;
	int		ID;						//要開啟哪一個配方旗標
									//( 0 - 1024 )
};

//-----------------------------------------------------------------------
//召喚生物
//-----------------------------------------------------------------------
struct MagicSummonCreature
{
	int		ObjID;
	int		Level;
	int		RangeLevel;
	int		LiveTime;				//生存期(-1)代表不消失
};
//-----------------------------------------------------------------------
//召喚物品
//-----------------------------------------------------------------------
struct MagicSummonItem
{
	int		ObjID;
};
//-----------------------------------------------------------------------
//偷竊
//-----------------------------------------------------------------------
enum	MagicStealClassENUM
{
	EM_MagicSteal_NULL	= 0	,		//此結構資料無效
	EM_MagicSteal_Money		,
	EM_MagicSteal_Item		,
};

struct MagicSteal
{
	MagicStealClassENUM		Class;
};

//-----------------------------------------------------------------------
//產生物品執行劇情
//-----------------------------------------------------------------------
struct MagicItemRunPlot
{
	int		ObjID;
	char	PlotName[32];
	int		LiveTime;				//生存期(-1)代表不消失
};
//-----------------------------------------------------------------------
//執行劇情
//-----------------------------------------------------------------------
struct MagicRunPlot
{
	char	PlotName[32];
};

//----------------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------------
enum    MagicGoodorBadENUM
{
    EM_Magic_Good       ,       //好法術
    EM_Magic_Bad        ,       //壞的法術
};
//----------------------------------------------------------------------------------------
//法術 或 物理
//----------------------------------------------------------------------------------------
enum    MagicorPhyENUM
{
    EM_Magic_Magic      ,       //屬於魔法攻擊
    EM_Magic_Phy        ,       //屬於物理攻擊
    EM_Magic_Eq         ,       //裝備( 自動施展 )
};

//----------------------------------------------------------------------------------------
//Dot法術結構
//----------------------------------------------------------------------------------------
struct DotMagicStruct
{       
    int     Time;        //多久一次
    int     Type;        //類形( 0 HP , 1 MP , 2 SP)
    int     Base;        //每次傷害
	bool IsEmpty()
    {
        return ( Base == 0 );
    }
	void Init()
	{
		memset( this , 0 , sizeof( *this ) );
	}
};
//----------------------------------------------------------------------------------------
// 法力盾設定資料
//----------------------------------------------------------------------------------------
enum	MagicShieldTypeENUM
{
	EM_MagicShieldType_MP		,		//MP抵消HP
	EM_MagicShieldType_Times	,		//抵消次數
	EM_MagicShieldType_Point	,		//抵消法數設定的點數
};

enum	MagicShieldEffecENUM
{
	EM_MagicShieldEffec_All			,	//所有攻擊
	EM_MagicShieldEffec_Phy			,	//物理攻擊
	EM_MagicShieldEffec_Magic		,	//法術攻擊
	EM_MagicShieldEffec_Earth		,	//地系法術攻擊
	EM_MagicShieldEffec_Water    	,	//水系法術攻擊
	EM_MagicShieldEffec_Fire     	,	//火系法術攻擊
	EM_MagicShieldEffec_Wind     	,	//風系法術攻擊
	EM_MagicShieldEffec_Light    	,	//光系法術攻擊
	EM_MagicShieldEffec_Darkness 	,	//暗系法術攻擊
};

struct MagicShieldStruct
{
	MagicShieldTypeENUM		Type;
	MagicShieldEffecENUM	Effect;
	int						Point;		//可始用點數
};

//----------------------------------------------------------------------------------------
// coldown資料設定
//----------------------------------------------------------------------------------------
enum	MagicColdownClassENUM
{
	EM_MagicColdownClass_None	,		//沒有
	EM_MagicColdownClass_Job	,		//職業類型
	EM_MagicColdownClass_EQ		,		//裝備類型
	EM_MagicColdownClass_Item	,		//物品類型

};
struct MagicColdownBaseStruct
{
	//一般的Coldown
	MagicColdownClassENUM		Class;
	int							Type;
	int							Time;	//(秒)
	//下次可失法的時間
	int							TimeAllMagic;		
};
//----------------------------------------------------------------------------------------
//特殊行為
//----------------------------------------------------------------------------------------
struct MagicAttackSpecialAction
{
	union
	{
		int _Type;
		struct
		{
			bool	Dash		: 1;	//衝擊
			bool    StrikeBack	: 1;	//震退
			bool	StrikeAway	: 1;	//震飛
		};
	};
};
//----------------------------------------------------------------------------------------
//屬於法術的基本資料
//----------------------------------------------------------------------------------------
struct GameObjectMagicStruct  
{
	MagicFuncENUM       MagicFunc;					//法術種類(要用那個法術Function去呼叫)
    MagicResistENUM     MagicType;                  //魔法類型
	MagicorPhyENUM		EffectType;


	float	    EffectTime;							//有效時間(0.1 秒為單位)
    float       DLV_EffectTime;					    //等級差影響有效時間(0.1 秒為單位)
	int		    HateCost;							//仇恨值(+ 目標加多少仇恨值)(- 目標的攻擊的目標 減多少仇恨值)
	
    //-----------------------------------------------------------------------
	MagicSpellFlagStruct			Setting;		//法術設定旗標
	MagicAttackSpecialAction		SpecialAction;	//特殊的行為
	//-----------------------------------------------------------------------
	//(持續影響的數值)輔助魔法
	//-----------------------------------------------------------------------
	GameObjectMagicTypeENUM			AssistType;			//法術類型(主要用於輔助法術互斥處理)
    int		                        EffectLV;			//輔助法術威力等級
	int								EffectAddonType;	//同等是否互蓋 0互蓋    1不互蓋
	MagicEffectStruct				Effect;				//影響效果
    MagicClearTimeStruct            ClearTime;			//消除條件
	GameObjectWearEqStruct			Ability;			//影響屬性
    
    int                             OnTimeMagic_Magic;  //定時產生法術效果(法術iD)
    int                             OnTimeMagic_Time;   //定時產生法術效果(多久一次)
    int                             FaceOffID;          //變身ID( 0 代表不改變 )

    float                           ChangeSizeRate;     //物件縮放比例

	int								OnAttackMagicID;		//當被攻擊時產生的法術
	int								OnBuffTimeOutMagicID;	//當此輔助法術結束時產生的法術
	int								OnAttackReboundMagicID;	//被打到反彈出來的法術
	int								TempHateCost;			//暫時增加的仇恨質
    
    DotMagicStruct                  DotMagic;           
	//-----------------------------------------------------------------------
	//攻擊魔法
	//-----------------------------------------------------------------------
	MagicAttackStruct				Attack;		//攻擊魔法資料
	//-----------------------------------------------------------------------
	//傳送魔法
	//-----------------------------------------------------------------------
	MagicTeleport					Teleport;	
	//-----------------------------------------------------------------------
	//復活術
	//-----------------------------------------------------------------------
	MagicRaise						Raise;		
	//-----------------------------------------------------------------------
	//燒錄型
	//-----------------------------------------------------------------------
	MagicRecord						Record;
	//-----------------------------------------------------------------------
	//召喚生物
	//-----------------------------------------------------------------------
	MagicSummonCreature				SummonCreature;
	//-----------------------------------------------------------------------
	//召喚物品
	//-----------------------------------------------------------------------
	MagicSummonItem					SummonItem;
	//-----------------------------------------------------------------------
	//偷竊
	//-----------------------------------------------------------------------
	MagicSteal						Steal;

	//-----------------------------------------------------------------------
	//產生物品執行劇情
	//-----------------------------------------------------------------------
	MagicItemRunPlot				ItemRunPlot;
	//-----------------------------------------------------------------------
	//執行劇情
	//-----------------------------------------------------------------------
	MagicRunPlot					RunPlot;
	//-----------------------------------------------------------------------
	//法力盾
	MagicShieldStruct				MagicShield;


    int NextMagic;
	MagicCostStruct					Cost;			//消耗物品
	MagicNeedStruct					Need;			//需求物品
	int Coldown;

};
//----------------------------------------------------------------------------------------
//職業技能
//----------------------------------------------------------------------------------------
//職業專屬技能設定
struct  JobSkillBaseStruct
{
    int MagicID;        //法術
    int LearnLV;        //自動學會等級
    int KeyItemID;      //必要的重要物品
};

struct GameObjectLearnMagicStruct
{
	int		SPSkillCount;
    JobSkillBaseStruct  SPSkill[_MAX_SPSkill_COUNT_];            //等級到自動學會
	int		NormalSkillCount;
    JobSkillBaseStruct  NormalSkill[_MAX_NormalSkill_COUNT_];        
};

//----------------------------------------------------------------------------------------
//商店結構
//----------------------------------------------------------------------------------------
struct GameObjectShopStruct
{
    int         BuyRate;
    int         SellRate;
    YesNoENUM   WeaponRepair;
    int         SellItemID[ 30 ];
    int         SellItemMax[ 30 ];
    int         SellItemPorduce[ 30 ];
};
//----------------------------------------------------------------------------------------
//套裝
//----------------------------------------------------------------------------------------
struct GameObjectSuitStruct
{
	int TotalCount;		//套裝總數

	struct 
	{
		WearEqTypeENUM  EqType[ 3 ];
		int             EqTypeValue[ 3 ];
	}SuitBase[9];		//每等級套裝額外帶來的能力

	struct 
	{
		WearEqTypeENUM  EqType[ 10 ];
		int             EqTypeValue[ 10 ];
	}SuitValue[9];		//每等級套裝帶來的能力(累計值)

	int	SuitList[ 10 ];	//所有套裝
};
//----------------------------------------------------------------------------------------
//陣營資訊
//----------------------------------------------------------------------------------------
#define _MAX_CAMP_COUNT_ 15
enum GameCampTypeENUM
{
	EM_GameCampType_Alliance	=	0	,	//同盟不可攻擊 ( 會幫忙)
	EM_GameCampType_Friend				,	//友善( 會幫忙 ) ， 可強制攻擊
	EM_GameCampType_Neutrality			,	//中立
	EM_GameCampType_Enemy				,	//敵人
};

struct GameCampStatuteStruct
{
	char	CampName[ _MAX_CAMP_COUNT_ ][ _MAX_OBJ_NAME_STR_SIZE_ ];		//陣營名稱
	char	CampInfo[ _MAX_CAMP_COUNT_ ][ _MAX_CAMP_COUNT_+1 ];		//陣營之間的關係 //GameCampTypeENUM
};
//----------------------------------------------------------------------------------------
//開寶結構
//----------------------------------------------------------------------------------------
#define _MAX_TREASURE_COUNT_	30
struct TreasureBaseInfo
{
	int		OrgID;
	int		Count;		
	int		DropCount;		//每次掉落多少個
};

struct GameTreasureStruct
{
	int		ItemCount;
	TreasureBaseInfo Item[ _MAX_TREASURE_COUNT_ ];		//物品總數量加起來一定為 10 萬個
};
//----------------------------------------------------------------------------------------
//法術集合
//----------------------------------------------------------------------------------------
struct	MagicCollectFlagStruct
{
	union
	{
		int _Type;
		struct
		{
			bool    Interrupt_OnMove	: 1;	//施法中斷 移動
			bool    Interrupt_OnAttack	: 1;	//施法中斷 被攻擊
			bool    Spell_Back		    : 1;	//敵人背後才可施展
			bool    Spell_Front		    : 1;	//敵人正面才可施展
			bool    Spell_LookAtTarget	: 1;	//面向敵人才可施展
		};
	};
};

enum MagicCheckFunctionENUM
{
	EM_MagicCheck_None		,	//無
	EM_MagicCheck_Eq		,	//CheckEQ( ItemID )
	EM_MagicCheck_Item		,	//CheckItem( ItemID )
	EM_MagicCheck_Time		,	//CheckTime( Begin , End )
	EM_MagicCheck_Position	,	//CheckPosType( PosType )
	EM_MagicCheck_Weather	,	//CheckWeather( WeatherType )
};

//施法條件
struct MagicCollectCondition
{
	bool	CheckFlag;
	MagicCheckFunctionENUM	FuncType;
	int		MagicBaseID;
	int		Arg[2];

	GameObjDbStruct* MagicBaseDB;
};


enum HitRateFuncENUM
{
	EM_HitRateFunc_Base ,				//定值
	EM_HitRateFunc_DLV	,				//等級差
	EM_HitRateFunc_DLVxDLV	,			//等級差平方
	EM_HitRateFunc_DecPerPersion	,	//依人次降低
};

#define _MAX_MAGICCOLLECT_COUNT_		8
struct GameObjectMagicCollectStruct
{
	int								MagicBase;      //第一級法術
	int								MagicLV;        //法術等級
	MagicorPhyENUM					EffectType;		//物理寄能 or 法術技能 or 被動技能

	//-------------------------------------------------------------------------------------
	//範圍選取
	//-------------------------------------------------------------------------------------
	GameObjectRelationENUM			TargetType;	    //有效目標
	int								AttackDistance;	//有效距離
	int								EffectRange;    //有效範圍
	GameObjectMagicEffectRangeENUM	RangeType;	    //有效類型
	int                             RangeSelectType;//範圍選取方式( 0 圓形 1 直線 2 扇形 3 連鎖電 )
	int                             EffectCount;    //有效人數
	//-------------------------------------------------------------------------------------
	HitRateFuncENUM					HitRateFunc;	//命中率
	float							HitRateArg[2];	//命中率計算參數
	//-------------------------------------------------------------------------------------
	MagicCostStruct					Cost;		    //消耗物品
	MagicNeedStruct					Need;			//需求物品
	MagicColdownBaseStruct			Coldown;		//法術冷卻
	MagicCollectFlagStruct			Flag;			//
	int								SpellTime;		//施法時間
	int								MagicAttackDelay;//施法攻擊延遲(秒)
	int								SpellCount;		//施法次數
	int								NextSpellTime;	//下次重施法的間隔

	char							LUAScript[128];	//環境設定的Script 設定 冷確時間 消耗 法術致能
	MagicCollectCondition			Magic[ _MAX_MAGICCOLLECT_COUNT_ ];		//此法術內含有的所有元件法術
};


//----------------------------------------------------------------------------------------
//遊戲基本物件資料
//----------------------------------------------------------------------------------------
struct	GameObjDbStruct
{
	int								GUID;
	GameObjectClassificationENUM	Classification;

	char*							Name;							//物件名稱

    int                             ImageID;                        //影像資料
    GameObjectImageStruct*          ImageObj;                    
    
	//顯像資料
	int								MaxHeap;			            //最大堆疊上限
	char*							Note;							//物件註解資料
	char*							ShortNote;						//物件註解資料
	ObjectModeStruct				Mode;				            //物件的基本屬性
	int								Cost;				            //物件的價值
	int								ReviveTime;			            //物件的重生時間
    int                             Rare;                           //稀有度
    float					        GenerateRate;		            //產生速度(
    float					        MaxWorldCount;		            //最大的區域總量	

    LimitStruct                     Limit;
            
	union
	{
		GameObjectNpcStruct			NPC;
		GameObjectItemStruct		Item;

        GameObjectMagicStruct		MagicBase;


		struct  
		{
			GameObjectMagicCollectStruct	MagicCol;
			GameObjDbStruct*				AllMagicCol[10];               //所有同系列的法術
			int								MaxMagicColCount;              //最高等級

		};
		
		GameObjectAttributeStruct	Attirbute;
        GameObjectPlayerStruct	    Player;
        GameObjectBodyObjStruct	    BodyObj;
		GameObjectQuestDetail		QuestDetail;
        GameObjectMineStruct        Mine;
        GameObjectKeyItemStruct     KeyItem;
        GameObjectRecipeStruct      Recipe;
        GameObjectTitleStruct       Title;
        GameObjectLearnMagicStruct  LearnMagic;
        GameObjectShopStruct        Shop;
        GameObjectImageStruct       Image;
		GameObjectSuitStruct        Suit;
		GameCampStatuteStruct		Camp;		//陣營資訊
		GameTreasureStruct			Treasure;

		char	Temp[3000];
	};
	
};


//----------------------------------------------------------------------------------------
//載Table 用
//----------------------------------------------------------------------------------------
#define _MAX_SKILL_LEVE_	100		//技能上限等級
struct LoadTableStruct
{
	int GUID;
	union
	{
		FixFightArgumentStruct  FixTB;								//固定參術
		FightArgumentStruct     ArgTB;								//種族 職業參數表

		int     ExpTB[_MAX_VOCATION_COUNT_];						//職頁經驗值表
		int     SkillValueBase[ _MAX_SKILLVALUE_BASETYPE ];			//技能值表

		struct
		{
			int     JobSkillValue[ _MAX_VOCATION_COUNT_ ];			//各職業技能的熟練 ( 記錄類似 S+ S S- A+ A A- ...)
		};

		EqWearSkillStruct JobWearSkill[ _MAX_VOCATION_COUNT_ ];		//各職業可穿的累型

		struct
		{
			int		WeaponBaseDelayTime[ _MAX_SKILLVALUE_TYPE ];	//各種武器的基本延遲時間
			float	WeaponBaseDmg[ _MAX_SKILLVALUE_TYPE ];			//各種武器的基本傷害比( 要乘上該等極GM的傷害 )
		};

		int		BaseMagicList[ EM_BaseMagic_MaxCount ];				//基本的效能法術  比方震暈 無敵

		ResistArgumentStruct	ResistArg;							//抗性參數

		int		RefineExp[ _MAX_SKILL_LEVE_];						//煉製經驗值表(要升下一級的經驗值)
	};

};
//----------------------------------------------------------------------------------------
#endif
