void FamilyRecv::processAskForChild(Net::MessageIn &msg) { if (!localPlayer) { mParent1 = msg.readBeingId("account id who ask"); mParent2 = msg.readBeingId("acoount id for other parent"); msg.readString(24, "name who ask"); return; } 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"); const Party *const party = localPlayer->getParty(); if (party) { const PartyMember *const member = party->getMember(mParent2); if (member) { const std::string name2 = member->getName(); CREATEWIDGETV(confirmDlg, ConfirmDialog, // TRANSLATORS: adopt child message _("Request parents"), // TRANSLATORS: adopt child message strprintf(_("Do you accept %s and %s as parents?"), name1.c_str(), name2.c_str()), SOUND_REQUEST, false); confirmDlg->addActionListener(&listener); } } }
void ItemRecv::processItemVisible(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("item object id"); const int itemId = msg.readInt16("item id"); const Identified identified = fromInt( 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 = static_cast<int>(msg.readInt8("sub x")); const int subY = static_cast<int>(msg.readInt8("sub y")); if (actorManager) { actorManager->createItem(id, itemId, x, y, 0, amount, 0, ItemColor_one, identified, Damaged_false, subX, subY, nullptr); } }
void PartyRecv::processPartyMemberInfo(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("account id"); const bool leader = msg.readInt32("leader") == 0U; 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("party.item&1"); msg.readInt8("party.item&2"); if (!Ea::taParty) return; PartyMember *const member = Ea::taParty->addMember(id, nick); if (member) { if (partyTab && member->getOnline() != online) partyTab->showOnline(nick, fromBool(online, Online)); member->setLeader(leader); member->setOnline(online); member->setMap(map); member->setX(x); member->setY(y); } }
void ItemRecv::processItemDropped(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("id"); const int itemId = msg.readInt16("item id"); ItemTypeT itemType = ItemType::Unknown; if (msg.getVersion() >= 20130000) itemType = static_cast<ItemTypeT>(msg.readInt16("type")); const Identified identified = fromInt( 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"); if (actorManager) { actorManager->createItem(id, itemId, x, y, itemType, amount, 0, ItemColor_one, identified, Damaged_false, subX, subY, nullptr); } }
void BuyingStoreRecv::processBuyingStoreItemsList(Net::MessageIn &msg) { const int count = (msg.readInt16("len") - 16) / 9; const BeingId id = msg.readBeingId("account id"); const int storeId = msg.readInt32("store id"); // +++ in future need use it too msg.readInt32("money limit"); const Being *const dstBeing = actorManager->findBeing(id); if (!dstBeing) return; SellDialog *const dialog = CREATEWIDGETR(BuyingStoreSellDialog, dstBeing->getId(), storeId); dialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY)); const Inventory *const inv = PlayerInfo::getInventory(); for (int f = 0; f < count; f ++) { const int price = msg.readInt32("price"); const int amount = msg.readInt16("amount"); const ItemTypeT itemType = static_cast<ItemTypeT>( msg.readUInt8("item type")); const int itemId = msg.readInt16("item id"); if (!inv) continue; const Item *const item = inv->findItem(itemId, ItemColor_one); if (!item) continue; // +++ need add colors support dialog->addItem(itemId, itemType, ItemColor_one, amount, price); } }
void BattleGroundRecv::processBattleEmblem(Net::MessageIn &msg) { UNIMPLEMENTEDPACKET; msg.readBeingId("account id"); msg.readString(24, "name"); msg.readInt16("bg id"); }
void ItemRecv::processItemDropped2(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("id"); const int itemId = msg.readInt16("item id"); const ItemTypeT itemType = static_cast<ItemTypeT>(msg.readUInt8("type")); const Identified identified = fromInt( msg.readUInt8("identify"), Identified); const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged); const uint8_t refine = msg.readUInt8("refine"); int cards[maxCards]; for (int f = 0; f < maxCards; f++) cards[f] = msg.readInt16("card"); 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")); if (actorManager) { actorManager->createItem(id, itemId, x, y, itemType, amount, refine, ItemColorManager::getColorFromCards(&cards[0]), identified, damaged, subX, subY, &cards[0]); } }
void VendingHandler::processItemsList(Net::MessageIn &msg) { const int count = (msg.readInt16("len") - 12) / 22; const BeingId id = msg.readBeingId("id"); Being *const being = actorManager->findBeing(id); if (!being) return; int cards[4]; CREATEWIDGETV(mBuyDialog, BuyDialog, being->getName()); mBuyDialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY)); msg.readInt32("vender id"); for (int f = 0; f < count; f ++) { const int value = msg.readInt32("price"); const int amount = msg.readInt16("amount"); const int index = msg.readInt16("inv index"); const int type = msg.readUInt8("item type"); const int itemId = msg.readInt16("item id"); msg.readUInt8("identify"); msg.readUInt8("attribute"); msg.readUInt8("refine"); for (int d = 0; d < 4; d ++) cards[d] = msg.readInt16("card"); const ItemColor color = ItemColorManager::getColorFromCards(&cards[0]); ShopItem *const item = mBuyDialog->addItem(itemId, type, color, amount, value); if (item) item->setInvIndex(index); } mBuyDialog->sort(); }
void BuySellRecv::processNpcBuySellChoice(Net::MessageIn &msg) { if (!BuySellDialog::isActive()) { mNpcId = msg.readBeingId("npc id"); CREATEWIDGET(BuySellDialog, mNpcId); } }
void BuyingStoreRecv::processBuyingStoreShowBoard(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("owner id"); const std::string shopName = msg.readString(80, "shop name"); Being *const dstBeing = actorManager->findBeing(id); if (dstBeing) dstBeing->setBuyBoard(shopName); }
void VendingHandler::processShowBoard(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("owner id"); const std::string shopName = msg.readString(80, "shop name"); Being *const dstBeing = actorManager->findBeing(id); if (dstBeing) dstBeing->setSellBoard(shopName); }
void BattleGroundRecv::processBattleUpdateCoords(Net::MessageIn &msg) { UNIMPLEMENTEDPACKET; msg.readBeingId("account id"); msg.readString(24, "name"); msg.readInt16("class"); msg.readInt16("x"); msg.readInt16("y"); }
void PlayerHandler::processPvpInfo(Net::MessageIn &msg) { UNIMPLIMENTEDPACKET; msg.readInt32("char id"); msg.readBeingId("account id"); msg.readInt32("pvp won"); msg.readInt32("pvp lost"); msg.readInt32("pvp point"); }
void SkillRecv::processSkillScale(Net::MessageIn &msg) { msg.readBeingId("being id"); msg.readInt16("skill id"); msg.readInt16("skill level"); msg.readInt16("x"); msg.readInt16("y"); msg.readInt32("cast time"); }
void SkillRecv::processSkillDevotionEffect(Net::MessageIn &msg) { UNIMPLEMENTEDPACKET; msg.readBeingId("being id"); for (int f = 0; f < 5; f ++) msg.readInt32("devotee id"); msg.readInt16("range"); }
void NpcHandler::processArea(Net::MessageIn &msg) { const int len = msg.readInt16("len"); if (len < 12) return; Being *const dstBeing = actorManager->findBeing( msg.readBeingId("npc id")); const int area = msg.readInt32("area size"); if (dstBeing) dstBeing->setAreaSize(area); }
void BattleGroundRecv::processBattleEmblem2(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("account id"); msg.readString(24, "name"); msg.readInt16("bg id"); const int teamId = msg.readInt16("team id"); Being *const dstBeing = actorManager->findBeing(id); if (dstBeing) dstBeing->setTeamId(CAST_U16(teamId)); }
void ItemHandler::processItemRemove(Net::MessageIn &msg) { if (actorManager) { if (FloorItem *const item = actorManager ->findItem(msg.readBeingId("floor item id"))) { actorManager->destroy(item); } } }
void VendingHandler::processHideBoard(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("owner id"); Being *const dstBeing = actorManager->findBeing(id); if (dstBeing) dstBeing->setSellBoard(std::string()); if (dstBeing == localPlayer) { PlayerInfo::enableVending(false); VendingModeListener::distributeEvent(false); } }
void PartyRecv::processPartyMemberInfo(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("account id"); if (msg.getVersion() >= 20171207) msg.readBeingId("char id"); const bool leader = msg.readInt32("leader") == 0U; int level = 0; if (msg.getVersionMain() >= 20170524 || msg.getVersionRe() >= 20170502 || packets_zero == true) { 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)"); if (Ea::taParty == nullptr) return; PartyMember *const member = Ea::taParty->addMember(id, nick); if (member != nullptr) { if ((partyTab != nullptr) && member->getOnline() != online) partyTab->showOnline(nick, fromBool(online, Online)); member->setLeader(leader); member->setOnline(online); member->setMap(map); member->setX(x); member->setY(y); if (level != 0) member->setLevel(level); } }
void GuildRecv::processGuildMemberPosChange(Net::MessageIn &msg) { msg.readInt16("len"); const BeingId accountId = msg.readBeingId("account id"); const int charId = msg.readInt32("char id"); const int pos = msg.readInt32("position"); if (taGuild != nullptr) { GuildMember *const m = taGuild->getMember(accountId, charId); if (m != nullptr) m->setPos(pos); } }
BeingId NpcHandler::getNpc(Net::MessageIn &msg) { if (msg.getId() == SMSG_NPC_CHOICE || msg.getId() == SMSG_NPC_MESSAGE || msg.getId() == SMSG_NPC_CHANGETITLE) { msg.readInt16("len"); } const BeingId npcId = msg.readBeingId("npc id"); const NpcDialogs::const_iterator diag = NpcDialog::mNpcDialogs.find(npcId); mDialog = nullptr; if (msg.getId() == SMSG_NPC_VIEWPOINT) return npcId; if (diag == NpcDialog::mNpcDialogs.end()) { // Empty dialogs don't help if (msg.getId() == SMSG_NPC_CLOSE) { closeDialog(npcId); return npcId; } else if (msg.getId() == SMSG_NPC_NEXT) { nextDialog(npcId); return npcId; } else { CREATEWIDGETV(mDialog, NpcDialog, npcId); mDialog->saveCamera(); if (localPlayer) localPlayer->stopWalking(false); NpcDialog::mNpcDialogs[npcId] = mDialog; } } else { NpcDialog *const dialog = diag->second; if (mDialog && mDialog != dialog) mDialog->restoreCamera(); mDialog = dialog; if (mDialog) mDialog->saveCamera(); } return npcId; }
void BuyingStoreRecv::processBuyingStoreOwnItems(Net::MessageIn &msg) { const int count = (msg.readInt16("len") - 12) / 9; msg.readBeingId("account id"); msg.readInt32("money limit"); for (int f = 0; f < count; f ++) { msg.readInt32("price"); msg.readInt16("amount"); msg.readUInt8("item type"); msg.readInt16("item id"); } PlayerInfo::enableVending(true); BuyingStoreModeListener::distributeEvent(true); }
void PartyHandler::processPartyLeave(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("account id"); const std::string nick = msg.readString(24, "nick"); const int reason = msg.readUInt8("flag"); if (!localPlayer) return; if (id == localPlayer->getId()) { switch (reason) { case 0: default: NotifyManager::notify(NotifyTypes::PARTY_LEFT); break; case 1: NotifyManager::notify(NotifyTypes::PARTY_KICKED); break; case 2: NotifyManager::notify(NotifyTypes::PARTY_LEFT_DENY); break; case 3: NotifyManager::notify(NotifyTypes::PARTY_KICK_DENY); break; } if (reason >= 2) return; if (Ea::taParty) { Ea::taParty->removeFromMembers(); Ea::taParty->clearMembers(); } delete2(partyTab) if (socialWindow && Ea::taParty) socialWindow->removeTab(Ea::taParty); localPlayer->setPartyName(""); } else { switch (reason)
void BattleGroundRecv::processBattleUpdateHp(Net::MessageIn &msg) { UNIMPLEMENTEDPACKET; msg.readBeingId("account id"); if (msg.getVersion() >= 20140613) { msg.readInt32("hp"); msg.readInt32("max hp"); } else { msg.readString(24, "name"); msg.readInt16("hp"); msg.readInt16("max hp"); } }
void PartyRecv::processPartyUpdateCoords(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("account id"); PartyMember *m = nullptr; if (Ea::taParty != nullptr) m = Ea::taParty->getMember(id); if (m != nullptr) { m->setX(msg.readInt16("x")); m->setY(msg.readInt16("y")); } else { msg.readInt16("x"); msg.readInt16("y"); } }
void ItemHandler::processItemVisible(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("item object id"); const int itemId = msg.readInt16("item id"); const uint8_t identify = msg.readUInt8("identify"); const int x = msg.readInt16("x"); const int y = msg.readInt16("y"); const int amount = msg.readInt16("amount"); const int subX = static_cast<int>(msg.readInt8("sub x")); const int subY = static_cast<int>(msg.readInt8("sub y")); if (actorManager) { actorManager->createItem(id, itemId, x, y, amount, identify, subX, subY); } }
void PlayerHandler::processPlayerGetExp(Net::MessageIn &msg) { if (!localPlayer) return; 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"); if (!fromQuest && id == localPlayer->getId()) { if (stat == 1) localPlayer->addXpMessage(exp); else if (stat == 2) localPlayer->addJobMessage(exp); else UNIMPLIMENTEDPACKET; } // need show particle depend on isQuest flag, for now ignored }
void PartyRecv::processPartyMemberJobLevel(Net::MessageIn &msg) { const BeingId id = msg.readBeingId("account id"); msg.readInt16("class"); const int level = msg.readInt16("level"); if (Ea::taParty == nullptr) return; PartyMember *const member = Ea::taParty->getMember(id); if (member != nullptr) { member->setOnline(true); if (level != 0) member->setLevel(level); } else { reportAlways("processPartyMemberJobLevel: party member not exists.") } }
void GuildRecv::processGuildBasicInfo(Net::MessageIn &msg) { 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"); msg.skip(12, "unused"); const int emblem = msg.readInt32("emblem id"); std::string name = msg.readString(24, "guild name"); std::string castle; std::string master; if (msg.getVersion() >= 20160622) { castle = msg.readString(16, "castles"); msg.readInt32("money, unused"); msg.readBeingId("leader char id"); } else { master = msg.readString(24, "master name"); castle = msg.readString(16, "castles"); msg.readInt32("money, unused"); } if (guildTab != nullptr && showBasicInfo) { showBasicInfo = false; // TRANSLATORS: guild info message guildTab->chatLog(strprintf(_("Guild name: %s"), name.c_str()), ChatMsgType::BY_SERVER, IgnoreRecord_false, TryRemoveColors_true); if (!master.empty()) { // TRANSLATORS: guild info message guildTab->chatLog(strprintf(_("Guild master: %s"), master.c_str()), ChatMsgType::BY_SERVER, IgnoreRecord_false, TryRemoveColors_true); } // TRANSLATORS: guild info message guildTab->chatLog(strprintf(_("Guild level: %d"), level), ChatMsgType::BY_SERVER, IgnoreRecord_false, TryRemoveColors_true); // TRANSLATORS: guild info message guildTab->chatLog(strprintf(_("Online members: %d"), members), ChatMsgType::BY_SERVER, IgnoreRecord_false, TryRemoveColors_true); // TRANSLATORS: guild info message guildTab->chatLog(strprintf(_("Max members: %d"), maxMembers), ChatMsgType::BY_SERVER, IgnoreRecord_false, TryRemoveColors_true); // TRANSLATORS: guild info message guildTab->chatLog(strprintf(_("Average level: %d"), avgLevel), ChatMsgType::BY_SERVER, IgnoreRecord_false, TryRemoveColors_true); // TRANSLATORS: guild info message guildTab->chatLog(strprintf(_("Guild exp: %d"), exp), ChatMsgType::BY_SERVER, IgnoreRecord_false, TryRemoveColors_true); // TRANSLATORS: guild info message guildTab->chatLog(strprintf(_("Guild next exp: %d"), nextExp), ChatMsgType::BY_SERVER, IgnoreRecord_false, TryRemoveColors_true); // TRANSLATORS: guild info message guildTab->chatLog(strprintf(_("Guild castle: %s"), castle.c_str()), ChatMsgType::BY_SERVER, IgnoreRecord_false, TryRemoveColors_true); } Guild *const g = Guild::getGuild(CAST_S16(guildId)); if (g == nullptr) return; g->setName(name); g->setEmblemId(emblem); }