- Joined
- Jul 14, 2008
- Messages
- 130
- Reaction score
- 2
alright, first of all, credits to airflow for developing OdinMS Base PvP
alright, everyones going to hate this PvP. it doesnt use mysql anymore..
and, im not going to tell u anymore about it... read the code ureself
Tutorial
First, make a file called MaplePvp.java in net.sf.odinms.net.channel.handler
(ignore this step if u already have the file)
Second, if u have the file from previous occasions replace it with the following code. If u just added the file, add the following code.
then go into MapleCharacter.java
add
under
then add
under
then add
under
then in the same function... add in the right place.. not that hard.
alright.. then add
under
then add
under the
public int calculateMaxBaseDamage (int watk)
function
THEN add this
above/before
In MapleMap.java.. add at the bottom
and finally.. in AbstractDealDamageHandler.java.. add
under
remember, this is a buggy/glitchy/messy code for now so u should definitely use it.
i will clean up the code tomorrow.
alright, everyones going to hate this PvP. it doesnt use mysql anymore..
and, im not going to tell u anymore about it... read the code ureself
Tutorial
First, make a file called MaplePvp.java in net.sf.odinms.net.channel.handler
(ignore this step if u already have the file)
Second, if u have the file from previous occasions replace it with the following code. If u just added the file, add the following code.
Code:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
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.server.MaplePortal;
import net.sf.odinms.client.MapleBuffStat;
import net.sf.odinms.net.channel.ChannelServer;
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 void pvpDamageBalance(AbstractDealDamageHandler.AttackInfo attack, MapleCharacter player) {
matk = player.getTotalMagic();
luk = player.getTotalLuk();
watk = player.getTotalWatk();
matk = player.getTotalMagic();
double mastery = 0;
double multi = 0;
int skill = 0;
ISkill skil;
switch (attack.skill) {
case 0: //normal attack
pvpDamage = player.getCurrentMaxBaseDamage();
min = player.calculateMinBaseDamage(watk, player);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1001004: //Power Strike
skil = SkillFactory.getSkill(1001004);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = skil.getEffect(skill).getDamage() / 100.0;
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1001005: //Slash Blast
skil = SkillFactory.getSkill(1001004);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = skil.getEffect(skill).getDamage() / 100.0;
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 2001004: //Energy Bolt
skil = SkillFactory.getSkill(2001004);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = skil.getEffect(skill).getMatk();
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 3001005: //Double Shot
skil = SkillFactory.getSkill(3001005);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 4001334: //Double Stab
skil = SkillFactory.getSkill(4001334);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 4001344: //Lucky Seven
skil = SkillFactory.getSkill(4001344);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int)(5 * luk / 100 * watk * multi);
min = (int)(2.5 * luk / 100 * watk * multi);
player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 2101004: //Fire Arrow
skil = SkillFactory.getSkill(4101004);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 4201005: //Savage Blow
skil = SkillFactory.getSkill(4201005);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1111004: //Panic: Axe
skil = SkillFactory.getSkill(1111004);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1111003: //Panic: Sword
skil = SkillFactory.getSkill(1111003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1311004: //Dragon Fury: Pole Arm
skil = SkillFactory.getSkill(1311004);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1311003: //Dragon Fury: Spear
skil = SkillFactory.getSkill(1311003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1311002: //Pole Arm Crusher
skil = SkillFactory.getSkill(1311002);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1311005: //Sacrifice
skil = SkillFactory.getSkill(1311005);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1311001: //Spear Crusher
skil = SkillFactory.getSkill(1311001);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 2211002: //Ice Strike
skil = SkillFactory.getSkill(2211002);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) Math.floor(Math.random() * (player.calculateMaxBaseDamage(watk) * multi));
maxDis = 450;
maxHeight = 35;
isAoe = false;
break;
case 3211006: //Strafe
skil = SkillFactory.getSkill(3211006);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 4111005: //Avenger
skil = SkillFactory.getSkill(4111005);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 4211002: //Assaulter
skil = SkillFactory.getSkill(4211002);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 200;
maxHeight = 35;
isAoe = false;
break;
case 1121008: //Brandish
skil = SkillFactory.getSkill(1121008);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1121006: //Rush
skil = SkillFactory.getSkill(1121006);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1221009: //Blast
skil = SkillFactory.getSkill(1221009);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1221007: //Rush
skil = SkillFactory.getSkill(1221007);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 1321003: //Rush
skil = SkillFactory.getSkill(1321003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 2121003: //Fire Demon
skil = SkillFactory.getSkill(2121003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 3121004: //Hurricane
skil = SkillFactory.getSkill(3121004);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 3221003: //Dragon Pulse
skil = SkillFactory.getSkill(3221003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 3221001: //Piercing
skil = SkillFactory.getSkill(3221003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 3221007: //Sniping
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * 3);
min = (int) (player.calculateMinBaseDamage(watk, player) * 3);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 4121003: //Showdown taunt
skil = SkillFactory.getSkill(4121003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 4121007: //Triple Throw
skil = SkillFactory.getSkill(4121007);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 4221007: //Boomerang Step
skil = SkillFactory.getSkill(4221007);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
case 4221003: //Showdown taunt
skil = SkillFactory.getSkill(4221003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = false;
break;
//aoe
case 2201005: //Thunderbolt
skil = SkillFactory.getSkill(2201005);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 250;
isAoe = true;
break;
case 3201005: //Iron Arrow : Crossbow
skil = SkillFactory.getSkill(3201005);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = true;
break;
case 1111006: //Coma: Axe
skil = SkillFactory.getSkill(1111006);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 250;
isAoe = true;
break;
case 1111005: //Coma: Sword
skil = SkillFactory.getSkill(1111005);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 250;
isAoe = true;
break;
case 1211002: //Charged Blow - skill doesn't work
skil = SkillFactory.getSkill(1211002);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 250;
isAoe = true;
break;
case 1311006: //Dragon Roar
skil = SkillFactory.getSkill(1311006);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 600;
maxHeight = 450;
isAoe = true;
break;
case 2111002: //Explosion
skil = SkillFactory.getSkill(2111002);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 350;
maxHeight = 350;
isAoe = true;
break;
case 3111003: //Inferno
skil = SkillFactory.getSkill(3111003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 350;
maxHeight = 350;
isAoe = true;
break;
case 3211004: //Arrow Eruption
skil = SkillFactory.getSkill(3211004);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 350;
maxHeight = 350;
isAoe = true;
break;
case 3211003: //Blizzard (Sniper)
skil = SkillFactory.getSkill(3211003);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 350;
isAoe = true;
break;
case 1221011: //Sanctuary Skill doesn't work so i don't know
skil = SkillFactory.getSkill(1221011);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = 350;
maxHeight = 350;
isAoe = true;
break;
case 2121001: //Big Bang
skil = SkillFactory.getSkill(2121001);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
mastery = skil.getEffect(skill).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;
break;
case 4121008: //Ninja Storm knockback
skil = SkillFactory.getSkill(4121008);
skill = player.getSkillLevel(skil);
if(skill > 0){
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;
break;
case 4221001: //Assassinate
skil = SkillFactory.getSkill(4221001);
skill = player.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
}
pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * multi);
min = (int) (player.calculateMinBaseDamage(watk, player) * multi);
pvpDamage = player.rand(min, pvpDamage);
maxDis = player.getMaxDis(player);
maxHeight = 35;
isAoe = true;
break;
case 4221004: //Ninja Ambush
pvpDamage = (int) Math.floor(Math.random() * (180 - 150) + 150);
maxDis = 150;
maxHeight = 150;
isAoe = true;
break;
default:
break;
}
}
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) {
//combo start
double multi = 0;
int skill = 0;
ISkill skil;
Integer combo = player.getBuffedValue(MapleBuffStat.COMBO);
if(combo != null) {
player.handleOrbgain();
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;
}
}
pvpDamage -= (attackedPlayers.getTotalWdef() * 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 = 3;
int skillid;
int aPmp;
if(magic) {
for (int i = 0; i<y; i++) {
skillid = 100000 * i + 2000000;
skil = SkillFactory.getSkill(skillid);
skill = attackedPlayers.getSkillLevel(skil);
if(skill > 0){
multi = (skil.getEffect(attackedPlayers.getSkillLevel(skil)).getX() / 100.0);
if(skil.getEffect(attackedPlayers.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
MapleMonster pvpMob = MapleLifeFactory.getMonster(9400711);
map.spawnMonsterOnGroudBelow(pvpMob, attackedPlayers.getPosition());
player.getClient().getSession().write(player.makeHPBarPacket(attackedPlayers));
//number of damage packets
for (int dmgpacket = 0; dmgpacket < attack.numDamage; dmgpacket++) {
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)
{
}
}
int attackedDamage = pvpDamage * attack.numDamage;
attackedPlayers.getClient().getSession().write(MaplePacketCreator.serverNotice(5, player.getName() + " has done " + attackedDamage + " damage to you!"));
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
//delay
try{
Thread.sleep(500);
}
catch(Exception e)
{
}
attackedPlayers.getClient().getSession().write(MaplePacketCreator.serverNotice(6, "You have been reborn."));
//delay end
//reborn dead person and warp somewhere
ChannelServer cserv = player.getClient().getChannelServer();
MapleMap target = cserv.getMapFactory().getMap(100000000);//map to be reborn
MaplePortal targetportal = target.getPortal(0);
attackedPlayers.setHp(attackedPlayers.getMaxHp());
attackedPlayers.setMp(attackedPlayers.getMaxMp());
attackedPlayers.gainExp(attackedPlayers.getExp() / -10, true, false);
if(attackedPlayers.getExp() < 0) {
attackedPlayers.gainExp(attackedPlayers.getExp() + attackedPlayers.getExp() * -1, true, false);
}
attackedPlayers.changeMap(target, targetportal);
}
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);
player.getMap().movePlayer(attackedPlayers, player.getPosition());
}
}
}
}
then go into MapleCharacter.java
add
Code:
private transient int wdef, mdef;
under
Code:
private transient int magic, watk;
then add
Code:
private double sword;
private double blunt;
private double axe;
private double spear;
private double polearm;
private double claw;
private double dagger;
private double staffwand = 0.1;
private double crossbow;
private double bow;
private int skill = 0;
private ISkill skil;
private int maxDis;
private int pvpDeaths = 1;
private int pvpKills = 0;
under
Code:
private int nxcash;
private int maplepoints;
private int gifttokens;
private boolean incs;
then add
Code:
wdef = 0;
mdef = 0;
under
Code:
private void recalcLocalStats() {
int oldmaxhp = localmaxhp;
localmaxhp = getMaxHp();
localmaxmp = getMaxMp();
localdex = getDex();
localint_ = getInt();
localstr = getStr();
localluk = getLuk();
int speed = 100;
int jump = 100;
if(getId() == 30000) {
speed = 210;
jump = 130;
}
magic = localint_;
watk = 0;
then in the same function... add in the right place.. not that hard.
Code:
wdef += equip.getWdef();
mdef += equip.getMdef();
alright.. then add
Code:
public int getMaxDis(MapleCharacter player) {
IItem weapon_item = player.getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -11);
if(weapon_item != null) {
MapleWeaponType weapon = MapleItemInformationProvider.getInstance().getWeaponType(weapon_item.getItemId());
if(weapon == MapleWeaponType.SPEAR || weapon == MapleWeaponType.POLE_ARM) {
maxDis = 106;
}
if(weapon == MapleWeaponType.DAGGER || weapon == MapleWeaponType.SWORD1H || weapon == MapleWeaponType.AXE1H || weapon == MapleWeaponType.BLUNT1H) {
maxDis = 63;
}
if(weapon == MapleWeaponType.SWORD2H || weapon == MapleWeaponType.AXE1H || weapon == MapleWeaponType.BLUNT1H) {
maxDis = 73;
}
if(weapon == MapleWeaponType.STAFF || weapon == MapleWeaponType.WAND) {
maxDis = 51;
}
if(weapon == MapleWeaponType.CLAW) {
skil = SkillFactory.getSkill(4000001);
skill = player.getSkillLevel(skil);
if(skill > 0){
maxDis = (skil.getEffect(player.getSkillLevel(skil)).getRange()) + 205;
}
else {
maxDis = 205;
}
}
if(weapon == MapleWeaponType.BOW || weapon == MapleWeaponType.CROSSBOW) {
skil = SkillFactory.getSkill(3000002);
skill = player.getSkillLevel(skil);
if(skill > 0){
maxDis = (skil.getEffect(player.getSkillLevel(skil)).getRange()) + 270;
}
else {
maxDis = 270;
}
}
}
return maxDis;
}
under
Code:
public int getCurrentMaxBaseDamage() {
return localmaxbasedamage;
}
then add
Code:
public int calculateMinBaseDamage (int watk, MapleCharacter player) {
int minbasedamage = 0;
if (watk == 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 * (watk + 15);
}
if (weapon == MapleWeaponType.BOW) {
minbasedamage = (int) (localdex * 0.9 * 3.4 * bow + localstr) / 100 * (watk + 15);
}
if (getJob().isA(MapleJob.THIEF) && (weapon == MapleWeaponType.DAGGER)) {
minbasedamage = (int) (localluk * 0.9 * 3.6 * dagger + localstr + localdex) / 100 * watk;
}
if (!getJob().isA(MapleJob.THIEF) && (weapon == MapleWeaponType.DAGGER)) {
minbasedamage = (int) (localstr * 0.9 * 4.0 * dagger + localdex) / 100 * watk;
}
if (getJob().isA(MapleJob.THIEF) && (weapon == MapleWeaponType.CLAW)) {
minbasedamage = (int) (localluk * 0.9 * 3.6 * claw + localstr + localdex) / 100 * (watk + 15);
}
if (weapon == MapleWeaponType.SPEAR) {
minbasedamage = (int) (localstr * 0.9 * 3.0 * spear + localdex) / 100 * watk;
}
if (weapon == MapleWeaponType.POLE_ARM) {
minbasedamage = (int) (localstr * 0.9 * 3.0 * polearm + localdex) / 100 * watk;
}
if (weapon == MapleWeaponType.SWORD1H) {
minbasedamage = (int) (localstr * 0.9 * 4.0 * sword + localdex) / 100 * watk;
}
if (weapon == MapleWeaponType.SWORD2H) {
minbasedamage = (int) (localstr * 0.9 * 4.6 * sword + localdex) / 100 * watk;
}
if (weapon == MapleWeaponType.AXE1H) {
minbasedamage = (int) (localstr * 0.9 * 3.2 * axe + localdex) / 100 * watk;
}
if (weapon == MapleWeaponType.BLUNT1H) {
minbasedamage = (int) (localstr * 0.9 * 3.2 * blunt + localdex) / 100 * watk;
}
if (weapon == MapleWeaponType.AXE2H) {
minbasedamage = (int) (localstr * 0.9 * 3.4 * axe + localdex) / 100 * watk;
}
if (weapon == MapleWeaponType.BLUNT2H) {
minbasedamage = (int) (localstr * 0.9 * 3.4 * blunt + localdex) / 100 * watk;
}
if (weapon == MapleWeaponType.STAFF || weapon == MapleWeaponType.WAND) {
minbasedamage = (int) (localstr * 0.9 * 3.0 * staffwand + localdex) / 100 * watk;
}
}
}
return minbasedamage;
}
under the
public int calculateMaxBaseDamage (int watk)
function
THEN add this
Code:
public MaplePacket makeHPBarPacket(MapleCharacter player) {
byte tagcolor = 01;
byte tagbgcolor = 05;
return MaplePacketCreator.showBossHP(9400711, player.getHp(), player.getMaxHp(), tagcolor, tagbgcolor);
}
above/before
Code:
public void handleOrbgain() {
int orbcount = getBuffedValue(MapleBuffStat.COMBO);
ISkill combo = SkillFactory.getSkill(1111002);
ISkill advcombo = SkillFactory.getSkill(1120003);
In MapleMap.java.. add at the bottom
Code:
public Collection<MapleCharacter> getNearestPvpChar(Point attacker, double maxRange, double maxHeight, Collection<MapleCharacter> chr) {
Collection<MapleCharacter> character = new LinkedList<MapleCharacter>();
for (MapleCharacter a : characters) {
if (chr.contains(a.getClient().getPlayer())) {
Point attackedPlayer = a.getPosition();
MaplePortal Port = a.getMap().findClosestSpawnpoint(a.getPosition());
Point nearestPort = Port.getPosition();
double safeDis = attackedPlayer.distance(nearestPort);
double distanceX = attacker.distance(attackedPlayer.getX(), attackedPlayer.getY());
if(MaplePvp.isLeft) {
if (attacker.x > attackedPlayer.x && distanceX < maxRange && distanceX > 2 && attackedPlayer.y >= attacker.y - maxHeight && attackedPlayer.y <= attacker.y + maxHeight) {
character.add(a);
}
}
if(MaplePvp.isRight) {
if (attacker.x < attackedPlayer.x && distanceX < maxRange && distanceX > 2 && attackedPlayer.y >= attacker.y - maxHeight && attackedPlayer.y <= attacker.y + maxHeight) {
character.add(a);
}
}
}
}
return character;
}
}
and finally.. in AbstractDealDamageHandler.java.. add
Code:
//pvp monster bombs
if (attack.skill != 2301002 && player.getMapId() == PVPMAPIDYOUWANT) {//heal
MaplePvp.doPvP(player, map, attack);
}
//end pvp monster bombs
under
Code:
MapleMap map = player.getMap();
remember, this is a buggy/glitchy/messy code for now so u should definitely use it.
i will clean up the code tomorrow.