Advertisement
Guest User

ArenaMasterService.java fix

a guest
Aug 1st, 2015
881
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 33.89 KB | None | 0 0
  1. /**
  2.  * This file is part of Aion-Lightning <aion-lightning.org>.
  3.  *
  4.  *  Aion-Lightning is free software: you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation, either version 3 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  Aion-Lightning is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details. *
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with Aion-Lightning.
  16.  *  If not, see <http://www.gnu.org/licenses/>.
  17.  *
  18.  *
  19.  * Credits goes to all Open Source Core Developer Groups listed below
  20.  * Please do not change here something, ragarding the developer credits, except the "developed by XXXX".
  21.  * Even if you edit a lot of files in this source, you still have no rights to call it as "your Core".
  22.  * Everybody knows that this Emulator Core was developed by Aion Lightning
  23.  * @-Aion-Unique-
  24.  * @-Aion-Lightning
  25.  * @Aion-Engine
  26.  * @Aion-Extreme
  27.  * @Aion-NextGen
  28.  * @Aion-Core Dev.
  29.  */
  30. package com.aionemu.gameserver.services.ecfunctions.oneVsone;
  31.  
  32.  
  33. import java.util.ArrayList;
  34. import java.util.HashMap;
  35. import java.util.List;
  36. import java.util.Map;
  37.  
  38. import com.aionemu.commons.utils.Rnd;
  39. import com.aionemu.gameserver.configs.main.EventSystem;
  40. import com.aionemu.gameserver.model.EmotionType;
  41. import com.aionemu.gameserver.model.gameobjects.Creature;
  42. import com.aionemu.gameserver.model.gameobjects.player.Player;
  43. import com.aionemu.gameserver.model.ingameshop.InGameShopEn;
  44. import com.aionemu.gameserver.model.utils3d.Point3D;
  45. import com.aionemu.gameserver.network.aion.serverpackets.SM_EMOTION;
  46. import com.aionemu.gameserver.network.aion.serverpackets.SM_QUEST_ACTION;
  47. import com.aionemu.gameserver.network.aion.serverpackets.SM_RESURRECT;
  48. import com.aionemu.gameserver.network.aion.serverpackets.SM_SKILL_COOLDOWN;
  49. import com.aionemu.gameserver.services.abyss.AbyssPointsService;
  50. import com.aionemu.gameserver.services.instance.InstanceService;
  51. import com.aionemu.gameserver.services.item.ItemService;
  52. import com.aionemu.gameserver.services.player.PlayerReviveService;
  53. import com.aionemu.gameserver.services.teleport.TeleportService2;
  54. import com.aionemu.gameserver.skillengine.effect.AbnormalState;
  55. import com.aionemu.gameserver.skillengine.model.SkillTargetSlot;
  56. import com.aionemu.gameserver.utils.PacketSendUtility;
  57. import com.aionemu.gameserver.utils.ThreadPoolManager;
  58. import com.aionemu.gameserver.world.WorldMapInstance;
  59. import com.aionemu.gameserver.world.WorldPosition;
  60. import javolution.util.FastMap;
  61. import org.slf4j.Logger;
  62. import org.slf4j.LoggerFactory;
  63.  
  64. /**
  65.  * @author Kill3r
  66.  * @fixed eKsiK
  67.  */
  68. public class ArenaMasterService{
  69.  
  70.     public WorldMapInstance instance = null;
  71.     public static final ArenaMasterService service = new ArenaMasterService();
  72.     private static final Logger log = LoggerFactory.getLogger(ArenaMasterService.class);
  73.     protected Map<Integer, WorldPosition> previousLocations = new HashMap<Integer, WorldPosition>();
  74.     static Point3D loc1 = new Point3D(EventSystem.ONEVSONE_POINTX_1, EventSystem.ONEVSONE_POINTY_1, EventSystem.ONEVSONE_POINTZ_1); // done config  //winer point++
  75.     static Point3D loc2 = new Point3D(EventSystem.ONEVSONE_POINTX_2, EventSystem.ONEVSONE_POINTY_2, EventSystem.ONEVSONE_POINTZ_2); // done config //loser point++
  76.     static Point3D loc21 = new Point3D(EventSystem.ONEVSONE_POINT2X_1, EventSystem.ONEVSONE_POINT2Y_1, EventSystem.ONEVSONE_POINT2Z_1);
  77.     static Point3D loc22 = new Point3D(EventSystem.ONEVSONE_POINT2X_2, EventSystem.ONEVSONE_POINT2Y_2, EventSystem.ONEVSONE_POINT2Z_2);
  78.     static Point3D loc31 = new Point3D(EventSystem.ONEVSONE_POINT3X_1, EventSystem.ONEVSONE_POINT3Y_1, EventSystem.ONEVSONE_POINT3Z_1);
  79.     static Point3D loc32 = new Point3D(EventSystem.ONEVSONE_POINT3X_2, EventSystem.ONEVSONE_POINT3Y_2, EventSystem.ONEVSONE_POINT3Z_2);
  80.     public String ArenaMaster = EventSystem.ONEVSONE_ARENAMASTER; // make config+++
  81.     public int item1 = EventSystem.ITEM1; //make config++
  82.     public int item2 = EventSystem.ITEM2; //make config++
  83.     public int quantity1 = EventSystem.QUANTITY1; //make config++
  84.     public int quantity2 = EventSystem.QUANTITY2; // make config++
  85.     public FastMap<Integer, Player> players = new FastMap<Integer, Player>();
  86.  
  87.     public static ArenaMasterService getInstance(){
  88.         return service;
  89.     }
  90.  
  91.     //make a way to count the kill counts and the winner and also if its TIE
  92.  
  93.     public boolean onDie(Player attacker, Creature attacked){
  94.         deathPacket((Player) attacked);
  95.         onDeath(attacker, attacked);
  96.         return true;
  97.     }
  98.  
  99.     public void onPlayerLogOut(Player player){
  100.         player.setInPkMode(false);
  101.         player.setInDuelArena(false);
  102.         player.setArenaTie(false);
  103.         player.setWinCount(0);
  104.         setRound(player, 0);
  105.         for (int world : OneVsOneStruct.worldid){
  106.             if(player.getWorldId() == world){
  107.                 final Player opponent = getPlayerFighterFromList(player);
  108.                 if(opponent != null){
  109.                     if (opponent.getInstanceId() == player.getInstanceId() || containsInTheList(player)){
  110.                         OneVsOneService.getInstance().announceOneOnly(opponent, ArenaMaster, "You're Opponent has been disconnected , You'll be ported back to bind spot in 5sec!");
  111.                         freezeForSec(opponent, 5);
  112.                         ThreadPoolManager.getInstance().schedule(new Runnable() {
  113.                             @Override
  114.                             public void run() {
  115.                                 teleportOut(opponent);
  116.                             }
  117.                         }, 5000);
  118.                     }
  119.                 }
  120.             }
  121.         }
  122.         onLeaveInstance(player);
  123.     }
  124.  
  125.     public void onLeaveInstance(Player player){
  126.         if(!EventSystem.ENABLE_ONEVONE){
  127.             return;
  128.         }
  129.         for (int world : OneVsOneStruct.worldid){
  130.             if(player.getWorldId() != world){
  131.                 return;
  132.             }
  133.         }
  134.         removePlayerFromFastList(player);
  135.         player.setInPkMode(false);
  136.         player.setWinCount(0);
  137.         setRound(player, 0);
  138.         player.setInDuelArena(false);
  139.         TeleportService2.moveToBindLocation(player, false);
  140.     }
  141.  
  142.     public void onDeath(final Player attacker, final Creature attacked){
  143.         if (attacker.isInDuelArena() && ((Player) attacked).isInDuelArena()){
  144.             if (attacker.getArenaRound() >= 3){
  145.                 freezeForSec(attacker, 6);
  146.                 freezeForSec((Player) attacked, 6);
  147.                 giveLeaveMessages(attacker, (Player) attacked);
  148.                 giveRewards(attacker, (Player) attacked);
  149.                 ThreadPoolManager.getInstance().schedule(new Runnable() { // teleport them out after 3 round.. after 5sec delay
  150.                     @Override
  151.                     public void run() {
  152.                         teleportOut(attacker);
  153.                         teleportOut((Player) attacked);
  154.                     }
  155.                 }, 5000);
  156.             }else{
  157.                 freezeForSec(attacker, 15);
  158.                 freezeForSec((Player) attacked, 15);
  159.                 sendSeperateWinLoseMsg(attacker, (Player) attacked);
  160.                 ThreadPoolManager.getInstance().schedule(new Runnable() {
  161.                     @Override
  162.                     public void run() {
  163.                         giveWinnerMessageAndCheckRound(attacker, (Player) attacked);
  164.                     }
  165.                 }, 10000); //10sec
  166.             }
  167.         }
  168.     }
  169.  
  170.     private boolean isTie(Player p1, Player p2){
  171.         return p1.isArenaTie() && p2.isArenaTie();
  172.     }
  173.  
  174.     private void sendSeperateWinLoseMsg(Player winner, Player loser){
  175.         if(isTie(winner, loser)){
  176.             OneVsOneService.getInstance().announceSpecificTwoOnly(winner, loser, ArenaMaster, "No Winner has been Found in this Round!!");
  177.             freezeForSec(winner, 10);
  178.             freezeForSec(loser, 10);
  179.             return;
  180.         }
  181.         OneVsOneService.getInstance().announceOneOnly(winner, ArenaMaster, "You are the winner of this round!");
  182.         OneVsOneService.getInstance().announceOneOnly(loser, ArenaMaster, "You've lost this round!");
  183.     }
  184.  
  185.     private void deathPacket(Player player){
  186.         player.getLifeStats().setCurrentHpPercent(100);
  187.         player.getLifeStats().sendHpPacketUpdate();
  188.         player.getLifeStats().updateCurrentStats();
  189.         PacketSendUtility.sendPacket(player, new SM_EMOTION(player, EmotionType.DIE, 0, player.getX(), player.getY(), player.getZ(), player.getHeading(), player.getTarget().getObjectId()));
  190.         //PacketSendUtility.sendPacket(player, new SM_DIE(false, false, 0 , 0));
  191.     }
  192.  
  193.     private void giveRewards(Player winner, Player loser){ //make config for AP, GP , or ITEM REWARD
  194.         int rnd = Rnd.get(1, 20);
  195.         Player winz = getWinnerPlayer(winner, loser);
  196.         Player lost = getLoserPlayer(winner, loser);
  197.         if(winz.getWinCount() == lost.getWinCount()){ // if its a tie, give lose AP/GP reward for both, no ItemReward and no toll reward
  198.             OneVsOneService.getInstance().announceSpecificTwoOnly(winner, loser, ArenaMaster, "No one Won This Round, its a TIE!");
  199.             if(EventSystem.ENABLE_AP_REWARD){
  200.                 AbyssPointsService.addAp(winz, EventSystem.AP_REWARD / 2);
  201.                 AbyssPointsService.addAp(lost, EventSystem.AP_REWARD / 2);
  202.             }
  203.             if(EventSystem.ENABLE_GP_REWARD){
  204.                 AbyssPointsService.addGp(winz, EventSystem.GP_REWARD / 2);
  205.                 AbyssPointsService.addGp(lost, EventSystem.GP_REWARD / 2);
  206.             }
  207.             return;
  208.         }
  209.  
  210.         if (EventSystem.ITEMREWARD_ENABLE){ // The item reward is not a 100% reward that you get, there is chance that you will get it or not
  211.             if(rnd == 18){
  212.                 ItemService.addItem(winz, item1, quantity1);
  213.             }else if (rnd == 11){
  214.                 ItemService.addItem(winz, item1, quantity1);
  215.             }else if (rnd == 4){
  216.                 ItemService.addItem(winz, item1, quantity1);
  217.             }else if (rnd == 14){
  218.                 ItemService.addItem(winz, item2, quantity2);
  219.             }else if (rnd == 1){
  220.                 ItemService.addItem(winz, item2, quantity2);
  221.             }
  222.         }
  223.  
  224.         // Reward for Winners/losers
  225.         if(EventSystem.ENABLE_AP_REWARD){
  226.             AbyssPointsService.addAp(winz, EventSystem.AP_REWARD);
  227.             AbyssPointsService.addAp(lost, EventSystem.AP_REWARD / 2);
  228.         }
  229.         if(EventSystem.ENABLE_GP_REWARD){
  230.             AbyssPointsService.addGp(winz, EventSystem.GP_REWARD);
  231.             AbyssPointsService.addGp(lost, EventSystem.GP_REWARD / 2);
  232.         }
  233.         if(EventSystem.ENABLE_TOLL_REWARD){
  234.             InGameShopEn.getInstance().addToll(winz, EventSystem.TOLL_REWARD);
  235.             InGameShopEn.getInstance().addToll(lost, EventSystem.TOLL_REWARD / 2);
  236.         }
  237.     }
  238.  
  239.     private void giveLeaveMessages(final Player p1, final Player p2){
  240.         if (p1.getLifeStats().isAlreadyDead()){
  241.             p1.setPlayerResActivate(true);
  242.             PacketSendUtility.sendPacket(p1, new SM_RESURRECT(p2));
  243.             PlayerReviveService.skillRevive(p1);
  244.         }
  245.         if (p2.getLifeStats().isAlreadyDead()){
  246.             p2.setPlayerResActivate(true);
  247.             PacketSendUtility.sendPacket(p2, new SM_RESURRECT(p1));
  248.             PlayerReviveService.skillRevive(p2);
  249.         }
  250.         sendTimerPacket(p1, p2, 0);
  251.  
  252.         int winCount = p1.getWinCount();
  253.         p1.setWinCount(winCount + 1);
  254.  
  255.         Player winner = getWinnerPlayer(p1, p2);
  256.         Player lose = getLoserPlayer(p1, p2);
  257.         if (winner == null){
  258.             OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "This match was a TIE, Better luck next time :) !!");
  259.         }else{
  260.             OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "The Winner of the match is " + winner.getName());
  261.             OneVsOneService.getInstance().announceOneOnly(lose, ArenaMaster, "You've Lost the match, But still you will get some Rewards !");
  262.         }
  263.     }
  264.  
  265.     public Player getWinnerPlayer(Player p1, Player p2){
  266.         if (p1.getWinCount() == p2.getWinCount()){
  267.             return null;
  268.         }else if (p1.getWinCount() >= 2){
  269.             return p1;
  270.         }else{
  271.             return p2;
  272.         }
  273.     }
  274.  
  275.     public Player getLoserPlayer(Player p1, Player p2){
  276.         if (p1.getWinCount() == p2.getWinCount()){
  277.             return null;
  278.         }else if (p1.getWinCount() >= 2){
  279.             return p2;
  280.         }else{
  281.             return p1;
  282.         }
  283.     }
  284.  
  285.     private void HealPlayer(Player player1, boolean sendUpdatePacket) {
  286.         player1.getLifeStats().setCurrentHpPercent(100);
  287.         player1.getLifeStats().setCurrentMpPercent(100);
  288.  
  289.         if (sendUpdatePacket) {
  290.             player1.getLifeStats().sendHpPacketUpdate();
  291.             player1.getLifeStats().sendMpPacketUpdate();
  292.         }
  293.     }
  294.  
  295.     private void setTie(Player p1, Player p2, boolean tieState){
  296.         p1.setArenaTie(tieState);
  297.         p2.setArenaTie(tieState);
  298.     }
  299.  
  300.     private void giveWinnerMessageAndCheckRound(final Player Winp1, final Player Losep2){
  301.         //if(round == 1){ // just to make sure if winCount is 0, starting from first round, to count
  302.             //Winp1.setWinCount(0);
  303.         //}
  304.         if(isTie(Winp1, Losep2)){
  305.             OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "The winner of this round is ______ :)");
  306.             setTie(Winp1, Losep2, false);
  307.         }else{
  308.             int winCount = Winp1.getWinCount();
  309.             Winp1.setWinCount(winCount + 1);
  310.             OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "The winner of this round is " + Winp1.getName());
  311.         }
  312.  
  313.  
  314.         log.info("CURRENT ROUND AFTER DEATH = " + Winp1.getArenaRound());
  315.         increaseRound(Winp1, Losep2);
  316.         log.info("ROUND ADDED with 1 and RESULT = " + Losep2.getArenaRound());
  317.  
  318.         if(Winp1.getArenaRound() == 2){
  319.             sendTimerPacket(Winp1, Losep2, 305);
  320.             ThreadPoolManager.getInstance().schedule(new Runnable() {
  321.                 @Override
  322.                 public void run() {
  323.                     if (Winp1.getArenaRound() == 2 && Losep2.isInDuelArena()) {
  324.                         freezeForSec(Winp1, 3);
  325.                         freezeForSec(Losep2, 3);
  326.                         OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "Guess no one was able to kill anyone!!");
  327.                         ThreadPoolManager.getInstance().schedule(new Runnable() {
  328.                             @Override
  329.                             public void run() {
  330.                                 portThemAsideForNextRound(Winp1, Losep2);
  331.                                 freezeForSec(Winp1, 5);
  332.                                 freezeForSec(Losep2, 5);
  333.                                 setTie(Winp1, Losep2, true);
  334.                                 onDeath(Winp1, Losep2);
  335.                             }
  336.                         }, 3000);
  337.                     }
  338.                 }
  339.             }, 305000);
  340.             OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "Round 2 will be Starting...");
  341.             ThreadPoolManager.getInstance().schedule(new Runnable() {
  342.                 @Override
  343.                 public void run() {
  344.                     portThemAsideForNextRound(Winp1, Losep2);
  345.                 }
  346.             }, 3000);
  347.             ThreadPoolManager.getInstance().schedule(new Runnable() {
  348.                 @Override
  349.                 public void run() {
  350.                     portThemAsideForNextRound(Winp1, Losep2);
  351.                     OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "3..");
  352.                     ThreadPoolManager.getInstance().schedule(new Runnable() {
  353.                         @Override
  354.                         public void run() {
  355.                             OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "2..");
  356.                             ThreadPoolManager.getInstance().schedule(new Runnable() {
  357.                                 @Override
  358.                                 public void run() {
  359.                                     OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "1..");
  360.                                     ThreadPoolManager.getInstance().schedule(new Runnable() {
  361.                                         @Override
  362.                                         public void run() {
  363.                                             OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "FIGHT!!");
  364.                                         }
  365.                                     }, 1000);
  366.                                 }
  367.                             }, 1000);
  368.                         }
  369.                     }, 1000);
  370.                 }
  371.             }, 2 * 1000);
  372.         }
  373.  
  374.         if (Winp1.getArenaRound() == 3) {
  375.             ThreadPoolManager.getInstance().schedule(new Runnable() {
  376.                 @Override
  377.                 public void run() {
  378.                     if (Winp1.getArenaRound() == 3 && Losep2.isInDuelArena()) {
  379.                         freezeForSec(Winp1, 3);
  380.                         freezeForSec(Losep2, 3);
  381.                         OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "Guess no one was able to kill anyone, This Round Will be TIE !!");
  382.                         ThreadPoolManager.getInstance().schedule(new Runnable() {
  383.                             @Override
  384.                             public void run() {
  385.                                 portThemAsideForNextRound(Winp1, Losep2);
  386.                                 freezeForSec(Winp1, 5);
  387.                                 freezeForSec(Losep2, 5);
  388.                                 setTie(Winp1, Losep2, true);
  389.                                 onDeath(Winp1, Losep2);
  390.                             }
  391.                         }, 3000);
  392.                     }
  393.                 }
  394.             }, 305000);
  395.             OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "Final Round starting in...");
  396.             ThreadPoolManager.getInstance().schedule(new Runnable() {
  397.                 @Override
  398.                 public void run() {
  399.                     ThreadPoolManager.getInstance().schedule(new Runnable() {
  400.                         @Override
  401.                         public void run() {
  402.                             portThemAsideForNextRound(Winp1, Losep2);
  403.                         }
  404.                     }, 3000);
  405.                     OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "3..");
  406.                     ThreadPoolManager.getInstance().schedule(new Runnable() {
  407.                         @Override
  408.                         public void run() {
  409.                             OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "2..");
  410.                             ThreadPoolManager.getInstance().schedule(new Runnable() {
  411.                                 @Override
  412.                                 public void run() {
  413.                                     OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "1..");
  414.                                     ThreadPoolManager.getInstance().schedule(new Runnable() {
  415.                                         @Override
  416.                                         public void run() {
  417.                                             OneVsOneService.getInstance().announceSpecificTwoOnly(Winp1, Losep2, ArenaMaster, "FIGHT!!");
  418.                                         }
  419.                                     }, 1000);
  420.                                 }
  421.                             }, 1000);
  422.                         }
  423.                     }, 1000);
  424.                 }
  425.             }, 2 * 1000);
  426.             sendTimerPacket(Winp1, Losep2, 305);
  427.         }
  428.     }
  429.  
  430.     private void portThemAsideForNextRound(Player p1, Player p2){
  431.         if(p1.getLifeStats().isAlreadyDead()){
  432.             p1.setPlayerResActivate(true);
  433.             PacketSendUtility.sendPacket(p1, new SM_RESURRECT(p2));
  434.             PlayerReviveService.skillRevive(p1);
  435.         }
  436.         if(p2.getLifeStats().isAlreadyDead()){
  437.             p2.setPlayerResActivate(true);
  438.             PacketSendUtility.sendPacket(p1, new SM_RESURRECT(p1));
  439.             PlayerReviveService.skillRevive(p2);
  440.         }
  441.         HealPlayer(p1, true);
  442.         HealPlayer(p2, true);
  443.         p1.getGameStats().updateStatsAndSpeedVisually();
  444.         p2.getGameStats().updateStatsAndSpeedVisually();
  445.         p1.getEffectController().updatePlayerEffectIconsImpl();
  446.         p2.getEffectController().updatePlayerEffectIconsImpl();
  447.         if (p1.getWorldId() == OneVsOneStruct.worldid[0]){
  448.             TeleportService2.teleportTo(p1, OneVsOneStruct.worldid[0], (float) loc1.getX(), (float) loc1.getY(), (float) loc1.getZ());
  449.             TeleportService2.teleportTo(p2, OneVsOneStruct.worldid[0], (float) loc2.getX(), (float) loc2.getY(), (float) loc2.getZ());
  450.         }else if(p1.getWorldId() == OneVsOneStruct.worldid[1]){
  451.             TeleportService2.teleportTo(p1, OneVsOneStruct.worldid[1], (float) loc21.getX(), (float) loc21.getY(), (float) loc21.getZ());
  452.             TeleportService2.teleportTo(p2, OneVsOneStruct.worldid[1], (float) loc22.getX(), (float) loc22.getY(), (float) loc22.getZ());
  453.         }else if(p1.getWorldId() == OneVsOneStruct.worldid[2]){
  454.             TeleportService2.teleportTo(p1, OneVsOneStruct.worldid[2], (float) loc31.getX(), (float) loc31.getY(), (float) loc31.getZ());
  455.             TeleportService2.teleportTo(p2, OneVsOneStruct.worldid[2], (float) loc32.getX(), (float) loc32.getY(), (float) loc32.getZ());
  456.         }
  457.         sendTimerPacket(p1, p2, 305);
  458.     }
  459.  
  460.     //you have 5sec to give all the msg about winner and all
  461.     private void freezeForSec(final Player alivePlayer, int DelaySeconds){
  462.         alivePlayer.getEffectController().setAbnormal(AbnormalState.PARALYZE.getId());
  463.         alivePlayer.getEffectController().updatePlayerEffectIcons();
  464.         alivePlayer.getEffectController().broadCastEffects();
  465.         ThreadPoolManager.getInstance().schedule(new Runnable() {
  466.             @Override
  467.             public void run() {
  468.                 unFreeze(alivePlayer);
  469.             }
  470.         }, DelaySeconds * 1000);
  471.     }
  472.  
  473.     private void unFreeze(Player alivePlayer){
  474.         alivePlayer.getEffectController().unsetAbnormal(AbnormalState.PARALYZE.getId());
  475.         alivePlayer.getEffectController().updatePlayerEffectIcons();
  476.         alivePlayer.getEffectController().broadCastEffects();
  477.     }
  478.  
  479.     public void teleportIn(Player player1, Player player2) {
  480.         int random = Rnd.get(1, EventSystem.ONEVSONE_MAPCNT);
  481.         if (random == 1) { // if it is 1 = Sanctum Arena
  482.             instance = createNewInstance();
  483.             previousLocations.put(player1.getObjectId(), player1.getPosition());
  484.             previousLocations.put(player2.getObjectId(), player2.getPosition());
  485.             TeleportService2.teleportTo(player1, OneVsOneStruct.worldid[0], instance.getInstanceId(), (float) loc1.getX(), (float) loc1.getY(), (float) loc1.getZ());
  486.             TeleportService2.teleportTo(player2, OneVsOneStruct.worldid[0], instance.getInstanceId(), (float) loc2.getX(), (float) loc2.getY(), (float) loc2.getZ());
  487.         }else if(random == 2){ // Aturam Skyfortress Map
  488.             instance = createNewInstance2();
  489.             previousLocations.put(player1.getObjectId(), player1.getPosition());
  490.             previousLocations.put(player2.getObjectId(), player2.getPosition());
  491.             TeleportService2.teleportTo(player1, OneVsOneStruct.worldid[1], instance.getInstanceId(), (float) loc21.getX(), (float) loc21.getY(), (float) loc21.getZ());
  492.             TeleportService2.teleportTo(player2, OneVsOneStruct.worldid[1], instance.getInstanceId(), (float) loc22.getX(), (float) loc22.getY(), (float) loc22.getZ());
  493.         }else if(random == 3){ // Padma cave
  494.             instance = createNewInstance3();
  495.             previousLocations.put(player1.getObjectId(), player1.getPosition());
  496.             previousLocations.put(player2.getObjectId(), player2.getPosition());
  497.             TeleportService2.teleportTo(player1, OneVsOneStruct.worldid[2], instance.getInstanceId(), (float) loc31.getX(), (float) loc31.getY(), (float) loc31.getZ());
  498.             TeleportService2.teleportTo(player2, OneVsOneStruct.worldid[2], instance.getInstanceId(), (float) loc32.getX(), (float) loc32.getY(), (float) loc32.getZ());
  499.         }
  500.         players.put(player1.getObjectId(), player2);
  501.         player1.setWinCount(0);
  502.         player2.setWinCount(0);
  503.         getReady(player1, player2);
  504.         HealPlayer(player1, true);
  505.         HealPlayer(player2, true);
  506.         freezeForSec(player1, 16);
  507.         freezeForSec(player2, 16);
  508.         sendTimerPacket(player1, player2, 315);
  509.         giveStartMsg(player1, player2);
  510.     }
  511.  
  512.     private Player getPlayerFighterFromList(Player p1){
  513.         return players.get(p1.getObjectId());
  514.     }
  515.  
  516.     private void removePlayerFromFastList(Player p1){
  517.         if (players.containsKey(p1.getObjectId())){
  518.             players.remove(p1.getObjectId());
  519.         }
  520.     }
  521.  
  522.     private boolean containsInTheList(Player p1){
  523.         if (players.containsKey(p1.getObjectId())){
  524.             return true;
  525.         }else{
  526.             return false;
  527.         }
  528.     }
  529.  
  530.     private void sendTimerPacket(Player p1, Player p2, int timer){
  531.         if(p1 != null){
  532.             PacketSendUtility.sendPacket(p1, new SM_QUEST_ACTION(0, timer));
  533.         }
  534.         if(p2 != null){
  535.             PacketSendUtility.sendPacket(p2, new SM_QUEST_ACTION(0, timer));
  536.         }
  537.     }
  538.  
  539.     private void setRound(Player player1, int Round){
  540.         player1.setArenaRound(Round);
  541.     }
  542.  
  543.     private void increaseRound(Player player1, Player player2){
  544.         int p1Round = player1.getArenaRound();
  545.         int p2Round = player2.getArenaRound();
  546.         int p1Final = p1Round + 1;
  547.         int p2Final = p2Round + 1;
  548.  
  549.         player1.setArenaRound(p1Final);
  550.         player2.setArenaRound(p2Final);
  551.     }
  552.  
  553.     private void giveStartMsg(final Player p1, final Player p2){
  554.         p1.setArenaRound(1);
  555.         p2.setArenaRound(1);
  556.         ThreadPoolManager.getInstance().schedule(new Runnable() {
  557.             @Override
  558.             public void run() {
  559.                 if (p1.getArenaRound() == 1 && p1.isInDuelArena()){
  560.                     freezeForSec(p1, 3);
  561.                     freezeForSec(p2, 3);
  562.                     OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "Guess no one was able to kill anyone in First Round !!");
  563.                     ThreadPoolManager.getInstance().schedule(new Runnable() {
  564.                         @Override
  565.                         public void run() {
  566.                             portThemAsideForNextRound(p1, p2);
  567.                             freezeForSec(p1, 5);
  568.                             freezeForSec(p2, 5);
  569.                             setTie(p1, p2, true);
  570.                             onDeath(p1, p2);
  571.                         }
  572.                     }, 3000);
  573.                 }
  574.             }
  575.         }, 315000); // 315 sec
  576.         OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "There will be 3 Rounds of Fight, The player who wins the most round will be the Winner!!");
  577.         ThreadPoolManager.getInstance().schedule(new Runnable() {
  578.             @Override
  579.             public void run() {
  580.                 OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "Now Starting Round 1 in...");
  581.                 ThreadPoolManager.getInstance().schedule(new Runnable() {
  582.                     @Override
  583.                     public void run() {
  584.                         OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "5..");
  585.                         ThreadPoolManager.getInstance().schedule(new Runnable() {
  586.                             @Override
  587.                             public void run() {
  588.                                 OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "4..");
  589.                                 ThreadPoolManager.getInstance().schedule(new Runnable() {
  590.                                     @Override
  591.                                     public void run() {
  592.                                         OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "3..");
  593.                                         ThreadPoolManager.getInstance().schedule(new Runnable() {
  594.                                             @Override
  595.                                             public void run() {
  596.                                                 OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "2..");
  597.                                                 ThreadPoolManager.getInstance().schedule(new Runnable() {
  598.                                                     @Override
  599.                                                     public void run() {
  600.                                                         OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "1..");
  601.                                                         ThreadPoolManager.getInstance().schedule(new Runnable() {
  602.                                                             @Override
  603.                                                             public void run() {
  604.                                                                 OneVsOneService.getInstance().announceSpecificTwoOnly(p1, p2, ArenaMaster, "FIGHT!!");
  605.                                                             }
  606.                                                         }, 1000);
  607.                                                     }
  608.                                                 }, 1000);
  609.                                             }
  610.                                         }, 1000);
  611.                                     }
  612.                                 }, 1000);
  613.                             }
  614.                         }, 1000);
  615.                     }
  616.                 }, 5 * 1000);
  617.             }
  618.         }, 5 * 1000);
  619.     }
  620.  
  621.     public void teleportOut(Player player1){
  622.         setRound(player1, 0);
  623.         player1.setInPkMode(false);
  624.         player1.setInDuelArena(false);
  625.         player1.setArenaTie(false);
  626.         player1.setWinCount(0);
  627.         sendTimerPacket(player1, null, 0);
  628.         WorldPosition pos1 = previousLocations.get(player1.getObjectId());
  629.         if (pos1 != null){
  630.             TeleportService2.teleportTo(player1, pos1.getMapId(), pos1.getX(), pos1.getY(), pos1.getZ(), pos1.getHeading());
  631.         }else{
  632.             TeleportService2.moveToBindLocation(player1, true);
  633.         }
  634.         removePlayerFromFastList(player1);
  635.         LeavingPlayer(player1);
  636.     }
  637.  
  638.     protected WorldMapInstance createNewInstance(){
  639.         instance = InstanceService.getNextAvailableInstance(OneVsOneStruct.worldid[0]);
  640.         return instance;
  641.     }
  642.  
  643.     protected WorldMapInstance createNewInstance2(){
  644.         instance = InstanceService.getNextAvailableInstance(OneVsOneStruct.worldid[1]);
  645.         return instance;
  646.     }
  647.  
  648.     protected WorldMapInstance createNewInstance3(){
  649.         instance = InstanceService.getNextAvailableInstance(OneVsOneStruct.worldid[2]);
  650.         return instance;
  651.     }
  652.  
  653.     private void getReady(Player p1, Player p2){ // add removecd without xform skills
  654.         // setting player 1 up
  655.         p1.getController().cancelCurrentSkill();
  656.         p1.setInPkMode(true);
  657.         p1.setInDuelArena(true);
  658.         p1.getEffectController().removeAbnormalEffectsByTargetSlot(SkillTargetSlot.DEBUFF);
  659.         p1.getEffectController().removeAbnormalEffectsByTargetSlot(SkillTargetSlot.BUFF);
  660.         p1.getCommonData().setDp(0);
  661.         if (EventSystem.ENABLE_REMOVECD){
  662.             resetSkills(p1);
  663.         }
  664.  
  665.         // setting player 2 up
  666.         p2.getController().cancelCurrentSkill();
  667.         p2.setInPkMode(true);
  668.         p2.setInDuelArena(true);
  669.         p2.getEffectController().removeAbnormalEffectsByTargetSlot(SkillTargetSlot.DEBUFF);
  670.         p2.getEffectController().removeAbnormalEffectsByTargetSlot(SkillTargetSlot.BUFF);
  671.         p2.getCommonData().setDp(0);
  672.         if (EventSystem.ENABLE_REMOVECD){
  673.             resetSkills(p2);
  674.         }
  675.     }
  676.  
  677.     private void resetSkills(Player player1){
  678.         List<Integer> delayIds = new ArrayList<Integer>();
  679.         if (player1.getSkillCoolDowns() != null) {
  680.             long currentTime = System.currentTimeMillis();
  681.             for (Map.Entry<Integer, Long> en : player1.getSkillCoolDowns().entrySet()) {
  682.  
  683.                 delayIds.add(en.getKey());
  684.  
  685.                 if (!EventSystem.TOUCH_XFORM_SKILL){
  686.                     if(delayIds.contains(11885) || delayIds.contains(11886) || delayIds.contains(11887) || delayIds.contains(11888) || delayIds.contains(11889) ||
  687.                             delayIds.contains(11890) || delayIds.contains(11891) || delayIds.contains(11892) || delayIds.contains(11893) || delayIds.contains(11894)){
  688.                         delayIds.remove(en.getKey());
  689.                     }
  690.                 }
  691.             }
  692.  
  693.             for (Integer delayId : delayIds) {
  694.                 player1.setSkillCoolDown(delayId, currentTime);
  695.             }
  696.  
  697.             delayIds.clear();
  698.             PacketSendUtility.sendPacket(player1, new SM_SKILL_COOLDOWN(player1.getSkillCoolDowns()));
  699.         }
  700.     }
  701.  
  702.     private void LeavingPlayer(Player p1){
  703.         // setting player 1 up
  704.         p1.getController().cancelCurrentSkill();
  705.         p1.getLifeStats().setCurrentHpPercent(100);
  706.         p1.getLifeStats().setCurrentMpPercent(100);
  707.     }
  708.  
  709.  
  710. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement