Project1

标题: 关于VxAce自身脚本的2个问题。 [打印本页]

作者: alianlord    时间: 2020-2-9 10:13
标题: 关于VxAce自身脚本的2个问题。
#--------------------------------------------------------------------------
  # ● 特徴値の総和計算(データ ID は非指定)
  #--------------------------------------------------------------------------
  def features_sum_all(code)
    features(code).inject(0.0) {|r, ft| r += ft.value }
  end
  #--------------------------------------------------------------------------
脚本中标红字的 r 和 ft 代表什么。依据脚本的变量命名都是以易于联想的原则,应该是两个英文单词的简写吧?


作者: 喵呜喵5    时间: 2020-2-9 10:47
result
feature
作者: alianlord    时间: 2020-2-9 10:59
原来如此!那这句脚本的意思应该就是:所有不同但同类的增减值的全部加总了。
作者: chanszeman1018    时间: 2020-2-9 11:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: alianlord    时间: 2020-2-9 12:06
def eval(a, b, v)
    [Kernel.eval(@formula), 0].max * sign rescue 0
  end

这句脚本看了官方解释也看不懂,尤其是红字部份。
作者: alianlord    时间: 2020-2-9 12:08
alianlord 发表于 2020-2-9 12:06
def eval(a, b, v)
    [Kernel.eval(@formula), 0].max * sign rescue 0
  end


class RPG::UsableItem::Damage
  def initialize
    @type = 0
    @element_id = 0
    @formula = '0'
    @variance = 20
    @critical = false
  end
  def none?
    @type == 0
  end
  def to_hp?
    [1,3,5].include?(@type)
  end
  def to_mp?
    [2,4,6].include?(@type)
  end
  def recover?
    [3,4].include?(@type)
  end
  def drain?
    [5,6].include?(@type)
  end
  def sign
    recover? ? -1 : 1
  end
def eval(a, b, v)
    [Kernel.eval(@formula), 0].max * sign rescue 0
  end

  attr_accessor :type
  attr_accessor :element_id
  attr_accessor :formula
  attr_accessor :variance
  attr_accessor :critical
end
作者: alianlord    时间: 2020-2-9 12:12
alianlord 发表于 2020-2-9 12:08
class RPG::UsableItem::Damage
  def initialize
    @type = 0

eval(a, b, v)

    根据参数执行计算公式,参数 a,b,v 分别指定了技能释放者所在队伍、技能承受者所在队伍以及所需的变量。

    如果伤害结果是恢复,那么就会返回一个负值。
作者: 喵呜喵5    时间: 2020-2-9 13:10
本帖最后由 喵呜喵5 于 2020-2-9 13:12 编辑
  1. def eval(a, b, v)
  2.     result = Kernel.eval(@formula)  # @formula 如果有语法错误导致代码执行报错,则 result = 0 (rescue 0)
  3.     result = [result, 0].max
  4.     result *= sign
  5.     return result
  6.   end
复制代码

作者: alianlord    时间: 2020-2-9 14:36
喵呜喵5 发表于 2020-2-9 13:10

我大概猜了一下,是不是这个意思……
result = Kernel.eval(@formula)
"当方法错误时,就返回0 "
result = [result, 0].max
"把返回值(只要不是错误,也就是不等于0),用max方法挑选出来。
result *= sign
"把值*sign,伤害和回复就是正值和负值之别。
return result
"返回伤害值或回复值。

这段脚本怎么会用全局搜索找不到?
作者: 喵呜喵5    时间: 2020-2-9 15:13
alianlord 发表于 2020-2-9 14:36
我大概猜了一下,是不是这个意思……
result = Kernel.eval(@formula)
"当方法错误时,就返回0 "

这段脚本就是把
[Kernel.eval(@formula), 0].max * sign rescue 0
拆开来写




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