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

Project1

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

[已经解决] 这个护盾的脚本,请大家伙看看

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1971
在线时间
926 小时
注册时间
2015-10-26
帖子
356

开拓者

跳转到指定楼层
1
发表于 2017-2-22 12:00:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 踢腿水上飘 于 2017-2-22 14:25 编辑

这个脚本可以提供一个护盾技能,使用后附加状态63,护盾值取决于变量84的值,上了护盾之后受到攻击先扣变量84的值,扣到0了才破盾扣血
但这个脚本有几个问题
一是如果给单体加护盾的话,就会出现给A上盾之后,再给B上盾就会把A的护盾刷新了……而且,即使给2个人都上了盾,护盾的总值也是不变的,比如护盾1000点,即便给2个人上盾,也只能吸收1000点总伤害,而不是分别吸收1000点伤害。
二是我在技能使用信息那里写的“全体队员获得了共\v[84]点护盾。”,但在测试中发现显示的是0点,,,好像原因是先显示使用时的信息,然后才给变量84赋值,这个问题好解决吗?







RUBY 代码复制
  1. class Game_Actor
  2.  
  3.   alias apply_guard_without_state apply_guard
  4.   def apply_guard(value)
  5.     value = apply_guard_without_state(value)
  6.     if state?(63) && value > 0   # 50 号状态
  7.       v = $game_variables      
  8.       if v[84] >= value       # 30 号变量
  9.         $Hurt_Shield = value
  10.         $Magic_Shield = "have"
  11.         v[84] -= value.to_i
  12.         0
  13.       else
  14.         value -= v[84]
  15.         $Hurt_Shield = value
  16.         $Magic_Shield = "have"
  17.         v[84] = 0
  18.         $game_party.members.each {|actor| actor.remove_state(84) }
  19.         value
  20.       end
  21.     else
  22.       $Magic_Shield = ""
  23.       value
  24.     end
  25.   end
  26. end
  27. class Game_ActionResult
  28.   #--------------------------------------------------------------------------
  29.   # ● 获取 HP 伤害的文字
  30.   #--------------------------------------------------------------------------
  31.   def hp_damage_text
  32.     if @hp_drain > 0
  33.       fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
  34.       sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
  35.     elsif @hp_damage > 0
  36.       fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
  37.       sprintf(fmt, @battler.name, @hp_damage)
  38.     elsif @hp_damage < 0
  39.       fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
  40.       sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
  41.     elsif $Magic_Shield == "have"
  42.       fmt = "护盾抵消了%s点伤害,还剩下\\v[84]点护盾。"
  43.       sprintf(fmt,$Hurt_Shield.to_i)
  44.     else
  45.       fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
  46.       sprintf(fmt, @battler.name)
  47.     end
  48.   end
  49. end

Lv2.观梦者

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
帖子
649

开拓者

2
发表于 2017-2-22 13:33:48 | 只看该作者
你之前解這一題的時候不是就會加實例變量了嗎~
https://rpg.blue/forum.php?mod=v ... peid%26typeid%3D479
2016/07/17 加入RPG製作,勿忘初衷!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1971
在线时间
926 小时
注册时间
2015-10-26
帖子
356

开拓者

3
 楼主| 发表于 2017-2-22 14:17:43 | 只看该作者
本帖最后由 踢腿水上飘 于 2017-2-22 14:21 编辑
QQ蚊子湯 发表于 2017-2-22 13:33
你之前解這一題的時候不是就會加實例變量了嗎~
https://rpg.blue/forum.php?mod=viewthread&tid=398881& ...


那是别人的脚本啊,我并不会……

给每个人分别上盾真是头大
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
帖子
649

开拓者

4
发表于 2017-2-22 14:31:38 | 只看该作者
    class Game_Actor

      attr_accessor :description
      def description
        @description || actor.description
      end

    end

可以依樣畫葫蘆阿
把說明改成護盾 (變數名)
文字改成數字而已 (變數值)

計算傷害的時候調用 傷害-self.護盾值方法           (此為理解用的偽代碼)

你想加判斷可以創一個方法  (理解用偽代碼)

def 護盾?
@護盾值 > 0
end
(類似你上面用全局變量$Magic_Shield做的事情)


總之就是你把$Hurt_Shield改成@Hurt_Shield就可以個別判斷了
2016/07/17 加入RPG製作,勿忘初衷!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
帖子
649

开拓者

5
发表于 2017-2-27 07:44:16 | 只看该作者
本帖最后由 QQ蚊子湯 于 2017-2-27 07:45 编辑

連假早上有點空閒,寫個給你參考
我沒怎麼改你的結構,只改我想吐血的部分www

你可以感受一下實例變量和全局變量的不同之處

RUBY 代码复制
  1. class Game_Actor
  2.        attr_accessor  :game_Shield
  3.        attr_accessor  :magic_Shield
  4.        def add_state(state_id)
  5.       super
  6.      self.game_Shield =500  if state_id == 50
  7.     end
  8.       def apply_guard(value)
  9.         super
  10.         if state?(50) && value > 0   # 50 号状态
  11.           v = @game_Shield   
  12.           if v >= value      
  13.             @hurt_Shield = value
  14.             @magic_Shield = true
  15.             @game_Shield -= value.to_i
  16.             return 0
  17.           else
  18.             value -= v
  19.             @hurt_Shield = value
  20.             @magic_Shield = true
  21.             @game_Shield  = 0
  22.             self.remove_state(50)
  23.             value
  24.           end
  25.         else
  26.           @magic_Shield = false
  27.           value
  28.         end
  29.       end
  30.     end
  31.     class Game_ActionResult
  32.       #--------------------------------------------------------------------------
  33.       # ● 获取 HP 伤害的文字
  34.       #--------------------------------------------------------------------------
  35.       def hp_damage_text
  36.         if @hp_drain > 0
  37.           fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
  38.           sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
  39.         elsif @hp_damage > 0
  40.           fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
  41.           sprintf(fmt, @battler.name, @hp_damage)
  42.         elsif @hp_damage < 0
  43.           fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
  44.           sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
  45.         elsif @battler.magic_Shield == true
  46.           fmt = "护盾抵消了%s点伤害,还剩下#{@battler.game_Shield}点护盾。"
  47.           @battler.magic_Shield = false
  48.           sprintf(fmt,@Hurt_Shield.to_i)
  49.         else
  50.           fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
  51.           sprintf(fmt, @battler.name)
  52.         end
  53.       end
  54.     end

点评

嗯,我弄下来先研究下  发表于 2017-2-27 16:17

评分

参与人数 1梦石 +1 收起 理由
RaidenInfinity + 1 版主认可的答案

查看全部评分

2016/07/17 加入RPG製作,勿忘初衷!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
265
在线时间
64 小时
注册时间
2012-1-22
帖子
64
6
发表于 2019-2-17 20:58:44 | 只看该作者
我用了楼上改良版的脚本,发现未使用护盾技能时攻击敌人有时会报错,报错是45行enemy什么的,不知道是怎么回事。

而当友方附加护盾时,提示永远是吸收了0伤害,护盾剩余数倒是正确,但是好像如果一次性伤害大于护盾数,则没有任何吸收造成没有减免的伤害,这好像也不对吧?

点评

我觉得你可以另外开一贴提问,这个问题是“已经解决”的状态  发表于 2019-2-17 21:03
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 20:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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