Browse Source

ghost map stability venture 3

well maybe this works or it doesn't? I blame devn00b either way for his computer :anguished:
Image 2 years ago
parent
commit
744ffb46d0

+ 0 - 6
EQ2/source/WorldServer/LuaFunctions.cpp

@@ -10332,12 +10332,6 @@ int EQ2Emu_lua_Evac(lua_State* state) {
 					PacketStruct* packet = configReader.getStruct("WS_TeleportWithinZone", client->GetVersion());
 					if (packet)
 					{
-						PacketStruct* packet2 = configReader.getStruct("WS_DestroyGhostCmd", client->GetVersion());
-						packet2->setDataByName("spawn_index", client->GetPlayer()->GetIndexForSpawn(target2));
-						packet2->setDataByName("delete", 1);	
-										
-						client->QueuePacket(packet2->serialize(), true);
-						safe_delete(packet2);
 						client->SetReloadingZone(true);
 						packet->setDataByName("x", x);
 						packet->setDataByName("y", y);

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

@@ -3849,7 +3849,7 @@ void Player::CheckSpawnRemovalQueue() {
 						packet->setDataByName("spawn_index", itr->second->index_id);
 						packet->setDataByName("delete", 1);	
 						
-						GetClient()->QueuePacket(packet->serialize(), true);
+						GetClient()->QueuePacket(packet->serialize());
 						safe_delete(packet);
 					}
 					sent_itr->second = SpawnState::SPAWN_STATE_REMOVING_SLEEP;

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

@@ -516,6 +516,10 @@ EQ2Packet* Spawn::spawn_serialize(Player* player, int16 version, int16 offset, i
 	player->AddSpawnVisPacketForXOR(id, (uchar*)vis_data->c_str(), vis_data->length());
 	player->AddSpawnInfoPacketForXOR(id, (uchar*)info_data->c_str(), info_data->length());
 
+	int32 vislength = vis_data->length();
+	int32 poslength = pos_data->length();
+	int32 infolength = info_data->length();
+
 	uchar* ptr = part2;
 	memcpy(ptr, pos_data->c_str(), pos_data->length());
 	ptr += pos_data->length();
@@ -603,9 +607,9 @@ EQ2Packet* Spawn::spawn_serialize(Player* player, int16 version, int16 offset, i
 	if (offset > 0)
 		DumpPacket(part2, part2_size);
 
-	uchar tmp[1100];
+	uchar tmp[4000];
 	bool reverse = (version > 283);
-	part2_size = Pack(tmp, part2, part2_size, 1100, version, reverse);
+	part2_size = Pack(tmp, part2, part2_size, 4000, version, reverse);
 	int32 total_size = part1->length() + part2_size + 3;
 	if (part3)
 		total_size += part3->length();
@@ -661,7 +665,7 @@ EQ2Packet* Spawn::spawn_serialize(Player* player, int16 version, int16 offset, i
 		memcpy(ptr, part3->c_str(), part3->length());
 	delete[] part2;
 
-	//	printf("%s (%i): p1: %i, p2:% i (%i), p3:% i, ts: %i\n", GetName(), GetID(), part1->length(), part2_size, origPart2Size, part3->length(), total_size);
+	//printf("SpawnPacket %s (id: %u, index: %u) to %s: p1: %i, p2: %i, p3: %i, ts: %i. poslength: %u, infolength: %u, vislength: %u\n", GetName(), GetID(), index, player->GetName(), part1->length(), part2_size, (part3 != nullptr) ? part3->length() : -1, total_size, poslength, infolength, vislength);
 
 	EQ2Packet* ret = new EQ2Packet(OP_ClientCmdMsg, final_packet, final_packet_size);
 	delete[] final_packet;
@@ -1085,7 +1089,6 @@ uchar* Spawn::spawn_info_changes_ex(Player* player, int16 version) {
 
 	uchar* tmp = new uchar[size + 1000];
 	size = Pack(tmp, xor_info_packet, size, size+1000, version);
-
 	player->info_mutex.releasewritelock(__FUNCTION__, __LINE__);
 
 	int32 orig_size = size;

+ 10 - 2
EQ2/source/WorldServer/Traits/Traits.cpp

@@ -189,6 +189,11 @@ EQ2Packet* MasterTraitList::GetTraitListPacket (Client* client)
 			//LogWrite(SPELL__INFO, 0, "AA", "Character Traits Size...%i ", traits_size);
 			for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, count++) {
 				// Jabantiz: cant have more then 5 traits per line
+				tmp_spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier);
+				if(!tmp_spell) {
+					LogWrite(SPELL__ERROR, 0, "Traits", "Could not find SpellID %u and Tier %i in Master Spell List (line: %i)", (*itr3)->spellID, (*itr3)->tier, __LINE__);
+					continue;
+				}
 				if (count > 4)
 					break;
 
@@ -198,7 +203,6 @@ EQ2Packet* MasterTraitList::GetTraitListPacket (Client* client)
 
 				strcpy(temp, sTrait);
 				strcat(sTrait, "_icon");
-				tmp_spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier);
 				if (tmp_spell)
 					packet->setArrayDataByName(sTrait, tmp_spell->GetSpellIcon(), index);
 				else
@@ -266,6 +270,11 @@ EQ2Packet* MasterTraitList::GetTraitListPacket (Client* client)
 
 		for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, count++) {
 			// Jabantiz: cant have more then 5 traits per line
+			tmp_spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier);
+			if(!tmp_spell) {
+				LogWrite(SPELL__ERROR, 0, "Traits", "Could not find SpellID %u and Tier %i in Master Spell List (line: %i)", (*itr3)->spellID, (*itr3)->tier, __LINE__);
+				continue;
+			}
 			if (count > 4)
 				break;
 			if (client->GetPlayer()->HasSpell((*itr3)->spellID, (*itr3)->tier)) {
@@ -277,7 +286,6 @@ EQ2Packet* MasterTraitList::GetTraitListPacket (Client* client)
 
 			strcpy(temp, sTrait);
 			strcat(sTrait, "_icon");
-			tmp_spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier);
 
 			if (tmp_spell)
 				packet->setArrayDataByName(sTrait, tmp_spell->GetSpellIcon(), index);

+ 1 - 1
EQ2/source/WorldServer/zoneserver.cpp

@@ -3373,7 +3373,7 @@ void ZoneServer::SendSpawn(Spawn* spawn, Client* client){
 	else {
 		LogWrite(ZONE__DEBUG, 7, "Zone", "%s: Processing SendSpawn for spawn index %u (%s)...", client->GetPlayer()->GetName(), client->GetPlayer()->GetIndexForSpawn(spawn), spawn->GetName());
 		if(outapp)
-			client->QueuePacket(outapp);
+			client->QueuePacket(outapp, true);
 
 		client->GetPlayer()->SetSpawnSentState(spawn, SpawnState::SPAWN_STATE_SENT);
 	}

+ 2 - 5
EQ2/source/common/EQStream.cpp

@@ -915,10 +915,7 @@ void EQStream::PreparePacket(EQ2Packet* app, int8 offset){
 	printf( "Before A in %s, line %i:\n", __FUNCTION__, __LINE__);
 	DumpPacket(app);
 #endif
-	if(app->eq2_compressed || app->packet_encrypted) {
-		return;
-	}
-	else if(!app->packet_prepared){
+	if(!app->packet_prepared){
 		if(app->PreparePacket(MaxLen) == 255) //invalid version
 			return;
 	}
@@ -937,7 +934,7 @@ void EQStream::PreparePacket(EQ2Packet* app, int8 offset){
 		if (compressed_offset)
 			app->eq2_compressed = true;
 	}
-	if(StreamType!=UnknownStream && !app->packet_encrypted){
+	if(!app->packet_encrypted){
 		EncryptPacket(app, compressed_offset, offset);
 		if(app->size > 2 && app->pBuffer[2] == 0){
 			uchar* new_buffer = new uchar[app->size+1];