Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

How to get the elements.data's structure from gs?

Junior Spellweaver
Joined
Jan 29, 2015
Messages
118
Reaction score
5
I use notepad++ to open the GS file (the path is server/gamed/config/gs), I found a part of the readable element.data configuration, mixed with a mess of code, like sELedit configuration, my server used v491 (Chinese version is v458), before I found the sELedit only contains the v449 version of the configuration, someone knows How do I pull the element. data configuration from the GS file?
 
Junior Spellweaver
Joined
Jan 29, 2015
Messages
118
Reaction score
5
Yes, first u can open the gs file with Notepad++,then search the keywords "init_enhance_level",you can see the config of segment two(EQUIPMENT_ESSENCE) of element.data
 
Upvote 0
Junior Spellweaver
Joined
Jan 29, 2015
Messages
118
Reaction score
5
Yes, I found another way to solve it,using dwarves to get the libskill.so 's structure。The exported structure contains the configuration of el
 
Upvote 0
Junior Spellweaver
Joined
Jan 29, 2015
Messages
118
Reaction score
5
The structure of el seems to have nothing to do with gamedbd



The second segment of the EL is as follows:
struct EQUIPMENT_ESSENCE { unsigned int id; /* 0 4 */ namechar name[32]; /* 4 64 */ /* --- cacheline 1 boundary (64 bytes) was 4 bytes ago --- */ int item_quality; /* 68 4 */ namechar simple_desc[16]; /* 72 32 */ unsigned int init_enhance_level; /* 104 4 */ unsigned int is_forbid_transfer_ehance; /* 108 4 */ unsigned int equip_type; /* 112 4 */ unsigned int is_alpha_fashion_equip; /* 116 4 */ unsigned int base_star_level; /* 120 4 */ unsigned int equip_mask; /* 124 4 */ /* --- cacheline 2 boundary (128 bytes) --- */ unsigned int hide_equip_mask; /* 128 4 */ unsigned int show_mask; /* 132 4 */ unsigned int disable_show_mask; /* 136 4 */ unsigned int equip_usingtype_mask; /* 140 4 */ unsigned int id_change_model; /* 144 4 */ struct { unsigned int profession; /* 0 4 */ unsigned int race; /* 4 4 */ int file_model_male; /* 8 4 */ int file_model_female; /* 12 4 */ int file_model_male_l; /* 16 4 */ int file_model_female_l; /* 20 4 */ class & operator=(class *, const class &); void ._26(class *, const class &); void ._26(class *); /* size: 24, cachelines: 1, members: 6 */ /* last cacheline: 24 bytes */ }; struct { unsigned int profession; /* 148 4 */ unsigned int race; /* 152 4 */ int file_model_male; /* 156 4 */ int file_model_female; /* 160 4 */ int file_model_male_l; /* 164 4 */ int file_model_female_l; /* 168 4 */ class & operator=(class *, const class &); void ._26(class *, const class &); void ._26(class *); } models[8]; /* 148 192 */ /* --- cacheline 5 boundary (320 bytes) was 20 bytes ago --- */ int file_matter; /* 340 4 */ int file_icon; /* 344 4 */ unsigned int equip_location; /* 348 4 */ unsigned int action_type; /* 352 4 */ unsigned int show_type; /* 356 4 */ int normal_attack_sfx; /* 360 4 */ unsigned int music_pick; /* 364 4 */ unsigned int music_drop; /* 368 4 */ int level; /* 372 4 */ unsigned int character_combo_id; /* 376 4 */ unsigned int mask_race; /* 380 4 */ /* --- cacheline 6 boundary (384 bytes) --- */ unsigned int require_gender; /* 384 4 */ int require_level; /* 388 4 */ int require_vip_level; /* 392 4 */ int hp; /* 396 4 */ int mp; /* 400 4 */ int min_dmg; /* 404 4 */ int dmg_val; /* 408 4 */ int defence; /* 412 4 */ int attack; /* 416 4 */ int armor; /* 420 4 */ int useful_in_judge; /* 424 4 */ int random_quality_affix; /* 428 4 */ int id_quality; /* 432 4 */ int id_prefix_addon_package; /* 436 4 */ int id_postfix_addon_package; /* 440 4 */ int id_equip_prop; /* 444 4 */ /* --- cacheline 7 boundary (448 bytes) --- */ float attack_range; /* 448 4 */ unsigned int sell_for_bind_money; /* 452 4 */ int price; /* 456 4 */ int shop_price; /* 460 4 */ int sign_price; /* 464 4 */ int refine_price[12]; /* 468 48 */ /* --- cacheline 8 boundary (512 bytes) was 4 bytes ago --- */ int level_stone_echance[4]; /* 516 16 */ int id_sign_addon_package; /* 532 4 */ int refine_max_level; /* 536 4 */ unsigned int id_estone[2]; /* 540 8 */ int enhanced_prop_package[12]; /* 548 48 */ /* --- cacheline 9 boundary (576 bytes) was 20 bytes ago --- */ int id_identify; /* 596 4 */ int basic_show_level; /* 600 4 */ int can_sign; /* 604 4 */ int id_special_addon_package; /* 608 4 */ unsigned int color[5]; /* 612 20 */ int show_gfx_need_gem_value; /* 632 4 */ int gfx_pvp_soul_status; /* 636 4 */ /* --- cacheline 10 boundary (640 bytes) --- */ int id_full_pvp_soul_skill; /* 640 4 */ int id_cancel_full_pvp_soul_skill; /* 644 4 */ unsigned int can_decompose; /* 648 4 */ struct { int id; /* 0 4 */ int max_num; /* 4 4 */ int min_num; /* 8 4 */ class & operator=(class *, const class &); void ._27(class *, const class &); void ._27(class *); /* size: 12, cachelines: 1, members: 3 */ /* last cacheline: 12 bytes */ }; struct { int id; /* 652 4 */ int max_num; /* 656 4 */ int min_num; /* 660 4 */ class & operator=(class *, const class &); void ._27(class *, const class &); void ._27(class *); } decompose_main_result[3]; /* 652 36 */ struct { int id; /* 0 4 */ float ratio; /* 4 4 */ class & operator=(class *, const class &); void ._28(class *, const class &); void ._28(class *); /* size: 8, cachelines: 1, members: 2 */ /* last cacheline: 8 bytes */ }; struct { int id; /* 688 4 */ float ratio; /* 692 4 */ class & operator=(class *, const class &); void ._28(class *, const class &); void ._28(class *); } decompose_sub_result[2]; /* 688 16 */ /* --- cacheline 11 boundary (704 bytes) --- */ int max_recast_hp; /* 704 4 */ int min_recast_hp; /* 708 4 */ int max_recast_mp; /* 712 4 */ int min_recast_mp; /* 716 4 */ int max_recast_dmg; /* 720 4 */ int min_recast_dmg; /* 724 4 */ int max_recast_defense; /* 728 4 */ int min_recast_defense; /* 732 4 */ int max_recast_attack; /* 736 4 */ int min_recast_attack; /* 740 4 */ int max_recast_armor; /* 744 4 */ int min_recast_armor; /* 748 4 */ struct { unsigned int tool_id; /* 0 4 */ int probability; /* 4 4 */ int money; /* 8 4 */ class & operator=(class *, const class &); void ._29(class *, const class &); void ._29(class *); /* size: 12, cachelines: 1, members: 3 */ /* last cacheline: 12 bytes */ }; struct { unsigned int tool_id; /* 752 4 */ int probability; /* 756 4 */ int money; /* 760 4 */ class & operator=(class *, const class &); void ._29(class *, const class &); void ._29(class *); } extend_identify_attr_tool[2]; /* 752 24 */ /* --- cacheline 12 boundary (768 bytes) was 8 bytes ago --- */ int auction_dir[3][2]; /* 776 24 */ unsigned int can_auction; /* 800 4 */ float auction_fee; /* 804 4 */ unsigned int fashion_dye_cfg_id; /* 808 4 */ unsigned int equip_transform_cfg_id; /* 812 4 */ unsigned int fashion_adorn_hook_name; /* 816 4 */ int pile_num_max; /* 820 4 */ unsigned int proc_type; /* 824 4 */ class EQUIPMENT_ESSENCE & operator=(class EQUIPMENT_ESSENCE *, const class EQUIPMENT_ESSENCE &); /* linkage=_ZN17EQUIPMENT_ESSENCEaSERKS_ */ void EQUIPMENT_ESSENCE(class EQUIPMENT_ESSENCE *, const class EQUIPMENT_ESSENCE &); void EQUIPMENT_ESSENCE(class EQUIPMENT_ESSENCE *); /* size: 828, cachelines: 13, members: 87 */ /* last cacheline: 60 bytes */};
 
