#ifndef __GNET_GROLEDETAIL_RPCDATA
#define __GNET_GROLEDETAIL_RPCDATA

#include "rpcdefs.h"

#include "grolestatus"
#include "grolepocket"
#include "groleinventory"
#include "grolestorehouse"
#include "groletask"
#include "gshoplog"
#include "guserstorehouse"
#include "gfactionalliance"
#include "gfactionhostile"

namespace GNET
{
	class GRoleDetail : public GNET::Rpc::Data
	{
	public:
		char version;
		unsigned int id;
		unsigned int userid;
		GRoleStatus status;
		Octets name;
		int race;
		int cls;
		unsigned int spouse;
		unsigned char gender;
		int create_time;
		int lastlogin_time;
		int cash_add;
		int cash_total;
		int cash_used;
		int cash_serial;
		unsigned int factionid;
		int factionrole;
		Octets custom_data;
		unsigned int custom_stamp;
		GRolePocket inventory;
		GRoleInventoryVector equipment;
		GRoleStorehouse storehouse;
		GRoleTask task;
		Octets addiction;
		std::vector<GShopLog> logs;
		int bonus_add;
		int bonus_reward;
		int bonus_used;
		int referrer;
		GUserStorehouse userstorehouse;
		Octets taskcounter;
		GFactionAllianceVector factionalliance;
		GFactionHostileVector factionhostile;
		int mall_consumption;
		int src_zoneid;
		int64_t unifid;
		int vip_level;
		int score_add;
		int score_cost;
		int score_consume;
		int day_clear_stamp;
		int week_clear_stamp;
		int month_clear_stamp;
		int year_clear_stamp;
		Octets purchase_limit_data;

	public:
		GRoleDetail (char l_version = 1,unsigned int l_id = 0,unsigned int l_userid = 0
			,const Octets& l_name = Octets(0),int l_race = 0,int l_cls = 0
			,unsigned int l_spouse = 0,unsigned char l_gender = 0,int l_create_time = 0
			,int l_lastlogin_time = 0,int l_cash_add = 0,int l_cash_total = 0
			,int l_cash_used = 0,int l_cash_serial = 0,unsigned int l_factionid = 0
			,int l_factionrole = 0,unsigned int l_custom_stamp = 0,int l_bonus_add = 0
			,int l_bonus_reward = 0,int l_bonus_used = 0,int l_referrer = 0
			,int l_mall_consumption = 0,int l_src_zoneid = 0,int64_t l_unifid = 0
			,int l_vip_level = 0,int l_score_add = 0,int l_score_cost = 0
			,int l_score_consume = 0,int l_day_clear_stamp = 0,int l_week_clear_stamp = 0
			,int l_month_clear_stamp = 0,int l_year_clear_stamp = 0,const Octets& l_purchase_limit_data = Octets(0))
			: version(l_version),id(l_id),userid(l_userid)
			,name(l_name),race(l_race),cls(l_cls)
			,spouse(l_spouse),gender(l_gender),create_time(l_create_time)
			,lastlogin_time(l_lastlogin_time),cash_add(l_cash_add),cash_total(l_cash_total)
			,cash_used(l_cash_used),cash_serial(l_cash_serial),factionid(l_factionid)
			,factionrole(l_factionrole),custom_stamp(l_custom_stamp),bonus_add(l_bonus_add)
			,bonus_reward(l_bonus_reward),bonus_used(l_bonus_used),referrer(l_referrer)
			,mall_consumption(l_mall_consumption),src_zoneid(l_src_zoneid),unifid(l_unifid)
			,vip_level(l_vip_level),score_add(l_score_add),score_cost(l_score_cost)
			,score_consume(l_score_consume),day_clear_stamp(l_day_clear_stamp),week_clear_stamp(l_week_clear_stamp)
			,month_clear_stamp(l_month_clear_stamp),year_clear_stamp(l_year_clear_stamp),purchase_limit_data(l_purchase_limit_data)
		{
		}

