summaryrefslogtreecommitdiff
path: root/src/packet.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/packet.h')
-rw-r--r--src/packet.h535
1 files changed, 535 insertions, 0 deletions
diff --git a/src/packet.h b/src/packet.h
new file mode 100644
index 0000000..2219a4a
--- /dev/null
+++ b/src/packet.h
@@ -0,0 +1,535 @@
+#pragma once
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdbool.h>
+
+// packet types, matching sw's strings
+enum {
+ // (send_eSUB_)?CMD_* ids crawled with find-client-packets.bash
+ PACKET_EVENT_SPAWN_BOX = 0x3111,
+ PACKET_EVENT_SCENE_DIRECTING = 0x3311,
+ PACKET_MONSTER_CLIENT_SPAWN = 0x7111,
+ PACKET_MAZE_ENTER_PARTY_RES = 0x4811,
+ PACKET_LOGIN_REQ = 0x0102,
+ PACKET_SERVER_LIST_REQ = 0x0302,
+ PACKET_SERVER_CONNECT_REQ = 0x0502,
+ PACKET_MOBILE_AUTH = 0x3302,
+ PACKET_ENTER_WAIT_CANCEL = 0x3502,
+ PACKET_CHARACTER_LIST_REQ = 0x1103,
+ PACKET_CREATE_CHARACTER_REQ = 0x0103,
+ PACKET_DELETE_CHARACTER_REQ = 0x0203,
+ PACKET_SELECT_CHARACTER_REQ = 0x1303,
+ PACKET_CHARACTER_CHANGE_SLOT = 0x0603,
+ PACKET_CHARACTER_INFO_REQ = 0x3103,
+ PACKET_ITEM_INVEN_INFO = 0x0108, // freezes
+ PACKET_ITEM_BANK_INFO = 0x1008,
+ PACKET_ITEM_MOVE = 0x0208,
+ PACKET_ITEM_COMBINE = 0x0308,
+ PACKET_ITEM_DIVIDE = 0x0408,
+ PACKET_ITEM_BREAK = 0x0508,
+ PACKET_ITEM_USE = 0x1108,
+ PACKET_ITEM_USE_SELECT = 0x6708,
+ PACKET_ITEM_MOVE_MONEY = 0x2408,
+ PACKET_ITEM_ADD_SLOT = 0x0f08,
+ PACKET_ITEM_LINE_UP = 0x2508,
+ PACKET_WORLD_DISTRICT_TRANSPORT_REQ = 0x4004,
+ PACKET_MAZE_CREATE_REQ = 0x4104,
+ PACKET_COMPLETE_MAZE_REQ = 0x2211,
+ PACKET_COMPLETE_MAZE_START_GAME = 0x2511,
+ PACKET_EXIT_MAZE_REQ = 0x2311,
+ PACKET_MAZE_SWITCH_NPC_CLICK_REQ = 0x7c11,
+ PACKET_MAZE_LUA_FUNCTION_REQ = 0x7e11,
+ PACKET_OPERATION_END_REQ = 0x6211,
+ PACKET_MAZE_INTERACTION_CLICK_REQ = 0x7711,
+ PACKET_MAZE_INTERACTION_MOTION = 0x7911,
+ PACKET_QUEST_MOVE_CHECK_REQ = 0x6511,
+ PACKET_CHECK_EVENT_SPAWN_BOX_REQ = 0x3511,
+ PACKET_MAZE_SECTOR_ERROR_FIX = 0x0311,
+ PACKET_PARTY_INVITE = 0x0112,
+ PACKET_PARTY_ACCEPT = 0x0212,
+ PACKET_PARTY_CHANGE_MASTER = 0x0312,
+ PACKET_PARTY_KICK_OUT = 0x0412,
+ PACKET_PARTY_LEAVE = 0x0512,
+ PACKET_SHOP_BUY = 0x0109,
+ PACKET_SHOP_SELL = 0x0209,
+ PACKET_SHOP_REPURCHASER_LIST = 0x0309,
+ PACKET_SHOP_REPURCHASER = 0x0409,
+ PACKET_SHOP_CASH_LOAD = 0x2009,
+ PACKET_SHOP_CASH_BUY = 0x2109,
+ PACKET_SHOP_CASH_SET = 0x2309,
+ PACKET_SHOP_CASH_SET_DEL = 0x2409,
+ PACKET_SHOP_CASH_GIFT = 0x2509,
+ PACKET_TRADE_REQ = 0x2a00,
+ PACKET_TRADE_ACCEPT = 0x2a00,
+ PACKET_TRADE_UPDATE_ITEM = 0x2a00,
+ PACKET_TRADE_UPDATE_MONEY = 0x2a00,
+ PACKET_TRADE_CHECK = 0x2a00,
+ PACKET_TRADE_CONFIRM = 0x2a00,
+ PACKET_TRADE_CANCEL = 0x2a00,
+ PACKET_PRIVATE_SHOP_START = 0x2a00,
+ PACKET_PRIVATE_SHOP_STATE = 0x2a00,
+ PACKET_PRIVATE_SHOP_ITEM = 0x2a00,
+ PACKET_PRIVATE_SHOP_SELECT = 0x2a00,
+ PACKET_OPTION_UPDATE = 0x0201,
+ PACKET_LOGIN_OPTION_UPDATE = 0x3202,
+ PACKET_CHAT_NORMAL = 0x0107,
+ PACKET_CHAT_WHISPER = 0x0207,
+ PACKET_CHAT_TRADE = 0x0307,
+ PACKET_CHAT_GM_COMMAND = 0x0607,
+ PACKET_ITEM_UPGRADE = 0x0218,
+ PACKET_ITEM_RESTORE = 0x2218,
+ PACKET_ITEM_UNSEAL = 0x2418,
+ PACKET_ITEM_USE_EFFECT = 0x2618,
+ PACKET_ITEM_EXCHANGE = 0x0318,
+ PACKET_ITEM_DISASSEMBLE = 0x0418,
+ PACKET_DROP_PICK_UP = 0x0214,
+ PACKET_ITEM_REPAIR = 0x0818,
+ PACKET_ITEM_REPAIR_NPC = 0x0918,
+ PACKET_ITEM_REPAIR_EQUIP = 0x1018,
+ PACKET_ITEM_REPAIR_ALL = 0x1118,
+ PACKET_ITEM_RENOVATE = 0x2718,
+ PACKET_ITEM_REFINE = 0x2918,
+ PACKET_ITEM_EVOLUTION = 0x1318,
+ PACKET_ITEM_AKASHIC_MAKE_EX = 0x2518,
+ PACKET_ITEM_AKASHIC_DISASSEMBLE = 0x1518,
+ PACKET_ITEM_AKASHIC_COMPOSE = 0x1718,
+ PACKET_ITEM_AKASHIC_COMPOSE_EX = 0x3318,
+ PACKET_ITEM_DISASSEMBLE_EX = 0x1818,
+ PACKET_QUEST_ACCEPT = 0x0315,
+ PACKET_QUEST_EPISODE_COMPLETE = 0x0515,
+ PACKET_QUEST_GIVE_UP = 0x0615,
+ PACKET_QUEST_EVENT_UPDATE = 0x0815,
+ PACKET_QUEST_HELPER = 0x0915,
+ PACKET_QUEST_FAIL = 0x1115,
+ PACKET_DAILY_MISSION_ACCEPT = 0x0224,
+ PACKET_DAILY_MISSION_HELPER = 0x0424,
+ PACKET_WEEKLY_MISSION_REWARD = 0x0332,
+ PACKET_WEEKLY_MISSION_REWARD_WEEK = 0x0432,
+ PACKET_CHARACTER_LOAD_TITLE = 0x2303,
+ PACKET_CHARACTER_GET_REWARD_SHARE_POINT = 0x6303,
+ PACKET_CHARACTER_UPDATE_TITLE = 0x2503,
+ PACKET_CHARACTER_FAVORITE_TITLE = 0x2a03,
+ PACKET_FRIEND_INVITE = 0x1119,
+ PACKET_FRIEND_INVITE_ACCEPT = 0x1319,
+ PACKET_FRIEND_DELETE = 0x1519,
+ PACKET_FRIEND_BLOCK_ADD = 0x2119,
+ PACKET_FRIEND_BLOCK_DEL = 0x2219,
+ PACKET_FRIEND_RECOMMAND_LIST = 0x5119,
+ PACKET_FRIEND_INFO = 0x3219,
+ PACKET_POST_SEND_LIST = 0x1020,
+ PACKET_POST_RECV_LIST = 0x0220,
+ PACKET_POST_SAVE_LIST = 0x0120,
+ PACKET_POST_READ = 0x0420,
+ PACKET_POST_ACCOUNT_READ = 0x1620,
+ PACKET_POST_SEND = 0x0320,
+ PACKET_POST_RECEIPT = 0x0520,
+ PACKET_POST_ACCOUNT_RECEIPT = 0x1720,
+ PACKET_POST_SENDBACK = 0x0820,
+ PACKET_POST_SEND_DEL = 0x0620,
+ PACKET_POST_RECV_DEL = 0x0720,
+ PACKET_POST_SAVE = 0x1820,
+ PACKET_POST_LIST_REFRESH = 0x1920,
+ PACKET_POST_RECEIPT_ALL = 0x2120,
+ PACKET_ENTER_SERVER_REQ = 0x1302,
+ PACKET_ENTER_GAMESERVER_REQ = 0x2103,
+ PACKET_ITEM_UPDATE_QUICKSLOT_CARD = 0x2708,
+ PACKET_ITEM_UPDATE_QUICKSLOT_ITEM = 0x2808,
+ PACKET_ITEM_MAZE_REWARD_ITEM = 0x4708,
+ PACKET_ITEM_APPEARANCE_EQUIP = 0x5208,
+ PACKET_ITEM_NAME_CHANGE = 0x5208,
+ PACKET_ITEM_UPDATE_CASH = 0x5308,
+ PACKET_ITEM_MAKE = 0x0118,
+ PACKET_ITEM_SOCKET_EQUIP = 0x0518,
+ PACKET_ITEM_SOCKET_ACTIVE = 0x0618,
+ PACKET_ITEM_SOCKET_DETACH = 0x0718,
+ PACKET_ITEM_BROACH_EQUIP = 0x2018,
+ PACKET_ITEM_BROACH_ACTIVE = 0x2118,
+ PACKET_ITEM_BROACH_COMPOSE = 0x2318,
+ PACKET_ITEM_BROACH_REMOVE = 0x2818,
+ PACKET_ITEM_SOCKET_EXCHANGE = 0x3018,
+ PACKET_ITEM_SOCKET_UPGRADE = 0x3118,
+ PACKET_ITEM_SOCKET_EXTRACT = 0x3218,
+ PACKET_ITEM_TITLE_CHANGE = 0x3718,
+ PACKET_ITEM_DYE = 0x3618,
+ PACKET_MODE_MAZE_MATCHING_ENTER = 0x0133,
+ PACKET_MODE_MAZE_MATCHING_EXIT = 0x0333,
+ PACKET_SOULMETRY_COMPLETE = 0x0521,
+ PACKET_VACCUM_CLICK_START = 0x0125,
+ PACKET_VACCUM_CLICK_CANCEL = 0x0225,
+ PACKET_LEAGUE_CREATE = 0x0122,
+ PACKET_LEAGUE_DELETE = 0x0222,
+ PACKET_LEAGUE_LIST = 0x0322,
+ PACKET_LEAGUE_INVITE = 0x1322,
+ PACKET_LEAGUE_INVITE_ACCEPT = 0x1422,
+ PACKET_LEAGUE_INVITE_REJECT = 0x1522,
+ PACKET_LEAGUE_WITHDRAW = 0x0922,
+ PACKET_LEAGUE_KICK = 0x0f22,
+ PACKET_LEAGUE_APPLICANT = 0x0522,
+ PACKET_LEAGUE_APPLICANT_ACCEPT = 0x1822,
+ PACKET_LEAGUE_APPLICANT_REJECT = 0x1922,
+ PACKET_LEAGUE_DELEGATE = 0x0a22,
+ PACKET_LEAGUE_BOARD = 0x0822,
+ PACKET_LEAGUE_SEARCH = 0x2022,
+ PACKET_LEAGUE_OVERLAP_NAME = 0x2122,
+ PACKET_LEAGUE_INFO = 0x0722,
+ PACKET_LEAGUE_AUTH_CHANGE = 0x3222,
+ PACKET_LEAGUE_NOTICE_CHANGE = 0x2922,
+ PACKET_LEAGUE_POSITION_NAME_CHANGE = 0x3322,
+ PACKET_LEAGUE_CARD_CHANGE = 0x3122,
+ PACKET_LEAGUE_SKILL_LEARN = 0x5322,
+ PACKET_LEAGUE_INVENTORY_MOVE = 0x5422,
+ PACKET_LEAGUE_NAME_CHANGE = 0x3022,
+ PACKET_LEAGUE_INVENTORY_INFO = 0x5622,
+ PACKET_LEAGUE_MEMBER_POSITION_CHANGE = 0x3922,
+ PACKET_LEAGUE_OPEN_OR_NOT = 0x4622,
+ PACKET_LEAGUE_RECRUIT_NOTICE = 0x4722,
+ PACKET_CHARATER_CHANGE_SERVER = 0x6003,
+ PACKET_CHARACTER_UPDATE_SPECIAL_OPTION_LIST = 0x4703,
+ PACKET_CHARACTER_CHECK_ENTER_MAZE = 0x4003,
+ PACKET_CHARACTER_PROFILE_PHOTO_FAVORITE = 0x0b03,
+ PACKET_CHARACTER_PROFILE_PHOTO_CAHNGE = 0x0c03,
+ PACKET_ACHIEVE_REWARD = 0x7403,
+ PACKET_DO_GESTURE = 0x0123,
+ PACKET_GESTURE_SLOT_UPDATE = 0x0323,
+ PACKET_OTHER_CHARACTER_INFO = 0x7503,
+ PACKET_CHARACTER_COMMUNITY = 0x7703,
+ PACKET_PARTY_CANCEL = 0x0812,
+ PACKET_PARTY_UPDATE_INFO = 0x0912,
+ PACKET_PARTY_MATCHING_ENTER = 0x3012,
+ PACKET_PARTY_MATCHING_EXIT = 0x3112,
+ PACKET_PARTY_MATCHING_CHECK = 0x3212,
+ PACKET_SYSTEM_XIGNCODE = 0x0301,
+ PACKET_PARTY_RECRUIT_LIST = 0x3612,
+ PACKET_PARTY_RECRUIT_ADD = 0x3712,
+ PACKET_PARTY_RECRUIT_APPLY = 0x3812,
+ PACKET_PARTY_RECRUIT_APPLY_ACCEPT = 0x3912,
+ PACKET_PARTY_RECRUIT_APPLY_REJECT = 0x3a12,
+ PACKET_PARTY_RECRUIT_DEL = 0x3c12,
+ PACKET_PARTY_RECRUIT_APPLY_LIST = 0x3d12,
+ PACKET_PARTY_AWAITER_LIST = 0x4212,
+ PACKET_PARTY_AWAITER_ADD = 0x4012,
+ PACKET_PARTY_AWAITER_DEL = 0x4112,
+ PACKET_PARTY_RECRUIT_APPLY_INFO = 0x4312,
+ PACKET_PARTY_AWAITER_INFO = 0x4412,
+ PACKET_FRIEND_RECRUIT_LIST = 0x4119,
+ PACKET_FRIEND_RECRUIT_ADD = 0x4219,
+ PACKET_FRIEND_RECRUIT_DEL = 0x4319,
+ PACKET_FRIEND_RECRUIT_INFO = 0x4419,
+ PACKET_FRIEND_FIND = 0x3319,
+ PACKET_MYROOM_ENTER_REQ = 0x1126,
+ PACKET_MYROOM_CREATE_REQ = 0x1026,
+ PACKET_MYROOM_EDIT_START = 0x0526,
+ PACKET_MYROOM_EDIT_END = 0x0626,
+ PACKET_MYROOM_RECOMMEND = 0x4026,
+ PACKET_MYROOM_FAVORITE = 0x4126,
+ PACKET_MYROOM_WRITE_BOARD = 0x4226,
+ PACKET_MYROOM_WRITE_INFO = 0x4326,
+ PACKET_MYROOM_BOARD_LIST = 0x4426,
+ PACKET_MYROOM_RANK_INFO = 0x4626,
+ PACKET_MYROOM_FAVORITE_INFO = 0x4726,
+ PACKET_MYROOM_RANK_REWARD = 0x4826,
+ PACKET_HELPER_SUMMON = 0x0227,
+ PACKET_HELPER_SUPPORT_INFO = 0x0527,
+ PACKET_HELPER_SUPPORT_REGISTER = 0x0627,
+ PACKET_HELPER_SUPPORT_REWARD = 0x0727,
+ PACKET_HELPER_SUPPORT_LIST = 0x0827,
+ PACKET_HELPER_SUPPORT_EQUIP = 0x0927,
+ PACKET_HELPER_EQUIP = 0x1027,
+ PACKET_HELPER_CHANGE_ORDER = 0x1027,
+ PACKET_HELPER_ALL_RELEASE = 0x1227,
+ PACKET_HELPER_AUTO_SUMMON = 0x1427,
+ PACKET_MYROOM_EXIT_REQ = 0x1326,
+ PACKET_MYROOM_SETUP = 0x1426,
+ PACKET_MYROOM_KICK_OUT = 0x1526,
+ PACKET_MYROOM_ITEM_ADD = 0x2026,
+ PACKET_MYROOM_ITEM_DEL = 0x2126,
+ PACKET_MYROOM_ITEM_USE = 0x2226,
+ PACKET_MYROOM_ITEM_RELEASE_USED = 0x2326,
+ PACKET_MYROOM_DOOR_STATE = 0x2626,
+ PACKET_MYROOM_POLLEN_ADD = 0x3126,
+ PACKET_MYROOM_POLLEN_CULTIVATION = 0x3226,
+ PACKET_MYROOM_POLLEN_HARVEST = 0x3326,
+ PACKET_MYROOM_POLLEN_HELP = 0x3426,
+ PACKET_MYROOM_POLLEN_ITEM_USE = 0x3526,
+ PACKET_MYROOM_PLLLEN_CANCEL = 0x3726,
+ PACKET_INFINITE_TOWER_ENTER_CHAPTER = 0x0228,
+ PACKET_INFINITE_TOWER_ENTER_NEXT_STAGE = 0x0328,
+ PACKET_SECOND_PASSWORD = 0x1703,
+ PACKET_TRADE_PASSWORD = 0x1803,
+ PACKET_CHARACTER_UPDATE_CUTSCENE = 0x1903,
+ PACKET_SHOP_GACHA = 0x2609,
+ PACKET_EXCHANGE_SEARCH = 0x012b,
+ PACKET_EXCHANGE_PRICE_HISTORY = 0x022b,
+ PACKET_EXCHANGE_INTEREST_LIST = 0x032b,
+ PACKET_EXCHANGE_INTEREST_ITEM = 0x042b,
+ PACKET_EXCHANGE_SELL_REGISTER = 0x052b,
+ PACKET_EXCHANGE_ITEM_BUY = 0x062b,
+ PACKET_EXCHANGE_ITEM_RECALL = 0x072b,
+ PACKET_EXCHANGE_MY_LIST = 0x082b,
+ PACKET_SOCIAL_ITEM_START = 0x012d,
+ PACKET_SOCIAL_ITEM_USE = 0x022d,
+ PACKET_SOCIAL_ITEM_STOP = 0x032d,
+ PACKET_RANKING_LIST = 0x012c,
+ PACKET_RANKING_REWARD = 0x022c,
+ PACKET_FORCE_INVITE = 0x012e,
+ PACKET_FORCE_ACCEPT = 0x022e,
+ PACKET_FORCE_CHANGE_MASTER = 0x032e,
+ PACKET_FORCE_KICK_OUT = 0x042e,
+ PACKET_FORCE_LEAVE = 0x052e,
+ PACKET_FORCE_CANCEL = 0x082e,
+ PACKET_FORCE_MATCHING_ENTER = 0x302e,
+ PACKET_FORCE_MATCHING_EXIT = 0x312e,
+ PACKET_EVENT_USE_COUPON_CODE = 0x212a,
+ PACKET_EVENT_NET_CAFE_ITEM_BUY = 0x2a2a,
+ PACKET_EVENT_WORLD_EVENT_INFO = 0x222a,
+ PACKET_EVENT_WORLD_EVENT_REGISTER = 0x232a,
+ PACKET_EVENT_WORLD_EVENT_REWARD = 0x242a,
+ PACKET_EVENT_WORLD_EVENT_DAILY_REWARD = 0x252a,
+ PACKET_EVENT_ROULETTE_USE = 0x292a,
+ PACKET_FORCE_MATCHING_CHECK = 0x322e,
+ PACKET_PROJECTILE_BT = 0x0112,
+ PACKET_CHAIN_BT = 0x0112,
+
+ // guesswork sends
+ PACKET_PROB_DISCONNECT = 0x1904,
+
+ // receives (manually figured out, the low byte is usually +1 of client REQ)
+ PACKET_LOGIN_RESULT = 0x0202,
+ PACKET_SERVER_LIST = 0x0402,
+ PACKET_ENTER_SERVER = 0x1102,
+ PACKET_ENTER_SERVER_RES = 0x1402,
+ PACKET_OPTION_LOAD = 0x3102,
+ PACKET_ENTER_WAIT_CHECK = 0x3402,
+ PACKET_SYSTEM_KEEP_ALIVE = 0x0501,
+ PACKET_SYSTEM_SERVER_OPTION_UPDATE = 0x0701,
+ PACKET_SYSTEM_EVENT = 0x0901,
+ PACKET_CHARACTER_LIST_RES = 0x1203,
+ PACKET_DELETE_CHARACTER_RES = 0x0303,
+ PACKET_SELECT_CHARACTER_RES = 0x1403,
+ PACKET_CHARACTER_ENTER_PROLOGUE = 0x1503,
+ PACKET_CHARACTER_ENTER_BATTLE_ZONE = 0x1603,
+ PACKET_CHARACTER_PLAY_CUTSCENE = 0x2003,
+
+ PACKET_ENTER_GAMESERVER_RES = 0x2203,
+ PACKET_CHARACTER_ADD_TITLE = 0x2403,
+ PACKET_CHARACTER_UPDATE_TITLE_BT = 0x2603,
+ PACKET_CHARACTER_CLEAR_TITLE = 0x2703,
+ PACKET_CHARACTER_UPDATE_OPEN_TITLE = 0x2903,
+ PACKET_CHARACTER_DB_LOAD_SYNC = 0x3003,
+ PACKET_CHARACTER_INFO_RES = 0x3203,
+ PACKET_CHARACTER_UPDATE_STAT_LIST = 0x3403,
+ PACKET_CHARACTER_UPDATE_ORIGIN_STAT = 0x5103,
+ PACKET_CHARACTER_CHECK_NAME = 0x5703,
+ PACKET_DAILY_MISSION_UPDATE = 0x3204,
+ PACKET_EVENT_ATTENDANCE_LOAD = 0x012a,
+ PACKET_EVENT_ROULETTE_MY_INFO = 0x282a,
+ PACKET_ITEM_UPDATE_CASH_RES = 0x3308,
+ PACKET_ITEM_AKASHIC_GETINFO_LOAD = 0x3518,
+ PACKET_INFINITE_TOWER_LOAD_INFO = 0x0128,
+ PACKET_CHARACTER_LOAD_DISTRICT_STATE = 0x6103,
+ PACKET_CHARACTER_LOAD_MAZE_STATE = 0x6203,
+ PACKET_MAZE_CLEAR_INFO = 0x6411,
+ PACKET_ENTER_MAZE_LIMIT_COUNT_LOAD = 0x4304,
+ PACKET_SOULMETRY_LIST = 0x0121,
+ PACKET_SOULMETRY_COMPLETE_LIST = 0x0221,
+ PACKET_ACHIEVE_SELECT = 0x7003,
+ PACKET_SHOP_BANNER_LOAD = 0x2809,
+ PACKET_SHOP_CASH_SET_LOAD = 0x2209,
+ PACKET_ITEM_APPEARANCE_LOAD = 0x5008,
+ PACKET_NPC_CREDIT_LOAD = 0x6503,
+ PACKET_SHOP_ITEM_LOAD = 0x1009,
+ PACKET_MYROOM_LOAD_INDEX = 0x1226,
+ PACKET_FRIEND_LOAD = 0x0119,
+ PACKET_FRIEND_LOAD_BLOCKLIST = 0x0219,
+ PACKET_DAILY_MISSION_LIST = 0x0124,
+ PACKET_HELPER_LIST_LOAD = 0x0127,
+ PACKET_ACHIEVE_UPDATE = 0x7103,
+ PACKET_WORLD_VERSION = 0x0404,
+ PACKET_EVENT_DAY_EVENT_BOOSTER_LIST = 0x202a,
+ PACKET_LEAGUE_INFO_ALERT = 0x4422,
+ PACKET_SHOP_CASH_BUY_COUNT_LOAD = 0x3009,
+ PACKET_SHOP_CASH_TAB_LOAD = 0x2909,
+ PACKET_IN_PC_INFO = 0x1104,
+ PACKET_OTHER_PC_INFOS = 0x2104,
+ PACKET_OTHER_INFOS_NPC = 0x2204,
+ PACKET_QUEST_LIST = 0x0215,
+ PACKET_GAME_WORLD_ENTER_RES = 0x0204,
+ PACKET_ITEM_CREATE = 0x0608,
+ PACKET_ITEM_MOVE_BT = 0xd08,
+ PACKET_GESTURES = 0x0223,
+
+ PACKET_SOME_PC_PACKET = 0x5104,
+
+ PACKET_UNKNOWN = 0x0601, // sent a lot
+ PACKET_AUTH_UNKNOWN1 = 0x0304, // freezes
+ PACKET_GAME_UNKNOWN1 = 0x0633, // sent after 2203 and 4703
+ PACKET_GAME_UNKNOWN2 = 0x6608,
+ PACKET_GAME_UNKNOWN3 = 0x6808,
+ PACKET_GAME_UNKNOWN4 = 0x1406,
+ PACKET_GAME_UNKNOWN5 = 0x0903,
+ PACKET_SKILLS = 0x7006,
+ PACKET_GAME_UNKNOWN10 = 0x4a08,
+ PACKET_GAME_UNKNOWN11 = 0x5708,
+ PACKET_GAME_UNKNOWN12 = 0x4808,
+ PACKET_GAME_UNKNOWN13 = 0x0604,
+ PACKET_GAME_UNKNOWN14 = 0x5317,
+ PACKET_GAME_UNKNOWN15 = 0x0705,
+ PACKET_GAME_UNKNOWN16 = 0x9203,
+ PACKET_POST_ACCOUNT_LIST = 0x1420,
+ PACKET_POST_ACCOUNT_RECV = 0x1520,
+ PACKET_DROP_INFOS = 0x0114,
+ PACKET_EVENT_ATTENDANCE_REWARD = 0x022a,
+ PACKET_QUEST_COMPLETE_LIST = 0x0115,
+ PACKET_GAME_UNKNOWN22 = 0x7551,
+ PACKET_GAME_UNKNOWN24 = 0x2106,
+ PACKET_BOOSTER_LIST_LOAD = 0x0129,
+ PACKET_CHANNEL_INFO = 0x01f1,
+ PACKET_GAME_UNKNOWN27 = 0x0205,
+ PACKET_BOOSTER_ADD = 0x0229,
+ PACKET_DROP_DELETE = 0x0314,
+ PACKET_SOULMETRY_ADD = 0x0321,
+ PACKET_BOOSTER_REMOVE = 0x0329,
+ PACKET_ATTENDANCE_CONTINUE_REWARD = 0x032a,
+ PACKET_GAME_UNKNOWN33 = 0x0405,
+ PACKET_HELPER_USER_STAT_UPDATE = 0x0427,
+ PACKET_NOTICE = 0x0507,
+ PACKET_EVENT_ATTENDANCE_PLAY_TIME_INIT = 0x052a,
+ PACKET_GAME_UNKNOWN37 = 0x0605,
+ PACKET_SOCIAL_ITEM_INFOS = 0x062d,
+ PACKET_GAME_UNKNOWN39 = 0x0706,
+ PACKET_QUEST_UPDATE = 0x0715,
+ PACKET_GAME_UNKNOWN41 = 0x0803,
+ PACKET_WORLD_WARP_RES = 0x0804,
+ PACKET_GAME_UNKNOWN43 = 0x0805,
+ PACKET_WORLD_WARP_ENABLE_RES = 0x0904,
+ PACKET_CHARACTER_ACTION_REQ = 0x0806,
+ PACKET_CHARACTER_ACTION_RES = 0x0906,
+ PACKET_GAME_UNKNOWN46 = 0x0c05,
+ PACKET_GAME_UNKNOWN47 = 0x0d05,
+ PACKET_WORLD_WARP_MAZE_RES = 0x0e04,
+ PACKET_ITEM_OPEN_SLOT_INFO = 0x0e08,
+ PACKET_GAME_UNKNOWN50 = 0x0f05,
+ PACKET_GAME_UNKNOWN51 = 0x1006,
+ PACKET_GAME_UNKNOWN52 = 0x1105,
+ PACKET_GAME_UNKNOWN53 = 0x1117,
+ PACKET_OUT_INFO_PC = 0x1204,
+ PACKET_ITEM_REDUCE = 0x1208,
+ PACKET_GAME_UNKNOWN56 = 0x1217,
+ PACKET_ITEM_ENDURANCE = 0x1218,
+ PACKET_GAME_UNKNOWN58 = 0x1305,
+ PACKET_GAME_UNKNOWN59 = 0x1306,
+ PACKET_GAME_UNKNOWN60 = 0x1308,
+ PACKET_VACCUM_INFOS = 0x1325,
+ PACKET_GAME_UNKNOWN62 = 0x1405,
+ PACKET_GAME_UNKNOWN63 = 0x1408,
+ PACKET_IN_INFO_MONSTER = 0x1504,
+ PACKET_GAME_UNKNOWN65 = 0x1506,
+ PACKET_OUT_INFO_MONSTER = 0x1604,
+ PACKET_MOVE_TRANSPORT_TAKE = 0x1605,
+ PACKET_MOVE_TRANSPORT_OFF = 0x1705,
+ PACKET_RECEIVE_ZN = 0x2008,
+ PACKET_GAME_UNKNOWN70 = 0x2108,
+ PACKET_GAME_UNKNOWN71 = 0x2111,
+ PACKET_GAME_UNKNOWN72 = 0x2217,
+ PACKET_OTHER_INFOS_MONSTER = 0x2304,
+ PACKET_GAME_UNKNOWN74 = 0x2404, // load quickslot
+ PACKET_GAME_UNKNOWN75 = 0x2608, // ^
+ PACKET_GAME_UNKNOWN76 = 0x3206, // ^ some of these
+ PACKET_GAME_UNKNOWN77 = 0x3208,
+ PACKET_MOVE_LOOP_MOTION_END_BT = 0x3305,
+ PACKET_GAME_UNKNOWN79 = 0x3317,
+ PACKET_MOVE_ATTACED_BT = 0x3405,
+ PACKET_MOVE_ATTACED_END_BT = 0x3505,
+ PACKET_GAME_UNKNOWN82 = 0x3603,
+ PACKET_RECEIVE_XP = 0x3703,
+ PACKET_ENTER_MAZE_LIMIT_COUNT_RESET = 0x4404,
+ PACKET_GAME_UNKNOWN85 = 0x4606,
+ PACKET_GAME_UNKNOWN86 = 0x4906,
+ PACKET_GAME_UNKNOWN87 = 0x5204,
+ PACKET_GAME_UNKNOWN88 = 0x5211, // bgm stuff?
+ PACKET_GAME_UNKNOWN89 = 0x5311,
+ PACKET_GAME_UNKNOWN90 = 0x5411,
+ PACKET_GAME_UNKNOWN91 = 0x5508,
+ PACKET_GAME_UNKNOWN92 = 0x5511, // portal stuff?
+ PACKET_ITEM_BROACH_LOAD = 0x5608,
+ PACKET_GAME_UNKNOWN94 = 0x5611,
+ PACKET_GAME_UNKNOWN95 = 0x5711,
+ PACKET_CHARACTER_UPDATE_SHARE_POINT = 0x5803,
+ PACKET_GAME_UNKNOWN97 = 0x5811,
+ PACKET_ITEM_SOCKET_UPDATE = 0x6108,
+ PACKET_ITEM_BROACH_UPDATE = 0x6208,
+ PACKET_CHARACTER_FP_UPDATE = 0x6403,
+ PACKET_GAME_UNKNOWN101 = 0x6611, // event box stuff
+ PACKET_GAME_UNKNOWN102 = 0x6811,
+ PACKET_GAME_UNKNOWN103 = 0x7011,
+ PACKET_GAME_UNKNOWN104 = 0x7306,
+ PACKET_GAME_UNKNOWN105 = 0x7511, // end maze / receive reward
+ PACKET_GAME_UNKNOWN106 = 0x7906,
+ PACKET_GAME_UNKNOWN107 = 0x7e06,
+ PACKET_GAME_UNKNOWN108 = 0x7f11, // event box stuff
+ PACKET_GAME_UNKNOWN109 = 0x2205,
+ PACKET_CHARACTER_MOVE = 0x105,
+ PACKET_CHARACTER_MOVE_RES = 0x205,
+ PACKET_CHARACTER_STOP_MOVE = 0x305,
+ PACKET_CHARACTER_STOP_MOVE_RES = 0x405,
+ PACKET_CHARACTER_JUMP = 0x0505,
+ PACKET_CHARACTER_JUMP_RES = 0x0605,
+
+ // 0x8001 and above make client try to execute a script?
+};
+
+union packet {
+ struct {
+ uint16_t salt, size;
+ uint8_t unknown;
+ uint16_t type;
+ } __attribute__((packed)) hdr;
+ uint8_t buf[4096 * 4];
+};
+
+struct pbuf {
+ union packet *packet;
+ size_t cursor;
+};
+
+struct pbuf_string {
+ char data[256];
+ uint16_t len;
+};
+
+bool
+packet_verify(const union packet *packet);
+
+void
+packet_crypt(union packet *packet);
+
+void
+pbuf_flush(struct pbuf *pbuf);
+
+void
+pbuf_write(struct pbuf *pbuf, const void *data, const size_t sz);
+
+void
+pbuf_write_str_len(struct pbuf *pbuf, const void *str, const uint16_t len);
+
+void
+pbuf_write_str(struct pbuf *pbuf, const char *str);
+
+void
+pbuf_write_str_len_utf16(struct pbuf *pbuf, const void *str, const uint16_t len);
+
+void
+pbuf_write_str_utf16(struct pbuf *pbuf, const char *str);
+
+size_t
+pbuf_read_safe(struct pbuf *pbuf, void *data, const size_t data_sz, const size_t sz);
+
+void
+pbuf_read(struct pbuf *pbuf, void *data, const size_t sz);
+
+void
+pbuf_read_str(struct pbuf *pbuf, struct pbuf_string *str);
+
+void
+pbuf_read_str_utf16(struct pbuf *pbuf, struct pbuf_string *str);