设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3248|回复: 1
打印 上一主题 下一主题

[有事请教] 关于随机不重复目标的问题。

[复制链接]

Lv2.观梦者

梦石
0
星屑
271
在线时间
45 小时
注册时间
2017-10-25
帖子
64
跳转到指定楼层
1
发表于 2017-12-29 18:19:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
如题,比如我有个技能是毒技能,随机目标后,怎样让已经有毒状态的目标不会被重复释毒?

Lv2.观梦者

梦石
0
星屑
804
在线时间
21 小时
注册时间
2017-6-5
帖子
7
2
发表于 2017-12-29 21:56:28 | 只看该作者
  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. })();
复制代码

未经测试,有问题反馈。

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 认可答案

查看全部评分

同好群:143356012
脚本学习、资源分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-7-23 06:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表