Project1

标题: 没错,又是我。。。关于技能随机目标,有事请教 [打印本页]

作者: fengge127    时间: 2019-1-5 20:24
标题: 没错,又是我。。。关于技能随机目标,有事请教
我玩的其他游戏,技能目标是敌方随机两人时,目标是不会重复的,但这个游戏却会重复,比如我释放一个随机对方三个目标的火海技能,结果技能动画是全体攻击,对手是四个人,伤害却有几率全打到一个人身上。。。大家不觉得这很别扭吗?有没有什么办法能让目标不重复,如果数量溢出就之作用活着的目标,比如对面剩余两个人,技能作用随机三个人,那两个人都挨一下伤害。。。
作者: fengge127    时间: 2019-1-5 20:28
我刚搜了一下论坛,发现vx区有个大佬发了这样一段代码,不知道对mv有效没有?

#==============================================================================
class Game_Action
  #--------------------------------------------------------------------------
  alias xr_old_targets_for_opponents targets_for_opponents
  def targets_for_opponents
    if item.for_random?
      max_num = [item.number_of_targets, opponents_unit.alive_members.size].min
      data = []
      while data.size < max_num
        target = opponents_unit.random_target
        data << target unless data.include?(target)
      end
      return data
    end
    xr_old_targets_for_opponents
  end
end
#==============================================================================
作者: shabfu    时间: 2019-1-5 21:01
fengge127 发表于 2019-1-5 20:28
我刚搜了一下论坛,发现vx区有个大佬发了这样一段代码,不知道对mv有效没有?

#========================= ...

VX的代码和MV的不太一样,理解思路即可。
我刚刚去数据库看了一下,因为是随机所以是有概率打到同一个人上面的。
但是可以用插件吧。。我也是萌新不太懂就是
作者: fengge127    时间: 2019-1-5 21:38
shabfu 发表于 2019-1-5 21:01
VX的代码和MV的不太一样,理解思路即可。
我刚刚去数据库看了一下,因为是随机所以是有概率打到同一个人 ...

但问题是我看不懂那段代码,游戏里的随机设定也有一定道理,但不符合我的审美要求。。。
作者: 芯☆淡茹水    时间: 2019-1-6 09:36
MV的,貌似之前好像给人回答过啊!
在随机的技能/物品里备注 <NewRandom> ,目标不会重复。不备注就是默认的。

  1. //=====================================================================================================================================
  2. var Xr_OldGAtargetsForOpponents = Game_Action.prototype.targetsForOpponents;
  3. Game_Action.prototype.targetsForOpponents = function() {
  4.     return this.isNewRandom() ? this.targetsForNR() : Xr_OldGAtargetsForOpponents.call(this);
  5. };
  6. Game_Action.prototype.targetsForNR = function() {
  7.     var targets = [];
  8.     var max = this.maxRandomSize();
  9.     while (targets.length < max) {
  10.         var target = this.opponentsUnit().randomTarget();
  11.         !targets.contains(target) && targets.push(target);
  12.     }
  13.     return targets;
  14. };
  15. Game_Action.prototype.isNewRandom = function() {
  16.     return this.isForRandom() && this.isNewRandomNotes();
  17. };
  18. Game_Action.prototype.isNewRandomNotes = function() {
  19.     return this.item() && /<NewRandom>/.test(this.item().note);
  20. };
  21. Game_Action.prototype.maxRandomSize = function() {
  22.     return Math.min(this.numTargets(), this.opponentsUnit().aliveMembers().length);
  23. };
  24. //=====================================================================================================================================
复制代码

作者: fengge127    时间: 2019-1-6 15:41
芯☆淡茹水 发表于 2019-1-6 09:36
MV的,貌似之前好像给人回答过啊!
在随机的技能/物品里备注  ,目标不会重复。不备注就是默认的。

哇塞,大佬你太给力了,谢谢
作者: tseyik    时间: 2019-1-6 16:51
目标是不会重复的,就是假隨機(實則内裏有某些機凖作判定)
真隨機是不可能完全不重復
有實力的商業游遊戲多数用假隨機
作者: fengge127    时间: 2019-1-6 17:01
tseyik 发表于 2019-1-6 16:51
目标是不会重复的,就是假隨機(實則内裏有某些機凖作判定)
真隨機是不可能完全不重復
有實力的商業游遊戲多 ...

嗯嗯,我就是想要假随机
作者: jokefeng    时间: 2019-1-6 21:52
芯☆淡茹水 发表于 2019-1-6 09:36
MV的,貌似之前好像给人回答过啊!
在随机的技能/物品里备注  ,目标不会重复。不备注就是默认的。

感谢大佬,这里也有个相关随机的问题。
我方连击5次击打一个目标,连击3次目标已经死亡,剩下的2次连击可否随机到其他的目标上去呢?




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