Upvote 0
Initiate Mage
Joined
Sep 2, 2017
Messages
4
Reaction score
0
FW sELedit 496


 
Last edited:
Upvote 0
I are an engineer
Joined
Feb 28, 2009
Messages
498
Reaction score
398
The structures are actually like this:

Code:
///////////////////////////////////////////////////////////////////////////////////////
//
// 装备的模板中要使用的附加属性的数据结构定义
//
//
///////////////////////////////////////////////////////////////////////////////////////

struct EQUIPMENT_ADDON
{
	enum _param_type
	{
		TYPE_INT,
		TYPE_FLOAT,
	};

	struct _param
	{
		union
		{
			int	int_value;
			float float_value;
		} value;
		int type;
	};
	unsigned int	id;							// 附加属性的ID
	namechar		name[32];					// 附加属性的名字

	int				type;						// 附加属性的类型

	int				num_params;					// 本附加属性的参数个数
	_param			param1;						// 第1个参数,可以是浮点数
	_param			param2;						// 第2个参数,可以是浮点数
	_param			param3;						// 第3个参数,可以是浮点数
};


///////////////////////////////////////////////////////////////////////////////////////
//
// 装备模板数据结构定义
//
//
///////////////////////////////////////////////////////////////////////////////////////

// 装备本体数据
struct EQUIPMENT_ESSENCE
{
	// 基本信息
	unsigned int	id;							// 装备(类型)ID
	namechar		name[32];					// 装备名称

