Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. global tabEffets = [
  2. EFFECT_DAMAGE,
  3. EFFECT_HEAL,
  4. EFFECT_BUFF_FORCE,
  5. EFFECT_BUFF_AGILITY,
  6. EFFECT_RELATIVE_SHIELD,
  7. EFFECT_ABSOLUTE_SHIELD,
  8. EFFECT_BUFF_MP,
  9. EFFECT_BUFF_TP
  10. ];
  11.  
  12. global ARME         = "ARME";
  13. global PUCE         = "PUCE";
  14. global EFFET_TYPE   = 0;
  15. global EFFET_MIN    = 1;
  16. global EFFET_MAX    = 2;
  17. global EFFET_TOURS  = 3;
  18. global FACTTP       = 8;
  19.  
  20. function randBool(){
  21.     return randInt(0,2) == 0;
  22. }
  23.  
  24. /* retourne le tableau des effets d'une arme */
  25. function creerTableauTaille(taille,valeur){
  26.     return creerTableauDebFin(0,taille-1,valeur);
  27. }
  28.  
  29. function creerTableauDebFin(deb, fin, valeur){
  30.     var tab = [];
  31.     for(var i=deb;i<=fin;i++){
  32.         tab[i] = valeur;
  33.     }
  34. }
  35.  
  36. function evalEffets(effets){
  37.     var tabRes = creerTableauDebFin(1,count(tabEffets),0);
  38.  
  39.     /* calcul des valeurs des effets */
  40.     for(var effet in effets){
  41.         var moy = (effet[EFFET_MIN] + effet[EFFET_MAX]) / 2. * (effet[EFFET_TOURS]+1);
  42.         tabRes[effet[EFFET_TYPE]] += moy;
  43.     }
  44.  
  45.     var score = 0;
  46.     score += tabRes[EFFECT_DAMAGE];
  47.     score += tabRes[EFFECT_HEAL];
  48.     score += tabRes[EFFECT_BUFF_FORCE];
  49.     score += tabRes[EFFECT_RELATIVE_SHIELD];
  50.     score += tabRes[EFFECT_ABSOLUTE_SHIELD];
  51.     score += tabRes[EFFECT_BUFF_TP] * FACTTP;
  52.  
  53.     return score;
  54. }
  55.  
  56. function evalEffetsArme(arme){
  57.     return evalEffets(getWeaponEffects(arme));
  58. }
  59.  
  60. function evalEffetsPuce(puce){
  61.     return evalEffets(getChipEffects(puce));
  62. }
  63.  
  64. /* Calcule l'effet d'une arme ou d'une puce */
  65. function evalEffet(type, numero, leek){
  66.  
  67.     var score;
  68.     var echecAction;
  69.     var cout;
  70.  
  71.     if(type == ARME){
  72.         score = evalEffetsArme(numero);
  73.         echecAction = getWeaponFailure(numero);
  74.         cout = getWeaponCost(numero);
  75.     } else if(type == PUCE){
  76.         score = evalEffetsPuce(numero);
  77.         echecAction = getChipFailure(numero);
  78.         cout = getChipCost(numero);
  79.     }
  80.  
  81.     var echec = echecAction - (getCores(leek) - 1);
  82.  
  83.     var chanceReussite = (100-echec)/100;
  84.  
  85.     var scoreMoyen = score * chanceReussite;
  86.  
  87.     return scoreMoyen / (cout + ((getWeapon(leek)==numero)?0:1));
  88. }
  89.  
  90. function getActions(type, leek){ return type==ARME?getWeapons(leek):getChips(leek);};
  91. function getCost(type, action){ return type == ARME?getWeaponCost(action):getChipCost(action);};
  92. function getCoutEquiperAction(type, numero, leek){ return type==ARME?(getWeapon(leek) == numero?0:1):0; }
  93.  
  94. function trouverMeilleurAction(type, leek){
  95.     var tp = getTP(leek);
  96.  
  97.     var actions = getActions(type, leek);
  98.    
  99.     var numero = null;
  100.     var valeurEffet = 0;
  101.    
  102.     /* parcours des armes */
  103.     for(var action in actions){
  104.  
  105.         var score = evalEffet(type, action, leek);
  106.  
  107.         if((score > valeurEffet) && (getCost(type,action) <= tp)){
  108.             if(getCost(type, action) + getCoutEquiperAction(type, numero, leek) > tp){
  109.                 /* pas assez de sous pour equiper et utiliser */
  110.             } else {
  111.                 valeurEffet = score;
  112.                 numero = action;
  113.             }
  114.  
  115.         }
  116.     }
  117.  
  118.     return [type,valeurEffet,numero];
  119. }
  120.  
  121. function trouverMeilleurPuce(leek){
  122.     return trouverMeilleurAction(PUCE, leek);
  123. }
  124.  
  125. function trouverMeilleurArme(leek){
  126.     return trouverMeilleurAction(ARME, leek);
  127. }
  128.  
  129. /* trouve l'action la plus utile d'un poireau */
  130. function trouverActionPlusUtile(leek){
  131.  
  132.     var meilleurArmeTab = trouverMeilleurArme(leek);
  133.     var meilleurPuceTab = trouverMeilleurPuce(leek);
  134.    
  135.    
  136.     if(meilleurArmeTab[1] > meilleurPuceTab[1]){
  137.         return meilleurArmeTab;
  138.     } else if(meilleurPuceTab[1] > meilleurArmeTab[1]){
  139.         return meilleurPuceTab;
  140.     } else {
  141.         /* random */
  142.         if(randBool()){
  143.             return meilleurArmeTab;
  144.         } else {
  145.             return meilleurPuceTab;
  146.         }
  147.     }
  148. }
  149.  
  150. function trouverPlusDangereux(tabEnemis){
  151.     var plusDangereux = null;
  152.     var valeur = 0;
  153.     for(var ennemiTmp in tabEnemis){
  154.         var action = trouverActionPlusUtile(ennemiTmp);
  155.         var actionVal = action[1];
  156.        
  157.         var dst = getCellDistance(getCell(getLeek()), getCell(ennemiTmp));
  158.        
  159.         var dstPlusDangereux = (plusDangereux != null)?getCellDistance(getCell(getLeek()), getCell(plusDangereux)):1000;
  160.        
  161.         if(actionVal > valeur || (actionVal == valeur && dst < dstPlusDangereux)){
  162.             valeur = actionVal;
  163.             plusDangereux = ennemiTmp;
  164.         }
  165.     }
  166.    
  167.     return plusDangereux;
  168. }
  169.  
  170.  
  171.  
  172. while (getTP()>0) {
  173.     var tabEnemis = getAliveEnemies();
  174.    
  175.     debug("recherche de la cible");
  176.     var cible = trouverPlusDangereux(tabEnemis);
  177.    
  178.     if(cible == null){
  179.         debug("aucune cible");
  180.     } else {
  181.         debug("cible trouvée : " + getName(cible));
  182.     }
  183.  
  184.     if(cible == null){
  185.         break;
  186.     } else {
  187.         debug("recherche de l'action");
  188.         var action = trouverActionPlusUtile(getLeek());
  189.        
  190.         var type = action[0];
  191.         var score = action[1];
  192.         var numero = action[2];
  193.        
  194.         if(numero == null){
  195.             debug("aucune action");
  196.         } else {
  197.             debug("action trouvée : " + type + " " + numero + " " + score);
  198.         }
  199.  
  200.         if(numero != null){
  201.             if(type == ARME){
  202.                 /* équiper */
  203.                 equiper(numero);
  204.                
  205.                 var cellDestination = getCellToUseWeapon(cible);
  206.                 moveTowardCell(cellDestination);
  207.                 var res = useWeapon(cible);
  208.                 if(res == USE_INVALID_POSITION)
  209.                     break;
  210.             }
  211.         } else {
  212.             break;
  213.         }
  214.     }
  215.    
  216. }
  217.  
  218. function equiper(weap) {
  219.     if (getWeapon() != weap) {
  220.         setWeapon(weap);
  221.     }
  222. }
  223.  
  224. function buff(chip){
  225.     useChip(chip, getLeek());
  226. }
  227.  
  228. var cible = getNearestEnemy();
  229.  
  230. if(getWeapon() != null){
  231.     useWeapon(cible);
  232.     useWeapon(cible);
  233.     useWeapon(cible);
  234.     useWeapon(cible);
  235. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement