#include "ObjectStructEx.h"
#include "ReaderClass/CreateDBCmdClass.h"

char* WearEqTypeENUMString[]={
	"無效果							",
	"耐久度							",
	"屬性 STR 力量					",
	"屬性 STA 耐力					",
	"屬性 INT 智力					",
	"屬性 MND 靈力					",
	"屬性 AGI 敏捷					",
	"屬性 所有(基本五個屬性)		",
	"上限 HP						",
	"上限 MP						",
	"回復率 HP						",
	"回復率 MP						",
	"ATK 攻擊力						",
	"DEF 防禦力						",
	"MDEF 魔法防禦					",
	"MATK 魔法攻擊					",
	"命中率							",
	"迴避率							",
	"致命一擊率						",
	"致命一擊率威力加強(%)			",
	"魔法致命一擊率					",
	"魔法致命一擊率威力加強(%)		",
	"格擋率							",
	"攻擊速度						",
	"移動速度						",
	"武器威力 所有近戰或遠程 ( DMG )",
	"魔法威力( MPow )				",
	"抗性 所有						",
	"抗性 地						",
	"抗性 水						",
	"抗性 火						",
	"抗性 風						",
	"抗性 光						",
	"抗性 闇						",
	"MP消耗減少(%)					",
	"經驗值							",
	"掉寶率							",
	"物品等級微調					",
	"副手 命中率					",
	"副手 傷害力(DMG%)				",
	"防禦加強 鎧甲(%)				",
	"防禦加強 鎖甲(%)				",
	"防禦加強 皮甲(%)				",
	"防禦加強 衣服(%)				",
	"防禦加強 長袍(%)				",
	"防禦加強 盾(%)					",
	"魔法威力 所有(%)				",
	"魔法威力 地(%)					",
	"魔法威力 水(%) 				",
	"魔法威力 火(%) 				",
	"魔法威力 風(%) 				",
	"魔法威力 光(%) 				",
	"魔法威力 闇(%) 				",
	"施法速度 所有(%)				",
	"施法速度 地(%) 				",
	"施法速度 水(%) 				",
	"施法速度 火(%) 				",
	"施法速度 風(%) 				",
	"施法速度 光(%) 				",
	"施法速度 闇(%) 				",
	"遠程武器威力(%) 所有			",
	"遠程武器威力(%) 弓				",
	"遠程武器威力(%) 十字弓			",
	"遠程武器威力(%) 槍				",
	"近戰武器威力(%) 所有			",
	"近戰武器威力(%) 空手			",
	"近戰武器威力(%) 劍				",
	"近戰武器威力(%) 匕首			",
	"近戰武器威力(%) 權杖			",
	"近戰武器威力(%) 斧				",
	"近戰武器威力(%) 鎚棍棒			",
	"近戰武器威力(%) 雙手劍			",
	"近戰武器威力(%) 杖				",
	"近戰武器威力(%) 雙手斧			",
	"近戰武器威力(%) 雙手鎚			",
	"近戰武器威力(%) 槍(長矛)		",
	"近戰武器速度 所有				",
	"近戰武器速度 空手				",
	"近戰武器速度 劍				",
	"近戰武器速度 匕首				",
	"近戰武器速度 權杖				",
	"近戰武器速度 斧				",
	"近戰武器速度 鎚棍棒			",
	"近戰武器速度 雙手劍			",
	"近戰武器速度 杖				",
	"近戰武器速度 雙手斧			",
	"近戰武器速度 雙手鎚			",
	"近戰武器速度 槍(長矛)			",
	"武器附加屬性攻擊 地			",
	"武器附加屬性攻擊 水			",
	"武器附加屬性攻擊 火			",
	"武器附加屬性攻擊 風			",
	"武器附加屬性攻擊 光			",
	"武器附加屬性攻擊 闇			",
	"裝備能力 空手 	  				",
	"裝備能力 劍	  	  			",
	"裝備能力 匕首	  				",
	"裝備能力 權杖	  				",
	"裝備能力 斧	  				",
	"裝備能力 鎚棍棒				",
	"裝備能力 雙手劍				",
	"裝備能力 杖					",
	"裝備能力 雙手斧				",
	"裝備能力 雙手鎚				",
	"裝備能力 槍(長矛)				",
	"裝備能力 弓					",
	"裝備能力 十字弓				",
	"裝備能力 槍					",
	"裝備能力 投擲					",
	"裝備能力 鎧甲					",
	"裝備能力 鎖甲					",
	"裝備能力 皮甲					",
	"裝備能力 衣服					",
	"裝備能力 長袍					",
	"裝備能力 盾					",
	"裝備能力 手持法器				",
	"裝備能力 雙手持				",
	"技能上升 Unarmed空手			",
	"技能上升 劍					",
	"技能上升 匕首					",
	"技能上升 權杖					",
	"技能上升 斧					",
	"技能上升 鎚棍棒				",
	"技能上升 雙手劍				",
	"技能上升 杖					",
	"技能上升 雙手斧				",
	"技能上升 雙手鎚				",
	"技能上升 槍(長矛)				",
	"技能上升 遠程武器 弓			",
	"技能上升 遠程武器 十字弓		",
	"技能上升 遠程武器 槍			",
	"技能上升 防禦					",
	"技能上升 打鐵					",
	"技能上升 木工					",
	"技能上升 製甲					",
	"技能上升 裁縫					",
	"技能上升 烹飪					",
	"技能上升 煉金					",
	"HQ品機率上升 打鐵%				",
	"HQ品機率上升 木工%				",
	"HQ品機率上升 製甲%				",
	"HQ品機率上升 裁縫%				",
	"HQ品機率上升 烹飪%				",
	"HQ品機率上升 煉金%				",


};

char* WearEqTypeENUMPositiveString[] = {
	"無效果"				,
	"耐久度提高"			,
	"力量 +"				,
	"耐力 +"				,
	"智慧 +"				,
	"精神 +"				,
	"敏捷 +"				,
	"所有能力提高"			,
	"生命力提高"			,
	"法力提高"				,
	"特技力提高"			,
	"生命力回復率增加"		,
	"法力回復率增加"		,
	"特技力回復率增加"		,
	"物理攻擊 +"			,
	"物理防禦 +"			,
	"魔法攻擊 +"			,
	"魔法防禦 +"			,
	"命中率提高"			,
	"迴避率提高"			,
	"重擊率提高"			,
	"格檔率提高"			,
	"攻速增加"				,
	"移動速度增加"			,
	"傷害 +"				,
	"魔法威力 +"			,
	"所有抗性 +"			,
	"地抗性 +"				,
	"水抗性 +"				,
	"火炕性 +"				,
	"風抗性 +"				,
	"光抗性 +"				,
	"暗抗性 +"				,
	"所得經驗值提高"		,
	"掉寶機率提高"			,
	"使用等級下降"			,
	"全屬性魔法威力 +"		,
	"地屬性魔法威力 +"		,
	"水屬性魔法威力 +"		,
	"火屬性魔法威力 +"		,
	"風屬性魔法威力 +"		,
	"光屬性魔法威力 +"		,
	"暗屬性魔法威力 +"		,
	"全屬性施法速度 +"		,
	"地屬性施法速度 +"		,
	"水屬性施法速度 +"		,
	"火屬性施法速度 +"		,
	"風屬性施法速度 +"		,
	"光屬性施法速度 +"		,
	"暗屬性施法速度 +"		,
	"遠程武器傷害 +"		,
	"弓傷害 +"				,
	"弩傷害 +"				,
	"火銃傷害 +"			,
	"近戰武器傷害 +"		,
	"空手傷害 +"			,
	"單手劍傷害 +"			,
	"匕首傷害 +"			,
	"權杖傷害 +"			,
	"單手斧傷害 +"			,
	"單手槌傷害 +"			,
	"雙手劍傷害 +"			,
	"雙手杖傷害 +"			,
	"雙手斧傷害 +"			,
	"雙手鎚傷害 +"			,
	"長槍傷害 +" 			,
	"近戰武器攻速 +"		,
	"空手攻速 +"			,
	"單手劍攻速 +"			,
	"匕首攻速 +"			,
	"權杖攻速 +"			,
	"單手斧攻速 +"			,
	"單手槌攻速 +"			,
	"雙手劍攻速 +"			,
	"雙手杖攻速 +"			,
	"雙手斧攻速 +"			,
	"雙手鎚攻速 +"			,
	"長槍攻速 +"			,
	"攻擊附加地屬性"		,
	"攻擊附加水屬性"		,
	"攻擊附加火屬性"		,
	"攻擊附加風屬性"		,
	"攻擊附加光屬性"		,
	"攻擊附加暗屬性"		,
};

char* WearEqTypeENUMNegativeString[] = {
	"無效果"				,
	"耐久度下降"			,
	"力量 -"				,
	"耐力 -"				,
	"智慧 -"				,
	"精神 -"				,
	"敏捷 -"				,
	"所有能力下降"			,
	"生命力下降"			,
	"法力下降"				,
	"特技力下降"			,
	"生命力回復率減少"		,
	"法力回復率減少"		,
	"特技力回復率減少"		,
	"物理攻擊 -"			,
	"物理防禦 -"			,
	"魔法攻擊 -"			,
	"魔法防禦 -"			,
	"命中率下降"			,
	"迴避率下降"			,
	"重擊率下降"			,
	"格檔率下降"			,
	"攻速減少"				,
	"移動速度減少"			,
	"傷害 -"				,
	"魔法威力 -"			,
	"所有抗性 -"			,
	"地抗性 -"				,
	"水抗性 -"				,
	"火炕性 -"				,
	"風抗性 -"				,
	"光抗性 -"				,
	"暗抗性 -"				,
	"所得經驗值下降"		,
	"掉寶機率下降"			,
	"使用等級下降"			,
	"全屬性魔法威力 -"		,
	"地屬性魔法威力 -"		,
	"水屬性魔法威力 -"		,
	"火屬性魔法威力 -"		,
	"風屬性魔法威力 -"		,
	"光屬性魔法威力 -"		,
	"暗屬性魔法威力 -"		,
	"全屬性施法速度 -"		,
	"地屬性施法速度 -"		,
	"水屬性施法速度 -"		,
	"火屬性施法速度 -"		,
	"風屬性施法速度 -"		,
	"光屬性施法速度 -"		,
	"暗屬性施法速度 -"		,
	"遠程武器傷害 -"		,
	"弓傷害 -"				,
	"弩傷害 -"				,
	"火銃傷害 -"			,
	"近戰武器傷害 -"		,
	"空手傷害 -"			,
	"單手劍傷害 -"			,
	"匕首傷害 -"			,
	"權杖傷害 -"			,
	"單手斧傷害 -"			,
	"單手槌傷害 -"			,
	"雙手劍傷害 -"			,
	"雙手杖傷害 -"			,
	"雙手斧傷害 -"			,
	"雙手鎚傷害 -"			,
	"長槍傷害 -"			,
	"近戰武器攻速 -"		,
	"空手攻速 -"			,
	"單手劍攻速 -"			,
	"匕首攻速 -"			,
	"權杖攻速 -"			,
	"單手斧攻速 -"			,
	"單手槌攻速 -"			,
	"雙手劍攻速 -"			,
	"雙手杖攻速 -"			,
	"雙手斧攻速 -"			,
	"雙手鎚攻速 -"			,
	"長槍攻速 -"			,
	"攻擊附加地屬性"		,
	"攻擊附加水屬性"		,
	"攻擊附加火屬性"		,
	"攻擊附加風屬性"		,
	"攻擊附加光屬性"		,
	"攻擊附加暗屬性"		,
};

