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

Project1

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

[已经解决] 拓展了角色基本能力之后……遇到了几个问题……

[复制链接]

Lv1.梦旅人

梦石
0
星屑
70
在线时间
140 小时
注册时间
2008-10-21
帖子
34
跳转到指定楼层
1
发表于 2014-9-7 19:48:09 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
  1. #===============================================================================
  2. #                                                N.A.S.T.Y. Extra Stats
  3. #                                  Nelderson's Awesome Scripts To You
  4. # By: Nelderson
  5. # Made On: 12/19/2011
  6. # Last Updated : 3/27/2012
  7. #===============================================================================
  8. # Update History:
  9. # - Version 1.1  - Cleaned up some shit, and added enemies xstats for Enemies!
  10. # - Version 1.0  - Initial release, made for the shit of it <img src='http://www.rpgmakervxace.net/public/style_emoticons/<#EMO_DIR#>/tongue.png' class='bbc_emoticon' alt=':P' />
  11. #===============================================================================
  12. # *Notes:
  13. # - This script can be used to make all sorts of stats that can derive from
  14. #   an actor's level, and base stats.
  15. #
  16. # - This thing can be a pain to set up, but once it's done, it can be a very
  17. #   powerful way to include new stats into your game!
  18. #
  19. # - Made a quick edit to the status screen to show up to 6 stats!
  20. #
  21. # *Usage
  22. #
  23. # -First is the STATS section.  This is an array that holds all the new
  24. #  stats that everything else gets info from.
  25. #
  26. # - Next fill out the Default Level formula(Use Example Below as a guide)
  27. #   *ANYTHING that an actor has, you can base it off of (Except other XSTATS!)
  28. #           (level, hp, mp, atk, spi, agi, maxhp, etc.)
  29. #
  30. # -You can use the ACTOR and ENEMY NOTETAGS to customize
  31. #  the formulas for each actor.
  32. #
  33. #  Examples:
  34. #   Place the following in an actor's notebox(You must make one for each stat):
  35. #                 <xstat>
  36. #                 :str => '(level/3.5) + 16',
  37. #                 :con => '(level/5.6) + 12',
  38. #                 :dex => '(level/5.25) + 15 + agi',
  39. #                 :int => '(level/10.5) + 10',
  40. #                 :wis => '(level/10.5) + 10',
  41. #                 :cha => '(level/10.5) + 10',
  42. #                 <xstat_end>
  43. #
  44. #   Or you can place this in an actor's/enemy's notebox
  45. #                 <xstat>
  46. #                 :str => 15,
  47. #                 :con => 14,
  48. #                 :dex => 13,
  49. #                 :int => 12,
  50. #                 :wis => 11,
  51. #                 :cha => 0,
  52. #                 <xstat_end>
  53. #
  54. # - This script also uses notetags for weapons and armors to increase xstats
  55. #   if you want.  Just place in a notebox:
  56. #
  57. #                 <weapon_xstat: STAT x> , where STAT is th name of the new stat
  58. #
  59. #           Ex. <weapon_xstat: str 5> , would raise the actor's str +5
  60. #
  61. #  *For Scripters
  62. #
  63. #  -If you want to access the stats, just use:
  64. #                actor.xstat.STAT - Where STAT is the name of the new stat
  65. #          
  66. #           Ex. $game_actors[1].xstat.str , will return actor 1's str
  67. #  
  68. #===============================================================================
  69. # Credits:
  70. # -Nelderson and Zetu
  71. #  Original Script was made by Zetu, and I spiced the shit out of it!
  72. #===============================================================================

  73. module Z26

  74.   STATS = [:str,:con,:dex,:int,:wis,:cha]

  75.   #Default xstat formulas for ACTORS
  76.   DEFAULT_LEVEL_FORMULA =
  77.                 {
  78.                   :str => '(level/3.5) + 16 + atk',
  79.                   :con => '(level/5.6) + 12',
  80.                   :dex => '(level/5.25) + 15 + agi',
  81.                   :int => '(level/10.5) + 10',
  82.                   :wis => '(level/10.5) + 10',
  83.                   :cha => '(level/10.5) + 10',
  84.                 }

  85.   #Default xstat formulas for ENEMIES          
  86.   DEFAULT_FOR_ENEMIES =
  87.                 {
  88.                   :str => 0,
  89.                   :con => 0,
  90.                   :dex => 0,
  91.                   :int => 0,
  92.                   :wis => 0,
  93.                   :cha => 0,
  94.                 }

  95.    def self.actor_level_formulas(actor_id)
  96.           jhh = ""
  97.           strin = $data_actors[actor_id].get_start_end_cache
  98.           strin.each do |i|
  99.                 jhh += i
  100.           end
  101.           return DEFAULT_LEVEL_FORMULA if strin == "" or strin == []
  102.           return eval("{#{jhh}}")
  103.         end

  104.         def self.enemy_stats(enemy_id)
  105.           jhh = ""
  106.           strin = $data_enemies[enemy_id].get_start_end_cache
  107.           strin.each do |i|
  108.                 jhh += i
  109.           end
  110.           return DEFAULT_FOR_ENEMIES if strin == "" or strin == []
  111.           return eval("{#{jhh}}")
  112.         end

  113.   #=============================================================================
  114.   SYMBOLS = []
  115.   for stat in STATS
  116.         SYMBOLS.push(stat)
  117.   end
  118.   Xstats = Struct.new(*SYMBOLS)
  119. end

  120. class Game_Enemy < Game_Battler
  121.   attr_accessor :xstat

  122.   alias z26_enemy_set initialize unless $@
  123.   def initialize(*args)
  124.         z26_enemy_set(*args)
  125.         @xstat = Z26::Xstats.new(*([0]*Z26::STATS.size))
  126.         for stat in Z26::STATS
  127.           z26variate_stats(stat)
  128.         end
  129.   end

  130.   def z26variate_stats(stat)
  131.         return if Z26.enemy_stats(@enemy_id)[stat].nil?
  132.         if Z26.enemy_stats(@enemy_id)[stat].is_a?(String)
  133.           set_in = eval(Z26.enemy_stats(@enemy_id)[stat]).to_i
  134.           eval("@xstat.#{stat} += #{set_in}")
  135.         else
  136.           set_in = Z26.enemy_stats(@enemy_id)[stat]
  137.           @xstat[stat] += set_in
  138.         end
  139.   end
  140. end

  141. class Game_Actor < Game_Battler
  142.   attr_accessor :xstat

  143.   alias z26_s setup unless $@
  144.   def setup(actor_id)
  145.         z26_s(actor_id)
  146.         @xstat = Z26::Xstats.new(*([0]*Z26::STATS.size))
  147.         for item in equips.compact
  148.           z26variate_equip(item)
  149.         end
  150.         for stat in Z26::STATS
  151.           z26variate_stats(stat, @level)
  152.         end
  153.   end

  154.   alias z26_change_equip change_equip
  155.   def change_equip(equip_type, item, test = false)
  156.         last_item = equips[equip_type]
  157.         z26_change_equip(equip_type, item)
  158.         z26variate_equip(item)
  159.         z26variate_equip(last_item, false)
  160.   end

  161.   #=====================#
  162.   ##EDITED BY NELDERSON##
  163.   #=====================#
  164.   def z26variate_equip(item, adding = true)
  165.         return if item.nil?
  166.         for line in item.note.split(/[\r\n]+/).each{ |a|
  167.           case a
  168.           when /<weapon_xstat:[ ](.*)[ ](\d+)>/i
  169.                   if Z26::STATS.include?(eval(":" + $1))
  170.                         if adding
  171.                           eval("@xstat.#{$1} += #{$2}")
  172.                         else
  173.                         eval("@xstat.#{$1} -= #{$2}")
  174.                   end
  175.                 end
  176.           end
  177.           }
  178.         end
  179.   end

  180.   def z26variate_stats(stat, level, adding = true)
  181.         return if Z26.actor_level_formulas(@actor_id)[stat].nil?
  182.         if Z26.actor_level_formulas(@actor_id)[stat].is_a?(String)
  183.           amount = eval(Z26.actor_level_formulas(@actor_id)[stat]).to_i
  184.         else
  185.           amount = Z26.actor_level_formulas(@actor_id)[stat]
  186.         end
  187.         if adding
  188.           eval("@xstat.#{stat} += #{amount}")
  189.         else
  190.           eval("@xstat.#{stat} -= #{amount}")
  191.         end
  192.   end

  193.   alias z26level_up level_up unless $@
  194.   def level_up
  195.         for stat in Z26::STATS
  196.           z26variate_stats(stat, @level, false)
  197.         end
  198.         z26level_up
  199.         for stat in Z26::STATS
  200.           z26variate_stats(stat, @level)
  201.         end
  202.   end
  203. end

  204. class Window_Status < Window_Selectable
  205.   def draw_block3(y)
  206.         draw_parameters(0, y)
  207.         draw_equipments(344, y)#288
  208.         draw_xstat_parameters(172, y)
  209.   end

  210.   def draw_xstat_parameters(x, y)
  211.         @actor.xstat.size.times {|i|
  212.         draw_actor_xstat_param(@actor, x, y + line_height * i, i) }
  213.   end
  214. end

  215. class Window_Base < Window
  216.   def draw_actor_xstat_param(actor, x, y, param_id)
  217.         id = Z26::STATS[param_id]
  218.         change_color(system_color)
  219.         draw_text(x, y, 120, line_height, id.capitalize)
  220.         change_color(normal_color)
  221.         draw_text(x + 120, y, 36, line_height, actor.xstat[id], 2)
  222.   end
  223. end

  224. class RPG::BaseItem
  225.   def get_start_end_cache
  226.         record = false
  227.         temp = []
  228.         self.note.split(/[\r\n]+/).each do |line|
  229.           if line =~ /<xstat>/i
  230.                 record = true
  231.           elsif line =~ /<xstat_end>/i
  232.                 record = false
  233.           end
  234.           if record
  235.                 temp << line
  236.           end
  237.         end
  238.         return nil if temp == ""
  239.         temp.delete_at(0)
  240.         temp
  241.   end
  242. end
