Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- global tabEffets = [
- EFFECT_DAMAGE,
- EFFECT_HEAL,
- EFFECT_BUFF_FORCE,
- EFFECT_BUFF_AGILITY,
- EFFECT_RELATIVE_SHIELD,
- EFFECT_ABSOLUTE_SHIELD,
- EFFECT_BUFF_MP,
- EFFECT_BUFF_TP
- ];
- global ARME = "ARME";
- global PUCE = "PUCE";
- global EFFET_TYPE = 0;
- global EFFET_MIN = 1;
- global EFFET_MAX = 2;
- global EFFET_TOURS = 3;
- global FACTTP = 8;
- function randBool(){
- return randInt(0,2) == 0;
- }
- /* retourne le tableau des effets d'une arme */
- function creerTableauTaille(taille,valeur){
- return creerTableauDebFin(0,taille-1,valeur);
- }
- function creerTableauDebFin(deb, fin, valeur){
- var tab = [];
- for(var i=deb;i<=fin;i++){
- tab[i] = valeur;
- }
- }
- function evalEffets(effets){
- var tabRes = creerTableauDebFin(1,count(tabEffets),0);
- /* calcul des valeurs des effets */
- for(var effet in effets){
- var moy = (effet[EFFET_MIN] + effet[EFFET_MAX]) / 2. * (effet[EFFET_TOURS]+1);
- tabRes[effet[EFFET_TYPE]] += moy;
- }
- var score = 0;
- score += tabRes[EFFECT_DAMAGE];
- score += tabRes[EFFECT_HEAL];
- score += tabRes[EFFECT_BUFF_FORCE];
- score += tabRes[EFFECT_RELATIVE_SHIELD];
- score += tabRes[EFFECT_ABSOLUTE_SHIELD];
- score += tabRes[EFFECT_BUFF_TP] * FACTTP;
- return score;
- }
- function evalEffetsArme(arme){
- return evalEffets(getWeaponEffects(arme));
- }
- function evalEffetsPuce(puce){
- return evalEffets(getChipEffects(puce));
- }
- /* Calcule l'effet d'une arme ou d'une puce */
- function evalEffet(type, numero, leek){
- var score;
- var echecAction;
- var cout;
- if(type == ARME){
- score = evalEffetsArme(numero);
- echecAction = getWeaponFailure(numero);
- cout = getWeaponCost(numero);
- } else if(type == PUCE){
- score = evalEffetsPuce(numero);
- echecAction = getChipFailure(numero);
- cout = getChipCost(numero);
- }
- var echec = echecAction - (getCores(leek) - 1);
- var chanceReussite = (100-echec)/100;
- var scoreMoyen = score * chanceReussite;
- return scoreMoyen / (cout + ((getWeapon(leek)==numero)?0:1));
- }
- function getActions(type, leek){ return type==ARME?getWeapons(leek):getChips(leek);};
- function getCost(type, action){ return type == ARME?getWeaponCost(action):getChipCost(action);};
- function getCoutEquiperAction(type, numero, leek){ return type==ARME?(getWeapon(leek) == numero?0:1):0; }
- function trouverMeilleurAction(type, leek){
- var tp = getTP(leek);
- var actions = getActions(type, leek);
- var numero = null;
- var valeurEffet = 0;
- /* parcours des armes */
- for(var action in actions){
- var score = evalEffet(type, action, leek);
- if((score > valeurEffet) && (getCost(type,action) <= tp)){
- if(getCost(type, action) + getCoutEquiperAction(type, numero, leek) > tp){
- /* pas assez de sous pour equiper et utiliser */
- } else {
- valeurEffet = score;
- numero = action;
- }
- }
- }
- return [type,valeurEffet,numero];
- }
- function trouverMeilleurPuce(leek){
- return trouverMeilleurAction(PUCE, leek);
- }
- function trouverMeilleurArme(leek){
- return trouverMeilleurAction(ARME, leek);
- }
- /* trouve l'action la plus utile d'un poireau */
- function trouverActionPlusUtile(leek){
- var meilleurArmeTab = trouverMeilleurArme(leek);
- var meilleurPuceTab = trouverMeilleurPuce(leek);
- if(meilleurArmeTab[1] > meilleurPuceTab[1]){
- return meilleurArmeTab;
- } else if(meilleurPuceTab[1] > meilleurArmeTab[1]){
- return meilleurPuceTab;
- } else {
- /* random */
- if(randBool()){
- return meilleurArmeTab;
- } else {
- return meilleurPuceTab;
- }
- }
- }
- function trouverPlusDangereux(tabEnemis){
- var plusDangereux = null;
- var valeur = 0;
- for(var ennemiTmp in tabEnemis){
- var action = trouverActionPlusUtile(ennemiTmp);
- var actionVal = action[1];
- var dst = getCellDistance(getCell(getLeek()), getCell(ennemiTmp));
- var dstPlusDangereux = (plusDangereux != null)?getCellDistance(getCell(getLeek()), getCell(plusDangereux)):1000;
- if(actionVal > valeur || (actionVal == valeur && dst < dstPlusDangereux)){
- valeur = actionVal;
- plusDangereux = ennemiTmp;
- }
- }
- return plusDangereux;
- }
- while (getTP()>0) {
- var tabEnemis = getAliveEnemies();
- debug("recherche de la cible");
- var cible = trouverPlusDangereux(tabEnemis);
- if(cible == null){
- debug("aucune cible");
- } else {
- debug("cible trouvée : " + getName(cible));
- }
- if(cible == null){
- break;
- } else {
- debug("recherche de l'action");
- var action = trouverActionPlusUtile(getLeek());
- var type = action[0];
- var score = action[1];
- var numero = action[2];
- if(numero == null){
- debug("aucune action");
- } else {
- debug("action trouvée : " + type + " " + numero + " " + score);
- }
- if(numero != null){
- if(type == ARME){
- /* équiper */
- equiper(numero);
- var cellDestination = getCellToUseWeapon(cible);
- moveTowardCell(cellDestination);
- var res = useWeapon(cible);
- if(res == USE_INVALID_POSITION)
- break;
- }
- } else {
- break;
- }
- }
- }
- function equiper(weap) {
- if (getWeapon() != weap) {
- setWeapon(weap);
- }
- }
- function buff(chip){
- useChip(chip, getLeek());
- }
- var cible = getNearestEnemy();
- if(getWeapon() != null){
- useWeapon(cible);
- useWeapon(cible);
- useWeapon(cible);
- useWeapon(cible);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement