83 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include "protocolgame.h"
 | |
| #include <framework/net/rsa.h>
 | |
| 
 | |
| void ProtocolGame::sendLoginPacket(uint32 timestamp, uint8 unknown)
 | |
| {
 | |
|     OutputMessage oMsg;
 | |
| 
 | |
|     oMsg.addU8(0x0A); // protocol id
 | |
|     oMsg.addU16(0x02); // os
 | |
|     oMsg.addU16(862); // client version
 | |
| 
 | |
|     oMsg.addU8(0); // first RSA byte must be 0
 | |
| 
 | |
|     // xtea key
 | |
|     generateXteaKey();
 | |
|     oMsg.addU32(m_xteaKey[0]);
 | |
|     oMsg.addU32(m_xteaKey[1]);
 | |
|     oMsg.addU32(m_xteaKey[2]);
 | |
|     oMsg.addU32(m_xteaKey[3]);
 | |
| 
 | |
|     oMsg.addU8(0); // is gm set?
 | |
|     oMsg.addString(m_accountName);
 | |
|     oMsg.addString(m_characterName);
 | |
|     oMsg.addString(m_accountPassword);
 | |
| 
 | |
|     oMsg.addU32(timestamp);
 | |
|     oMsg.addU8(unknown);
 | |
| 
 | |
|     // fill the rest with zeros
 | |
|     oMsg.addPaddingBytes(128 - (29 + m_accountName.length() + m_characterName.length() + m_accountPassword.length()));
 | |
| 
 | |
|     // encrypt with RSA
 | |
|     if(!Rsa::encrypt((char*)oMsg.getBuffer() + 6 + oMsg.getMessageSize() - 128, 128, OTSERV_PUBLIC_RSA))
 | |
|         return;
 | |
| 
 | |
|     send(oMsg);
 | |
| 
 | |
|     enableXteaEncryption();
 | |
| }
 | |
| 
 | |
| void ProtocolGame::sendLogout()
 | |
| {
 | |
|     OutputMessage oMsg;
 | |
|     oMsg.addU8(0x14);
 | |
|     send(oMsg);
 | |
| }
 | |
| 
 | |
| void ProtocolGame::sendPing()
 | |
| {
 | |
|     OutputMessage oMsg;
 | |
|     oMsg.addU8(0x1E);
 | |
|     send(oMsg);
 | |
| }
 | |
| 
 | |
| void ProtocolGame::sendWalkNorth()
 | |
| {
 | |
|     OutputMessage oMsg;
 | |
|     oMsg.addU8(0x65);
 | |
|     send(oMsg);
 | |
| }
 | |
| 
 | |
| void ProtocolGame::sendWalkEast()
 | |
| {
 | |
|     OutputMessage oMsg;
 | |
|     oMsg.addU8(0x66);
 | |
|     send(oMsg);
 | |
| }
 | |
| 
 | |
| void ProtocolGame::sendWalkSouth()
 | |
| {
 | |
|     OutputMessage oMsg;
 | |
|     oMsg.addU8(0x67);
 | |
|     send(oMsg);
 | |
| }
 | |
| 
 | |
| void ProtocolGame::sendWalkWest()
 | |
| {
 | |
|     OutputMessage oMsg;
 | |
|     oMsg.addU8(0x68);
 | |
|     send(oMsg);
 | |
| }
 | |
| 
 |