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

Project1

 找回密码
 注册会员
搜索

关于覆盖被装备赋予的自动状态及延伸问题

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

正文摘要:

首先,之前提问过的【如何让一个状态能够覆盖被装备赋予的自动状态】 虽然成功得到了一串代码,然而这串代码却衍生了其他问题 RUBY 代码复制class Game_Battlerdef states    s=@ ...

回复

灯笼菜刀王 发表于 2025-8-19 15:51:00
本帖最后由 灯笼菜刀王 于 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前即可
soulsaga 发表于 2025-8-17 02:11:47
本帖最后由 soulsaga 于 2025-8-17 02:13 编辑

这并非覆盖了装备赋予的状态
而是让减号生效
你这个只是动画刷新时机跟状态不同
状态持续3回合实际要第4回合你懂的吧?
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2025-11-18 12:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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