From The Mana World

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

Jak1 (talk) 07:49, 26 January 2022 (UTC)