WorldServer

class WAR_WorldServer.WorldTCPHandler(request, client_address, server)
handle_F_DUMP_ARENAS_LARGE(opcode_entry, packet_client_header, packet_data)

Opcode 0x35 can be sent in WAR.exe from:

  • 0x004BFEF2, size = 0x00000002

Server must answer with F_WORLD_ENTER (0x19)

handle_F_ENCRYPTKEY(opcode_entry, packet_client_header, packet_data)

First packet received from the client after connection. If the field key_present is NULL, server has to answer with F_RECEIVE_ENCRYPTKEY (0x8A). If the field key_present is not NULL, RC4 key (256 bytes) is present a the end of packet.

Opcode 0x5C can be sent from two methods in WAR.exe:

  • 0x004B1819, size = 0x00000006 : key_present is NULL
  • 0x004B2C1B, size = 0x00000106 : RC4 key present
handle_F_INIT_PLAYER(opcode_entry, packet_client_header, packet_data)

Opcode 0x7C can be sent from:

  • 0x004C6D11, size = 0x00000016
handle_F_INTERFACE_COMMAND(opcode_entry, packet_client_header, packet_data)

This opcode can be sent from methods:

  • 0x004B6DC0, size = 0x00000006,
  • 0x004B6E03, size = ??????????

TODO CHECK NO RESPONSE?

handle_F_OPEN_GAME(opcode_entry, packet_client_header, packet_data)

Opcode 0x17 can be sent in WAR.exe from:

  • 0x004BFF5D, size = 0x00000002

Server must answer with S_GAME_OPENED (0x85)

handle_F_PING(opcode_entry, packet_client_header, packet_data)

This packet is sent from method in WAR.exe:

  • 0x004B2F33, size = 0x00000014

Server has to answer with S_PONG (0x81).

handle_F_PLAYER_ENTER_FULL(opcode_entry, packet_client_header, packet_data)

TODO

handle_F_SWITCH_ATTACK_MODE(opcode_entry, packet_client_header, packet_data)

F_SWITCH_ATTACK_MODE (0xDC) This packet is sent from method in WAR.exe:

  • 0x004B4B96, size = 0x00000004
handle_F_TEXT(opcode_entry, packet_client_header, packet_data)

This packet is sent from method in WAR.exe:

  • 0x004B39AC, size = 0xFFFFFFFF
reponse_F_GET_ITEM(opcode_entry, packet_client_header, packet_client, packet_data)

F_GET_ITEM (0xAA)

Packet handling is done:

  • 0x4D64A2
response_F_BAG_INFO(opcode_entry, packet_client_header, packet_client, packet_data)

F_BAG_INFO (0x95)

Packet handling is done:

  • 0x4C00D6

/!Little endian /! First byte is a command that can have the value:

  • 0x16:
  • 0x17:
  • 0x18:
  • 0x19:
  • 0x1A:
  • 0x1D:
  • 0x1E:
  • 0x1F:
  • 0x0B:
  • 0x0D:
  • 0x0E:
  • 0x0C:
  • 0x05:
  • 0x09:
  • 0x04:
response_F_CHARACTER_INFO(opcode_entry, packet_client_header, packet_client, packet_data)

F_CHARACTER_INFO (0xBE) Packet handling is done:

  • 0x004E20E7

First byte is a command that can have the value:

  • 0x00:
  • 0x01: This command is for sending abilities informations (Handled by 0x4E2194)
  • 0x02:
  • ... ?
response_F_CHAT(opcode_entry, packet_client_header, packet_client, packet_data)

F_CHAT (0x06) Packet handling is done in:

  • 0x004D19CF

TODO

response_F_MAX_VELOCITY(opcode_entry, packet_client_header, packet_client, packet_data)

Velocity * 0.0099999998 Packet handling is done:

  • 0x4DCF59

Size packet is 0x00000002.

response_F_PLAYER_EXPERIENCE(opcode_entry, packet_client_header, packet_client, packet_data)

F_PLAYER_EXPERIENCE (0x39) Packet handling is done:

  • 0x4DD006

Size Packet is 0x0000000D (?)

response_F_PLAYER_HEALTH(opcode_entry, packet_client_header, packet_client, packet_data)

F_PLAYER_HEALTH (0x05) Packet handling is done:

  • 0x4DBBB0

Size packet is 0x00000010 (?)

response_F_PLAYER_INIT_COMPLETE(opcode_entry, packet_client_header, packet_client, packet_data)

F_PLAYER_INIT_COMPLETE (0xEF) Packet handling is done:

  • 0x4DCFDD

Size packet is 0x00000002 Packet data are ignored

Check if Player->field_255 (0x3FC) is NULL, if True send packet F_CLIENT_DATA In all case send packet F_INTERFACE_COMMAND

response_F_PLAYER_RANK_UPDATE(opcode_entry, packet_client_header, packet_client, packet_data)

F_PLAYER_RANK_UPDATE (0xF4) Packet handling is done: * 0x4DD5E4

Size Packet is 0x00000004

response_F_PLAYER_RENOWN(opcode_entry, packet_client_header, packet_client, packet_data)

F_PLAYER_RENOWN (0x4E) Packet handling is done:

  • 0x4DD10F

Size Packet is 0x00000009 (?)

response_F_PLAYER_WEALTH(opcode_entry, packet_client_header, packet_client, packet_data)

Send GameData.Player.money Packet handling is done at basic block 0x004C3BB8. Size packet is 0x00000008.

response_F_RECEIVE_ENCRYPTKEY(opcode_entry, packet_client_header, packet_client, packet_data)

Response sent when packet F_ENCRYPTKEY received with key_present is NULL. Packet handler check if (WORD)field_0x1CC is not null, and packet is handled in WAR.exe by:

  • 0x004C8883: if send_key is not null, RC4 will be generated and sent with packet F_ENCRYPTKEY
response_F_TRADE_SKILL_UPDATE(opcode_entry, packet_client_header, packet_client, packet_data)

F_TRADE_SKILL_UPDATE (0xF9) Packet handling is done:

  • 0x004DEF40

Size packet is 0x00000003 tradeskill_id can be found in data/gamedata/tradeskilldata.csv (0x7F9B4526CBAEF58B)

response_F_WORLD_ENTER(opcode_entry, packet_client_header, packet_client, packet_data)

Response of packet F_DUMP_ARENAS_LARGE (0x35).

response_S_CONNECTED(opcode_entry, packet_client_header, packet_client, packet_data)

Response sent after receiving F_CONNECT packet. Packet handling is done in WAR.exe by:

  • 0x004C88F9: username and server_name are PascalString, protocol is normaly equal to 0xEB8DB21.
response_S_GAME_OPENED(opcode_entry, packet_client_header, packet_client, packet_data)

Opcode handled by basic block at 0x004C40F7

response_S_PLAYER_INITTED(opcode_entry, packet_client_header, packet_client, packet_data)

S_PLAYER_INITTED (0x88) Function 0x4C6346 will convert all Big Endian field to Little Endian. Then packet data is handled by 0x004DE151.

For region ID, refer to file 0x5B701C61C34ABF61 “zones/zones.dat” in world.myp

response_S_PONG(opcode_entry, packet_client_header, packet_client, packet_data)

response sent when packet F_PING has been received. Packet handling is done in the basick block at 0x004C403B. Answer have to reuse the timestamp sent by the client, and put a QWORD of the actual timestamp and increment the sequence number

response_item()

0x2A87C15DF8425A8C data/gamedata/itemdata.csv

response_player_init(opcode_entry, packet_client_header, packet_client, packet_data)

Send all informations related to player initialization