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

Project1

 找回密码
 注册会员
搜索

如何让一个状态能够覆盖被装备赋予的自动状态

查看数: 909 | 评论数: 13 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2025-8-7 20:30

正文摘要:

本帖最后由 无忧谷主幻 于 2025-8-7 20:32 编辑 有2个状态,一个坚盾,一个上级坚盾,这两个状态只能存在一个,比如更上位的上级坚盾能够覆盖下位的坚盾,如果坚盾是通过技能或其他事件赋予的,只需要在状态变化 ...

回复

无忧谷主幻 发表于 2025-8-16 04:30:57
soulsaga 发表于 2025-8-16 03:26
@armor5_id = 0
我说了在SETUP那吧?你自己改过的呀..怎么又乱来

刚刚研究了一下状态显示和实际状态更新变化不同步的问题,你看看这样改可以吗
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_BattleStatus
  3. #------------------------------------------------------------------------------
  4. #  显示战斗画面同伴状态的窗口。
  5. #==============================================================================
  6.  
  7. class Window_BattleStatus < Window_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super(0, 320, 640, 160)
  13.     self.contents = Bitmap.new(width - 32, height - 32)
  14.     @level_up_flags = [false, false, false, false]
  15.     # 记录初始状态,用于后续对比
  16.     @last_states = $game_party.actors.map { |actor| actor.states.clone }
  17.     refresh
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 释放
  21.   #--------------------------------------------------------------------------
  22.   def dispose
  23.     super
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 设置升级标志
  27.   #     actor_index : 角色索引
  28.   #--------------------------------------------------------------------------
  29.   def level_up(actor_index)
  30.     @level_up_flags[actor_index] = true
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 刷新
  34.   #--------------------------------------------------------------------------
  35.   def refresh
  36.     self.contents.clear
  37.     @item_max = $game_party.actors.size
  38.     for i in 0...$game_party.actors.size
  39.       actor = $game_party.actors[i]
  40.       actor_x = i * 160 + 4
  41.       draw_actor_name(actor, actor_x, 0)
  42.       draw_actor_hp(actor, actor_x, 32, 120)
  43.       draw_actor_sp(actor, actor_x, 64, 120)
  44.       if @level_up_flags[i]
  45.         self.contents.font.color = normal_color
  46.         self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  47.       else
  48.         draw_actor_state(actor, actor_x, 96)
  49.       end
  50.     end
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 刷新画面
  54.   #--------------------------------------------------------------------------
  55.   def update
  56.     super
  57.     # 检测状态变化并刷新
  58.     check_state_change
  59.     # 主界面的不透明度调整
  60.     if $game_temp.battle_main_phase
  61.       self.contents_opacity -= 4 if self.contents_opacity > 191
  62.     else
  63.       self.contents_opacity += 4 if self.contents_opacity < 255
  64.     end
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 检测状态变化
  68.   #--------------------------------------------------------------------------
  69.   def check_state_change
  70.     # 获取当前所有角色的状态
  71.     current_states = $game_party.actors.map { |actor| actor.states.clone }
  72.     # 对比上一帧状态,不同则刷新
  73.     if @last_states != current_states
  74.       refresh
  75.       @last_states = current_states.clone
  76.     end
  77.   end
  78. end
soulsaga 发表于 2025-8-16 03:26:02
本帖最后由 soulsaga 于 2025-8-16 03:37 编辑

@armor5_id = 0
我说了在SETUP那吧?你自己改过的呀..怎么又乱来

def setup(actor_id)那里把3个
@armor5_id = actor.armor5_id
    @armor6_id = actor.armor6_id
    @armor7_id = actor.armor7_id

改成= 0

我想说你用默认工程测我的脚本看看..你加太多东西了
soulsaga 发表于 2025-8-16 01:52:22
脚本已更..但没有测有没用
soulsaga 发表于 2025-8-12 01:53:55
本帖最后由 soulsaga 于 2025-8-16 02:01 编辑

RUBY 代码复制
  1. class Game_Battler
  2. def states
  3.     s=@states.clone
  4.     for a in s
  5.      for i in $data_states[a].minus_state_set
  6.      s.delete(i) if s.include?(i)
  7.    end
  8.    end
  9.     return s
  10.     end
  11.   end
  12. end


其实只要直接控制状态本身的就行了
只需要在状态变化勾上减号即可

下面的脚本即使装备多个附加相同状态的装备
卸下一个后还会保留同一个状态
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2. #--------------------------------------------------------------------------
  3.   # ● 更新自动状态
  4.   #     old_armor : 卸下防具
  5.   #     new_armor : 装备防具
  6.   #--------------------------------------------------------------------------
  7.   def update_auto_state(old_armor, new_armor, type=1)
  8.     add_state($data_armors[@armor1_id].auto_state_id, true) if @armor1_id!=0
  9.     add_state($data_armors[@armor2_id].auto_state_id, true) if @armor2_id!=0
  10.     add_state($data_armors[@armor3_id].auto_state_id, true) if @armor3_id!=0
  11.     add_state($data_armors[@armor4_id].auto_state_id, true) if @armor4_id!=0
  12.     add_state($data_armors[@armor5_id].auto_state_id, true) if @armor5_id!=0
  13.     add_state($data_armors[@armor6_id].auto_state_id, true) if @armor6_id!=0
  14.     add_state($data_armors[@armor7_id].auto_state_id, true) if @armor7_id!=0
  15.     # 强制解除卸下防具的自动状态
  16.     if old_armor != nil and old_armor.auto_state_id != 0
  17.       remove_state(old_armor.auto_state_id, true)
  18.     end
  19.     # 强制附加装备防具的自动状态
  20.     if new_armor != nil and new_armor.auto_state_id != 0
  21.       add_state(new_armor.auto_state_id, true)
  22.     end
  23.   end
  24. end


@armor5_id = 0
@armor6_id = 0
@armor7_id = 0

setup那里改成0

update_auto_state(nil, $data_weapons[@weapon_id], 0)那也注译掉否则会报错
无忧谷主幻 发表于 2025-8-10 11:11:04
7G8XJtX 发表于 2025-8-9 23:03
你这里写成actor.armor5_id的话应该是调用$data_actors对象的armor5_id方法,但原版只有1到4的,也就是角 ...

试着加了这段,还是不行,果然要从基础逻辑开始改吗?
RUBY 代码复制
  1. class RPG::Actor
  2.   attr_accessor :armor5_id, :armor6_id, :armor7_id
  3.   def initialize
  4.     super
  5.     @armor5_id = 0  # 默认不装备
  6.     @armor6_id = 0
  7.     @armor7_id = 0
  8.   end
  9. end
7G8XJtX 发表于 2025-8-9 23:03:46
本帖最后由 7G8XJtX 于 2025-8-9 23:06 编辑
无忧谷主幻 发表于 2025-8-9 17:14
突然发现,为何与装备扩展不兼容?@armor5~@armor7 应该都添加了啊


你这里写成actor.armor5_id的话应该是调用$data_actors对象的armor5_id方法,但原版只有1到4的,也就是角色游戏开始身上4个防具,“装备项扩充&修正”里的setup是直接设了三个实例变量默认初期不装装备。嘛,我写的东西倒也没做兼容)
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2025-11-13 16:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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