计步器
# @taroxd metadata 1.0
# @id pedometer
# @display 计步器
# @require taroxd_core
#   事件脚本
#      start_pedometer(var_id[, count])
#        变量 var_id 开始计步。若 count 存在,将该变量设为 count。
#
#      stop_pedometer([var_id])
#        变量 var_id 停止计步。若 var_id 不存在,则停止所有计步器。

Taroxd::Pedometer = true

class Game_Party < Game_Unit

  def_after(:initialize) { @pedometer = [] }

  def start_pedometer(var_id, count = nil)
    @pedometer << var_id unless @pedometer.include?(var_id)
    $game_variables[var_id] = count if count
  end

  def stop_pedometer(var_id = nil)
    var_id ? @pedometer.delete(var_id) : @pedometer.clear
  end

  def_after :on_player_walk do
    @pedometer.each { |var_id| $game_variables[var_id] += 1 }
  end
end

class Game_Interpreter

  def start_pedometer(var_id, count = nil)
    $game_party.start_pedometer(var_id, count)
  end

  def stop_pedometer(var_id = nil)
    $game_party.stop_pedometer(var_id)
  end
end
被动技能状态
# @taroxd metadata 1.0
# @id passive
# @display 被动技能状态
# @require taroxd_core
#   在技能/状态上备注<passive x>,
#   表示习得该技能/获得该状态等同于装备了x号武器。

Taroxd::Passive = true

RPG::Skill.note_i :passive
RPG::State.note_i :passive

class Game_Actor < Game_Battler

  # 带有被动技能效果的所有实例
  def passive_objects
    @skills.map { |id| $data_skills[id] } + states
  end
  # 特性表和能力中加上被动武器
  def_with(:feature_objects) { |old| old + passive_weapons }

  def_with :param_plus do |old, param_id|
    passive_weapons.sum(old) { |item| item.params[param_id] }
  end

  # 被动技能/状态对应的武器实例构成的数组
  def passive_weapons
    passive_objects.map { |obj| $data_weapons[obj.passive] }.compact
  end
end
新建属性值
# @taroxd metadata 1.0
# @id param_ex
# @display 新建属性值
module Taroxd end

module Taroxd::ParamEx

  # 大写属性名 = {
  #  特性 => 数值,数组,哈希或接受一个参数的 Proc。详见下面的范例,
  # }
  #
  # 角色将会根据 角色->职业->武器->护甲->状态 的顺序计算属性值
  # 初始的属性值等于角色的等级。
  # 遇到一个设置是数值时,属性值会加上这个数值。
  # 遇到一个 proc 或哈希或数组时,会以属性值为参数/下标来获取新的属性值。
  #
  # 敌人将会根据 敌人->状态 的顺序计算属性值。
  # 初始的属性值为 0,计算方法同上。
  #
  # 至于状态窗口的修改,不在本脚本的范围之内。请按需自行修改。
  #
  # 一般来说,建议在 actor 设置里面用等级索引属性值
  #
  # 下面是示例:

  STRENGTH = {
    # 角色
    actor: {
      1 => [nil,1,1,2,3,5,8,13,21,34,55],
      2 => {1=>1,2=>1,3=>2,4=>3,5=>5,6=>8,7=>13,8=>21,9=>34,10=>55},
      3 => Hash.new{|h,k|h[k]=h[k-1]+h[k-2]}.tap{|h|h[1]=h[2]=1},
      4 => ->lv{i,j=1,1;(lv-2).times{|k|i,j=j,i+j};j},
    },
    # 敌人
    enemy: {
      1 => 5,
      2 => 6,
      3 => 8,
    },
    # 职业
    class: {
      1 => 10,
    },
    # 武器
    weapons: {
      1 => 5,
      2 => -> old { old * 1.05 },
    },
    # 护甲
    armors: {
      # 无设置
    },
    states: {
      1 => Proc.new { 0 },
    },
  }

  # strength 设置完成。此后就可以在技能公式里调用 a.strength 了。

end

class Game_BattlerBase
  # 获取属性值。param: 基础值 features: 特性列表, const: 设置的常量
  def taroxd_paramex(param, features, const)
    features.each do |type|
      list = const[type]
      next unless list
      [*send(type)].each do |item|
        settings = list[item.id]
        if settings.respond_to?(:coerce)
          param += settings
        elsif settings.respond_to?(:[])
          param = settings[param] || param
        end
      end
    end
    param.to_i
  end
end

# 定义所有设置的属性
actor_features = [:actor, :class, :weapons, :armors, :states]
enemy_features = [:enemy, :states]

Taroxd::ParamEx.constants(false).each do |name|
  const = Taroxd::ParamEx.const_get name
  name = name.downcase
  Game_Actor.send :define_method, name do
    taroxd_paramex(@level, actor_features, const)
  end
  Game_Enemy.send :define_method, name do
    taroxd_paramex(0, enemy_features, const)
  end
end