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

Project1

 找回密码
 注册会员
搜索

这个护盾的脚本,请大家伙看看

查看数: 2982 | 评论数: 5 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-2-22 12:00

正文摘要:

本帖最后由 踢腿水上飘 于 2017-2-22 14:25 编辑 这个脚本可以提供一个护盾技能,使用后附加状态63,护盾值取决于变量84的值,上了护盾之后受到攻击先扣变量84的值,扣到0了才破盾扣血 但这个脚本有几个问题 一是 ...

回复

newface 发表于 2019-2-17 20:58:44
我用了楼上改良版的脚本,发现未使用护盾技能时攻击敌人有时会报错,报错是45行enemy什么的,不知道是怎么回事。

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

点评

我觉得你可以另外开一贴提问,这个问题是“已经解决”的状态  发表于 2019-2-17 21:03
QQ蚊子湯 发表于 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 版主认可的答案

查看全部评分

QQ蚊子湯 发表于 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就可以個別判斷了
踢腿水上飘 发表于 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& ...


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

给每个人分别上盾真是头大
QQ蚊子湯 发表于 2017-2-22 13:33:48
你之前解這一題的時候不是就會加實例變量了嗎~
https://rpg.blue/forum.php?mod=v ... peid%26typeid%3D479
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-5-22 06:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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