复制代码
我想使用这个脚本拓展角色的基本能力……但是我想升级的时候随机加上几点能力而不是固定成长的话,怎样才能实现?
另外还想求问怎么在战斗中使用这些新的基本能力……求指教……

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

8
发表于 2014-9-22 17:33:16 | 只看该作者
本帖最后由 taroxd 于 2014-9-22 17:34 编辑
三途亚梦 发表于 2014-9-7 20:50
关于成长值随机有些麻烦。

这个脚本中人物额外能力值并不是在等级增加时增加多少而已一个固定公式计算出 ...


并不困难。这里是一个实现思路:


  1. class Game_Actor
  2.   def random_point(level)
  3.     @random_point ||= []
  4.     return @random_point[level] if @random_point[level]
  5.     @random_point[level] = rand(5) # 0 到 4 的随机数
  6.   end
  7. end

复制代码
然后计算公式可以这么写:

  1. (1..level).inject(0) {|a, e| a + random_point(e) }
复制代码

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 喵~

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

7
发表于 2014-9-7 21:11:43 | 只看该作者
本帖最后由 taroxd 于 2014-9-7 21:13 编辑
三途亚梦 发表于 2014-9-7 21:07
其实就RM默认的能力值来说也很难达成随机值增加,RM默认的能力值增加应该是通过自带的公式计算好每一级该 ...


