查看: 3980|回复: 5

[RMVA发布] 【我带来了满满的恶意】新建属性值

[复制链接]

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-10-5 17:14:17 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 taroxd 于 2015-2-18 11:23 编辑

本脚本仅用于吓退所有想要新建属性的新人,告诉他们设置得要多麻烦……

我语文水平有限……你们谁愿意帮我写一下注释……我表达能力好有限……

[pre lang="ruby" line="1"]
#--------------------------------------------------------------------------
# ● 新建属性值
#--------------------------------------------------------------------------

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
[/pre]

无限の剣制

梦石
0
星屑
10445
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-10-5 17:22:24 | 显示全部楼层
据说这个可以用来丢链接!
回复

使用道具 举报

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2014-10-5 17:24:05 | 显示全部楼层
不行,还没学到的知识点太多太难看懂……

_(:з」∠)_因为COC设定下人物不会升级,等我能看懂了用起来估计能方便些……

点评

嗯,现在这代码应该能看了……  发表于 2014-10-5 20:34
本地的注释在群组里…… 嘛总之就是更新的时候犯贱了 = =  发表于 2014-10-5 20:30
因为我本地的注释不是很详细……然后我就只复制了设置区域下面的代码过来……然后一不小心把上面的代码也给覆盖掉了……  发表于 2014-10-5 20:29
看到动态方法那里就懒得研究下去了,下来拉评论结果被触手们吓哭了……  发表于 2014-10-5 20:26
我点进来以后一看卧槽这代码这么短还没有设置区域一定是自动计算的真是高大上不知道代码是怎么实现的……然后就默默的开始看代码……  发表于 2014-10-5 20:25
回复

使用道具 举报

梦石
0
星屑
986
在线时间
717 小时
注册时间
2012-12-6
回帖
4277

开拓者

发表于 2014-10-5 19:45:11 | 显示全部楼层
对于轩辕这种逗比来说,直接用物品栏解决这种问题
美国圣地亚戈(金坷垃生产公司)唯一官网
我是万年大水比、大坑比,已经有好几个天坑扔了
新坑素材收集中……
我什么都不会,只是一只渣
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-10-5 21:49:00 | 显示全部楼层
如果只给角色加能力敌人不加不会?出错吧?

点评

自己看代码  发表于 2014-10-6 11:18
备注的问题?  发表于 2014-10-6 11:13
而且不会Ruby的话估计你也不会改  发表于 2014-10-6 11:12
大概不能  发表于 2014-10-6 11:11
···果断分享- -|||以后遇到这种提问果断放你的了···这个脚本VX也能用?再改改XP也能用?0.0  发表于 2014-10-6 11:10
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2014-10-6 01:58:12 | 显示全部楼层
对于VX和VA来说,新建属性直接在备注里写,然后字符串匹配什么的……
XP只能蛋疼的在名字里写,然后再匹配……

点评

我来想象一下备注…… <strength 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,9999,9999,9999,9999,9999,9999,9999,9999,9999,9999,9999,9999,9999,9999,9999,9999>  发表于 2014-10-6 12:26
而且设在常量里可以大大减少实现的代码量…… 设置部分比代码还长的说233  发表于 2014-10-6 12:24
@taroxd 耐心一点啊(大雾  发表于 2014-10-6 12:18
不一定要写名字里面···自己外设什么的也可以···我以前发过一个···但是添加的能力好像太多了···角色50个敌人40个进入战斗画面略卡···  发表于 2014-10-6 10:35
备注里设定99个等级的能力值?我写在脚本里的设置都已经这么复杂了,备注里能写?  发表于 2014-10-6 06:56
(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部