PvPLibrary.java
上传用户:gwt600
上传日期:2021-06-03
资源大小:704k
文件大小:52k
源码类别:

游戏

开发平台:

Java

  1. /*
  2. 此文件是 MapleMs 核心服务器 -<MapleStory Server>
  3.     Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
  4.                        Matthias Butz <matze@odinms.de>
  5.                        Jan Christian Meyer <vimes@odinms.de>
  6.     此文件原作者为德国  OdinMS 团队  以上是开发人员联系信息 本程序遵守
  7.     版本首要发布  GNU 协议进行修改发布 你可以无偿使用此文件或者进行修改
  8.     但是禁止使用本程序进行一切商业行为,如有发现 根据当地法律的制度 导致
  9.     任何法律责任,我们将不于承担 本程序发布是免费的 并不收取额外费用 拥有
  10.     此文件副本的人遵守 GNU 规定 但请保留修改发布人的信息 谢谢!
  11.     此二次开发修整版本: MapleMs
  12.     基于Xotic进行修改,融合ThePack DestinySource 等服务端的优点制作。
  13.     ==============================================================
  14.               当前版本修复制作维护人员: MapleMs
  15.     ==============================================================
  16.     您应该已经收到一份拷贝的GNU通用公共许可证Affero程式一起。如果不是,请参阅
  17.     <http://www.gnu.org/licenses/>.
  18. */
  19. package net.sf.odinms.server.maps.pvp;
  20. import java.util.Collections;
  21. import net.sf.odinms.client.*;
  22. import net.sf.odinms.client.ISkill;
  23. import net.sf.odinms.client.SkillFactory;
  24. import net.sf.odinms.client.MapleCharacter;
  25. import net.sf.odinms.net.channel.handler.AbstractDealDamageHandler;
  26. import net.sf.odinms.server.MapleInventoryManipulator;
  27. import net.sf.odinms.server.MapleItemInformationProvider;
  28. import net.sf.odinms.server.life.MapleMonster;
  29. import net.sf.odinms.server.life.MapleLifeFactory;
  30. import net.sf.odinms.client.MapleBuffStat;
  31. import net.sf.odinms.server.TimerManager;
  32. import net.sf.odinms.tools.MaplePacketCreator;
  33. public class PvPLibrary {
  34.     private static int pvpDamage;
  35.     private static int min;
  36.     public static int maxDis;
  37.     public static int maxHeight;
  38.     private static int matk;
  39.     private static int watk;
  40.     private static int luk;
  41.     private static boolean isAoe;
  42.     public static boolean isLeft = false;
  43.     public static boolean isRight = false;
  44.     private static boolean magic = false;
  45.     private static boolean magicrecovery = false;
  46.     private static boolean magicguard = false;
  47.     private static boolean mesguard = false;
  48.     private static double multi = 0;
  49.     private static double mastery = 0;
  50.     private static int skill = 0;
  51.     private static ISkill skil;
  52.     private static boolean ignore = false;
  53.     private static int attackedDamage = 0;
  54.     private static MapleMonster pvpMob;
  55.     private static Integer combo;
  56.     private static int MAX_PVP_DAMAGE = 30000;
  57.     private static int MIN_PVP_DAMAGE = 0;
  58.     private static int DAMAGE_DIVIDER = 2;
  59.     public static void pvpDamageBalance(AbstractDealDamageHandler.AttackInfo attack, MapleCharacter player) {
  60.         matk = player.getTotalMagic();
  61.         luk = player.getTotalLuk();
  62.         watk = player.getTotalWatk();
  63.         switch (attack.skill) {
  64.             case 0: //normal attack
  65.                 multi = 1;
  66.                 maxHeight = 35;
  67.                 isAoe = false;
  68.                 break;
  69.             case 1001004:    //Power Strike
  70.                 skil = SkillFactory.getSkill(1001004);
  71.                 multi = skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0;
  72.                 maxHeight = 35;
  73.                 isAoe = false;
  74.                 break;
  75.             case 1001005:    //Slash Blast
  76.                 skil = SkillFactory.getSkill(1001005);
  77.                 multi = skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0;
  78.                 maxHeight = 35;
  79.                 isAoe = false;
  80.                 break;
  81.             case 2001004:    //Energy Bolt
  82.                 skil = SkillFactory.getSkill(2001004);
  83.                 multi = skil.getEffect(player.getSkillLevel(skil)).getMatk();
  84.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  85.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  86.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  87.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  88.                 maxDis = 200;
  89.                 maxHeight = 35;
  90.                 isAoe = false;
  91.                 magic = true;
  92.                 break;
  93.             case 2001005:    //Magic Claw
  94.                 skil = SkillFactory.getSkill(2001005);
  95.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  96.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  97.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  98.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  99.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  100.                 maxHeight = 35;
  101.                 isAoe = false;
  102.                 magic = true;
  103.                 break;
  104.             case 3001004:    //Arrow Blow
  105.                 skil = SkillFactory.getSkill(3001004);
  106.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  107.                 maxHeight = 35;
  108.                 isAoe = false;
  109.                 break;
  110.             case 3001005:    //Double Shot
  111.                 skil = SkillFactory.getSkill(3001005);
  112.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  113.                 maxHeight = 35;
  114.                 isAoe = false;
  115.                 break;
  116.             case 4001334:    //Double Stab
  117.                 skil = SkillFactory.getSkill(4001334);
  118.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  119.                 maxHeight = 35;
  120.                 isAoe = false;
  121.                 break;
  122.             case 4001344:    //Lucky Seven
  123.                 skil = SkillFactory.getSkill(4001344);
  124.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  125.                 pvpDamage = (int) (5 * luk / 100 * watk * multi);
  126.                 min = (int) (2.5 * luk / 100 * watk * multi);
  127.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  128.                 maxHeight = 35;
  129.                 isAoe = false;
  130.                 ignore = true;
  131.                 break;
  132.             case 2101004:    //Fire Arrow
  133.                 skil = SkillFactory.getSkill(4101004);
  134.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  135.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  136.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  137.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  138.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  139.                 maxDis = 400;
  140.                 maxHeight = 35;
  141.                 isAoe = false;
  142.                 magic = true;
  143.                 break;
  144.             case 2101005:    //Poison Brace
  145.                 skil = SkillFactory.getSkill(2101005);
  146.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  147.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  148.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  149.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  150.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  151.                 maxDis = 400;
  152.                 maxHeight = 35;
  153.                 isAoe = false;
  154.                 magic = true;
  155.                 break;
  156.             case 2201004:    //Cold Beam
  157.                 skil = SkillFactory.getSkill(2201004);
  158.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  159.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  160.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  161.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  162.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  163.                 maxDis = 300;
  164.                 maxHeight = 35;
  165.                 isAoe = false;
  166.                 magic = true;
  167.                 break;
  168.             case 2301005:    //Holy Arrow
  169.                 skil = SkillFactory.getSkill(2301005);
  170.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  171.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  172.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  173.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  174.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  175.                 maxDis = 300;
  176.                 maxHeight = 35;
  177.                 isAoe = false;
  178.                 magic = true;
  179.                 break;
  180.             case 4101005:    //Drain
  181.                 skil = SkillFactory.getSkill(4101005);
  182.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  183.                 maxHeight = 35;
  184.                 isAoe = false;
  185.                 break;
  186.             case 4201005:    //Savage Blow
  187.                 skil = SkillFactory.getSkill(4201005);
  188.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  189.                 maxHeight = 35;
  190.                 isAoe = false;
  191.                 break;
  192.             case 1111004:    //Panic: Axe
  193.                 skil = SkillFactory.getSkill(1111004);
  194.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  195.                 maxHeight = 35;
  196.                 isAoe = false;
  197.                 break;
  198.             case 1111003:    //Panic: Sword
  199.                 skil = SkillFactory.getSkill(1111003);
  200.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  201.                 maxHeight = 35;
  202.                 isAoe = false;
  203.                 break;
  204.             case 1311004:    //Dragon Fury: Pole Arm
  205.                 skil = SkillFactory.getSkill(1311004);
  206.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  207.                 maxHeight = 35;
  208.                 isAoe = false;
  209.                 break;
  210.             case 1311003:    //Dragon Fury: Spear
  211.                 skil = SkillFactory.getSkill(1311003);
  212.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  213.                 maxHeight = 35;
  214.                 isAoe = false;
  215.                 break;
  216.             case 1311002:    //Pole Arm Crusher
  217.                 skil = SkillFactory.getSkill(1311002);
  218.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  219.                 maxHeight = 35;
  220.                 isAoe = false;
  221.                 break;
  222.             case 1311005:    //Sacrifice
  223.                 skil = SkillFactory.getSkill(1311005);
  224.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  225.                 maxHeight = 35;
  226.                 isAoe = false;
  227.                 break;
  228.             case 1311001:    //Spear Crusher
  229.                 skil = SkillFactory.getSkill(1311001);
  230.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  231.                 maxHeight = 35;
  232.                 isAoe = false;
  233.                 break;
  234.             case 2211002:    //Ice Strike
  235.                 skil = SkillFactory.getSkill(2211002);
  236.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  237.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  238.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  239.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  240.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  241.                 maxDis = 250;
  242.                 maxHeight = 35;
  243.                 isAoe = false;
  244.                 magic = true;
  245.                 break;
  246.             case 2211003:    //Thunder Spear
  247.                 skil = SkillFactory.getSkill(2211003);
  248.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  249.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  250.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  251.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  252.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  253.                 maxDis = 300;
  254.                 maxHeight = 35;
  255.                 isAoe = false;
  256.                 magic = true;
  257.                 break;
  258.             case 3111006:    //Strafe
  259.                 skil = SkillFactory.getSkill(3111006);
  260.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 1000.0);
  261.                 maxHeight = 35;
  262.                 isAoe = false;
  263.                 break;
  264.             case 3211006:    //Strafe
  265.                 skil = SkillFactory.getSkill(3211006);
  266.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 1000.0);
  267.                 maxHeight = 35;
  268.                 isAoe = false;
  269.                 break;
  270.             case 4111005:    //Avenger
  271.                 skil = SkillFactory.getSkill(4111005);
  272.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  273.                 maxHeight = 35;
  274.                 isAoe = false;
  275.                 break;
  276.             case 4211002:    //Assaulter
  277.                 skil = SkillFactory.getSkill(4211002);
  278.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  279.                 maxDis = 200;
  280.                 maxHeight = 35;
  281.                 isAoe = false;
  282.                 break;
  283.             case 1121008:    //Brandish
  284.                 skil = SkillFactory.getSkill(1121008);
  285.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  286.                 maxHeight = 35;
  287.                 isAoe = false;
  288.                 break;
  289.             case 1121006:    //Rush
  290.                 skil = SkillFactory.getSkill(1121006);
  291.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  292.                 maxHeight = 35;
  293.                 isAoe = false;
  294.                 break;
  295.             case 1221009:    //Blast
  296.                 skil = SkillFactory.getSkill(1221009);
  297.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  298.                 maxHeight = 35;
  299.                 isAoe = false;
  300.                 break;
  301.             case 1221007:    //Rush
  302.                 skil = SkillFactory.getSkill(1221007);
  303.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  304.                 maxHeight = 35;
  305.                 isAoe = false;
  306.                 break;
  307.             case 1321003:    //Rush
  308.                 skil = SkillFactory.getSkill(1321003);
  309.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  310.                 maxHeight = 35;
  311.                 isAoe = false;
  312.                 break;
  313.             case 2121003:    //Fire Demon
  314.                 skil = SkillFactory.getSkill(2121003);
  315.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  316.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  317.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  318.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  319.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  320.                 maxDis = 400;
  321.                 maxHeight = 35;
  322.                 isAoe = false;
  323.                 magic = true;
  324.                 break;
  325.             case 2221006:    //Chain Lightning
  326.                 skil = SkillFactory.getSkill(2221006);
  327.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  328.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  329.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  330.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  331.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  332.                 maxDis = 400;
  333.                 maxHeight = 35;
  334.                 isAoe = false;
  335.                 magic = true;
  336.                 break;
  337.             case 2221003:    //Ice Demon
  338.                 skil = SkillFactory.getSkill(2221003);
  339.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  340.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  341.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  342.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  343.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  344.                 maxDis = 400;
  345.                 maxHeight = 35;
  346.                 isAoe = false;
  347.                 magic = true;
  348.                 break;
  349.             case 2321007:    //Angel's Ray
  350.                 skil = SkillFactory.getSkill(2321007);
  351.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  352.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  353.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  354.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  355.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  356.                 maxDis = 400;
  357.                 maxHeight = 35;
  358.                 isAoe = false;
  359.                 magic = true;
  360.                 break;
  361.             case 3121003:    //Dragon Pulse
  362.                 skil = SkillFactory.getSkill(3121003);
  363.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  364.                 maxHeight = 35;
  365.                 isAoe = false;
  366.                 break;
  367.             case 3121004:    //Hurricane
  368.                 skil = SkillFactory.getSkill(3121004);
  369.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  370.                 maxHeight = 35;
  371.                 isAoe = false;
  372.                 break;
  373.             case 3221003:    //Dragon Pulse
  374.                 skil = SkillFactory.getSkill(3221003);
  375.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  376.                 maxHeight = 35;
  377.                 isAoe = false;
  378.                 break;
  379.             case 3221001:    //Piercing
  380.                 skil = SkillFactory.getSkill(3221003);
  381.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  382.                 maxHeight = 35;
  383.                 isAoe = false;
  384.                 break;
  385.             case 3221007:    //Sniping
  386.                 pvpDamage = (int) (player.calculateMaxBaseDamage(watk) * 3);
  387.                 min = (int) (player.calculateMinBaseDamage(player) * 3);
  388.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  389.                 maxHeight = 35;
  390.                 isAoe = false;
  391.                 ignore = true;
  392.                 break;
  393.             case 4121003:    //Showdown taunt
  394.                 skil = SkillFactory.getSkill(4121003);
  395.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  396.                 maxHeight = 35;
  397.                 isAoe = false;
  398.                 break;
  399.             case 4121007:    //Triple Throw
  400.                 skil = SkillFactory.getSkill(4121007);
  401.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  402.                 maxHeight = 35;
  403.                 isAoe = false;
  404.                 break;
  405.             case 4221007:    //Boomerang Step
  406.                 skil = SkillFactory.getSkill(4221007);
  407.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  408.                 maxHeight = 35;
  409.                 isAoe = false;
  410.                 break;
  411.             case 4221003:    //Showdown taunt
  412.                 skil = SkillFactory.getSkill(4221003);
  413.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  414.                 maxHeight = 35;
  415.                 isAoe = false;
  416.                 break;
  417.             //aoe
  418.             case 2201005:    //Thunderbolt
  419.                 skil = SkillFactory.getSkill(2201005);
  420.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  421.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  422.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  423.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  424.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  425.                 maxDis = 250;
  426.                 maxHeight = 250;
  427.                 isAoe = true;
  428.                 magic = true;
  429.                 break;
  430.             case 3101005:    //Arrow Bomb : Bow
  431.                 skil = SkillFactory.getSkill(3101005);
  432.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  433.                 maxHeight = 250;
  434.                 isAoe = true;
  435.                 break;
  436.             case 3201005:    //Iron Arrow : Crossbow
  437.                 skil = SkillFactory.getSkill(3201005);
  438.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  439.                 maxHeight = 35;
  440.                 isAoe = true;
  441.                 break;
  442.             case 1111006:    //Coma: Axe
  443.                 skil = SkillFactory.getSkill(1111006);
  444.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  445.                 maxHeight = 250;
  446.                 isAoe = true;
  447.                 break;
  448.             case 1111005:    //Coma: Sword
  449.                 skil = SkillFactory.getSkill(1111005);
  450.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  451.                 maxHeight = 250;
  452.                 isAoe = true;
  453.                 break;
  454.             case 1211002:    //Charged Blow - skill doesn't work
  455.                 skil = SkillFactory.getSkill(1211002);
  456.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  457.                 maxHeight = 250;
  458.                 isAoe = true;
  459.                 break;
  460.             case 1311006:    //Dragon Roar
  461.                 skil = SkillFactory.getSkill(1311006);
  462.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  463.                 maxDis = 600;
  464.                 maxHeight = 450;
  465.                 isAoe = true;
  466.                 break;
  467.             case 2111002:    //Explosion
  468.                 skil = SkillFactory.getSkill(2111002);
  469.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  470.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  471.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  472.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  473.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  474.                 maxDis = 350;
  475.                 maxHeight = 350;
  476.                 isAoe = true;
  477.                 magic = true;
  478.                 break;
  479.             case 2111003:    //Poison Mist
  480.                 skil = SkillFactory.getSkill(2111003);
  481.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  482.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  483.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  484.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  485.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  486.                 maxDis = 350;
  487.                 maxHeight = 350;
  488.                 isAoe = true;
  489.                 magic = true;
  490.                 break;
  491.             case 2311004:    //Shining Ray
  492.                 skil = SkillFactory.getSkill(2311004);
  493.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  494.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  495.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  496.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  497.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  498.                 maxDis = 350;
  499.                 maxHeight = 350;
  500.                 isAoe = true;
  501.                 magic = true;
  502.                 break;
  503.             case 3111004:    //Arrow Rain
  504.                 skil = SkillFactory.getSkill(3111004);
  505.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  506.                 maxDis = 350;
  507.                 maxHeight = 350;
  508.                 isAoe = true;
  509.                 break;
  510.             case 3111003:    //Inferno
  511.                 skil = SkillFactory.getSkill(3111003);
  512.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  513.                 maxDis = 350;
  514.                 maxHeight = 350;
  515.                 isAoe = true;
  516.                 break;
  517.             case 3211004:    //Arrow Eruption
  518.                 skil = SkillFactory.getSkill(3211004);
  519.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  520.                 maxDis = 350;
  521.                 maxHeight = 350;
  522.                 isAoe = true;
  523.                 break;
  524.             case 3211003:    //Blizzard (Sniper)
  525.                 skil = SkillFactory.getSkill(3211003);
  526.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  527.                 maxDis = 350;
  528.                 maxHeight = 350;
  529.                 isAoe = true;
  530.                 break;
  531.             case 4211004:    //Band of Thieves Skill doesn't work so i don't know
  532.                 skil = SkillFactory.getSkill(4211004);
  533.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  534.                 maxHeight = 350;
  535.                 isAoe = true;
  536.                 break;
  537.             case 1221011:    //Sanctuary Skill doesn't work so i don't know
  538.                 skil = SkillFactory.getSkill(1221011);
  539.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  540.                 maxDis = 350;
  541.                 maxHeight = 350;
  542.                 isAoe = true;
  543.                 break;
  544.             case 2121001:    //Big Bang
  545.                 skil = SkillFactory.getSkill(2121001);
  546.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  547.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  548.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  549.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  550.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  551.                 maxDis = 175;
  552.                 maxHeight = 175;
  553.                 isAoe = true;
  554.                 magic = true;
  555.                 break;
  556.             case 2121007:    //Meteo
  557.                 skil = SkillFactory.getSkill(2121007);
  558.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  559.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  560.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  561.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  562.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  563.                 maxDis = 600;
  564.                 maxHeight = 600;
  565.                 isAoe = true;
  566.                 magic = true;
  567.                 break;
  568.             case 2121006:    //Paralyze
  569.                 skil = SkillFactory.getSkill(2121006);
  570.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  571.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  572.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  573.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  574.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  575.                 maxDis = 250;
  576.                 maxHeight = 250;
  577.                 isAoe = true;
  578.                 magic = true;
  579.                 break;
  580.             case 2221001:    //Big Bang
  581.                 skil = SkillFactory.getSkill(2221001);
  582.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  583.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  584.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  585.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  586.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  587.                 maxDis = 175;
  588.                 maxHeight = 175;
  589.                 isAoe = true;
  590.                 magic = true;
  591.                 break;
  592.             case 2221007:    //Blizzard
  593.                 skil = SkillFactory.getSkill(2221007);
  594.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  595.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  596.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  597.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  598.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  599.                 maxDis = 600;
  600.                 maxHeight = 600;
  601.                 isAoe = true;
  602.                 magic = true;
  603.                 break;
  604.             case 2321008:    //Genesis
  605.                 skil = SkillFactory.getSkill(2321008);
  606.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  607.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  608.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  609.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  610.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  611.                 maxDis = 600;
  612.                 maxHeight = 600;
  613.                 isAoe = true;
  614.                 magic = true;
  615.                 break;
  616.             case 2321001:   //bishop Big Bang
  617.                 skil = SkillFactory.getSkill(2321001);
  618.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getMatk());
  619.                 mastery = skil.getEffect(player.getSkillLevel(skil)).getMastery() * 5 + 10 / 100;
  620.                 pvpDamage = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8);
  621.                 min = (int) ((matk * 0.8) + (luk / 4) / 18 * multi * 0.8 * mastery);
  622.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  623.                 maxDis = 175;
  624.                 maxHeight = 175;
  625.                 isAoe = true;
  626.                 magic = true;
  627.                 break;
  628.             case 4121004:    //Ninja Ambush
  629.                 pvpDamage = (int) Math.floor(Math.random() * (180 - 150) + 150);
  630.                 maxDis = 150;
  631.                 maxHeight = 300;
  632.                 isAoe = true;
  633.                 ignore = true;
  634.                 break;
  635.             case 4121008:    //Ninja Storm knockback
  636.                 skil = SkillFactory.getSkill(4121008);
  637.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  638.                 pvpDamage = (int) Math.floor(Math.random() * (player.calculateMaxBaseDamage(watk) * multi));
  639.                 maxDis = 150;
  640.                 maxHeight = 35;
  641.                 isAoe = true;
  642.                 ignore = true;
  643.                 break;
  644.             case 4221001:    //Assassinate
  645.                 skil = SkillFactory.getSkill(4221001);
  646.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  647.                 maxHeight = 35;
  648.                 isAoe = true;
  649.                 break;
  650.             case 4221004:    //Ninja Ambush
  651.                 pvpDamage = (int) Math.floor(Math.random() * (180 - 150) + 150);
  652.                 maxDis = 150;
  653.                 maxHeight = 150;
  654.                 isAoe = true;
  655.                 ignore = true;
  656.                 break;
  657.             case 9001001: // SUPER dragon ROAR
  658.                 pvpDamage = MAX_PVP_DAMAGE;
  659.                 maxDis = 150;
  660.                 maxHeight = 150;
  661.                 isAoe = true;
  662.                 ignore = true;
  663.                 break;
  664.             /**
  665.              *@author Supiangel
  666.              *
  667.              */
  668.             case 5001001:    //First Strike
  669.                 skil = SkillFactory.getSkill(5001001);
  670.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  671.                 maxHeight = 35;
  672.                 isAoe = false;
  673.                 break;
  674.             case 5001002:    //Back-flip kick
  675.                 skil = SkillFactory.getSkill(5001002);
  676.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  677.                 maxHeight = 35;
  678.                 isAoe = false;
  679.                 break;
  680.             case 5101002:    //Backward Blow
  681.                 skil = SkillFactory.getSkill(5101002);
  682.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  683.                 maxHeight = 35;
  684.                 isAoe = false;
  685.                 break;
  686.             case 5101003:    //Uppercut
  687.                 skil = SkillFactory.getSkill(5101003);
  688.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  689.                 maxHeight = 35;
  690.                 isAoe = false;
  691.                 break;
  692.             case 5101004:    //Spinning Punch
  693.                 skil = SkillFactory.getSkill(5101004);
  694.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  695.                 maxHeight = 35;
  696.                 isAoe = false;
  697.                 break;
  698.             case 5111002:    //Final Punch
  699.                 skil = SkillFactory.getSkill(5111002);
  700.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  701.                 maxHeight = 35;
  702.                 isAoe = false;
  703.                 break;
  704.             case 5111004:    //Absorb
  705.                 skil = SkillFactory.getSkill(5111004);
  706.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  707.                 maxHeight = 35;
  708.                 isAoe = false;
  709.                 break;
  710.             case 5111006:    //Smash
  711.                 skil = SkillFactory.getSkill(5111006);
  712.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  713.                 maxHeight = 35;
  714.                 isAoe = false;
  715.                 break;
  716.             case 5001003:    //Double Shot
  717.                 skil = SkillFactory.getSkill(5001003);
  718.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  719.                 pvpDamage = (int) (5 * player.getStr() / 100 * watk * multi);
  720.                 min = (int) (2.5 * player.getStr() / 100 * watk * multi);
  721.                 pvpDamage = MapleCharacter.rand(min, pvpDamage);
  722.                 maxHeight = 35;
  723.                 isAoe = false;
  724.                 ignore = true;
  725.                 break;
  726.             case 5201001:    //Fatal Bullet
  727.                 skil = SkillFactory.getSkill(5201001);
  728.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  729.                 maxHeight = 35;
  730.                 isAoe = false;
  731.                 break;
  732.             case 5201004:    //Decoy
  733.                 skil = SkillFactory.getSkill(5201004);
  734.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  735.                 maxHeight = 35;
  736.                 isAoe = false;
  737.                 break;
  738.             case 5201006:    //Withdraw
  739.                 skil = SkillFactory.getSkill(5201006);
  740.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  741.                 maxHeight = 35;
  742.                 isAoe = false;
  743.                 break;
  744.             case 5210000:    //Triple Shot
  745.                 skil = SkillFactory.getSkill(5210000);
  746.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  747.                 maxHeight = 35;
  748.                 isAoe = false;
  749.                 ignore = true;
  750.                 break;
  751.             case 5211004:    //Fire Shot
  752.                 skil = SkillFactory.getSkill(5211004);
  753.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  754.                 maxHeight = 35;
  755.                 isAoe = false;
  756.                 break;
  757.             case 5211005:    //Ice Shot
  758.                 skil = SkillFactory.getSkill(5211005);
  759.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  760.                 maxHeight = 35;
  761.                 isAoe = false;
  762.                 break;
  763.             case 5121001:    //Dragon Strike
  764.                 skil = SkillFactory.getSkill(5121001);
  765.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  766.                 maxHeight = 35;
  767.                 isAoe = true;
  768.                 break;
  769.             case 5121007:    //Fist
  770.                 skil = SkillFactory.getSkill(5121007);
  771.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  772.                 maxHeight = 35;
  773.                 isAoe = false;
  774.                 break;
  775.             case 5121002:    //Energy Orb
  776.                 skil = SkillFactory.getSkill(5121002);
  777.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  778.                 maxHeight = 35;
  779.                 isAoe = false;
  780.                 ignore = true;
  781.                 break;
  782.             case 5121004:    //Demolition
  783.                 skil = SkillFactory.getSkill(5121004);
  784.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  785.                 maxHeight = 35;
  786.                 isAoe = false;
  787.                 break;
  788.             case 5121005:    //Snatch
  789.                 skil = SkillFactory.getSkill(5121005);
  790.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  791.                 maxHeight = 35;
  792.                 isAoe = false;
  793.                 ignore = true;
  794.                 break;
  795.             case 5221004:    //Rapid Fire
  796.                 skil = SkillFactory.getSkill(5221004);
  797.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  798.                 maxHeight = 35;
  799.                 isAoe = false;
  800.                 break;
  801.             case 5221003:    //Air Strike
  802.                 skil = SkillFactory.getSkill(5221003);
  803.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  804.                 maxHeight = 35;
  805.                 isAoe = false;
  806.                 break;
  807.             case 5221007:    //Battleship Cannon
  808.                 skil = SkillFactory.getSkill(5221007);
  809.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  810.                 maxHeight = 35;
  811.                 isAoe = false;
  812.                 ignore = true;
  813.                 break;
  814.             case 5221008:    //Battleship Torpedo
  815.                 skil = SkillFactory.getSkill(5221008);
  816.                 multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 100.0);
  817.                 maxHeight = 35;
  818.                 isAoe = false;
  819.                 ignore = true;
  820.                 break;
  821.             default:
  822.                 break;
  823.         }
  824.         if (!magic || !ignore) {
  825.             maxDis = player.getMaxDis(player);
  826.         }
  827.     }
  828.     public static void getDirection(AbstractDealDamageHandler.AttackInfo attack) {
  829.         if (isAoe) {
  830.             isRight = true;
  831.             isLeft = true;
  832.         } else if (attack.direction <= 0 && attack.stance <= 0) {
  833.             isRight = false;
  834.             isLeft = true;
  835.         } else {
  836.             isRight = true;
  837.             isLeft = false;
  838.         }
  839.     }
  840.     public static void monsterBomb(final MapleCharacter player, final MapleCharacter attackedPlayers, final AbstractDealDamageHandler.AttackInfo attack) {
  841.         for (int dmgpacket = 0; dmgpacket < attack.numDamage; dmgpacket++) {
  842.             TimerManager.getInstance().schedule(new Runnable() {
  843.                 @Override
  844.                 public void run() {
  845.                     if (!magic || !ignore) {
  846.                         pvpDamage = (int) (player.getRandomage(player) * multi);
  847.                     }
  848.                     combo = player.getBuffedValue(MapleBuffStat.COMBO);
  849.                     if (combo != null) {
  850.                         //player.handleOrbgain();//comment out for now
  851.                         skil = SkillFactory.getSkill(1120003);
  852.                         skill = player.getSkillLevel(skil);
  853.                         if (skill > 0) {
  854.                             multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 500.0);
  855.                             if (multi < 0) {
  856.                                 multi = 1;
  857.                             }
  858.                             pvpDamage *= multi;
  859.                         } else {
  860.                             skil = SkillFactory.getSkill(1120003);
  861.                             skill = player.getSkillLevel(skil);
  862.                             multi = (skil.getEffect(player.getSkillLevel(skil)).getDamage() / 500.0);
  863.                             if (multi < 0) {
  864.                                 multi = 1;
  865.                             }
  866.                             pvpDamage *= multi;
  867.                         }
  868.                     }
  869.                     if (!magic) {
  870.                         pvpDamage -= (attackedPlayers.getTotalWdef() * 1.5);
  871.                     } else {
  872.                         pvpDamage -= (attackedPlayers.getTotalMdef() * 1.5);
  873.                     }
  874.                     pvpDamage /= 5;
  875.                     if (magic) {
  876.                         pvpDamage /= 2;
  877.                     }
  878.     if (player.getVip() == 3)
  879. pvpDamage *= 2;
  880.       else
  881.     if (player.getVip() == 4)
  882. pvpDamage *= 4;
  883.       else
  884. pvpDamage *= 1;
  885.                     int magicattack = (player.getTotalDex() + player.getTotalInt() + player.getTotalLuk() + player.getTotalStr()) / 300;
  886.                     pvpDamage += magicattack;
  887.                     int reborn = player.getReborns();
  888.                     pvpDamage += reborn;
  889.                     int magicat = (player.getTotalMagic() + player.getTotalWatk()) / 100;
  890.                     pvpDamage += magicat;
  891.                     if (player.getGMLevel() == 5)
  892.                         pvpDamage *= 2000;
  893.                     pvpDamage /= DAMAGE_DIVIDER;
  894.                     if (pvpDamage > MAX_PVP_DAMAGE) {
  895.                         pvpDamage = MAX_PVP_DAMAGE;
  896.                     }
  897.                     if (pvpDamage < 0) {
  898.                         pvpDamage = MIN_PVP_DAMAGE;
  899.                     }
  900.                     Integer mguard = attackedPlayers.getBuffedValue(MapleBuffStat.MAGIC_GUARD);
  901.                     Integer mesoguard = attackedPlayers.getBuffedValue(MapleBuffStat.MESOGUARD);
  902.                     if (mguard != null) {
  903.                         skil = SkillFactory.getSkill(2001002);
  904.                         skill = attackedPlayers.getSkillLevel(skil);
  905.                         if (skill > 0) {
  906.                             multi = (skil.getEffect(attackedPlayers.getSkillLevel(skil)).getX() / 100.0);
  907.                         }
  908.                         int mg = (int) (pvpDamage * multi);
  909.                         if (attackedPlayers.getMp() > mg) {
  910.                             attackedPlayers.setMp(attackedPlayers.getMp() - mg);
  911.                             pvpDamage -= mg;
  912.                         } else {
  913.                             pvpDamage -= attackedPlayers.getMp();
  914.                             attackedPlayers.setMp(0);
  915.                             attackedPlayers.dropMessage(5, "Your MP has been drained.");
  916.                         }
  917.                         magicguard = true;
  918.                     }
  919.                     if (mesoguard != null) {
  920.                         skil = SkillFactory.getSkill(4211005);
  921.                         skill = attackedPlayers.getSkillLevel(skil);
  922.                         if (skill > 0) {
  923.                             multi = (skil.getEffect(attackedPlayers.getSkillLevel(skil)).getX() / 100.0);
  924.                         }
  925.                         int mg = (int) (pvpDamage * multi);
  926.                         if (attackedPlayers.getMeso() > mg) {
  927.                             attackedPlayers.gainMeso(-mg, false);
  928.                             pvpDamage *= 0.5;
  929.                             if (player.haveItem(5221000))
  930.                                 pvpDamage *= 4;
  931.                         } else {
  932.                             attackedPlayers.dropMessage(5, "You do not have enough mesos to weaken the blow");
  933.                         }
  934.                         mesguard = true;
  935.                     }
  936.                     int y = 2;
  937.                     int skillid;
  938.                     int aPmp;
  939.                     if (magic) {
  940.                         for (int i = 0; i < y; i++) {
  941.                             skillid = 100000 * i + 2000000;
  942.                             skil = SkillFactory.getSkill(skillid);
  943.                             skill = player.getSkillLevel(skil);
  944.                             if (skill > 0) {
  945.                                 multi = (skil.getEffect(player.getSkillLevel(skil)).getX() / 100.0);
  946.                                 if (skil.getEffect(player.getSkillLevel(skil)).makeChanceResult()) {
  947.                                     aPmp = (int) (multi * attackedPlayers.getMaxMp());
  948.                                     if (attackedPlayers.getMp() > aPmp) {
  949.                                         attackedPlayers.setMp(attackedPlayers.getMp() - aPmp);
  950.                                         player.setMp(player.getMp() + aPmp);
  951.                                         if (player.getMp() > player.getMaxMp()) {
  952.                                             player.setMp(player.getMaxMp());
  953.                                         }
  954.                                     } else {
  955.                                         player.setMp(player.getMp() + attackedPlayers.getMp());
  956.                                         if (player.getMp() > player.getMaxMp()) {
  957.                                             player.setMp(player.getMaxMp());
  958.                                         }
  959.                                         attackedPlayers.setMp(0);
  960.                                     }
  961.                                 }
  962.                             }
  963.                         }
  964.                         magic = false;
  965.                         magicrecovery = true;
  966.                     }
  967.                     pvpMob = MapleLifeFactory.getMonster(9400711);
  968.                     player.getClient().getSession().write(MaplePacketCreator.damagePlayer(attack.numDamage, pvpMob.getId(), attackedPlayers.getId(), pvpDamage));
  969.                     attackedPlayers.addHP(-pvpDamage);
  970.                     attackedDamage += pvpDamage;
  971.                     attackedPlayers.getClient().getSession().write(MaplePacketCreator.serverNotice(5, player.getName() + " 正在攻击你.受到 " + attackedDamage + " 伤害!"));
  972.                     if (attackedDamage > 0) {
  973.                         combo = player.getBuffedValue(MapleBuffStat.COMBO);
  974.                         if (combo != null) {
  975.                             player.handleOrbgain();
  976.                         }
  977.                     }
  978.                     attackedDamage = 0;
  979.                     if (magicguard) {
  980.                         player.getClient().getSession().write(MaplePacketCreator.serverNotice(5, player.getName() + " 使用魔法盾阻挡了部分攻击!"));
  981.                         magicguard = false;
  982.                     }
  983.                     if (mesguard) {
  984.                         player.getClient().getSession().write(MaplePacketCreator.serverNotice(5, player.getName() + " 使用金钱盾阻挡了部分攻击!"));
  985.                         mesguard = false;
  986.                     }
  987.                     if (magicrecovery) {
  988.                         attackedPlayers.getClient().getSession().write(MaplePacketCreator.serverNotice(5, player.getName() + " 使用了魔法吸收!"));
  989.                         magicrecovery = false;
  990.                     }
  991.                     //rewards
  992.             if (attackedPlayers.isDead() && attackedPlayers.getHp() <= 0) {
  993.             int selec = (int)Math.floor(Math.random() * 4) + 1;
  994.     int randomed = (int)Math.floor(Math.random() * 20) + 1;
  995.             int expReward = attackedPlayers.getLevel() * 100;
  996.             int gpReward = (int)Math.floor(Math.random() * 150D + 50D);
  997.             if ((double)player.getPvpKills() * 0.25D >= (double)player.getPvpDeaths())
  998.             expReward *= 20;
  999.             player.gainExp(expReward, true, false);
  1000.             player.gainPvpKill();
  1001.             player.getClient().getSession().write(MaplePacketCreator.serverNotice(6, "您已经把 " + attackedPlayers.getName() + "杀死!您将增加一点杀人次数!"));
  1002.             attackedPlayers.gainPvpDeath();
  1003.             if (selec >= 1)
  1004.             {
  1005.             MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
  1006.             IItem itemedid = attackedPlayers.getInventory(MapleInventoryType.EQUIP).getItem((byte)randomed).copy();
  1007.     if (attackedPlayers.getlockitem(randomed) == 0)
  1008.             {
  1009.             MapleInventoryManipulator.removeFromSlot(attackedPlayers.getClient(), MapleInventoryType.EQUIP, (byte)randomed, (short)1, true);
  1010.     attackedPlayers.getMap().spawnItemDrop(attackedPlayers, attackedPlayers, itemedid, attackedPlayers.getPosition(), true, false);
  1011.             }
  1012.             } else
  1013.             {
  1014.                 MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
  1015.                 IItem itemedid = attackedPlayers.getInventory(MapleInventoryType.ETC).getItem((byte)randomed);
  1016.                 IItem tradeItem = itemedid.copy();
  1017.                 MapleInventoryManipulator.removeFromSlot(attackedPlayers.getClient(), MapleInventoryType.ETC, (byte)randomed, (short)1, true);
  1018.                 attackedPlayers.getMap().spawnItemDrop(attackedPlayers, attackedPlayers, ii.getEquipById(tradeItem.getItemId()), attackedPlayers.getPosition(), true, false);
  1019.             }
  1020.             int random = (int)Math.floor(Math.random() * 300000) + 10000;
  1021.             if (attackedPlayers.getMeso() >= random)
  1022.             {
  1023.                 attackedPlayers.getMap().spawnMesoDrop(random, random, attackedPlayers.getPosition(), attackedPlayers, attackedPlayers, false);
  1024.                 attackedPlayers.gainMeso(-random, true);
  1025.             }
  1026.             attackedPlayers.getClient().getSession().write(MaplePacketCreator.serverNotice(6, player.getName() + "已经把您杀死!"));
  1027.                     }
  1028.                 }
  1029.             }, dmgpacket * 40 + 100);
  1030.         }
  1031.     }
  1032.     public synchronized static void doPvP(MapleCharacter player, AbstractDealDamageHandler.AttackInfo attack) {
  1033.         pvpDamageBalance(attack, player); //grab height/distance/damage/aoetruefalse
  1034.         getDirection(attack);
  1035.         for (MapleCharacter attackedPlayers : player.getMap().getNearestPvpChar(player.getPosition(), PvPLibrary.maxDis, PvPLibrary.maxHeight, Collections.unmodifiableCollection(player.getMap().getCharacters()))) {
  1036.             if (attackedPlayers.isAlive() && (player.getParty() == null || player.getParty() != attackedPlayers.getParty())) {
  1037.                 monsterBomb(player, attackedPlayers, attack);
  1038.             }
  1039.         }
  1040.     }
  1041. }