char* WeaponTypeENUMString[] = {
	"爪"					,
	"單手劍"				,
	"匕首"					,
	"權杖"					,
	"單手斧"				,
	"單手鎚"				,
	"雙手劍"				,
	"杖"					,
	"雙手斧"				,
	"雙手鎚"				,
	"長槍"					,	
	"弓"					,
	"十字弓"				,
	"槍"					,
};

char* WeaponPosENUMString[] = {
	"主手"					,
	"副手"					,
	"單手"					,
	"雙手"					,
	"子彈"					,
	"採集"					,
};

char* ArmorTypeENUMString[] = {
	"鎧甲"					,
	"鎖甲"					,
	"皮甲"					,
	"布衣"					,
	"法袍"					,
	"盾"					,
	"法器"					,
};

char* ArmorPosENUMString[] = {
	"頭載"					,
	"手套"					,
	"足部"					,
	"上身"					,
	"下身"					,
	"背部"					,
	"腰帶"					,
	"肩甲"					,
	"項鍊"					,
	"戒指"					,
	"耳環"					,
	"副手"					,
};

char* ItemTypeENUMString[] = {
	"一般"					,
	"任務"					,
	"食物"					,
	"甜點"					,
	"藥水"					,
	"礦石"					,
	"木材"					,
	"藥草"					,
	"獵物"					,
	"種子"					,
	"花盆"					,
	"作物"					,
	"魚"					,	
	"採集工具"				,
	"製造材料"				,
	"配方"					,
	"寶石"					,
	"光球"					,
	"金錢"					,
};

char* AddOnPosENUMString[] = {
	"頭載"					,
	"手套"					,
	"足部"					,
	"上身"					,
	"下身"					,
	"背部"					,
	"腰帶"					,
	"肩甲"					,
	"項鍊"					,
	"戒指"					,
	"耳環"					,
	"盾"					,
	"武器"					,
};

bool GameObjDbStructEx::IsEmpty( )
{
    return ( this == NULL );
}
bool GameObjDbStructEx::IsShop()
{
    if( IsEmpty() )
        return false;

    return ( this->Classification == EM_ObjectClass_Shop );
}
bool GameObjDbStructEx::IsQuestNPC( )
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_QuestNPC );
}

bool GameObjDbStructEx::IsNPC( )
{
    if( IsEmpty() )
        return false;

    return ( this->Classification == EM_ObjectClass_NPC || this->Classification == EM_ObjectClass_QuestNPC );
}
bool GameObjDbStructEx::IsItem( )
{
    if( IsEmpty() )
        return false;

    return ( this->Classification == EM_ObjectClass_Item );
}
bool GameObjDbStructEx::IsItem_Pure( )
{
	if( IsEmpty() )
		return false;

	if( IsItem() && this->Item.Class == EM_Item_Normal )
		return true;

	return false;
}

bool GameObjDbStructEx::IsWeapon( )
{
    if( IsEmpty() )
        return false;

    if( IsItem() && this->Item.Class == EM_Item_Weapon )
        return true;

    return false;
}
bool GameObjDbStructEx::IsArmor( )
{
    if( IsEmpty() )
        return false;

    if( IsItem() && this->Item.Class == EM_Item_Armor )
        return true;

    return false;
}
bool GameObjDbStructEx::IsMagicBase( )
{
    if( IsEmpty() )
        return false;

    return ( this->Classification == EM_ObjectClass_MagicBase );
}
bool GameObjDbStructEx::IsMagicCollect( )
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_MagicCollect );
}
bool GameObjDbStructEx::IsSuit( )
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_Suit );
}


bool GameObjDbStructEx::IsKeyItem( )
{
    if( IsEmpty() )
        return false;

    return ( this->Classification == EM_ObjectClass_KeyItem );
}
bool GameObjDbStructEx::IsMine( )
{
    if( IsEmpty() )
		return false;

    return ( this->Classification == EM_ObjectClass_Mine );
}
bool GameObjDbStructEx::IsAttribute()
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_Attribute );
}

bool GameObjDbStructEx::IsRune()
{
	if( IsEmpty() )
		return false;

	return ( IsItem() && this->Item.Class == EM_Item_Rune );
}

bool GameObjDbStructEx::IsQuest()
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_QuestDetail );
}

bool GameObjDbStructEx::IsFlagObj()
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_Flag );
}
bool GameObjDbStructEx::IsEquip()
{
	if ( IsArmor() || IsWeapon() )
		return true;
	return false;
}

bool GameObjDbStructEx::IsBody()
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_BodyObj );

}
bool GameObjDbStructEx::IsImage()
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_Image );
}
bool GameObjDbStructEx::IsLearnMagic()
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_LearnMagic);
}
bool GameObjDbStructEx::IsPlayer()
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_Player );
}

bool GameObjDbStructEx::IsTitle()
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_Title );
}

bool GameObjDbStructEx::IsRecipe()
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_Recipe );
}

bool GameObjDbStructEx::IsTreasure()
{
	if( IsEmpty() )
		return false;

	return ( this->Classification == EM_ObjectClass_Treasure );
}

bool GameObjDbStructEx::IsRestore()
{
	return false;
}
bool GameObjDbStructEx::IsSpecial()
{
	return false;
}

//是輔助法術
bool GameObjDbStructEx::IsAssistMagic( )
{
	if( IsMagicBase() == false )
		return false;

	if( MagicBase.MagicFunc != EM_MAGICFUN_Assist )
		return false;

	return true;
}

ObjectModeStruct  GameObjDbStructEx::GetModeFlag( )
{
	if( IsEmpty() )
		return Mode;

	switch( Classification )
	{
	case EM_ObjectClass_QuestNPC:
		{
			Mode.Show			= true; 	
			Mode.Mark			= true; 	
			Mode.Obstruct		= false;
			Mode.Gravity		= true; 	
			Mode.Save			= false; 	
			Mode.Drag			= true;     

			Mode.Trade			= false;
			Mode.Sell			= false;	
			Mode.Logoutdel		= false;	
			Mode.Expense		= false;	
			Mode.Coloring		= false;	
			Mode.GuildMark		= false;

			Mode.Strikback		= false;
			Mode.Move			= true;	
			Mode.Searchenemy	= false;
			Mode.Revive			= true;
			Mode.Fight			= false;			

		} break;
    case EM_ObjectClass_NPC:
        {
            Mode.Show			= true; 	
            Mode.Mark			= true; 	
            Mode.Obstruct		= false;
            Mode.Gravity		= true; 	
            Mode.Save			= false; 	
            Mode.Drag			= true;     

            Mode.Trade			= false;
            Mode.Sell			= false;	
            Mode.Logoutdel		= false;	
            Mode.Expense		= false;	
            Mode.Coloring		= false;	
            Mode.GuildMark		= false;

            Mode.Strikback		= true;
            Mode.Move			= true;	
            Mode.Searchenemy	= true;
            Mode.Revive			= true;
            Mode.Fight			= true;			

        } break;
    case EM_ObjectClass_Item:
        {
            Mode.Show	        = true; 	
            Mode.Mark	        = true; 	
            Mode.Obstruct       = false;
            Mode.Gravity	    = true; 	
            Mode.Save	        = false; 	
            Mode.Drag           = true;     
            
            Mode.Trade	        = false;
            Mode.Sell		    = false;	
            Mode.Logoutdel	    = false;	
            Mode.Expense		= false;	
            Mode.Coloring	    = false;	
            Mode.GuildMark	    = false;	
            
            Mode.Strikback	    = false;	
            Mode.Move		    = false;	
            Mode.Searchenemy	= false;	
            Mode.Revive		    = false;	
            Mode.Fight		    = false;	
        } break;
	default:
        {
            Mode.Show	        = true; 	
            Mode.Mark	        = true; 	
            Mode.Obstruct       = false;
            Mode.Gravity	    = true; 	
            Mode.Save	        = false; 	
            Mode.Drag           = true;     
            
            Mode.Trade	        = false;
            Mode.Sell		    = false;	
            Mode.Logoutdel	    = false;	
            Mode.Expense		= false;	
            Mode.Coloring	    = false;	
            Mode.GuildMark	    = false;	
            
            Mode.Strikback	    = false;	
            Mode.Move		    = false;	
            Mode.Searchenemy	= false;	
            Mode.Revive		    = false;	
            Mode.Fight		    = false;	
        } break;
	};

	return Mode;
}

char* GameObjDbStructEx::GetWearEqTypeENUMString( WearEqTypeENUM ID )
{
	if( ID >= EM_WearEqType_MaxCount || ID < 0 )
		return "";

	return WearEqTypeENUMString[ ID  ];	
}


char* GameObjDbStructEx::GetWearEqTypeENUMNegativeString( WearEqTypeENUM ID )
{
	if( ID >= EM_WearEqType_MaxCount || ID < 0 )
		return "";
	return WearEqTypeENUMNegativeString[ID];
}

char* GameObjDbStructEx::GetWearEqTypeENUMPositiveString( WearEqTypeENUM ID )
{
	if( ID >= EM_WearEqType_MaxCount || ID < 0 )
		return "";
	return WearEqTypeENUMPositiveString[ID];
}

