case CLIENT_SEXP:
debug(("Bot::pkt_connected is on CLIENT_STAR"));
*this << (u32)getSpawn() // spawn ?
<< (u32)0x49583836 // 68XI
<< (u32)getClientType() // RATS
<< (u32)0xcb // client_token
<< (u32)0 // ?
<< (u32)0x7c7fd30c // ?
<< (u32)0x000001e0 // bias
<< (u32)0x00000409 // thingy
<< (u32)0x00000409 // thingy
<< "USA" //
<< "United States"; //
sendpkt( 0x50ff);
break;
is this correct?
Looks about right. Although you might want to check you are null terminating your strings.
void CSCBot::Logon()
{
RequestBinaryLogon();
CPacket Packet;
Packet << (UINT)0x00
<< WIN32_INTEL_PROCESSOR // Processor IX86
<< LookupClient(m_eClient) // Client STAR/SEXP/JSTR
<< (UINT)GetVersionByte() // Version 1.12
<< (UINT)0x00 // ...
<< (UINT)htonl(0x3EFFE46D) // ...
<< (UINT)htonl(0xC4FFFFFF) // C4FFFFFF (Fixed)
<< (UINT)0x0809
<< (UINT)0x0809
<< GetCountryCode() // ISO abbrev
<< (BYTE)0x00
<< GetCountryString() // Full country name
<< (BYTE)0x00;
Packet.Send(0x50, GetSocket());
}
Edit: Noticed a few of your fixed values seem off. You may want to packet log the real client to confirm.
Why on earth would you use a hexadecimal constant when you could just say (u32)'IX86' instead? Much more readable.