Project1

标题: 请问如何制作战斗中自动生效的重生十字章? [打印本页]

作者: 铁道工    时间: 2011-5-21 15:16
标题: 请问如何制作战斗中自动生效的重生十字章?
本帖最后由 铁道工 于 2011-5-23 13:39 编辑

我想设置一种类似重生十字章作用的物品,其持有人在战斗中如果被击倒则自动使持有人复活,不知该如何设置?
以下是我用公众事件做的无效设置。
dsu_plus_rewardpost_czw
作者: pl03424626    时间: 2011-5-23 09:29
LZ事件V5。。。其实很简单吧,
条件分歧,XX的状态是否死亡
条件分歧,是否存在OOO道具
   XX复活,OOO减一
   -------------------
---------------------------
-------------------------------------

作者: 铁道工    时间: 2011-5-23 13:39

楼上,根据您的建议我这样设置了一次,但依然无效= =、
作者: 月夜神音    时间: 2011-5-23 14:26
这事件没并行处理啊?
作者: zhyd1010    时间: 2011-5-23 15:36
用事件做有用吗?好像人物一旦全部战斗不能,就立马GAMEOVER了的说,事件什么的都无视了。
甚至设置敌人队伍事件为xx生命值低于0触发事件,都没有用。
所以说,队伍中如果只有一个角色,用事件来触发重生效果好像不可能呢
作者: 铁道工    时间: 2011-5-24 09:48
本帖最后由 铁道工 于 2011-5-24 10:00 编辑

回复 4楼
如果要执行并行处理的话,请问是否需要另外设置一个事件以打开开关呢?

回复 5楼
也试过在脚本的game actor页修改过perform collapse这部分,但是由于不知道物品id(或者无法实现脚本如判断state.include?般判断是否item.include?),因而也没有作用= =、
刚刚又尝试在队伍中添加一名队友,经测试队友存活时依然复活不能= =
作者: pl03424626    时间: 2011-5-25 21:34
本帖最后由 pl03424626 于 2011-5-25 21:39 编辑

在战斗事件第一页设定,当XXX角色状态为死亡时,执行那事件。
单人模式下,估计要修改下战斗脚本,不然角色全死了就GAMEOVEA了。
作者: 铁道工    时间: 2011-5-26 11:26
请问楼上,如果是修改脚本的话,那么应该修改哪部分呢?

作者: psychopiz    时间: 2011-5-27 14:23
你的 这个 重生十字章是 装备吧 ?
装备的 话 就在 game_battler 里面 找到 如果 hp为0 就 附加 1号(死亡)状态 那部分
然后 加入 条件 如果 self.(武器的 话 就是 weapons,防具 就是 Amors。。好像,没开 rpgvx所以忘了 =。=).include?(你的 重生十字章 的 id) ,如果 达成 这个 条件 就 self.hp = self. maxhp,如果 这个 装备 会被 消耗 ,就 再加上    卸下这个 装备, 这个物品的 数量 -1    就 完全 ok。。。

