Project1
标题:
关于随机不重复目标的问题。
[打印本页]
作者:
380617414
时间:
2017-12-29 18:19
标题:
关于随机不重复目标的问题。
如题,比如我有个技能是毒技能,随机目标后,怎样让已经有毒状态的目标不会被重复释毒?
作者:
魔族宝
时间:
2017-12-29 21:56
/*:
* @plugindesc 随机选择不重复.
* @author devilbaby
* @help
* 影响选择的属性是“受到攻击几率”(tgr)
* 总是这个属性高的敌人优先几率被攻击
* 计算步骤:
* 1、取敌群总tgr * 0~1 的随机值(简称‘rtgr’)
* 2、依次循环所有敌人,并用rtgr - 敌人tgr,如果结果rtgr为0,则选中该敌人。
* 3、循环所有敌人后rtgr依旧大于0时,选中敌群中tgr最高的一个敌人。
* 注意:
* 1、随机选择最多不会超过当前敌群总数量
* 即只有3个怪物的敌群,‘随机选中四人’的道具或技能最多只能选中3个敌人。
*/
(function(){
Array.prototype.indexOf = function (val) {
for (var i = 0; i < this.length; i++)
if(this[i] == val)return i;
return -1;
};
Array.prototype.removevalue = function (val) {
var index = this.indexOf(val);
if(index > -1) this.splice(index, 1);
};
Game_Unit.prototype.randomTargets = function(num) {
var raw = this.aliveMembers()
num = Math.min(num,raw.length);
var target = [];
for (var i = 0; i < num; i++){
var tgrRand = Math.random() * this.tgrSum();
var tmpTarget = null;
var loser = null;
raw.forEach(function(member) {
loser = loser ? (loser.tgr < member.tgr ? member : loser): member
tgrRand -= member.tgr;
if (tgrRand <= 0 && !tmpTarget) tmpTarget = member;
});
tmpTarget = tmpTarget ? tmpTarget : loser
raw.removevalue(tmpTarget);
target.push(tmpTarget);
}
return target;
};
var _Game_Action_targetsForOpponents = Game_Action.prototype.targetsForOpponents;
Game_Action.prototype.targetsForOpponents = function() {
return this.isForRandom()
? this.opponentsUnit().randomTargets(this.numTargets())
: _Game_Action_targetsForOpponents.call(this)
};
})();
复制代码
未经测试,有问题反馈。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1