	unsigned int	equip_type;					// 装备类别,可能的有 0-武器,1-防具,2-时装,3-翅膀,4-法宝
	unsigned int	equip_mask;					// 逻辑上可以装备的部位,由不同部位Mask组成,使用的部位代码为:
												// 1 << EQUIPIVTR_WEAPON,			// 武器
												// 1 << EQUIPIVTR_ASSIST,			// 副手
												// 1 << EQUIPIVTR_HELMET,			// 头盔
												// 1 << EQUIPIVTR_SHOULDER,			// 护肩
												// 1 << EQUIPIVTR_HAND,				// 护手
												// 1 << EQUIPIVTR_BREAST,			// 胸甲
												// 1 << EQUIPIVTR_BOLT,				// 腰带
												// 1 << EQUIPIVTR_PANTS,			// 裤子
												// 1 << EQUIPIVTR_SHOES,			// 鞋
												// 1 << EQUIPIVTR_NECKLACE,			// 项链
												// 1 << EQUIPIVTR_RING,				// 戒指
												// 1 << EQUIPIVTR_MAGIC_WEAPON,		// 法宝
												// 1 << EQUIPIVTR_WING,				// 翅膀
												// 1 << EQUIPIVTR_FASHION,			// 时装衣服
												// 1 <<	EQUIPIVTR_FASHION_HEAD,		// 时装头饰

	int				file_model_male;			// 男模型路径
	int				file_model_female;			// 女模型路径
	int				file_model_male_l;			// 男模型左手路径
	int				file_model_female_l;		// 女模型左手路径

	int				model_candidate_config;		// 可选模型配置表
	int				change_model_cost_item_count;// 更改模型消耗道具数
	unsigned int	is_can_change_color;		// 是否可变色
	unsigned int	devoured_offer_exp;			// 被法宝吞噬托提供的经验值
	unsigned int	magic_weapon_max_lvl;		// 法宝能升到的最高等级

	unsigned int	equip_location;				// 暂时不用,暂时由装备mask和skin_index有固定的对应关系
	unsigned int	show_type;					// 武器的表现类型,可能的有:0-正常, 1-法宝类

	int				normal_attack_sfx;			// 普通攻击时的音效路径
	int				armor_type;					// 被打击音效材质ID
	int				level;						// 装备等级

	unsigned int	character_combo_id;			// 职业限制
	unsigned int	require_gender;				// 性别限制,0-男,1-女,2-男女都可
	int				require_level;				// 等级限制

	// 本体属性
	int				dur;						// 耐久值
	int				money_per_dur;				// 修理1耐久需要的钱数
	int				hp;							// 生命值
	int				mp;							// 体力值
	int				min_dmg;					// 小攻击
	int				max_dmg;					// 大攻击
	int				defence;					// 防御值
	int				hit;						// 命中
	int				dodge;						// 闪避
	int				fight_power;				// 本体提供战斗力
	int				prop_ran_id;				// 本体属性随机表ID
	int				charge_cost;				// 充能费用
	int				addon_num;					// 生成时附加属性条数
	int				charge_addon_num;			// 可充能的附加属性条数
	int				is_can_charge_repeat;		// 可否重复充能			

	// 附加属性
	unsigned int	random_one_id;				// 重新随机1条附加属性库所需物品ID
	unsigned int	random_one_num;				// 重新随机1条附加属性库所需物品数量
	unsigned int	random_all_id;				// 重新随机所有附加属性库所需物品ID
	unsigned int	random_all_num;				// 重新随机所有附加属性库所需物品数量
	unsigned int	baptize_cost;				// 洗练费用
	unsigned int	id_prop_storage[6];			// 洗练属性库nID
	unsigned int	id_spe_prop_storate;		// 特殊属性库ID
	unsigned int	id_combo_suit;				// 套装库ID
	int				gem_num;					// 可镶嵌宝石数
	int				gem_lvl[4];					// 获得宝石孔1~4的强化等级
	unsigned int	id_combo_transfer_fee;		// 套装转移费用 
	unsigned int	max_enhance_level;			// 最高强化等级
	int				enhance_ratio_id;			// 强化成功率模板ID
	unsigned int	ext_ID;						// 强化属性增长表ID
	struct
	{
		int			cost_item_candidates[2];	// 强化所需道具
		int			cost_item_count;			// 强化所需道具数量
		int			cost_money;					// 强化所需金钱
	}
	enhance_configs[20];						// 强化1-20配置

	unsigned int	id_enhanse_show_conf;		// 强化光效配置表

	int				convert_to_equip_id;		// 对应兑换装备id
	int				is_shengxing;				// 是否可升星
	int				is_ronglian;				// 是否可被熔炼
	int				be_ronglian_exp_id;			// 被熔炼提供的升星经验模板ID
	int				shengxing_exp_id;			// 升星经验模板ID
	int				shengxing_addon_id;			// 升星附加属性增长表ID
	int				shengxing_useitem_id;		// 升星使用道具配置模板ID
	struct{
		int ronglian_need_enhanceLvl;			// 1-8星熔炼所需强化等级
		int ronglian_need_money;				// 1-8星熔炼所需金钱
	}ronglian_needs[8];

	int				fashion_seq;				// 时装衣柜排序
	int				fashion_opp;				// 时装衣柜异性对应的时装ID
	// 物品标准后缀:价钱和堆叠
	ITEM_COMMON_PROP item_common;
};

/////////////////////////////////////////////////////////////////////////////////////////////////
// 宝石
/////////////////////////////////////////////////////////////////////////////////////////////////
struct GEM_ESSENCE
{
	// 基本信息
	unsigned int	id;							// 装备(类型)ID
	namechar		name[32];					// 装备名称

