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

Project1

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

[原创发布] 【7.20更新】仅用一个状态就能制作数十层的状态层数脚本

[复制链接]

Lv2.观梦者

梦石
0
星屑
872
在线时间
194 小时
注册时间
2019-4-11
帖子
56
跳转到指定楼层
1
发表于 2021-7-19 10:33:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 sxjkjly8010 于 2021-7-20 07:39 编辑

其实也不能算是完全原创吧,也是自己参考了一些状态堆叠脚本写出来的脚本
时常会觉得制作层数太累太累了,而且有些手游现在还经常能看见那种30层,100层,甚至更多层数的状态,如果真的复制粘贴那么多那真的人都要没了,那为什么不让状态拥有一个层数的值呢?
RUBY 代码复制
  1. # =============================================================================
  2. # 状态层数脚本 By Akahara
  3. # =============================================================================
  4. # 是否时常因为制作层数状态需要复制粘贴好几个无法制作数十层而感到苦恼?
  5. # 为状态新增了max_level和state_levels的概念
  6. # 在状态的备注中填写<level: x>,即该状态上限x层,未填写默认为1层
  7. # 可以通过state_levels(state_id)来制作每层增加数值的效果
  8. # 具体使用方法可以查阅https://rpg.blue/thread-486408-1-1.html
  9. # =============================================================================
  10. class RPG::State < RPG::BaseItem
  11.   attr_accessor :max_level
  12.  
  13.   def load_level
  14.     @max_level = 1
  15.     note.split(/[\r\n]+/).each do |line|
  16.       if line =~ /<level:[ ]*(\d+)>/i
  17.         @max_level = $1.to_i
  18.       end
  19.     end
  20.   end
  21.  
  22. end
  23.  
  24. class << DataManager
  25.  
  26.   alias theo_levelstate_load_db load_database
  27.   def load_database
  28.     theo_levelstate_load_db
  29.     load_levelstate_db
  30.   end
  31.  
  32.   def load_levelstate_db
  33.     $data_states.compact.each do |state|
  34.       state.load_level
  35.     end
  36.   end
  37.  
  38. end
  39.  
  40. class Game_BattlerBase
  41.   attr_reader   :state_levels  
  42.   alias clear_states_levels clear_states
  43.   def clear_states
  44.     clear_states_levels
  45.     @state_levels = {}
  46.   end
  47.  
  48.   alias erase_state_levels erase_state
  49.   def erase_state(state_id)
  50.     erase_state_levels(state_id)
  51.     reset_state_levels(state_id)
  52.   end
  53.  
  54.   def reset_state_levels(state_id)
  55.     @state_levels ||= {}
  56.     @state_levels.delete(state_id)
  57.   end  
  58.  
  59.   def set_state_levels(state_id)
  60.     @state_levels ||= {}
  61.     @state_levels[state_id] ||= 0   
  62.   end
  63.  
  64.   def state_levels(state_id)
  65.     @state_levels ||= {}
  66.     d = @state_levels[state_id]
  67.     d ? d : 0
  68.   end
  69. end
  70.  
  71. class Game_Battler < Game_BattlerBase
  72.   alias akahara_r_20210719 remove_state
  73.   def remove_state(state_id)
  74.     akahara_r_20210719(state_id)
  75.     reset_state_levels(state_id)
  76.   end
  77.  
  78.   alias akahara_20210719 add_state
  79.   def add_state(state_id)
  80.     akahara_20210719(state_id)
  81.     set_state_levels(state_id)
  82.     if state_addable?(state_id)
  83.       return if $data_states[state_id].max_level <= 1
  84.       if @state_levels[state_id] < 1
  85.         @state_levels[state_id] = 1
  86.         return ;
  87.       end
  88.       if state?(state_id)
  89.         @state_levels[state_id] += 1 if @state_levels[state_id] != $data_states[state_id].max_level
  90.       end
  91.     end
  92.   end
  93. end


7月19日11:30更新:修复解除状态时层数不重置的问题
7月20日7:36更新:新增使用方法的例子(未更改脚本)

具体使用方法:

在Game_BattlerBase中的def param(param_id)里可以使用state_levels(状态ID)来实现每层+1%最大生命的效果(红框标注),可以参考这种写法实现自己想要的效果,具体param_id填写几请参考57行

注:有的脚本(例如难易度脚本)给Game_Enemy重新定义了param(param_id),或者本身就重定义了Game_BattlerBase的def param(param_id),请注意查阅自己使用的脚本也照例填写层数效果


在Game_Battler中的def make_damage_value(user, item)中可以追加value的计算(要放在@result.make_damage(value.to_i, item)之前),来实现每层使受到2号角色的伤害提升10%,可以参考这种写法实现自己想要的效果

评分

参与人数 1+1 收起 理由
Nil2018 + 1 精品文章

查看全部评分

Lv1.梦旅人

梦石
0
星屑
136
在线时间
8 小时
注册时间
2022-2-18
帖子
9
2
发表于 2022-4-7 16:08:01 | 只看该作者
没看懂咋用。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-26 08:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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