Sfoglia il codice sorgente

temp changes for visual based packets

Kind of messy. will clean up later..  point being visual packets seem to work better this way, prior icons in combat/return home were not present
Image 4 anni fa
parent
commit
60c862dc51
2 ha cambiato i file con 51 aggiunte e 7 eliminazioni
  1. 7 4
      EQ2/source/WorldServer/Spawn.cpp
  2. 44 3
      EQ2/source/WorldServer/client.cpp

+ 7 - 4
EQ2/source/WorldServer/Spawn.cpp

@@ -212,7 +212,7 @@ void Spawn::InitializeVisPacketData(Player* player, PacketStruct* vis_packet) {
 	}
 
 	int8 vis_flags = 0;
-	if (MeetsSpawnAccessRequirements(player)){
+	if (MeetsSpawnAccessRequirements(player)) {
 		if (appearance.attackable == 1)
 			vis_flags += 64; //attackable icon
 		if (appearance.show_level == 1)
@@ -223,15 +223,18 @@ void Spawn::InitializeVisPacketData(Player* player, PacketStruct* vis_packet) {
 			vis_flags += 4;
 		if (appearance.show_command_icon == 1)
 			vis_flags += 2;
+		if (this == player) {
+			vis_flags += 1;
+		}
 	}
-	else{
+	else if (req_quests_override > 0)
+	{
 		//Check to see if there's an override value set
-		if (req_quests_override > 0)
 			vis_flags = req_quests_override & 0xFF;
 	}
-
 	vis_packet->setDataByName("vis_flags", vis_flags);
 
+
 	if (MeetsSpawnAccessRequirements(player))
 		vis_packet->setDataByName("hand_flag", appearance.display_hand_icon);
 	else {

+ 44 - 3
EQ2/source/WorldServer/client.cpp

@@ -8255,6 +8255,8 @@ void Client::SendSpawnChanges(set<Spawn*>& spawns) {
 	map<int32, SpawnData> pos_changes;
 	map<int32, SpawnData> vis_changes;
 
+	map<int32, SpawnData> empty_changes;
+
 	int32 info_size = 0;
 	int32 pos_size = 0;
 	int32 vis_size = 0;
@@ -8268,9 +8270,48 @@ void Client::SendSpawnChanges(set<Spawn*>& spawns) {
 		
 		if (spawn->vis_changed)
 		{
-			EQ2Packet* outapp = spawn->spawn_update_packet(GetPlayer(), GetVersion(), false, false);
-			QueuePacket(outapp);
-			continue;
+			auto vis_change = spawn->spawn_vis_changes_ex(GetPlayer(), GetVersion());
+			if (vis_change) {
+				SpawnData data;
+				data.spawn = spawn;
+				data.data = vis_change;
+				data.size = spawn->vis_packet_size;
+				map<int32, SpawnData> tmp_vis_changes;
+				tmp_vis_changes[index] = data;
+
+				map<int32, SpawnData> tmp_info_changes;
+				map<int32, SpawnData> tmp_pos_changes;
+				int32 tmp_info_size = 0;
+				int32 tmp_pos_size = 0;
+				if (spawn->info_changed) {
+					auto info_change = spawn->spawn_info_changes_ex(GetPlayer(), GetVersion());
+
+					if (info_change) {
+						SpawnData data;
+						data.spawn = spawn;
+						data.data = info_change;
+						data.size = spawn->info_packet_size;
+						tmp_info_size = data.size;
+						tmp_info_changes[index] = data;
+					}
+				}
+
+				if (spawn->position_changed) {
+					auto pos_change = spawn->spawn_pos_changes_ex(GetPlayer(), GetVersion());
+
+					if (pos_change) {
+						SpawnData data;
+						data.spawn = spawn;
+						data.data = pos_change;
+						data.size = spawn->pos_packet_size;
+						tmp_pos_size = data.size;
+						tmp_pos_changes[index] = data;
+					}
+				}
+
+				MakeSpawnChangePacket(tmp_info_changes, tmp_pos_changes, tmp_vis_changes, tmp_info_size, tmp_pos_size, data.size);
+				continue;
+			}
 		}
 
 		if (spawn->info_changed) {