	unsigned int	equip_mask;					// 可镶嵌的装备类别
	int				add_on_id;					// 属性石附加属性包的ID
	int				equip_lvl_up;				// 适应装备等级上限
	int				equip_lvl_down;				// 适应装备等级下限
	int				compose_lvl_lmt;			// 宝石合成等级限制
	int				gem_type;					// 宝石的类型
	int				composed_id;				// 合成后的产物ID
	int				compose_need_id;			// 合成时所需物品ID
	int				compose_need_count;			// 合成时所需物品数量
	int				compose_need_essence;		// 合成时所需本体数量
	int				compose_need_money;			// 合成消耗金币费用
	int				inlay_lvl_lmt;				// 镶嵌等级限制
	int				inlay_lvl_money;			// 镶嵌费用
	int				uninlay_lvl_money;			// 摘除费用
	int				item_pick_sound;			// 物品拾取音效
	int				item_drop_sound;			// 物品掉落音效
	// 物品标准后缀:价钱和堆叠
	ITEM_COMMON_PROP item_common;	
};

/////////////////////////////////////////////////////////////////////////////////////////////////
// 洗练属性
/////////////////////////////////////////////////////////////////////////////////////////////////
struct REFINE_ADDON
{
	unsigned int	id;							// ID
	namechar		name[32];					// 名称
	unsigned int	desc_text;					// 描述文字
	unsigned int	prop_type;					// 属性种类
	unsigned int	prop_set;					// 属性所属集合
	float			low;						// 正态分布下限
	float			high;						// 正态分布上限
	int				diff;						// 区分int和float(int填0,float填1)
	int				combat;						// 战斗力标准(这个洗练属性提供的最大战斗力)
};

And on and on...
 
Upvote 0
Junior Spellweaver
Joined
Jan 29, 2015
Messages
118
Reaction score
5
FW sELedit 496


This configuration doesn't seem to work. I'm using v451 (Chinese version)



It looks like the structure of PW, and the structure of FW is as follows:
Code:
struct EQUIPMENT_ESSENCE {	unsigned int               id;                   /*     0     4 */	namechar                   name[32];             /*     4    64 */	/* --- cacheline 1 boundary (64 bytes) was 4 bytes ago --- */	int                        item_quality;         /*    68     4 */	namechar                   simple_desc[16];      /*    72    32 */	unsigned int               init_enhance_level;   /*   104     4 */	unsigned int               is_forbid_transfer_ehance; /*   108     4 */	unsigned int               equip_type;           /*   112     4 */	unsigned int               is_alpha_fashion_equip; /*   116     4 */	unsigned int               base_star_level;      /*   120     4 */	unsigned int               equip_mask;           /*   124     4 */	/* --- cacheline 2 boundary (128 bytes) --- */	unsigned int               hide_equip_mask;      /*   128     4 */	unsigned int               show_mask;            /*   132     4 */	unsigned int               disable_show_mask;    /*   136     4 */	unsigned int               equip_usingtype_mask; /*   140     4 */	unsigned int               id_change_model;      /*   144     4 */	struct {		unsigned int               profession;           /*     0     4 */		unsigned int               race;                 /*     4     4 */		int                        file_model_male;      /*     8     4 */		int                        file_model_female;    /*    12     4 */		int                        file_model_male_l;    /*    16     4 */		int                        file_model_female_l;  /*    20     4 */		class  & operator=(class  *, const class   &);		void ._26(class  *, const class   &);		void ._26(class  *);		/* size: 24, cachelines: 1, members: 6 */		/* last cacheline: 24 bytes */	};	struct {		unsigned int       profession;           /*   148     4 */		unsigned int       race;                 /*   152     4 */		int                file_model_male;      /*   156     4 */		int                file_model_female;    /*   160     4 */		int                file_model_male_l;    /*   164     4 */		int                file_model_female_l;  /*   168     4 */		class  & operator=(class  *, const class   &);		void ._26(class  *, const class   &);		void ._26(class  *);	} models[8]; /*   148   192 */	/* --- cacheline 5 boundary (320 bytes) was 20 bytes ago --- */	int                        file_matter;          /*   340     4 */	int                        file_icon;            /*   344     4 */	unsigned int               equip_location;       /*   348     4 */	unsigned int               action_type;          /*   352     4 */	unsigned int               show_type;            /*   356     4 */	int                        normal_attack_sfx;    /*   360     4 */	unsigned int               music_pick;           /*   364     4 */	unsigned int               music_drop;           /*   368     4 */	int                        level;                /*   372     4 */	unsigned int               character_combo_id;   /*   376     4 */	unsigned int               mask_race;            /*   380     4 */	/* --- cacheline 6 boundary (384 bytes) --- */	unsigned int               require_gender;       /*   384     4 */	int                        require_level;        /*   388     4 */	int                        require_vip_level;    /*   392     4 */	int                        hp;                   /*   396     4 */	int                        mp;                   /*   400     4 */	int                        min_dmg;              /*   404     4 */	int                        dmg_val;              /*   408     4 */	int                        defence;              /*   412     4 */	int                        attack;               /*   416     4 */	int                        armor;                /*   420     4 */	int                        useful_in_judge;      /*   424     4 */	int                        random_quality_affix; /*   428     4 */	int                        id_quality;           /*   432     4 */	int                        id_prefix_addon_package; /*   436     4 */	int                        id_postfix_addon_package; /*   440     4 */	int                        id_equip_prop;        /*   444     4 */	/* --- cacheline 7 boundary (448 bytes) --- */	float                      attack_range;         /*   448     4 */	unsigned int               sell_for_bind_money;  /*   452     4 */	int                        price;                /*   456     4 */	int                        shop_price;           /*   460     4 */	int                        sign_price;           /*   464     4 */	int                        refine_price[12];     /*   468    48 */	/* --- cacheline 8 boundary (512 bytes) was 4 bytes ago --- */	int                        level_stone_echance[4]; /*   516    16 */	int                        id_sign_addon_package; /*   532     4 */	int                        refine_max_level;     /*   536     4 */	unsigned int               id_estone[2];         /*   540     8 */	int                        enhanced_prop_package[12]; /*   548    48 */	/* --- cacheline 9 boundary (576 bytes) was 20 bytes ago --- */	int                        id_identify;          /*   596     4 */	int                        basic_show_level;     /*   600     4 */	int                        can_sign;             /*   604     4 */	int                        id_special_addon_package; /*   608     4 */	unsigned int               color[5];             /*   612    20 */	int                        show_gfx_need_gem_value; /*   632     4 */	int                        gfx_pvp_soul_status;  /*   636     4 */	/* --- cacheline 10 boundary (640 bytes) --- */	int                        id_full_pvp_soul_skill; /*   640     4 */	int                        id_cancel_full_pvp_soul_skill; /*   644     4 */	unsigned int               can_decompose;        /*   648     4 */	struct {		int                        id;                   /*     0     4 */		int                        max_num;              /*     4     4 */		int                        min_num;              /*     8     4 */		class  & operator=(class  *, const class   &);		void ._27(class  *, const class   &);		void ._27(class  *);		/* size: 12, cachelines: 1, members: 3 */		/* last cacheline: 12 bytes */	};	struct {		int                id;                   /*   652     4 */		int                max_num;              /*   656     4 */		int                min_num;              /*   660     4 */		class  & operator=(class  *, const class   &);		void ._27(class  *, const class   &);		void ._27(class  *);	} decompose_main_result[3]; /*   652    36 */	struct {		int                        id;                   /*     0     4 */		float                      ratio;                /*     4     4 */		class  & operator=(class  *, const class   &);		void ._28(class  *, const class   &);		void ._28(class  *);		/* size: 8, cachelines: 1, members: 2 */		/* last cacheline: 8 bytes */	};	struct {		int                id;                   /*   688     4 */		float              ratio;                /*   692     4 */		class  & operator=(class  *, const class   &);		void ._28(class  *, const class   &);		void ._28(class  *);	} decompose_sub_result[2]; /*   688    16 */	/* --- cacheline 11 boundary (704 bytes) --- */	int                        max_recast_hp;        /*   704     4 */	int                        min_recast_hp;        /*   708     4 */	int                        max_recast_mp;        /*   712     4 */	int                        min_recast_mp;        /*   716     4 */	int                        max_recast_dmg;       /*   720     4 */	int                        min_recast_dmg;       /*   724     4 */	int                        max_recast_defense;   /*   728     4 */	int                        min_recast_defense;   /*   732     4 */	int                        max_recast_attack;    /*   736     4 */	int                        min_recast_attack;    /*   740     4 */	int                        max_recast_armor;     /*   744     4 */	int                        min_recast_armor;     /*   748     4 */	struct {		unsigned int               tool_id;              /*     0     4 */		int                        probability;          /*     4     4 */		int                        money;                /*     8     4 */		class  & operator=(class  *, const class   &);		void ._29(class  *, const class   &);		void ._29(class  *);		/* size: 12, cachelines: 1, members: 3 */		/* last cacheline: 12 bytes */	};	struct {		unsigned int       tool_id;              /*   752     4 */		int                probability;          /*   756     4 */		int                money;                /*   760     4 */		class  & operator=(class  *, const class   &);		void ._29(class  *, const class   &);		void ._29(class  *);	} extend_identify_attr_tool[2]; /*   752    24 */	/* --- cacheline 12 boundary (768 bytes) was 8 bytes ago --- */	int                        auction_dir[3][2];    /*   776    24 */	unsigned int               can_auction;          /*   800     4 */	float                      auction_fee;          /*   804     4 */	unsigned int               fashion_dye_cfg_id;   /*   808     4 */	unsigned int               equip_transform_cfg_id; /*   812     4 */	unsigned int               fashion_adorn_hook_name; /*   816     4 */	int                        pile_num_max;         /*   820     4 */	unsigned int               proc_type;            /*   824     4 */	class EQUIPMENT_ESSENCE & operator=(class EQUIPMENT_ESSENCE *, const class EQUIPMENT_ESSENCE  &); /* linkage=_ZN17EQUIPMENT_ESSENCEaSERKS_ */	void EQUIPMENT_ESSENCE(class EQUIPMENT_ESSENCE *, const class EQUIPMENT_ESSENCE  &);	void EQUIPMENT_ESSENCE(class EQUIPMENT_ESSENCE *);	/* size: 828, cachelines: 13, members: 87 */	/* last cacheline: 60 bytes */};
 
