- 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.
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.
then add
under
then add
under the
function
then add...
under the last function i made.
at the code below,too.
now goto MapleStatEffect.java
and add under
_____________
add under
---------------
add under
In MapleMap.java.. add at the bottom
add the import....
and finally.. in AbstractDealDamageHandler.java.. add
under
oooooooooh wait, got 2 more things to add..
go back to maplecharacter.java
add that under
and...
add
under
replace
with
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.
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)
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
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: