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

Project1

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

[已经解决] Taroxd的新建属性脚本问题

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

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

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

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

x
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● 新建属性值
  3. #--------------------------------------------------------------------------
  4.  
  5. module Taroxd end
  6.  
  7. module Taroxd::ParamEx
  8.  
  9.   # 大写属性名 = {
  10.   #  ID => 数值,数组,哈希或接受一个参数的 Proc。详见下面的范例,
  11.   # }
  12.   #
  13.   # 角色将会根据 角色->职业->武器->防具->状态 的顺序计算属性值
  14.   # 初始的属性值等于角色的等级。
  15.   # 遇到一个设置是数值时,属性值会加上这个数值。
  16.   # 遇到一个 proc 或哈希或数组时,会以属性值为参数/下标来获取新的属性值。
  17.   # 关于模拟[事件指令-增减能力值]的设置方法,请参考职业设定的 3
  18.   #
  19.   # 敌人将会根据 敌人->状态 的顺序计算属性值。
  20.   # 初始的属性值为 0,计算方法同上。
  21.   #
  22.   # 至于状态窗口的修改,不在本脚本的范围之内。请按需自行修改。
  23.   #
  24.   # -----------------------------------------------------------------
  25.   #
  26.   # 一般来说,建议在 actor 设置里面用等级索引属性值
  27.   #
  28.   # 下面是示例:
  29.  
  30.   STRENGTH = {
  31.     # 角色
  32.     # 这里都用斐波那契数列做公式了。因为我懒得想公式
  33.     actor: {
  34.       # 1. 枚举法设置(第一个 nil 表示 0 级,不用管它)
  35.       1 => [nil, 1,1,2,3,5,8,13,21,34,55],
  36.       # 2. 枚举法设置的另一种格式
  37.       2 => {1=>1,2=>1,3=>2,4=>3,5=>5,6=>8,7=>13,8=>21,9=>34,10=>55},
  38.       #-- 会脚本者可以按照如下方式设置,省去枚举的功夫,并且没有上限 --
  39.       # 3. 用哈希表
  40.       3 => Hash.new {|h,k| h[k] = h[k-1] + h[k-2] }.tap {|h| h[1] = h[2] = 1 },
  41.       # 4. 用 proc
  42.       4 => ->(lv) { i, j = 1, 1; (lv-2).times {|k| i, j = j, i+j }; j },
  43.     },
  44.     # 敌人
  45.     enemy: {
  46.       1 => 5,   # 敌人 1 的该属性为 5
  47.       2 => 6,
  48.       3 => 8,
  49.     },
  50.     # 职业
  51.     class: {
  52.       1 => 10,  # 职业 1 具有属性增加 10 的特性
  53.       3 => ->(old) { old + $game_variables[3] } # 职业 3 角色的属性值增加变量 3
  54.     },
  55.     # 武器
  56.     weapons: {
  57.       1 => 5,   # 武器 1 具有属性增加 5 的特性
  58.       2 => ->(old) { old * 1.05 }, # 武器 2 具有属性乘以 1.05 的特性
  59.     },
  60.     # 护甲
  61.     armors: {
  62.       # 无设置
  63.       # 无设置时可以省略。这里没有省略的原因是告诉你护甲是用 armors 来设置的。
  64.     },
  65.     states: {
  66.       1 => Proc.new { 0 }, # 状态 1 具有属性直接归 0 的特性
  67.     },
  68.   }
  69.  
  70.   # strength 设置完成。此后就可以在技能公式里调用 a.strength 了。
  71.  
  72.   WISDOM = {
  73.     # ... 我懒得设置了…… 只是告诉你,这个脚本并不是只能设置一个能力值
  74.     # 用同样的方式设置完之后,你就可以在技能公式里调用 a.wisdom 了。
  75.   }
  76.  
  77. end
  78.  
  79. class Game_BattlerBase
  80.   #--------------------------------------------------------------------------
  81.   # ● 获取属性值。param: 基础值 features: 特性列表, const: 设置的常量
  82.   #--------------------------------------------------------------------------
  83.   def taroxd_paramex(param, features, const)
  84.     features.each do |type|
  85.       list = const[type]
  86.       next unless list
  87.       [*send(type)].each do |item|
  88.         settings = list[item.id]
  89.         if settings.kind_of?(Numeric)
  90.           param += settings
  91.         elsif settings.respond_to?(:[])
  92.           new_param = settings[param]
  93.           param = new_param if new_param
  94.         end
  95.       end
  96.     end
  97.     param.to_i
  98.   end
  99. end
  100.  
  101. #--------------------------------------------------------------------------
  102. # ● 定义所有设置的属性
  103. #--------------------------------------------------------------------------
  104. actor_features = [:actor, :class, :weapons, :armors, :states]
  105. enemy_features = [:enemy, :states]
  106.  
  107. Taroxd::ParamEx.constants(false).each do |name|
  108.   const = Taroxd::ParamEx.const_get name
  109.   name = name.downcase
  110.   if [Game_Actor, Game_Enemy].any? {|klass| klass.method_defined? name }
  111.     raise NameError.new("Parameter `#{name}' already exists!", name)
  112.   end
  113.   Game_Actor.send :define_method, name do
  114.     taroxd_paramex(@level, actor_features, const)
  115.   end
  116.   Game_Enemy.send :define_method, name do
  117.     taroxd_paramex(0, enemy_features, const)
  118.   end
  119. end


@taroxd ···因为要用到这个脚本来做会心一击每个角色和敌人的默认效果ORZ有没有办法一次设定所有角色和敌人的初始会心一击伤害为3···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

2
发表于 2014-10-12 11:08:14 | 只看该作者
Hash 可以设置默认值

点评

p了一下秒懂···  发表于 2014-10-12 11:29
自行理解。不会的话就老老实实一个一个写  发表于 2014-10-12 11:15
全部一起设置?  发表于 2014-10-12 11:13

评分

参与人数 1星屑 +150 收起 理由
VIPArcher + 150 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-14 09:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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