Upvote 0
I are an engineer
Joined
Feb 28, 2009
Messages
498
Reaction score
398
This configuration doesn't seem to work. I'm using v451 (Chinese version)



It looks like the structure of PW, and the structure of FW is as follows:
Code:
struct EQUIPMENT_ESSENCE {	unsigned int               id;                   /*     0     4 */	namechar                   name[32];             /*     4    64 */	/* --- cacheline 1 boundary (64 bytes) was 4 bytes ago --- */	int                        item_quality;         /*    68     4 */	namechar                   simple_desc[16];      /*    72    32 */	unsigned int               init_enhance_level;   /*   104     4 */	unsigned int               is_forbid_transfer_ehance; /*   108     4 */	unsigned int               equip_type;           /*   112     4 */	unsigned int               is_alpha_fashion_equip; /*   116     4 */	unsigned int               base_star_level;      /*   120     4 */	unsigned int               equip_mask;           /*   124     4 */	/* --- cacheline 2 boundary (128 bytes) --- */	unsigned int               hide_equip_mask;      /*   128     4 */	unsigned int               show_mask;            /*   132     4 */	unsigned int               disable_show_mask;    /*   136     4 */	unsigned int               equip_usingtype_mask; /*   140     4 */	unsigned int               id_change_model;      /*   144     4 */	struct {		unsigned int               profession;           /*     0     4 */		unsigned int               race;                 /*     4     4 */		int                        file_model_male;      /*     8     4 */		int                        file_model_female;    /*    12     4 */		int                        file_model_male_l;    /*    16     4 */		int                        file_model_female_l;  /*    20     4 */		class  & operator=(class  *, const class   &);		void ._26(class  *, const class   &);		void ._26(class  *);		/* size: 24, cachelines: 1, members: 6 */		/* last cacheline: 24 bytes */	};	struct {		unsigned int       profession;           /*   148     4 */		unsigned int       race;                 /*   152     4 */		int                file_model_male;      /*   156     4 */		int                file_model_female;    /*   160     4 */		int                file_model_male_l;    /*   164     4 */		int                file_model_female_l;  /*   168     4 */		class  & operator=(class  *, const class   &);		void ._26(class  *, const class   &);		void ._26(class  *);	} models[8]; /*   148   192 */	/* --- cacheline 5 boundary (320 bytes) was 20 bytes ago --- */	int                        file_matter;          /*   340     4 */	int                        file_icon;            /*   344     4 */	unsigned int               equip_location;       /*   348     4 */	unsigned int               action_type;          /*   352     4 */	unsigned int               show_type;            /*   356     4 */	int                        normal_attack_sfx;    /*   360     4 */	unsigned int               music_pick;           /*   364     4 */	unsigned int               music_drop;           /*   368     4 */	int                        level;                /*   372     4 */	unsigned int               character_combo_id;   /*   376     4 */	unsigned int               mask_race;            /*   380     4 */	/* --- cacheline 6 boundary (384 bytes) --- */	unsigned int               require_gender;       /*   384     4 */	int                        require_level;        /*   388     4 */	int                        require_vip_level;    /*   392     4 */	int                        hp;                   /*   396     4 */	int                        mp;                   /*   400     4 */	int                        min_dmg;              /*   404     4 */	int                        dmg_val;              /*   408     4 */	int                        defence;              /*   412     4 */	int                        attack;               /*   416     4 */	int                        armor;                /*   420     4 */	int                        useful_in_judge;      /*   424     4 */	int                        random_quality_affix; /*   428     4 */	int                        id_quality;           /*   432     4 */	int                        id_prefix_addon_package; /*   436     4 */	int                        id_postfix_addon_package; /*   440     4 */	int                        id_equip_prop;        /*   444     4 */	/* --- cacheline 7 boundary (448 bytes) --- */	float                      attack_range;         /*   448     4 */	unsigned int               sell_for_bind_money;  /*   452     4 */	int                        price;                /*   456     4 */	int                        shop_price;           /*   460     4 */	int                        sign_price;           /*   464     4 */	int                        refine_price[12];     /*   468    48 */	/* --- cacheline 8 boundary (512 bytes) was 4 bytes ago --- */	int                        level_stone_echance[4]; /*   516    16 */	int                        id_sign_addon_package; /*   532     4 */	int                        refine_max_level;     /*   536     4 */	unsigned int               id_estone[2];         /*   540     8 */	int                        enhanced_prop_package[12]; /*   548    48 */	/* --- cacheline 9 boundary (576 bytes) was 20 bytes ago --- */	int                        id_identify;          /*   596     4 */	int                        basic_show_level;     /*   600     4 */	int                        can_sign;             /*   604     4 */	int                        id_special_addon_package; /*   608     4 */	unsigned int               color[5];             /*   612    20 */	int                        show_gfx_need_gem_value; /*   632     4 */	int                        gfx_pvp_soul_status;  /*   636     4 */	/* --- cacheline 10 boundary (640 bytes) --- */	int                        id_full_pvp_soul_skill; /*   640     4 */	int                        id_cancel_full_pvp_soul_skill; /*   644     4 */	unsigned int               can_decompose;        /*   648     4 */	struct {		int                        id;                   /*     0     4 */		int                        max_num;              /*     4     4 */		int                        min_num;              /*     8     4 */		class  & operator=(class  *, const class   &);		void ._27(class  *, const class   &);		void ._27(class  *);		/* size: 12, cachelines: 1, members: 3 */		/* last cacheline: 12 bytes */	};	struct {		int                id;                   /*   652     4 */		int                max_num;              /*   656     4 */		int                min_num;              /*   660     4 */		class  & operator=(class  *, const class   &);		void ._27(class  *, const class   &);		void ._27(class  *);	} decompose_main_result[3]; /*   652    36 */	struct {		int                        id;                   /*     0     4 */		float                      ratio;                /*     4     4 */		class  & operator=(class  *, const class   &);		void ._28(class  *, const class   &);		void ._28(class  *);		/* size: 8, cachelines: 1, members: 2 */		/* last cacheline: 8 bytes */	};	struct {		int                id;                   /*   688     4 */		float              ratio;                /*   692     4 */		class  & operator=(class  *, const class   &);		void ._28(class  *, const class   &);		void ._28(class  *);	} decompose_sub_result[2]; /*   688    16 */	/* --- cacheline 11 boundary (704 bytes) --- */	int                        max_recast_hp;        /*   704     4 */	int                        min_recast_hp;        /*   708     4 */	int                        max_recast_mp;        /*   712     4 */	int                        min_recast_mp;        /*   716     4 */	int                        max_recast_dmg;       /*   720     4 */	int                        min_recast_dmg;       /*   724     4 */	int                        max_recast_defense;   /*   728     4 */	int                        min_recast_defense;   /*   732     4 */	int                        max_recast_attack;    /*   736     4 */	int                        min_recast_attack;    /*   740     4 */	int                        max_recast_armor;     /*   744     4 */	int                        min_recast_armor;     /*   748     4 */	struct {		unsigned int               tool_id;              /*     0     4 */		int                        probability;          /*     4     4 */		int                        money;                /*     8     4 */		class  & operator=(class  *, const class   &);		void ._29(class  *, const class   &);		void ._29(class  *);		/* size: 12, cachelines: 1, members: 3 */		/* last cacheline: 12 bytes */	};	struct {		unsigned int       tool_id;              /*   752     4 */		int                probability;          /*   756     4 */		int                money;                /*   760     4 */		class  & operator=(class  *, const class   &);		void ._29(class  *, const class   &);		void ._29(class  *);	} extend_identify_attr_tool[2]; /*   752    24 */	/* --- cacheline 12 boundary (768 bytes) was 8 bytes ago --- */	int                        auction_dir[3][2];    /*   776    24 */	unsigned int               can_auction;          /*   800     4 */	float                      auction_fee;          /*   804     4 */	unsigned int               fashion_dye_cfg_id;   /*   808     4 */	unsigned int               equip_transform_cfg_id; /*   812     4 */	unsigned int               fashion_adorn_hook_name; /*   816     4 */	int                        pile_num_max;         /*   820     4 */	unsigned int               proc_type;            /*   824     4 */	class EQUIPMENT_ESSENCE & operator=(class EQUIPMENT_ESSENCE *, const class EQUIPMENT_ESSENCE  &); /* linkage=_ZN17EQUIPMENT_ESSENCEaSERKS_ */	void EQUIPMENT_ESSENCE(class EQUIPMENT_ESSENCE *, const class EQUIPMENT_ESSENCE  &);	void EQUIPMENT_ESSENCE(class EQUIPMENT_ESSENCE *);	/* size: 828, cachelines: 13, members: 87 */	/* last cacheline: 60 bytes */};

