Project1

标题: 如何设置被动触发条件 [打印本页]

作者: 造小梦    时间: 2019-1-28 18:08
标题: 如何设置被动触发条件
我想做个被动技能,就是人物死亡时自动满血复活,一局只能触发一次,望大佬指点
作者: jianyulei    时间: 2019-1-28 21:31
你要的东西

作者: 造小梦    时间: 2019-1-28 21:41
jianyulei 发表于 2019-1-28 21:31
[fold=你要的东西]

#==============================================================================

哦哦!谢谢大佬!
作者: 造小梦    时间: 2019-1-28 21:45
jianyulei 发表于 2019-1-28 21:31
[fold=你要的东西]

#==============================================================================

等等,这样设置的话会无限重生耶
作者: 造小梦    时间: 2019-1-28 21:54
jianyulei 发表于 2019-1-28 21:31
[fold=你要的东西]

#==============================================================================

而且没用啊,死后并没有复活
作者: RMVXA    时间: 2019-1-29 05:20
很实用的功能耶
作者: 造小梦    时间: 2019-1-29 11:04
造小梦 发表于 2019-1-28 21:54
而且没用啊,死后并没有复活

还是没有,会显示错误,一进游戏就说什么“发生SystemStackError。stack level too deep”
作者: KB.Driver    时间: 2019-1-29 12:02


RUBY 代码复制
  1. module CLD99
  2.   module YOMIGAERU
  3.  
  4.     SKILL_ID = 5
  5.     # 死后满血复活的被动技能,只能设置一个
  6.  
  7.     FMT = "因为某个被动技能,%s满血复活了。"
  8.     # 复活后显示的消息,%s处会变为复活者的名字
  9.  
  10.     SOUND = "Audio/SE/Saint7"
  11.     # 复活时的音效
  12.  
  13.   end
  14. end
  15.  
  16. class << BattleManager
  17.   #--------------------------------------------------------------------------
  18.   # ● [别名修改]设置
  19.   #--------------------------------------------------------------------------
  20.   alias :setup_for_yomigaeru :setup
  21.   def setup(*args)
  22.     setup_for_yomigaeru(*args)
  23.     $yomigaeru = {} # 是否重生过的标志
  24.   end  
  25.   #--------------------------------------------------------------------------
  26.   # ● [别名修改]判断胜负
  27.   #--------------------------------------------------------------------------
  28.   alias judge_win_loss_for_yomigaeru judge_win_loss
  29.   def judge_win_loss
  30.     return false if $wait_yomigaeru # 先等待重生
  31.     judge_win_loss_for_yomigaeru
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● [追加]战斗消息
  35.   #--------------------------------------------------------------------------
  36.   def show_log(text)
  37.     return unless SceneManager.scene_is?(Scene_Battle)
  38.     SceneManager.scene.show_log(text)
  39.   end
  40. end
  41.  
  42. class Scene_Battle
  43.   #--------------------------------------------------------------------------
  44.   # ● [追加]战斗消息
  45.   #--------------------------------------------------------------------------
  46.   def show_log(text)
  47.     @log_window.add_text(text)
  48.     @log_window.wait
  49.   end
  50. end
  51.  
  52. class Game_Actor
  53.   #--------------------------------------------------------------------------
  54.   # ● [别名修改]刷新
  55.   #--------------------------------------------------------------------------
  56.   alias refresh_for_yomigaeru refresh
  57.   def refresh
  58.     return refresh_for_yomigaeru unless $game_party.in_battle # 非战斗中不触发
  59.     $wait_yomigaeru = true # 延迟胜负判断
  60.     refresh_for_yomigaeru # 原方法
  61.     if @states.include?(death_state_id)
  62.       if @skills.include?(CLD99::YOMIGAERU::SKILL_ID) && !$yomigaeru[@actor_id]
  63.         remove_state(death_state_id)
  64.         change_hp(self.mhp, enable_death = false)
  65.         BattleManager.show_log(sprintf(CLD99::YOMIGAERU::FMT, @name))
  66.         Audio.se_play(CLD99::YOMIGAERU::SOUND)
  67.         $yomigaeru[@actor_id] = true
  68.       end
  69.     end
  70.     $wait_yomigaeru = false # 恢复胜负判断
  71.   end
  72. end


自己写的一次复活,比较随意。
新建工程测试通过,如果有问题请报告。
作者: 造小梦    时间: 2019-1-29 12:16
KB.Driver 发表于 2019-1-29 12:02
module CLD99
  module YOMIGAERU
   

没用,无法复活
作者: KB.Driver    时间: 2019-1-29 12:48
造小梦 发表于 2019-1-29 12:16
没用,无法复活



我在新建工程里是可以复活的。
你先检查一下技能id有没有弄错,然后看看测试的时候人物是否学习了技能。
如果用的不是默认的战斗系统,麻烦贴一下。
作者: 造小梦    时间: 2019-1-29 14:24
KB.Driver 发表于 2019-1-29 12:48
我在新建工程里是可以复活的。
你先检查一下技能id有没有弄错,然后看看测试的时候人物是否学习了技能 ...

战斗系统是自制的。。。




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