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