Your structure is nothing more than the output of an IDA Pro disassembly,
the structures I provided above are from the actual official sources of
Forsaken World. There is a big difference between official sources and the
output of a disassembly...
 
Upvote 0
Experienced Elementalist
Joined
Jul 2, 2012
Messages
221
Reaction score
21
Difference only in comments. GDB PTYPE elementdataman gives u the same structure. But your structure from PW not FW.

here example FW's:
Code:
Reading symbols from libtask.so...done.
(gdb) ptype EQUIPMENT_ESSENCE
type = struct EQUIPMENT_ESSENCE {
    unsigned int id;
    namechar name[32];
    int item_quality;
    namechar simple_desc[16];
    unsigned int init_enhance_level;
    unsigned int is_forbid_transfer_ehance;
    unsigned int suit_id;
    unsigned int class_id;
    unsigned int equip_type;
    unsigned int is_alpha_fashion_equip;
    unsigned int base_star_level;
    unsigned int equip_mask;
    unsigned int hide_equip_mask;
    unsigned int show_mask;
    unsigned int disable_show_mask;
    unsigned int equip_usingtype_mask;
    unsigned int id_change_model;
    struct {
        unsigned int profession;
        unsigned int race;
        int file_model_male;
        int file_model_female;
        int file_model_male_l;
        int file_model_female_l;
    } models[8];
    int file_matter;
    int file_icon;
    unsigned int equip_location;
    unsigned int action_type;
    unsigned int show_type;
    int normal_attack_sfx;
    unsigned int music_pick;
    unsigned int music_drop;
    int level;
    unsigned int character_combo_id;
    unsigned int mask_race;
    unsigned int require_gender;
    int require_level;
    int require_vip_level;
    int hp;
    int mp;
    int min_dmg;
    int dmg_val;
    int defence;
    int attack;
    int armor;
    int useful_in_judge;
    int random_quality_affix;
    int id_quality;
    int id_prefix_addon_package;
    int id_postfix_addon_package;
    int id_equip_prop;
    float attack_range;
    unsigned int sell_for_bind_money;
    int price;
    int shop_price;
    int sign_price;
    int refine_price[12];
    int level_stone_echance[4];
    int id_sign_addon_package;
    int refine_max_level;
    unsigned int id_estone[3];
    int enhanced_prop_package[12];
    int id_identify;
    int basic_show_level;
    int can_sign;
    int id_special_addon_package;
    unsigned int color[5];
    int show_gfx_need_gem_value;
    int gfx_pvp_soul_status;
    int id_full_pvp_soul_skill;
    int id_cancel_full_pvp_soul_skill;
    unsigned int can_decompose;
    struct {
        int id;
        int max_num;
        int min_num;
    } decompose_main_result[3];
    struct {
        int id;
        float ratio;
    } decompose_sub_result[2];
    int max_recast_hp;
    int min_recast_hp;
    int max_recast_mp;
    int min_recast_mp;
    int max_recast_dmg;
    int min_recast_dmg;
    int max_recast_defense;
    int min_recast_defense;
    int max_recast_attack;
    int min_recast_attack;
    int max_recast_armor;
    int min_recast_armor;
    struct {
        unsigned int tool_id;
        int probability;
        int money;
    } extend_identify_attr_tool[2];
    int auction_dir[3][2];
    unsigned int can_auction;
    float auction_fee;
    unsigned int fashion_dye_cfg_id;
    unsigned int equip_transform_cfg_id;
    unsigned int fashion_adorn_hook_name;
    int pile_num_max;
    unsigned int proc_type;
}
 
