public static byte[] showBossHP(MapleMonster mob) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.BOSS_ENV.getValue()); mplew.write(6); mplew.writeInt(mob.getId() == 9400589 ? 9300184 : mob.getId()); if (mob.getHp() > 2147483647L) { mplew.writeInt((int) (mob.getHp() / mob.getMobMaxHp() * 2147483647.0D)); } else { mplew.writeInt((int) mob.getHp()); } if (mob.getMobMaxHp() > 2147483647L) { mplew.writeInt(2147483647); } else { mplew.writeInt((int) mob.getMobMaxHp()); } mplew.write(mob.getStats().getTagColor()); mplew.write(mob.getStats().getTagBgColor()); return mplew.getPacket(); }
public static byte[] controlMonster(MapleMonster life, boolean newSpawn, boolean aggro) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.SPAWN_MONSTER_CONTROL.getValue()); mplew.write(aggro ? 2 : 1); mplew.writeInt(life.getObjectId()); mplew.writeInt(life.getId()); mplew.writePos(life.getTruePosition()); mplew.write(2); mplew.writeShort(life.getFh()); mplew.write(life.getStance()); mplew.write(newSpawn ? -2 : life.isFake() ? -4 : -1); mplew.write(0); mplew.writeLong(0); return mplew.getPacket(); }
/** * 召唤怪物 * * @param life * @param spawnType * @param link * @return */ public static byte[] spawnMonster(MapleMonster life, int spawnType, int link) { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.write(SendPacketOpcode.SPAWN_MONSTER.getValue()); mplew.writeInt(life.getObjectId()); mplew.writeInt(life.getId()); mplew.writePos(life.getTruePosition()); mplew.write((life.getController() != null ? 0x08 : 0x02)); mplew.writeShort(life.getFh()); mplew.write(life.getStance()); // if (effect > 0) { // mplew.write(effect); // mplew.writeInt(life.getObjectId()); // } mplew.write(spawnType); mplew.write(1); // 召唤的时候特效,在wz中有对应的值 mplew.writeLong(0); return mplew.getPacket(); }
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); } }