		GRoleDetail(const GRoleDetail &rhs)
			: version(rhs.version),id(rhs.id),userid(rhs.userid),
			status(rhs.status),name(rhs.name),race(rhs.race),
			cls(rhs.cls),spouse(rhs.spouse),gender(rhs.gender),
			create_time(rhs.create_time),lastlogin_time(rhs.lastlogin_time),cash_add(rhs.cash_add),
			cash_total(rhs.cash_total),cash_used(rhs.cash_used),cash_serial(rhs.cash_serial),
			factionid(rhs.factionid),factionrole(rhs.factionrole),custom_data(rhs.custom_data),
			custom_stamp(rhs.custom_stamp),inventory(rhs.inventory),equipment(rhs.equipment),
			storehouse(rhs.storehouse),task(rhs.task),addiction(rhs.addiction),
			logs(rhs.logs),bonus_add(rhs.bonus_add),bonus_reward(rhs.bonus_reward),
			bonus_used(rhs.bonus_used),referrer(rhs.referrer),userstorehouse(rhs.userstorehouse),
			taskcounter(rhs.taskcounter),factionalliance(rhs.factionalliance),factionhostile(rhs.factionhostile),
			mall_consumption(rhs.mall_consumption),src_zoneid(rhs.src_zoneid),unifid(rhs.unifid),
			vip_level(rhs.vip_level),score_add(rhs.score_add),score_cost(rhs.score_cost),
			score_consume(rhs.score_consume),day_clear_stamp(rhs.day_clear_stamp),week_clear_stamp(rhs.week_clear_stamp),
			month_clear_stamp(rhs.month_clear_stamp),year_clear_stamp(rhs.year_clear_stamp),purchase_limit_data(rhs.purchase_limit_data) { }

		Rpc::Data *Clone() const { return new GRoleDetail(*this); }

		Rpc::Data& operator = (const Rpc::Data &rhs)
		{
			const GRoleDetail *r = dynamic_cast<const GRoleDetail *>(&rhs);
			if (r && r != this)
			{
				version = r->version;
				id = r->id;
				userid = r->userid;
				status = r->status;
				name = r->name;
				race = r->race;
				cls = r->cls;
				spouse = r->spouse;
				gender = r->gender;
				create_time = r->create_time;
				lastlogin_time = r->lastlogin_time;
				cash_add = r->cash_add;
				cash_total = r->cash_total;
				cash_used = r->cash_used;
				cash_serial = r->cash_serial;
				factionid = r->factionid;
				factionrole = r->factionrole;
				custom_data = r->custom_data;
				custom_stamp = r->custom_stamp;
				inventory = r->inventory;
				equipment = r->equipment;
				storehouse = r->storehouse;
				task = r->task;
				addiction = r->addiction;
				logs = r->logs;
				bonus_add = r->bonus_add;
				bonus_reward = r->bonus_reward;
				bonus_used = r->bonus_used;
				referrer = r->referrer;
				userstorehouse = r->userstorehouse;
				taskcounter = r->taskcounter;
				factionalliance = r->factionalliance;
				factionhostile = r->factionhostile;
				mall_consumption = r->mall_consumption;
				src_zoneid = r->src_zoneid;
				unifid = r->unifid;
				vip_level = r->vip_level;
				score_add = r->score_add;
				score_cost = r->score_cost;
				score_consume = r->score_consume;
				day_clear_stamp = r->day_clear_stamp;
				week_clear_stamp = r->week_clear_stamp;
				month_clear_stamp = r->month_clear_stamp;
				year_clear_stamp = r->year_clear_stamp;
				purchase_limit_data = r->purchase_limit_data;
			}
			return *this;
		}

		GRoleDetail& operator = (const GRoleDetail &rhs)
		{
			const GRoleDetail *r = &rhs;
			if (r && r != this)
			{
				version = r->version;
				id = r->id;
				userid = r->userid;
				status = r->status;
				name = r->name;
				race = r->race;
				cls = r->cls;
				spouse = r->spouse;
				gender = r->gender;
				create_time = r->create_time;
				lastlogin_time = r->lastlogin_time;
				cash_add = r->cash_add;
				cash_total = r->cash_total;
				cash_used = r->cash_used;
				cash_serial = r->cash_serial;
				factionid = r->factionid;
				factionrole = r->factionrole;
				custom_data = r->custom_data;
				custom_stamp = r->custom_stamp;
				inventory = r->inventory;
				equipment = r->equipment;
				storehouse = r->storehouse;
				task = r->task;
				addiction = r->addiction;
				logs = r->logs;
				bonus_add = r->bonus_add;
				bonus_reward = r->bonus_reward;
				bonus_used = r->bonus_used;
				referrer = r->referrer;
				userstorehouse = r->userstorehouse;
				taskcounter = r->taskcounter;
				factionalliance = r->factionalliance;
				factionhostile = r->factionhostile;
				mall_consumption = r->mall_consumption;
				src_zoneid = r->src_zoneid;
				unifid = r->unifid;
				vip_level = r->vip_level;
				score_add = r->score_add;
				score_cost = r->score_cost;
				score_consume = r->score_consume;
				day_clear_stamp = r->day_clear_stamp;
				week_clear_stamp = r->week_clear_stamp;
				month_clear_stamp = r->month_clear_stamp;
				year_clear_stamp = r->year_clear_stamp;
				purchase_limit_data = r->purchase_limit_data;
			}
			return *this;
		}

		OctetsStream& marshal(OctetsStream & os) const
		{
			os << (char)(1);
			os << id;
			os << userid;
			os << status;
			os << name;
			os << race;
			os << cls;
			os << spouse;
			os << gender;
			os << create_time;
			os << lastlogin_time;
			os << cash_add;
			os << cash_total;
			os << cash_used;
			os << cash_serial;
			os << factionid;
			os << factionrole;
			os << custom_data;
			os << custom_stamp;
			os << inventory;
			os << equipment;
			os << storehouse;
			os << task;
			os << addiction;
			os << logs;
			os << bonus_add;
			os << bonus_reward;
			os << bonus_used;
			os << referrer;
			os << userstorehouse;
			os << taskcounter;
			os << factionalliance;
			os << factionhostile;
			os << mall_consumption;
			os << src_zoneid;
			os << unifid;
			os << vip_level;
			os << score_add;
			os << score_cost;
			os << score_consume;
			os << day_clear_stamp;
			os << week_clear_stamp;
			os << month_clear_stamp;
			os << year_clear_stamp;
			os << purchase_limit_data;
			return os;
		}

		const OctetsStream& unmarshal(const OctetsStream &os)
		{
			os >> version;
			os >> id;
			os >> userid;
			os >> status;
			os >> name;
			os >> race;
			os >> cls;
			os >> spouse;
			os >> gender;
			os >> create_time;
			os >> lastlogin_time;
			os >> cash_add;
			os >> cash_total;
			os >> cash_used;
			os >> cash_serial;
			os >> factionid;
			os >> factionrole;
			os >> custom_data;
			os >> custom_stamp;
			os >> inventory;
			os >> equipment;
			os >> storehouse;
			os >> task;
			os >> addiction;
			os >> logs;
			os >> bonus_add;
			os >> bonus_reward;
			os >> bonus_used;
			os >> referrer;
			os >> userstorehouse;
			os >> taskcounter;
			os >> factionalliance;
			os >> factionhostile;
			os >> mall_consumption;
			os >> src_zoneid;
			os >> unifid;
			os >> vip_level;
			os >> score_add;
			os >> score_cost;
			os >> score_consume;
			os >> day_clear_stamp;
			os >> week_clear_stamp;
			os >> month_clear_stamp;
			os >> year_clear_stamp;
			os >> purchase_limit_data;
			return os;
		}

	};
};
#endif
