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

Project1

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

[有事请教] 如何添加无敌状态也无法免疫的状态,以及状态变化解除无敌

[复制链接]

Lv4.逐梦者

素材区好人

梦石
3
星屑
9095
在线时间
3725 小时
注册时间
2011-7-21
帖子
2371

极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

跳转到指定楼层
1

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

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

x
想制作一个不受伤害的状态,于是找到了无敌状态脚本,结果发现了2个问题
1,这个状态连不能抵抗的状态都无法添加,这样想靠状态法做一些事情都做不了(毕竟状态法的前提是先添加上状态)
2,由于这个状态太无敌,我又制作了一个可以解除无敌状态的技能,结果发现根本行不通,即使在状态变化勾上减号也无法解除对方的无敌状态(其实只要解决1,便可以利用状态法解决这个问题,当然会很麻烦)

RUBY 代码复制
  1. #_/  ◆无敌状态 - KGC_Invincible◆
  2. #_/----------------------------------------------------------------------------
  3. #_/ 在状态中设置个“无敌”二字的状态即可使用。
  4. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  5.  
  6. $imported = {} if $imported == nil
  7. $imported["Invincible"] = true
  8.  
  9. if $game_special_states == nil
  10.   $game_special_states = {}
  11.   $data_states = load_data("Data/States.rxdata")
  12. end
  13. # 無敵状態ステートIDa取得
  14. state = $data_states.compact.find { |s| s.name == "回避" }
  15. $game_special_states["invincible"] = state != nil ? state.id : 0
  16.  
  17. #==============================================================================
  18. # ■ Game_Battler (分割定義 2)
  19. #==============================================================================
  20.  
  21. class Game_Battler
  22.   #--------------------------------------------------------------------------
  23.   # ● ステート [無敵] 判定
  24.   #     act : 処理対象
  25.   #--------------------------------------------------------------------------
  26.   def invincible?(act = nil)
  27.     # ステート[無敵]が付加されている場合
  28.     if self.states.include?($game_special_states["invincible"])
  29.       # 処理対象で分岐
  30.       case act
  31.       when RPG::Skill
  32.         return true if act.scope == 1 || act.scope == 2
  33.       when RPG::Item
  34.         return true if act.scope == 1 || act.scope == 2
  35.       when nil
  36.         return true
  37.       end
  38.     end
  39.     return false
  40.   end
  41. end
  42.  
  43. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  44.  
  45. #==============================================================================
  46. # ■ Game_Battler (分割定義 3)
  47. #==============================================================================
  48.  
  49. class Game_Battler
  50.   #--------------------------------------------------------------------------
  51.   # ● 通常攻撃の効果適用
  52.   #--------------------------------------------------------------------------
  53.   alias attack_effect_KGC_Invincible attack_effect
  54.   def attack_effect(attacker)
  55.     # 無敵状態の場合
  56.     if self.invincible?
  57.       # ダメージに "Miss" を設定
  58.       self.damage = "Miss"
  59.       # クリティカルフラグをクリア
  60.       self.critical = false
  61.       # 偽を返す
  62.       return false
  63.     end
  64.  
  65.     # 元の処理を実行
  66.     return attack_effect_KGC_Invincible(attacker)
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● スキルの効果適用
  70.   #--------------------------------------------------------------------------
  71.   alias skill_effect_KGC_Invincible skill_effect
  72.   def skill_effect(user, skill)
  73.     # 無敵状態の場合
  74.     if self.invincible?(skill)
  75.       # ダメージに "Miss" を設定
  76.       self.damage = "Miss"
  77.       # クリティカルフラグをクリア
  78.       self.critical = false
  79.       # 偽を返す
  80.       return false
  81.     end
  82.  
  83.     # 元の処理を実行
  84.     return skill_effect_KGC_Invincible(user, skill)
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● アイテムの効果適用
  88.   #--------------------------------------------------------------------------
  89.   alias item_effect_KGC_Invincible item_effect
  90.   def item_effect(item)
  91.     # 無敵状態の場合
  92.     if self.invincible?(item)
  93.       # ダメージに "Miss" を設定
  94.       self.damage = "Miss"
  95.       # クリティカルフラグをクリア
  96.       self.critical = false
  97.       # 偽を返す
  98.       return false
  99.     end
  100.  
  101.     # 元の処理を実行
  102.     return item_effect_KGC_Invincible(item)
  103.   end
  104. end

Lv4.逐梦者

梦石
0
星屑
6330
在线时间
1467 小时
注册时间
2015-7-25
帖子
620

极短25参与开拓者

2
发表于 6 天前 | 只看该作者
这个状态一点也不无敌呀,如果自己有无敌状态的话也可以自己给自己投毒的,只是敌人没法给你投毒 XD
RUBY 代码复制
  1. class Game_Battler
  2.   def add_state_nonresistance(target,item)
  3.     nonresistance = item.plus_state_set.select {|id| $data_states[id].nonresistance}
  4.     target.states_plus nonresistance
  5.   end
  6. end

