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

Untitled

By: a guest on Jun 30th, 2012  |  syntax: None  |  size: 16.39 KB  |  hits: 15  |  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.         public String GetGE(int win)
  2.     {
  3.                 long time = System.currentTimeMillis() - _startTime;
  4.                 int initGUID = _init0.getGUID();
  5.                
  6.                 int type = Constants.FIGHT_TYPE_CHALLENGE;// toujours 0
  7.                 if(_type == Constants.FIGHT_TYPE_AGRESSION)//Sauf si gain d'honneur
  8.                         type = _type;
  9.                
  10.                 StringBuilder Packet = new StringBuilder();
  11.         Packet.append("GE").append(time).append("|").append(initGUID).append("|").append(type).append("|");
  12.         ArrayList<Fighter> TEAM1 = new ArrayList<Fighter>();
  13.         ArrayList<Fighter> TEAM2 = new ArrayList<Fighter>();
  14.         if(win == 1)
  15.         {
  16.                 TEAM1.addAll(_team0.values());
  17.                 TEAM2.addAll(_team1.values());
  18.         }
  19.         else
  20.         {
  21.                 TEAM1.addAll(_team1.values());
  22.                 TEAM2.addAll(_team0.values());
  23.         }
  24.         //Traque
  25.         Personnage curp = null;
  26.         for(Fighter F : TEAM1)
  27.         {
  28.                 if(F.isInvocation())continue;
  29.                 if(TEAM1.size() == 1) curp = F.getPersonnage();
  30.         }
  31.         for(Fighter F : TEAM2)
  32.         {
  33.                 if(F.isInvocation())continue;
  34.                 if(curp != null && curp.get_traque() != null && curp.get_traque().get_traqued() == F.getPersonnage())
  35.                 {
  36.                         SocketManager.GAME_SEND_MESSAGE(curp, "Thomas Sacre : Contrat fini, reviens me voir pour recuperer ta recompense.", "000000");
  37.                         curp.get_traque().set_traqued(null);
  38.                         curp.get_traque().set_time(-2);
  39.                 }
  40.         }
  41.         //fin
  42.         /* DEBUG
  43.         System.out.println("TEAM1: lvl="+TEAM1lvl);
  44.         System.out.println("TEAM2: lvl="+TEAM2lvl);
  45.         //*/
  46.         //DROP SYSTEM
  47.                 //Calcul de la PP de groupe
  48.                 int groupPP = 0,minkamas = 0,maxkamas = 0;
  49.                 for(Fighter F : TEAM1)if(!F.isInvocation() || (F.getMob() != null && F.getMob().getTemplate().getID() ==258))groupPP += F.getTotalStats().getEffect(Constants.STATS_ADD_PROS);
  50.                 if(groupPP <0)groupPP =0;
  51.                 //Calcul des drops possibles
  52.                 ArrayList<Drop> possibleDrops = new ArrayList<Drop>();
  53.                 for(Fighter F : TEAM2)
  54.                 {
  55.                         if(F.isInvocation() || F.getMob() == null)continue;
  56.                         minkamas += F.getMob().getTemplate().getMinKamas();
  57.                         maxkamas += F.getMob().getTemplate().getMaxKamas();
  58.                         for(Drop D : F.getMob().getDrops())
  59.                         {
  60.                                 if(D.getMinProsp() <= groupPP)
  61.                                 {
  62.                                         //On augmente le taux en fonction de la PP
  63.                                         int taux = (int)((groupPP * D.get_taux()*Ancestra.RATE_DROP)/100);
  64.                                         possibleDrops.add(new Drop(D.get_itemID(),0,taux,D.get_max()));
  65.                                 }
  66.                         }
  67.                 }
  68.                 //On Réordonne la liste en fonction de la PP
  69.                 ArrayList<Fighter> Temp = new ArrayList<Fighter>();
  70.                 Fighter curMax = null;
  71.                 while(Temp.size() < TEAM1.size())
  72.                 {
  73.                         int curPP = -1;
  74.                         for(Fighter F : TEAM1)
  75.                         {
  76.                                 //S'il a plus de PP et qu'il n'est pas listé
  77.                                 if(F.getTotalStats().getEffect(Constants.STATS_ADD_PROS) > curPP && !Temp.contains(F))
  78.                                 {
  79.                                         curMax = F;
  80.                                         curPP = F.getTotalStats().getEffect(Constants.STATS_ADD_PROS);
  81.                                 }
  82.                         }
  83.                         Temp.add(curMax);
  84.                 }
  85.                 //On enleve les invocs
  86.                 TEAM1.clear();
  87.                 TEAM1.addAll(Temp);
  88.                 /* DEBUG
  89.                 System.out.println("DROP: PP ="+groupPP);
  90.                 System.out.println("DROP: nbr="+possibleDrops.size());
  91.                 System.out.println("DROP: Kam="+totalkamas);
  92.                 //*/
  93.             //FIN DROP SYSTEM
  94.             //XP SYSTEM
  95.                 long totalXP = 0;
  96.                 for(Fighter F : TEAM2)
  97.                 {
  98.                         if(F.isInvocation() || F.getMob() == null)continue;
  99.                         totalXP += F.getMob().getBaseXp();
  100.                 }
  101.                 /* DEBUG
  102.                 System.out.println("TEAM1: xpTotal="+totalXP);
  103.                 //*/
  104.             //FIN XP SYSTEM
  105.                 //Capture d'âmes
  106.                 boolean mobCapturable = true;
  107.                 for(Fighter F : TEAM2)
  108.                 {
  109.                         try
  110.                         {
  111.                                 mobCapturable &= F.getMob().getTemplate().isCapturable();
  112.                         }catch (Exception e) {
  113.                                         mobCapturable = false;
  114.                                         break;
  115.                                 }
  116.                 }
  117.                 isCapturable |= mobCapturable;
  118.                
  119.                 if(isCapturable)
  120.                 {
  121.                         boolean isFirst = true;
  122.                         int maxLvl = 0;
  123.                         String pierreStats = "";
  124.  
  125.                        
  126.                         for(Fighter F : TEAM2)  //Création de la pierre et verifie si le groupe peut être capturé
  127.                         {
  128.                                 if(!isFirst)
  129.                                         pierreStats += "|";
  130.                                
  131.                                 pierreStats += F.getMob().getTemplate().getID() + "," + F.get_lvl();//Converti l'ID du monstre en Hex et l'ajoute au stats de la futur pierre d'âme
  132.                                
  133.                                 isFirst = false;
  134.                                
  135.                                 if(F.get_lvl() > maxLvl)        //Trouve le monstre au plus haut lvl du groupe (pour la puissance de la pierre)
  136.                                         maxLvl = F.get_lvl();
  137.                         }
  138.                         pierrePleine = new PierreAme(World.getNewItemGuid(),1,7010,Constants.ITEM_POS_NO_EQUIPED,pierreStats);  //Crée la pierre d'âme
  139.                        
  140.                         for(Fighter F : TEAM1)  //Récupère les captureur
  141.                         {
  142.                                 if(!F.isInvocation() && F.isState(Constants.ETAT_CAPT_AME))
  143.                                 {
  144.                                         _captureur.add(F);
  145.                                 }
  146.                         }
  147.                         if(_captureur.size() > 0 && !World.isArenaMap(get_map().get_id()))      //S'il y a des captureurs
  148.                         {
  149.                                 for (int i = 0; i < _captureur.size(); i++)
  150.                                 {
  151.                                         try
  152.                                         {
  153.                                                 Fighter f = _captureur.get(Formulas.getRandomValue(0, _captureur.size()-1));    //Récupère un captureur au hasard dans la liste
  154.                                                 if(!(f.getPersonnage().getObjetByPos(Constants.ITEM_POS_ARME).getTemplate().getType() == Constants.ITEM_TYPE_PIERRE_AME))
  155.                                                 {
  156.                                                         _captureur.remove(f);
  157.                                                         continue;
  158.                                                 }
  159.                                                 Couple<Integer,Integer> pierreJoueur = Formulas.decompPierreAme(f.getPersonnage().getObjetByPos(Constants.ITEM_POS_ARME));//Récupère les stats de la pierre équippé
  160.                                                
  161.                                                 if(pierreJoueur.second < maxLvl)        //Si la pierre est trop faible
  162.                                                 {
  163.                                                         _captureur.remove(f);
  164.                                                         continue;
  165.                                                 }
  166.                                                
  167.                                                 int captChance = Formulas.totalCaptChance(pierreJoueur.first, f.getPersonnage());
  168.                                                
  169.                                                 if(Formulas.getRandomValue(1, 100) <= captChance)       //Si le joueur obtiens la capture
  170.                                                 {
  171.                                                         //Retire la pierre vide au personnage et lui envoie ce changement
  172.                                                         int pierreVide = f.getPersonnage().getObjetByPos(Constants.ITEM_POS_ARME).getGuid();
  173.                                                         f.getPersonnage().deleteItem(pierreVide);
  174.                                                         SocketManager.GAME_SEND_REMOVE_ITEM_PACKET(f.getPersonnage(), pierreVide);
  175.                                                        
  176.                                                         captWinner = f._id;
  177.                                                         break;
  178.                                                 }
  179.                                         }
  180.                                         catch(NullPointerException e)
  181.                                         {
  182.                                                 continue;
  183.                                         }
  184.                                 }
  185.                         }
  186.                 }
  187.             //Fin Capture
  188.             for(Fighter i : TEAM1)
  189.                 {
  190.                 if(i.hasLeft()) continue;//Si il abandonne, il ne gagne pas d'xp
  191.                 if(i._double != null)continue;//Pas de double dans les gains
  192.                 if(type == Constants.FIGHT_TYPE_CHALLENGE)
  193.                 {
  194.                         if(i.isInvocation() && i.getMob() != null && i.getMob().getTemplate().getID() != 258)continue;
  195.                         long winxp      = Formulas.getXpWinPvm2(i,TEAM1,TEAM2,totalXP);
  196.                         AtomicReference<Long> XP = new AtomicReference<Long>();
  197.                         XP.set(winxp);
  198.                        
  199.                         long guildxp = Formulas.getGuildXpWin(i,XP);
  200.                         long mountxp = 0;
  201.  
  202.                         if(i.getPersonnage() != null && i.getPersonnage().isOnMount())
  203.                         {
  204.                                 mountxp = Formulas.getMountXpWin(i,XP);
  205.                                 i.getPersonnage().getMount().addXp(mountxp);
  206.                                 SocketManager.GAME_SEND_Re_PACKET(i.getPersonnage(),"+",i.getPersonnage().getMount());
  207.                         }
  208.                         int winKamas    = Formulas.getKamasWin(i,TEAM1,minkamas,maxkamas);
  209.                         String drops = "";
  210.                         //Drop system
  211.                         ArrayList<Drop> temp = new ArrayList<Drop>();
  212.                         temp.addAll(possibleDrops);
  213.                         Map<Integer,Integer> itemWon = new TreeMap<Integer,Integer>();
  214.                        
  215.                         for(Drop D : temp)
  216.                         {
  217.                                 int t = (int)(D.get_taux()*100);//Permet de gerer des taux>0.01
  218.                                 int jet = Formulas.getRandomValue(0, 100*100);
  219.                                 if(jet < t)
  220.                                 {
  221.                                         ObjTemplate OT = World.getObjTemplate(D.get_itemID());
  222.                                         if(OT == null)continue;
  223.                                         //on ajoute a la liste
  224.                                         itemWon.put(OT.getID(),(itemWon.get(OT.getID())==null?0:itemWon.get(OT.getID()))+1);
  225.                                        
  226.                                         D.setMax(D.get_max()-1);
  227.                                         if(D.get_max() == 0)possibleDrops.remove(D);
  228.                                 }
  229.                         }
  230.                         if(i._id == captWinner && pierrePleine != null) //S'il à capturé le groupe
  231.                         {
  232.                                 if(drops.length() >0)drops += ",";
  233.                                 drops += pierrePleine.getTemplate().getID()+"~"+1;
  234.                                 if(i.getPersonnage().addObjet(pierrePleine, false))
  235.                                         World.addObjet(pierrePleine, true);
  236.                         }
  237.                         for(Entry<Integer,Integer> entry : itemWon.entrySet())
  238.                         {
  239.                                 ObjTemplate OT = World.getObjTemplate(entry.getKey());
  240.                                 if(OT == null)continue;
  241.                                 if(drops.length() >0)drops += ",";
  242.                                 drops += entry.getKey()+"~"+entry.getValue();
  243.                                 Objet obj = OT.createNewItem(entry.getValue(), false);
  244.                                 if(i.getPersonnage().addObjet(obj, true))
  245.                                         World.addObjet(obj, true);
  246.                         }
  247.                         //fin drop system
  248.                         winxp = XP.get();
  249.                         if(winxp != 0 && i.getPersonnage() != null)
  250.                                 i.getPersonnage().addXp(winxp);
  251.                         if(winKamas != 0 && i.getPersonnage() != null)
  252.                                 i.getPersonnage().addKamas(winKamas);
  253.                         if(guildxp > 0 && i.getPersonnage().getGuildMember() != null)
  254.                                 i.getPersonnage().getGuildMember().giveXpToGuild(guildxp);
  255.  
  256.                         Packet.append("2;").append(i.getGUID()).append(";").append(i.getPacketsName()).append(";").append(i.get_lvl()).append(";").append((i.isDead() ?  "1" : "0" )).append(";");
  257.                         Packet.append(i.xpString(";")).append(";");
  258.                         Packet.append((winxp == 0?"":winxp)).append(";");
  259.                         Packet.append((guildxp == 0?"":guildxp)).append(";");
  260.                         Packet.append((mountxp == 0?"":mountxp)).append(";");
  261.                         Packet.append(drops).append(";");//Drop
  262.                         Packet.append((winKamas == 0?"":winKamas)).append("|");
  263.                 }else
  264.                 {
  265.                         // Si c'est un neutre, on ne gagne pas de points
  266.                         int winH = 0;
  267.                         int winD = 0;
  268.                         if(type == Constants.FIGHT_TYPE_AGRESSION)
  269.                         {
  270.                                 if(_init1.getPersonnage().get_align() != 0 && _init0.getPersonnage().get_align() != 0)
  271.                                 {
  272.                                         if(_init1.getPersonnage().get_compte().get_curIP().compareTo(_init0.getPersonnage().get_compte().get_curIP()) != 0 || Ancestra.CONFIG_ALLOW_MULE_PVP)
  273.                                         {
  274.                                         winH = Formulas.calculHonorWin(TEAM1,TEAM2,i);
  275.                                         }
  276.                                         if(i.getPersonnage().getDeshonor() > 0) winD = -1;
  277.                                 }
  278.                         }
  279.                         Personnage P = i.getPersonnage();
  280.                         if(P.get_honor()+winH<0)winH = -P.get_honor();
  281.                         P.addHonor(winH);
  282.                         P.setDeshonor(P.getDeshonor()+winD);
  283.                         Packet.append("2;").append(i.getGUID()).append(";").append(i.getPacketsName()).append(";").append(i.get_lvl()).append(";").append((i.isDead() ?  "1" : "0" )).append(";");
  284.                         Packet.append((P.get_align()!=Constants.ALIGNEMENT_NEUTRE?World.getExpLevel(P.getGrade()).pvp:0)).append(";");
  285.                         Packet.append(P.get_honor()).append(";");
  286.                         int maxHonor = World.getExpLevel(P.getGrade()+1).pvp;
  287.                         if(maxHonor == -1)maxHonor = World.getExpLevel(P.getGrade()).pvp;
  288.                         Packet.append((P.get_align()!=Constants.ALIGNEMENT_NEUTRE?maxHonor:0)).append(";");
  289.                         Packet.append(winH).append(";");
  290.                         Packet.append(P.getGrade()).append(";");
  291.                         Packet.append(P.getDeshonor()).append(";");
  292.                         Packet.append(winD);
  293.                         Packet.append(";;0;0;0;0;0|");
  294.                 }
  295.                 }
  296.                 for(Fighter i : TEAM2)
  297.                 {
  298.                         if(i._double != null)continue;//Pas de double dans les gains
  299.                         if(i.isInvocation() && i.getMob().getTemplate().getID() != 285)continue;//On affiche pas les invocs
  300.                         if(_type != Constants.FIGHT_TYPE_AGRESSION)
  301.                         {
  302.                                 if(i.getPDV() == 0 || i.hasLeft())
  303.                                 {
  304.                                         Packet.append("0;").append(i.getGUID()).append(";").append(i.getPacketsName()).append(";").append(i.get_lvl()).append(";1").append(";").append(i.xpString(";")).append(";;;;|");
  305.                                 }else
  306.                                 {
  307.                                         Packet.append("0;").append(i.getGUID()).append(";").append(i.getPacketsName()).append(";").append(i.get_lvl()).append(";0").append(";").append(i.xpString(";")).append(";;;;|");
  308.                                 }
  309.                         }else
  310.                 {
  311.                         // Si c'est un neutre, on ne gagne pas de points
  312.                         int winH = 0;
  313.                         int winD = 0;
  314.                         if(_init1.getPersonnage().get_align() != 0 && _init0.getPersonnage().get_align() != 0)
  315.                         {
  316.                                 if(_init1.getPersonnage().get_compte().get_curIP().compareTo(_init0.getPersonnage().get_compte().get_curIP()) != 0 || Ancestra.CONFIG_ALLOW_MULE_PVP)
  317.                         {
  318.                                 winH = Formulas.calculHonorWin(TEAM1,TEAM2,i);
  319.                                 }
  320.                         }
  321.                        
  322.                         Personnage P = i.getPersonnage();
  323.                         if(P.get_honor()+winH<0)winH = -P.get_honor();
  324.                         P.addHonor(winH);
  325.                         if(P.getDeshonor()-winD<0) winD = 0;
  326.                         P.setDeshonor(P.getDeshonor()-winD);
  327.                         Packet.append("0;").append(i.getGUID()).append(";").append(i.getPacketsName()).append(";").append(i.get_lvl()).append(";").append((i.isDead() ?  "1" : "0" )).append(";");
  328.                         Packet.append((P.get_align()!=Constants.ALIGNEMENT_NEUTRE?World.getExpLevel(P.getGrade()).pvp:0)).append(";");
  329.                         Packet.append(P.get_honor()).append(";");
  330.                         int maxHonor = World.getExpLevel(P.getGrade()+1).pvp;
  331.                         if(maxHonor == -1)maxHonor = World.getExpLevel(P.getGrade()).pvp;
  332.                         Packet.append((P.get_align()!=Constants.ALIGNEMENT_NEUTRE?maxHonor:0)).append(";");
  333.                         Packet.append(winH).append(";");
  334.                         Packet.append(P.getGrade()).append(";");
  335.                         Packet.append(P.getDeshonor()).append(";");
  336.                         Packet.append(winD);
  337.                         Packet.append(";;0;0;0;0;0|");
  338.                 }
  339.                 }
  340.                 if(Percepteur.GetPercoByMapID(_map.get_id()) != null && _type == 4)//On a un percepteur ONLY PVM ?
  341.                 {
  342.                         Percepteur p = Percepteur.GetPercoByMapID(_map.get_id());
  343.                         long winxp      = (int)Math.floor(Formulas.getXpWinPerco(p,TEAM1,TEAM2,totalXP)/100);
  344.                         long winkamas   = (int)Math.floor(Formulas.getKamasWinPerco(minkamas,maxkamas)/100);
  345.                         p.setXp(p.getXp()+winxp);
  346.                         p.setKamas(p.getKamas()+winkamas);
  347.                         Packet.append("5;").append(p.getGuid()).append(";").append(p.get_N1()).append(",").append(p.get_N2()).append(";").append(World.getGuild(p.get_guildID()).get_lvl()).append(";0;");
  348.                         Guild G = World.getGuild(p.get_guildID());
  349.                         Packet.append(G.get_lvl()).append(";");
  350.                         Packet.append(G.get_xp()).append(";");
  351.                         Packet.append(World.getGuildXpMax(G.get_lvl())).append(";");
  352.                         Packet.append(";");//XpGagner
  353.                         Packet.append(winxp).append(";");//XpGuilde
  354.                         Packet.append(";");//Monture
  355.                        
  356.                         String drops = "";
  357.                 ArrayList<Drop> temp = new ArrayList<Drop>();
  358.                 temp.addAll(possibleDrops);
  359.                 Map<Integer,Integer> itemWon = new TreeMap<Integer,Integer>();
  360.                
  361.                 for(Drop D : temp)
  362.                 {
  363.                         int t = (int)(D.get_taux()*100);//Permet de gerer des taux>0.01
  364.                         int jet = Formulas.getRandomValue(0, 100*100);
  365.                         if(jet < t)
  366.                         {
  367.                                 ObjTemplate OT = World.getObjTemplate(D.get_itemID());
  368.                                 if(OT == null)continue;
  369.                                 //on ajoute a la liste
  370.                                 itemWon.put(OT.getID(),(itemWon.get(OT.getID())==null?0:itemWon.get(OT.getID()))+1);
  371.                                
  372.                                 D.setMax(D.get_max()-1);
  373.                                 if(D.get_max() == 0)possibleDrops.remove(D);
  374.                         }
  375.                 }
  376.                 for(Entry<Integer,Integer> entry : itemWon.entrySet())
  377.                 {
  378.                         ObjTemplate OT = World.getObjTemplate(entry.getKey());
  379.                         if(OT == null)continue;
  380.                         if(drops.length() >0)drops += ",";
  381.                         drops += entry.getKey()+"~"+entry.getValue();
  382.                         Objet obj = OT.createNewItem(entry.getValue(), false);
  383.                         p.addObjet(obj);
  384.                         World.addObjet(obj, true);
  385.                 }
  386.                 Packet.append(drops).append(";");//Drop
  387.                 Packet.append(winkamas).append("|");
  388.                        
  389.                         SQLManager.UPDATE_PERCO(p);
  390.                 }
  391.         return Packet.toString();
  392.     }