/*  
    EQ2Emulator:  Everquest II Server Emulator
    Copyright (C) 2007  EQ2EMulator Development Team (http://www.eq2emulator.net)

    This file is part of EQ2Emulator.

    EQ2Emulator is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    EQ2Emulator is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with EQ2Emulator.  If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _EQ2COMMON_STRUCTS_
#define _EQ2COMMON_STRUCTS_

#define SPAWN_PACKET_SIZE					895
#define EQUIPMENT_L_WEAPON_INDEX			0 //chars left hand weapon
#define EQUIPMENT_R_WEAPON_INDEX			1 //chars right hand weapon
#define EQUIPMENT_HELMET					2

#pragma pack(1)
struct KeyGen_Struct{
	int32 size;
};
struct KeyGen_End_Struct{
	int32	exponent_len;
	int8	exponent;
};
struct LoginByNumRequest_Struct{
	int32	account_id;
	int32	access_code;
	int16	version;
	int32	unknown2[5];
};
struct LS_LoginResponse{
	int8	reply_code; // 0 granted, 1 denied
	int16	unknown01;
	int8	unknown02;
	sint32	unknown03; // -1 denied, 0 granted
	sint32	unknown04; 
	sint32	unknown05;
	sint32	unknown06;
	int8	unknown07;
	int8	unknown08;
	int8	unknown09;
	int8	unknown10;
	sint32	unknown11;
	int32	accountid;
	int16	unknown12;
};
#pragma pack()
struct EQ2_EquipmentItem{
	int16		type;
	EQ2_Color	color;
	EQ2_Color	highlight;
};
struct EQ2_Equipment{
	int16		equip_id[25];
	EQ2_Color	color[25];
	EQ2_Color	highlight[25];
};
#pragma pack(1)
struct CharFeatures{	
	int16				hair_type;
	int16				hair_face_type;
	int16				wing_type;
	int16				chest_type;
	int16				legs_type;
	sint8				eye_type[3];
	sint8				ear_type[3];
	sint8				eye_brow_type[3];
	sint8				cheek_type[3];
	sint8				lip_type[3];
	sint8				chin_type[3];
	sint8				nose_type[3];
	sint8				body_size;
	sint8				body_age;
	sint8				soga_eye_type[3];
	sint8				soga_ear_type[3];
	sint8				soga_eye_brow_type[3];
	sint8				soga_cheek_type[3];
	int16				soga_chest_type;
	int16				soga_legs_type;
	sint8				soga_lip_type[3];
	sint8				soga_chin_type[3];
	sint8				soga_nose_type[3];
	int16				soga_hair_type;
	int16				soga_hair_face_type;
	int16				combat_voice;
	int16				emote_voice;
	int16				mount_model_type;

	EQ2_Color			mount_saddle_color;
	EQ2_Color			mount_color;
	EQ2_Color			skin_color;
	EQ2_Color			eye_color;
	EQ2_Color			hair_type_color;
	EQ2_Color			hair_type_highlight_color;	
	EQ2_Color			hair_face_color;
	EQ2_Color			hair_face_highlight_color;	
	EQ2_Color			hair_highlight_color;
	EQ2_Color			wing_color1;
	EQ2_Color			wing_color2;	
	EQ2_Color			shirt_color;	
	EQ2_Color			pants_color;	
	EQ2_Color			hair_color1;
	EQ2_Color			hair_color2;	
	EQ2_Color			soga_skin_color;
	EQ2_Color			soga_eye_color;	
	EQ2_Color			soga_hair_color1;
	EQ2_Color			soga_hair_color2;	
	EQ2_Color			soga_hair_type_color;
	EQ2_Color			soga_hair_type_highlight_color;	
	EQ2_Color			soga_hair_face_color;
	EQ2_Color			soga_hair_face_highlight_color;
	EQ2_Color			soga_hair_highlight_color;
};
struct PositionData{
	int32			grid_id;
	sint8			Speed1;
	sint8			Speed2;
	sint16			Dir1;
	sint16			Dir2;
	sint16          Pitch1;
	sint16          Pitch2;
	sint16          Roll;
	float			X;
	float			Y;
	float			Z;
	float			X2;
	float			Y2;
	float			Z2;
	float			X3;
	float			Y3;
	float			Z3;
	float			SpawnOrigX;
	float			SpawnOrigY;
	float			SpawnOrigZ;
	float			SpawnOrigHeading;
	float           SpawnOrigPitch;
	float           SpawnOrigRoll;
	float			SpeedX;
	float			SpeedY;
	float			SpeedZ;
	float			SideSpeed;
	int16			collision_radius;
	int16			state;
};
struct AppearanceData {
	PositionData	pos;
	int16			model_type;
	int16			soga_model_type;
	int16			activity_status;
	int16			visual_state;
	int16			action_state;
	int16			mood_state;
	int16           emote_state;
	int8			attackable;
	int8			icon;
	int8            hide_hood;
	int8			show_level;
	int8			locked_no_loot;
	int8			quest_flag;
	int8			heroic_flag;
	int8			show_command_icon;
	int8			display_hand_icon;
	int8			player_flag;
	int8			targetable;
	int8			display_name;
	char			sub_title[255]; //Guild
	int32			display_hp;//0 = 100 percent
	int32			power_left; //bar not shown if >=100
	int8			adventure_class;
	int8			tradeskill_class;
	int8			level;
	int8			tradeskill_level;
	int8			min_level;
	int8			max_level;
	int8			encounter_level;	
	int16			visible; // 02 = normal, 15 = shadow
	char			name[128]; //size around here somewhere
	char			last_name[64];
	char			prefix_title[128];
	char			suffix_title[128];
	int8			race;
	int8			gender;	
	int32			randomize;
	int8			lua_race_id;
};
struct Player_Update{
/*0000*/	int32	activity;
/*0004*/	float	unknown2; // 1
/*0008*/	float	direction1;	
/*0012*/	float	unknown3[8];
/*0044*/	float	speed;
/*0048*/	float	side_speed;
/*0052*/	float	unknown4;
/*0056*/	float	orig_x;
/*0060*/	float	orig_y;
/*0064*/	float	orig_z;
/*0068*/	float	orig_x2;
/*0072*/	float	orig_y2;
/*0076*/	float	orig_z2;
/*0080*/	float	unknown5[3];
/*0092*/	int32	unknown6;
/*0096*/	float	unknown7[3];
/*0108*/	int32	unknown8;
/*0112*/	int32	grid_location;
/*0116*/	float	x;
/*0120*/	float	y;
/*0124*/	float	z;
/*0128*/	float	direction2;
/*0132*/	float	pitch;
/*0136*/	float	unknown10;
/*0140*/	float	speed_x;
/*0144*/	float	speed_y;
/*0148*/	float	speed_z;
};
struct Player_Update1096{
/*0000*/	int32	activity;
/*0004*/	float	unknown2; // 1
/*0008*/	float	direction1;	
/*0012*/	float	unknown3[8];
/*0044*/	float	unk_speed;
/*0048*/	float	speed;
/*0052*/	float	side_speed;
/*0056*/	float	unknown4;
/*0060*/	float	orig_x;
/*0064*/	float	orig_y;
/*0068*/	float	orig_z;
/*0072*/	float	orig_x2;
/*0076*/	float	orig_y2;
/*0080*/	float	orig_z2;
/*0092*/	float	unknown5[3];
/*0096*/	int32	unknown6;
/*0108*/	float	unknown7[3];
/*0112*/	int32	unknown8;
/*0116*/	int32	grid_location;
/*0120*/	float	x;
/*0124*/	float	y;
/*0128*/	float	z;
/*0132*/	float	direction2;
/*0136*/	float	pitch;
/*0140*/	float	unknown10;
/*0144*/	float	speed_x;
/*0148*/	float	speed_y;
/*0152*/	float	speed_z;
};

struct Player_Update1144{
/*0000*/    int32    activity;
/*0004*/    float    unknown2; // 1
/*0008*/    float    direction1;    
/*0012*/    float    unknown3[12];
/*0044*/    float    unk_speed;
/*0048*/    float    speed;
/*0052*/    float    side_speed;
/*0056*/    float    unknown4;
/*0060*/    float    orig_x;
/*0064*/    float    orig_y;
/*0068*/    float    orig_z;
/*0072*/    float    orig_x2;
/*0076*/    float    orig_y2;
/*0080*/    float    orig_z2;
/*0092*/    float    unknown5[3];
/*0096*/    int32    unknown6;
/*0108*/    float    unknown7[3];
/*0112*/    int32    unknown8;
/*0116*/    int32    grid_location;
/*0120*/    float    x;
/*0124*/    float    y;
/*0128*/    float    z;
/*0132*/    float    direction2;
/*0136*/    float    pitch;
/*0140*/    float    unknown10;
/*0144*/    float    speed_x;
/*0148*/    float    speed_y;
/*0152*/    float    speed_z;
};
#pragma pack()
#endif

