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 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); } }