[Release]OdinMS PvP. some creds to airflow0

Status
Not open for further replies.
Junior Spellweaver
Joined
Jul 14, 2008
Messages
130
Reaction score
2
I am going to give a tutorial on adding my PvP to your server. My PvP is very realistic. It uses the real magic guard and meso guard. Also, MP eater, and Combo works properly. There is also a beta version of a HP Bar. It shows a big snowman <.<.... alright on with the tutorial. btw, i had added some experiments that im not sure turned out properly, so bear with some glitches/bugs.

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


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

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

under the
Code:
public int calculateMaxBaseDamage (int watk)
function

then add...
Code:
        public int getRandomage(MapleCharacter player) {
            int maxdamage = player.getCurrentMaxBaseDamage();
            int mindamage = player.calculateMinBaseDamage(player);
            return player.rand(mindamage, maxdamage);
        }

under the last function i made.
at the code below,too.
Code:
        public MaplePacket makeHPBarPacket(MapleCharacter player) {
                byte tagcolor = 01;
                byte tagbgcolor = 05;
		return MaplePacketCreator.showBossHP(9400711, player.getHp(), player.getMaxHp(), tagcolor, tagbgcolor);
        }

now goto MapleStatEffect.java

and add under
Code:
private int damage, attackCount, bulletCount, bulletConsume;

Code:
private int mastery, range;

_____________
add under
Code:
ret.moneyCon = MapleDataTool.getIntConvert("moneyCon", source, 0);

Code:
ret.mastery = MapleDataTool.getIntConvert("mastery", source, 0);
ret.range = MapleDataTool.getIntConvert("range", source, 0);

---------------
add under
Code:
	public int getMoneyCon() {
		return moneyCon;
	}

Code:
        public int getMastery() {
                return mastery;
        }
        
        public int getRange() {
                return range;
        }

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

add the import....
Code:
import net.sf.odinms.net.channel.handler.MaplePvp;

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

oooooooooh wait, got 2 more things to add..
go back to maplecharacter.java

Code:
        public int getTotalMdef() {
                return mdef;
        }

add that under

Code:
	public int getTotalMagic() {
		return magic;
	}

and...
add
Code:
        public int getTotalWdef() {
            return wdef;
        }
        
        public int getPvpKills() {
                return pvpKills;
        }
        
        public int getPvpDeaths() {
                return pvpDeaths;
        }
        
        public void gainPvpDeath() {
                this.pvpDeaths += 1;
        }

        public void gainPvpKill() {
                this.pvpKills += 1;
        }

under
Code:
	public int getTotalWatk() {
		return watk;
	}

replace
Code:
private static int rand
with
Code:
public static int rand

there is a small glitch with the magic calculations...

for mastery i used..

.getMastery() * 5 + 10 / 100;

that means..

say mastery was 10..

10 * 5 + 10 / 100;
50.1

real syntax..

(10 * 5 + 10) / 100; ............ u might want to fix it.. sorry i forgot..

later, i may add a vid tut for those who dont understand.
 
Last edited:
Re: [Release]OdinMS Upgraded Beta PvP! for real this time

if u get any errors, tell me what it is, i might've forgotten to add something
 
Re: [Release]OdinMS Upgraded Beta PvP! for real this time

Wow its a master piece :P
good job
 
Re: [Release]OdinMS Upgraded Beta PvP! for real this time

im making a tut in around an hour, and id make a vid, but my friends arent on... unless u want me to make a vid of me smacking another account? itd be really laggy..
 
Re: [Release]OdinMS Upgraded Beta PvP! for real this time

So what's the diff here if compare to Airflow one? Thanks
 
Re: [Release]OdinMS Upgraded Beta PvP! for real this time

try reading. its amazing what u can learn if u just use ure eyes
 
Re: [Release]OdinMS Upgraded Beta PvP! for real this time

So what's the diff here if compare to Airflow one? Thanks

My PvP is very realistic. It uses the real magic guard and meso guard. Also, MP eater, and Combo works properly. There is also a beta version of a HP Bar. It shows a big snowman <.<....

Ehh
 
Re: [Release]OdinMS Upgraded Beta PvP! for real this time

Why not somehow try to make the HP bar that appears above your party members heads show? That could work somehow, I just don't know how that would work. :X
 
Re: [Release]OdinMS Upgraded Beta PvP! for real this time

Thank You for the release, as soon as somebdoy make's a vid or some picture I will be installing this.
 
Re: [Release]OdinMS Upgraded Beta PvP! for real this time

there are some old pics in a DEV thread.. il post the link later in an edit
 
Status
Not open for further replies.
Back