作者: psychopiz    时间: 2011-5-27 14:25
对了 ,self.hp = self.maxhp 之后 别忘了 去掉 self的 死亡状态 。。
作者: Yuee    时间: 2011-5-27 17:46
本帖最后由 Yuee 于 2011-5-27 18:36 编辑
  1. #==============================================================================
  2. # ■ 重生十字章功能
  3. #==============================================================================

  4. #--------------------------------------------------------------------------
  5. # ● 设定
  6. #--------------------------------------------------------------------------
  7. module Rebirth_Setting
  8. #模式
  9. # 1 :持有复活道具,任意角色死亡即会自动复活一次
  10. # 2 : 装备有复活用防具的角色死亡时,会自动复活一次
  11. REBIRTH_MODE = 1

  12. #重生道具ID/防具ID
  13. REBIRTH_ITEM_ID = 21

  14. #重生文本
  15. REBIRTH_TEXT1 = "发出了耀眼的光芒!" # 例:重生十字章发出了耀眼的光芒!
  16. REBIRTH_TEXT2 = "信春哥满血原地复活了!" # 例:拉尔夫信春哥满血原地复活了!
  17. end

  18. #==============================================================================
  19. class Scene_Battle < Scene_Base
  20.   #--------------------------------------------------------------------------
  21.   # ● 显示附加状态
  22.   # ★ 追加定义
  23.   #     target : 目标
  24.   #     obj    : 技能或物品
  25.   #--------------------------------------------------------------------------
  26.   alias display_added_states_rebirth display_added_states
  27.   
  28.   def display_added_states(target, obj = nil)
  29.     display_added_states_rebirth(target, obj)
  30.    
  31.     #如果目标玩家角色已经死亡,则尝试重生
  32.     if target.actor? and target.dead?
  33.       if target.try_to_rebirth
  34.         @message_window.clear
  35.    
  36.         wait(20)
  37.         
  38.         case Rebirth_Setting::REBIRTH_MODE
  39.         when 1
  40.           item_name = $data_items[Rebirth_Setting::REBIRTH_ITEM_ID].name
  41.         when 2
  42.           item_name = $data_armors[Rebirth_Setting::REBIRTH_ITEM_ID].name
  43.         end
  44.    
  45.         text = item_name + Rebirth_Setting::REBIRTH_TEXT1
  46.         saint_se = RPG::SE.new("Saint7",80)
  47.         saint_se.play
  48.         @message_window.add_instant_text(text)
  49.         wait(50)
  50.         
  51.         text = target.name + Rebirth_Setting::REBIRTH_TEXT2
  52.         Sound.play_recovery
  53.         @message_window.add_instant_text(text)
  54.         wait(50)
  55.       end
  56.     end
  57.   
  58.   end #def display_added_states(target, obj = nil)
  59. end # class Scene_Battle < Scene_Base

  60. #==============================================================================
  61. class Game_Actor < Game_Battler  
  62.   #--------------------------------------------------------------------------
  63.   # ● 尝试重生
  64.   # ★ 新定义
  65.   #--------------------------------------------------------------------------
  66.   def try_to_rebirth
  67.     # 道具重生
  68.     if Rebirth_Setting::REBIRTH_MODE == 1 and $game_party.has_item?($data_items[Rebirth_Setting::REBIRTH_ITEM_ID])
  69.       $game_party.lose_item($data_items[Rebirth_Setting::REBIRTH_ITEM_ID],1)
  70.       remove_state(1)
  71.       @hp = maxhp
  72.       @mp = maxmp
  73.       return true
  74.     # 装备防具重生
  75.     elsif Rebirth_Setting::REBIRTH_MODE == 2
  76.       for armor in armors
  77.         if armor.id == Rebirth_Setting::REBIRTH_ITEM_ID
  78.           discard_equip($data_armors[Rebirth_Setting::REBIRTH_ITEM_ID])
  79.           remove_state(1)
  80.           @hp = maxhp
  81.           @mp = maxmp
  82.           return true
  83.         end
  84.       end # for armor
  85.     end # if
  86.    
  87.     return false
  88.   end # try_to_rebirth(target)
  89.   
  90. end # class Game_Actor < Game_Battler
复制代码
支持两种模式,一种是道具模式,一种是防具模式
在最前面的设定配置

道具模式只要身上持有复活用道具,任意角色被击败都会自动复活一次。
防具模式需要把复活用防具装备着,装备着复活防具的角色被打死后,会复活一次,之后防具消失。

以上只对战斗中受到伤害死亡有效,用事件改成死亡是无效的。

简单测了一下,应该没问题
作者: fux2    时间: 2011-5-27 19:38
插入到Main上方game_battler下方
  1. class Game_Battler
  2.   def add_state(state_id)
  3.     state = $data_states[state_id]        # 获取状态资料
  4.     return if state == nil                # 资料是否为空?
  5.     return if state_ignore?(state_id)     # 状态是否无视?
  6.     unless state?(state_id)               # 状态是否存在?
  7.       unless state_offset?(state_id)      # 状态是否抵销?
  8.         @states.push(state_id)            # 加入状态
  9.       end
  10.       if state_id == 1                    # 如状态是「无法战斗」(1号状态)
  11.         @hp = 0                           # 设体力为0
  12.         if $game_party.has_item?($data_items[20])   # 是否有道具20
  13.           $game_party.gain_item($data_items[20], -1) # 道具-1
  14.           recover_all           # 回复
  15.         end
  16.       end
  17.       unless inputable?                   # 除非角色无法输入命令
  18.         @action.clear                     # 清除所有行动
  19.       end
  20.       for i in state.state_set            # 获取「移除状态」列表
  21.         remove_state(i)                   # 移除状态
  22.         @removed_states.delete(i)         # 清除
  23.       end
  24.       sort_states                         # 依照优先度排列状态
  25.     end
  26.     @state_turns[state_id] = state.hold_turn    # 设置回合数
  27.   end
  28. end
复制代码

作者: 铁道工    时间: 2011-5-27 21:29
非常感谢楼上诸位的帮助,可惜只能认可一个答案。




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