插入上面的脚本,然后在主楼放的脚本中直接写入红色字体的脚本即可实现遇到无法抵抗的状态时会无视无敌状态的存在(但仅仅会附加无法抵抗的状态,不会造成伤害或附加非无法抵抗的状态)
alias attack_effect_KGC_Invincible attack_effect
  def attack_effect(attacker)
    # 無敵状態の場合
    if self.invincible?
      # ダメージに "Miss" を設定
      self.damage = "Miss"
      # クリティカルフラグをクリア
      self.critical = false
      
      add_state_nonresistance(self,$data_weapons[attacker.weapon_id])
      
      # 偽を返す
      return false
    end

    # 元の処理を実行
    return attack_effect_KGC_Invincible(attacker)
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #--------------------------------------------------------------------------
  alias skill_effect_KGC_Invincible skill_effect
  def skill_effect(user, skill)
    # 無敵状態の場合
    if self.invincible?(skill)
      # ダメージに "Miss" を設定
      self.damage = "Miss"
      # クリティカルフラグをクリア
      self.critical = false
      
      add_state_nonresistance(self,skill)
      
      # 偽を返す
      return false
    end

    # 元の処理を実行
    return skill_effect_KGC_Invincible(user, skill)
  end
  #--------------------------------------------------------------------------
  # ● アイテムの効果適用
  #--------------------------------------------------------------------------
  alias item_effect_KGC_Invincible item_effect
  def item_effect(item)
    # 無敵状態の場合
    if self.invincible?(item)
      # ダメージに "Miss" を設定
      self.damage = "Miss"
      # クリティカルフラグをクリア
      self.critical = false
      
      add_state_nonresistance(self,item)
      # 偽を返す
      return false
    end

    # 元の処理を実行
    return item_effect_KGC_Invincible(item)
  end
