User:Jak1/packet

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)