Last edited:
Upvote 0
Junior Spellweaver
Joined
Jan 29, 2015
Messages
118
Reaction score
5
Year,your structure is the same as that I exported from libskill.so
Difference only in comments. GDB PTYPE elementdataman gives u the same structure. But your structure from PW not FW.

here example FW's:
Code:
Reading symbols from libtask.so...done.
(gdb) ptype EQUIPMENT_ESSENCE
type = struct EQUIPMENT_ESSENCE {
    unsigned int id;
    namechar name[32];
    int item_quality;
    namechar simple_desc[16];
    unsigned int init_enhance_level;
    unsigned int is_forbid_transfer_ehance;
    unsigned int suit_id;
    unsigned int class_id;
    unsigned int equip_type;
    unsigned int is_alpha_fashion_equip;
    unsigned int base_star_level;
    unsigned int equip_mask;
    unsigned int hide_equip_mask;
    unsigned int show_mask;
    unsigned int disable_show_mask;
    unsigned int equip_usingtype_mask;
    unsigned int id_change_model;
    struct {
        unsigned int profession;
        unsigned int race;
        int file_model_male;
        int file_model_female;
        int file_model_male_l;
        int file_model_female_l;
    } models[8];
    int file_matter;
    int file_icon;
    unsigned int equip_location;
    unsigned int action_type;
    unsigned int show_type;
    int normal_attack_sfx;
    unsigned int music_pick;
    unsigned int music_drop;
    int level;
    unsigned int character_combo_id;
    unsigned int mask_race;
    unsigned int require_gender;
    int require_level;
    int require_vip_level;
    int hp;
    int mp;
    int min_dmg;
    int dmg_val;
    int defence;
    int attack;
    int armor;
    int useful_in_judge;
    int random_quality_affix;
    int id_quality;
    int id_prefix_addon_package;
    int id_postfix_addon_package;
    int id_equip_prop;
    float attack_range;
    unsigned int sell_for_bind_money;
    int price;
    int shop_price;
    int sign_price;
    int refine_price[12];
    int level_stone_echance[4];
    int id_sign_addon_package;
    int refine_max_level;
    unsigned int id_estone[3];
    int enhanced_prop_package[12];
    int id_identify;
    int basic_show_level;
    int can_sign;
    int id_special_addon_package;
    unsigned int color[5];
    int show_gfx_need_gem_value;
    int gfx_pvp_soul_status;
    int id_full_pvp_soul_skill;
    int id_cancel_full_pvp_soul_skill;
    unsigned int can_decompose;
    struct {
        int id;
        int max_num;
        int min_num;
    } decompose_main_result[3];
    struct {
        int id;
        float ratio;
    } decompose_sub_result[2];
    int max_recast_hp;
    int min_recast_hp;
    int max_recast_mp;
    int min_recast_mp;
    int max_recast_dmg;
    int min_recast_dmg;
    int max_recast_defense;
    int min_recast_defense;
    int max_recast_attack;
    int min_recast_attack;
    int max_recast_armor;
    int min_recast_armor;
    struct {
        unsigned int tool_id;
        int probability;
        int money;
    } extend_identify_attr_tool[2];
    int auction_dir[3][2];
    unsigned int can_auction;
    float auction_fee;
    unsigned int fashion_dye_cfg_id;
    unsigned int equip_transform_cfg_id;
    unsigned int fashion_adorn_hook_name;
    int pile_num_max;
    unsigned int proc_type;
}
 
Upvote 0
Back
Top