Browse Source

Struct updates/fixes

Progress on Issue #97
Image 3 years ago
parent
commit
ee3b099c53

+ 2 - 1
EQ2/source/WorldServer/Player.cpp

@@ -488,6 +488,7 @@ PacketStruct* PlayerInfo::serialize2(int16 version){
 	//		packet->setDataByName("unknown7", 257, i);
 		//packet->setDataByName("unknown21", info_struct->rain, 2);
 		packet->setDataByName("rain", info_struct->rain);
+		packet->setDataByName("rain2", info_struct->wind); //-102.24);
 		/*packet->setDataByName("unknown22", 3, 4);
 		packet->setDataByName("unknown23", 3, 161);
 		packet->setDataByName("unknown20", 103);
@@ -510,7 +511,7 @@ PacketStruct* PlayerInfo::serialize2(int16 version){
 		packet->setDataByName("unknown20b", 255, 2);
 		packet->setDataByName("unknown20", 50, 75);
 		*/
-		packet->setDataByName("rain2", -102.24);
+		//packet->setDataByName("rain2", -102.24);
 		for(int i=0;i<45;i++){
 			if(i < 30){
 				packet->setSubstructDataByName("maintained_effects", "name", info_struct->maintained_effects[i].name, i, 0);

+ 20 - 14
EQ2/source/WorldServer/Spawn.cpp

@@ -179,7 +179,7 @@ void Spawn::InitializeHeaderPacketData(Player* player, PacketStruct* header, int
 	}
 
 	header->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(this));
-	header->setDataByName("crc", id);
+	header->setDataByName("crc", 1);
 	header->setDataByName("time_stamp", Timer::GetCurrentTime2());
 }
 
@@ -251,7 +251,7 @@ void Spawn::InitializeFooterPacketData(Player* player, PacketStruct* footer) {
 		if (widget->GetMultiFloorLift()) {
 			footer->setDataByName("widget_x", widget->GetX());
 			footer->setDataByName("widget_y", widget->GetY());
-			footer->setDataByName("widget_z", widget->GetZ());
+			footer->setDataByName("widget_z", widget->GetZ());	
 		}
 		else {
 			footer->setDataByName("widget_x", widget->GetWidgetX());
@@ -1568,23 +1568,23 @@ void Spawn::InitializePosPacketData(Player* player, PacketStruct* packet, bool b
 		packet->setDataByName("pos_heading2", appearance.pos.Dir2);
 	}
 
-	packet->setDataByName("pos_collision_radius", appearance.pos.collision_radius > 0 ? appearance.pos.collision_radius : 32);
 	if (version <= 910) {
+		packet->setDataByName("pos_collision_radius", appearance.pos.collision_radius > 0 ? appearance.pos.collision_radius : 32);
 		packet->setDataByName("pos_size", size > 0 ? size : 32);
 		packet->setDataByName("pos_size_multiplier", 32); //32 is normal
 	}
 	else {
-		if (IsPlayer()) {
-			if (this != player)
-				packet->setDataByName("pos_size", 49152);
+			if (size == 0)
+				size = 32;
+			packet->setDataByName("size", 1);
+			packet->setDataByName("pos_collision_radius", appearance.pos.collision_radius > 0 ? appearance.pos.collision_radius : 32);
 
-			packet->setDataByName("pos_size_ratio", 1);
-			packet->setDataByName("pos_size_multiplier_ratio", 1); // used for growth with players
-		}
-		else {
-			packet->setDataByName("pos_size_ratio", size > 0 ? (((float)size) / 32) : 1);
-			packet->setDataByName("pos_size_multiplier_ratio", 1);
-		}
+			packet->setDataByName("pos_size", 1.0f);
+
+			if (!IsPlayer())
+				packet->setDataByName("pos_size_ratio", size > 0 ? (((float)size) / 32) : 1);
+			else
+				packet->setDataByName("pos_size_ratio", 1.0f);
 	}
 	packet->setDataByName("pos_state", appearance.pos.state);
 
@@ -1691,15 +1691,21 @@ void Spawn::InitializePosPacketData(Player* player, PacketStruct* packet, bool b
 
 	if (!IsPlayer())
 		packet->setDataByName("pos_movement_mode", 2);
-
+	
 	if(version <= 910)
 		packet->setDataByName("pos_unknown10", 0xFFFF, 1);
+	else if (version >= 1119)
+			packet->setDataByName("face_actor_id", 0xFFFFFFFF);
 	else
 		packet->setDataByName("pos_unknown10", 0xFFFF);
+
 	if(version <= 910)
 		packet->setDataByName("pos_unknown10", 0xFFFF, 2);
+	else if (version >= 1119)
+		packet->setDataByName("face_actor_id", 0xFFFFFFFF);
 	else
 		packet->setDataByName("pos_unknown10", 0XFFFF, 1);
+
 	packet->setDataByName("pos_pitch1", appearance.pos.Pitch1);
 	packet->setDataByName("pos_pitch2", appearance.pos.Pitch2);
 	packet->setDataByName("pos_roll", appearance.pos.Roll);

+ 4 - 0
EQ2/source/WorldServer/zoneserver.h

@@ -605,6 +605,10 @@ public:
 	void ProcessSpawnConditional(int8 condition);
 
 	void SetSpawnStructs(Client* client);
+
+	bool IsLoading() {
+		return LoadingData;
+	}
 private:
 	/* Private Functions */
 	void	AddTransporter(LocationTransportDestination* loc);

+ 124 - 84
server/SpawnStructs.xml

@@ -30,6 +30,8 @@
 <Data ElementName="command_list_array" Type="Array" ArraySizeVariable="command_list">
 	<Data ElementName="command_list_name" Type="EQ2_16Bit_String" />
 	<Data ElementName="command_list_max_distance" Type="float" Size="1" />
+	<Data ElementName="command_list_has_error_text" Type="int8" Size="1" />
+	<Data ElementName="command_list_unknown" Type="int8" Size="1" />
 	<Data ElementName="command_list_error" Type="EQ2_16Bit_String" Size="1" />
 	<Data ElementName="command_list_command" Type="EQ2_16Bit_String" />
 </Data>
@@ -213,8 +215,8 @@
 <Data ElementName="pos_heading1" Type="sint16" Size="1" />
 <Data ElementName="pos_heading2" Type="sint16" Size="1" />
 <Data ElementName="pos_speed" Type="int16" Size="1" />
-<Data ElementName="pos_state" Type="int16" Size="1" />
-<Data ElementName="pos_unknown2" Type="int8" Size="6" />
+<Data ElementName="pos_state" Type="int32" Size="1" />
+<Data ElementName="pos_state2" Type="int32" Size="1" />
 <Data ElementName="pos_next_x" Type="float" Size="1" />
 <Data ElementName="pos_next_y" Type="float" Size="1" />
 <Data ElementName="pos_next_z" Type="float" Size="1" />
@@ -223,19 +225,27 @@
 <Data ElementName="pos_z3" Type="float" Size="1" />
 <Data ElementName="pos_movement_mode" Type="int8" Size="1" />
 <Data ElementName="pos_unknown3b" Type="int8" Size="1" />
-<Data ElementName="pos_unknown4" Type="int16" Size="3" />
+<Data ElementName="desired_heading" Type="int16" Size="1" />
+<Data ElementName="speed_modifier" Type="int16" Size="1" />
+<Data ElementName="swim_speed_modifier" Type="int16" Size="1" />
 <Data ElementName="pos_move_type" Type="int16" Size="1" />
-<Data ElementName="pos_unknown6" Type="int16" Size="3" />
-<Data ElementName="pos_side_speed" Type="int16" Size="1" />
-<Data ElementName="pos_unknown6" Type="int16" Size="1" />
+<Data ElementName="desired_strafe_speed" Type="int16" Size="1" />
+<Data ElementName="desired_vert_speed" Type="int16" Size="1" />
+<Data ElementName="unknown_speed_3" Type="int16" Size="1" />
+<Data ElementName="pos_side_speed" Type="int16" Size="1" /> <!-- desired_roll -->
+<Data ElementName="pos_unknown6" Type="int16" Size="1" /> <!-- desired roll velocity -->
 <Data ElementName="pos_pitch1" Type="sint16" />
-<Data ElementName="pos_unknown7" Type="int16" Size="4" />
+<Data ElementName="pos_pitch_velocity" Type="int16" Size="1" />
+<Data ElementName="pos_base_loc_x" Type="int16" Size="1" />
+<Data ElementName="pos_base_loc_y" Type="int16" Size="1" />
+<Data ElementName="pos_base_loc_z" Type="int16" Size="1" />
 <Data ElementName="pos_pitch2" Type="sint16" />
 <Data ElementName="pos_collision_radius" Type="int16" Size="1" />
-<Data ElementName="pos_size" Type="int16" Size="1" />
+<Data ElementName="size" Type="int16" Size="1" />
+<Data ElementName="pos_size" Type="float" Size="1" />
 <Data ElementName="pos_size_ratio" Type="float" Size="1" />
-<Data ElementName="pos_size_multiplier_ratio" Type="float" Size="1" />
-<Data ElementName="pos_unknown10" Type="int16" Size="3" />
+<Data ElementName="face_actor_id" Type="int32" Size="1" />
+<Data ElementName="actor_stop_range" Type="int16" Size="1" />
 <Data ElementName="pos_roll" Type="sint16" />
 <Data ElementName="unknown12" Type="int16" Size="2" />
 </Struct>
@@ -1812,73 +1822,54 @@
 <Data ElementName="model_type" Type="int32" Size="1" />
 <Data ElementName="soga_model_type" Type="int32" Size="1" />
 <Data ElementName="equipment_types" Type="int32" Size="25" />
-<Data ElementName="unknown7a" Type="int16" Size="2" />
-<Data ElementName="unknown7aa" Type="int16" Size="2" />
-<Data ElementName="hair_type_id" Type="int16" Size="1" />
-<Data ElementName="unknown30" Type="int16" Size="1" />
-<Data ElementName="facial_hair_type_id" Type="int16" Size="1" />
-<Data ElementName="unknown30a" Type="int16" Size="1" />
-<Data ElementName="wing_type_id" Type="int16" Size="1" />
-<Data ElementName="unknown30b" Type="int16" Size="1" />
-<Data ElementName="chest_type_id" Type="int16" Size="1" />
-<Data ElementName="unknown30c" Type="int16" Size="1" />
-<Data ElementName="legs_type_id" Type="int16" Size="1" />
-<Data ElementName="unknown_new_type_id" Type="int16" Size="1" />
-<Data ElementName="unknown30d" Type="int16" Size="1" />
-<Data ElementName="unknown30e" Type="int16" Size="1" />
-<Data ElementName="soga_hair_type_id" Type="int16" Size="1" />
-<Data ElementName="unknown30f" Type="int16" Size="1" />
-<Data ElementName="soga_facial_hair_type_id" Type="int16" Size="1" />
-<Data ElementName="unknown30g" Type="int16" Size="1" />
-<Data ElementName="mount_type" Type="int32" />
+<Data ElementName="unknownType26" Type="int32" Size="1" />
+<Data ElementName="unknownType27" Type="int32" Size="1" />
+<Data ElementName="hair_type_id" Type="int32" Size="1" />
+<Data ElementName="facial_hair_type_id" Type="int32" Size="1" />
+<Data ElementName="wing_type_id" Type="int32" Size="1" />
+<Data ElementName="chest_type_id" Type="int32" Size="1" />
+<Data ElementName="legs_type_id" Type="int32" Size="1" />
+<Data ElementName="unknown_new_type_id" Type="int32" Size="1" />
+<Data ElementName="soga_hair_type_id" Type="int32" Size="1" />
+<Data ElementName="soga_facial_hair_type_id" Type="int32" Size="1" />
+<Data ElementName="mount_type" Type="int32" size="1"/>
 <Data ElementName="combat_voice" Type="int32" Size="1" />
 <Data ElementName="emote_voice" Type="int32" Size="1" />
-<Data ElementName="unknown17" Type="int32" Size="1" />
+<Data ElementName="unknown17" Type="int8" Size="4" />
 <Data ElementName="visual_flag" Type="int8" Size="1" />
 <Data ElementName="interaction_flag" Type="int8" Size="1" />
 <Data ElementName="unknown60055" Type="int8" Size="18" />
 <Data ElementName="equipment_colors" Type="EQ2_Color" Size="25" />
-<Data ElementName="unknown7b" Type="EQ2_Color" Size="2" />
+<Data ElementName="unknownType26Color" Type="EQ2_Color" Size="1" />
+<Data ElementName="unknownType27Color" Type="EQ2_Color" Size="1" />
 <Data ElementName="hair_type_color" Type="EQ2_Color" />
 <Data ElementName="hair_face_color" Type="EQ2_Color" />
 <Data ElementName="wing_color1" Type="EQ2_Color" />
-<Data ElementName="unknown10" Type="EQ2_Color" Size="3" />
+<Data ElementName="chest_type_color" Type="EQ2_Color" Size="1" />
+<Data ElementName="legs_type_color" Type="EQ2_Color" Size="1" />
+<Data ElementName="unknown_new_type_color" Type="EQ2_Color" Size="1" />
 <Data ElementName="equipment_highlights" Type="EQ2_Color" Size="25" />
-<Data ElementName="unknown7c" Type="EQ2_Color" Size="2" />
+<Data ElementName="unknownType26Highlight" Type="EQ2_Color" Size="1" />
+<Data ElementName="unknownType27Highlight" Type="EQ2_Color" Size="1" />
 <Data ElementName="hair_type_highlight_color" Type="EQ2_Color" />
 <Data ElementName="hair_face_highlight_color" Type="EQ2_Color" />
 <Data ElementName="wing_color2" Type="EQ2_Color" />
-<Data ElementName="unknown11" Type="EQ2_Color" Size="3" />
+<Data ElementName="chest_type_highlight" Type="EQ2_Color" />
+<Data ElementName="legs_type_highlight" Type="EQ2_Color" />
+<Data ElementName="unknown_new_type_highlight" Type="EQ2_Color" />
 <Data ElementName="soga_hair_type_color" Type="EQ2_Color" />
 <Data ElementName="soga_hair_type_highlight_color" Type="EQ2_Color" />
 <Data ElementName="soga_hair_face_color" Type="EQ2_Color" />
 <Data ElementName="soga_hair_face_highlight_color" Type="EQ2_Color" />
 <Data ElementName="skin_color" Type="EQ2_Color" Size="1" />
 <Data ElementName="eye_color" Type="EQ2_Color" Size="1" />
+<Data ElementName="kunark_unknown_color1" Type="EQ2_Color" />
 <Data ElementName="soga_eye_color" Type="EQ2_Color" />
 <Data ElementName="soga_skin_color" Type="EQ2_Color" />
-<Data ElementName="kunark_unknown_color1" Type="EQ2_Color" />
 <Data ElementName="kunark_unknown_color2" Type="EQ2_Color" />
-<Data ElementName="unknown12" Type="EQ2_Color" Size="1" />
-<Data ElementName="eye_type" Type="sint8" Size="3" />
-<Data ElementName="ear_type" Type="sint8" Size="3" />
-<Data ElementName="eye_brow_type" Type="sint8" Size="3" />
-<Data ElementName="cheek_type" Type="sint8" Size="3" />
-<Data ElementName="lip_type" Type="sint8" Size="3" />
-<Data ElementName="chin_type" Type="sint8" Size="3" />
-<Data ElementName="nose_type" Type="sint8" Size="3" />
-<Data ElementName="body_size" Type="sint8" Size="1" />
-<Data ElementName="body_size_unknown" Type="sint8" Size="1" />
-<Data ElementName="unknown14a" Type="int8" Size="3" />
-<Data ElementName="soga_eye_type" Type="sint8" Size="3" />
-<Data ElementName="soga_ear_type" Type="sint8" Size="3" />
-<Data ElementName="soga_eye_brow_type" Type="sint8" Size="3" />
-<Data ElementName="soga_cheek_type" Type="sint8" Size="3" />
-<Data ElementName="soga_lip_type" Type="sint8" Size="3" />
-<Data ElementName="soga_chin_type" Type="sint8" Size="3" />
-<Data ElementName="soga_nose_type" Type="sint8" Size="3" />
-<Data ElementName="unknown14b" Type="int8" Size="2" />
-<Data ElementName="mount_color" Type="EQ2_Color" /><!--index 464-->
+<Data ElementName="slider_bytes" Type="int8" Size="26" />
+<Data ElementName="soga_slider_bytes" Type="int8" Size="26" />
+<Data ElementName="mount_color" Type="EQ2_Color" />
 <Data ElementName="mount_saddle_color" Type="EQ2_Color" />
 <Data ElementName="hair_color1" Type="EQ2_Color" />
 <Data ElementName="hair_color2" Type="EQ2_Color" />
@@ -1896,23 +1887,23 @@
 <Data ElementName="follow_target" Type="int32" Size="1" /> 
 <Data ElementName="size_unknown" Type="int32" />
 <Data ElementName="unknown3b" Type="int8" Size="4" />
-<Data ElementName="spawn_type" Type="int8" Size="1" />
+<Data ElementName="spawn_type" Type="int8" />
 <Data ElementName="icon" Type="int8" Size="1" />
 <Data ElementName="activity_status" Type="int32" Size="1" />
-<Data ElementName="unknownpk1" Type="int8" Size="2" />
+<Data ElementName="unknownpk2" Type="int8" Size="2" />
 <Data ElementName="activity_timer" Type="int32" Size="1" />
 <Data ElementName="unknown600554" Type="int8" Size="4" />
 <Data ElementName="hp_remaining" Type="int32" Size="1" />
 <Data ElementName="power_percent" Type="int32" Size="1" />
-<Data ElementName="unknown600553" Type="int8" Size="4" />
-<Data ElementName="size_mod" Type="int8" Size="1" />
-<Data ElementName="size_type" Type="int8" Size="1" />
-<Data ElementName="unknown600553b" Type="int8" Size="3" />
+<Data ElementName="unknown600553" Type="float" Size="1" />
+<Data ElementName="size_mod" Type="int32" Size="1" />
+<Data ElementName="unknown600553b" Type="int8" Size="1" />
 <Data ElementName="unknown4" Type="int8" />
 <Data ElementName="level" Type="int8" />
 <Data ElementName="unknown5" Type="int8" Size="1" />
-<Data ElementName="heroic_flag" Type="int8" Size="1" />
-<Data ElementName="unknown7" Type="int32" Size="1" />
+<Data ElementName="heroic_flag" Type="int16" Size="1" />
+<Data ElementName="unknown7b" Type="int8" Size="1" />
+<Data ElementName="unknown7" Type="int16" Size="1" />
 <Data ElementName="race" Type="int8" Size="1" />
 <Data ElementName="gender" Type="int8" Size="1" />
 <Data ElementName="class" Type="int8" Size="1" />
@@ -2058,16 +2049,17 @@
 <Data ElementName="guild" Type="EQ2_16Bit_String" Size="1" />
 <Data ElementName="is_transport" Type="int8" Size="1" />
 <Data ElementName="transport_array" Type="Array" ArraySizeVariable="is_transport">
-	<Data ElementName="unknown_0" Type="int32" Size="1" />
-	<Data ElementName="unknown_1" Type="int32" Size="1" />
+	<Data ElementName="version_0" Type="int32" Size="1" />
+	<Data ElementName="lerptype_0" Type="int32" Size="1" />
 	<Data ElementName="num_coords1" Type="int32" Size="1" />
 	<Data ElementName="movement_array" Type="Array" ArraySizeVariable="num_coords1">
 		<Data ElementName="x" Type="float" />
 		<Data ElementName="y" Type="float" />
 		<Data ElementName="z" Type="float" />
-		<Data ElementName="heading" Type="float" />
+		<Data ElementName="heading" Type="float" /> <!-- delta_time -->
 	</Data>
-	<Data ElementName="unknown_m2" Type="int32" Size="2" />
+	<Data ElementName="version_1" Type="int32" Size="1" />
+	<Data ElementName="lerptype_1" Type="int32" Size="1" />
 	<Data ElementName="num_coords2" Type="int32" Size="1" />
 	<Data ElementName="coord_array" Type="Array" ArraySizeVariable="num_coords2">
 		<Data ElementName="x_2" Type="float" />
@@ -2090,11 +2082,35 @@
 </Struct>
 <Struct Name="WS_WidgetSpawnStruct_Footer" ClientVersion="882">
 <Data ElementName="name" Type="EQ2_16Bit_String" Size="1" />
-<Data ElementName="unknown1a" Type="float" Size="1" />
-<Data ElementName="unknown2" Type="float" Size="1" />
-<Data ElementName="unknown3" Type="float" Size="1" />
-<Data ElementName="unknown3b" Type="int8" Size="1" />
-<Data ElementName="unknown3c" Type="int8" Size="1" />
+<Data ElementName="unknown" Type="int8" Size="1" />
+<Data ElementName="is_player" Type="int8" Size="1" />
+<Data ElementName="last_name" Type="EQ2_16Bit_String" Size="1" />
+<Data ElementName="suffix" Type="EQ2_16Bit_String" Size="1" />
+<Data ElementName="prefix" Type="EQ2_16Bit_String" Size="1" />
+<Data ElementName="pvp_title" Type="EQ2_16Bit_String" Size="1" />
+<Data ElementName="guild" Type="EQ2_16Bit_String" Size="1" />
+<Data ElementName="is_transport" Type="int8" Size="1" />
+<Data ElementName="transport_array" Type="Array" ArraySizeVariable="is_transport">
+	<Data ElementName="version_0" Type="int32" Size="1" />
+	<Data ElementName="lerptype_0" Type="int32" Size="1" />
+	<Data ElementName="num_coords1" Type="int32" Size="1" />
+	<Data ElementName="movement_array" Type="Array" ArraySizeVariable="num_coords1">
+		<Data ElementName="x" Type="float" />
+		<Data ElementName="y" Type="float" />
+		<Data ElementName="z" Type="float" />
+		<Data ElementName="heading" Type="float" /> <!-- delta_time -->
+	</Data>
+	<Data ElementName="version_1" Type="int32" Size="1" />
+	<Data ElementName="lerptype_1" Type="int32" Size="1" />
+	<Data ElementName="num_coords2" Type="int32" Size="1" />
+	<Data ElementName="coord_array" Type="Array" ArraySizeVariable="num_coords2">
+		<Data ElementName="x_2" Type="float" />
+		<Data ElementName="y_2" Type="float" />
+		<Data ElementName="z_2" Type="float" />
+		<Data ElementName="heading_2" Type="float" />
+	</Data>
+</Data>
+<Data ElementName="spawn_type" Type="int8" Size="1" />
 <Data ElementName="widget_id" Type="int32" Size="1" />
 <Data ElementName="widget_x" Type="float" Size="1" />
 <Data ElementName="widget_y" Type="float" Size="1" />
@@ -2116,11 +2132,35 @@
 </Struct>
 <Struct Name="WS_SignWidgetSpawnStruct_Footer" ClientVersion="882">
 <Data ElementName="name" Type="EQ2_16Bit_String" Size="1" />
-<Data ElementName="unknown1a" Type="float" Size="1" />
-<Data ElementName="unknown1b" Type="float" Size="1" />
-<Data ElementName="unknown1c" Type="float" Size="1" />
-<Data ElementName="unknown2" Type="int8" Size="1" />
-<Data ElementName="unknown2b" Type="int8" Size="1" />
+<Data ElementName="unknown" Type="int8" Size="1" />
+<Data ElementName="is_player" Type="int8" Size="1" />
+<Data ElementName="last_name" Type="EQ2_16Bit_String" Size="1" />
+<Data ElementName="suffix" Type="EQ2_16Bit_String" Size="1" />
+<Data ElementName="prefix" Type="EQ2_16Bit_String" Size="1" />
+<Data ElementName="pvp_title" Type="EQ2_16Bit_String" Size="1" />
+<Data ElementName="guild" Type="EQ2_16Bit_String" Size="1" />
+<Data ElementName="is_transport" Type="int8" Size="1" />
+<Data ElementName="transport_array" Type="Array" ArraySizeVariable="is_transport">
+	<Data ElementName="version_0" Type="int32" Size="1" />
+	<Data ElementName="lerptype_0" Type="int32" Size="1" />
+	<Data ElementName="num_coords1" Type="int32" Size="1" />
+	<Data ElementName="movement_array" Type="Array" ArraySizeVariable="num_coords1">
+		<Data ElementName="x" Type="float" />
+		<Data ElementName="y" Type="float" />
+		<Data ElementName="z" Type="float" />
+		<Data ElementName="heading" Type="float" /> <!-- delta_time -->
+	</Data>
+	<Data ElementName="version_1" Type="int32" Size="1" />
+	<Data ElementName="lerptype_1" Type="int32" Size="1" />
+	<Data ElementName="num_coords2" Type="int32" Size="1" />
+	<Data ElementName="coord_array" Type="Array" ArraySizeVariable="num_coords2">
+		<Data ElementName="x_2" Type="float" />
+		<Data ElementName="y_2" Type="float" />
+		<Data ElementName="z_2" Type="float" />
+		<Data ElementName="heading_2" Type="float" />
+	</Data>
+</Data>
+<Data ElementName="spawn_type" Type="int8" Size="1" />
 <Data ElementName="widget_id" Type="int32" Size="1" />
 <Data ElementName="widget_x" Type="float" Size="1" />
 <Data ElementName="widget_y" Type="float" Size="1" />
@@ -2128,7 +2168,8 @@
 <Data ElementName="title" Type="EQ2_16Bit_String" Size="1" />
 <Data ElementName="description" Type="EQ2_16Bit_String" Size="1" />
 <Data ElementName="sign_distance" Type="float" Size="1" />
-<Data ElementName="show" Type="int16" Size="1" />
+<Data ElementName="show" Type="int8" Size="1" />
+<Data ElementName="language" Type="int8" Size="1" />
 </Struct>
 <Struct Name="Substruct_SpawnVisualizationInfoStruct" ClientVersion="1">
 <Data ElementName="arrow_color" Type="int8" Size="1" />
@@ -2213,16 +2254,15 @@
 <Data ElementName="npc_hate" Type="int8" Size="1" />
 <Data ElementName="unknowna" Type="int8" Size="1" />
 <Data ElementName="name_quest_icon" Type="int8" Size="1" />
-<Data ElementName="unknowna2" Type="int8" Size="4" />
-<Data ElementName="vis_flags" Type="int8" Size="1" />
-<Data ElementName="npc_aaxp" Type="int8" Size="1" />
+<Data ElementName="unknowna2" Type="int32" Size="1" />
+<Data ElementName="vis_flags" Type="int16" Size="1" />
 <Data ElementName="unknownb" Type="int8" Size="1" />
 <Data ElementName="pvp_difficulty" Type="int8" Size="1" />
-<Data ElementName="hand_flag" Type="int8" Size="1" />
-<Data ElementName="unknown2" Type="int8" Size="2" />
+<Data ElementName="show_hand_flag" Type="int8" Size="1" />
+<Data ElementName="unknown4" Type="int32" Size="1" />
 <Data ElementName="tag1" Type="int8" Size="1" />
 <Data ElementName="tag2" Type="int8" Size="1" />
-<Data ElementName="unknown2" Type="int8" Size="3" />
+<Data ElementName="unknown3" Type="int8" Size="1" />
 </Struct>
 
 <Struct Name="WS_SpawnStruct" ClientVersion="1">

+ 27 - 30
server/WorldStructs.xml

@@ -1245,10 +1245,8 @@ to zero and treated like placeholders." />
 <Struct Name="Substruct_GroupMember" ClientVersion="57048" >
 <Data ElementName="spawn_id" Type="int32" Size="1" />
 <Data ElementName="pet_id" Type="int32" Size="1" />
-<Data ElementName="hp_current" Type="sint32" Size="1" />
-<Data ElementName="hp_current2" Type="sint32" Size="1" />
-<Data ElementName="hp_max" Type="sint32" Size="1" />
-<Data ElementName="hp_max2" Type="sint32" Size="1" />
+<Data ElementName="hp_current" Type="sint64" Size="1" />
+<Data ElementName="hp_max" Type="sint64" Size="1" />
 <Data ElementName="power_current" Type="sint32" Size="1" />
 <Data ElementName="power_max" Type="sint32" Size="1" />
 <Data ElementName="level_current" Type="int16" Size="1" />
@@ -9700,7 +9698,9 @@ to zero and treated like placeholders." />
 <Data ElementName="vision" Type ="int16" Size="1" />
 <Data ElementName="unknown551" Type ="int8" Size="1" />
 <Data ElementName="unknown525" Type ="int8" Size="1062" />
+<Data ElementName="activegroupmembers" Type ="int8" Size="1" />
 <Data ElementName="group_members" Substruct="Substruct_GroupMember" Size="5" />
+<Data ElementName="leaderIndex" Type ="int32" Size="1" />
 <Data ElementName="unknown182" Type="int16" Size="1" />
 <Data ElementName="unknown183" Type="int8" Size="462" />
 <Data ElementName="pet_id" Type="int32" Size="1" />
@@ -10758,16 +10758,15 @@ to zero and treated like placeholders." />
 <Data ElementName="tradeskill_effects_bonus" Type="float" Size="1" />
 <Data ElementName="unknown137" Type="float" Size="1" />
 <Data ElementName="unknown138" Type="float" Size="1" />
-<Data ElementName="unknown139" Type="float" Size="1" />
 <Data ElementName="dps" Type="float" Size="1" />
 <Data ElementName="unknown141" Type="float" Size="1" />
 <Data ElementName="unknown142" Type="float" Size="1" />
+<Data ElementName="unknown142x" Type="float" Size="1" />
 <Data ElementName="base_avoidance" Type="float" Size="1" />
 <Data ElementName="unknown144" Type="float" Size="1" />
 <Data ElementName="uncontested_riposte_pve" Type="float" Size="1" />
 <Data ElementName="uncontested_parry_pve" Type="float" Size="1" />
 <Data ElementName="unknown147" Type="float" Size="1" />
-<Data ElementName="unknown148" Type="float" Size="1" />
 <Data ElementName="melee_ae" Type="float" Size="1" />
 <Data ElementName="multi_attack" Type="float" Size="1" /> 
 <Data ElementName="spell_multi_attack" Type="float" Size="1" /> <!-- spell_doublecast -->
@@ -10788,6 +10787,7 @@ to zero and treated like placeholders." />
 <Data ElementName="casting_speed" Type="float" Size="1" />
 <Data ElementName="spell_reuse_speed" Type="float" Size="1" />
 <Data ElementName="unknown168" Type="float" Size="1" />
+<Data ElementName="unknown168x" Type="float" Size="1" />
 <Data ElementName="decrease_falling_dmg" Type="float" Size="1" />
 <Data ElementName="unknown170" Type="float" Size="1" />
 <Data ElementName="unknown171" Type="float" Size="1" />
@@ -10817,7 +10817,7 @@ to zero and treated like placeholders." />
 <Data ElementName="unknown195" Type="float" Size="1" />
 <Data ElementName="unknown197" Type="float" Size="1" />
 <Data ElementName="pvp_crit_mit" Type ="float" Size="1" />
-<Data ElementName="pvp_crit_mit" Type ="float" Size="1" />
+<Data ElementName="unknown199x" Type ="float" Size="1" />
 <Data ElementName="unknown199" Type ="float" Size="1" />
 <Data ElementName="unknown200" Type ="float" Size="1" />
 <Data ElementName="unknown201" Type ="float" Size="1" />
@@ -11008,18 +11008,6 @@ to zero and treated like placeholders." />
 <Data ElementName="unknown380" Type="float" Size="1" />
 <Data ElementName="unknown381" Type="float" Size="1" />
 <Data ElementName="lethality_pvp" Type="float" Size="1" />
-<Data ElementName="unknown383" Type="float" Size="1" />
-<Data ElementName="unknown384" Type="float" Size="1" />
-<Data ElementName="unknown385" Type="float" Size="1" />
-<Data ElementName="unknown386" Type="float" Size="1" />
-<Data ElementName="unknown387" Type="float" Size="1" />
-<Data ElementName="unknown388" Type="float" Size="1" />
-<Data ElementName="unknown389" Type="float" Size="1" />
-<Data ElementName="unknown390" Type="float" Size="1" />
-<Data ElementName="unknown391" Type="float" Size="1" />
-<Data ElementName="unknown392" Type="float" Size="1" />
-<Data ElementName="unknown393" Type="float" Size="1" />
-<Data ElementName="unknown394" Type="float" Size="1" />
 <Data ElementName="unknown395" Type="float" Size="1" />
 <Data ElementName="unknown396" Type="float" Size="1" />
 <Data ElementName="unknown397" Type="float" Size="1" />
@@ -11047,7 +11035,6 @@ to zero and treated like placeholders." />
 <Data ElementName="max_crafting" Type="float" Size="1" />
 <Data ElementName="component_refund" Type="float" Size="1" />
 <Data ElementName="unknown421" Type="float" Size="1" />
-<Data ElementName="refine_quantity_mod" Type="float" Size="1" />
 <Data ElementName="ex_durability_mod" Type="float" Size="1" />
 <Data ElementName="ex_durability_add" Type="float" Size="1" />
 <Data ElementName="ex_crit_success_mod" Type="float" Size="1" />
@@ -11067,6 +11054,19 @@ to zero and treated like placeholders." />
 <Data ElementName="unknown439" Type="float" Size="1" />
 <Data ElementName="unknown440" Type="float" Size="1" />
 <Data ElementName="unknown441" Type="float" Size="1" />
+<Data ElementName="unknown442x" Type="float" Size="1" />
+<Data ElementName="unknown443x" Type="float" Size="1" />
+<Data ElementName="unknown444x" Type="float" Size="1" />
+<Data ElementName="unknown445x" Type="float" Size="1" />
+<Data ElementName="unknown446x" Type="float" Size="1" />
+<Data ElementName="unknown447x" Type="float" Size="1" />
+<Data ElementName="unknown448x" Type="float" Size="1" />
+<Data ElementName="unknown449x" Type="float" Size="1" />
+<Data ElementName="unknown450x" Type="float" Size="1" />
+<Data ElementName="unknown451x" Type="float" Size="1" />
+<Data ElementName="unknown452x" Type="float" Size="1" />
+<Data ElementName="unknown453x" Type="float" Size="1" />
+<Data ElementName="unknown454x" Type="float" Size="1" />
 <Data ElementName="unknown180" Type="int8" Size="1" />
 <Data ElementName="unknown524" Type="int8" Size="1" />
 <Data ElementName="unknown181a" Type="int8" Size="1" />
@@ -11155,12 +11155,11 @@ to zero and treated like placeholders." />
 <Data ElementName="unknown523" Type ="float" Size="1" />
 <Data ElementName="unknown550" Type ="int8" Size="1" />
 <Data ElementName="vision" Type ="int16" Size="1" />
-<Data ElementName="unknown551" Type ="int8" Size="25" />
-<Data ElementName="unknown551a" Type ="int32" Size="12" />
-<Data ElementName="unknown525" Type ="int8" Size="990" />
+<Data ElementName="unknown551" Type ="int8" Size="1" />
+<Data ElementName="unknown525" Type ="int8" Size="1062" />
 <Data ElementName="group_members" Substruct="Substruct_GroupMember" Size="5" />
-<Data ElementName="unknown182" Type="int16" Size="1" />
-<Data ElementName="unknown183" Type="int8" Size="462" />
+<Data ElementName="group_leader_index" Type="int32" Size="1" />
+<Data ElementName="unknown183" Type="int8" Size="460" />
 <Data ElementName="pet_id" Type="int32" Size="1" />
 <Data ElementName="pet_name" Type="char" Size="32" />
 <Data ElementName="unknown184" Type="int8" Size="9" />
@@ -11183,13 +11182,11 @@ to zero and treated like placeholders." />
 <Data ElementName="merc_unknown21cc" Type="int8" Size="4" />
 <Data ElementName="rain" Type="float" Size="1" />
 <Data ElementName="rain2" Type="float" Size="1" />
+<Data ElementName="unknownx527" Type="int8" Size="9" />
+<Data ElementName="house_zone" Type="char" Size="48" />
+<Data ElementName="unknownx526" Type="int8" Size="132" />
 <Data ElementName="status_points" Type="int32" Size="1" />
-<Data ElementName="unknownint32a" Type="int32" Size="1" />
 <Data ElementName="guild_status" Type="int32" Size="1" />
-<Data ElementName="unknownint32b" Type="int32" Size="1" />
-<Data ElementName="unknown527" Type="int8" Size="1" />
-<Data ElementName="house_zone" Type="char" Size="48" />
-<Data ElementName="unknown526" Type="int8" Size="132" />
 <Data ElementName="unknown187" Type="int8" Size="11" />
 <Data ElementName="bind_zone" Type="char" Size="32" />
 <Data ElementName="unknown188" Type="int8" Size="52" />