private void setStat(MapleCharacter player, int current, int amount) { switch (stat) { case STR: player.getStat().setStr((short) (current + amount), player); player.updateSingleStat(MapleStat.STR, player.getStat().getStr()); break; case DEX: player.getStat().setDex((short) (current + amount), player); player.updateSingleStat(MapleStat.DEX, player.getStat().getDex()); break; case INT: player.getStat().setInt((short) (current + amount), player); player.updateSingleStat(MapleStat.INT, player.getStat().getInt()); break; case LUK: player.getStat().setLuk((short) (current + amount), player); player.updateSingleStat(MapleStat.LUK, player.getStat().getLuk()); break; case MAXHP: long maxhp = Math.min(500000, Math.abs(current + amount * 30)); // player.getStat().setMaxHp((short) (current + amount * 30), player); player.getStat().setMaxHp((short) maxhp, player); player.updateSingleStat(MapleStat.HP, player.getStat().getHp()); break; case MAXMP: long maxmp = Math.min(500000, Math.abs(current + amount)); player.getStat().setMaxMp((short) maxmp, player); player.updateSingleStat(MapleStat.MP, player.getStat().getMp()); break; case HAIR: int hair = amount; player.setSecondHair(hair); player.updateSingleStat(MapleStat.HAIR, player.getSecondHair()); break; } }
private static void monsterBomb( MapleCharacter player, MapleCharacter attackedPlayers, MapleMap map, AbstractDealDamageHandler.AttackInfo attack) { // level balances if (attackedPlayers.getLevel() > player.getLevel() + 25) { pvpDamage *= 1.35; } else if (attackedPlayers.getLevel() < player.getLevel() - 25) { pvpDamage /= 1.35; } else if (attackedPlayers.getLevel() > player.getLevel() + 100) { pvpDamage *= 1.50; } else if (attackedPlayers.getLevel() < player.getLevel() - 100) { pvpDamage /= 1.50; } // class balances if (player.getJob().equals(MapleJob.MAGICIAN)) { pvpDamage *= 1.20; } // buff modifiers Integer mguard = attackedPlayers.getBuffedValue(MapleBuffStat.MAGIC_GUARD); Integer mesoguard = attackedPlayers.getBuffedValue(MapleBuffStat.MESOGUARD); if (mguard != null) { int mploss = (int) (pvpDamage / .5); pvpDamage *= .70; if (mploss > attackedPlayers.getMp()) { pvpDamage /= .70; attackedPlayers.cancelBuffStats(MapleBuffStat.MAGIC_GUARD); } else { attackedPlayers.setMp(attackedPlayers.getMp() - mploss); attackedPlayers.updateSingleStat(MapleStat.MP, attackedPlayers.getMp()); } } else if (mesoguard != null) { int mesoloss = (int) (pvpDamage * .75); pvpDamage *= .75; if (mesoloss > attackedPlayers.getMeso()) { pvpDamage /= .75; attackedPlayers.cancelBuffStats(MapleBuffStat.MESOGUARD); } else { attackedPlayers.gainMeso(-mesoloss, false); } } // set up us teh bonmb // training thingy = 9409000 MapleMonster pvpMob = MapleLifeFactory.getMonster(9400711); map.spawnMonsterOnGroundBelow(pvpMob, attackedPlayers.getPosition()); for (int attacks = 0; attacks < attack.numDamage; attacks++) { map.broadcastMessage( MaplePacketCreator.damagePlayer( attack.numDamage, pvpMob.getId(), attackedPlayers.getId(), pvpDamage)); attackedPlayers.addHP(-pvpDamage); } int attackedDamage = pvpDamage * attack.numDamage; attackedPlayers .getClient() .getSession() .write( MaplePacketCreator.serverNotice( 5, player.getName() + " has hit you for " + attackedDamage + " damage!")); map.killMonster(pvpMob, player, false); // rewards if (attackedPlayers.getHp() <= 0 && !attackedPlayers.isAlive()) { int expReward = attackedPlayers.getLevel() * 100; if (player.getPvpKills() * .25 >= player.getPvpDeaths()) { expReward *= 20; } player.gainExp(expReward, true, false); player.gainPvpKill(); player .getClient() .getSession() .write( MaplePacketCreator.serverNotice( 6, "You've killed " + attackedPlayers.getName() + "!! You've gained a pvp kill!")); attackedPlayers.gainPvpDeath(); attackedPlayers .getClient() .getSession() .write(MaplePacketCreator.serverNotice(6, player.getName() + " has killed you!")); attackedPlayers.setHp(0); attackedPlayers.updateSingleStat(MapleStat.HP, 0); } }