Project1

标题: 关于随机不重复目标的问题。 [打印本页]

作者: 380617414    时间: 2017-12-29 18:19
标题: 关于随机不重复目标的问题。
如题,比如我有个技能是毒技能,随机目标后,怎样让已经有毒状态的目标不会被重复释毒?
作者: 魔族宝    时间: 2017-12-29 21:56
  1. /*:
  2. * @plugindesc 随机选择不重复.
  3. * @author devilbaby
  4. * @help
  5. * 影响选择的属性是“受到攻击几率”(tgr)
  6. * 总是这个属性高的敌人优先几率被攻击
  7. * 计算步骤:
  8. * 1、取敌群总tgr * 0~1 的随机值(简称‘rtgr’)
  9. * 2、依次循环所有敌人,并用rtgr - 敌人tgr,如果结果rtgr为0,则选中该敌人。
  10. * 3、循环所有敌人后rtgr依旧大于0时,选中敌群中tgr最高的一个敌人。
  11. * 注意:
  12. * 1、随机选择最多不会超过当前敌群总数量
  13. *    即只有3个怪物的敌群,‘随机选中四人’的道具或技能最多只能选中3个敌人。
  14. */
  15. (function(){
  16.    
  17.     Array.prototype.indexOf = function (val) {  
  18.         for (var i = 0; i < this.length; i++)
  19.             if(this[i] == val)return i;
  20.         return -1;  
  21.     };  

  22.     Array.prototype.removevalue = function (val) {  
  23.         var index = this.indexOf(val);  
  24.         if(index > -1) this.splice(index, 1);
  25.     };

  26.     Game_Unit.prototype.randomTargets = function(num) {
  27.         var raw = this.aliveMembers()
  28.         num = Math.min(num,raw.length);
  29.         var target = [];
  30.         for (var i = 0; i < num; i++){
  31.             var tgrRand = Math.random() * this.tgrSum();
  32.             var tmpTarget = null;
  33.             var loser = null;
  34.             raw.forEach(function(member) {
  35.                 loser = loser ? (loser.tgr < member.tgr ? member : loser): member
  36.                 tgrRand -= member.tgr;
  37.                 if (tgrRand <= 0 && !tmpTarget) tmpTarget = member;
  38.             });
  39.             tmpTarget = tmpTarget ? tmpTarget : loser
  40.             raw.removevalue(tmpTarget);
  41.             target.push(tmpTarget);
  42.         }
  43.         return target;
  44.     };

  45.     var _Game_Action_targetsForOpponents = Game_Action.prototype.targetsForOpponents;
  46.     Game_Action.prototype.targetsForOpponents = function() {
  47.         return this.isForRandom()
  48.             ? this.opponentsUnit().randomTargets(this.numTargets())
  49.             : _Game_Action_targetsForOpponents.call(this)
  50.     };
  51. })();
复制代码

未经测试,有问题反馈。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1