Browse Source

fix /speed command not working for 'newer' clients, classic/DoF left out until confirm SetControlGhost packet is appropriate

Image 3 years ago
parent
commit
3b50faf199
1 changed files with 15 additions and 12 deletions
  1. 15 12
      EQ2/source/WorldServer/Player.cpp

+ 15 - 12
EQ2/source/WorldServer/Player.cpp

@@ -1496,18 +1496,6 @@ EQ2Packet* PlayerInfo::serialize(int16 version, int16 modifyPos, int32 modifyVal
 
 			//DumpPacket(orig_packet, size);
 			size = Pack(tmp, orig_packet, size, size, version, reverse);
-			/*PacketStruct* control_packet = configReader.getStruct("WS_SetControlGhost", version);
-			if (control_packet) {
-				control_packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(player));
-				control_packet->setDataByName("speed", player->GetSpeed());
-				control_packet->setDataByName("air_speed", player->GetAirSpeed());
-				control_packet->setDataByName("size", 0.51);
-				control_packet->setDataByName("unknown2", 1);
-				Client* client = player->GetZone()->GetClientBySpawn(player);
-				if (client)
-					client->QueuePacket(control_packet->serialize());
-				safe_delete(control_packet);
-			}*/
 		}
 		else {
 			memcpy(changes, (uchar*)data->c_str(), size);
@@ -1541,6 +1529,21 @@ EQ2Packet* PlayerInfo::serialize(int16 version, int16 modifyPos, int32 modifyVal
 			//DumpPacket(tmp, size);
 		}
 
+		if (GetVersion() > 546)
+		{
+			PacketStruct* control_packet = configReader.getStruct("WS_SetControlGhost", version);
+			if (control_packet) {
+				control_packet->setDataByName("spawn_id", 0xFFFFFFFF);
+				control_packet->setDataByName("speed", player->GetSpeed());
+				control_packet->setDataByName("air_speed", player->GetAirSpeed());
+				control_packet->setDataByName("size", 0.51);
+				Client* client = player->GetZone()->GetClientBySpawn(player);
+				if (client)
+					client->QueuePacket(control_packet->serialize());
+				safe_delete(control_packet);
+			}
+		}
+
 		EQ2Packet* ret_packet = new EQ2Packet(OP_UpdateCharacterSheetMsg, tmp, size);
 		safe_delete(packet);
 		safe_delete_array(tmp);