澄清一下,RM默认的能力值 = (基础能力值 + 附加能力值) * 变化率

基础能力值即数据库中的设置
附加能力值包括装备附加和事件附加。而事件附加这一块是很容易修改的。
变化率主要由角色所具有的特性和能力强化/弱化决定

点评

是呢,在回答的时候我有想到附加的部分,却懒得说,可能有误导嫌疑,感谢纠正。  发表于 2014-9-7 21:18
回复 支持 反对

使用道具 举报

Lv3.寻梦者

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
6
发表于 2014-9-7 21:07:48 | 只看该作者
本帖最后由 三途亚梦 于 2014-9-7 21:20 编辑
yubenzuo 发表于 2014-9-7 21:00
好吧……看来是我想多了……我还以为有办法稍微修改一下能实现升级随机加点呢……
唉,想额外增加几个属 ...


其实就RM默认的能力值来说也很难达成随机值增加,RM默认的能力值增加应该是通过自带的公式计算好每一级该人物能力应该是多少,输出了一个固定值。
然后在这个固定值的基础上加上附加值(事件和物品带来的额外数值)
另外还有变化率,就是由状态带来的百分比变化

当然不是没法做随机增加值,但是肯定还需要额外脚本的支持。

我觉得和脚本稍微结合就能用纯事件做。
判断当人物升级时,执行一次公共事件,该事件内容是随机给人物的能力增加一个你理想的随机数就可以。