笨肉包的游戏讨论群932812135 (实时更新) 喜欢的话欢迎加入~
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.3.9
同时更新中~ (沉迷摸鱼中~更新速度较慢请见谅w)
这是属于笨肉包一个人的旅行~(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
旅途的最终目标~ ???(保密~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
9095
在线时间
3725 小时
注册时间
2011-7-21
帖子
2371

极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

3
 楼主| 发表于 6 天前 | 只看该作者
魔法丶小肉包 发表于 2025-8-31 14:00
这个状态一点也不无敌呀,如果自己有无敌状态的话也可以自己给自己投毒的,只是敌人没法给你投毒 XD
class  ...

呃,这样的话其他增益状态都无法附加上了

如果直接施加无敌状态,有时候就会报错(也有时候暂时不报错,等施加另一个增益状态时报错)
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37825
在线时间
10982 小时
注册时间
2009-3-15
帖子
4887
4
发表于 5 天前 | 只看该作者
照道理这个可能用事件就能解除
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
9095
在线时间
3725 小时
注册时间
2011-7-21
帖子
2371

极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

5
 楼主| 发表于 5 天前 | 只看该作者
soulsaga 发表于 2025-9-1 02:04
照道理这个可能用事件就能解除

如果使用是单体技能,那么系统并不知道你刚刚攻击的是谁
至于靠状态法判断,首先要挂的上状态
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6330
在线时间
1467 小时
注册时间
2015-7-25
帖子
620

极短25参与开拓者

6
发表于 5 天前 | 只看该作者
无忧谷主幻 发表于 2025-8-31 22:55
呃,这样的话其他增益状态都无法附加上了

如果直接施加无敌状态,有时候就会报错(也有时候暂时不报错, ...

忘记考虑角色不拿武器的情况了,改成这样
RUBY 代码复制
  1. class Game_Battler
  2.   def add_state_nonresistance(target,item)
  3.     return unless item
  4.     nonresistance = item.plus_state_set.select {|id| $data_states[id].nonresistance}
  5.     target.states_plus nonresistance
  6.   end
  7. end
笨肉包的游戏讨论群932812135 (实时更新) 喜欢的话欢迎加入~
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.3.9
同时更新中~ (沉迷摸鱼中~更新速度较慢请见谅w)
这是属于笨肉包一个人的旅行~(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
旅途的最终目标~ ???(保密~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
9095
在线时间
3725 小时
注册时间
2011-7-21
帖子
2371

极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

7
 楼主| 发表于 4 天前 | 只看该作者
魔法丶小肉包 发表于 2025-9-1 15:22
忘记考虑角色不拿武器的情况了,改成这样
class Game_Battler
  def add_state_nonresistance(target,ite ...

还是一样,其他状态上不去,回避出错,不过这次是111行
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37825
在线时间
10982 小时
注册时间
2009-3-15
帖子
4887
8
发表于 4 天前 | 只看该作者
RUBY 代码复制
  1. class Scene_Battle  
  2.   attr_accessor :active_battler
  3.   attr_accessor :target_battlers
  4. end


插入这个后
在事件用$scene.target_battlers[0]
就是你单体攻击的目标
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
9095
在线时间
3725 小时
注册时间
2011-7-21
帖子
2371

极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

9
 楼主| 发表于 4 天前 | 只看该作者
soulsaga 发表于 2025-9-2 06:39
class Scene_Battle  
  attr_accessor :active_battler
  attr_accessor :target_battlers

然后如何用条件分歧给刚刚攻击的目标附加或解除状态?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37825
在线时间
10982 小时
注册时间
2009-3-15
帖子
4887
10
发表于 4 天前 | 只看该作者
本帖最后由 soulsaga 于 2025-9-2 07:59 编辑

其实只要照抄默认的脚本过来就可以了[

quote]无忧谷主幻 发表于 2025-9-2 07:10
然后如何用条件分歧给刚刚攻击的目标附加或解除状态?[/quote]

RUBY 代码复制
  1. #_/  ◆无敌状态 - KGC_Invincible◆
  2. #_/----------------------------------------------------------------------------
  3. #_/ 在状态中设置个“无敌”二字的状态即可使用。
  4. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  5.  
  6. $imported = {} if $imported == nil
  7. $imported["Invincible"] = true
  8.  
  9. if $game_special_states == nil
  10.   $game_special_states = {}
  11.   $data_states = load_data("Data/States.rxdata")
  12. end
  13. # 無敵状態ステートIDa取得
  14. state = $data_states.compact.find { |s| s.name == "回避" }
  15. $game_special_states["invincible"] = state != nil ? state.id : 0
  16.  
  17. #==============================================================================
  18. # ■ Game_Battler (分割定義 2)
  19. #==============================================================================
  20.  
  21. class Game_Battler
  22.   #--------------------------------------------------------------------------
  23.   # ● ステート [無敵] 判定
  24.   #     act : 処理対象
  25.   #--------------------------------------------------------------------------
  26.   def invincible?(act = nil)
  27.     # ステート[無敵]が付加されている場合
  28.     if self.states.include?($game_special_states["invincible"])
  29.       # 処理対象で分岐
  30.       case act
  31.       when RPG::Skill
  32.         return true if act.scope == 1 || act.scope == 2
  33.       when RPG::Item
  34.         return true if act.scope == 1 || act.scope == 2
  35.       when nil
  36.         return true
  37.       end
  38.     end
  39.     return false
  40.   end
  41. end
  42.  
  43. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  44.  
  45. #==============================================================================
  46. # ■ Game_Battler (分割定義 3)
  47. #==============================================================================
  48.  
  49. class Game_Battler
  50.   #--------------------------------------------------------------------------
  51.   # ● 通常攻撃の効果適用
  52.   #--------------------------------------------------------------------------
  53.   alias attack_effect_KGC_Invincible attack_effect
  54.   def attack_effect(attacker)
  55.     # 無敵状態の場合
  56.     if self.invincible?
  57.       effective=true
  58.       # ダメージに "Miss" を設定
  59.       self.damage = "Miss"
  60.       # クリティカルフラグをクリア
  61.       self.critical = false
  62.       effective |= states_plus(attacker.plus_state_set)
  63.       effective |= states_minus(attacker.minus_state_set)
  64.       return effective
  65.     end
  66.  
  67.     # 元の処理を実行
  68.     return attack_effect_KGC_Invincible(attacker)
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● スキルの効果適用
  72.   #--------------------------------------------------------------------------
  73.   alias skill_effect_KGC_Invincible skill_effect
  74.   def skill_effect(user, skill)
  75.     # 無敵状態の場合
  76.     if self.invincible?(skill)
  77.       effective=true
  78.       # ダメージに "Miss" を設定
  79.       self.damage = "Miss"
  80.       # クリティカルフラグをクリア
  81.       self.critical = false
  82.       effective |= states_plus(skill.plus_state_set)
  83.       effective |= states_minus(skill.minus_state_set)
  84.       return effective
  85.     end
  86.  
  87.     # 元の処理を実行
  88.     return skill_effect_KGC_Invincible(user, skill)
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● アイテムの効果適用
  92.   #--------------------------------------------------------------------------
  93.   alias item_effect_KGC_Invincible item_effect
  94.   def item_effect(item)
  95.     # 無敵状態の場合
  96.     if self.invincible?(item)
  97.       effective=true
  98.       # ダメージに "Miss" を設定
  99.       self.damage = "Miss"
  100.       # クリティカルフラグをクリア
  101.       self.critical = false
  102.       effective |= states_plus(item.plus_state_set)
  103.       effective |= states_minus(item.minus_state_set)
  104.       return effective
  105.     end
  106.  
  107.     # 元の処理を実行
  108.     return item_effect_KGC_Invincible(item)
  109.   end
  110. end


之后给攻击技能解除状态打勾就行
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-9-6 05:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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