Server:MacSupport

From The Al`Kabor Project Wiki
Revision as of 00:07, 22 December 2023 by Nazwadi (talk | contribs) (→‎Login)
Jump to navigation Jump to search

Opcodes

All opcodes are found at login_opcodes_oldver.conf and listed below for convenience:

  • OP_SessionReady=0x5900
  • OP_LoginOSX=0x8e00
  • OP_LoginPC=0x0100
  • OP_ClientError=0x0200
  • OP_ServerListRequest=0x4600
  • OP_PlayEverquestRequest=0x4700
  • OP_LoginUnknown1=0x4800
  • OP_LoginUnknown2=0x4A00
  • OP_PlayEverquestResponse=0x0021
  • OP_ChatMessage=0x0016
  • OP_LoginAccepted=0x0400
  • OP_LoginComplete=0x8800
  • OP_ServerName=0x4900
  • OP_LoginBanner=0x5200
  • OP_ServerListResponse=0x004a
  • OP_Poll=0x0029
  • OP_EnterChat=0x000f
  • OP_PollResponse=0x0011

Login

When a client first authenticates to the loginserver, it sends the OP_LoginOSX opcode followed by the username/password and eqworld-52.989studios.com. This url is no longer used but rather parsed server-side to validate mac clients (see OP_LoginOSX and handle_login behavior).

The key difference between a Windows Client and OSX client successfully authenticating is the following of code that sends an extra packet:

string buf = server.options.GetNetworkIP();
auto outapp2 = new EQApplicationPacket(OP_ServerName, (uint32)buf.length() + 1);
strncpy((char*)outapp2->pBuffer, buf.c_str(), buf.length() + 1);
connection->QueuePacket(outapp2);
delete outapp2;
sentsessioninfo = true;

GetNetworkIP() pulls the world server's URL from you login.ini file and/or the database as mentioned previously. This leaves you with a packet containing "0x4900" and your server's URL which the client will then use to reach server select.

Server Selection

Mac Clients do not have a server select option. As a result, server selection is passed to them after successful login. While there is a way to have the client select a server based on an Apple IPC mechanism, the server is currently hardcoded as a configuration setting in `login.ini` as well as the `loginserversettings` table.