赞 | 68 |
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
|
|