Don't like ads? PRO users don't see any ads ;-)
Guest

Faith - Poser/Utiliser/Téléporter Prisme

By: falyptus on Jun 11th, 2012  |  syntax: Java  |  size: 5.61 KB  |  hits: 55  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /**
  2. *
  3. *@author Keal - Falyptus
  4. */
  5.  
  6. // Pose de prisme -> Action.java -> apply()
  7. case 95://Poser un prisme
  8.         DofusMap map = perso.getCurCarte();
  9.         SubArea subArea = map.getSubArea();
  10.         if(!Conquest.CanDepositPrism(perso.getActorId(), subArea.getId()))
  11.                 break;
  12.         int templatePrism = Integer.parseInt(args);
  13.         perso.removeByTemplateID(templatePrism, 1);
  14.         Prism prism = new Prism(World.getNewPrismId(), perso.getAlign(), (byte)perso.getALvl(), map.getId(), perso.getCurCell().getID());
  15.         World.addPrism(prism);
  16.         map.addPrism(prism);
  17.         subArea.setAlignement(prism.getAlign());
  18.         subArea.setPrism(prism);
  19.         SocketManager.GAME_SEND_MAP_PRISM_GM_PACKET(map);
  20.         SQLManager.SAVE_PRISM(prism);
  21.         break;
  22.  
  23. //Condition pour poser un prisme -> World.java -> CanDepositPrism()
  24. public static boolean CanDepositPrism(int playerId, int id) {
  25.         SubArea subArea = World.getSubArea(id);
  26.         Player out = World.getPersonnage(playerId);
  27.         boolean toReturn = true;
  28.         if(out.getLvl() < 10 || out.getALvl() < 3)
  29.         {
  30.                 SocketManager.GAME_SEND_Im_PACKET(out, "1155");
  31.                 toReturn = false;
  32.         }
  33.         if(toReturn && !out.isShowingWings() || out.getLastTimeShowWings() - 300000 < 0)
  34.         {
  35.                 SocketManager.GAME_SEND_Im_PACKET(out, "1148");
  36.                 toReturn = false;
  37.         }
  38.         if(toReturn && subArea.getPrism() != null)
  39.         {
  40.                 SocketManager.GAME_SEND_Im_PACKET(out, "1149");
  41.                 toReturn = false;
  42.         }
  43.         if(toReturn && out.getCurCarte().getPlacesStr().length() < 5)
  44.         {
  45.                 SocketManager.GAME_SEND_Im_PACKET(out, "1145");
  46.                 toReturn = false;
  47.         }
  48.         Alignment alignment = World.getAlignment(subArea.getAlignement());
  49.         if(toReturn && alignment.getSubAreasOwned()-alignment.getAreasOwned()+1
  50.                         < 17*alignment.getAreasOwned())
  51.         {
  52.                 SocketManager.GAME_SEND_Im_PACKET(out, "1152");
  53.                 toReturn = false;
  54.         }
  55.         if(toReturn)
  56.         {
  57.                 int numbEnemies = 0;
  58.                 int otherAlign = out.getAlign() == 1 ? 2 : 1;
  59.                 for(Player player : subArea.getPlayers())
  60.                 {
  61.                         if(player.getAlign() == otherAlign)
  62.                         {
  63.                                 numbEnemies++;
  64.                                 if(numbEnemies == 20)
  65.                                         break;
  66.                         }
  67.                 }
  68.                 if(numbEnemies == 20)
  69.                 {
  70.                         SocketManager.GAME_SEND_Im_PACKET(out, "1153");
  71.                         toReturn = false;
  72.                 }
  73.         }
  74.         //TODO: Check des territoires adjacents.
  75.         return toReturn;
  76. }
  77.         }
  78.  
  79. // Utiliser un prisme -> GameThread.java -> parseGameActionPacket()
  80. case 512://Utiliser un prisme
  81.         game_use_prism();
  82.         break;
  83.  
  84. private void game_use_prism() {
  85.         StringBuilder packet = new StringBuilder(10*World.getPrisms().size());
  86.         Prism prism = _player.getCurCarte().getPrism();
  87.         if(prism == null || prism.getAlign() != _player.getAlign() || prism.getFight() != null)
  88.         {
  89.                 SocketManager.GAME_SEND_Im_PACKET(_player, "1143");
  90.                 return;
  91.         }
  92.         if(!_player.isShowingWings())
  93.         {
  94.                 SocketManager.GAME_SEND_Im_PACKET(_player, "1144");
  95.                 return;
  96.         }
  97.         String subAreaImpossible = ",161,162,163,164,165,166,167,";
  98.         for(Prism curPrism : World.getPrisms().values()) {
  99.                 if(curPrism == null)
  100.                         continue;
  101.                 DofusMap mapPrism = World.getMap(curPrism.getMapId());
  102.                 int subArea = World.getMap(curPrism.getMapId()).getSubArea().getId();
  103.                 if(curPrism.getId() == prism.getId() || mapPrism.hasEndFightAction(0)) //FIXME Si c'est une map de donjon (pas forcément car des maps peuvent avoir des actions de tp sans pour autant être un dj)
  104.                         continue;
  105.                 if(subAreaImpossible.contains(","+subArea+","))
  106.                         continue;
  107.                 if(curPrism.getAlign() == _player.getAlign())
  108.                 {
  109.                         packet.append('|').append(curPrism.getMapId()).append(';')
  110.                         .append(Formulas.calculPrismCost(_player.getCurCarte(), mapPrism,
  111.                                         _player.getALvl()));
  112.                 }
  113.         }
  114.         SocketManager.GAME_SEND_SUBWAY_PRISM_CREATE(_player, packet.toString());
  115. }
  116.  
  117. //Création d'un transport de prisme/Quitter un prisme après téléportation -> GameThread.java -> parseWaypointPacket()
  118. case 'p':
  119.         Waypoint_prismCreate(packet);
  120.         break;
  121. case 'w':
  122.         Waypoint_prismQuit();
  123.         break;
  124.  
  125. private void Waypoint_prismCreate(String packet)
  126. {
  127.         if (_player.getDeshonor() >= 2)
  128.         {
  129.                 SocketManager.GAME_SEND_Im_PACKET(_player, "183");
  130.                 return;
  131.         }
  132.         if(!_player.isShowingWings())
  133.         {
  134.                 SocketManager.GAME_SEND_Im_PACKET(_player, "1144");
  135.                 return;
  136.         }
  137.         Prism prism = World.getMap(Integer.parseInt(packet.substring(2))).getPrism();
  138.         if(prism == null) return;
  139.         int price = Formulas.calculPrismCost(_player.getCurCarte(), World.getMap(prism.getMapId()), _player);
  140.         if(_player.getKamas() - price < 0)
  141.         {
  142.                 SocketManager.GAME_SEND_Im_PACKET(_player, "182");
  143.                 return;
  144.         }
  145.         SocketManager.GAME_SEND_Wp_PACKET(_player, prism.getMapId());
  146.         _player.teleport(prism.getMapId(), prism.getCellId()+1);
  147.         _player.setKamas(_player.getKamas() - price);
  148.         SocketManager.GAME_SEND_Im_PACKET(_player, "046");
  149.         SocketManager.GAME_SEND_SUBWAY_PRISM_EXIT(_player);
  150. }
  151.  
  152. private void Waypoint_prismQuit()
  153. {
  154.         SocketManager.GAME_SEND_SUBWAY_PRISM_EXIT(_player);
  155. }
  156.  
  157.  
  158. //Formule du calcul du coût du prisme -> Formulas.java -> calculPrismCost()
  159. public static int calculPrismCost(DofusMap map1, DofusMap map2, int aLvl)
  160. {
  161.         int cost = (25 * (Math.abs(map2.getX() - map1.getX())
  162.                 + Math.abs(map2.getY() - map1.getY()) - 1));
  163.         int bonusSoustract = 0;
  164.         double coef = 0.01;
  165.         for (int i = 0; i < aLvl; i++) {
  166.                 coef += 0.01;
  167.                 bonusSoustract += cost * coef;
  168.         }
  169.         cost -= bonusSoustract;
  170.         return cost;
  171. }
  172.  
  173. //Paquet qui affiche les Prismes leur données -> SocketManager.java -> GAME_SEND_SUBWAY_PRISM_CREATE()
  174. public static void GAME_SEND_SUBWAY_PRISM_CREATE(Player player, String data) {
  175.         String packet = "Wp"+data;
  176.         send(player, packet);
  177. }
  178.  
  179. //Paquet qui permet de quitter l'UI Prisme -> SocketManager.java -> GAME_SEND_SUBWAY_PRISM_EXIT()
  180. public static void GAME_SEND_SUBWAY_PRISM_EXIT(Player player)
  181. {
  182.         String packet = "Ww";
  183.         send(player, packet);
  184. }