char* GameObjDbStructEx::GetWeaponTypeENUMString( GameObjectWeaponENUM Type )
{
	if ( Type >= EM_Weapon_Unarmed && Type <= EM_Weapon_Gun )
		return WeaponTypeENUMString[Type];
	return "";
}

char* GameObjDbStructEx::GetWeaponPosENUMString( GameObjectWeaponPosENUM Pos )
{
	if ( Pos >= EM_WeaponPos_MainHand && Pos <= EM_WeaponPos_Manufacture )
		return WeaponPosENUMString[Pos];
	return "";
}

char* GameObjDbStructEx::GetArmorTypeENUMString( GameObjectArmorENUM Type )
{
	if ( Type >= EM_Armor_HeavyArmed && Type <= EM_Armor_Implement )
		return ArmorTypeENUMString[Type];
	return "";
}

char* GameObjDbStructEx::GetArmorPosENUMString( GameObjectArmorPosENUM Pos )
{
	if ( Pos >= EM_ArmorPos_Head && Pos <= EM_ArmorPos_SecondHand )
		return ArmorPosENUMString[Pos];
	return "";
}

char* GameObjDbStructEx::GetItemTypeENUMString( ItemType_ENUM Type )
{	
	if ( Type >= EM_ItemType_Normal && Type <= EM_ItemType_Money )
		return ItemTypeENUMString[Type];
	return "";
}

int GameObjDbStructEx::GetWearEqValue( GameObjectWearEqStruct& Ability, WearEqTypeENUM Type, int begin )
{
	int value = 0;
	for ( int i = begin; i < Max_WearEqType_Count; i++ )
	{
		if ( Ability.EqType[i] == Type )
			value += Ability.EqTypeValue[i];
	}
	return value;
}

int GameObjDbStructEx::GetWeaponDMG( GameObjectWearEqStruct& Ability )
{
	return GetWearEqValue(Ability, EM_WearEqType_DMG);
}

int GameObjDbStructEx::GetArmorDEF( GameObjectWearEqStruct& Ability )
{
	return GetWearEqValue(Ability, EM_WearEqType_DEF);
}

int GameObjDbStructEx::GetWeaponAtkSpeed( GameObjectWearEqStruct& Ability )
{
	return GetWearEqValue(Ability, EM_WearEqType_AtkSpeed);	
}

int GameObjDbStructEx::GetWearEqDurable( GameObjectWearEqStruct& Ability )
{
	return GetWearEqValue(Ability, EM_WearEqType_Durable);
}

char* GameObjDbStructEx::GetAddOnPosENUMString( AddonPosENUM& AddOnPos )
{
	if ( AddOnPos >= EM_AddonPos_Head && AddOnPos <= EM_AddonPos_Weapon )
		return AddOnPosENUMString[AddOnPos];
	return "";
}

//檢查裝置能力與技能是否相符
bool	GameObjDbStructEx::CheckItemAndEqSkill( EqWearSkillStruct EqSkill )
{
	
	if( IsWeapon() )
	{
		switch( Item.WeaponType )
		{
		case EM_Weapon_None:                  
			break;
		case EM_Weapon_Unarmed:			// Unarmed空手
			if( EqSkill.Unarmed == false  )
				return false;
			break;
		case EM_Weapon_Blade:           // 劍
			if( EqSkill.Blade == false  )
				return false;
			break;
		case EM_Weapon_Dagger:          // 匕首
			if( EqSkill.Dagger == false  )
				return false;
			break;
		case EM_Weapon_Wand:            // 權杖
			if( EqSkill.Wand == false  )
				return false;
			break;
		case EM_Weapon_Axe:             // 斧
			if( EqSkill.Axe == false  )
				return false;
			break;
		case EM_Weapon_Bludgeon:        // 鎚棍棒
			if( EqSkill.Bludgeon == false  )
				return false;
			break;
		case EM_Weapon_Claymore:        // 雙手劍
			if( EqSkill.Claymore == false  )
				return false;
			break;
		case EM_Weapon_Staff:           // 杖
			if( EqSkill.Staff == false  )
				return false;
			break;
		case EM_Weapon_2H_Axe:          // 雙手斧
			if( EqSkill.Axe_2H == false  )
				return false;
			break;
		case EM_Weapon_2H_Hammer:       // 雙手鎚
			if( EqSkill.Hammer_2H == false  )
				return false;
			break;
		case EM_Weapon_Polearm:			// 槍(長矛)
			if( EqSkill.Polearm == false  )
				return false;
			break;
		case EM_Weapon_Bow:				// 遠程武器 弓
		case EM_Weapon_Ammo_Bow:		// 子彈 弓
			if( EqSkill.Bow == false  )
				return false;
			break;
		case EM_Weapon_CossBow:			// 遠程武器 十字弓
		case EM_Weapon_Ammo_CossBow:	// 子彈 十字弓
			if( EqSkill.CossBow == false  )
				return false;
			break;
		case EM_Weapon_Gun:				// 遠程武器 槍
		case EM_Weapon_Ammo_Gun:		// 子彈 槍
			if( EqSkill.Gun == false  )
				return false;
			break;
		
		case EM_Weapon_Throw:			// 投擲類武器
			if( EqSkill.Throw == false  )
				return false;
			break;
		default:
			return false;
		}
		return true;
	}
	else if( IsArmor() )
	{

		switch( Item.ArmorType )
		{
		case EM_Armor_HeavyArmed:
			if( EqSkill.HeavyArmed == false )
				return false;
			break;
		case EM_Armor_LightArmed:
			if( EqSkill.LightArmed == false )
				return false;
			break;
		case EM_Armor_Leather:
			if( EqSkill.Leather == false )
				return false;
			break;
		case EM_Armor_Clothes:
			if( EqSkill.Clothes == false )
				return false;
			break;
		case EM_Armor_Robe:		
			if( EqSkill.Robe == false )
				return false;
			break;
		case EM_Armor_Shield:	
			if( EqSkill.Shield == false )
				return false;
			break;
		case EM_Armor_Implement:
			if( EqSkill.Implement == false )
				return false;
			break;
		default:
			return false;
		}
		return true;
	}

	return false;

}
//-------------------------------------------------------------------------------------------------------------
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_AddPower( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;  

	if( IsInit == false )
	{
		char    Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------

		//------------------------------------------------------------------------------------
		Reader.SetData( "InheritRate"       , &Pt->GameData.Attirbute.InheritRate       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "InheritLV"         , &Pt->GameData.Attirbute.InheritLV         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "InheritLV_Range"   , &Pt->GameData.Attirbute.InheritLV_Range   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "Inc_Magic"             , &Pt->GameData.Attirbute.Inc_Magic             , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Inc_Magic_ActionRate"  , &Pt->GameData.Attirbute.Inc_Magic_ActionRate  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Inc_MagicType"         , &Pt->GameData.Attirbute.Inc_MagicType         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "AddPos"            , &Pt->GameData.Attirbute.AddPos._Type              , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Type"              , &Pt->GameData.Attirbute.Type                      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		for( int i = 0 ; i < 5 ; i++ )
		{
			sprintf( Buf , "EqType%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Attirbute.Ability.EqType[i]      , ENUM_Type_IntPoint         , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "EqTypeValue%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Attirbute.Ability.EqTypeValue[i]  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		}
		//------------------------------------------------------------------------------------
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Armor( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		char    Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "LimitVoc"          , &Pt->GameData.Limit.Voc._Voc   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitRace"         , &Pt->GameData.Limit.Race._Race , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitSex"          , &Pt->GameData.Limit.Sex._Sex   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitLv"           , &Pt->GameData.Limit.Level      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitStr"          , &Pt->GameData.Limit.STR        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitSta"          , &Pt->GameData.Limit.STA        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitInt"          , &Pt->GameData.Limit.INT        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitMnd"          , &Pt->GameData.Limit.MND        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitAgi"          , &Pt->GameData.Limit.AGI        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "Mode"              , &Pt->GameData.Mode._Mode      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ItemType"          , &Pt->GameData.Item.ItemType   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//        Reader.SetData( "MaxHeap"           , &Pt->GameData.MaxHeap         , ENUM_Type_IntPoint        , ENUM_Indirect_Address );
		Reader.SetData( "GenerateRate"      , &Pt->GameData.GenerateRate    , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MaxWorldCount"     , &Pt->GameData.MaxWorldCount   , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Rare"              , &Pt->GameData.Rare            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Cost"              , &Pt->GameData.Cost            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "IncMagic_Onuse"    , &Pt->GameData.Item.IncMagic_Onuse, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DisappearRate"     , &Pt->GameData.Item.DisappearRate , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SrcRecipe"         , &Pt->GameData.Item.SrcRecipe , ENUM_Type_IntPoint         , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Durable"           , &Pt->GameData.Item.Durable    , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SuitID"            , &Pt->GameData.Item.SuitID     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		for( int i = 0 ; i < 5 ; i++ )
		{
			sprintf( Buf , "EqType%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Item.Ability.EqType[i]			, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "EqTypeValue%d" , i + 1 ); 
			Reader.SetData( Buf     , &Pt->GameData.Item.Ability.EqTypeValue[i]		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		}

		//------------------------------------------------------------------------------------
		Reader.SetData( "ArmorType"         , &Pt->GameData.Item.ArmorType          , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ArmorPos"          , &Pt->GameData.Item.ArmorPos           , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "HoleBase"          , &Pt->GameData.Item.HoleBase          	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "HoleRange"         , &Pt->GameData.Item.HoleRange         	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "AddPowerOn"        , &Pt->GameData.Item.AddPowerOn        	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "StandardType"      , &Pt->GameData.Item.StandardType       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Body( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );        
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Flag( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;
		//------------------------------------------------------------------------------------------------------------------------
		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint	, 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------------------------------------------
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Image( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;
		//------------------------------------------------------------------------------------------------------------------------
		IsInit = true;
		Reader.SetData( "IsLock"            	, &Pt->IsLock                   					, ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    	, &Pt->LastModifyDate           					, ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" 	, &Pt->LastModifyAccount        					, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"				, &Pt->DataGroup									, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       	, &Pt->LockAccount              					, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          	, &Pt->ProcRate.Rate            					, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              	, &Pt->GameData.GUID            					, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              	, &Pt->GameData.Name            					, ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           	, &Pt->GameData.ImageID         					, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              	, &Pt->GameData.Note            					, ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         	, &Pt->GameData.ShortNote       					, ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		//----------------------------------	--------------------------------					------------------------------------------------------
		Reader.SetData( "MagicType"         	, &Pt->GameData.Image.MagicType 					, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "ActField"          	, &Pt->GameData.Image.ACTField  					, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ActWorld"          	, &Pt->GameData.Image.ACTWorld  					, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ModelSize"         	, &Pt->GameData.Image.ModelSize 					, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageType"         	, &Pt->GameData.Image.ImageType 					, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "BoundRadius"           , &Pt->GameData.Image.BoundRadius                  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GatherMotion"          , &Pt->GameData.Image.GatherMotion                 	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GatherParticalPoint1"  , &Pt->GameData.Image.GatherPartical[0].Point      	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GatherParticalPoint2"  , &Pt->GameData.Image.GatherPartical[1].Point      	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GatherParticalPoint3"  , &Pt->GameData.Image.GatherPartical[2].Point      	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );

		Reader.SetData( "GatherParticalName1"   , &Pt->GameData.Image.GatherPartical[0].Name       	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GatherParticalName2"   , &Pt->GameData.Image.GatherPartical[1].Name       	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GatherParticalName3"   , &Pt->GameData.Image.GatherPartical[2].Name       	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );

		Reader.SetData( "ShootMotion"           , &Pt->GameData.Image.ShootMotion                  	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShootMotionScale"      , &Pt->GameData.Image.ShootMotionScale         		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShootACT"              , &Pt->GameData.Image.ShootACT                     	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "FlyPoint"              , &Pt->GameData.Image.FlyBeginPoint                	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "FlyACT"                , &Pt->GameData.Image.FlyACT                       	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "TargetPoint"           , &Pt->GameData.Image.TargetPoint                  	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ExplodeACT"            , &Pt->GameData.Image.ExplodeACT                   	, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ArmorPos"              , &Pt->GameData.Image.ArmorPos                     	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ObjectType"            , &Pt->GameData.Image.ObjectType                   	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "ExtenPoint"            , &Pt->GameData.Image.ExtenPoint					, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ExtendACT"             , &Pt->GameData.Image.ExtendACT                     , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "BuffPoint"             , &Pt->GameData.Image.BuffPoint						, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "BuffACT"               , &Pt->GameData.Image.BuffACT                       , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );


		//------------------------------------------------------------------------------------------------------------------------
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Item( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "LimitVoc"          , &Pt->GameData.Limit.Voc._Voc   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitRace"         , &Pt->GameData.Limit.Race._Race , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitSex"          , &Pt->GameData.Limit.Sex._Sex   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitLv"           , &Pt->GameData.Limit.Level      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitStr"          , &Pt->GameData.Limit.STR        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitSta"          , &Pt->GameData.Limit.STA        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitInt"          , &Pt->GameData.Limit.INT        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitMnd"          , &Pt->GameData.Limit.MND        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitAgi"          , &Pt->GameData.Limit.AGI        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "Mode"              , &Pt->GameData.Mode._Mode      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ItemType"          , &Pt->GameData.Item.ItemType   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MaxHeap"           , &Pt->GameData.MaxHeap         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GenerateRate"      , &Pt->GameData.GenerateRate    , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MaxWorldCount"     , &Pt->GameData.MaxWorldCount   , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Rare"              , &Pt->GameData.Rare            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Cost"              , &Pt->GameData.Cost            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "IncMagic_Onuse"    , &Pt->GameData.Item.IncMagic_Onuse, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DisappearRate"     , &Pt->GameData.Item.DisappearRate , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SrcRecipe"         , &Pt->GameData.Item.SrcRecipe , ENUM_Type_IntPoint			, 0 , ENUM_Indirect_Address ); 

		Reader.SetData( "BuyUnit"			, &Pt->GameData.Item.BuyUnit		, ENUM_Type_IntPoint    , 0 , ENUM_Indirect_Address );
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_KeyItem( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "Type"              , &Pt->GameData.KeyItem.Type         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "QuestID"           , &Pt->GameData.KeyItem.QuestID      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_LearnMagic( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );        

		Reader.SetData( "SPMagicCount"     , &Pt->GameData.LearnMagic.SPSkillCount      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "NormalMagicCount" , &Pt->GameData.LearnMagic.NormalSkillCount  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		char Buf[256];
		for( int i = 0 ; i < _MAX_SPSkill_COUNT_ ; i++ )
		{
			sprintf( Buf , "SPMagicID%d" , i + 1);
			Reader.SetData(  Buf           , &Pt->GameData.LearnMagic.SPSkill[i].MagicID       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "SPLearnLV%d" , i + 1);
			Reader.SetData(  Buf           , &Pt->GameData.LearnMagic.SPSkill[i].LearnLV       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "SPKeyItem%d" , i + 1);
			Reader.SetData(  Buf           , &Pt->GameData.LearnMagic.SPSkill[i].KeyItemID     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		}

		for( int i = 0 ; i < _MAX_NormalSkill_COUNT_ ; i++ )
		{
			sprintf( Buf , "NormalMagicID%d" , i + 1);
			Reader.SetData(  Buf           , &Pt->GameData.LearnMagic.NormalSkill[i].MagicID       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "NormalLearnLV%d" , i + 1);
			Reader.SetData(  Buf           , &Pt->GameData.LearnMagic.NormalSkill[i].LearnLV       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "NormalKeyItem%d" , i + 1);
			Reader.SetData(  Buf           , &Pt->GameData.LearnMagic.NormalSkill[i].KeyItemID     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		}
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_MagicBase( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		char Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );

		//------------------------------------------------------------------------------------
		Reader.SetData( "EffectType"        , &Pt->GameData.MagicBase.EffectType      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MagicType"         , &Pt->GameData.MagicBase.MagicType       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

//		Reader.SetData( "MagicBase"        , &Pt->GameData.MagicBase.MagicBase        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
//		Reader.SetData( "MagicLV"          , &Pt->GameData.MagicBase.MagicLV          , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "NextMagic"          , &Pt->GameData.MagicBase.NextMagic      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		//------------------------------------------------------------------------------------
Reader.SetData( "CostType"          , &Pt->GameData.MagicBase.Cost.Type  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
Reader.SetData( "CostValue"         , &Pt->GameData.MagicBase.Cost.Value  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
Reader.SetData( "NeedType"          , &Pt->GameData.MagicBase.Need.Type  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
Reader.SetData( "NeedValue"         , &Pt->GameData.MagicBase.Need.Value  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
Reader.SetData( "Coldown"			, &Pt->GameData.MagicBase.Coldown		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "MagicFunc"         , &Pt->GameData.MagicBase.MagicFunc     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "EffectTime"        , &Pt->GameData.MagicBase.EffectTime    , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DLV_EffectTime"    , &Pt->GameData.MagicBase.DLV_EffectTime, ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );

		Reader.SetData( "HateCost"          , &Pt->GameData.MagicBase.HateCost      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "EffectLV"          , &Pt->GameData.MagicBase.EffectLV      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
//		Reader.SetData( "BaseHitRate"       , &Pt->GameData.MagicBase.HitRate       , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
//		Reader.SetData( "DLV_HitRate"       , &Pt->GameData.MagicBase.DLv_HitRate   , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
//		Reader.SetData( "RangeType"         , &Pt->GameData.MagicBase.RangeType     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
//		Reader.SetData( "TargetType"        , &Pt->GameData.MagicBase.TargetType    , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "AssistType"        , &Pt->GameData.MagicBase.AssistType    , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Effect"            , &Pt->GameData.MagicBase.Effect			, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "OnTimeMagic_Time"  , &Pt->GameData.MagicBase.OnTimeMagic_Time  , ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );
		Reader.SetData( "OnTimeMagic_Magic" , &Pt->GameData.MagicBase.OnTimeMagic_Magic , ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );

//		Reader.SetData( "EffectCount"       , &Pt->GameData.MagicBase.EffectCount       , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
//		Reader.SetData( "RangeSelectType"   , &Pt->GameData.MagicBase.RangeSelectType   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );

		Reader.SetData( "ChangeID"          , &Pt->GameData.MagicBase.FaceOffID			, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ChangeSize"        , &Pt->GameData.MagicBase.ChangeSizeRate	, ENUM_Type_FloatPoint    , 0 , ENUM_Indirect_Address );

		Reader.SetData( "EffectAddonType"	, &Pt->GameData.MagicBase.EffectAddonType			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );
		Reader.SetData( "OnAttackMagicID"   , &Pt->GameData.MagicBase.OnAttackMagicID			, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "OnAttackReboundMagicID"	, &Pt->GameData.MagicBase.OnAttackReboundMagicID	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "OnBuffTimeOutMagicID"		, &Pt->GameData.MagicBase.OnBuffTimeOutMagicID		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "TempHateCost"      , &Pt->GameData.MagicBase.TempHateCost		, ENUM_Type_IntPoint    , 0 , ENUM_Indirect_Address );


		//------------------------------------------------------------------------------------
		//攻擊法術
		Reader.SetData( "Atk_AtkType"       , &Pt->GameData.MagicBase.Attack.AtkType     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "Atk_Value1"        , &Pt->GameData.MagicBase.Attack.Value[0]    , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Atk_Type1"         , &Pt->GameData.MagicBase.Attack.Type[0]     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Atk_Value2"        , &Pt->GameData.MagicBase.Attack.Value[1]    , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Atk_Type2"         , &Pt->GameData.MagicBase.Attack.Type[1]     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "Atk_Rand"          , &Pt->GameData.MagicBase.Attack.Rand          , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Atk_VampireRate"   , &Pt->GameData.MagicBase.Attack.VampireRate   , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		//傳送術
		Reader.SetData( "TeleportZoneID"    , &Pt->GameData.MagicBase.Teleport.ZoneID   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "TeleportX"         , &Pt->GameData.MagicBase.Teleport.X        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "TeleportY"         , &Pt->GameData.MagicBase.Teleport.Y        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "TeleportZ"         , &Pt->GameData.MagicBase.Teleport.Z        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "TeleportDir"       , &Pt->GameData.MagicBase.Teleport.Dir      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		//復活術
		Reader.SetData( "RaiseExpPrecnt"    , &Pt->GameData.MagicBase.Raise.ExpPrecnt   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		//召喚生物
		Reader.SetData( "SCObjID"           , &Pt->GameData.MagicBase.SummonCreature.ObjID      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SCLevel"           , &Pt->GameData.MagicBase.SummonCreature.Level      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SCRangeLevel"      , &Pt->GameData.MagicBase.SummonCreature.RangeLevel , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SCLiveTime"        , &Pt->GameData.MagicBase.SummonCreature.LiveTime   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		//召喚物品
		Reader.SetData( "SIObjID"           , &Pt->GameData.MagicBase.SummonItem.ObjID          , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		//偷竊
		Reader.SetData( "StealClass"        , &Pt->GameData.MagicBase.Steal.Class               , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		//產生物件執行據情
		Reader.SetData( "MIObjID"           , &Pt->GameData.MagicBase.ItemRunPlot.ObjID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MIPlotName"        , &Pt->GameData.MagicBase.ItemRunPlot.PlotName      , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MILiveTime"        , &Pt->GameData.MagicBase.ItemRunPlot.LiveTime      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "SettingFlag"       , &Pt->GameData.MagicBase.Setting._Type				, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SpecialAction"     , &Pt->GameData.MagicBase.SpecialAction._Type		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		//執行劇情
		Reader.SetData( "MRPlotName"        , &Pt->GameData.MagicBase.RunPlot.PlotName          , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		for( int i = 0 ; i < 5 ; i++ )
		{
			sprintf( Buf , "EqType%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.MagicBase.Ability.EqType[i]      , ENUM_Type_IntPoint       , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "EqTypeValue%d" , i + 1 ); 
			Reader.SetData( Buf     , &Pt->GameData.MagicBase.Ability.EqTypeValue[i]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );

		}
		//------------------------------------------------------------------------------------
		//dot法術
		Reader.SetData( "DotTime"           , &Pt->GameData.MagicBase.DotMagic.Time   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DotType"           , &Pt->GameData.MagicBase.DotMagic.Type   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DotBase"           , &Pt->GameData.MagicBase.DotMagic.Base   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );        

		Reader.SetData( "MagicClear"        , &Pt->GameData.MagicBase.ClearTime       , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		//法力盾
		Reader.SetData( "MagicShield_Type"  , &Pt->GameData.MagicBase.MagicShield.Type		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MagicShield_Effect", &Pt->GameData.MagicBase.MagicShield.Effect	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MagicShield_Point" , &Pt->GameData.MagicBase.MagicShield.Point		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );        

		//------------------------------------------------------------------------------------
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Mine( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );        
		//------------------------------------------------------------------------------------
		Reader.SetData( "GenerateRate"      , &Pt->GameData.GenerateRate    , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MaxWorldCount"     , &Pt->GameData.MaxWorldCount   , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Rare"              , &Pt->GameData.Rare            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "BaseCount"         , &Pt->GameData.Mine.BaseCount  , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Zone1"             , &Pt->Zone[0]                  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Zone2"             , &Pt->Zone[1]                  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Zone3"             , &Pt->Zone[2]                  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		//------------------------------------------------------------------------------------
		Reader.SetData( "ItemType"          , &Pt->GameData.Mine.Type       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "CreateType"        , &Pt->GameData.Mine.CreateType , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LVLimit"           , &Pt->GameData.Mine.LvLimit    , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		char Buf[256];
		for( int i = 0 ; i < 7 ; i++ )
		{
			sprintf( Buf , "GetItem%d" , i +1 );
			Reader.SetData( Buf           , &Pt->GameData.Mine.GetItem[i]    , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

			sprintf( Buf , "GetItemRate%d" , i +1 );
			Reader.SetData( Buf           , &Pt->GameData.Mine.GetItemRate[i], ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

			sprintf( Buf , "GetItemCount%d" , i +1 );
			Reader.SetData( Buf           , &Pt->GameData.Mine.GetItemCount[i], ENUM_Type_IntPoint       , 0 , ENUM_Indirect_Address );

		}
		//------------------------------------------------------------------------------------
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_NPC( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Zone1"             , &Pt->Zone[0]                  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Zone2"             , &Pt->Zone[1]                  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Zone3"             , &Pt->Zone[2]                  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ReviveTime"        , &Pt->GameData.ReviveTime      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "Race"              , &Pt->GameData.NPC.Race        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Vocation"          , &Pt->GameData.NPC.Vocation    , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Sex"               , &Pt->GameData.NPC.Sex         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ExpRate"           , &Pt->GameData.NPC.ExpRate     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Level"             , &Pt->GameData.NPC.Level       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LevelRange"        , &Pt->GameData.NPC.LevelRange  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "STR"               , &Pt->GameData.NPC.STR         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "STA"               , &Pt->GameData.NPC.STA         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "INT"               , &Pt->GameData.NPC.INT         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MND"               , &Pt->GameData.NPC.MND         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "AGI"               , &Pt->GameData.NPC.AGI         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "MoveSpeed"         , &Pt->GameData.NPC.MoveSpeed   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SearchRange"       , &Pt->GameData.NPC.SearchRange , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "DropMoney_Base"    , &Pt->GameData.NPC.DropMoney_Base , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DropMoney_Rand"    , &Pt->GameData.NPC.DropMoney_Rand , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "Brave"             , &Pt->GameData.NPC.Brave       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LinkType"          , &Pt->GameData.NPC.LinkType    , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "EscapeType"        , &Pt->GameData.NPC.EscapeType  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		char Buf[256];
		for( int i = 0 ; i < 8 ; i++ )
		{
			sprintf( Buf , "DropID%d" , i + 1  );
			Reader.SetData( Buf            , &Pt->GameData.NPC.DropItem[i].OrgID       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "DropRate%d" , i + 1  );
			Reader.SetData( Buf            , &Pt->GameData.NPC.DropItem[i].Rate        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		}

		for( int i = 0 ; i < _MAX_NPC_EQSEL_COUNT_ ; i++ )
		{
			sprintf( Buf , "MainHandEq%d" , i + 1 );
			Reader.SetData( Buf , &Pt->GameData.NPC.MainHandEQ[i] , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "SecHandEq%d" , i + 1 );
			Reader.SetData( Buf , &Pt->GameData.NPC.SecHandEQ[i]  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		}

/*		for( int i = 0 ; i < 10 ; i++ )
		{
			sprintf( Buf , "Magic%d" , i+1 );
			Reader.SetData( Buf , &Pt->GameData.NPC.NpcMagic[i] , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		}
		*/
		for( int i = 0 ; i < _MAX_NPC_SPELL_MAGIC_COUNT_ ; i++ )
		{
			sprintf( Buf , "SpellRightTime%d" , i+1 );
			Reader.SetData( Buf , &Pt->GameData.NPC.Spell[i].RigthTime	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "SpellTarget%d" , i+1 );
			Reader.SetData( Buf , &Pt->GameData.NPC.Spell[i].TargetType , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "SpellRate%d" , i+1 );
			Reader.SetData( Buf , &Pt->GameData.NPC.Spell[i].Rate		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "SpellMagic%d" , i+1 );
			Reader.SetData( Buf , &Pt->GameData.NPC.Spell[i].MagicID	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		}


		Reader.SetData( "AddPowerLV"       , &Pt->GameData.NPC.AddPowerLV	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "TitleType"        , &Pt->GameData.NPC.TitleType	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DB_ResistID"      , &Pt->GameData.NPC.DB_ResistID  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Player( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0									, ENUM_Indirect_Address	, Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , sizeof( Pt->LastModifyDate )		, ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , sizeof( Pt->LastModifyAccount )	, ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , sizeof( Pt->DataGroup )			, ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , sizeof( Pt->LockAccount )			, ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0									, ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0									, ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , sizeof( Pt->GameData.Name )		, ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0									, ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , sizeof( Pt->GameData.Note )		, ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , sizeof( Pt->GameData.ShortNote )  , ENUM_Indirect_Address );        
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_QuestDetail( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iQuest_Catalog"	, &Pt->GameData.QuestDetail.iQuest_Catalog     , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iQuest_Type"		, &Pt->GameData.QuestDetail.iQuest_Type			, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iCheck_Class_Type"	, &Pt->GameData.QuestDetail.iCheck_Class_Type	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_Class1"		, &Pt->GameData.QuestDetail.iCheck_Class1       , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_Class2"		, &Pt->GameData.QuestDetail.iCheck_Class2		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_BaseLV"		, &Pt->GameData.QuestDetail.iCheck_BaseLV       , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_RangeLV"	, &Pt->GameData.QuestDetail.iCheck_RangeLV		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_Title"		, &Pt->GameData.QuestDetail.iCheck_Title		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_Group"		, &Pt->GameData.QuestDetail.iCheck_Group		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_Time"		, &Pt->GameData.QuestDetail.iCheck_Time			, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_Sex"		, &Pt->GameData.QuestDetail.iCheck_Sex			, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_Rep"		, &Pt->GameData.QuestDetail.iCheck_Rep			, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_Flag1"		, &Pt->GameData.QuestDetail.iCheck_Flag[0]		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_Flag2"		, &Pt->GameData.QuestDetail.iCheck_Flag[1]		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_Flag3"		, &Pt->GameData.QuestDetail.iCheck_Flag[2]      , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iCheck_ObjID1"		, &Pt->GameData.QuestDetail.iCheck_ObjID[0]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_ObjID2"		, &Pt->GameData.QuestDetail.iCheck_ObjID[1]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_ObjID3"		, &Pt->GameData.QuestDetail.iCheck_ObjID[2]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_ObjID4"		, &Pt->GameData.QuestDetail.iCheck_ObjID[3]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_ObjID5"		, &Pt->GameData.QuestDetail.iCheck_ObjID[4]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iCheck_ObjVal1"	, &Pt->GameData.QuestDetail.iCheck_ObjVal[0]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_ObjVal2"	, &Pt->GameData.QuestDetail.iCheck_ObjVal[1]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_ObjVal3"	, &Pt->GameData.QuestDetail.iCheck_ObjVal[2]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_ObjVal4"	, &Pt->GameData.QuestDetail.iCheck_ObjVal[3]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iCheck_ObjVal5"	, &Pt->GameData.QuestDetail.iCheck_ObjVal[4]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iCheck_Loop"		, &Pt->GameData.QuestDetail.iCheck_Loop			, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );



		Reader.SetData( "iAccept_FlagOn1"	, &Pt->GameData.QuestDetail.iAccept_FlagOn[0]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_FlagOn2"	, &Pt->GameData.QuestDetail.iAccept_FlagOn[1]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_FlagOn3"	, &Pt->GameData.QuestDetail.iAccept_FlagOn[2]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_FlagOff1"	, &Pt->GameData.QuestDetail.iAccept_FlagOff[0]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_FlagOff2"	, &Pt->GameData.QuestDetail.iAccept_FlagOff[1]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_FlagOff3"	, &Pt->GameData.QuestDetail.iAccept_FlagOff[2]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );

		Reader.SetData( "iAccept_ItemID1"	, &Pt->GameData.QuestDetail.iAccept_ItemID[0]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_ItemID2"	, &Pt->GameData.QuestDetail.iAccept_ItemID[1]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_ItemID3"	, &Pt->GameData.QuestDetail.iAccept_ItemID[2]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_ItemID4"	, &Pt->GameData.QuestDetail.iAccept_ItemID[3]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_ItemID5"	, &Pt->GameData.QuestDetail.iAccept_ItemID[4]   , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iAccept_ItemVal1"	, &Pt->GameData.QuestDetail.iAccept_ItemVal[0]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_ItemVal2"	, &Pt->GameData.QuestDetail.iAccept_ItemVal[1]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_ItemVal3"	, &Pt->GameData.QuestDetail.iAccept_ItemVal[2]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_ItemVal4"	, &Pt->GameData.QuestDetail.iAccept_ItemVal[3]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iAccept_ItemVal5"	, &Pt->GameData.QuestDetail.iAccept_ItemVal[4]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iProcess_ClickToGetItem_ObjID1"		, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_ObjID[0]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_ObjID2"		, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_ObjID[1]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_ObjID3"		, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_ObjID[2]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_ObjID4"		, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_ObjID[3]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_ObjID5"		, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_ObjID[4]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iProcess_ClickToGetItem_ProcPercent1"	, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_ProcPercent[0]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_ProcPercent2"	, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_ProcPercent[1]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_ProcPercent3"	, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_ProcPercent[2]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_ProcPercent4"	, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_ProcPercent[3]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_ProcPercent5"	, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_ProcPercent[4]  , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iProcess_ClickToGetItem_GetItem1"		, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_GetItem[0]		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_GetItem2"		, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_GetItem[1]		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_GetItem3"		, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_GetItem[2]		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_GetItem4"		, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_GetItem[3]		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_GetItem5"		, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_GetItem[4]		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iProcess_ClickToGetItem_GetItemVal1"	, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_GetItemVal[0]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iProcess_ClickToGetItem_GetItemVal2"	, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_GetItemVal[1]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_GetItemVal3"	, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_GetItemVal[2]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_GetItemVal4"	, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_GetItemVal[3]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_ClickToGetItem_GetItemVal5"	, &Pt->GameData.QuestDetail.iProcess_ClickToGetItem_GetItemVal[4]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iProcess_KilltoGetItem_ObjID1"			, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_ObjID[0]  , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_ObjID2"			, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_ObjID[1]  , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_ObjID3"			, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_ObjID[2]  , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_ObjID4"			, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_ObjID[3]  , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_ObjID5"			, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_ObjID[4]  , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iProcess_KilltoGetItem_ProcPercent1"	, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_ProcPercent[0]  , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_ProcPercent2"	, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_ProcPercent[1]  , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_ProcPercent3"	, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_ProcPercent[2]  , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_ProcPercent4"	, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_ProcPercent[3]  , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_ProcPercent5"	, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_ProcPercent[4]  , ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iProcess_KilltoGetItem_GetItem1"		, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_GetItem[0]		, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_GetItem2"		, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_GetItem[1]		, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_GetItem3"		, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_GetItem[2]		, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_GetItem4"		, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_GetItem[3]		, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_GetItem5"		, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_GetItem[4]		, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iProcess_KilltoGetItem_GetItemVal1"	, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_GetItemVal[0]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iProcess_KilltoGetItem_GetItemVal2"	, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_GetItemVal[1]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_GetItemVal3"	, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_GetItemVal[2]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_GetItemVal4"	, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_GetItemVal[3]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iProcess_KilltoGetItem_GetItemVal5"	, &Pt->GameData.QuestDetail.iProcess_KilltoGetItem_GetItemVal[4]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iRequest_ItemID1"	, &Pt->GameData.QuestDetail.iRequest_ItemID[0]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iRequest_ItemID2"	, &Pt->GameData.QuestDetail.iRequest_ItemID[1]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_ItemID3"	, &Pt->GameData.QuestDetail.iRequest_ItemID[2]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_ItemID4"	, &Pt->GameData.QuestDetail.iRequest_ItemID[3]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_ItemID5"	, &Pt->GameData.QuestDetail.iRequest_ItemID[4]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iRequest_ItemVal1"	, &Pt->GameData.QuestDetail.iRequest_ItemVal[0]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iRequest_ItemVal2"	, &Pt->GameData.QuestDetail.iRequest_ItemVal[1]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_ItemVal3"	, &Pt->GameData.QuestDetail.iRequest_ItemVal[2]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_ItemVal4"	, &Pt->GameData.QuestDetail.iRequest_ItemVal[3]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_ItemVal5"	, &Pt->GameData.QuestDetail.iRequest_ItemVal[4]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iRequest_KillID1"	, &Pt->GameData.QuestDetail.iRequest_KillID[0]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iRequest_KillID2"	, &Pt->GameData.QuestDetail.iRequest_KillID[1]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_KillID3"	, &Pt->GameData.QuestDetail.iRequest_KillID[2]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_KillID4"	, &Pt->GameData.QuestDetail.iRequest_KillID[3]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_KillID5"	, &Pt->GameData.QuestDetail.iRequest_KillID[4]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iRequest_KillVal1"	, &Pt->GameData.QuestDetail.iRequest_KillVal[0]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iRequest_KillVal2"	, &Pt->GameData.QuestDetail.iRequest_KillVal[1]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_KillVal3"	, &Pt->GameData.QuestDetail.iRequest_KillVal[2]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_KillVal4"	, &Pt->GameData.QuestDetail.iRequest_KillVal[3]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_KillVal5"	, &Pt->GameData.QuestDetail.iRequest_KillVal[4]	, ENUM_Type_IntPoint     , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iRequest_Timer"	, &Pt->GameData.QuestDetail.iRequest_Timer		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iRequest_Money"	, &Pt->GameData.QuestDetail.iRequest_Money		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iRequest_QuestID"	, &Pt->GameData.QuestDetail.iRequest_QuestID	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iReward_Money"		, &Pt->GameData.QuestDetail.iReward_Money		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_Exp"		, &Pt->GameData.QuestDetail.iReward_Exp			, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_Rep"		, &Pt->GameData.QuestDetail.iReward_Rep			, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       


		Reader.SetData( "iReward_ItemID1"		, &Pt->GameData.QuestDetail.iReward_ItemID[0]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iReward_ItemID2"		, &Pt->GameData.QuestDetail.iReward_ItemID[1]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ItemID3"		, &Pt->GameData.QuestDetail.iReward_ItemID[2]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ItemID4"		, &Pt->GameData.QuestDetail.iReward_ItemID[3]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ItemID5"		, &Pt->GameData.QuestDetail.iReward_ItemID[4]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iReward_ItemVal1"		, &Pt->GameData.QuestDetail.iReward_ItemVal[0]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iReward_ItemVal2"		, &Pt->GameData.QuestDetail.iReward_ItemVal[1]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ItemVal3"		, &Pt->GameData.QuestDetail.iReward_ItemVal[2]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ItemVal4"		, &Pt->GameData.QuestDetail.iReward_ItemVal[3]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ItemVal5"		, &Pt->GameData.QuestDetail.iReward_ItemVal[4]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iReward_ChoiceID1"		, &Pt->GameData.QuestDetail.iReward_ChoiceID[0]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iReward_ChoiceID2"		, &Pt->GameData.QuestDetail.iReward_ChoiceID[1]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ChoiceID3"		, &Pt->GameData.QuestDetail.iReward_ChoiceID[2]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ChoiceID4"		, &Pt->GameData.QuestDetail.iReward_ChoiceID[3]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ChoiceID5"		, &Pt->GameData.QuestDetail.iReward_ChoiceID[4]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iReward_ChoiceVal1"	, &Pt->GameData.QuestDetail.iReward_ChoiceVal[0]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iReward_ChoiceVal2"	, &Pt->GameData.QuestDetail.iReward_ChoiceVal[1]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ChoiceVal3"	, &Pt->GameData.QuestDetail.iReward_ChoiceVal[2]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ChoiceVal4"	, &Pt->GameData.QuestDetail.iReward_ChoiceVal[3]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_ChoiceVal5"	, &Pt->GameData.QuestDetail.iReward_ChoiceVal[4]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iReward_Spell1"		, &Pt->GameData.QuestDetail.iReward_Spell[0]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "iReward_Spell2"		, &Pt->GameData.QuestDetail.iReward_Spell[1]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_Spell3"		, &Pt->GameData.QuestDetail.iReward_Spell[2]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_Spell4"		, &Pt->GameData.QuestDetail.iReward_Spell[3]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iReward_Spell5"		, &Pt->GameData.QuestDetail.iReward_Spell[4]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "iComplete_ShowQuest"	, &Pt->GameData.QuestDetail.iComplete_ShowQuest		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );

		Reader.SetData( "iComplete_FlagOn1"		, &Pt->GameData.QuestDetail.iComplete_FlagOn[0]		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iComplete_FlagOn2"		, &Pt->GameData.QuestDetail.iComplete_FlagOn[1]		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iComplete_FlagOn3"		, &Pt->GameData.QuestDetail.iComplete_FlagOn[2]		, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iComplete_FlagOff1"	, &Pt->GameData.QuestDetail.iComplete_FlagOff[0]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iComplete_FlagOff2"	, &Pt->GameData.QuestDetail.iComplete_FlagOff[1]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "iComplete_FlagOff3"	, &Pt->GameData.QuestDetail.iComplete_FlagOff[2]	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );

		Reader.SetData( "szQuest_Desc"			, &Pt->GameData.QuestDetail.szQuest_Desc			, ENUM_Type_CharStringPoint      , 0 , ENUM_Indirect_Address );       

		Reader.SetData( "szQuest_Accept_Detail"		, &Pt->GameData.QuestDetail.szQuest_Accept_Detail			, ENUM_Type_CharStringPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "szQuest_UnComplete_Detail"	, &Pt->GameData.QuestDetail.szQuest_UnComplete_Detail		, ENUM_Type_CharStringPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "szQuest_Complete_Detail"	, &Pt->GameData.QuestDetail.szQuest_Complete_Detail			, ENUM_Type_CharStringPoint      , 0 , ENUM_Indirect_Address );



		Reader.SetData( "szScript_OnBegin"			, &Pt->GameData.QuestDetail.szScript_OnBegin		, ENUM_Type_CharStringPoint      , 0 , ENUM_Indirect_Address );       
		Reader.SetData( "szScript_OnAccept"			, &Pt->GameData.QuestDetail.szScript_OnAccept		, ENUM_Type_CharStringPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "szScript_OnComplete"		, &Pt->GameData.QuestDetail.szScript_OnComplete		, ENUM_Type_CharStringPoint      , 0 , ENUM_Indirect_Address );

		Reader.SetData( "szScript_OnClickObjBegin"	, &Pt->GameData.QuestDetail.szScript_OnClickObjBegin, ENUM_Type_CharStringPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "szScript_OnClickObjEnd"	, &Pt->GameData.QuestDetail.szScript_OnClickObjEnd	, ENUM_Type_CharStringPoint      , 0 , ENUM_Indirect_Address );



	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_QuestNPC( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Zone1"             , &Pt->Zone[0]                  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Zone2"             , &Pt->Zone[1]                  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Zone3"             , &Pt->Zone[2]                  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "szQuestNpcText"    , &Pt->GameData.NPC.szQuestNpcText		, ENUM_Type_CharStringPoint      , 0 , ENUM_Indirect_Address );        
		Reader.SetData( "szQuestDoingText"  , &Pt->GameData.NPC.szQuestDoingText	, ENUM_Type_CharStringPoint		, 0 , ENUM_Indirect_Address );        
		Reader.SetData( "szLuaScript"		, &Pt->GameData.NPC.szLuaScript			, ENUM_Type_CharStringPoint		, 0 , ENUM_Indirect_Address );        

		Reader.SetData( "iQuestID1"			, &Pt->GameData.NPC.iQuestID[0]			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID2"			, &Pt->GameData.NPC.iQuestID[1]			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID3"			, &Pt->GameData.NPC.iQuestID[2]			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID4"			, &Pt->GameData.NPC.iQuestID[3]			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID5"			, &Pt->GameData.NPC.iQuestID[4]			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID6"			, &Pt->GameData.NPC.iQuestID[5]			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID7"			, &Pt->GameData.NPC.iQuestID[6]			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID8"			, &Pt->GameData.NPC.iQuestID[7]			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID9"			, &Pt->GameData.NPC.iQuestID[8]			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID10"		, &Pt->GameData.NPC.iQuestID[9]			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID11"		, &Pt->GameData.NPC.iQuestID[10]		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID12"		, &Pt->GameData.NPC.iQuestID[11]		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID13"		, &Pt->GameData.NPC.iQuestID[12]		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID14"		, &Pt->GameData.NPC.iQuestID[13]		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID15"		, &Pt->GameData.NPC.iQuestID[14]		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID16"		, &Pt->GameData.NPC.iQuestID[15]		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID17"		, &Pt->GameData.NPC.iQuestID[16]		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID18"		, &Pt->GameData.NPC.iQuestID[17]		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID19"		, &Pt->GameData.NPC.iQuestID[18]		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );     
		Reader.SetData( "iQuestID20"		, &Pt->GameData.NPC.iQuestID[19]		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );    

		Reader.SetData( "iQuestNPCRefID"	, &Pt->GameData.NPC.iQuestNPCRefID		, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );    

		Reader.SetData( "iQuestMode"		, &Pt->GameData.NPC.iQuestMode			, ENUM_Type_IntPoint		, 0 , ENUM_Indirect_Address );        
		Reader.SetData( "ReviveTime"        , &Pt->GameData.ReviveTime				, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Recipe( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;



	if( IsInit == false )
	{
		char    Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0, ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0, ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0, ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0, ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0, ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0, ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0, ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0, ENUM_Indirect_Address );        
		//---------------------------------------------------------------------------------------------------------------------------------------------
		for( int i = 0 ; i < 8 ; i++ )
		{
			sprintf( Buf ,"Source%d", i+1  );
			Reader.SetData( Buf           , &Pt->GameData.Recipe.Source[i].OrgObjID   , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
			sprintf( Buf ,"SourceCount%d", i+1  );
			Reader.SetData( Buf           , &Pt->GameData.Recipe.Source[i].Count      , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
			sprintf( Buf ,"SourceReduce%d", i+1  );
			Reader.SetData( Buf           , &Pt->GameData.Recipe.Source[i].Rate       , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		}

		Reader.SetData( "Item1_Normal"      , &Pt->GameData.Recipe.Item1_Normal.OrgObjID    , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_NormalCount" , &Pt->GameData.Recipe.Item1_Normal.Count       , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_NormalRate"  , &Pt->GameData.Recipe.Item1_Normal.Rate        , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );

		Reader.SetData( "Item1_HQ"      , &Pt->GameData.Recipe.Item1_HQ.OrgObjID    , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_HQCount" , &Pt->GameData.Recipe.Item1_HQ.Count       , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_HQRate"  , &Pt->GameData.Recipe.Item1_HQ.Rate        , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );

		Reader.SetData( "Item1_Slot1"      , &Pt->GameData.Recipe.Item1_Slot1.OrgObjID    , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_Slot1Count" , &Pt->GameData.Recipe.Item1_Slot1.Count       , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_Slot1Rate"  , &Pt->GameData.Recipe.Item1_Slot1.Rate        , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );

		Reader.SetData( "Item1_Slot2"      , &Pt->GameData.Recipe.Item1_Slot2.OrgObjID    , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_Slot2Count" , &Pt->GameData.Recipe.Item1_Slot2.Count       , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_Slot2Rate"  , &Pt->GameData.Recipe.Item1_Slot2.Rate        , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );

		Reader.SetData( "Item1_Slot3"      , &Pt->GameData.Recipe.Item1_Slot3.OrgObjID    , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_Slot3Count" , &Pt->GameData.Recipe.Item1_Slot3.Count       , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_Slot3Rate"  , &Pt->GameData.Recipe.Item1_Slot3.Rate        , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );

		Reader.SetData( "Item1_Slot4"      , &Pt->GameData.Recipe.Item1_Slot4.OrgObjID    , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_Slot4Count" , &Pt->GameData.Recipe.Item1_Slot4.Count       , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item1_Slot4Rate"  , &Pt->GameData.Recipe.Item1_Slot4.Rate        , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		//---------------------------------------------------------------------------------------------------------------------------------------------
		Reader.SetData( "Item2"            , &Pt->GameData.Recipe.Item2.OrgObjID          , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item2_Count"      , &Pt->GameData.Recipe.Item2.Count             , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item2_Rate"       , &Pt->GameData.Recipe.Item2.Rate              , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );

		Reader.SetData( "Item3"            , &Pt->GameData.Recipe.Item3.OrgObjID          , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item3_Count"      , &Pt->GameData.Recipe.Item3.Count             , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item3_Rate"       , &Pt->GameData.Recipe.Item3.Rate              , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );

		Reader.SetData( "Item4"            , &Pt->GameData.Recipe.Item4.OrgObjID          , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item4_Count"      , &Pt->GameData.Recipe.Item4.Count             , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "Item4_Rate"       , &Pt->GameData.Recipe.Item4.Rate              , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );

		//---------------------------------------------------------------------------------------------------------------------------------------------
		//需求設定
		Reader.SetData( "RequestSkill"     , &Pt->GameData.Recipe.Request.Skill           , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "RequestSkillLV"   , &Pt->GameData.Recipe.Request.SkillLV         , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
		Reader.SetData( "RequestKeyItemID" , &Pt->GameData.Recipe.Request.KeyItemID       , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );

		//-------------------------------------------------------------------------------------------------------------------------------------------
		Reader.SetData( "Coldown"		   , &Pt->GameData.Recipe.Coldown				  , ENUM_Type_IntPoint        , 0, ENUM_Indirect_Address );
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Rune( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;    

	if( IsInit == false )
	{
		char    Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );        
		Reader.SetData( "Rare"              , &Pt->GameData.Rare            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		//------------------------------------------------------------------------------------
		Reader.SetData( "AddPos"            , &Pt->GameData.Item.AddPos._Type    , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DisappearRate"     , &Pt->GameData.Item.DisappearRate   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Type"              , &Pt->GameData.Item.RuneType        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Level"             , &Pt->GameData.Item.Level			 , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Volume"            , &Pt->GameData.Item.Volume			 , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		for( int i = 0 ; i < 5 ; i++ )
		{
			sprintf( Buf , "EqType%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Item.Ability.EqType[i]      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "EqTypeValue%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Item.Ability.EqTypeValue[i]  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		}
		//------------------------------------------------------------------------------------

	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Script( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "Type"              , &Pt->ScriptInfo.Type          , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "FuncName"          , &Pt->ScriptInfo.Name          , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "FuncArg"           , &Pt->ScriptInfo.Arg           , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Text"              , &Pt->ScriptInfo.Script        , ENUM_Type_TextData        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Shop( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		char    Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );        
		//---------------------------------------------------------------------------------------------------------------------------------------------

		Reader.SetData( "BuyRate"         , &Pt->GameData.Shop.BuyRate      , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );        
		Reader.SetData( "SellRate"        , &Pt->GameData.Shop.SellRate     , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );        
		Reader.SetData( "WeaponRepair"    , &Pt->GameData.Shop.WeaponRepair , ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );        

		for( int i = 0 ; i < 30 ; i++ )
		{
			sprintf( Buf ,"SellItemID%d", i+1  );
			Reader.SetData( Buf           , &Pt->GameData.Shop.SellItemID[ i ]      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf ,"SellItemMax%d", i+1  );
			Reader.SetData( Buf           , &Pt->GameData.Shop.SellItemMax[ i ]     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf ,"SellItemPorduce%d", i+1  );
			Reader.SetData( Buf           , &Pt->GameData.Shop.SellItemPorduce[ i ] , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		}


		//---------------------------------------------------------------------------------------------------------------------------------------------
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Suit( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;  

	if( IsInit == false )
	{
		char    Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "TotalCount"		, &Pt->GameData.Suit.TotalCount	, ENUM_Type_IntPoint	, 0 , ENUM_Indirect_Address );
		for( int i = 0 ; i < 9 ; i++ )
			for( int j = 0 ; j < 3 ; j++ )
			{
				sprintf( Buf , "BaseType%d_%d" , i+1 , j+1 );
				Reader.SetData( Buf         , &Pt->GameData.Suit.SuitBase[i].EqType[j]		, ENUM_Type_IntPoint	, 0 , ENUM_Indirect_Address );
				sprintf( Buf , "BaseTypeValue%d_%d" , i+1 , j+1 );
				Reader.SetData( Buf         , &Pt->GameData.Suit.SuitBase[i].EqTypeValue[j]	, ENUM_Type_IntPoint	, 0 , ENUM_Indirect_Address );			
			}

			//------------------------------------------------------------------------------------
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Title( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		char Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );        
		//----------------------------------------------------------------------------------------------------------
		Reader.SetData( "Type"              , &Pt->GameData.Title.Type         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Famous"            , &Pt->GameData.Title.Famous       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MainJob"           , &Pt->GameData.Title.MainJob      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SubJob"            , &Pt->GameData.Title.SubJob       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MainJobLV"         , &Pt->GameData.Title.MainJobLV    , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SubJobLV"          , &Pt->GameData.Title.SubJobLV     , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//----------------------------------------------------------------------------------------------------------

		for( int i = 0 ; i < 5 ; i++ )
		{
			sprintf( Buf , "EqType%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Title.Ability.EqType[i]      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "EqTypeValue%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Title.Ability.EqTypeValue[i]  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		}
	}

	return &Reader;
}
ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Weapon( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		char    Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , 1 );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MaxHeap"           , &Pt->GameData.MaxHeap			, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "LimitVoc"          , &Pt->GameData.Limit.Voc._Voc   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitRace"         , &Pt->GameData.Limit.Race._Race , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitSex"          , &Pt->GameData.Limit.Sex._Sex   , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitLv"           , &Pt->GameData.Limit.Level      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitStr"          , &Pt->GameData.Limit.STR        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitSta"          , &Pt->GameData.Limit.STA        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitInt"          , &Pt->GameData.Limit.INT        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitMnd"          , &Pt->GameData.Limit.MND        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LimitAgi"          , &Pt->GameData.Limit.AGI        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		Reader.SetData( "Mode"              , &Pt->GameData.Mode._Mode          , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ItemType"          , &Pt->GameData.Item.ItemType       , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GenerateRate"      , &Pt->GameData.GenerateRate        , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MaxWorldCount"     , &Pt->GameData.MaxWorldCount       , ENUM_Type_FloatPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Rare"              , &Pt->GameData.Rare                , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Cost"              , &Pt->GameData.Cost                , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "IncMagic_Onuse"    , &Pt->GameData.Item.IncMagic_Onuse , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DisappearRate"     , &Pt->GameData.Item.DisappearRate  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SrcRecipe"         , &Pt->GameData.Item.SrcRecipe      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Durable"           , &Pt->GameData.Item.Durable        , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "ManuFactureType"   , &Pt->GameData.Item.ManuFactureType, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ManuFactureLV"     , &Pt->GameData.Item.ManuFactureType, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "BuyUnit"			, &Pt->GameData.Item.BuyUnit		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SuitID"            , &Pt->GameData.Item.SuitID			, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "AttackRange"       , &Pt->GameData.Item.AttackRange	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//------------------------------------------------------------------------------------
		for( int i = 0 ; i < 5 ; i++ )
		{
			sprintf( Buf , "EqType%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Item.Ability.EqType[i]      , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "EqTypeValue%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Item.Ability.EqTypeValue[i]  , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		}
		//------------------------------------------------------------------------------------
		Reader.SetData( "WeaponType"         , &Pt->GameData.Item.WeaponType         	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "weaponPos"          , &Pt->GameData.Item.WeaponPos          	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );

		Reader.SetData( "HoleBase"           , &Pt->GameData.Item.HoleBase          	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "HoleRange"          , &Pt->GameData.Item.HoleRange         	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "AddPowerOn"         , &Pt->GameData.Item.AddPowerOn        	, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "StandardType"       , &Pt->GameData.Item.StandardType			, ENUM_Type_IntPoint      , 0 , ENUM_Indirect_Address );

	}

	return &Reader;
}


ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Camp( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		char Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );        
		//----------------------------------------------------------------------------------------------------------
		//----------------------------------------------------------------------------------------------------------

		for( int i = 0 ; i < 15 ; i++ )
		{
			sprintf( Buf , "CampName%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Camp.CampName[i]     , ENUM_Type_CharString        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "CampRelation%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Camp.CampInfo[i]	 , ENUM_Type_CharString        , sizeof(Pt->GameData.Camp.CampInfo[i])-1, ENUM_Indirect_Address );

		}
	}

	return &Reader;
}

ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_Treasure( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		char Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );        
		//----------------------------------------------------------------------------------------------------------
		Reader.SetData( "ItemCount"     , &Pt->GameData.Treasure.ItemCount	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		for( int i = 0 ; i < _MAX_TREASURE_COUNT_ ; i++ )
		{
			sprintf( Buf , "TreasureItem%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Treasure.Item[i].OrgID		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "TreasureCount%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Treasure.Item[i].Count		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "TreasureDropCount%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.Treasure.Item[i].DropCount	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		}
	}

	return &Reader;
}

ReaderClass< DB_GameObjDbStruct >* GameObjDbStructEx::ObjReader_MagicCollect( )
{
	static ReaderClass< DB_GameObjDbStruct > Reader;
	static bool IsInit = false;

	if( IsInit == false )
	{
		char Buf[256];
		DB_GameObjDbStruct* Pt = 0;

		IsInit = true;
		Reader.SetData( "IsLock"            , &Pt->IsLock                   , ENUM_Type_ShortPoint      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "LastModifyDate"    , &Pt->LastModifyDate           , ENUM_Type_TimeCharString  , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LastModifyAccount" , &Pt->LastModifyAccount        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "DataGroup"			, &Pt->DataGroup		        , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LockAccount"       , &Pt->LockAccount              , ENUM_Type_CharString      , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "ProcRate"          , &Pt->ProcRate.Rate            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "GUID"              , &Pt->GameData.GUID            , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address , Def_Disabled_Update_Flag );
		Reader.SetData( "Name"              , &Pt->GameData.Name            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ImageID"           , &Pt->GameData.ImageID         , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Note"              , &Pt->GameData.Note            , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ShortNote"         , &Pt->GameData.ShortNote       , ENUM_Type_CharStringPoint , 0 , ENUM_Indirect_Address );        
		//----------------------------------------------------------------------------------------------------------
		Reader.SetData( "MagicBase"         , &Pt->GameData.MagicCol.MagicBase  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MagicLV"			, &Pt->GameData.MagicCol.MagicLV		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "EffectType"        , &Pt->GameData.MagicCol.EffectType		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "CostType"          , &Pt->GameData.MagicCol.Cost.Type  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "CostValue"         , &Pt->GameData.MagicCol.Cost.Value  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "NeedType"          , &Pt->GameData.MagicCol.Need.Type  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "NeedValue"         , &Pt->GameData.MagicCol.Need.Value  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "TargetType"        , &Pt->GameData.MagicCol.TargetType		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "AttackDistance"    , &Pt->GameData.MagicCol.AttackDistance , ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "RangeType"			, &Pt->GameData.MagicCol.RangeType		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "EffectRange"		, &Pt->GameData.MagicCol.EffectRange	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "RangeSelectType"	, &Pt->GameData.MagicCol.RangeSelectType, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "EffectCount"		, &Pt->GameData.MagicCol.EffectCount	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		Reader.SetData( "SpellTime"			, &Pt->GameData.MagicCol.SpellTime		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "MagicAttackDelay"	, &Pt->GameData.MagicCol.MagicAttackDelay, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "SpellCount"		, &Pt->GameData.MagicCol.SpellCount		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "NextSpellTime"		, &Pt->GameData.MagicCol.NextSpellTime	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		//----------------------------------------------------------------------------------------------------------
		//命中率
		Reader.SetData( "HitRateFunc"			, &Pt->GameData.MagicCol.HitRateFunc		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "HitRateArg1"			, &Pt->GameData.MagicCol.HitRateArg[0]		, ENUM_Type_FloatPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "HitRateArg2"			, &Pt->GameData.MagicCol.HitRateArg[1]		, ENUM_Type_FloatPoint        , 0 , ENUM_Indirect_Address );

		//----------------------------------------------------------------------------------------------------------
		Reader.SetData( "ColdownClass"			, &Pt->GameData.MagicCol.Coldown.Class  		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ColdownType"			, &Pt->GameData.MagicCol.Coldown.Type			, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ColdownTime"			, &Pt->GameData.MagicCol.Coldown.Time			, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "ColdownTimeAllMagic"	, &Pt->GameData.MagicCol.Coldown.TimeAllMagic  	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "Flag"					, &Pt->GameData.MagicCol.Flag._Type  			, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
		Reader.SetData( "LuaScript"          	, &Pt->GameData.MagicCol.LUAScript				, ENUM_Type_CharString      , 0 , ENUM_Indirect_Address );
		//----------------------------------------------------------------------------------------------------------
		
		for( int i = 0 ; i < 8 ; i++ )
		{
			sprintf( Buf , "MagicCheckFlag%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.MagicCol.Magic[i].CheckFlag		, ENUM_Type_BitPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "MagicBaseID%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.MagicCol.Magic[i].MagicBaseID	, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "MagicCheckFuncType%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.MagicCol.Magic[i].FuncType		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "MagicCheckArg1%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.MagicCol.Magic[i].Arg[0]		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );
			sprintf( Buf , "MagicCheckArg2%d" , i + 1 );
			Reader.SetData( Buf     , &Pt->GameData.MagicCol.Magic[i].Arg[1]		, ENUM_Type_IntPoint        , 0 , ENUM_Indirect_Address );

		}

		//----------------------------------------------------------------------------------------------------------
	}

	return &Reader;
}

//---------------------------------------------------------------------------------------------------------------------
