From The Mana World
(added generated packets page with links to gitlab) |
m (fixed none existing classes... (copy paste^^)) |
||
Line 3: | Line 3: | ||
feel free to update (debug) the table | feel free to update (debug) the table | ||
{| class="wikitable sortable mw-collapsible" | {| class="wikitable sortable mw-collapsible" | ||
|- | |- | ||
! scope="col" | PacketName | ! scope="col" | PacketName |
Revision as of 07:52, 26 January 2022
eAthena Packets
This packet table is generated also one known cast bug feel free to update (debug) the table
PacketName | PacketType | PacketLen | PacketLoc | PacketVersion | PacketSrc |
---|---|---|---|---|---|
SMSG_SKILL_WARP_POINT | 0x0abe | -1 | SkillRecv::processSkillWarpPoint2 | 20170419 | const int count = (msg.readInt16("len") - 6) / 16; const int skillId = msg.readInt16("skill id"); dialog->addText(msg.readString(16, "map name")); |
SMSG_CHANGE_MAP_SERVER | 0x0ac7 | 156 | CharServerRecv::processChangeMapServer | 20170315 | GameHandler::setMap(msg.readString(16, "map name")); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); msg.readInt32("host"); server.hostname = ipToString(msg.readInt32("host")); server.port = msg.readInt16("port"); msg.readInt32("unknown"); |
SMSG_PARTY_MEMBER_DEAD | 0x0ab2 | 7 | PartyRecv::processPartyMemberDead | 20170524 | const BeingId id = msg.readBeingId("account id"); const int isDead = msg.readUInt8("is dead"); |
SMSG_PARTY_INFO | 0x0a44 | -1 | PartyRecv::processPartyInfo | 20170524 | const int length = msg.readInt16("len"); const std::string name = msg.readString(24, "party name"); msg.readString(24, "party name"); const BeingId id = msg.readBeingId("account id"); msg.readBeingId("char id"); std::string nick = msg.readString(24, "nick"); std::string map = msg.readString(16, "map name"); const bool leader = msg.readUInt8("leader") == 0U; const bool online = msg.readUInt8("online") == 0U; msg.readInt16("class"); level = msg.readInt16("level"); msg.readInt8("pickup item share (&1)"); msg.readInt8("get item share (&2)"); msg.readInt32("unknown"); |
SMSG_PARTY_MEMBER_INFO | 0x0a43 | 85 | PartyRecv::processPartyMemberInfo | 20170524 | const BeingId id = msg.readBeingId("account id"); msg.readBeingId("char id"); const bool leader = msg.readInt32("leader") == 0U; msg.readInt16("class"); level = msg.readInt16("level"); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); const bool online = msg.readInt8("online") == 0U; msg.readString(24, "party name"); const std::string nick = msg.readString(24, "player name"); const std::string map = msg.readString(16, "map name"); msg.readInt8("pickup item share (&1)"); msg.readInt8("get item share (&2)"); |
SMSG_PARTY_MEMBER_JOB_LEVEL | 0x0abd | 10 | PartyRecv::processPartyMemberJobLevel | 20170502 | const BeingId id = msg.readBeingId("account id"); msg.readInt16("class"); const int level = msg.readInt16("level"); |
SMSG_MAIL2_MAIL_LIST_PAGE | 0x0ac2 | -1 | Mail2Recv::processMailListPage | 20170419 | msg.readInt16("len"); mailWindow->setOpenType(fromInt(msg.readUInt8("open type"), const int cnt = msg.readUInt8("cnt"); isEnd = msg.readUInt8("isEnd") != 0; mail->id = msg.readInt64("mail id"); mail->read = msg.readUInt8("is read") != 0U ? true : false; msg.readUInt8("type")); mail->sender = msg.readString(24, "sender name"); mail->time = CAST_S32(cur_time - msg.readInt32("reg time")); mail->expireTime = msg.readInt32("expire time") + cur_time; mail->title = msg.readString(-1, "title"); isEnd = msg.readUInt8("isEnd") != 0; msg.readUInt8("open type"); mail->id = msg.readInt64("mail id"); mail->read = msg.readUInt8("is read") != 0U ? true : false; msg.readUInt8("type")); mail->sender = msg.readString(24, "sender name"); mail->expireTime = msg.readInt32("expire time") + cur_time; mail->title = msg.readString(-1, "title"); |
SMSG_CHAR_MAP_INFO | 0x0ac5 | 156 | CharServerRecv::processCharMapInfo | 20170329 | PlayerInfo::setCharId(msg.readInt32("char id")); GameHandler::setMap(msg.readString(16, "map name")); msg.readInt32("map ip address"); server.hostname = ipToString(msg.readInt32("map ip address")); server.port = msg.readInt16("map ip port"); msg.readInt32("unused"); |
SMSG_MAIL2_CHECK_NAME_RESULT | 0x0a51 | 34 | Mail2Recv::processCheckNameResult | 20160316 | const int charId = msg.readInt32("char id"); msg.readInt16("class"); msg.readInt16("level"); msg.readString(24, "name"); |
SMSG_LOGIN_DATA | 0x0ac4 | -1 | LoginRecv::processLoginData | 20170315 | msg.readInt16("len"); Ea::LoginRecv::mToken.session_ID1 = msg.readInt32("session id1"); Ea::LoginRecv::mToken.account_ID = msg.readBeingId("accound id"); Ea::LoginRecv::mToken.session_ID2 = msg.readInt32("session id2"); msg.readInt32("old ip"); loginData.lastLogin = msg.readString(24, "last login"); msg.readInt16("unused"); msg.readUInt8("gender") & 3U)); msg.readString(16, "twitter auth token"); msg.readUInt8("twitter flag"); world->address = msg.readInt32("ip address"); world->port = msg.readInt16("port"); world->name = msg.readString(20, "name"); world->online_users = msg.readInt16("online number"); msg.readInt16("maintenance"); msg.readInt16("new"); msg.readInt32("unused2"); |
SMSG_ITEM_MOVE_FAILED | 0x0aa7 | 6 | InventoryRecv::processItemMoveFailed | 20161214 | const int index = msg.readInt16("index") - INVENTORY_OFFSET; msg.readInt16("unknown"); // 1 |
SMSG_REFINE_ADD_ITEM | 0x0aa2 | -1 | RefineRecv::processRefineAddItem | 20161130 | const int count = (msg.readInt16("len") - 7) / blockSize; msg.readInt16("item index"); msg.readUInt8("blacksmith blessing"); msg.readItemId("item id"); msg.readUInt8("chance"); msg.readInt32("money"); |
SMSG_REFINE_WINDOW_OPEN | 0x0aa0 | 2 | RefineRecv::processRefineOpen | 20161130 | |
SMSG_GUILD_MEMBER_LIST | 0x0aa5 | -1 | GuildRecv::processGuildMemberList | 20161026 | const int length = msg.readInt16("len"); const BeingId id = msg.readBeingId("account id"); const int charId = msg.readInt32("char id"); msg.readInt16("hair"); msg.readInt16("hair color"); const int gender = msg.readInt16("gender"); const int race = msg.readInt16("class"); const int level = msg.readInt16("level"); const int exp = msg.readInt32("exp"); const int online = msg.readInt32("online"); const int pos = msg.readInt32("position"); name = msg.readString(24, "name"); msg.readInt32("last login"); // for now unused |
SMSG_GUILD_EXPULSION_LIST | 0x0a87 | -1 | GuildRecv::processGuildExpulsionList3 | 20161019 | const int length = msg.readInt16("len"); msg.readInt32("char id"); msg.readString(40, "message"); |
SMSG_GUILD_LEAVE2 | 0x0a83 | 46 | GuildRecv::processGuildLeave2 | 20161019 | const int charId = msg.readInt32("char id"); msg.readString(40, "message"); |
SMSG_GUILD_EXPULSION2 | 0x0a82 | 46 | GuildRecv::processGuildExpulsion2 | 20161019 | msg.readString(40, "message"); const int charId = msg.readInt32("char id"); |
SMSG_VENDING_ITEMS_LIST | 0x0800 | -1 | VendingRecv::processItemsList | 20160921 | const int count = (msg.readInt16("len") - offset) / packetLen; const BeingId id = msg.readBeingId("id"); msg.readInt32("vender id"); const int value = msg.readInt32("price"); const int amount = msg.readInt16("amount"); const int index = msg.readInt16("inv index"); msg.readUInt8("item type")); const int itemId = msg.readItemId("item id"); msg.readUInt8("identify"); msg.readUInt8("attribute"); msg.readUInt8("refine"); cards[d] = msg.readItemId("card"); const uint16_t idx = msg.readInt16("option index"); const uint16_t val = msg.readInt16("option value"); msg.readUInt8("option param"); msg.readInt32("equip type?"); msg.readInt16("look"); |
SMSG_PLAYER_INVENTORY_ADD | 0x0a37 | 59 | InventoryRecv::processPlayerInventoryAdd | 20160921 | const int index = msg.readInt16("index") - INVENTORY_OFFSET; int amount = msg.readInt16("count"); const int itemId = msg.readItemId("item id"); const uint8_t identified = msg.readUInt8("identified"); const uint8_t damaged = msg.readUInt8("is damaged"); const uint8_t refine = msg.readUInt8("refine"); cards[f] = msg.readItemId("card"); equipType = msg.readInt32("location"); equipType = msg.readInt16("location"); msg.readUInt8("item type")); const unsigned char err = msg.readUInt8("result"); msg.readInt32("hire expire date"); msg.readInt16("bind on equip"); const uint16_t idx = msg.readInt16("option index"); const uint16_t val = msg.readInt16("option value"); msg.readUInt8("option param"); favorite = fromBool(msg.readUInt8("favorite"), Favorite); msg.readInt16("look"); |
SMSG_ENCHANT_EQUIPMENT | 0x0a3f | 9 | InventoryRecv::processEnchantEquipment | 20160831 | msg.readInt16("wear state"); msg.readInt16("card slot"); msg.readItemId("item id"); |
SMSG_GUILD_BASIC_INFO | 0x0a84 | 94 | GuildRecv::processGuildBasicInfo | 20160622 | const int guildId = msg.readInt32("guild id"); const int level = msg.readInt32("guild level"); const int members = msg.readInt32("connect member"); const int maxMembers = msg.readInt32("max member"); const int avgLevel = msg.readInt32("average level"); const int exp = msg.readInt32("exp"); const int nextExp = msg.readInt32("next exp"); const int emblem = msg.readInt32("emblem id"); std::string name = msg.readString(24, "guild name"); castle = msg.readString(16, "castles"); msg.readInt32("money, unused"); msg.readBeingId("leader char id"); master = msg.readString(24, "master name"); castle = msg.readString(16, "castles"); msg.readInt32("money, unused"); |
SMSG_FORMAT_MESSAGE_STRING_COLOR | 0x0a6f | -1 | ChatRecv::processFormatMessageStringColor | 20160330 | const int strLen = msg.readInt16("len") - 10; const int msgId = msg.readInt16("msg id"); msg.readInt32("color"); const std::string message = msg.readString(strLen, "value"); |
SMSG_MAP_LOGIN_SUCCESS | 0x02eb | 13 | GameRecv::processMapLogin | 20160330 | msg.readInt32("start time"); msg.readCoordinates(x, y, direction, "position"); msg.readInt8("x size"); msg.readInt8("y size"); msg.readInt16("font"); msg.readUInt8("sex"); |
SMSG_SKILL_SCALE | 0x0a41 | 18 | SkillRecv::processSkillScale | 20151223 | msg.readBeingId("being id"); msg.readInt16("skill id"); msg.readInt16("skill level"); msg.readInt16("x"); msg.readInt16("y"); msg.readInt32("cast time"); |
CMSG_PLAYER_SELECT_STYLE_ACK | 0x0a47 | 3 | PlayerRecv::processSelectStyleAck | 20151104 | msg.readUInt8("flag"); |
SMSG_SELECT_CART | 0x097f | -1 | InventoryRecv::processSelectCart | 20150805 | const int count = msg.readInt16("len") - 8; msg.readBeingId("account id"); msg.readUInt8("cart type"); |
SMSG_CAMERA_INFO | 0x0a78 | 15 | MapRecv::processCameraInfo | 20160525 | msg.readUInt8("action"); msg.readFloat("range"); msg.readFloat("rotation"); msg.readFloat("latitude"); |
SMSG_QUEST_NOTIFY_OBJECTIVES | 0x08fe | -1 | QuestRecv::processUpdateQuestsObjectives2 | 20150513 | const int num = (msg.readInt16("len") - 4) / 12; msg.readInt32("quest id"); msg.readInt32("monster id"); msg.readInt16("max count"); msg.readInt16("count"); |
SMSG_QUEST_UPDATE_OBJECTIVES | 0x09fa | -1 | QuestRecv::processUpdateQuestsObjectives | 20150513 | msg.readInt16("len"); const int num = msg.readInt16("objectives count"); msg.readInt32("quest id"); msg.readInt32("hunt ident"); msg.readInt32("hunt ident2"); msg.readInt32("hunt ident"); msg.readInt32("monster id"); msg.readInt16("count old"); msg.readInt16("count new"); |
SMSG_QUEST_ADD | 0x09f9 | 143 | QuestRecv::processAddQuest | 20150513 | const int var = msg.readInt32("quest id"); const int val = msg.readUInt8("state"); msg.readUInt8("time diff"); msg.readInt32("time"); const int num = msg.readInt16("objectives count"); msg.readInt32("hunt ident"); msg.readInt32("hunt ident2"); msg.readInt32("mob type"); msg.readInt32("hunt ident"); msg.readInt32("mob type"); msg.readInt32("mob id"); msg.readInt16("level min"); msg.readInt16("level max"); msg.readInt16("hunt count"); msg.readInt16("max count"); msg.readString(24, "mob name"); |
SMSG_QUEST_LIST | 0x09f8 | -1 | QuestRecv::processAddQuests | 20150513 | msg.readInt16("len"); const int num = msg.readInt32("quests count"); const int var = msg.readInt32("quest id"); const int val = msg.readUInt8("state"); msg.readInt32("time diff"); msg.readInt32("time"); const int cnt = msg.readInt16("objectives count"); msg.readInt32("hunt ident"); msg.readInt32("hunt ident2"); msg.readInt32("mob type"); msg.readInt32("hunt ident"); msg.readInt32("mob type"); msg.readInt32("mob id"); msg.readInt16("level min"); msg.readInt16("level max"); msg.readInt16("hunt count"); msg.readInt16("max count"); msg.readString(24, "mob name"); |
SMSG_PLAYER_HEAL | 0x0a27 | 8 | PlayerRecv::processPlayerHeal | 20150513 | const int type = msg.readInt16("var id"); amount = msg.readInt32("value"); amount = msg.readInt16("value"); |
SMSG_BEING_MOVE | 0x09fd | -1 | BeingRecv::processBeingMove | 20150513 | (sy&0x0f)"); msg.readInt8("xs"); msg.readInt8("ys"); const int level = CAST_S32(msg.readInt16("level")); msg.readInt16("font"); const int maxHP = msg.readInt32("max hp"); const int hp = msg.readInt32("hp"); msg.readInt8("is boss"); msg.readInt16("body2"); msg.readString(24, "name"); |
SMSG_BEING_SPAWN | 0x09fe | -1 | BeingRecv::processBeingSpawn | 20150513 | msg.readInt16("len"); msg.readUInt8("object type")); const BeingId id = msg.readBeingId("being id"); msg.readBeingId("char id"); int16_t speed = msg.readInt16("speed"); const uint32_t opt1 = msg.readInt16("opt1"); const uint32_t opt2 = msg.readInt16("opt2"); option = msg.readInt32("option"); option = msg.readInt16("option"); const int16_t job = msg.readInt16("class"); const int hairStyle = msg.readInt16("hair style"); weapon = msg.readItemId("weapon"); msg.readItemId("shield"); weapon = CAST_U32(msg.readInt16("weapon")); const uint16_t headBottom = msg.readInt16("head bottom"); msg.readInt16("shield"); const uint16_t headTop = msg.readInt16("head top"); const uint16_t headMid = msg.readInt16("head mid"); msg.readInt16("hair color"), ItemColor); const uint16_t shoes = msg.readInt16("shoes or clothes color?"); const uint16_t gloves = msg.readInt16("head dir / gloves"); msg.readInt16("robe"); msg.readInt32("guild id"); msg.readInt16("guild emblem"); dstBeing->setManner(msg.readInt16("manner")); opt3 = msg.readInt32("opt3"); opt3 = msg.readInt16("opt3"); dstBeing->setKarma(msg.readUInt8("karma")); const uint8_t gender = CAST_U8(msg.readUInt8("gender") & 3); msg.readCoordinates(x, y, dir, "position"); msg.readInt8("xs"); msg.readInt8("ys"); const int level = CAST_S32(msg.readInt16("level")); msg.readInt16("font"); const int maxHP = msg.readInt32("max hp"); const int hp = msg.readInt32("hp"); msg.readInt8("is boss"); msg.readInt16("body2"); msg.readString(24, "name"); |
SMSG_BEING_VISIBLE | 0x09ff | -1 | BeingRecv::processBeingVisible | 20150513 | msg.readInt16("len"); msg.readUInt8("object type")); const BeingId id = msg.readBeingId("being id"); msg.readBeingId("char id"); int16_t speed = msg.readInt16("speed"); const uint32_t opt1 = msg.readInt16("opt1"); const uint32_t opt2 = msg.readInt16("opt2"); option = msg.readInt32("option"); option = msg.readInt16("option"); const int16_t job = msg.readInt16("class"); const int hairStyle = msg.readInt16("hair style"); weapon = msg.readItemId("weapon"); msg.readItemId("shield"); weapon = CAST_U32(msg.readInt16("weapon")); const uint16_t headBottom = msg.readInt16("head bottom"); msg.readInt16("shield"); const uint16_t headTop = msg.readInt16("head top"); const uint16_t headMid = msg.readInt16("head mid"); const ItemColor hairColor = fromInt(msg.readInt16("hair color"), const uint16_t shoes = msg.readInt16("shoes or clothes color?"); const uint16_t gloves = msg.readInt16("head dir / gloves"); msg.readInt16("robe"); msg.readInt32("guild id"); msg.readInt16("guild emblem"); dstBeing->setManner(msg.readInt16("manner")); opt3 = msg.readInt32("opt3"); opt3 = msg.readInt16("opt3"); dstBeing->setKarma(msg.readUInt8("karma")); const uint8_t gender = CAST_U8(msg.readUInt8("gender") & 3); msg.readCoordinates(x, y, dir, "position"); msg.readInt8("xs"); msg.readInt8("ys"); applyPlayerAction(msg, dstBeing, msg.readUInt8("action type")); const int level = CAST_S32(msg.readInt16("level")); msg.readInt16("font"); const int maxHP = msg.readInt32("max hp"); const int hp = msg.readInt32("hp"); msg.readInt8("is boss"); msg.readInt16("body2"); msg.readString(24, "name"); |
SMSG_DRESS_ROOM_OPEN | 0x0a02 | 4 | PlayerRecv::processDressRoomOpen | 20150513 | msg.readInt16("view"); |
SMSG_BEING_HAT_EFFECTS | 0x0a3b | -1 | BeingRecv::processBeingHatEffects | 20150507 | const int cnt = (msg.readInt16("len") - 9) / 2; msg.readBeingId("being id"); msg.readUInt8("enable"); msg.readInt16("hat effect"); |
SMSG_SEARCHSTORE_SEARCH_ACK | 0x0836 | 0 | SearchStoreRecv::processSearchAck | 20150226 | const int count = (msg.readInt16("len") - 7) / (104 + itemIdLen); msg.readUInt8("is first page"); msg.readUInt8("is next page"); msg.readUInt8("remain uses"); msg.readInt32("store id"); msg.readInt32("aoount id"); msg.readString(80, "store name"); msg.readItemId("item id"); msg.readUInt8("item type"); msg.readInt32("price"); msg.readInt16("amount"); msg.readUInt8("refine"); msg.readItemId("card"); msg.readInt16("option index"); msg.readInt16("option value"); msg.readUInt8("option param"); |
SMSG_BEING_VIEW_EQUIPMENT | 0x0a2d | -1 | BeingRecv::processBeingViewEquipment | 20150226 | const int count = (msg.readInt16("len") - 45) / (21 + itemIdLen * 5); msg.readString(24, "name"); msg.readInt16("job"); msg.readInt16("head"); msg.readInt16("accessory"); msg.readInt16("accessory2"); msg.readInt16("accessory3"); msg.readInt16("robe"); msg.readInt16("hair color"); msg.readInt16("body color"); msg.readUInt8("gender"); msg.readInt16("index"); msg.readItemId("item id"); msg.readUInt8("item type"); msg.readInt32("location"); msg.readInt32("wear state"); msg.readInt8("refine"); msg.readItemId("card"); msg.readInt32("hire expire date (?)"); msg.readInt16("equip type"); msg.readInt16("item sprite number"); msg.readUInt8("flags"); |
SMSG_PLAYER_STORAGE_EQUIP | 0x0a10 | -1 | InventoryRecv::processPlayerStorageEquip | 20150226 | msg.readInt16("len"); msg.readString(24, "storage name"); const int index = msg.readInt16("index") - STORAGE_OFFSET; const int itemId = msg.readItemId("item id"); msg.readUInt8("item type")); msg.readInt32("location"); msg.readInt32("wear state"); msg.readUInt8("identified"); msg.readInt16("location"); msg.readInt16("wear state"); msg.readUInt8("is damaged"); const uint8_t refine = msg.readUInt8("refine level"); cards[f] = msg.readItemId("card"); msg.readInt32("hire expire date"); msg.readInt16("bind on equip"); msg.readInt16("sprite"); options = new ItemOptionsList(msg.readUInt8("option count")); const uint16_t idx = msg.readInt16("option index"); const uint16_t val = msg.readInt16("option value"); msg.readUInt8("option param"); flags.byte = msg.readUInt8("flags"); |
SMSG_PLAYER_CART_EQUIP | 0x0a0f | -1 | InventoryRecv::processPlayerCartEquip | 20150226 | msg.readInt16("len"); const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int itemId = msg.readItemId("item id"); msg.readUInt8("item type")); msg.readInt32("location"); msg.readInt32("wear state"); msg.readUInt8("identified"); msg.readInt16("location"); msg.readInt16("wear state"); msg.readUInt8("is damaged"); const uint8_t refine = msg.readUInt8("refine level"); cards[f] = msg.readItemId("card"); msg.readInt32("hire expire date"); msg.readInt16("bind on equip"); msg.readInt16("sprite"); options = new ItemOptionsList(msg.readUInt8("option count")); const uint16_t idx = msg.readInt16("option index"); const uint16_t val = msg.readInt16("option value"); msg.readUInt8("option param"); flags.byte = msg.readUInt8("flags"); |
SMSG_PLAYER_EQUIPMENT | 0x0a0d | -1 | InventoryRecv::processPlayerEquipment | 20150226 | msg.readInt16("len"); const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int itemId = msg.readItemId("item id"); msg.readUInt8("item type")); msg.readInt32("location"); equipType = msg.readInt32("wear state"); msg.readUInt8("identified"); msg.readInt16("location"); equipType = msg.readInt16("wear state"); msg.readUInt8("is damaged"); const uint8_t refine = CAST_U8(msg.readInt8("refine")); cards[f] = msg.readItemId("card"); msg.readInt32("hire expire date (?)"); msg.readInt16("equip type"); msg.readInt16("item sprite number"); options = new ItemOptionsList(msg.readUInt8("option count")); const uint16_t idx = msg.readInt16("option index"); const uint16_t val = msg.readInt16("option value"); msg.readUInt8("option param"); flags.byte = msg.readUInt8("flags"); |
SMSG_PLAYER_CART_ADD | 0x0a0b | 47 | InventoryRecv::processPlayerCartAdd | 20150226 | const int index = msg.readInt16("index") - INVENTORY_OFFSET; int amount = msg.readInt32("count"); const int itemId = msg.readItemId("item id"); msg.readUInt8("item type")); const uint8_t identified = msg.readUInt8("identified"); const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged); const uint8_t refine = msg.readUInt8("refine"); cards[f] = msg.readItemId("card"); const uint16_t idx = msg.readInt16("option index"); const uint16_t val = msg.readInt16("option value"); msg.readUInt8("option param"); |
SMSG_PLAYER_STORAGE_ADD | 0x0a0a | 47 | InventoryRecv::processPlayerStorageAdd | 20150226 | const int index = msg.readInt16("index") - STORAGE_OFFSET; const int amount = msg.readInt32("amount"); const int itemId = msg.readItemId("item id"); itemType = static_cast<ItemTypeT>(msg.readUInt8("type")); const unsigned char identified = msg.readUInt8("identify"); const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged); const uint8_t refine = msg.readUInt8("refine"); cards[f] = msg.readItemId("card"); const uint16_t idx = msg.readInt16("option index"); const uint16_t val = msg.readInt16("option value"); msg.readUInt8("option param"); |
SMSG_TRADE_ITEM_ADD | 0x0a09 | 45 | TradeRecv::processTradeItemAdd | 20150226 | const int type = msg.readItemId("item id"); msg.readUInt8("item type")); const int amount = msg.readInt32("amount"); const uint8_t identify = msg.readUInt8("identify"); const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged); const uint8_t refine = msg.readUInt8("refine"); cards[f] = msg.readItemId("card"); const uint16_t idx = msg.readInt16("option index"); const uint16_t val = msg.readInt16("option value"); msg.readUInt8("option param"); |
SMSG_VENDING_OPEN | 0x0136 | -1 | VendingRecv::processOpen | 20150226 | const int count = (msg.readInt16("len") - 8) / packetLen; msg.readInt32("id"); msg.readInt32("price"); msg.readInt16("inv index"); msg.readInt16("amount"); msg.readUInt8("item type"); msg.readItemId("item id"); msg.readUInt8("identify"); msg.readUInt8("attribute"); msg.readUInt8("refine"); msg.readItemId("card"); msg.readInt16("option index"); msg.readInt16("option value"); msg.readUInt8("option param"); |
SMSG_PLAYER_GUILD_PARTY_INFO | 0x0a30 | 106 | BeingRecv::processPlayerGuilPartyInfo2 | 20150225 | const BeingId beingId = msg.readBeingId("being id"); const std::string name = msg.readString(24, "char name"); dstBeing->setPartyName(msg.readString(24, "party name")); dstBeing->setGuildName(msg.readString(24, "guild name")); dstBeing->setGuildPos(msg.readString(24, "guild pos")); msg.readString(24, "party name"); msg.readString(24, "guild name"); msg.readString(24, "guild pos"); msg.readInt32("title"); |
SMSG_ACHIEVEMENT_GET_REWARD | 0x0a26 | 6 | AchievementRecv::processAchievementGetReward | 20150225 | msg.readUInt8("received"); msg.readInt32("ach id"); |
SMSG_ACHIEVEMENT_UPDATE | 0x0a24 | 66 | AchievementRecv::processAchievementUpdate | 20150225 | msg.readInt32("total points"); msg.readInt16("rank level"); msg.readInt32("rank points"); msg.readInt32("rank points need"); msg.readInt32("ach id"); msg.readUInt8("completed"); msg.readInt32("objective"); msg.readInt32("completed at"); msg.readUInt8("reward"); |
SMSG_ACHIEVEMENT_LIST | 0x0a23 | -1 | AchievementRecv::processAchievementList | 20150225 | const int count = (msg.readInt16("len") - 22) / 50; msg.readInt32("total achievements"); msg.readInt32("total points"); msg.readInt16("rank level"); msg.readInt32("rank points"); msg.readInt32("rank points need"); msg.readInt32("ach id"); msg.readUInt8("completed"); msg.readInt32("objective"); msg.readInt32("completed at"); msg.readUInt8("reward"); |
SMSG_CHAR_PASSWORD_RESPONSE | 0x0062 | 3 | LoginRecv::processCharPasswordResponse | 0 | const uint8_t errMsg = msg.readUInt8("result code"); |
SMSG_PLAYER_ATTRS | 0x0b25 | -1 | PlayerRecv::processPlayerAttrs | 0 | const int len = msg.readInt16("len"); const int groupId = msg.readInt32("group id"); |
SMSG_QUEST_ADD2 | 0x0b24 | 23 | QuestRecv::processAddQuest2 | 0 | const int var = msg.readInt32("quest id"); msg.readUInt8("state"); const int val1 = msg.readInt32("count1"); const int val2 = msg.readInt32("count2"); const int val3 = msg.readInt32("count3"); const int time = msg.readInt32("time"); |
SMSG_QUEST_LIST2 | 0x0b23 | -1 | QuestRecv::processAddQuests2 | 0 | msg.readInt16("len"); const int num = msg.readInt32("quests count"); const int var = msg.readInt32("quest id"); msg.readUInt8("state"); const int val1 = msg.readInt32("count1"); const int val2 = msg.readInt32("count2"); const int val3 = msg.readInt32("count3"); const int time = msg.readInt32("time"); |
SMSG_HOMUNCULUS_EXP | 0x0b22 | 10 | HomunculusRecv::processHomunculusExp | 0 | const int exp = msg.readInt32("exp"); msg.readInt32("unused"); |
SMSG_WALK_ERROR | 0x0b21 | 10 | PlayerRecv::processWalkError | 0 | msg.readInt32("tick"); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); |
SMSG_PLAYER_UPDATE_SKILL2 | 0x0b20 | -1 | SkillRecv::processSkillUpdate2 | 0 | msg.readInt16("len"); // for now unused const int skillId = msg.readInt16("skill id"); msg.readInt32("inf")); msg.readInt32("inf2"); const int level = msg.readInt16("skill level"); const int sp = msg.readInt16("sp"); const int range = msg.readInt16("range"); const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); |
SMSG_PLAYER_ADD_SKILL2 | 0x0b1f | -1 | SkillRecv::processSkillAdd2 | 0 | msg.readInt16("len"); // for now unused const int skillId = msg.readInt16("skill id"); msg.readInt32("inf")); msg.readInt32("inf2"); const int level = msg.readInt16("skill level"); const int sp = msg.readInt16("sp"); const int range = msg.readInt16("range"); const std::string name = msg.readString(24, "skill name"); const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); |
SMSG_SKILL_CASTING2 | 0x0b1e | -1 | BeingRecv::processSkillCastingEvol | 0 | msg.readInt16("len"); // for now unused const BeingId srcId = msg.readBeingId("src id"); const BeingId dstId = msg.readBeingId("dst id"); const int dstX = msg.readInt16("dst x"); const int dstY = msg.readInt16("dst y"); const int skillId = msg.readInt16("skill id"); const int skillLevel = msg.readInt16("skill level"); msg.readInt32("element"); // +++ use different effects const int castTime = msg.readInt32("cast time"); const int range = msg.readInt32("skill range"); static_cast<SkillType2::SkillType2>(msg.readInt32("inf2")); |
SMSG_PLAYER_KILLED_BY | 0x0b1d | 6 | PlayerRecv::processKilledBy | 0 | const BeingId id = msg.readBeingId("killer id"); |
SMSG_NPC_SKIN | 0x0b1c | -1 | NpcRecv::processNpcSkin | 0 | const int len = msg.readInt16("len"); const std::string skin = msg.readString(len - 8, "skin"); msg.readString(len - 8, "skin"); |
SMSG_MAP_SET_TILES_TYPE | 0x0b1b | 34 | Ea::MapRecv::processSetTilesType | 0 | const int x1 = msg.readInt16("x1"); const int y1 = msg.readInt16("y1"); const int x2 = msg.readInt16("x2"); const int y2 = msg.readInt16("y2"); const BlockTypeT mask = static_cast<BlockTypeT>(msg.readInt32("mask")); const int layer = msg.readInt32("layer"); const std::string name = msg.readString(16, "map name"); |
SMSG_BATTLE_EMBLEM2 | 0x0b1a | 34 | BattleGroundRecv::processBattleEmblem2 | 0 | const BeingId id = msg.readBeingId("account id"); msg.readString(24, "name"); msg.readInt16("bg id"); const int teamId = msg.readInt16("team id"); |
SMSG_ITEM_DROPPED2 | 0x0b19 | 28 | ItemRecv::processItemDropped2 | 0 | const BeingId id = msg.readBeingId("id"); const int itemId = msg.readInt16("item id"); // +++ need use int32 const ItemTypeT itemType = static_cast<ItemTypeT>(msg.readUInt8("type")); msg.readUInt8("identify"), Identified); const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged); const uint8_t refine = msg.readUInt8("refine"); cards[f] = msg.readUInt16("card"); // ++ need use int32 const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); const int amount = msg.readInt16("amount"); const int subX = CAST_S32(msg.readInt8("subx")); const int subY = CAST_S32(msg.readInt8("suby")); |
SMSG_ITEM_VISIBLE2 | 0x0b18 | 28 | ItemRecv::processItemVisible2 | 0 | const BeingId id = msg.readBeingId("item object id"); const int itemId = msg.readInt16("item id"); // +++ need use int32 msg.readUInt8("type")); msg.readUInt8("identify"), Identified); const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged); const uint8_t refine = msg.readUInt8("refine"); cards[f] = msg.readUInt16("card"); // +++ need use int32 const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); const int amount = msg.readInt16("amount"); const int subX = CAST_S32(msg.readInt8("sub x")); const int subY = CAST_S32(msg.readInt8("sub y")); |
SMSG_BEING_CHANGE_LOOKS_CARDS | 0x0b17 | 19 | BeingRecv::processBeingChangeLookCards | 0 | const BeingId id = msg.readBeingId("being id"); msg.readBeingId("being id")); const uint8_t type = msg.readUInt8("type"); const int id = msg.readInt16("id1"); unsigned int id2 = msg.readInt16("id2"); cards[f] = msg.readUInt16("card"); // +++ probably need use int32 |
SMSG_PLAYER_CLIENT_COMMAND | 0x0b16 | -1 | Ea::PlayerRecv::processPlayerClientCommand | 0 | const int sz = msg.readInt16("len") - 4; std::string command = msg.readString(sz, "command"); |
SMSG_ONLINE_LIST | 0x0b10 | -1 | PlayerRecv::processOnlineList | 0 | const int size = msg.readInt16("len") - 4; char *const start = reinterpret_cast<char*>(msg.readBytes(size, "nicks")); |
SMSG_NPC_AREA | 0x0b0b | -1 | NpcRecv::processArea | 0 | const int len = msg.readInt16("len"); msg.readBeingId("npc id")); const int area = msg.readInt32("area size"); |
SMSG_BEING_ATTRS | 0x0b0a | -1 | BeingRecv::processBeingAttrs | 0 | const int len = msg.readInt16("len"); msg.readBeingId("player id")); const int groupId = msg.readInt32("group id"); mount = msg.readInt16("mount"); language = msg.readInt16("language"); clanId = msg.readInt32("clan id"); |
SMSG_CHAT_JOIN_CHANNEL | 0x0b08 | 27 | ChatRecv::processJoinChannel | 0 | const std::string channel = msg.readString(24, "channel name"); const int flag = msg.readUInt8("flag"); |
SMSG_NPC_CHANGETITLE | 0x0b06 | -1 | Ea::NpcRecv::processChangeTitle | 0 | msg.readInt16("len"); const std::string str = msg.readString(-1, "title"); |
SMSG_MAP_MUSIC | 0x0b05 | -1 | Ea::PlayerRecv::processMapMusic | 0 | const int size = msg.readInt16("len") - 4; const std::string music = msg.readString(size, "name"); |
SMSG_BEING_MOVE3 | 0x0b04 | -1 | Ea::BeingRecv::processBeingMove3 | 0 | const int len = msg.readInt16("len") - 14; msg.readBeingId("being id")); msg.readInt16("speed"); msg.readInt16("x"); msg.readInt16("y"); unsigned char *bytes = msg.readBytes(len, "moving path"); const int16_t speed = msg.readInt16("speed"); const int16_t x = msg.readInt16("x"); const int16_t y = msg.readInt16("y"); const unsigned char *moves = msg.readBytes(len, "moving path"); |
SMSG_MOB_INFO | 0x0b03 | -1 | BeingRecv::processMobInfo | 0 | const int len = msg.readInt16("len"); msg.readBeingId("monster id")); const int attackRange = msg.readInt32("range"); |
SMSG_MAP_MASK | 0x0b02 | 10 | Ea::PlayerRecv::processMapMask | 0 | const int mask = msg.readInt32("mask"); msg.readInt32("unused"); |
SMSG_BEING_NAME_RESPONSE2 | 0x0b01 | -1 | BeingRecv::processNameResponse2 | 0 | const int len = msg.readInt16("len"); const BeingId beingId = msg.readBeingId("account id"); const std::string str = msg.readString(len - 8, "name"); |
SMSG_NPC_COMMAND | 0x0b00 | 16 | Ea::NpcRecv::processNpcCommand | 0 | const int cmd = msg.readInt16("cmd"); const BeingId id = msg.readBeingId("id"); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); |
SMSG_MAIL2_ADD_ITEM_RESULT | 0x0a05 | 53 | Mail2Recv::processAddItemResult | 20141119 | const int res = msg.readUInt8("result"); const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int amount = msg.readInt16("amount"); const int itemId = msg.readItemId("item id"); msg.readUInt8("item type")); const uint8_t identify = msg.readUInt8("identify"); const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged); const uint8_t refine = msg.readUInt8("refine"); cards[f] = msg.readItemId("card"); const uint16_t idx = msg.readInt16("option index"); const uint16_t val = msg.readInt16("option value"); msg.readUInt8("option param"); msg.readInt16("weight"); Favorite favorite = fromBool(msg.readUInt8("favorite"), Favorite); msg.readInt32("location"); |
SMSG_MAIL2_ICON | 0x09e7 | 3 | Mail2Recv::processMailIcon | 20141112 | msg.readUInt8("has new mail"); |
SMSG_VENDING_OPEN_STATUS | 0x0a28 | 3 | VendingRecv::processOpenStatus | 20141022 | msg.readUInt8("result"); |
SMSG_PLAYER_SHORTCUTS | 0x0a00 | 269 | PlayerRecv::processPlayerShortcuts2 | 20141022 | msg.readUInt8("rotate"); msg.readUInt8("type 0: item, 1: skill"); msg.readInt32("item or skill id"); msg.readInt16("skill level"); |
SMSG_PLAYER_SET_TITLE_ACK | 0x0a2f | 7 | PlayerRecv::processSetTitleAck | 20141016 | msg.readUInt8("fail flag"); msg.readInt32("title"); |
SMSG_BUYINGSTORE_REPORT | 0x09e6 | 22 | BuyingStoreRecv::processBuyingStoreReport | 20141016 | msg.readItemId("item id"); msg.readInt16("amount"); msg.readInt32("money"); msg.readInt32("money limit"); msg.readInt32("char id"); msg.readInt32("date"); msg.readInt32("money limit"); |
SMSG_VENDING_REPORT | 0x09e5 | 18 | VendingRecv::processReport | 20141016 | const int index = msg.readInt16("inv index") - INVENTORY_OFFSET; const int amount = msg.readInt16("amount"); msg.readInt32("char id"); msg.readInt32("time"); money = msg.readInt32("zeny"); |
SMSG_ROULETTE_RECV_ITEM_ACK | 0x0a22 | 5 | RouletteRecv::processRouletteItemAck | 20141016 | msg.readUInt8("result"); msg.readItemId("item id"); |
SMSG_ROULETTE_GENERATE_ACK_TYPE | 0x0a20 | 21 | RouletteRecv::processRouletteGenerateAckType | 20141016 | msg.readUInt8("result"); msg.readInt16("step"); msg.readInt16("idx"); msg.readItemId("item id"); msg.readInt32("remain gold"); msg.readInt32("remain silver"); msg.readInt32("remain bronze"); |
SMSG_ROULETTE_INFO_ACK_TYPE | 0x0a1c | -1 | RouletteRecv::processRouletteInfoAckType | 20141016 | const int count = (msg.readInt16("len") - 8) / 8; msg.readInt32("serial"); msg.readInt16("row"); msg.readInt16("position"); msg.readInt32("item id"); msg.readInt16("count"); msg.readInt16("unused"); msg.readInt16("item id"); msg.readInt16("count"); |
SMSG_ROULETTE_OPEN_ACK | 0x0a1a | 23 | RouletteRecv::processRouletteOpenAck | 20141016 | msg.readUInt8("result"); msg.readInt32("serial"); msg.readUInt8("step"); msg.readUInt8("idx"); msg.readItemId("additional item id"); msg.readInt32("gold point"); msg.readInt32("silver point"); msg.readInt32("bronze point"); |
SMSG_ROULETTE_CLOSE | 0x0a1e | 3 | RouletteRecv::processRouletteClose | 20141008 | msg.readUInt8("result"); |
SMSG_BATTLE_UPDATE_HP | 0x0a0e | 14 | BattleGroundRecv::processBattleUpdateHp | 20140613 | msg.readBeingId("account id"); msg.readInt32("hp"); msg.readInt32("max hp"); msg.readString(24, "name"); msg.readInt16("hp"); msg.readInt16("max hp"); |
SMSG_MAIL2_REMOVE_ITEM_RESULT | 0x0a07 | 9 | Mail2Recv::processRemoveItemResult | 20140521 | const int result = msg.readUInt8("result"); const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int amount = msg.readInt16("count"); msg.readInt16("weight"); |
SMSG_MAIL2_OPEN_NEW_MAIL_WINDOW | 0x0a12 | 27 | Mail2Recv::processOpenNewMailWindow | 20140416 | msg.readString(24, "receiver"); msg.readUInt8("result"); |
SMSG_MAIL2_READ_MAIL | 0x09eb | -1 | Mail2Recv::processReadMail | 20140115 | msg.readInt16("len"); msg.readUInt8("open type")); const int64_t mailId = msg.readInt64("mail id"); const int textLen = msg.readInt16("text len"); const int64_t money = msg.readInt64("money"); const int itemsCount = msg.readUInt8("item count"); const std::string text = msg.readString(textLen, "text message"); msg.readInt16("amount"); msg.readItemId("item id"); msg.readUInt8("identify"); msg.readUInt8("damaged"); msg.readUInt8("refine"); msg.readItemId("card"); msg.readInt32("location"); msg.readUInt8("type"); msg.readInt16("view sprite"); msg.readInt16("bind on equip"); msg.readInt16("option index"); msg.readInt16("option value"); msg.readUInt8("option param"); const int amount = msg.readInt16("amount"); const int itemId = msg.readItemId("item id"); const uint8_t identify = msg.readUInt8("identify"); const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged); const uint8_t refine = msg.readUInt8("refine"); cards[d] = msg.readItemId("card"); msg.readInt32("location"); msg.readUInt8("item type")); msg.readInt16("view sprite"); msg.readInt16("bind on equip"); const uint16_t idx = msg.readInt16("option index"); const uint16_t val = msg.readInt16("option value"); msg.readUInt8("option param"); |
SMSG_MAIL2_REQUEST_ITEMS | 0x09f4 | 12 | Mail2Recv::processRequestItems | 20140409 | const int64_t mailId = msg.readInt64("mail id"); msg.readUInt8("open type"); const int res = msg.readUInt8("result"); |
SMSG_MAIL2_REQUEST_MONEY | 0x09f2 | 12 | Mail2Recv::processRequestMoney | 20140409 | const int64_t mailId = msg.readInt64("mail id"); msg.readUInt8("open type"); const int res = msg.readUInt8("result"); |
SMSG_PET_EVOLUTION_RESULT | 0x09fc | 6 | PetRecv::processPetEvolution | 20140122 | msg.readUInt8("result"); |
SMSG_HOMUNCULUS_INFO | 0x09f7 | 75 | HomunculusRecv::processHomunculusInfo2 | 20131230 | const std::string name = msg.readString(24, "name"); msg.readUInt8("flags"); // 0x01 - renamed, 0x02 - vaporize, 0x04 - alive const int level = msg.readInt16("level"); const int hungry = msg.readInt16("hungry"); const int intimacy = msg.readInt16("intimacy"); const int equip = msg.readItemId("item id"); msg.readInt16("atk"), msg.readInt16("matk"), msg.readInt16("hit"), msg.readInt16("luk/3 or crit/10"), msg.readInt16("def"), msg.readInt16("mdef"), msg.readInt16("flee"), msg.readInt16("attack speed"), msg.readInt32("hp"), msg.readInt32("max hp"), msg.readInt16("sp"), msg.readInt16("max sp"), msg.readInt32("exp"), msg.readInt32("next exp"), msg.readInt16("skill points"), const int range = msg.readInt16("attack range"); |
SMSG_MAIL2_SEND_RESULT | 0x09ed | 3 | Mail2Recv::processSendResult | 20131230 | const int res = msg.readUInt8("result"); |
SMSG_CLAN_LEAVE | 0x0989 | 2 | ClanRecv::processClanLeave | 20131223 | |
SMSG_SKILL_NO_DAMAGE | 0x09cb | 17 | Ea::BeingRecv::processSkillNoDamage | 20131223 | const int id = msg.readInt16("skill id"); heal = msg.readInt32("heal"); heal = msg.readInt16("heal"); msg.readBeingId("dst being id")); msg.readBeingId("src being id")); msg.readUInt8("fail"); |
SMSG_WHISPER_RESPONSE | 0x09df | 7 | ChatRecv::processWhisperResponse | 20131223 | const uint8_t type = msg.readUInt8("response"); msg.readBeingId("being id"); |
SMSG_NPC_MARKET_BUY_ACK | 0x09d7 | -1 | MarketRecv::processMarketBuyAck | 20131223 | const int len = (msg.readInt16("len") - 5) / (6 + itemIdLen); const int res = msg.readUInt8("result"); msg.readItemId("item id"); msg.readInt16("amount"); msg.readInt32("price"); |
SMSG_NPC_MARKET_OPEN | 0x09d5 | -1 | MarketRecv::processMarketOpen | 20131223 | const int len = (msg.readInt16("len") - 4) / (11 + itemIdLen); const int itemId = msg.readItemId("item id"); const ItemTypeT type = static_cast<ItemTypeT>(msg.readUInt8("type")); const int value = msg.readInt32("price"); const int amount = msg.readInt32("amount"); msg.readInt16("weight"); // +++ compare with item weight from db? |
SMSG_BEING_ACTION2 | 0x08c8 | 34 | BeingRecv::processBeingAction2 | 20131223 | msg.readBeingId("src being id")); msg.readBeingId("dst being id")); msg.readInt32("tick"); const int srcSpeed = msg.readInt32("src speed"); msg.readInt32("dst speed"); param1 = msg.readInt32("damage"); param1 = msg.readInt16("damage"); msg.readUInt8("is sp damaged"); msg.readInt16("count"); msg.readUInt8("action")); msg.readInt32("left damage"); msg.readInt16("left damage"); |
SMSG_MAIL2_MAIL_DELETE | 0x09f6 | 11 | Mail2Recv::processMailDelete | 20131218 | msg.readUInt8("open type"); const int64_t mailId = msg.readInt64("mail id"); |
SMSG_SKILL_ENTRY | 0x09ca | -1 | BeingRecv::processSkillEntry | 20130731 | msg.readInt16("len"); const BeingId id = msg.readBeingId("skill unit id"); const BeingId creatorId = msg.readBeingId("creator accound id"); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); job = msg.readInt32("job"); msg.readUInt8("radius"); msg.readUInt8("visible"); level = msg.readUInt8("level"); |
SMSG_BANK_WITHDRAW | 0x09aa | 16 | BankRecv::processBankWithdraw | 20130724 | const int reason = msg.readInt16("reason"); const int money = CAST_S32(msg.readInt64("money")); msg.readInt32("balance"); |
SMSG_BANK_DEPOSIT | 0x09a8 | 16 | BankRecv::processBankDeposit | 20130724 | const int reason = msg.readInt16("reason"); const int money = CAST_S32(msg.readInt64("money")); msg.readInt32("balance"); |
SMSG_BANK_STATUS | 0x09a6 | 12 | BankRecv::processBankStatus | 20130724 | const int money = CAST_S32(msg.readInt64("money")); const int reason = msg.readInt16("reason"); |
SMSG_PLAYER_RANK_POINTS | 0x097e | 12 | PlayerRecv::processPlayerRankPoints | 20130710 | msg.readInt16("type"); msg.readInt32("points"); msg.readInt32("fame"); |
SMSG_CLAN_INFO | 0x098a | -1 | ClanRecv::processClanInfo | 20130626 | msg.readInt16("len"); localClan.id = msg.readInt32("clan id"); localClan.name = msg.readString(24, "clan name"); localClan.masterName = msg.readString(24, "master name"); localClan.mapName = msg.readString(16, "map name"); const int allyCount = msg.readUInt8("ally clans count"); const int antagonistCount = msg.readUInt8("antagonist clans count"); msg.readString(24, "ally clan name")); msg.readString(24, "antagonist clan name")); |
SMSG_RANKS_LIST | 0x097d | 288 | BeingRecv::processRanksList1 | 20130605 | const int count = (msg.readInt16("len") - 4) / 28; msg.readInt16("rank type"); msg.readString(24, "name"); msg.readInt32("points"); msg.readInt32("my points"); |
SMSG_ITEM_DROPPED | 0x084b | 19 | ItemRecv::processItemDropped | 20130000 | const BeingId id = msg.readBeingId("id"); const int itemId = msg.readItemId("item id"); itemType = static_cast<ItemTypeT>(msg.readInt16("type")); msg.readUInt8("identify"), Identified); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); const int subX = CAST_S32(msg.readInt8("subx")); const int subY = CAST_S32(msg.readInt8("suby")); const int amount = msg.readInt16("count"); msg.readUInt8("show drop effect"); msg.readInt16("show effect mode"); |
SMSG_MAP_TYPE_PROPERTY2 | 0x099b | 8 | BeingRecv::processMapTypeProperty | 20121010 | const int16_t type = msg.readInt16("type"); const int flags = msg.readInt32("flags"); |
SMSG_SHOW_PROGRESS_BAR_FREE | 0x09d1 | 14 | NpcRecv::processShowProgressBarFree | 20130821 | msg.readBeingId("account id"); msg.readInt32("color"); msg.readInt32("time"); |
SMSG_PLAYER_UNEQUIP | 0x099a | 9 | InventoryRecv::processPlayerUnEquip | 20120925 | msg.readInt16("index"); equipType = msg.readInt32("wear location"); equipType = msg.readInt16("wear location"); const uint8_t flag = msg.readUInt8("result"); |
SMSG_PLAYER_EQUIP | 0x0999 | 11 | InventoryRecv::processPlayerEquip | 20120925 | const int index = msg.readInt16("index") - INVENTORY_OFFSET; equipType = msg.readInt32("wear location"); equipType = msg.readInt16("wear location"); msg.readInt16("sprite"); const uint8_t flag = msg.readUInt8("result"); |
SMSG_PLAYER_STORAGE_ITEMS | 0x0995 | -1 | InventoryRecv::processPlayerStorage | 20120925 | msg.readInt16("len"); msg.readString(24, "storage name"); const int index = msg.readInt16("item index") - STORAGE_OFFSET; const int itemId = msg.readItemId("item id"); msg.readUInt8("item type")); msg.readUInt8("identified"); const int amount = msg.readInt16("count"); msg.readInt32("wear state / equip"); msg.readInt16("wear state / equip"); cards[f] = msg.readItemId("card"); msg.readInt32("hire expire date (?)"); flags.byte = msg.readUInt8("flags"); |
SMSG_PLAYER_CART_ITEMS | 0x0993 | -1 | InventoryRecv::processPlayerCartItems | 20120925 | msg.readInt16("len"); const int index = msg.readInt16("item index") - INVENTORY_OFFSET; const int itemId = msg.readItemId("item id"); msg.readUInt8("item type")); msg.readUInt8("identified"); const int amount = msg.readInt16("count"); msg.readInt32("wear state / equip"); cards[f] = msg.readItemId("card"); msg.readInt32("hire expire date (?)"); flags.byte = msg.readUInt8("flags"); |
SMSG_PLAYER_INVENTORY | 0x0991 | -1 | InventoryRecv::processPlayerInventory | 20120925 | msg.readInt16("len"); const int index = msg.readInt16("item index") - INVENTORY_OFFSET; const int itemId = msg.readItemId("item id"); msg.readUInt8("item type")); msg.readUInt8("identified"); const int amount = msg.readInt16("count"); msg.readInt32("wear state / equip"); msg.readInt16("wear state / equip"); cards[f] = msg.readItemId("card"); msg.readInt32("hire expire date (?)"); flags.byte = msg.readUInt8("flags"); |
SMSG_CLAN_CHAT | 0x098e | -1 | ClanRecv::processClanChat | 20120716 | const int chatMsgLength = msg.readInt16("len") - 4 - 24; msg.readString(24, "player name (unused)"); std::string chatMsg = msg.readString(chatMsgLength, "message"); |
SMSG_CLAN_ONLINE_COUNT | 0x0988 | 6 | ClanRecv::processClanOnlineCount | 20120716 | localClan.onlineMembers = msg.readInt16("online members count"); localClan.totalMembers = msg.readInt16("total members count"); |
SMSG_PLAYER_SKILL_COOLDOWN_LIST | 0x0985 | -1 | SkillRecv::processSkillCoolDownList | 20120604 | const int count = (msg.readInt16("len") - 4) / packetLen; const int skillId = msg.readInt16("skill id"); msg.readInt32("total"); const int duration = msg.readInt32("duration"); |
SMSG_BEING_STATUS_CHANGE | 0x0983 | 29 | BeingRecv::processBeingStatusChange | 20120618 | const uint16_t status = msg.readInt16("status"); const BeingId id = msg.readBeingId("being id"); msg.readUInt8("flag: 0: stop, 1: start"), Enable); msg.readInt32("total"); msg.readInt32("left"); msg.readInt32("val1"); msg.readInt32("val2"); msg.readInt32("val3"); |
SMSG_CHAR_CHARACTERS | 0x099d | -1 | CharServerRecv::processCharCharacters | 20120419 | msg.readInt16("packet len"); |
SMSG_MONSTER_HP | 0x0977 | 14 | BeingRecv::processMonsterHp | 20120410 | msg.readBeingId("monster id")); const int hp = msg.readInt32("hp"); const int maxHP = msg.readInt32("max hp"); |
SMSG_PLAYER_FAVORITE_ITEM | 0x0908 | 5 | InventoryRecv::processFavoriteItem | 20120410 | msg.readInt16("item index"); msg.readUInt8("favorite (0 - favorite)"); |
SMSG_BOOKING_REFUSE_VOLUNTEER | 0x08fa | 6 | nullptr | 20120410 | |
SMSG_BOOKING_VOLUNTEER_INFO | 0x08f2 | 36 | nullptr | 20120410 | |
SMSG_RECRUIT_DELETE_NOTIFY | 0x08ee | 6 | nullptr | 20120410 | |
SMSG_RECRUIT_UPDATE_NOTIFY | 0x08ed | 43 | nullptr | 20120410 | |
SMSG_RECRUIT_INSERT_NOTIFY | 0x08ec | 73 | nullptr | 20120410 | |
SMSG_RECRUIT_DELETE_ACK | 0x08ea | 4 | nullptr | 20120410 | |
SMSG_RECRUIT_SEARCH_ACK | 0x08e8 | -1 | nullptr | 20120410 | |
SMSG_RECRUIT_REGISTER_ACK | 0x08e6 | 4 | nullptr | 20120410 | |
SMSG_BEING_CHARM | 0x08cf | 10 | BeingRecv::processBeingCharm | 20120410 | msg.readBeingId("account id"); msg.readInt16("charm type"); msg.readInt16("charm count"); |
SMSG_NPC_CASH_BUY | 0x0849 | 16 | CashShopRecv::processCashShopBuy | 20120328 | msg.readInt32("id"); msg.readInt16("result"); msg.readInt32("cash points"); msg.readInt32("kafra points"); |
SMSG_ACK_MERGE_ITEMS | 0x096f | 7 | InventoryRecv::processMergeItemResponse | 20120314 | msg.readInt16("inv index"); msg.readInt16("amount"); msg.readUInt8("result"); |
SMSG_MERGE_ITEM | 0x096d | -1 | InventoryRecv::processMergeItem | 20120314 | const int count = (msg.readInt16("len") - 4) / 2; msg.readInt16("inv index"); |
SMSG_LOGIN_ERROR2 | 0x083e | 26 | LoginRecv::processLoginError2 | 20120000 | const uint32_t code = msg.readInt32("error"); msg.readString(20, "error message"); msg.readString(20, "date").c_str()); |
CMSG_NAVIGATE_TO | 0x08e2 | 27 | BeingRecv::processNavigateTo | 20111010 | msg.readUInt8("navigate type"); msg.readUInt8("transportation flag"); msg.readUInt8("hide window"); msg.readString(16, "map name"); msg.readInt16("x"); msg.readInt16("y"); msg.readInt16("mob id"); |
SMSG_SKILL_SNAP | 0x08d2 | 10 | BeingRecv::processBeingSlide | 20111005 | msg.readBeingId("being id")); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); |
SMSG_GUILD_EXPULSION | 0x0839 | 66 | GuildRecv::processGuildExpulsion | 20100803 | const std::string nick = msg.readString(24, "name"); msg.readString(40, "message"); |
SMSG_SEARCHSTORE_OPEN | 0x083a | 5 | SearchStoreRecv::processSearchOpen | 20100701 | msg.readInt16("effect"); msg.readUInt8("uses"); |
SMSG_SEARCHSTORE_CLICK_ACK | 0x083d | 6 | SearchStoreRecv::processSearchClickAck | 20100608 | msg.readInt16("x"); msg.readInt16("y"); |
SMSG_SEARCHSTORE_SEARCH_FAILED | 0x0837 | 3 | SearchStoreRecv::processSearchFailed | 20100601 | const int result = msg.readUInt8("result"); |
SMSG_BUYINGSTORE_SELLER_SELL_FAILED | 0x0824 | 6 | BuyingStoreRecv::processBuyingStoreSellerSellFailed | 20100420 | const int16_t result = msg.readInt16("result"); msg.readItemId("item id"); |
SMSG_BUYINGSTORE_DELETE_ITEM | 0x081c | 10 | BuyingStoreRecv::processBuyingStoreDeleteItem | 20100420 | const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int amount = msg.readInt16("amount"); msg.readInt32("price"); |
SMSG_BUYINGSTORE_SELL_FAILED | 0x081a | 4 | BuyingStoreRecv::processBuyingStoreSellFailed | 20100420 | const int16_t result = msg.readInt16("result"); |
SMSG_BUYINGSTORE_SHOW_BOARD | 0x0814 | 86 | BuyingStoreRecv::processBuyingStoreShowBoard | 20100420 | const BeingId id = msg.readBeingId("owner id"); dstBeing->setBuyBoard(msg.readString(80, "shop name")); msg.readString(80, "shop name"); |
SMSG_BUYINGSTORE_CREATE_FAILED | 0x0812 | 8 | BuyingStoreRecv::processBuyingStoreCreateFailed | 20100420 | const int16_t result = msg.readInt16("result"); const int weight = msg.readInt32("weight"); |
SMSG_ELEMENTAL_UPDATE_STATUS | 0x081e | 8 | ElementalRecv::processElementalUpdateStatus | 20100309 | const int sp = msg.readInt16("type"); const int val = msg.readInt32("value"); |
SMSG_ELEMENTAL_INFO | 0x081d | 22 | ElementalRecv::processElementalInfo | 20100309 | const BeingId id = msg.readBeingId("elemental id"); msg.readInt32("hp"), msg.readInt32("max hp"), msg.readInt32("sp"), msg.readInt32("max sp"), |
SMSG_BUYINGSTORE_ITEMS_LIST | 0x0818 | -1 | BuyingStoreRecv::processBuyingStoreItemsList | 20100309 | const int count = (msg.readInt16("len") - 16) / (7 + itemIdLen); const BeingId id = msg.readBeingId("account id"); const int storeId = msg.readInt32("store id"); msg.readInt32("money limit"); const int price = msg.readInt32("price"); const int amount = msg.readInt16("amount"); msg.readUInt8("item type")); const int itemId = msg.readItemId("item id"); |
SMSG_BUYINGSTORE_HIDE_BOARD | 0x0816 | 6 | BuyingStoreRecv::processBuyingStoreHideBoard | 20100309 | const BeingId id = msg.readBeingId("owner id"); |
SMSG_BUYINGSTORE_OWN_ITEMS | 0x0813 | -1 | BuyingStoreRecv::processBuyingStoreOwnItems | 20100309 | const int count = (msg.readInt16("len") - 12) / (7 + itemIdLen); msg.readBeingId("account id"); msg.readInt32("money limit"); msg.readInt32("price"); msg.readInt16("amount"); msg.readUInt8("item type"); msg.readItemId("item id"); |
SMSG_BUYINGSTORE_OPEN | 0x0810 | 3 | BuyingStoreRecv::processBuyingStoreOpen | 20100303 | BuyingStoreSlotsListener::distributeEvent(msg.readUInt8("slots")); |
SMSG_PLAYER_HP | 0x080e | 14 | BeingRecv::processBeingHp | 20100126 | msg.readBeingId("being id")); hp = msg.readInt32("hp"); maxHP = msg.readInt32("max hp"); hp = msg.readInt16("hp"); maxHP = msg.readInt16("max hp"); |
SMSG_BOOKING_DELETE_NOTIFY | 0x080b | 6 | nullptr | 20091229 | |
SMSG_BOOKING_UPDATE_NOTIFY | 0x080a | 18 | nullptr | 20091229 | |
SMSG_BOOKING_INSERT_NOTIFY | 0x0809 | 50 | nullptr | 20091229 | |
SMSG_BOOKING_DELETE_ACK | 0x0807 | 4 | nullptr | 20091229 | |
SMSG_BOOKING_SEARCH_ACK | 0x0805 | -1 | nullptr | 20091222 | |
SMSG_BOOKING_REGISTER_ACK | 0x0803 | 4 | nullptr | 20091222 | |
SMSG_BATTLE_PLAY | 0x07fe | 26 | BattleGroundRecv::processBattlePlay | 20091201 | msg.readString(24, "battle ground name"); |
SMSG_SKILL_CASTING | 0x07fb | 25 | BeingRecv::processSkillCasting2 | 20091124 | const BeingId srcId = msg.readBeingId("src id"); const BeingId dstId = msg.readBeingId("dst id"); const int dstX = msg.readInt16("dst x"); const int dstY = msg.readInt16("dst y"); const int skillId = msg.readInt16("skill id"); msg.readInt32("element"); // +++ use different effects const int castTime = msg.readInt32("cast time"); msg.readInt8("dispossable"); |
SMSG_PLAYER_INVENTORY_REMOVE2 | 0x07fa | 8 | InventoryRecv::processPlayerInventoryRemove2 | 20091117 | msg.readInt16("reason")); const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int amount = msg.readInt16("amount"); |
SMSG_WHISPER | 0x0097 | -1 | ChatRecv::processWhisper | 20091104 | const int chatMsgLength = msg.readInt16("len") - packetLen; std::string nick = msg.readString(24, "nick"); msg.readInt32("admin flag"); processWhisperContinue(nick, msg.readString(chatMsgLength, "message")); |
SMSG_PLAYER_GET_EXP | 0x07f6 | 14 | PlayerRecv::processPlayerGetExp | 20091027 | const BeingId id = msg.readBeingId("player id"); const int exp = msg.readInt32("exp amount"); const int stat = msg.readInt16("exp type"); const bool fromQuest = msg.readInt16("is from quest") != 0; |
SMSG_CHAR_CAPTCHA_NOT_SUPPORTED | 0x07e9 | 5 | CharServerRecv::processCharCaptchaNotSupported | 20090922 | msg.readInt16("5"); msg.readUInt8("1"); |
SMSG_SKILL_ITEM_LIST_WINDOW | 0x07e3 | 6 | SkillRecv::processSkillItemListWindow | 20090922 | msg.readInt32("skill level"); msg.readInt32("unused"); |
SMSG_FORMAT_MESSAGE_SKILL | 0x07e6 | 8 | ChatRecv::processFormatMessageSkill | 20090818 | const int skillId = msg.readInt16("skill id"); const int msgId = msg.readInt32("msg id"); |
SMSG_FORMAT_MESSAGE_NUMBER | 0x07e2 | 8 | ChatRecv::processFormatMessageNumber | 20090805 | const int msgId = msg.readInt16("msg id"); const int value = msg.readInt32("value"); |
SMSG_PLAYER_UPDATE_SKILL | 0x07e1 | 15 | SkillRecv::processSkillUpdate | 20090715 | const int skillId = msg.readInt16("skill id"); msg.readInt32("inf")); const int level = msg.readInt16("skill level"); const int sp = msg.readInt16("sp"); const int range = msg.readInt16("range"); const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); |
SMSG_PARTY_SETTINGS | 0x07d8 | 8 | PartyRecv::processPartySettings | 20090603 | msg.readInt32("party exp")); msg.readInt8("pickup item share (&1)")); msg.readInt8("get auto item share (&2)")); |
SMSG_PLAYER_SKILL_AUTO_SPELLS | 0x01cd | 30 | SkillRecv::processSkillAutoSpells1 | 20090406 | msg.readInt32("skill id"); |
SMSG_MVP_EXP | 0x010b | 6 | ChatRecv::processMVPExp | 20090401 | msg.readInt32("exp"); |
SMSG_QUEST_NPC_EFFECT | 0x0446 | 14 | QuestRecv::processNpcQuestEffect | 20090218 | msg.readInt32("npc id"); msg.readInt16("x"); msg.readInt16("y"); msg.readInt16("state"); msg.readInt16("color"); |
SMSG_PLAYER_DELETE_SKILL | 0x0441 | 4 | SkillRecv::processSkillDelete | 20081217 | const int skillId = msg.readInt16("skill id"); |
SMSG_BEING_MILLENIUM_SHIELD | 0x0440 | 10 | BeingRecv::processBeingMilleniumShield | 20081217 | msg.readBeingId("account id"); msg.readInt16("shields"); msg.readInt16("unused"); |
SMSG_AUTOSHADOW_SPELL_LIST | 0x0442 | -1 | PlayerRecv::processPlayerAutoShadowSpellList | 20081210 | const int count = (msg.readInt16("len") - 8) / 2; msg.readInt16("skill id"); |
SMSG_PET_STATUS | 0x01a2 | 37 | PetRecv::processPetStatus | 20081126 | const std::string name = msg.readString(24, "pet name"); msg.readUInt8("rename flag"); const int level = msg.readInt16("level"); const int hungry = msg.readInt16("hungry"); const int intimacy = msg.readInt16("intimacy"); const int equip = msg.readInt16("equip"); // look like always int16 info->race = msg.readInt16("class"); |
SMSG_PLAYER_SKILL_COOLDOWN | 0x043d | 8 | SkillRecv::processSkillCoolDown | 20081112 | const int skillId = msg.readInt16("skill id"); const int duration = msg.readInt32("duration"); |
SMSG_BEING_SPAWN_OUTDATED | 0x007c | 44 | nullptr | 20080827 | |
SMSG_NPC_PROGRESS_BAR_ABORT | 0x02f2 | 2 | NpcRecv::processProgressBarAbort | 20080318 | |
SMSG_NPC_SHOW_PROGRESS_BAR | 0x02f0 | 10 | NpcRecv::processNpcShowProgressBar | 20080318 | msg.readInt32("color"); msg.readInt32("seconds"); |
SMSG_BEING_FONT | 0x02ef | 8 | BeingRecv::processBeingFont | 20080102 | msg.readBeingId("account id"); msg.readInt16("font"); |
SMSG_MERCENARY_INFO | 0x029b | 80 | MercenaryRecv::processMercenaryInfo | 20071106 | msg.readBeingId("being id")); msg.readInt16("atk"), msg.readInt16("matk"), msg.readInt16("hit"), msg.readInt16("crit/10"), msg.readInt16("def"), msg.readInt16("mdef"), msg.readInt16("flee"), msg.readInt16("attack speed"), const std::string name = msg.readString(24, "name"); const int level = msg.readInt16("level"); msg.readInt32("hp"), msg.readInt32("max hp"), msg.readInt32("sp"), msg.readInt32("max sp"), msg.readInt32("expire time"), msg.readInt16("faith"), msg.readInt32("calls"), msg.readInt32("kills"), const int range = msg.readInt16("attack range"); |
SMSG_BEING_FAKE_NAME | 0x0078 | 55 | BeingRecv::processBeingFakeName | 20071106 | msg.readBeingId("npc id"); msg.readInt16("class?"); // 111 msg.readCoordinates(x, y, dir, "position"); msg.readUInt8("sx"); msg.readUInt8("sy"); msg.readUInt8("object type")); const BeingId id = msg.readBeingId("npc id"); const uint16_t job = msg.readInt16("class?"); // 111 msg.readCoordinates(x, y, dir, "position"); msg.readUInt8("sx"); msg.readUInt8("sy"); |
SMSG_INSTANCE_INFO | 0x02cd | 71 | MapRecv::processInstanceInfo | 20071023 | msg.readString(61, "instance name"); msg.readInt32("remaining time"); msg.readInt32("no players close time"); |
SMSG_INSTANCE_START | 0x02cb | 65 | MapRecv::processInstanceStart | 20071023 | msg.readString(61, "instance name"); msg.readInt16("flag"); |
SMSG_PARTY_ITEM_PICKUP | 0x02b8 | 22 | PartyRecv::processPartyItemPickup | 20071002 | msg.readBeingId("account id"); msg.readItemId("item id"); msg.readUInt8("identify"); msg.readUInt8("attribute"); msg.readUInt8("refine"); msg.readItemId("card"); msg.readInt16("equip location"); msg.readUInt8("item type"); |
SMSG_PARTY_INVITED | 0x02c6 | 30 | PartyRecv::processPartyInvited | 20070821 | msg.readInt32("party id"); msg.readString(24, "party name"); const int id = msg.readInt32("party id"); const std::string partyName = msg.readString(24, "party name"); |
SMSG_PARTY_INVITE_RESPONSE | 0x02c5 | 30 | PartyRecv::processPartyInviteResponse | 20070821 | const std::string nick = msg.readString(24, "nick"); switch (msg.readInt32("result")) |
SMSG_PARTY_INVITATION_STATS | 0x02c9 | 3 | PartyRecv::processPartyInvitationStats | 20070227 | msg.readUInt8("allow party"); |
SMSG_BATTLE_UPDATE_COORDS | 0x02df | 36 | BattleGroundRecv::processBattleUpdateCoords | 20070227 | msg.readBeingId("account id"); msg.readString(24, "name"); msg.readInt16("class"); msg.readInt16("x"); msg.readInt16("y"); |
SMSG_BATTLE_UPDATE_SCORE | 0x02de | 6 | BattleGroundRecv::processBattleUpdateScore | 20070227 | msg.readInt16("camp a points"); msg.readInt16("camp b points"); |
SMSG_BATTLE_EMBLEM | 0x02dd | 32 | BattleGroundRecv::processBattleEmblem | 20070227 | msg.readBeingId("account id"); msg.readString(24, "name"); msg.readInt16("bg id"); |
SMSG_BATTLE_CHAT_MESSAGE | 0x02dc | -1 | ChatRecv::processBattleChatMessage | 20070227 | const int sz = msg.readInt16("len") - 24 - 8; msg.readBeingId("account id"); msg.readString(24, "nick"); msg.readString(sz, "message"); |
SMSG_PLAYER_SHOW_EQUIP | 0x02da | 3 | PlayerRecv::processPlayerShowEquip | 20070227 | msg.readUInt8("show equip"); // 1 mean need open "equipment" window |
SMSG_PLAYER_ZC_CONFIG | 0x02d9 | 10 | PlayerRecv::processPlayerZCConfig | 20070227 | msg.readInt32("type"); msg.readInt32("flag"); |
SMSG_INSTANCE_DELETE | 0x02ce | 10 | MapRecv::processInstanceDelete | 20070227 | msg.readInt32("flag"); msg.readInt32("unused"); |
SMSG_INSTANCE_CREATE | 0x02cc | 4 | MapRecv::processInstanceCreate | 20070227 | msg.readInt16("flag"); |
SMSG_COLOR_MESSAGE | 0x02c1 | -1 | ChatRecv::processColorChat | 20070227 | int chatMsgLength = msg.readInt16("len") - 4; msg.readInt32("unused"); msg.readInt32("chat color"); std::string message = msg.readRawString(chatMsgLength, "message"); |
SMSG_ITEM_DAMAGED | 0x02bb | 8 | InventoryRecv::processItemDamaged | 20070227 | msg.readInt16("position"); msg.readBeingId("account id"); |
SMSG_QUEST_ACTIVATE | 0x02b7 | 7 | QuestRecv::processActivateQuest | 20070227 | msg.readInt32("quest id"); msg.readUInt8("activate"); |
SMSG_QUEST_REMOVE | 0x02b4 | 6 | QuestRecv::processRemoveQuest | 20070227 | const int var = msg.readInt32("quest id"); |
SMSG_QUEST_LIST_OBJECTIVES | 0x02b2 | -1 | QuestRecv::processAddQuestsObjectives | 20070227 | msg.readInt16("len"); const int quests = msg.readInt32("quests count"); msg.readInt32("quest id"); msg.readInt32("time diff"); msg.readInt32("time"); const int num = msg.readInt16("objectives count"); msg.readInt32("monster id"); msg.readInt16("count"); msg.readString(24, "monster name"); |
SMSG_NPC_CASH_BUY_ACK | 0x0289 | 12 | CashShopRecv::processCashShopBuyAck | 20070227 | msg.readInt32("cash points"); msg.readInt32("kafra points"); const uint16_t res = msg.readInt16("error"); |
SMSG_MERCENARY_UPDATE | 0x02a2 | 8 | MercenaryRecv::processMercenaryUpdate | 20060424 | const int sp = msg.readInt16("type"); const int val = msg.readInt32("value"); |
SMSG_MERCENARY_SKILLS | 0x029d | -1 | MercenaryRecv::processMercenarySkills | 20060424 | const int count = (msg.readInt16("len") - 4) / 37; const int skillId = msg.readInt16("skill id"); msg.readInt32("inf")); const int level = msg.readInt16("skill level"); const int sp = msg.readInt16("sp"); const int range = msg.readInt16("range"); const std::string name = msg.readString(24, "skill name"); const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); |
SMSG_PLAYER_ITEM_RENTAL_EXPIRED | 0x0299 | 6 | InventoryRecv::processPlayerItemRentalExpired | 20060424 | const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int id = msg.readItemId("item id"); |
SMSG_PLAYER_ITEM_RENTAL_TIME | 0x0298 | 8 | InventoryRecv::processPlayerItemRentalTime | 20060424 | const int id = msg.readItemId("item id"); const int seconds = msg.readInt32("seconds"); |
SMSG_PLAYER_READ_BOOK | 0x0294 | 10 | PlayerRecv::processPlayerReadBook | 20060424 | msg.readInt32("book id"); msg.readInt32("page"); |
SMSG_BOSS_MAP_INFO | 0x0293 | 70 | BeingRecv::processBossMapInfo | 20060424 | msg.readUInt8("info type"); msg.readInt32("x"); msg.readInt32("y"); msg.readInt16("min hours"); msg.readInt16("min minutes"); msg.readInt16("max hours"); msg.readInt16("max minutes"); msg.readString(24, "monster name"); // really can be used 51 byte? |
SMSG_FORMAT_MESSAGE | 0x0291 | 4 | ChatRecv::processFormatMessage | 20060424 | const int msgId = msg.readInt16("msg id"); |
SMSG_PLAYER_STATUS_CHANGE2 | 0x028a | 18 | BeingRecv::processPlayerStatusChange2 | 20060424 | const BeingId id = msg.readBeingId("account id"); const uint32_t option = msg.readInt32("option"); dstBeing->setLevel(msg.readInt32("level")); msg.readInt32("showEFST"); |
SMSG_NPC_CASH_SHOP_OPEN | 0x0287 | -1 | CashShopRecv::processCashShopOpen | 20060424 | count = (msg.readInt16("len") - 12) / blockSize; count = (msg.readInt16("len") - 8) / blockSize; const int points = msg.readInt32("cash points"); msg.readInt32("kafra points"); msg.readInt32("price"); const int value = msg.readInt32("discount price"); msg.readUInt8("item type")); const int itemId = msg.readItemId("item id"); |
SMSG_BEING_SPECIAL_EFFECT_NUM | 0x0284 | 14 | BeingRecv::processBeingSpecialEffectNum | 20060424 | msg.readBeingId("account id"); msg.readInt32("effect type"); msg.readInt32("num"); // effect variable |
SMSG_MAP_ACCOUNT_ID | 0x0283 | 6 | GameRecv::processMapAccountId | 20060424 | msg.readBeingId("account id"); |
SMSG_MAIL_RETURN | 0x0274 | 8 | MailRecv::processMailReturn | 20060306 | const int mail = msg.readInt32("message id"); const int flag = msg.readInt16("fail flag"); |
SMSG_MAIL_OPEN_WINDOW | 0x0260 | 6 | MailRecv::processMailOpen | 20051024 | const int flag = msg.readInt32("flag"); |
SMSG_AUCTION_OPEN_WINDOW | 0x025f | 6 | AuctionRecv::processOpenWindow | 20051024 | msg.readInt32("flag"); // 0 - open, 1 - close |
SMSG_AUCTION_CLOSE | 0x025d | 4 | AuctionRecv::processAuctionClose | 20051017 | msg.readInt16("flag"); |
SMSG_PLAYER_COOKING_LIST | 0x025a | -1 | InventoryRecv::processPlayerCookingList | 20051010 | const int count = (msg.readInt16("len") - 6) / itemIdLen; msg.readInt16("list type"); msg.readItemId("item id"); |
SMSG_STARS_KILL | 0x020e | 32 | BeingRecv::processStarsKill | 20051010 | msg.readString(24, "map name"); msg.readInt32("monster id"); msg.readUInt8("start"); msg.readUInt8("result"); |
SMSG_AUCTION_SET_ITEM | 0x0256 | 5 | AuctionRecv::processAuctionSetItem | 20050912 | msg.readInt16("index"); msg.readUInt8("flag"); |
SMSG_MAIL_DELETE_MAIL_ACK | 0x0257 | 8 | MailRecv::processDeleteAck | 20050829 | const int mail = msg.readInt32("message id"); const int flag = msg.readInt16("fail flag"); |
SMSG_MAIL_SET_ATTACHMENT_ACK | 0x0255 | 5 | MailRecv::processSetAttachmentAck | 20050829 | const int index = msg.readInt16("index"); const int flag = msg.readUInt8("flag"); |
SMSG_MAIL_MAILS_LIST | 0x0240 | -1 | MailRecv::processMailList | 20050829 | const int count = (msg.readInt16("len") - 8) / 73; const int amount = msg.readInt32("amount"); mail->id = msg.readInt32("message id"); mail->title = msg.readString(40, "title"); mail->read = msg.readUInt8("unread flag") != 0U ? true : false; mail->sender = msg.readString(24, "sender name"); mail->time = msg.readInt32("time stamp"); |
SMSG_GLADIATOR_FEEL_REQUEST | 0x0253 | 3 | BeingRecv::processGladiatorFeelRequest | 20050817 | msg.readUInt8("which"); |
SMSG_MAIL_GET_ATTACHMENT | 0x0245 | 3 | MailRecv::processGetAttachment | 20050801 | const uint8_t flag = msg.readUInt8("flag"); |
SMSG_AUCTION_RESULTS | 0x0252 | -1 | AuctionRecv::processAuctionResults | 20050718 | msg.readInt16("len"); msg.readInt32("pages"); const int itemCount = msg.readInt32("items count"); msg.readInt32("auction id"); msg.readString(24, "seller name"); msg.readInt16("item id"); // here item always 16 bit msg.readInt32("auction type"); msg.readInt16("item amount"); // always 1 msg.readUInt8("identify"); msg.readUInt8("attribute"); msg.readUInt8("refine"); msg.readUInt16("card"); // here item always 16 bit msg.readInt32("price"); msg.readInt32("buy now"); msg.readString(24, "buyer name"); msg.readInt32("timestamp"); |
SMSG_AUCTION_MESSAGE | 0x0250 | 3 | AuctionRecv::processAuctionMessage | 20050718 | msg.readUInt8("message"); |
SMSG_MAIL_NEW_MAIL | 0x024a | 70 | MailRecv::processNewMail | 20050718 | msg.readInt32("message id"); const std::string subj = msg.readString(40, "title"); const std::string sender = msg.readString(24, "sender name"); |
SMSG_MAIL_SEND_MAIL_ACK | 0x0249 | 3 | MailRecv::processSendMailAck | 20050718 | const uint8_t flag = msg.readUInt8("fail flag"); |
SMSG_MAIL_READ_MAIL | 0x0242 | -1 | MailRecv::processReadMail | 20050718 | const int sz = msg.readInt16("len") - 101; mail->id = msg.readInt32("message id"); mail->title = msg.readString(40, "title"); mail->sender = msg.readString(24, "sender name"); msg.readInt32("unused"); mail->money = msg.readInt32("money"); const int amount = msg.readInt32("item amount"); const int itemId = msg.readInt16("item id"); msg.readInt16("item type")); const uint8_t identify = msg.readUInt8("identify"); const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged); const uint8_t refine = msg.readUInt8("refine"); cards[d] = msg.readUInt16("card"); const int msgLen = msg.readUInt8("msg len"); mail->text = msg.readString(sz, "message"); msg.readUInt8("zero"); |
SMSG_PLAYER_STORAGE_PASSWORD_RESULT | 0x023c | 6 | InventoryRecv::processPlayerStoragePasswordResult | 20050608 | msg.readInt16("result"); msg.readInt16("error count"); |
SMSG_PLAYER_STORAGE_PASSWORD | 0x023a | 4 | InventoryRecv::processPlayerStoragePassword | 20050608 | msg.readInt16("info"); |
SMSG_HOMUNCULUS_FOOD | 0x022f | 5 | HomunculusRecv::processHomunculusFood | 20050608 | const int flag = msg.readUInt8("fail"); const int itemId = msg.readItemId("food id"); |
SMSG_HOMUNCULUS_SKILL_UP | 0x0239 | 11 | HomunculusRecv::processHomunculusSkillUp | 20050531 | const int skillId = msg.readInt16("skill id"); const int level = msg.readInt16("level"); const int sp = msg.readInt16("sp"); const int range = msg.readInt16("range"); const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); |
SMSG_PK_RANKS_LIST | 0x0238 | 282 | BeingRecv::processPkRanksList | 20050530 | msg.readString(24, "name"); msg.readInt32("points"); |
SMSG_HOMUNCULUS_SKILLS | 0x0235 | -1 | HomunculusRecv::processHomunculusSkills | 20050530 | const int count = (msg.readInt16("len") - 4) / 37; const int skillId = msg.readInt16("skill id"); msg.readInt16("inf")); msg.readInt16("unused"); const int level = msg.readInt16("skill level"); const int sp = msg.readInt16("sp"); const int range = msg.readInt16("range"); const std::string name = msg.readString(24, "skill name"); const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); |
SMSG_HOMUNCULUS_DATA | 0x0230 | 12 | HomunculusRecv::processHomunculusData | 20050523 | msg.readUInt8("unused"); const int cmd = msg.readUInt8("state"); const BeingId id = msg.readBeingId("homunculus id"); const int data = msg.readInt32("data"); |
SMSG_PLAYER_STATUS_CHANGE | 0x0229 | 15 | BeingRecv::processPlayerStatusChange | 20050411 | const BeingId id = msg.readBeingId("account id"); msg.readInt16("opt1"); msg.readInt16("opt2"); msg.readInt32("option"); msg.readInt16("option"); msg.readUInt8("karma"); const uint32_t opt1 = msg.readInt16("opt1"); const uint32_t opt2 = msg.readInt16("opt2"); option = msg.readInt32("option"); option = msg.readInt16("option"); dstBeing->setKarma(msg.readUInt8("karma")); |
SMSG_TAEKWON_RANKS_LIST | 0x0226 | 282 | BeingRecv::processTaekwonRanksList | 20050328 | msg.readString(24, "name"); msg.readInt32("points"); |
SMSG_PLAYER_FAME_TAEKWON | 0x0224 | 10 | PlayerRecv::processPlayerFameTaekwon | 20050328 | msg.readInt32("points"); msg.readInt32("total points"); |
SMSG_PLAYER_UPGRADE_MESSAGE | 0x0223 | 8 | PlayerRecv::processPlayerUpgradeMessage | 20041129 | msg.readInt32("result"); msg.readItemId("item id"); |
SMSG_PLAYER_REFINE_LIST | 0x0221 | -1 | InventoryRecv::processPlayerRefineList | 20041129 | const int count = (msg.readInt16("len") - 4) / msg.readInt16("item index"); msg.readItemId("item id"); msg.readUInt8("refine"); msg.readItemId("card"); |
SMSG_PLAYER_FAME_ALCHEMIST | 0x021c | 10 | PlayerRecv::processPlayerFameAlchemist | 20041108 | msg.readInt32("points"); msg.readInt32("total points"); |
SMSG_PLAYER_FAME_BLACKSMITH | 0x021b | 10 | PlayerRecv::processPlayerFameBlacksmith | 20041108 | msg.readInt32("points"); msg.readInt32("total points"); |
SMSG_ALCHEMIST_RANKS_LIST | 0x021a | 282 | BeingRecv::processAlchemistRanksList | 20041108 | msg.readString(24, "name"); msg.readInt32("points"); |
SMSG_BLACKSMITH_RANKS_LIST | 0x0219 | 282 | BeingRecv::processBlacksmithRanksList | 20041108 | msg.readString(24, "name"); msg.readInt32("points"); |
SMSG_FAMILY_ASK_FOR_CHILD_REPLY | 0x0216 | 6 | FamilyRecv::processAskForChildReply | 20041108 | const int type = msg.readInt32("type"); |
SMSG_PLAYER_SKILL_MESSAGE | 0x0215 | 6 | PlayerRecv::processPlayerSkillMessage | 20041101 | const int message = msg.readInt32("type"); |
SMSG_PVP_INFO | 0x0210 | 22 | PlayerRecv::processPvpInfo | 20040817 | msg.readInt32("char id"); msg.readBeingId("account id"); msg.readInt32("pvp won"); msg.readInt32("pvp lost"); msg.readInt32("pvp point"); |
SMSG_ADMIN_ACCOUNT_STATS | 0x0214 | 42 | AdminRecv::processAccountStats | 20040816 | msg.readUInt8("str"); msg.readUInt8("need str"); msg.readUInt8("agi"); msg.readUInt8("need agi"); msg.readUInt8("vit"); msg.readUInt8("need vit"); msg.readUInt8("int"); msg.readUInt8("need int"); msg.readUInt8("dex"); msg.readUInt8("need dex"); msg.readUInt8("luk"); msg.readUInt8("need luk"); msg.readInt16("attack"); msg.readInt16("refine"); msg.readInt16("matk max"); msg.readInt16("matk min"); msg.readInt16("item def"); msg.readInt16("plus def"); msg.readInt16("mdef"); msg.readInt16("plus mdef"); msg.readInt16("hit"); msg.readInt16("flee"); msg.readInt16("flee2/10"); msg.readInt16("cri/10"); msg.readInt16("speed"); msg.readInt16("zero"); |
SMSG_TRADE_RESPONSE | 0x01f5 | 9 | TradeRecv::processTradeResponse | 6 | const uint8_t type = msg.readUInt8("type"); msg.readInt32("char id"); msg.readInt16("base level"); |
SMSG_TRADE_REQUEST | 0x01f4 | 32 | TradeRecv::processTradeRequest | 6 | const std::string &partner = msg.readString(24, "name"); msg.readInt32("char id"); msg.readInt16("base level"); |
SMSG_BEING_CHANGE_LOOKS2 | 0x01d7 | 11 | BeingRecv::processBeingChangeLook2 | 4 | msg.readBeingId("being id")); const uint8_t type = msg.readUInt8("type"); const int id = msg.readItemId("id1"); unsigned int id2 = msg.readItemId("id2"); |
SMSG_SKILL_DAMAGE | 0x01de | 33 | BeingRecv::processSkillDamage | 3 | const int id = msg.readInt16("skill id"); msg.readBeingId("src being id")); msg.readBeingId("dst being id")); msg.readInt32("tick"); msg.readInt32("src speed"); msg.readInt32("dst speed"); param1 = msg.readInt32("damage"); param1 = msg.readInt16("damage"); const int level = msg.readInt16("skill level"); msg.readInt16("div"); msg.readUInt8("skill hit/type?"); |
SMSG_PLAYER_INVENTORY_USE | 0x01c8 | 13 | InventoryRecv::processPlayerInventoryUse | 3 | const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int itemId = msg.readItemId("item id"); const BeingId id = msg.readBeingId("account id"); const int amount = msg.readInt16("amount"); const uint8_t flag = msg.readUInt8("type"); |
SMSG_FORMAT_COLOR_MESSAGE | 0x09cd | 8 | ChatRecv::processFormatColor | 0 | const int msgId = msg.readInt16("msg id"); msg.readInt32("color"); |
SMSG_FORMAT_MESSAGE_STRING | 0x02c2 | -1 | ChatRecv::processFormatMessageString | 0 | const int strLen = msg.readInt16("len") - 6; const int msgId = msg.readInt16("msg id"); const std::string message = msg.readString(strLen, "value"); |
SMSG_GUILD_ONLINE_INFO | 0x016d | 14 | GuildRecv::processOnlineInfo | 0 | msg.readBeingId("being id"); msg.readInt32("char id"); msg.readInt32("online"); |
SMSG_ADD_MAP_MARKER | 0x09c1 | 10 | MapRecv::processAddMapMarker | 0 | msg.readBeingId("account id"); msg.readInt16("x"); msg.readInt16("y"); |
SMSG_BOOKING_SUB_FILTERING_LIST | 0x090c | 30 | nullptr | 0 | |
SMSG_BOOKING_ADD_FILTERING_LIST | 0x090b | 30 | nullptr | 0 | |
SMSG_BOOKING_CANCEL_VOLUNTEER | 0x0909 | 6 | nullptr | 0 | |
SMSG_WHO_ANSWER | 0x00c2 | 6 | Ea::GameRecv::processWhoAnswer | 0 | msg.readInt32("users count")); |
SMSG_WEDDING_EFFECT | 0x01ea | 6 | BeingRecv::processWddingEffect | 0 | msg.readBeingId("being id"); |
SMSG_WALK_RESPONSE | 0x0087 | 12 | PlayerRecv::processWalkResponse | 0 | (sy&0x0f)"); |
SMSG_VENDING_SHOW_BOARD | 0x0131 | 86 | VendingRecv::processShowBoard | 0 | const BeingId id = msg.readBeingId("owner id"); dstBeing->setSellBoard(msg.readString(80, "shop name")); msg.readString(80, "shop name"); |
SMSG_VENDING_OPEN_REQ | 0x012d | 4 | VendingRecv::processOpenReq | 0 | VendingSlotsListener::distributeEvent(msg.readInt16("slots allowed")); |
SMSG_VENDING_HIDE_BOARD | 0x0132 | 6 | VendingRecv::processHideBoard | 0 | const BeingId id = msg.readBeingId("owner id"); |
SMSG_VENDING_BUY_ACK | 0x0135 | 7 | VendingRecv::processBuyAck | 0 | msg.readInt16("inv index"); msg.readInt16("amount"); const int flag = msg.readUInt8("flag"); |
SMSG_TRADE_UNDO | 0x00f1 | 2 | TradeRecv::processTradeUndo | 0 | |
SMSG_TRADE_OK | 0x00ec | 3 | Ea::TradeRecv::processTradeOk | 0 | tradeWindow->receivedOk(msg.readUInt8("status") == 0U); msg.readUInt8("status"); |
SMSG_TRADE_ITEM_ADD_RESPONSE | 0x00ea | 5 | TradeRecv::processTradeItemAddResponse | 0 | msg.readInt16("index"); const uint8_t res = msg.readUInt8("fail"); |
SMSG_TRADE_COMPLETE | 0x00f0 | 3 | Ea::TradeRecv::processTradeComplete | 0 | |
SMSG_TRADE_CANCEL | 0x00ee | 2 | Ea::TradeRecv::processTradeCancel | 0 | |
SMSG_SPIRIT_BALL_SINGLE | 0x01e1 | 8 | BeingRecv::processSpiritBalls | 0 | msg.readBeingId("being id")); const int balls = msg.readInt16("spirits amount"); |
SMSG_SPIRIT_BALLS | 0x01d0 | 8 | BeingRecv::processSpiritBalls | 0 | msg.readBeingId("being id")); const int balls = msg.readInt16("spirits amount"); |
SMSG_SOLVE_CHAR_NAME | 0x0194 | 30 | BeingRecv::processSolveCharName | 0 | const int flag = msg.readInt16("flag"); const int id = msg.readInt32("char id"); msg.readString(24, "name"); actorManager->addChar(id, msg.readString(24, "name")); |
SMSG_SKILL_UNIT_UPDATE | 0x01ac | 6 | SkillRecv::processSkillUnitUpdate | 0 | msg.readBeingId("being id"); |
SMSG_SKILL_MEMO_MESSAGE | 0x011e | 3 | SkillRecv::processSkillMemoMessage | 0 | const int type = msg.readUInt8("type"); |
SMSG_SKILL_GROUND_NO_DAMAGE | 0x0117 | 18 | BeingRecv::processSkillGroundNoDamage | 0 | msg.readInt16("skill id"); msg.readInt32("src id"); msg.readInt16("val"); msg.readInt16("x"); msg.readInt16("y"); msg.readInt32("tick"); |
SMSG_SKILL_GROUND_DAMAGE_UNUSED | 0x0115 | 35 | nullptr | 0 | |
SMSG_SKILL_FAILED | 0x0110 | 10 | SkillRecv::processSkillFailed | 0 | const int skillId = msg.readInt16("skill id"); const int bskill = msg.readItemId("btype"); const int itemId = msg.readItemId("item id"); const signed char success = msg.readUInt8("success"); const signed char reason = msg.readUInt8("reason"); |
SMSG_SKILL_DEVOTION_EFFECT | 0x01cf | 28 | SkillRecv::processSkillDevotionEffect | 0 | msg.readBeingId("being id"); msg.readInt32("devotee id"); msg.readInt16("range"); |
SMSG_SKILL_CAST_CANCEL | 0x01b9 | 6 | BeingRecv::processSkillCancel | 0 | msg.readInt32("id?"); |
SMSG_SKILL_AUTO_CAST | 0x0147 | 39 | BeingRecv::processSkillAutoCast | 0 | const int id = msg.readInt16("skill id"); msg.readInt16("inf"); msg.readInt16("unused"); const int level = msg.readInt16("skill level"); msg.readInt16("sp"); msg.readInt16("range"); msg.readString(24, "skill name"); msg.readInt8("unused"); |
SMSG_SKILL_ARROW_CREATE_LIST | 0x01ad | -1 | SkillRecv::processSkillArrowCreateList | 0 | const int count = (msg.readInt16("len") - 4) / itemIdLen; msg.readItemId("item id"); |
SMSG_SERVER_PING | 0x007f | 6 | GameRecv::processServerTick | 0 | msg.readInt32("tick"); |
SMSG_SCRIPT_MESSAGE | 0x08b3 | -1 | ChatRecv::processScriptMessage | 0 | const int sz = msg.readInt16("len") - 8; msg.readBeingId("being id"); const std::string message = msg.readString(sz, "message"); |
SMSG_PVP_SET | 0x019a | 14 | BeingRecv::processPvpSet | 0 | const BeingId id = msg.readBeingId("being id"); const int rank = msg.readInt32("rank"); msg.readInt32("num"); |
SMSG_PVP_MAP_MODE | 0x0199 | 4 | Ea::BeingRecv::processPvpMapMode | 0 | map->setPvpMode(msg.readInt16("pvp mode")); |
SMSG_PLAYER_WARP | 0x0091 | 22 | Ea::PlayerRecv::processPlayerWarp | 0 | std::string mapPath = msg.readString(16, "map name"); int x = msg.readInt16("x"); int y = msg.readInt16("y"); |
SMSG_PLAYER_USE_CARD | 0x017b | -1 | InventoryRecv::processPlayerUseCard | 0 | const int count = (msg.readInt16("len") - 4) / 2; const int itemIndex = msg.readInt16("item index") - INVENTORY_OFFSET; |
SMSG_PLAYER_STORAGE_STATUS | 0x00f2 | 6 | Ea::InventoryRecv::processPlayerStorageStatus | 0 | msg.readInt16("used count"); const int size = msg.readInt16("max size"); |
SMSG_PLAYER_STORAGE_REMOVE | 0x00f6 | 8 | InventoryRecv::processPlayerStorageRemove | 0 | const int index = msg.readInt16("index") - STORAGE_OFFSET; const int amount = msg.readInt32("amount"); |
SMSG_PLAYER_STORAGE_CLOSE | 0x00f8 | 2 | Ea::InventoryRecv::processPlayerStorageClose | 0 | |
SMSG_PLAYER_STOP | 0x0088 | 10 | Ea::BeingRecv::processPlayerStop | 0 | const BeingId id = msg.readBeingId("account id"); const uint16_t x = msg.readInt16("x"); const uint16_t y = msg.readInt16("y"); msg.readInt16("x"); msg.readInt16("y"); |
SMSG_PLAYER_STAT_UPDATE_6 | 0x00be | 5 | Ea::PlayerRecv::processPlayerStatUpdate6 | 0 | const int type = msg.readInt16("type"); const int value = msg.readUInt8("value"); |
SMSG_PLAYER_STAT_UPDATE_5 | 0x00bd | 44 | PlayerRecv::processPlayerStatUpdate5 | 0 | msg.readInt16("char points"), unsigned int val = msg.readUInt8("str"); msg.readUInt8("str cost")); msg.readUInt8("str need"); val = msg.readUInt8("agi"); msg.readUInt8("agi cost")); msg.readUInt8("agi cost"); val = msg.readUInt8("vit"); msg.readUInt8("vit cost")); msg.readUInt8("vit cost"); val = msg.readUInt8("int"); msg.readUInt8("int cost")); msg.readUInt8("int cost"); val = msg.readUInt8("dex"); msg.readUInt8("dex cost")); msg.readUInt8("dex cost"); val = msg.readUInt8("luk"); msg.readUInt8("luk cost")); msg.readUInt8("luk cost"); msg.readInt16("left atk"), msg.readInt16("right atk"), val = msg.readInt16("right matk"); val = msg.readInt16("left matk"); msg.readInt16("left def"), msg.readInt16("right def"), msg.readInt16("left mdef"), msg.readInt16("right mdef"), msg.readInt16("hit"), msg.readInt16("flee"), msg.readInt16("flee2/10"), msg.readInt16("crit/10"), msg.readInt16("attack speed"), msg.readInt16("plus speed = 0"); |
SMSG_PLAYER_STAT_UPDATE_4 | 0x00bc | 6 | Ea::PlayerRecv::processPlayerStatUpdate4 | 0 | const uint16_t type = msg.readInt16("type"); const uint8_t ok = msg.readUInt8("flag"); const int value = msg.readUInt8("value"); |
SMSG_PLAYER_STAT_UPDATE_3 | 0x0141 | 14 | Ea::PlayerRecv::processPlayerStatUpdate3 | 0 | const int type = msg.readInt32("type"); const int base = msg.readInt32("base"); const int bonus = msg.readInt32("bonus"); |
SMSG_PLAYER_STAT_UPDATE_2 | 0x00b1 | 8 | Ea::PlayerRecv::processPlayerStatUpdate2 | 0 | const int type = msg.readInt16("type"); const int value = msg.readInt32("value"); |
SMSG_PLAYER_STAT_UPDATE_1 | 0x00b0 | 8 | Ea::PlayerRecv::processPlayerStatUpdate1 | 0 | const int type = msg.readInt16("type"); const int value = msg.readInt32("value"); |
SMSG_PLAYER_SKILL_UP | 0x010e | 11 | Ea::SkillRecv::processPlayerSkillUp | 0 | const int skillId = msg.readInt16("skill id"); const int level = msg.readInt16("skill level"); const int sp = msg.readInt16("sp"); const int range = msg.readInt16("range"); const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); |
SMSG_PLAYER_SKILL_PRODUCE_MIX_LIST | 0x018d | -1 | SkillRecv::processSkillProduceMixList | 0 | const int count = (msg.readInt16("len") - 4) / 4 * itemIdLen; msg.readItemId("item id"); msg.readItemId("material id"); |
SMSG_PLAYER_SKILL_PRODUCE_EFFECT | 0x018f | 6 | SkillRecv::processSkillProduceEffect | 0 | msg.readInt16("flag"); msg.readItemId("item id"); |
SMSG_PLAYER_SKILLS | 0x010f | -1 | SkillRecv::processPlayerSkills | 0 | msg.readInt16("len"); const int skillId = msg.readInt16("skill id"); msg.readInt32("inf")); msg.readInt32("inf2"); const int level = msg.readInt16("skill level"); const int sp = msg.readInt16("sp"); const int range = msg.readInt16("range"); const std::string name = msg.readString(24, "skill name"); const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); |
SMSG_PLAYER_REPAIR_LIST | 0x01fc | -1 | InventoryRecv::processPlayerRepairList | 0 | const int count = (msg.readInt16("len") - 4) / msg.readInt16("index"); msg.readItemId("item id"); msg.readUInt8("refine"); msg.readItemId("card"); |
SMSG_PLAYER_REPAIR_EFFECT | 0x01fe | 5 | InventoryRecv::processPlayerRepairEffect | 0 | msg.readInt16("item index"); msg.readUInt8("flag"); |
SMSG_PLAYER_REFINE | 0x0188 | 8 | InventoryRecv::processPlayerRefine | 0 | const int flag = msg.readInt16("flag"); const int index = msg.readInt16("inv index") - INVENTORY_OFFSET; msg.readInt16("refine"); |
SMSG_PLAYER_NOTIFY_MAPINFO | 0x0189 | 4 | PlayerRecv::processNotifyMapInfo | 0 | msg.readInt16("type"); |
SMSG_PLAYER_MOVE_TO_ATTACK | 0x0139 | 16 | Ea::BeingRecv::processPlayerMoveToAttack | 0 | msg.readInt32("target id"); msg.readInt16("target x"); msg.readInt16("target y"); msg.readInt16("x"); msg.readInt16("y"); msg.readInt16("attack range"); |
SMSG_PLAYER_INVENTORY_REMOVE | 0x00af | 6 | InventoryRecv::processPlayerInventoryRemove | 0 | const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int amount = msg.readInt16("amount"); |
SMSG_PLAYER_INSERT_CARD | 0x017d | 7 | InventoryRecv::processPlayerInsertCard | 0 | const int itemIndex = msg.readInt16("item index") - INVENTORY_OFFSET; const int cardIndex = msg.readInt16("card index") - INVENTORY_OFFSET; if (msg.readUInt8("flag") != 0U) |
SMSG_PLAYER_IDENTIFY_LIST | 0x0177 | -1 | InventoryRecv::processPlayerIdentifyList | 0 | const int count = msg.readInt16("len") - 4; msg.readInt16("inv index"); |
SMSG_PLAYER_IDENTIFIED | 0x0179 | 5 | InventoryRecv::processPlayerIdentified | 0 | msg.readInt16("inv index"); msg.readUInt8("flag"); |
SMSG_PLAYER_CHAT | 0x008e | -1 | ChatRecv::processChat | 0 | const int chatMsgLength = msg.readInt16("len") - 4; processChatContinue(msg.readRawString(chatMsgLength, "message"), |
SMSG_PLAYER_CART_REMOVE | 0x0125 | 8 | InventoryRecv::processPlayerCartRemove | 0 | const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int amount = msg.readInt32("amount"); |
SMSG_PLAYER_CART_ADD_ERROR | 0x012c | 3 | InventoryRecv::processCartAddError | 0 | switch (msg.readUInt8("flag")) |
SMSG_PLAYER_ATTACK_RANGE | 0x013a | 4 | Ea::InventoryRecv::processPlayerAttackRange | 0 | const int range = msg.readInt16("range"); |
SMSG_PLAYER_ARROW_MESSAGE | 0x013b | 4 | Ea::PlayerRecv::processPlayerArrowMessage | 0 | const int type = msg.readInt16("type"); |
SMSG_PLAYER_ARROW_EQUIP | 0x013c | 4 | Ea::InventoryRecv::processPlayerArrowEquip | 0 | int index = msg.readInt16("index"); |
SMSG_PLAYER_ADD_SKILL | 0x0111 | 39 | SkillRecv::processSkillAdd | 0 | const int skillId = msg.readInt16("skill id"); msg.readInt32("inf")); const int level = msg.readInt16("skill level"); const int sp = msg.readInt16("sp"); const int range = msg.readInt16("range"); const std::string name = msg.readString(24, "skill name"); const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); |
SMSG_PET_ROULETTE | 0x01a0 | 3 | PetRecv::processPetRoulette | 0 | const uint8_t data = msg.readUInt8("data"); |
SMSG_PET_MESSAGE | 0x01aa | 10 | PetRecv::processPetMessage | 0 | msg.readBeingId("pet id"); msg.readInt32("param"); |
SMSG_PET_FOOD | 0x01a3 | 5 | PetRecv::processPetFood | 0 | const int result = msg.readUInt8("result"); msg.readItemId("food id"); |
SMSG_PET_EGGS_LIST | 0x01a6 | -1 | PetRecv::processEggsList | 0 | const int count = (msg.readInt16("len") - 4) / 2; const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int index = msg.readInt16("index") - INVENTORY_OFFSET; |
SMSG_PET_DATA | 0x01a4 | 11 | PetRecv::processPetData | 0 | const int cmd = msg.readUInt8("type"); const BeingId id = msg.readBeingId("pet id"); const int data = msg.readInt32("data"); |
SMSG_PET_CATCH_PROCESS | 0x019e | 2 | PetRecv::processPetCatchProcess | 0 | |
SMSG_PARTY_UPDATE_COORDS | 0x0107 | 10 | Ea::PartyRecv::processPartyUpdateCoords | 0 | const BeingId id = msg.readBeingId("account id"); m->setX(msg.readInt16("x")); m->setY(msg.readInt16("y")); msg.readInt16("x"); msg.readInt16("y"); |
SMSG_PARTY_MESSAGE | 0x0109 | -1 | PartyRecv::processPartyMessage | 0 | const int msgLength = msg.readInt16("len") - 8; const BeingId id = msg.readBeingId("id"); std::string chatMsg = msg.readString(msgLength, "message"); |
SMSG_PARTY_LEAVE | 0x0105 | 31 | Ea::PartyRecv::processPartyLeave | 0 | const BeingId id = msg.readBeingId("account id"); const std::string nick = msg.readString(24, "nick"); const int reason = msg.readUInt8("flag"); |
SMSG_PARTY_LEADER | 0x07fc | 10 | PartyRecv::processPartyLeader | 0 | msg.readBeingId("old leder id")); msg.readBeingId("new leder id")); |
SMSG_PARTY_INVITE_RESPONSE_OUTDATED | 0x00fd | 27 | nullptr | 0 | |
SMSG_PARTY_CREATE | 0x00fa | 3 | Ea::PartyRecv::processPartyCreate | 0 | if (msg.readUInt8("flag") != 0U) |
SMSG_NPC_VIEWPOINT | 0x0144 | 23 | NpcRecv::processNpcViewPoint | 0 | msg.readInt32("npc id"); msg.readInt32("type"); // 0 display for 15 sec, msg.readInt32("x"); msg.readInt32("y"); msg.readUInt8("number"); // can be used for scripts msg.readInt32("color"); |
SMSG_NPC_STR_INPUT | 0x01d4 | 6 | Ea::NpcRecv::processNpcStrInput | 0 | |
SMSG_NPC_SHOW_DIGIT | 0x01b1 | 7 | NpcRecv::processShowDigit | 0 | msg.readUInt8("type"); msg.readInt32("value"); |
SMSG_NPC_SELL_RESPONSE | 0x00cb | 3 | BuySellRecv::processNpcSellResponse | 0 | switch (msg.readUInt8("result")) |
SMSG_NPC_SELL | 0x00c7 | -1 | Ea::BuySellRecv::processNpcSell | 0 | msg.readInt16("len"); const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int value = msg.readInt32("value"); msg.readInt32("value?"); |
SMSG_NPC_NEXT | 0x00b5 | 6 | Ea::NpcRecv::processNpcNext | 0 | |
SMSG_NPC_MESSAGE | 0x00b4 | -1 | Ea::NpcRecv::processNpcMessage | 0 | msg.readInt16("len"); const std::string message = msg.readString(msg.getLength() - 8, "message"); |
SMSG_NPC_INT_INPUT | 0x0142 | 6 | Ea::NpcRecv::processNpcIntInput | 0 | |
SMSG_NPC_CUTIN | 0x01b3 | 67 | NpcRecv::processNpcCutin | 0 | msg.readString(64, "image name"); msg.readUInt8("type"); const std::string image = msg.readString(64, "image name"); const CutInT cutin = static_cast<CutInT>(msg.readUInt8("type")); |
SMSG_NPC_CLOSE_TIMEOUT | 0x08d6 | 6 | NpcRecv::processNpcCloseTimeout | 0 | msg.readInt32("npc id"); |
SMSG_NPC_CLOSE | 0x00b6 | 6 | Ea::NpcRecv::processNpcClose | 0 | |
SMSG_NPC_CHOICE | 0x00b7 | -1 | Ea::NpcRecv::processNpcChoice | 0 | msg.readInt16("len"); mDialog->parseListItems(msg.readString(msg.getLength() - 8,"select items")); msg.readString(msg.getLength() - 8, "select items"); |
SMSG_NPC_CASH_TAB_PRICE_LIST | 0x08c0 | -1 | CashShopRecv::processCashShopTabPriceList | 0 | const int count = (msg.readInt16("len") - 10) / 6; msg.readInt32("tab"); const int itemsCount = msg.readInt16("count"); msg.readInt16("item id"); // item id size always 16 bit msg.readInt32("price"); |
SMSG_NPC_CASH_SCHEDULE | 0x08ca | -1 | CashShopRecv::processCashShopSchedule | 0 | const int count = (msg.readInt16("len") - 8) / blockSize; const int itemsCount = msg.readInt16("count"); msg.readInt16("tab"); msg.readItemId("item id"); msg.readInt32("price"); |
SMSG_NPC_CASH_POINTS | 0x0845 | 10 | CashShopRecv::processCashShopPoints | 0 | msg.readInt32("cash points"); msg.readInt32("kafra points"); |
SMSG_NPC_BUY_SELL_CHOICE | 0x00c4 | 6 | Ea::BuySellRecv::processNpcBuySellChoice | 0 | mNpcId = msg.readBeingId("npc id"); |
SMSG_NPC_BUY_RESPONSE | 0x00ca | 3 | BuySellRecv::processNpcBuyResponse | 0 | const uint8_t response = msg.readUInt8("response"); |
SMSG_NPC_BUY | 0x00c6 | -1 | BuySellRecv::processNpcBuy | 0 | msg.readInt16("len"); const int value = msg.readInt32("price"); msg.readInt32("dc value?"); msg.readUInt8("type")); const int itemId = msg.readItemId("item id"); |
SMSG_MVP_NO_ITEM | 0x010d | 2 | ChatRecv::processMVPNoItem | 0 | |
SMSG_MVP_EFFECT | 0x010c | 6 | Ea::ChatRecv::processMVPEffect | 0 | const BeingId id = msg.readBeingId("being id"); |
SMSG_MVP_ITEM | 0x010a | 4 | ChatRecv::processMVPItem | 0 | msg.readItemId("item id"); |
SMSG_MONSTER_INFO | 0x018c | 29 | BeingRecv::processMonsterInfo | 0 | msg.readInt16("class"); msg.readInt16("level"); msg.readInt16("size"); msg.readInt32("hp"); msg.readInt16("def"); msg.readInt16("race"); msg.readInt16("mdef"); msg.readInt16("ele"); |
SMSG_MARRIAGE_PROPOSAL_OUTDATED | 0x01e2 | 34 | nullptr | 0 | |
SMSG_MARRIAGE_PROCESS_OUTDATED | 0x01e4 | 2 | nullptr | 0 | |
SMSG_MAP_TYPE | 0x01d6 | 4 | BeingRecv::processMapType | 0 | const int16_t type = msg.readInt16("type"); |
SMSG_MAP_QUIT_RESPONSE | 0x018b | 4 | Ea::GameRecv::processMapQuitResponse | 0 | if (msg.readInt16("response") != 0) |
SMSG_MAP_AUTH_REFUSE | 0x0074 | 3 | GameRecv::processMapAuthRefuse | 0 | msg.readUInt8("error"); |
SMSG_MANNER_MESSAGE | 0x014a | 6 | ChatRecv::processMannerMessage | 0 | const int result = msg.readInt32("type"); |
SMSG_ITEM_VISIBLE | 0x009d | 17 | ItemRecv::processItemVisible | 0 | const BeingId id = msg.readBeingId("item object id"); const int itemId = msg.readItemId("item id"); msg.readUInt8("identify"), Identified); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); const int amount = msg.readInt16("amount"); const int subX = CAST_S32(msg.readInt8("sub x")); const int subY = CAST_S32(msg.readInt8("sub y")); |
SMSG_ITEM_USE_RESPONSE | 0x00a8 | 7 | Ea::InventoryRecv::processItemUseResponse | 0 | const int index = msg.readInt16("index") - INVENTORY_OFFSET; const int amount = msg.readInt16("amount"); if (msg.readUInt8("result") == 0) |
SMSG_ITEM_REMOVE | 0x00a1 | 6 | Ea::ItemRecv::processItemRemove | 0 | ->findItem(msg.readBeingId("floor item id"))) |
SMSG_ITEM_MVP_DROPPED | 0x07fd | -1 | ItemRecv::processItemMvpDropped | 0 | msg.readInt16("len"); msg.readUInt8("type"); msg.readItemId("item id"); msg.readUInt8("len"); msg.readString(24, "name"); msg.readUInt8("monster name len"); msg.readString(24, "monster name"); |
SMSG_IGNORE_NICK_ACK | 0x00d1 | 4 | ChatRecv::processIgnoreNickAck | 0 | const int type = msg.readUInt8("type"); const int flag = msg.readUInt8("flag"); |
SMSG_IGNORE_ALL_RESPONSE | 0x00d2 | 4 | Ea::ChatRecv::processIgnoreAllResponse | 0 | const uint8_t action = msg.readUInt8("action"); const uint8_t fail = msg.readUInt8("result"); |
SMSG_GUILD_UPDATE_COORDS | 0x01eb | 10 | GuildRecv::processGuildUpdateCoords | 0 | const BeingId id = msg.readBeingId("account id"); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); |
SMSG_GUILD_SKILL_INFO | 0x0162 | -1 | GuildRecv::processGuildSkillInfo | 0 | const int count = (msg.readInt16("len") - 6) / 37; msg.readInt16("skill points"); const int skillId = msg.readInt16("skill id"); msg.readInt32("inf")); const int level = msg.readInt16("skill level"); const int sp = msg.readInt16("sp"); const int range = msg.readInt16("range"); const std::string name = msg.readString(24, "skill name"); const Modifiable up = fromBool(msg.readUInt8("up flag"), Modifiable); |
SMSG_GUILD_REQ_ALLIANCE_ACK | 0x0173 | 3 | GuildRecv::processGuildReqAllianceAck | 0 | msg.readInt32("flag"); |
SMSG_GUILD_REQ_ALLIANCE | 0x0171 | 30 | GuildRecv::processGuildReqAlliance | 0 | msg.readInt32("id"); msg.readString(24, "name"); |
SMSG_GUILD_POS_NAME_LIST | 0x0166 | -1 | GuildRecv::processGuildPosNameList | 0 | const int length = msg.readInt16("len"); const int id = msg.readInt32("position id"); const std::string name = msg.readString(24, "position name"); |
SMSG_GUILD_POS_INFO_LIST | 0x0160 | -1 | GuildRecv::processGuildPosInfoList | 0 | const int length = msg.readInt16("len"); msg.readInt32("id"); msg.readInt32("mode"); msg.readInt32("same id"); msg.readInt32("exp mode"); |
SMSG_GUILD_POSITION_INFO | 0x016c | 43 | GuildRecv::processGuildPositionInfo | 0 | const int guildId = msg.readInt32("guild id"); const int emblem = msg.readInt32("elblem id"); static_cast<GuildPositionFlags::Type>(msg.readInt32("mode"))); msg.readUInt8("guild master"); msg.readInt32("unused"); std::string guildName = msg.readString(24, "guild name"); |
SMSG_GUILD_POSITION_CHANGED | 0x0174 | -1 | GuildRecv::processGuildPositionChanged | 0 | msg.readInt16("len"); msg.readInt32("id"); msg.readInt32("mode"); msg.readInt32("same ip"); msg.readInt32("exp mode"); msg.readString(24, "name"); |
SMSG_GUILD_OPPOSITION_ACK | 0x0181 | 3 | GuildRecv::processGuildOppositionAck | 0 | msg.readUInt8("flag"); |
SMSG_GUILD_NOTICE | 0x016f | 182 | GuildRecv::processGuildNotice | 0 | const std::string msg1 = msg.readString(60, "msg1"); const std::string msg2 = msg.readString(120, "msg2"); msg.readString(60, "msg1"); msg.readString(120, "msg2"); |
SMSG_GUILD_MESSAGE | 0x017f | -1 | GuildRecv::processGuildMessage | 0 | const int msgLength = msg.readInt16("len") - 4; std::string chatMsg = msg.readString(msgLength, "message"); msg.readString(msgLength, "message"); |
SMSG_GUILD_MEMBER_POS_CHANGE | 0x0156 | -1 | GuildRecv::processGuildMemberPosChange | 0 | msg.readInt16("len"); const BeingId accountId = msg.readBeingId("account id"); const int charId = msg.readInt32("char id"); const int pos = msg.readInt32("position"); |
SMSG_GUILD_MEMBER_LOGIN | 0x01f2 | 20 | GuildRecv::processGuildMemberLogin | 0 | const BeingId accountId = msg.readBeingId("account id"); const int charId = msg.readInt32("char id"); const int online = msg.readInt32("flag"); msg.readInt16("sex"))); msg.readInt16("hair"); msg.readInt16("hair color"); |
SMSG_GUILD_MASTER_OR_MEMBER | 0x014e | 6 | GuildRecv::processGuildMasterOrMember | 0 | msg.readInt32("type"); // Type (0x57 for member, 0xd7 for master) |
SMSG_GUILD_LEAVE | 0x015a | 66 | GuildRecv::processGuildLeave | 0 | const std::string nick = msg.readString(24, "nick"); msg.readString(40, "message"); |
SMSG_GUILD_INVITE_ACK | 0x0169 | 3 | GuildRecv::processGuildInviteAck | 0 | const uint8_t flag = msg.readUInt8("flag"); |
SMSG_GUILD_INVITE | 0x016a | 30 | GuildRecv::processGuildInvite | 0 | const int guildId = msg.readInt32("guild id"); const std::string guildName = msg.readString(24, "guild name"); msg.readString(24, "guild name"); |
SMSG_GUILD_EMBLEM_DATA | 0x0152 | -1 | GuildRecv::processGuildEmblemData | 0 | const int length = msg.readInt16("len"); msg.readInt32("guild id"); msg.readInt32("emblem id"); |
SMSG_GUILD_EMBLEM | 0x01b4 | 12 | GuildRecv::processGuildEmblem | 0 | msg.readBeingId("being id"); msg.readInt32("guild id"); msg.readInt16("emblem id"); |
SMSG_GUILD_DEL_ALLIANCE | 0x0184 | 10 | GuildRecv::processGuildDelAlliance | 0 | msg.readInt32("guild id"); msg.readInt32("flag"); |
SMSG_GUILD_CREATE_RESPONSE | 0x0167 | 3 | GuildRecv::processGuildCreateResponse | 0 | const uint8_t flag = msg.readUInt8("flag"); |
SMSG_GUILD_BROKEN | 0x015e | 6 | GuildRecv::processGuildBroken | 0 | msg.readInt32("flag"); |
SMSG_GUILD_ALLIANCE_ADDED_DISABLED | 0x0185 | 34 | nullptr | 0 | |
SMSG_GUILD_ALIANCE_INFO | 0x014c | -1 | GuildRecv::processGuildAlianceInfo | 0 | const int length = msg.readInt16("len"); msg.readInt32("opposition"); msg.readInt32("guild id"); msg.readString(24, "guild name"); |
SMSG_GRAFFITI_VISIBLE | 0x01c9 | 97 | BeingRecv::processGraffiti | 0 | const BeingId id = msg.readBeingId("graffiti id"); const BeingId creatorId = msg.readBeingId("creator id"); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); const int job = msg.readUInt8("job"); msg.readUInt8("visible"); msg.readUInt8("is content"); const std::string text = msg.readString(80, "text"); |
SMSG_GM_CHAT2 | 0x01c3 | -1 | ChatRecv::processGmChat2 | 0 | const int chatMsgLength = msg.readInt16("len") - 16; msg.readInt32("font color"); msg.readInt16("font type"); msg.readInt16("font size"); msg.readInt16("font align"); msg.readInt16("font y"); const std::string chatMsg = msg.readRawString(chatMsgLength,"message"); msg.readRawString(chatMsgLength, "message"); |
SMSG_GM_CHAT | 0x009a | -1 | ChatRecv::processGmChat | 0 | const int chatMsgLength = msg.readInt16("len") - 4; std::string chatMsg = msg.readRawString(chatMsgLength, "message"); |
SMSG_FRIENDS_REQUEST_ACK | 0x0209 | 36 | FriendsRecv::processRequestAck | 0 | msg.readInt16("type"); msg.readBeingId("account id"); msg.readInt32("char id"); msg.readString(24, "name"); |
SMSG_FRIENDS_REQUEST | 0x0207 | 34 | FriendsRecv::processRequest | 0 | msg.readBeingId("account id"); msg.readInt32("char id"); msg.readString(24, "name"); |
SMSG_FRIENDS_PLAYER_ONLINE | 0x0206 | 11 | FriendsRecv::processPlayerOnline | 0 | msg.readBeingId("account id"); msg.readInt32("char id"); msg.readUInt8("flag"); // 0 - online, 1 - offline msg.readString(24, "player name"); |
SMSG_FRIENDS_LIST | 0x0201 | -1 | FriendsRecv::processFriendsList | 0 | const int count = (msg.readInt16("size") - 4) / 32; msg.readBeingId("account id"); msg.readInt32("char id"); msg.readString(24, "name"); |
SMSG_FRIENDS_DELETE_PLAYER | 0x020a | 10 | FriendsRecv::processDeletePlayer | 0 | msg.readBeingId("account id"); msg.readInt32("char id"); |
SMSG_FAMILY_DIVORCED | 0x0205 | 26 | FamilyRecv::processDivorced | 0 | const std::string name = msg.readString(24, "name"); |
SMSG_FAMILY_CALL_PARTNER | 0x01e6 | 26 | FamilyRecv::processCallPartner | 0 | const std::string name = msg.readString(24, "name"); |
SMSG_FAMILY_ASK_FOR_CHILD | 0x01f6 | 34 | FamilyRecv::processAskForChild | 0 | mParent1 = msg.readBeingId("account id who ask"); mParent2 = msg.readBeingId("acoount id for other parent"); msg.readString(24, "name who ask"); mParent1 = msg.readBeingId("account id who ask"); mParent2 = msg.readBeingId("acoount id for other parent"); const std::string name1 = msg.readString(24, "name who ask"); |
SMSG_CONNECTION_PROBLEM | 0x0081 | 3 | GeneralRecv::processConnectionProblem | 0 | const uint8_t code = msg.readUInt8("flag"); |
SMSG_COMBO_DELAY | 0x01d2 | 10 | BeingRecv::processComboDelay | 0 | msg.readBeingId("being id"); msg.readInt32("wait"); |
SMSG_CLASS_CHANGE | 0x01b0 | 11 | BeingRecv::processClassChange | 0 | msg.readBeingId("being id"); msg.readUInt8("type"); msg.readInt32("class"); |
SMSG_CHAT_TALKIE_BOX | 0x0191 | 86 | ChatRecv::processChatTalkieBox | 0 | msg.readBeingId("being id"); const std::string message = msg.readString(80, "message"); |
SMSG_CHAT_SILENCE | 0x014b | 27 | ChatRecv::processChatSilence | 0 | const int result = msg.readUInt8("type"); const std::string name = msg.readString(24, "gm name"); |
SMSG_CHAT_ROOM_SETTINGS | 0x00df | -1 | ChatRecv::processChatRoomSettings | 0 | const int sz = msg.readInt16("len") - 17; const BeingId ownerId = msg.readBeingId("owner id"); const int chatId = msg.readInt32("chat id"); const uint16_t limit = msg.readInt16("limit"); msg.readInt16("users"); const uint8_t type = msg.readUInt8("type"); const std::string &title = msg.readString(sz, "title"); |
SMSG_CHAT_ROOM_ROLE_CHANGE | 0x00e1 | 30 | ChatRecv::processChatRoomRoleChange | 0 | const int role = msg.readInt32("role"); const std::string name = msg.readString(24, "name"); |
SMSG_CHAT_ROOM_LEAVE | 0x00dd | 29 | ChatRecv::processChatRoomLeave | 0 | msg.readInt16("users"); const std::string name = msg.readString(24, "name"); const int status = msg.readUInt8("flag"); // 0 - left, 1 - kicked |
SMSG_CHAT_ROOM_JOIN_FAILED | 0x00da | 3 | ChatRecv::processChatRoomJoinFailed | 0 | const int result = msg.readUInt8("flag"); |
SMSG_CHAT_ROOM_JOIN_ACK | 0x00db | -1 | ChatRecv::processChatRoomJoinAck | 0 | const int count = (msg.readInt16("len") - 8) / 28; const int id = msg.readInt32("chat id"); msg.readInt32("role"); msg.readString(24, "name"); |
SMSG_CHAT_ROOM_DESTROY | 0x00d8 | 6 | ChatRecv::processChatRoomDestroy | 0 | const int chatId = msg.readInt32("chat id"); |
SMSG_CHAT_ROOM_CREATE_ACK | 0x00d6 | 3 | ChatRecv::processChatRoomCreateAck | 0 | const int result = msg.readUInt8("flag"); |
SMSG_CHAT_ROOM_ADD_MEMBER | 0x00dc | 28 | ChatRecv::processChatRoomAddMember | 0 | msg.readInt16("users"); const std::string name = msg.readString(24, "name"); |
SMSG_CHAT_IGNORE_LIST | 0x00d4 | -1 | ChatRecv::processChatIgnoreList | 0 | const int count = (msg.readInt16("len") - 4) / 24; msg.readString(24, "nick"); |
SMSG_CHAT_DISPLAY | 0x00d7 | -1 | ChatRecv::processChatDisplay | 0 | const int len = msg.readInt16("len") - 17; obj->ownerId = msg.readBeingId("owner account id"); obj->chatId = msg.readInt32("chat id"); obj->maxUsers = msg.readInt16("max users"); obj->currentUsers = msg.readInt16("current users"); obj->type = msg.readUInt8("type"); obj->title = msg.readString(len, "title"); |
SMSG_CHAR_SWITCH_RESPONSE | 0x00b3 | 3 | Ea::GameRecv::processCharSwitchResponse | 0 | if (msg.readUInt8("response") != 0U) |
SMSG_CHAR_BAN_CHAR_LIST | 0x020d | -1 | CharServerRecv::processCharBanCharList | 0 | const int count = (msg.readInt16("len") - 4) / 24; msg.readInt32("char id"); msg.readString(20, "unbun time"); |
SMSG_CART_REMOVE | 0x012b | 2 | InventoryRecv::processCartRemove | 0 | |
SMSG_CART_INFO | 0x0121 | 14 | InventoryRecv::processCartInfo | 0 | msg.readInt16("cart items used"); const int size = msg.readInt16("max cart items"); msg.readInt32("cart weight"), msg.readInt32("max cart weight"), |
SMSG_BLADE_STOP | 0x01d1 | 14 | BeingRecv::processBladeStop | 0 | msg.readInt32("src being id"); msg.readInt32("dst being id"); msg.readInt32("flag"); |
SMSG_BIND_ITEM | 0x02d3 | 4 | InventoryRecv::processBindItem | 0 | const int index = msg.readInt16("item index") - INVENTORY_OFFSET; |
SMSG_BEING_STAT_UPDATE_1 | 0x01ab | 12 | BeingRecv::processBeingStatUpdate1 | 0 | const BeingId id = msg.readBeingId("account id"); const int type = msg.readInt16("type"); const int value = msg.readInt32("value"); |
SMSG_BEING_SPECIAL_EFFECT | 0x01f3 | 10 | BeingRecv::processBeingSpecialEffect | 0 | const BeingId id = msg.readBeingId("being id"); msg.readInt32("effect type"); const int effectType = msg.readInt32("effect type"); |
SMSG_BEING_SOUND_EFFECT | 0x01d3 | 35 | BeingRecv::processBeingSoundEffect | 0 | msg.readString(24, "sound effect name"); msg.readUInt8("type"); msg.readInt32("unused"); msg.readInt32("source being id"); |
SMSG_BEING_SLIDE | 0x01ff | 10 | BeingRecv::processBeingSlide | 0 | msg.readBeingId("being id")); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); |
SMSG_BEING_SELFEFFECT | 0x019b | 10 | BeingRecv::processBeingSelfEffect | 0 | const BeingId id = msg.readBeingId("being id"); msg.readInt32("effect type"); const int effectType = msg.readInt32("effect type"); |
SMSG_BEING_RESURRECT | 0x0148 | 8 | BeingRecv::processBeingResurrect | 0 | const BeingId id = msg.readBeingId("being id"); msg.readInt16("unused"); |
SMSG_BEING_REMOVE_SKILL | 0x0120 | 6 | BeingRecv::processBeingRemoveSkill | 0 | const BeingId id = msg.readBeingId("skill unit id"); |
SMSG_BEING_REMOVE | 0x0080 | 7 | Ea::BeingRecv::processBeingRemove | 0 | const BeingId id = msg.readBeingId("being id"); const uint8_t type = msg.readUInt8("remove flag"); |
SMSG_BEING_NAME_RESPONSE | 0x0095 | 30 | Ea::BeingRecv::processNameResponse | 0 | const BeingId beingId = msg.readBeingId("being id"); const std::string name = msg.readString(24, "name"); |
SMSG_BEING_MOVE2 | 0x0086 | 16 | BeingRecv::processBeingMove2 | 0 | (sy&0x0f)"); msg.readInt32("tick"); |
SMSG_BEING_EMOTION | 0x00c0 | 7 | Ea::BeingRecv::processBeingEmotion | 0 | msg.readBeingId("being id")); msg.readUInt8("emote"); const uint8_t emote = msg.readUInt8("emote"); |
SMSG_BEING_CHAT | 0x008d | -1 | ChatRecv::processBeingChat | 0 | const int chatMsgLength = msg.readInt16("len") - 8; Being *const being = actorManager->findBeing(msg.readBeingId("being id")); std::string chatMsg = msg.readRawString(chatMsgLength, "message"); |
SMSG_BEING_CHANGE_DIRECTION | 0x009c | 9 | BeingRecv::processBeingChangeDirection | 0 | msg.readBeingId("being id")); msg.readInt16("head direction"); CAST_U8(msg.readUInt8("player direction") & 0x0FU)); |
SMSG_BEING_ACTION | 0x008a | 29 | Ea::BeingRecv::processBeingAction | 0 | msg.readBeingId("src being id")); msg.readBeingId("dst being id")); msg.readInt32("tick"); const int srcSpeed = msg.readInt32("src speed"); msg.readInt32("dst speed"); const int param1 = msg.readInt16("param1"); msg.readInt16("param 2"); msg.readUInt8("type")); msg.readInt16("param 3"); |
SMSG_BATTLE_QUEUE_ACK | 0x08d8 | 27 | BattleGroundRecv::processBattleQueueAck | 0 | msg.readUInt8("type"); msg.readString(24, "bg name"); |
SMSG_BATTLE_NOTICE_DELETE | 0x08db | 27 | BattleGroundRecv::processBattleNoticeDelete | 0 | msg.readUInt8("type"); msg.readString(24, "bg name"); |
SMSG_BATTLE_JOINED | 0x08d9 | 30 | BattleGroundRecv::processBattleJoined | 0 | msg.readString(24, "name"); msg.readInt32("position"); |
SMSG_BATTLE_BEGINS | 0x08df | 50 | BattleGroundRecv::processBattleBegins | 0 | msg.readString(24, "bg name"); msg.readString(24, "game name"); |
SMSG_ADMIN_SET_TILE_TYPE | 0x0192 | 24 | AdminRecv::processSetTileType | 0 | msg.readInt16("x"); msg.readInt16("y"); msg.readInt16("type"); msg.readString(16, "map name"); |
SMSG_ADMIN_KICK_ACK | 0x00cd | 3 | Ea::AdminRecv::processKickAck | 0 | if (msg.readInt32("flag") == 0) |
SMSG_ADMIN_GET_LOGIN_ACK | 0x01e0 | 30 | AdminRecv::processAdminGetLoginAck | 0 | msg.readBeingId("account id"); msg.readString(24, "login"); |
SMSG_MAP_NOT_FOUND | 0x0840 | -1 | GeneralRecv::processMapNotFound | 0 | const int sz = msg.readInt16("len") - 4; msg.readString(sz, "map name?"); |
SMSG_CHAR_RENAME | 0x0290 | 4 | CharServerRecv::processCharRename | 0 | const int flag = msg.readInt16("flag"); |
SMSG_CHAR_PINCODE_EDIT_STATUS | 0x08bf | 8 | CharServerRecv::processPincodeEditStatus | 0 | msg.readInt16("state"); msg.readInt32("seed"); |
SMSG_CHAR_PINCODE_MAKE_STATUS | 0x08bb | 8 | CharServerRecv::processPincodeMakeStatus | 0 | msg.readInt16("state"); msg.readInt32("seed"); |
SMSG_CHAR_PINCODE_STATUS | 0x08b9 | 12 | CharServerRecv::processPincodeStatus | 0 | pincodeManager.setSeed(msg.readUInt32("pincode seed")); pincodeManager.setAccountId(msg.readBeingId("account id")); msg.readInt16("state"))) == false) |
SMSG_CHAR_LOGIN_ERROR | 0x006c | 3 | Ea::CharServerRecv::processCharLoginError | 0 | switch (msg.readUInt8("error")) |
SMSG_CHAR_LOGIN2 | 0x082d | -1 | CharServerRecv::processCharLogin2 | 0 | msg.readInt16("len"); msg.readUInt8("char slots"); msg.readUInt8("left slots"); msg.readUInt8("left slots"); msg.readUInt8("char slots"); msg.readUInt8("char slots"); |
SMSG_CHAR_LOGIN | 0x006b | -1 | CharServerRecv::processCharLogin | 0 | msg.readInt16("packet len"); slots = msg.readInt8("MAX_CHARS"); msg.readInt8("sd->char_slots"); msg.readInt8("MAX_CHARS"); |
SMSG_CHAR_DELETE_SUCCEEDED | 0x006f | 2 | Ea::CharServerRecv::processCharDelete | 0 | |
SMSG_CHAR_DELETE_FAILED | 0x0070 | 3 | CharServerRecv::processCharDeleteFailed | 0 | msg.readUInt8("error"); |
SMSG_CHAR_DELETE2_CANCEL_ACK | 0x082c | 10 | CharServerRecv::processCharDelete2CancelAck | 0 | msg.readInt32("char id"); msg.readInt32("result"); |
SMSG_CHAR_DELETE2_ACK | 0x0828 | 14 | CharServerRecv::processCharDelete2Ack | 0 | msg.readInt32("char id"); msg.readInt32("result"); msg.readInt32("time"); |
SMSG_CHAR_DELETE2_ACCEPT_ACTUAL_ACK | 0x082a | 10 | CharServerRecv::processCharDelete2AcceptActual | 0 | msg.readInt32("char id"); msg.readInt32("result"); |
SMSG_CHAR_CREATE_SUCCEEDED | 0x006d | 149 | CharServerRecv::processCharCreate | 0 | |
SMSG_CHAR_CREATE_FAILED | 0x006e | 3 | Ea::CharServerRecv::processCharCreateFailed | 0 | switch (msg.readUInt8("error")) |
SMSG_CHAR_CHECK_RENAME | 0x028e | 4 | CharServerRecv::processCharCheckRename | 0 | if (msg.readInt16("flag") != 0) outMsg.writeBeingId(mRenameId, "char id"); |
SMSG_CHAR_CHANGE_SLOT | 0x08d5 | -1 | CharServerRecv::processCharChangeSlot | 0 | msg.readInt16("len"); msg.readInt16("flag"); // 0 - ok, 1 - error msg.readInt16("unused"); |
SMSG_LOGIN_ERROR | 0x006a | 23 | Ea::LoginRecv::processLoginError | 0 | const uint8_t code = msg.readUInt8("error"); std::string date = msg.readString(20, "date"); |
SMSG_LOGIN_CODING_KEY | 0x01dc | -1 | LoginRecv::processCondingKey | 0 | const int sz = msg.readInt16("len") - 4; msg.readString(sz, "coding key"); |
SMSG_TRADE_RESPONSE_OUTDATED | 0x00e7 | 3 | nullptr | 0 | |
SMSG_BEING_CHANGE_LOOKS_OUTDATED | 0x00c3 | 8 | nullptr | 1 |