Browse Source

Allow 'classic' 283 and 'dof free trial' 546 client to function in login server (login reply accepted, cannot create char)

update opcodes set version_range1=283 where version_range1=839;
Image 3 years ago
parent
commit
ad85748a62
1 changed files with 14 additions and 3 deletions
  1. 14 3
      EQ2/source/LoginServer/client.cpp

+ 14 - 3
EQ2/source/LoginServer/client.cpp

@@ -165,13 +165,23 @@ bool Client::Process() {
 			switch(app->GetOpcode())
 			{
 			case OP_LoginRequestMsg:{
-//				DumpPacket(app);
+				DumpPacket(app);
 				PacketStruct* packet = configReader.getStruct("LS_LoginRequest", 1);
 				if(packet->LoadPacketData(app->pBuffer,app->size)){
-					version = packet->getType_int32_ByName("version");
+					version = packet->getType_int16_ByName("version");
+					LogWrite(LOGIN__DEBUG, 0, "Login", "Classic Client Version Provided: %i", version);
+
+					if (version == 0 || EQOpcodeManager.count(GetOpcodeVersion(version)) == 0)
+					{
+						safe_delete(packet);
+						packet = configReader.getStruct("LS_LoginRequest", 1212);
+						if (packet->LoadPacketData(app->pBuffer, app->size)) {
+							version = packet->getType_int32_ByName("version");
+						}
+					}
 					//[7:19 PM] Kirmmin: Well, I very quickly learned that unknown3 in LS_LoginRequest packet is the same value as cl_eqversion in the eq2_defaults.ini file.
 
-					LogWrite(LOGIN__DEBUG, 0, "Login", "Client Version Provided: %i", version);
+					LogWrite(LOGIN__DEBUG, 0, "Login", "New Client Version Provided: %i", version);
 
 				if (EQOpcodeManager.count(GetOpcodeVersion(version)) == 0) {
 					LogWrite(LOGIN__ERROR, 0, "Login", "Incompatible client version provided: %i", version);
@@ -537,6 +547,7 @@ void Client::SendLoginAccepted() {
 		packet->setDataByName("class_flag", 0x7FFFFFE);
 		packet->setMediumStringByName("username", GetAccountName());
 		packet->setMediumStringByName("password", GetAccountName());
+
 		packet->setDataByName("unknown5", 0x7C);
 		packet->setDataByName("unknown7", 0xFF6FFFBF);