void PartyHandler::processPartyMove(Net::MessageIn &msg) { int id = msg.readInt32(); // id PartyMember *m = nullptr; if (Ea::taParty) m = Ea::taParty->getMember(id); if (m) { msg.skip(4); // 0 m->setX(msg.readInt16()); // x m->setY(msg.readInt16()); // y m->setOnline(msg.readInt8()); // online (if 0) msg.readString(24); // party msg.readString(24); // nick m->setMap(msg.readString(16)); // map } else { msg.skip(4); // 0 msg.readInt16(); // x msg.readInt16(); // y msg.readInt8(); // online (if 0) msg.readString(24); // party msg.readString(24); // nick msg.readString(16); // map } }
void PartyHandler::processPartyInfo(Net::MessageIn &msg) { bool oldParty = false; std::set<std::string> names; if (!Ea::taParty) { logger->log1("error: party empty in SMSG_PARTY_INFO"); Ea::taParty = Party::getParty(1); } if (Ea::taParty) { if (Ea::taParty->getNumberOfElements() > 1) { oldParty = true; Ea::taParty->getNamesSet(names); } } if (!player_node) logger->log1("error: player_node==0 in SMSG_PARTY_INFO"); if (Ea::taParty) Ea::taParty->clearMembers(); int length = msg.readInt16(); if (Ea::taParty) Ea::taParty->setName(msg.readString(24)); int count = (length - 28) / 46; if (player_node && Ea::taParty) { player_node->setParty(Ea::taParty); player_node->setPartyName(Ea::taParty->getName()); } for (int i = 0; i < count; i++) { int id = msg.readInt32(); std::string nick = msg.readString(24); std::string map = msg.readString(16); bool leader = msg.readInt8() == 0; bool online = msg.readInt8() == 0; if (Ea::taParty) { PartyMember *member = nullptr; if (oldParty) { //member = Ea::taParty->getMember(id); if (Ea::partyTab && names.find(nick) == names.end()) { Ea::partyTab->chatLog(strprintf( _("%s has joined your party."), nick.c_str()), BY_SERVER); } } member = Ea::taParty->addMember(id, nick); if (member) { member->setLeader(leader); member->setOnline(online); member->setMap(map); } } } if (Ea::taParty) Ea::taParty->sort(); if (player_node && Ea::taParty) { player_node->setParty(Ea::taParty); player_node->setPartyName(Ea::taParty->getName()); } }