但是这个脚本现在这个状态肯定是解决不了这个问题啦
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
140 小时
注册时间
2008-10-21
帖子
34
5
 楼主| 发表于 2014-9-7 21:00:08 | 只看该作者
三途亚梦 发表于 2014-9-7 20:50
关于成长值随机有些麻烦。

这个脚本中人物额外能力值并不是在等级增加时增加多少而已一个固定公式计算出 ...

好吧……看来是我想多了……我还以为有办法稍微修改一下能实现升级随机加点呢……
唉,想额外增加几个属性却弄出这么多麻烦……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
4
发表于 2014-9-7 20:50:44 | 只看该作者
yubenzuo 发表于 2014-9-7 20:31
感谢你的回答……不过我可能表达错了……
首先是这个升级的问题,原来的公式 :str => '(level/3.5) + 16' ...

关于成长值随机有些麻烦。

这个脚本中人物额外能力值并不是在等级增加时增加多少而已一个固定公式计算出来的。
'(level/2) + 16'
它的实际意识  人物的等级除以2 + 16
那么人物2级这个能力就是17点,而4级的时候就只有18点
如果你把他改成
'(level*2) + 16‘
则它的效果就是 人物等级*2 +16
那么人物2级的时候这个能力就有20点,而3级的时候就有22点

所以我想你理解了,如果你想做每升1级加随机点就比较困难了,
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
140 小时
注册时间
2008-10-21
帖子
34
3
 楼主| 发表于 2014-9-7 20:31:46 | 只看该作者
三途亚梦 发表于 2014-9-7 19:53
在武器或护甲的备注里按照如下格式填写可以让该装备增加对应属性

范例,让装备增加5点‘str’  

感谢你的回答……不过我可能表达错了……
首先是这个升级的问题,原来的公式 :str => '(level/3.5) + 16' 这是根据等级每级固定成长多少点,我想在每次升级的时候在0到N点之间随机加上几点……我不知道该怎么实现……
第二个问题,我想表达是,在战斗过程中不再使用原数据库里的物理攻击啊什么的,改用新定义的属性什么的……我太清楚从哪下手……

点评

如果你想说伤害公式都不知道在哪的话……它是 技能的右上角,计算公式,把里面的内容进行改写,关联你新增加的人物能力值进行计算  发表于 2014-9-7 20:55
我觉得的我回答的就是你的问题……技能的伤害是由公式决定的,默认的公式里只跟原来啊atk有关,你要自己按照范例的把每个都改成新增能力。  发表于 2014-9-7 20:36
回复 支持 反对

使用道具 举报

Lv3.寻梦者

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
2
发表于 2014-9-7 19:53:07 | 只看该作者
在武器或护甲的备注里按照如下格式填写可以让该装备增加对应属性
<weapon_xstat: STAT x>
范例,让装备增加5点‘str’  <weapon_xstat: str 5>
调用属性:$game_actors[1].xstat.X     例:$game_actors[1].xstat.str
伤害公式范例:    a.xstat.str * 5

以上。

固定点的话把+12改成 +rand(12) 就应该是随机加0 ~ 11中的一个随机数了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-10-6 16:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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