| 赞 | 70  | 
 
| VIP | 397 | 
 
| 好人卡 | 580 | 
 
| 积分 | 22 | 
 
| 经验 | 311270 | 
 
| 最后登录 | 2022-3-9 | 
 
| 在线时间 | 4033 小时 | 
 
 
 
 
 
Lv3.寻梦者 (版主) …あたしは天使なんかじゃないわ
  
	- 梦石
 - 0 
 
        - 星屑
 - 2208 
 
        - 在线时间
 - 4033 小时
 
        - 注册时间
 - 2010-10-4
 
        - 帖子
 - 10779
 
 
   
 
 | 
	
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
x
 
 本帖最后由 taroxd 于 2015-2-18 11:23 编辑  
 
本脚本仅用于吓退所有想要新建属性的新人,告诉他们设置得要多麻烦…… 
 
我语文水平有限……你们谁愿意帮我写一下注释……我表达能力好有限…… 
 
#-------------------------------------------------------------------------- # ● 新建属性值 #--------------------------------------------------------------------------   module Taroxd end   module Taroxd::ParamEx     # 大写属性名 = {   #  ID => 数值,数组,哈希或接受一个参数的 Proc。详见下面的范例,   # }   #   # 角色将会根据 角色->职业->武器->防具->状态 的顺序计算属性值   # 初始的属性值等于角色的等级。   # 遇到一个设置是数值时,属性值会加上这个数值。   # 遇到一个 proc 或哈希或数组时,会以属性值为参数/下标来获取新的属性值。   # 关于模拟[事件指令-增减能力值]的设置方法,请参考职业设定的 3   #   # 敌人将会根据 敌人->状态 的顺序计算属性值。   # 初始的属性值为 0,计算方法同上。   #   # 至于状态窗口的修改,不在本脚本的范围之内。请按需自行修改。   #   # -----------------------------------------------------------------   #   # 一般来说,建议在 actor 设置里面用等级索引属性值   #   # 下面是示例:     STRENGTH = {     # 角色     # 这里都用斐波那契数列做公式了。因为我懒得想公式     actor: {       # 1. 枚举法设置(第一个 nil 表示 0 级,不用管它)       1 => [nil, 1,1,2,3,5,8,13,21,34,55],       # 2. 枚举法设置的另一种格式       2 => {1=>1,2=>1,3=>2,4=>3,5=>5,6=>8,7=>13,8=>21,9=>34,10=>55},       #-- 会脚本者可以按照如下方式设置,省去枚举的功夫,并且没有上限 --       # 3. 用哈希表       3 => Hash.new {|h,k| h[k] = h[k-1] + h[k-2] }.tap {|h| h[1] = h[2] = 1 },       # 4. 用 proc       4 => ->(lv) { i, j = 1, 1; (lv-2).times {|k| i, j = j, i+j }; j },     },     # 敌人     enemy: {       1 => 5,   # 敌人 1 的该属性为 5       2 => 6,       3 => 8,     },     # 职业     class: {       1 => 10,  # 职业 1 具有属性增加 10 的特性       3 => ->(old) { old + $game_variables[3] } # 职业 3 角色的属性值增加变量 3     },     # 武器     weapons: {       1 => 5,   # 武器 1 具有属性增加 5 的特性       2 => ->(old) { old * 1.05 }, # 武器 2 具有属性乘以 1.05 的特性     },     # 护甲     armors: {       # 无设置       # 无设置时可以省略。这里没有省略的原因是告诉你护甲是用 armors 来设置的。     },     states: {       1 => Proc.new { 0 }, # 状态 1 具有属性直接归 0 的特性     },   }     # strength 设置完成。此后就可以在技能公式里调用 a.strength 了。     WISDOM = {     # ... 我懒得设置了…… 只是告诉你,这个脚本并不是只能设置一个能力值     # 用同样的方式设置完之后,你就可以在技能公式里调用 a.wisdom 了。   }   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 
 
 #--------------------------------------------------------------------------  
# ● 新建属性值  
#--------------------------------------------------------------------------  
   
module Taroxd end  
   
module Taroxd::ParamEx  
   
  # 大写属性名 = {  
  #  ID => 数值,数组,哈希或接受一个参数的 Proc。详见下面的范例,  
  # }  
  #  
  # 角色将会根据 角色->职业->武器->防具->状态 的顺序计算属性值  
  # 初始的属性值等于角色的等级。  
  # 遇到一个设置是数值时,属性值会加上这个数值。  
  # 遇到一个 proc 或哈希或数组时,会以属性值为参数/下标来获取新的属性值。  
  # 关于模拟[事件指令-增减能力值]的设置方法,请参考职业设定的 3  
  #  
  # 敌人将会根据 敌人->状态 的顺序计算属性值。  
  # 初始的属性值为 0,计算方法同上。  
  #  
  # 至于状态窗口的修改,不在本脚本的范围之内。请按需自行修改。  
  #  
  # -----------------------------------------------------------------  
  #  
  # 一般来说,建议在 actor 设置里面用等级索引属性值  
  #  
  # 下面是示例:  
   
  STRENGTH = {  
    # 角色  
    # 这里都用斐波那契数列做公式了。因为我懒得想公式  
    actor: {  
      # 1. 枚举法设置(第一个 nil 表示 0 级,不用管它)  
      1 => [nil, 1,1,2,3,5,8,13,21,34,55],  
      # 2. 枚举法设置的另一种格式  
      2 => {1=>1,2=>1,3=>2,4=>3,5=>5,6=>8,7=>13,8=>21,9=>34,10=>55},  
      #-- 会脚本者可以按照如下方式设置,省去枚举的功夫,并且没有上限 --  
      # 3. 用哈希表  
      3 => Hash.new {|h,k| h[k] = h[k-1] + h[k-2] }.tap {|h| h[1] = h[2] = 1 },  
      # 4. 用 proc  
      4 => ->(lv) { i, j = 1, 1; (lv-2).times {|k| i, j = j, i+j }; j },  
    },  
    # 敌人  
    enemy: {  
      1 => 5,   # 敌人 1 的该属性为 5  
      2 => 6,  
      3 => 8,  
    },  
    # 职业  
    class: {  
      1 => 10,  # 职业 1 具有属性增加 10 的特性  
      3 => ->(old) { old + $game_variables[3] } # 职业 3 角色的属性值增加变量 3  
    },  
    # 武器  
    weapons: {  
      1 => 5,   # 武器 1 具有属性增加 5 的特性  
      2 => ->(old) { old * 1.05 }, # 武器 2 具有属性乘以 1.05 的特性  
    },  
    # 护甲  
    armors: {  
      # 无设置  
      # 无设置时可以省略。这里没有省略的原因是告诉你护甲是用 armors 来设置的。  
    },  
    states: {  
      1 => Proc.new { 0 }, # 状态 1 具有属性直接归 0 的特性  
    },  
  }  
   
  # strength 设置完成。此后就可以在技能公式里调用 a.strength 了。  
   
  WISDOM = {  
    # ... 我懒得设置了…… 只是告诉你,这个脚本并不是只能设置一个能力值  
    # 用同样的方式设置完之后,你就可以在技能公式里调用 a.wisdom 了。  
  }  
   
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  
 
  |   
 
 
 
 |