Project1

标题: 喜闻乐见的状态回血回蓝脚本 [打印本页]

作者: 1095884734    时间: 2014-6-30 14:45
标题: 喜闻乐见的状态回血回蓝脚本
本帖最后由 1095884734 于 2014-6-30 14:47 编辑

今天一个朋友叫我去写个用状态回血的脚本 本人比较懒所以直接去找了
找了找发现好像还真没有这样的脚本……只能动手打了
以下是脚本
RUBY 代码复制
  1. #喜闻乐见的状态回血回蓝脚本
  2. #常数写"xx",百分比写"xx%"
  3. #↓具体方法请藏考帮助文档-脚本入门-基础篇-哈希表
  4. $自动回蓝状态 = {
  5. 17 => "50",18 => "50%"
  6. }
  7. $自动回血状态 = {
  8. 19 => "50",20 => "50%"
  9. }
  10. class Game_Battler
  11.   #--------------------------------------------------------------------------
  12.   # ● 判断状态 [自动回血]
  13.   #--------------------------------------------------------------------------
  14.   def 回血?
  15.     for i in @states
  16.       if $自动回血状态.include?(i)
  17.         @i = i
  18.         return true
  19.       end
  20.     end
  21.     return false
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 判断状态 [自动回蓝]
  25.   #--------------------------------------------------------------------------
  26.   def 回蓝?
  27.     for i in @states
  28.       if $自动回蓝状态.include?(i)
  29.         @i = i
  30.         return true
  31.       end
  32.     end
  33.     return false
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 应用回血
  37.   #--------------------------------------------------------------------------
  38.   def 自动回血
  39.     # 设置伤害
  40.    if $自动回血状态[@i].split(/%/)[1]
  41.     self.damage = self.maxhp * ($自动回血状态[@i].split(/%/)[0].to_i / 100)
  42.   else
  43.     self.damage = $自动回血状态[@i].split(/%/)[0].to_i
  44.   end
  45.    # 分散
  46.     if self.damage.abs > 0
  47.       amp = [self.damage.abs * 15 / 100, 1].max
  48.       self.damage += rand(amp+1) + rand(amp+1) - amp
  49.     end
  50.     # SP 的伤害减法运算
  51.     self.hp += self.damage
  52.     # 过程结束
  53.     return true
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 应用回蓝
  57.   #--------------------------------------------------------------------------
  58.   def 自动回蓝
  59.     # 设置伤害
  60.    if $自动回蓝状态[@i].split(/%/)[1]
  61.     self.damage = self.maxsp * ($自动回蓝状态[@i].split(/%/)[0].to_i / 100)
  62.   else
  63.     self.damage = $自动回蓝状态[@i].split(/%/)[0].to_i
  64.   end
  65.    # 分散
  66.     if self.damage.abs > 0
  67.       amp = [self.damage.abs * 15 / 100, 1].max
  68.       self.damage += rand(amp+1) + rand(amp+1) - amp
  69.     end
  70.     # SP 的伤害减法运算
  71.     self.sp += self.damage
  72.     # 过程结束
  73.     return true
  74.   end
  75. end
  76.  
  77. class Scene_Battle
  78.   #--------------------------------------------------------------------------
  79.   # ● 刷新画面 (主回合步骤 1 : 准备行动)
  80.   #--------------------------------------------------------------------------
  81.   def update_phase4_step1
  82.     # 隐藏帮助窗口
  83.     @help_window.visible = false
  84.     # 判定胜败
  85.     if judge
  86.       # 胜利或者失败的情况下 : 过程结束
  87.       return
  88.     end
  89.     # 强制行动的战斗者不存在的情况下
  90.     if $game_temp.forcing_battler == nil
  91.       # 设置战斗事件
  92.       setup_battle_event
  93.       # 执行战斗事件中的情况下
  94.       if $game_system.battle_interpreter.running?
  95.         return
  96.       end
  97.     end
  98.     # 强制行动的战斗者存在的情况下
  99.     if $game_temp.forcing_battler != nil
  100.       # 在头部添加后移动
  101.       @action_battlers.delete($game_temp.forcing_battler)
  102.       @action_battlers.unshift($game_temp.forcing_battler)
  103.     end
  104.     # 未行动的战斗者不存在的情况下 (全员已经行动)
  105.     if @action_battlers.size == 0
  106.       # 开始同伴命令回合
  107.       start_phase2
  108.       return
  109.     end
  110.     # 初始化动画 ID 和公共事件 ID
  111.     @animation1_id = 0
  112.     @animation2_id = 0
  113.     @common_event_id = 0
  114.     # 未行动的战斗者移动到序列的头部
  115.     @active_battler = @action_battlers.shift
  116.     # 如果已经在战斗之外的情况下
  117.     if @active_battler.index == nil
  118.       return
  119.     end
  120.     # 连续伤害
  121.     if @active_battler.hp > 0 and @active_battler.slip_damage?
  122.       @active_battler.slip_damage_effect
  123.       @active_battler.damage_pop = true
  124.     end
  125.     if @active_battler.hp > 0 and @active_battler.回蓝?
  126.       @active_battler.自动回蓝
  127.       @active_battler.damage_pop = true
  128.     end
  129.     if @active_battler.hp > 0 and @active_battler.回血?
  130.       @active_battler.自动回血
  131.       @active_battler.damage_pop = true
  132.     end
  133.     # 自然解除状态
  134.     @active_battler.remove_states_auto
  135.     # 刷新状态窗口
  136.     @status_window.refresh
  137.     # 移至步骤 2
  138.     @phase4_step = 2
  139.   end
  140.   end

测试用的范例实在是不堪入目所以不提供
就是这样喜闻乐见……
欢迎吐槽……
[新人第一帖求糖~~]
作者: 未命名    时间: 2014-6-30 14:53
本帖最后由 未命名 于 2014-6-30 15:12 编辑

这个很早就有了……
不是找了很久没找到的新手,而是懒到“干脆我自己编一个好了”的大神吧!
这才是 喜闻乐见……我看着你的注册时间说到。

最近的“考场1”有这个题目,该不会拜托你的那个家伙……

————————————————————————————————————
好吧,仔细看一下确实有些个性,找不到的是指这种可以自定义的效果吗?
可以百分比,也可以固定数值,自动找到特定的回血状态……
相比传统方法来说,不,我试一试在评价。
————————————————————————————————————
好的,说说缺点
self.damage是正数的话,看起来就像受了伤一样,
改self.hp += self.damage为 减少 ,然后self.damage改为负,就像回血了。

然后多个状态累加HP的回复,只有百分比的有效,但是只显示最后一次加血。
建议改为将在确认完毕之前把所有要加的血加在一起,然后显示大数值。
这样更自由。

那么,相比传统方法的优点,就是对新手方便设置了。

——————————————————————————————————
嘿嘿!也就是说你还可以把SP的回复也显示出来的话,这就超棒了啊!

作者: scgjgj999    时间: 2014-6-30 16:30
学习一下,谢谢分享,初学脚本,很多地方还不是看的太明白~~~~~~先回复,再研究看看~~~~~~~~~
作者: y967    时间: 2014-8-24 16:27
挺好用的,唯一不足的是,回血现实是红色的,也就是被打的抠血的颜色,在哪改曾绿色
作者: 123呼呼那32    时间: 2017-1-18 20:36
哪个状态是自动恢复




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1