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 MapEventHero::Activate() { PartyMember* p = CharacterClass::GetRandomCharacterClass()->GetNewPartyMember(); p->SetTeamId(0); Party* party = GameController::getInstance()->getParty(); p->AddExp(party->GetActivePartyMembers()->at(0)->GetExp()); p->GetStartingSkills(p->GetLevel() - 1); party->AddPartyMember(p); m_finished = true; m_node->GetParent()->removeChild(m_node); delete m_node; }
void PartyHandler::processPartyUpdateCoords(Net::MessageIn &msg) { int id = msg.readInt32(); // id PartyMember *m = nullptr; if (Ea::taParty) m = Ea::taParty->getMember(id); if (m) { m->setX(msg.readInt16()); // x m->setY(msg.readInt16()); // y } else { msg.readInt16(); // x msg.readInt16(); // y } }
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"); } }
PartyMember* ActiveParty :: GetNextLooter() { for(int i = 0 ; i < mMemberList.size(); i++) { if(mNextToGetLoot >= mMemberList.size()) { mNextToGetLoot = 0; } if(mNextToGetLoot >= mMemberList.size()) { return NULL; } mNextToGetLoot++; PartyMember* m = &mMemberList[mNextToGetLoot - 1]; if(m->IsOnlineAndValid()) return m; g_Logs.server->info("%v (%v) is next in round robin, but they no longer have a simulator", m->mCreatureID, m->mDisplayName); } return NULL; }
void PartyHandler::processPartyUpdateHp(Net::MessageIn &msg) { int id = msg.readInt32(); int hp = msg.readInt16(); int maxhp = msg.readInt16(); PartyMember *m = nullptr; if (Ea::taParty) m = Ea::taParty->getMember(id); if (m) { m->setHp(hp); m->setMaxHp(maxhp); } // The server only sends this when the member is in range, so // lets make sure they get the party hilight. if (actorSpriteManager && Ea::taParty) { if (Being *b = actorSpriteManager->findBeing(id)) b->setParty(Ea::taParty); } }
void PartyHandler::processPartyMessage(Net::MessageIn &msg) { int msgLength = msg.readInt16() - 8; if (msgLength <= 0) return; int id = msg.readInt32(); std::string chatMsg = msg.readString(msgLength); if (Ea::taParty && Ea::partyTab) { PartyMember *member = Ea::taParty->getMember(id); if (member) { Ea::partyTab->chatLog(member->getName(), chatMsg); } else { Ea::partyTab->chatLog(strprintf( _("An unknown member tried to say: %s"), chatMsg.c_str()), BY_SERVER); } } }
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()); } }
void PlayerHandler::processPlayerStatUpdate1(Net::MessageIn &msg) { int type = msg.readInt16(); int value = msg.readInt32(); if (!player_node) return; switch (type) { case 0x0000: player_node->setWalkSpeed(Vector(static_cast<float>( value), static_cast<float>(value), 0)); PlayerInfo::setStatBase(WALK_SPEED, value); PlayerInfo::setStatMod(WALK_SPEED, 0); break; case 0x0004: break; // manner case 0x0005: PlayerInfo::setAttribute(HP, value); if (player_node->isInParty() && Party::getParty(1)) { PartyMember *m = Party::getParty(1) ->getMember(player_node->getId()); if (m) { m->setHp(value); m->setMaxHp(PlayerInfo::getAttribute(MAX_HP)); } } break; case 0x0006: PlayerInfo::setAttribute(MAX_HP, value); if (player_node->isInParty() && Party::getParty(1)) { PartyMember *m = Party::getParty(1)->getMember( player_node->getId()); if (m) { m->setHp(PlayerInfo::getAttribute(HP)); m->setMaxHp(value); } } break; case 0x0007: PlayerInfo::setAttribute(MP, value); break; case 0x0008: PlayerInfo::setAttribute(MAX_MP, value); break; case 0x0009: PlayerInfo::setAttribute(CHAR_POINTS, value); break; case 0x000b: PlayerInfo::setAttribute(LEVEL, value); if (player_node) { player_node->setLevel(value); player_node->updateName(); } break; case 0x000c: PlayerInfo::setAttribute(SKILL_POINTS, value); if (skillDialog) skillDialog->update(); break; case 0x0018: if (!weightNotice) { const int max = PlayerInfo::getAttribute(MAX_WEIGHT) / 2; const int total = PlayerInfo::getAttribute(TOTAL_WEIGHT); if (value >= max && total < max) { weightNoticeTime = cur_time + 5; weightNotice = new OkDialog(_("Message"), _("You are carrying more than " "half your weight. You are " "unable to regain health."), DIALOG_OK, false); weightNotice->addActionListener( &weightListener); } else if (value < max && total >= max) { weightNoticeTime = cur_time + 5; weightNotice = new OkDialog(_("Message"), _("You are carrying less than " "half your weight. You " "can regain health."), DIALOG_OK, false); weightNotice->addActionListener( &weightListener); } } PlayerInfo::setAttribute(TOTAL_WEIGHT, value); break; case 0x0019: PlayerInfo::setAttribute(MAX_WEIGHT, value); break; case 0x0029: PlayerInfo::setStatBase(EA_ATK, value); PlayerInfo::updateAttrs(); break; case 0x002a: PlayerInfo::setStatMod(EA_ATK, value); PlayerInfo::updateAttrs(); break; case 0x002b: PlayerInfo::setStatBase(EA_MATK, value); break; case 0x002c: PlayerInfo::setStatMod(EA_MATK, value); break; case 0x002d: PlayerInfo::setStatBase(EA_DEF, value); break; case 0x002e: PlayerInfo::setStatMod(EA_DEF, value); break; case 0x002f: PlayerInfo::setStatBase(EA_MDEF, value); break; case 0x0030: PlayerInfo::setStatMod(EA_MDEF, value); break; case 0x0031: PlayerInfo::setStatBase(EA_HIT, value); break; case 0x0032: PlayerInfo::setStatBase(EA_FLEE, value); break; case 0x0033: PlayerInfo::setStatMod(EA_FLEE, value); break; case 0x0034: PlayerInfo::setStatBase(EA_CRIT, value); break; case 0x0035: player_node->setAttackSpeed(value); PlayerInfo::setStatBase(ATTACK_DELAY, value); PlayerInfo::setStatMod(ATTACK_DELAY, 0); PlayerInfo::updateAttrs(); break; case 0x0037: PlayerInfo::setStatBase(EA_JOB, value); break; case 500: player_node->setGMLevel(value); break; default: logger->log("QQQQ PLAYER_STAT_UPDATE_1 " + toString(type) + "," + toString(value)); break; } if (PlayerInfo::getAttribute(HP) == 0 && !deathNotice) { deathNotice = new OkDialog(_("Message"), randomDeathMessage(), DIALOG_OK, false); deathNotice->addActionListener(&deathListener); player_node->setAction(Being::DEAD); } }