设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3061|回复: 1
打印 上一主题 下一主题

新建属性值

[复制链接]

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

跳转到指定楼层
1
发表于 2014-10-5 17:25:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 taroxd 于 2015-2-18 11:22 编辑

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● 新建属性值
  3. #--------------------------------------------------------------------------
  4.  
  5. module Taroxd end
  6.  
  7. module Taroxd::ParamEx
  8.  
  9.   # 大写属性名 = {
  10.   #  特性 => 数值,数组,哈希或接受一个参数的 Proc。详见下面的范例,
  11.   # }
  12.   #
  13.   # 角色将会根据 角色->职业->武器->护甲->状态 的顺序计算属性值
  14.   # 初始的属性值等于角色的等级。
  15.   # 遇到一个设置是数值时,属性值会加上这个数值。
  16.   # 遇到一个 proc 或哈希或数组时,会以属性值为参数/下标来获取新的属性值。
  17.   #
  18.   # 敌人将会根据 敌人->状态 的顺序计算属性值。
  19.   # 初始的属性值为 0,计算方法同上。
  20.   #
  21.   # 至于状态窗口的修改,不在本脚本的范围之内。请按需自行修改。
  22.   #
  23.   # -----------------------------------------------------------------
  24.   #
  25.   # 一般来说,建议在 actor 设置里面用等级索引属性值
  26.   #
  27.   # 下面是示例:
  28.  
  29.   STRENGTH = {
  30.     # 角色
  31.     actor: {
  32.       1 => [nil, 1,1,2,3,5,8,13,21,34,55],
  33.       2 => {1=>1,2=>1,3=>2,4=>3,5=>5,6=>8,7=>13,8=>21,9=>34,10=>55},
  34.       3 => Hash.new{|h,k|h[k]=h[k-1]+h[k-2]}.tap{|h|h[1]=h[2]=1},
  35.       4 => ->(lv){i,j=1,1;(lv-2).times{|k|i,j=j,i+j};j},
  36.     },
  37.     # 敌人
  38.     enemy: {
  39.       1 => 5,
  40.       2 => 6,
  41.       3 => 8,
  42.     },
  43.     # 职业
  44.     class: {
  45.       1 => 10,
  46.     },
  47.     # 武器
  48.     weapons: {
  49.       1 => 5,
  50.       2 => -> old { old * 1.05 },
  51.     },
  52.     # 护甲
  53.     armors: {
  54.       # 无设置
  55.     },
  56.     states: {
  57.       1 => Proc.new { 0 },
  58.     },
  59.   }
  60.  
  61.   # strength 设置完成。此后就可以在技能公式里调用 a.strength 了。
  62.  
  63. end
  64.  
  65. class Game_BattlerBase
  66.   # 获取属性值。param: 基础值 features: 特性列表, const: 设置的常量
  67.   def taroxd_paramex(param, features, const)
  68.     features.each do |type|
  69.       list = const[type]
  70.       next unless list
  71.       [*send(type)].each do |item|
  72.         settings = list[item.id]
  73.         if settings.respond_to?(:coerce)
  74.           param += settings
  75.         elsif settings.respond_to?(:[])
  76.           param = settings[param] || param
  77.         end
  78.       end
  79.     end
  80.     param.to_i
  81.   end
  82. end
  83.  
  84. # 定义所有设置的属性
  85. actor_features = [:actor, :class, :weapons, :armors, :states]
  86. enemy_features = [:enemy, :states]
  87.  
  88. Taroxd::ParamEx.constants(false).each do |name|
  89.   const = Taroxd::ParamEx.const_get name
  90.   name = name.downcase
  91.   Game_Actor.send :define_method, name do
  92.     taroxd_paramex(@level, actor_features, const)
  93.   end
  94.   Game_Enemy.send :define_method, name do
  95.     taroxd_paramex(0, enemy_features, const)
  96.   end
  97. end
梦石
0
星屑
2084
在线时间
664 小时
注册时间
2014-2-15
帖子
81
2
发表于 2016-9-13 09:58:21 | 只看该作者
我想问一下怎么用脚本调用这个属性
回复 支持 反对

使用道具 举报

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 11:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表