So setting up pvp based on weapon attack and stats, now the damage dealt to players in pvp is too much.
Current maplepvp.java
maplecharacter>calclateminbasedamage
old maplepvp.java
So what should I change?, pvpdamage = and mindamage = ?
Current maplepvp.java
Code:
package net.sf.odinms.net.channel.handler;
import java.util.Collections;
import net.sf.odinms.client.ISkill;
import net.sf.odinms.client.MapleCharacter;
import net.sf.odinms.client.SkillFactory;
import net.sf.odinms.server.life.MapleMonster;
import net.sf.odinms.server.life.MapleLifeFactory;
import net.sf.odinms.net.world.guild.MapleGuild;
import net.sf.odinms.client.MapleBuffStat;
import net.sf.odinms.server.maps.MapleMap;
import net.sf.odinms.tools.MaplePacketCreator;
public class MaplePvp {
//default values, don't change these
private static int pvpDamage;
private static int min;
private static int maxDis;
private static int matk;
private static int watk;
private static int luk;
private static int maxHeight;
private static boolean isAoe;
public static boolean isLeft = false;
public static boolean isRight = false;
private static boolean magic = false;
private static boolean magicrecovery = false;
private static boolean magicguard = false;
private static boolean mesguard = false;
private static double multi = 0;
private static double mastery = 0;
private static int skill = 0;
private static ISkill skil;
private static boolean ignore = false;
private static int attackedDamage = 0;
private static MapleMonster pvpMob;
private static Integer combo;
private static void pvpDamageBalance(AbstractDealDamageHandler.AttackInfo attack, MapleCharacter player) {
matk = player.getTotalMagic();
luk = player.getTotalLuk();
watk = player.getTotalWatk();
matk = player.getTotalMagic();
switch (attack.skill) {
case 0: //normal attack
multi = 1;
maxHeight = 35;
isAoe = false;
break;
case 1001004: //Power Strike
skil = SkillFactory.getSkill(1001004);
multi = skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0;
maxHeight = 35;
isAoe = false;
break;
case 1001005: //Slash Blast
skil = SkillFactory.getSkill(1001005);
multi = skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0;
maxHeight = 35;
isAoe = false;
break;
case 2001004: //Energy Bolt
skil = SkillFactory.getSkill(2001004);
multi = skil.getEffect(player.getSkillLevel(skil)).getMatk();
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 200;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 2001005: //Magic Claw
skil = SkillFactory.getSkill(2001005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 3001004: //Arrow Blow
skil = SkillFactory.getSkill(3001004);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 3001005: //Double Shot
skil = SkillFactory.getSkill(3001005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 4001334: //Double Stab
skil = SkillFactory.getSkill(4001334);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 4001344: //Lucky Seven
skil = SkillFactory.getSkill(4001344);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
pvpDamage = (int)(5 * luk / 100 * watk * multi);
min = (int)(2.5 * luk / 100 * watk * multi);
pvpDamage = player.rand(min, pvpDamage);
maxHeight = 35;
isAoe = false;
ignore = true;
break;
case 2101004: //Fire Arrow
skil = SkillFactory.getSkill(4101004);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 400;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 2101005: //Poison Brace
skil = SkillFactory.getSkill(2101005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 400;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 2201004: //Cold Beam
skil = SkillFactory.getSkill(2201004);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 300;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 2301005: //Holy Arrow
skil = SkillFactory.getSkill(2301005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 300;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 4101005: //Drain
skil = SkillFactory.getSkill(4101005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 4201005: //Savage Blow
skil = SkillFactory.getSkill(4201005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1111004: //Panic: Axe
skil = SkillFactory.getSkill(1111004);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1111003: //Panic: Sword
skil = SkillFactory.getSkill(1111003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1311004: //Dragon Fury: Pole Arm
skil = SkillFactory.getSkill(1311004);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1311003: //Dragon Fury: Spear
skil = SkillFactory.getSkill(1311003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1311002: //Pole Arm Crusher
skil = SkillFactory.getSkill(1311002);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1311005: //Sacrifice
skil = SkillFactory.getSkill(1311005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1311001: //Spear Crusher
skil = SkillFactory.getSkill(1311001);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 2211002: //Ice Strike
skil = SkillFactory.getSkill(2211002);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 250;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 2211003: //Thunder Spear
skil = SkillFactory.getSkill(2211003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 300;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 3111006: //Strafe
skil = SkillFactory.getSkill(3111006);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 3211006: //Strafe
skil = SkillFactory.getSkill(3211006);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 4111005: //Avenger
skil = SkillFactory.getSkill(4111005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 4211002: //Assaulter
skil = SkillFactory.getSkill(4211002);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxDis = 200;
maxHeight = 35;
isAoe = false;
break;
case 1121008: //Brandish
skil = SkillFactory.getSkill(1121008);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1121006: //Rush
skil = SkillFactory.getSkill(1121006);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1221009: //Blast
skil = SkillFactory.getSkill(1221009);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1221007: //Rush
skil = SkillFactory.getSkill(1221007);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 1321003: //Rush
skil = SkillFactory.getSkill(1321003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 2121003: //Fire Demon
skil = SkillFactory.getSkill(2121003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 400;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 2221006: //Chain Lightning
skil = SkillFactory.getSkill(2221006);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 400;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 2221003: //Ice Demon
skil = SkillFactory.getSkill(2221003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 400;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 2321007: //Angel's Ray
skil = SkillFactory.getSkill(2321007);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 400;
maxHeight = 35;
isAoe = false;
magic = true;
break;
case 3121003: //Dragon Pulse
skil = SkillFactory.getSkill(3121003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 3121004: //Hurricane
skil = SkillFactory.getSkill(3121004);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 3221003: //Dragon Pulse
skil = SkillFactory.getSkill(3221003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 3221001: //Piercing
skil = SkillFactory.getSkill(3221003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 3221007: //Sniping
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * 3);
min = (int) (player.calculateMinBaseDamage(player) * 3);
pvpDamage = player.rand(min, pvpDamage);
maxHeight = 35;
isAoe = false;
ignore = true;
break;
case 4121003: //Showdown taunt
skil = SkillFactory.getSkill(4121003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 4121007: //Triple Throw
skil = SkillFactory.getSkill(4121007);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 4221007: //Boomerang Step
skil = SkillFactory.getSkill(4221007);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
case 4221003: //Showdown taunt
skil = SkillFactory.getSkill(4221003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = false;
break;
//aoe
case 2201005: //Thunderbolt
skil = SkillFactory.getSkill(2201005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 250;
maxHeight = 250;
isAoe = true;
magic = true;
break;
case 3101005: //Arrow Bomb : Bow
skil = SkillFactory.getSkill(3101005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 250;
isAoe = true;
break;
case 3201005: //Iron Arrow : Crossbow
skil = SkillFactory.getSkill(3201005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = true;
break;
case 1111006: //Coma: Axe
skil = SkillFactory.getSkill(1111006);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 250;
isAoe = true;
break;
case 1111005: //Coma: Sword
skil = SkillFactory.getSkill(1111005);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 250;
isAoe = true;
break;
case 1211002: //Charged Blow - skill doesn't work
skil = SkillFactory.getSkill(1211002);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 250;
isAoe = true;
break;
case 1311006: //Dragon Roar
skil = SkillFactory.getSkill(1311006);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxDis = 600;
maxHeight = 450;
isAoe = true;
break;
case 2111002: //Explosion
skil = SkillFactory.getSkill(2111002);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 350;
maxHeight = 350;
isAoe = true;
magic = true;
break;
case 2111003: //Poison Mist
skil = SkillFactory.getSkill(2111003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 350;
maxHeight = 350;
isAoe = true;
magic = true;
break;
case 2311004: //Shining Ray
skil = SkillFactory.getSkill(2311004);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 350;
maxHeight = 350;
isAoe = true;
magic = true;
break;
case 3111004: //Arrow Rain
skil = SkillFactory.getSkill(3111004);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxDis = 350;
maxHeight = 350;
isAoe = true;
break;
case 3111003: //Inferno
skil = SkillFactory.getSkill(3111003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxDis = 350;
maxHeight = 350;
isAoe = true;
break;
case 3211004: //Arrow Eruption
skil = SkillFactory.getSkill(3211004);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxDis = 350;
maxHeight = 350;
isAoe = true;
break;
case 3211003: //Blizzard (Sniper)
skil = SkillFactory.getSkill(3211003);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxDis = 350;
maxHeight = 350;
isAoe = true;
break;
case 4211004: //Band of Thieves Skill doesn't work so i don't know
skil = SkillFactory.getSkill(4211004);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 350;
isAoe = true;
break;
case 1221011: //Sanctuary Skill doesn't work so i don't know
skil = SkillFactory.getSkill(1221011);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxDis = 350;
maxHeight = 350;
isAoe = true;
break;
case 2121001: //Big Bang
skil = SkillFactory.getSkill(2121001);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 175;
maxHeight = 175;
isAoe = true;
magic = true;
break;
case 2121007: //Meteo
skil = SkillFactory.getSkill(2121007);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 600;
maxHeight = 600;
isAoe = true;
magic = true;
break;
case 2121006: //Paralyze
skil = SkillFactory.getSkill(2121006);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 250;
maxHeight = 250;
isAoe = true;
magic = true;
break;
case 2221001: //Big Bang
skil = SkillFactory.getSkill(2221001);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 175;
maxHeight = 175;
isAoe = true;
magic = true;
break;
case 2221007: //Blizzard
skil = SkillFactory.getSkill(2221007);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 600;
maxHeight = 600;
isAoe = true;
magic = true;
break;
case 2321008: //Genesis
skil = SkillFactory.getSkill(2321008);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 600;
maxHeight = 600;
isAoe = true;
magic = true;
break;
case 2321001: //bishop Big Bang
skil = SkillFactory.getSkill(2321001);
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 175;
maxHeight = 175;
isAoe = true;
magic = true;
break;
case 4121004: //Ninja Ambush
pvpDamage = (int) Math.floor(Math.random() * (180 - 150) + 150);
maxDis = 150;
maxHeight = 300;
isAoe = true;
ignore = true;
break;
case 4121008: //Ninja Storm knockback
skil = SkillFactory.getSkill(4121008);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
pvpDamage = (int) Math.floor(Math.random() * (player.calculateMaxBaseDamage(watk) * multi));
maxDis = 150;
maxHeight = 35;
isAoe = true;
ignore = true;
break;
case 4221001: //Assassinate
skil = SkillFactory.getSkill(4221001);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
maxHeight = 35;
isAoe = true;
break;
case 4221004: //Ninja Ambush
pvpDamage = (int) Math.floor(Math.random() * (180 - 150) + 150);
maxDis = 150;
maxHeight = 150;
isAoe = true;
ignore = true;
break;
default:
break;
}
if(!magic || !ignore) {
maxDis = player.getMaxDis(player);
}
}
private static void getDirection(AbstractDealDamageHandler.AttackInfo attack) {
if (isAoe) {
isRight = true;
isLeft = true;
} else if (attack.direction <= 0 && attack.stance <= 0) {
isRight = false;
isLeft = true;
} else {
isRight = true;
isLeft = false;
}
}
private static void monsterBomb(MapleCharacter player, MapleCharacter attackedPlayers, MapleMap map, AbstractDealDamageHandler.AttackInfo attack) {
for (int dmgpacket = 0; dmgpacket < attack.numDamage; dmgpacket++) {
if(!magic || !ignore) {
pvpDamage = (int) (player.getRandomage(player) * multi);
}
combo = player.getBuffedValue(MapleBuffStat.COMBO);
if(combo != null) {
//player.handleOrbgain();//comment out for now
skil = SkillFactory.getSkill(1120003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
pvpDamage *= multi;
}
else {
skil = SkillFactory.getSkill(1120003);
skill = player.getSkillLevel(skil);
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
pvpDamage *= multi;
}
}
//combo end
//summon check
//summon end
//damage balances
if (attackedPlayers.getLevel() < player.getLevel()) {
int difference = player.getLevel() - attackedPlayers.getLevel();
if(difference >= 5) {
pvpDamage /= player.getLevel() / 5;
}
}
if(!magic) {
pvpDamage -= (attackedPlayers.getTotalWdef() * 1.5);
} else {
pvpDamage -= (attackedPlayers.getTotalMdef() * 1.5);
}
if(pvpDamage < 0) {
pvpDamage = 1;
}
//damage balances end
//buff modifiers **magic guard and mesoguard**
Integer mguard = attackedPlayers.getBuffedValue(MapleBuffStat.MAGIC_GUARD);
Integer mesoguard = attackedPlayers.getBuffedValue(MapleBuffStat.MESOGUARD);
if (mguard != null) {
skil = SkillFactory.getSkill(2001002);
skill = attackedPlayers.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(attackedPlayers.getSkillLevel(skil)).getX() / 100.0);
}
int mg = (int) (pvpDamage * multi);
if(attackedPlayers.getMp() > mg) {
attackedPlayers.setMp(attackedPlayers.getMp() - mg);
pvpDamage -= mg;
}
else {
pvpDamage -= attackedPlayers.getMp();
attackedPlayers.setMp(0);
attackedPlayers.getClient().getSession().write(MaplePacketCreator.serverNotice(5,"Your MP has been drained."));
}
magicguard = true;
}
if (mesoguard != null) {
skil = SkillFactory.getSkill(4211005);
skill = attackedPlayers.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(attackedPlayers.getSkillLevel(skil)).getX() / 100.0);
}
int mg = (int) (pvpDamage * multi);
if(attackedPlayers.getMeso() > mg) {
attackedPlayers.gainMeso(-mg, false);
pvpDamage *= 0.5;
}
else {
attackedPlayers.getClient().getSession().write(MaplePacketCreator.serverNotice(5,"You do not have enough mesos to weaken the blow"));
}
mesguard = true;
}
//end of buffs
//passive skills
int y = 2;
int skillid;
int aPmp;
if(magic) {
for (int i = 0; i<y; i++) {
skillid = 100000 * i + 2000000;
skil = SkillFactory.getSkill(skillid);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getX() / 100.0);
if(skil.getEffect(player.getSkillLevel(skil)).makeChanceResult()) {
aPmp = (int) (multi * attackedPlayers.getMaxMp());
if (attackedPlayers.getMp() > aPmp) {
attackedPlayers.setMp(attackedPlayers.getMp() - aPmp);
player.setMp(player.getMp() + aPmp);
if (player.getMp() > player.getMaxMp()) {
player.setMp(player.getMaxMp());
}
}
else
{
player.setMp(player.getMp() + attackedPlayers.getMp());
if (player.getMp() > player.getMaxMp()) {
player.setMp(player.getMaxMp());
}
attackedPlayers.setMp(0);
}
}
}
}
magic = false;
magicrecovery = true;
}
//passive skills end
//skills effects
//skills effects end
//the bomb
pvpMob = MapleLifeFactory.getMonster(9400711);
map.spawnMonsterOnGroudBelow(pvpMob, attackedPlayers.getPosition());
player.getClient().getSession().write(player.makeHPBarPacket(attackedPlayers));
//map.broadcastMessage(player, player.showHPBarPacket(attackedPlayers), false);
//number of damage packets
map.broadcastMessage(player, MaplePacketCreator.damagePlayer(attack.numDamage, pvpMob.getId(), attackedPlayers.getId(), pvpDamage), false);
player.getClient().getSession().write(MaplePacketCreator.damagePlayer(attack.numDamage, pvpMob.getId(), attackedPlayers.getId(), pvpDamage));
attackedPlayers.addHP(-pvpDamage);
try{
Thread.sleep(200);
}
catch(Exception e)
{
}
attackedDamage += pvpDamage;
}
attackedPlayers.getClient().getSession().write(MaplePacketCreator.serverNotice(5, player.getName() + " has done " + attackedDamage + " damage to you!"));
if(attackedDamage > 0) {
combo = player.getBuffedValue(MapleBuffStat.COMBO);
if(combo != null) {
player.handleOrbgain();
}
}
attackedDamage = 0;
//map.broadcastMessage(player, player.showHPBarPacket(attackedPlayers), false);
player.getClient().getSession().write(player.makeHPBarPacket(attackedPlayers));
//announcements
if(magicguard) {
player.getClient().getSession().write(MaplePacketCreator.serverNotice(5, player.getName() + " has partially blocked your attack with magic guard!"));
magicguard = false;
}
if(mesguard) {
player.getClient().getSession().write(MaplePacketCreator.serverNotice(5, player.getName() + " has partially blocked your attack with mesoguard!"));
mesguard = false;
}
if(magicrecovery) {
attackedPlayers.getClient().getSession().write(MaplePacketCreator.serverNotice(5, player.getName() + " has partially absorbed your MP with MP Eater!"));
magicrecovery = false;
}
//announcements end
//rewards
if (attackedPlayers.getHp() <= 0 && !attackedPlayers.isAlive()) {
// exp bonuses
int expreward = attackedPlayers.getLevel() * 100;
player.setHp(player.getMaxHp());
player.setMp(player.getMaxMp());
if (player.getPvpKills() / 4 >= player.getPvpDeaths()) {
expreward *= 2;
}
//exp
if(attackedPlayers.getExp() > 0) {
expreward *= (attackedPlayers.getExp() / attackedPlayers.getLevel());
}
player.gainExp(expreward, true, false);
//guild points
if (player.getGuildId() != 0 && player.getGuildId() != attackedPlayers.getGuildId()) {
try {
MapleGuild guild = player.getClient().getChannelServer().getWorldInterface().getGuild(player.getGuildId(), null);
guild.gainGP(1);
} catch (Exception e) {}
}
if (attackedPlayers.getGuildId() != 0 && attackedPlayers.getGuildId() != player.getGuildId()) {
try {
MapleGuild guild = attackedPlayers.getClient().getChannelServer().getWorldInterface().getGuild(attackedPlayers.getGuildId(), null);
guild.gainGP(-1);
} catch (Exception e) {}
}
//guild points end
//pvpkills and deaths
player.gainPvpKill();
player.getClient().getSession().write(MaplePacketCreator.serverNotice(6, "You've killed " + attackedPlayers.getName() + "! You've gained a kill!"));
attackedPlayers.gainPvpDeath();
attackedPlayers.getClient().getSession().write(MaplePacketCreator.serverNotice(6, player.getName() + " has killed you!"));
//pvp end kills and deaths
attackedPlayers.gainExp(attackedPlayers.getExp() / -10, false, false);
if(attackedPlayers.getExp() < 0) {
attackedPlayers.gainExp(attackedPlayers.getExp() + attackedPlayers.getExp() * -1, true, false);
}
}
map.killMonster(pvpMob, player, false);
}
public static void doPvP(MapleCharacter player, MapleMap map, AbstractDealDamageHandler.AttackInfo attack) {
pvpDamageBalance(attack, player); //grab height/distance/damage/aoetrue\false
getDirection(attack);
for (MapleCharacter attackedPlayers : player.getMap().getNearestPvpChar(player.getPosition(), maxDis, maxHeight, Collections.unmodifiableCollection(player.getMap().getCharacters()))) {
if (attackedPlayers.isAlive() && (player.getParty() == null || player.getParty() != attackedPlayers.getParty())) {
monsterBomb(player, attackedPlayers, map, attack);
}
}
}
}
Code:
public int calculateMinBaseDamage (MapleCharacter player) {
int minbasedamage = 0;
int atk = player.getTotalWatk();
if (atk == 0) {
minbasedamage = 1;
} else {
IItem weapon_item = getInventory(MapleInventoryType.EQUIPPED).getItem((byte) - 11);
if( weapon_item != null) {
MapleWeaponType weapon = MapleItemInformationProvider.getInstance().getWeaponType(weapon_item.getItemId());
//mastery start
if (player.getJob().isA(MapleJob.FIGHTER)) {
skil = SkillFactory.getSkill(1100000);
skill = player.getSkillLevel(skil);
if(skill > 0){
sword = ((skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10) / 100);
}
else {
sword = 0.1;
}
}
else {
skil = SkillFactory.getSkill(1200000);
skill = player.getSkillLevel(skil);
if(skill > 0){
sword = ((skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10) / 100);
}
else {
sword = 0.1;
}
}
skil = SkillFactory.getSkill(1100001);
skill = player.getSkillLevel(skil);
if(skill > 0){
axe = ((skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10) / 100);
}
else {
axe = 0.1;
}
skil = SkillFactory.getSkill(1200001);
skill = player.getSkillLevel(skil);
if(skill > 0){
blunt = ((skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10) / 100);
}
else {
blunt = 0.1;
}
skil = SkillFactory.getSkill(1300000);
skill = player.getSkillLevel(skil);
if(skill > 0){
spear = ((skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10) / 100);
}
else {
spear = 0.1;
}
skil = SkillFactory.getSkill(1300001);
skill = player.getSkillLevel(skil);
if(skill > 0){
polearm = ((skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10) / 100);
}
else {
polearm = 0.1;
}
skil = SkillFactory.getSkill(3200000);
skill = player.getSkillLevel(skil);
if(skill > 0){
crossbow = ((skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10) / 100);
}
else {
crossbow = 0.1;
}
skil = SkillFactory.getSkill(3100000);
skill = player.getSkillLevel(skil);
if(skill > 0){
bow = ((skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10) / 100);
}
else {
bow = 0.1;
}
//end mastery
if (weapon == MapleWeaponType.CROSSBOW) {
minbasedamage = (int) (localdex * 0.9 * 3.6 * crossbow + localstr) / 100 * (atk + 15);
}
if (weapon == MapleWeaponType.BOW) {
minbasedamage = (int) (localdex * 0.9 * 3.4 * bow + localstr) / 100 * (atk + 15);
}
if (getJob().isA(MapleJob.THIEF) && (weapon == MapleWeaponType.DAGGER)) {
minbasedamage = (int) (localluk * 0.9 * 3.6 * dagger + localstr + localdex) / 100 * atk;
}
if (!getJob().isA(MapleJob.THIEF) && (weapon == MapleWeaponType.DAGGER)) {
minbasedamage = (int) (localstr * 0.9 * 4.0 * dagger + localdex) / 100 * atk;
}
if (getJob().isA(MapleJob.THIEF) && (weapon == MapleWeaponType.CLAW)) {
minbasedamage = (int) (localluk * 0.9 * 3.6 * claw + localstr + localdex) / 100 * (atk + 15);
}
if (weapon == MapleWeaponType.SPEAR) {
minbasedamage = (int) (localstr * 0.9 * 3.0 * spear + localdex) / 100 * atk;
}
if (weapon == MapleWeaponType.POLE_ARM) {
minbasedamage = (int) (localstr * 0.9 * 3.0 * polearm + localdex) / 100 * atk;
}
if (weapon == MapleWeaponType.SWORD1H) {
minbasedamage = (int) (localstr * 0.9 * 4.0 * sword + localdex) / 100 * atk;
}
if (weapon == MapleWeaponType.SWORD2H) {
minbasedamage = (int) (localstr * 0.9 * 4.6 * sword + localdex) / 100 * atk;
}
if (weapon == MapleWeaponType.AXE1H) {
minbasedamage = (int) (localstr * 0.9 * 3.2 * axe + localdex) / 100 * atk;
}
if (weapon == MapleWeaponType.BLUNT1H) {
minbasedamage = (int) (localstr * 0.9 * 3.2 * blunt + localdex) / 100 * atk;
}
if (weapon == MapleWeaponType.AXE2H) {
minbasedamage = (int) (localstr * 0.9 * 3.4 * axe + localdex) / 100 * atk;
}
if (weapon == MapleWeaponType.BLUNT2H) {
minbasedamage = (int) (localstr * 0.9 * 3.4 * blunt + localdex) / 100 * atk;
}
if (weapon == MapleWeaponType.STAFF || weapon == MapleWeaponType.WAND) {
minbasedamage = (int) (localstr * 0.9 * 3.0 * staffwand + localdex) / 100 * atk;
}
}
}
return minbasedamage;
}
old maplepvp.java
Code:
package net.sf.odinms.net.channel.pvp;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
import net.sf.odinms.client.MapleCharacter;
import net.sf.odinms.client.MapleBuffStat;
import net.sf.odinms.client.MapleStat;
import net.sf.odinms.client.MapleJob;
import net.sf.odinms.net.world.guild.MapleGuild;
import net.sf.odinms.net.channel.handler.AbstractDealDamageHandler;
import net.sf.odinms.server.life.MapleMonster;
import net.sf.odinms.server.life.MapleLifeFactory;
import net.sf.odinms.server.maps.MapleMap;
import net.sf.odinms.tools.MaplePacketCreator;
import net.sf.odinms.tools.Pair;
public class MaplePvp {
private static int pvpDamage;
private static int maxDis;
private static int maxHeight;
private static boolean isAoe = false;
public static boolean isLeft = false;
public static boolean isRight = false;
private static boolean isMeleeAttack(AbstractDealDamageHandler.AttackInfo attack) {
switch(attack.skill) {
case 1001004: //Power Strike
case 1001005: //Slash Blast
case 4001334: //Double Stab
case 4201005: //Savage Blow
case 1111004: //Panic: Axe
case 1111003: //Panic: Sword
case 1311004: //Dragon Fury: Pole Arm
case 1311003: //Dragon Fury: Spear
case 1311002: //Pole Arm Crusher
case 1311005: //Sacrifice
case 1311001: //Spear Crusher
case 1121008: //Brandish
case 1221009: //Blast
case 1121006: //Rush
case 1221007: //Rush
case 1321003: //Rush
case 4221001: //Assassinate
return true;
}
return false;
}
private static boolean isRangeAttack(AbstractDealDamageHandler.AttackInfo attack) {
switch(attack.skill) {
case 2001004: //Energy Bolt
case 2001005: //Magic Claw
case 3001004: //Arrow Blow
case 3001005: //Double Shot
case 4001344: //Lucky Seven
case 2101004: //Fire Arrow
case 2101005: //Poison Brace
case 2201004: //Cold Beam
case 2301005: //Holy Arrow
case 4101005: //Drain
case 2211002: //Ice Strike
case 2211003: //Thunder Spear
case 3111006: //Strafe
case 3211006: //Strafe
case 4111005: //Avenger
case 4211002: //Assaulter
case 2121003: //Fire Demon
case 2221006: //Chain Lightning
case 2221003: //Ice Demon
case 2111006: //Element Composition F/P
case 2211006: //Element Composition I/L
case 2321007: //Angel's Ray
case 3121003: //Dragon Pulse
case 3121004: //Hurricane
case 3221003: //Dragon Pulse
case 3221001: //Piercing
case 3221007: //Sniping
case 4121003: //Showdown taunt
case 4121007: //Triple Throw
case 4221007: //Boomerang Step
case 4221003: //Showdown taunt
case 4111004: //Shadow Meso
return true;
}
return false;
}
private static boolean isAoeAttack(AbstractDealDamageHandler.AttackInfo attack) {
switch(attack.skill) {
case 2201005: //Thunderbolt
case 3101005: //Arrow Bomb : Bow
case 3201005: //Iron Arrow : Crossbow
case 1111006: //Coma: Axe
case 1111005: //Coma: Sword
case 1211002: //Charged Blow
case 1311006: //Dragon Roar
case 2111002: //Explosion
case 2111003: //Poison Mist
case 2311004: //Shining Ray
case 3111004: //Arrow Rain
case 3111003: //Inferno
case 3211004: //Arrow Eruption
case 3211003: //Blizzard (Sniper)
case 4211004: //Band of Thieves
case 1221011: //Sanctuary Skill
case 2121001: //Big Bang
case 2121007: //Meteo
case 2121006: //Paralyze
case 2221001: //Big Bang
case 2221007: //Blizzard
case 2321008: //Genesis
case 2321001: //Big Bang
case 4121004: //Ninja Ambush
case 4121008: //Ninja Storm knockback
case 4221004: //Ninja Ambush
return true;
}
return false;
}
private static void getDirection(AbstractDealDamageHandler.AttackInfo attack) {
if (isAoe) {
isRight = true;
isLeft = true;
} else if (attack.direction <= 0 && attack.stance <= 0) {
isRight = false;
isLeft = true;
} else {
isRight = true;
isLeft = false;
}
}
private static void DamageBalancer(AbstractDealDamageHandler.AttackInfo attack) {
if (attack.skill == 0) {
pvpDamage = 100;
maxDis = 130;
maxHeight = 35;
} else if (isMeleeAttack(attack)) {
maxDis = 130;
maxHeight = 45;
isAoe = false;
if (attack.skill == 4201005) {
pvpDamage = (int) (Math.floor(Math.random() * (75 - 5) + 5));
} else if (attack.skill == 1121008) {
pvpDamage = (int) (Math.floor(Math.random() * (320 - 180) + 180));
maxHeight = 50;
} else if (attack.skill == 4221001) {
pvpDamage = (int) (Math.floor(Math.random() * (200 - 150) + 150));
} else if (attack.skill == 1121006 || attack.skill == 1221007 || attack.skill == 1321003) {
pvpDamage = (int) (Math.floor(Math.random() * (200 - 80) + 80));
} else {
pvpDamage = (int) (Math.floor(Math.random() * (600 - 250) + 250));
}
} else if (isRangeAttack(attack)) {
maxDis = 300;
maxHeight = 40;
isAoe = false;
if (attack.skill == 4201005) {
pvpDamage = (int) (Math.floor(Math.random() * (75 - 5) + 5));
} else if (attack.skill == 4121007) {
pvpDamage = (int) (Math.floor(Math.random() * (60 - 15) + 15));
} else if (attack.skill == 4001344 || attack.skill == 2001005) {
pvpDamage = (int) (Math.floor(Math.random() * (195 - 90) + 90));
} else if (attack.skill == 4221007) {
pvpDamage = (int) (Math.floor(Math.random() * (350 - 180) + 180));
} else if (attack.skill == 3121004 || attack.skill == 3111006 || attack.skill == 3211006) {
maxDis = 450;
pvpDamage = (int) (Math.floor(Math.random() * (50 - 20) + 20));
} else if (attack.skill == 2121003 || attack.skill == 2221003) {
pvpDamage = (int) (Math.floor(Math.random() * (600 - 300) + 300));
} else {
pvpDamage = (int) (Math.floor(Math.random() * (400 - 250) + 250));
}
} else if (isAoeAttack(attack)) {
maxDis = 350;
maxHeight = 350;
isAoe = true;
if (attack.skill == 2121001 || attack.skill == 2221001 || attack.skill == 2321001 || attack.skill == 2121006) {
maxDis = 175;
maxHeight = 175;
pvpDamage = (int) (Math.floor(Math.random() * (350 - 180) + 180));
} else {
pvpDamage = (int) (Math.floor(Math.random() * (700 - 300) + 300));
}
}
}
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;
int gpReward = (int) (Math.floor(Math.random() * (200 - 50) + 50));
if (player.getPvpKills() * .25 >= player.getPvpDeaths()) {
expReward *= 20;
}
player.gainExp(expReward, true, false);
if (player.getGuildId() != 0 && player.getGuildId() != attackedPlayers.getGuildId()) {
try {
MapleGuild guild = player.getClient().getChannelServer().getWorldInterface().getGuild(player.getGuildId(), null);
guild.gainGP(gpReward);
} catch (Exception e) {}
}
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!"));
}
}
public static void doPvP(MapleCharacter player, MapleMap map, AbstractDealDamageHandler.AttackInfo attack) {
DamageBalancer(attack);
getDirection(attack);
for (MapleCharacter attackedPlayers : player.getMap().getNearestPvpChar(player.getPosition(), maxDis, maxHeight, player.getMap().getCharacters())) {
if (attackedPlayers.isAlive() && (player.getParty() == null || player.getParty() != attackedPlayers.getParty())) {
monsterBomb(player, attackedPlayers, map, attack);
}
}
}
}
So what should I change?, pvpdamage = and mindamage = ?