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

Project1

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

[有事请教] 关于覆盖被装备赋予的自动状态及延伸问题

[复制链接]

Lv4.逐梦者

素材区好人

梦石
3
星屑
8976
在线时间
3706 小时
注册时间
2011-7-21
帖子
2361

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

跳转到指定楼层
1

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

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

x
首先,之前提问过的【如何让一个状态能够覆盖被装备赋予的自动状态】
虽然成功得到了一串代码,然而这串代码却衍生了其他问题
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

1,这并非覆盖了装备赋予的状态,而是让装备赋予的状态不显示,但效果还在。关于这点,我其实想到了用事件解决的方法(虽然很复杂)
2,关于状态和显示动画不同步
首先,角色赋予了比坚盾更高一级的镜盾状态
之后,镜盾消失,变回坚盾,此时可以看到,状态动画已经切换回坚盾的状态动画了,然而状态栏里的名字依然还是镜盾,必须再次行动后,状态名才被改回来

关于这点,我也尝试自行解决
具体为在Window_BattleStatus加了检测状态变化并刷新
检测状态变化并刷新

结果发现,在角色使用技能并还在播放技能动画的的时候,状态便已经被附加上了


2 (1).png (432.38 KB, 下载次数: 0)

2 (1).png

11.png (445.74 KB, 下载次数: 0)

11.png

Lv5.捕梦者

梦石
0
星屑
37730
在线时间
10957 小时
注册时间
2009-3-15
帖子
4883
2
发表于 5 天前 | 只看该作者
本帖最后由 soulsaga 于 2025-8-17 02:13 编辑

这并非覆盖了装备赋予的状态
而是让减号生效
你这个只是动画刷新时机跟状态不同
状态持续3回合实际要第4回合你懂的吧?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
8976
在线时间
3706 小时
注册时间
2011-7-21
帖子
2361

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

3
 楼主| 发表于 3 天前 | 只看该作者
1,又测试了一遍,除了没有绕过系统检测外,确实不是叠加,这样的话只要改一下设置应该不是问题

2,如果我不改Window_BattleStatus的话,就会出现这样的问题
但改了之后又会在播放技能动画之前就赋予状态
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
40054
在线时间
5820 小时
注册时间
2006-11-10
帖子
6694
4
发表于 3 天前 | 只看该作者
本帖最后由 灯笼菜刀王 于 2025-8-20 10:25 编辑

原因:  动画只是表演给你看的, 战斗其实在你按下确定键的时候就已经结束了, 所以直接搞"源头" 当然会"不同步啦"

要让自动状态和默认一样处理只要改动几个地方就行了
  1. class Game_Battler
  2.   def add_state(state_id, force = false)
  3.     return if (st=$data_states[state_id]).nil?
  4.     return if @states.any?{|i| $data_states[i].minus_state_set.include?(
  5.     state_id) and !st.minus_state_set.include?(i)}
  6.     if !state?(state_id)
  7.       @states.push(state_id)
  8.       @hp = 0 if st.zero_hp
  9.       1.step($data_states.size - 1,1){|i| a = i + 1 ;
  10.       add_state(a) if st.plus_state_set.include?(i) ;
  11.       remove_state(a,true) if st.minus_state_set.include?(a)}
  12.       @states.sort! do |a, b| ;state_a = $data_states[a] ;state_b = $data_states[b]
  13.         if state_a.rating > state_b.rating ;-1
  14.         elsif state_a.rating < state_b.rating ;+1
  15.         elsif state_a.restriction > state_b.restriction ;-1
  16.         elsif state_a.restriction < state_b.restriction ;+1
  17.         else ;a <=> b
  18.         end
  19.       end
  20.     end
  21.     @states_turn[state_id] = -1 if force
  22.     @states_turn[state_id] = st.hold_turn if @states_turn[state_id] != -1
  23.     @current_action.clear if !movable?
  24.     @hp = [@hp, self.maxhp].min
  25.     @sp = [@sp, self.maxsp].min
  26.   end
  27.   
  28.   alias old_remove remove_state
  29.   def remove_state(state_id, force = false)
  30.     old_remove(state_id, force = false)
  31.     return if self.is_a?(Game_Enemy)
  32.     7.times{|i| eval("update_auto_state(nil,$data_armors[@armor#{i+1}_id])")}
  33.   end
  34. end

  35. class Game_Actor < Game_Battler
  36.   def equip(equip_type, id)
  37.     if equip_type == 0
  38.       return unless id == 0 or $game_party.weapon_number(id) > 0
  39.       $game_party.gain_weapon(@weapon_id, 1) ;@weapon_id = id
  40.       $game_party.lose_weapon(id, 1)
  41.     else
  42.       return unless id == 0 or $game_party.armor_number(id) > 0
  43.       a = eval("@armor#{equip_type}_id")
  44.       $game_party.gain_armor(a, 1) ; eval("@armor#{equip_type}_id = #{id}")
  45.       $game_party.lose_armor(id, 1)
  46.     end
  47.     @states_turn.delete_if{|a,b| b < 0}
  48.     @states.delete_if{|i| !@states_turn.include?(i)}
  49.     7.times{|i| eval("update_auto_state(nil,$data_armors[@armor#{i+1}_id])")}
  50.   end
  51. end
复制代码


把它塞到main前即可
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
8976
在线时间
3706 小时
注册时间
2011-7-21
帖子
2361

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

5
 楼主| 发表于 3 天前 | 只看该作者
灯笼菜刀王 发表于 2025-8-19 15:51
原因:  动画只是表演给你看的, 战斗其实在你按下确定键的时候就已经结束了, 所以直接搞"源头" 当然会"不同 ...

感谢,很接近了,仅仅只会在状态回合交替且实行普通攻击的瞬间会出现不同步,可以说基本可以忽略了
然而,却还是衍生了新的问题
如果角色装备一个带有坚盾的装备后再卸下来,坚盾不会消失

点评

更新了下脚本再试试, 你说平A不同步, 搜索update_auto_state, 把除了 def equip 和 def setup 下面外, 其他位置的update_auto_state都删除  发表于 前天 10:25
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-8-22 12:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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