Advertisement
Astfgl

AstfglYBAIExtension

Mar 11th, 2017
456
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //=============================================================================
  2. // Astfgl YanflyBattleAI extension
  3. // by Astfgl
  4. // Date: 10/03/2017
  5. // V1.01 added target eval
  6. // TOU: Yanfly's terms of use apply, please credit me with any of the following
  7. // Astfgl66/Pierre MATEO/Pierre MATEO (Astfgl66).
  8. //=============================================================================
  9.  
  10.  
  11. /*:
  12.  * @plugindesc Extension of Yanfly AI plugin
  13.  * @author Astfgl
  14.  * @help Allows to check the target for buffs
  15.  * use: Buff >=0 Buff [paramId] to check if target has a buff or neutral
  16.  * use: Buff <=0 Buff [paramId] to check it target has a debuff or neutral
  17.  * use: Buff <0 Buff [paramId] to check if target strictly has debuff
  18.  * use: Buff >0 Buff [paramId] to check if target strictly has buff
  19.  * use: Buff ===0 Buff [paramId] to check if target is strictly neutral
  20.  * to check for buffs on the user use Eval (user._buffs[paramId] [condition])
  21.  * Replace paramId with 0 -> MHP, 1 -> MMP, 2 -> ATK, 3 -> DEF, 4 -> MATK
  22.  * 5 -> MDF, 6 -> AGI, 7 -> LUK.
  23.  *
  24.  *
  25.  * Ex: Buff >0 Buff 0: Skill 1
  26.  * Will make the enemy target only actors that are max hp buffed.
  27.  *
  28.  * IMPORTANT: there is a space between Buff and the parameter id here.
  29.  *
  30.  * Also allows to use Buff condition for targeting:
  31.  * Lowest Buff[parameterId]
  32.  * Highest Buff[parameterId]
  33.  *
  34.  * Replace [parameterId] with the parameter id as described above.
  35.  * Ex: Buff0 : check for MHP, Buff1: check for MMP, Buff2: check for ATK
  36.  *
  37.  * IMPORTANT: There is no space here between buff and the parameter id here.
  38.  *
  39.  * Ex: Buff <0 Buff0: Skill 1, Lowest Buff0
  40.  * Enemy will use skill 1 only on mhp debuffed actors, targeting the most
  41.  * debuffed actor first.
  42.  *
  43.  * Ex: Buff >0 Buff 2: Skill 1, Highest Buff 2
  44.  * Enemy will use skill 1 only on atk buffed actors, targeting the most buffed
  45.  * actor first.
  46.  *
  47.  * Ex: Buff ===0 Buff 3: Skill 1, Highest Def
  48.  * Enemy will use skill 1 only on actors that aren't defense buffed or debuffed
  49.  * targeting the highest defense actor first.
  50.  */
  51.  
  52. (function(){
  53. var _Astfgl_newAIPAC = AIManager.passAIConditions
  54. AIManager.passAIConditions = function(line) {
  55.     // BUFF >=0 X
  56.     if (line.match(/BUFF[ ]>=0[ ](.*)/i)) {
  57.       return this.conditionBuffHas(String(RegExp.$1));
  58.     }
  59.     // BUFF <=0 X
  60.     if (line.match(/BUFF[ ]<=0[ ](.*)/i)) {
  61.       return this.conditionBuffNot(String(RegExp.$1));
  62.     }
  63.     // BUFF >0 X
  64.     if (line.match(/BUFF[ ]>0[ ](.*)/i)) {
  65.       return this.conditionBuffHasStrict(String(RegExp.$1));
  66.     }
  67.     // BUFF <0 X
  68.     if (line.match(/BUFF[ ]<0[ ](.*)/i)) {
  69.       return this.conditionBuffNotStrict(String(RegExp.$1));
  70.     }
  71.     // BUFF ===0 X
  72.     if (line.match(/BUFF[ ]===0[ ](.*)/i)) {
  73.       return this.conditionBuffNeutral(String(RegExp.$1));
  74.     }
  75.     // TARGETEVAL
  76.     if (line.match(/TARGETEVAL[ ](.*)/i)) {
  77.       var condition = String(RegExp.$1);
  78.       return this.conditionTargetEval(condition);
  79.     }
  80.    
  81.     return _Astfgl_newAIPAC.call(this,line)
  82.  }
  83.  
  84. AIManager.conditionBuffHas = function(condition) {
  85.     if (condition.match(/BUFF[ ](\d+)/i)) {
  86.       var buffId = parseInt(RegExp.$1);
  87.     } else {
  88.         return false;
  89.     }
  90.     var group = this.getActionGroup();
  91.     var validTargets = [];
  92.     for (var i = 0; i < group.length; ++i) {
  93.       var target = group[i];
  94.       if (!target) continue;
  95.       if (target._buffs[buffId] >= 0) validTargets.push(target);
  96.     }
  97.     if (validTargets.length <= 0) return false;
  98.     this.setProperTarget(validTargets);
  99.     return true;
  100. };
  101.  
  102. AIManager.conditionBuffNot = function(condition) {
  103.     if (condition.match(/BUFF[ ](\d+)/i)) {
  104.       var buffId = parseInt(RegExp.$1);
  105.     } else {
  106.         return false;
  107.     }
  108.     var group = this.getActionGroup();
  109.     var validTargets = [];
  110.     for (var i = 0; i < group.length; ++i) {
  111.       var target = group[i];
  112.       if (!target) continue;
  113.       if (target._buffs[buffId] <= 0) validTargets.push(target);
  114.     }
  115.     if (validTargets.length <= 0) return false;
  116.     this.setProperTarget(validTargets);
  117.     return true;
  118. };
  119.  
  120. AIManager.conditionBuffHasStrict = function(condition) {
  121.     if (condition.match(/BUFF[ ](\d+)/i)) {
  122.       var buffId = parseInt(RegExp.$1);
  123.     } else {
  124.         return false;
  125.     }
  126.     var group = this.getActionGroup();
  127.     var validTargets = [];
  128.     for (var i = 0; i < group.length; ++i) {
  129.       var target = group[i];
  130.       if (!target) continue;
  131.       if (target._buffs[buffId] > 0) validTargets.push(target);
  132.     }
  133.     if (validTargets.length <= 0) return false;
  134.     this.setProperTarget(validTargets);
  135.     return true;
  136. };
  137.  
  138. AIManager.conditionBuffNotStrict = function(condition) {
  139.     if (condition.match(/BUFF[ ](\d+)/i)) {
  140.       var buffId = parseInt(RegExp.$1);
  141.     } else {
  142.         return false;
  143.     }
  144.     var group = this.getActionGroup();
  145.     var validTargets = [];
  146.     for (var i = 0; i < group.length; ++i) {
  147.       var target = group[i];
  148.       if (!target) continue;
  149.       if (target._buffs[buffId] < 0) validTargets.push(target);
  150.     }
  151.     if (validTargets.length <= 0) return false;
  152.     this.setProperTarget(validTargets);
  153.     return true;
  154. };
  155.  
  156. AIManager.conditionBuffNeutral = function(condition) {
  157.     if (condition.match(/BUFF[ ](\d+)/i)) {
  158.       var buffId = parseInt(RegExp.$1);
  159.     } else {
  160.         return false;
  161.     }
  162.     var group = this.getActionGroup();
  163.     var validTargets = [];
  164.     for (var i = 0; i < group.length; ++i) {
  165.       var target = group[i];
  166.       if (!target) continue;
  167.       if (target._buffs[buffId] === 0) validTargets.push(target);
  168.     }
  169.     if (validTargets.length <= 0) return false;
  170.     this.setProperTarget(validTargets);
  171.     return true;
  172. };
  173.  
  174. AIManager.conditionTargetEval = function(condition) {
  175.     var action = this.action();
  176.     var item = action.item();
  177.     var user = this.battler();
  178.     var s = $gameSwitches._data;
  179.     var v = $gameVariables._data;
  180.     var group = this.getActionGroup();
  181.     var validTargets = [];
  182.     for (var i = 0; i < group.length; ++i) {
  183.       var target = group[i];
  184.       if (!target) continue;
  185.       if (eval(condition)) validTargets.push(target);
  186.     }
  187.     if (validTargets.length <= 0) return false;
  188.     this.setProperTarget(validTargets);
  189.     return true;
  190. }
  191.  
  192. var _Astfgl_newAISPT = AIManager.setProperTarget
  193. AIManager.setProperTarget = function(group) {
  194.     _Astfgl_newAISPT.call(this, group)
  195.     this.setActionGroup(group);
  196.     var action = this.action();
  197.     var randomTarget = group[Math.floor(Math.random() * group.length)];
  198.     if (!randomTarget) return action.setTarget(0);
  199.     if (group.length <= 0) return action.setTarget(randomTarget.index());
  200.     var line = this._aiTarget.toUpperCase();
  201.     if (line.match(/HIGHEST[ ](.*)/i)) {
  202.         var param = this.getBuffId(String(RegExp.$1));
  203.         if (param < 0) return action.setTarget(randomTarget.index());
  204.         if (param > 7) return action.setTarget(randomTarget.index());
  205.         return this.setHighestBuffTarget(group,param)
  206.     } else if (line.match(/LOWEST[ ](.*)/i)) {
  207.         var param = this.getBuffId(String(RegExp.$1));
  208.         if (param < 0) return action.setTarget(randomTarget.index());
  209.         if (param > 7) return action.setTarget(randomTarget.index());
  210.         return this.setLowestBuffTarget(group,param)
  211.     }
  212. }
  213.  
  214. AIManager.getBuffId = function(string) {
  215.     string = string.toUpperCase();
  216.     switch (string) {
  217.         case "BUFF0":
  218.             return 0;
  219.             break;
  220.         case "BUFF1":
  221.             return 1;
  222.             break;
  223.         case "BUFF2":
  224.             return 2;
  225.             break;
  226.         case "BUFF3":
  227.             return 3;
  228.             break;
  229.         case "BUFF4":
  230.             return 4;
  231.             break;
  232.         case "BUFF5":
  233.             return 5;
  234.             break;
  235.         case "BUFF6":
  236.             return 6;
  237.             break;
  238.         case "BUFF7":
  239.             return 7;
  240.             break;
  241.     }
  242.     return -1;
  243. }
  244.  
  245. AIManager.setHighestBuffTarget = function(group,paramId) {
  246.     var maintarget = group[Math.floor(Math.random() * group.length)];
  247.     for (var i = 0; i < group.length; ++i) {
  248.       var target = group[i];
  249.       if (target._buffs[paramId] > maintarget._buffs[paramId]) maintarget = target;
  250.     }
  251.     this.action().setTarget(maintarget.index())
  252. };
  253.  
  254. AIManager.setLowestBuffTarget = function(group,paramId) {
  255.     var maintarget = group[Math.floor(Math.random() * group.length)];
  256.     for (var i = 0; i < group.length; ++i) {
  257.       var target = group[i];
  258.       if (target._buffs[paramId] < maintarget._buffs[paramId]) maintarget = target;
  259.     }
  260.     this.action().setTarget(maintarget.index())
  261. };
  262.  
  263. }())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement