Server:MacSupport
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=0x0021OP_ChatMessage=0x0016- OP_LoginAccepted=0x0400
- OP_LoginComplete=0x8800
- OP_ServerName=0x4900
- OP_LoginBanner=0x5200
OP_ServerListResponse=0x004aOP_Poll=0x0029OP_EnterChat=0x000fOP_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.