| 赞 | 168 |
| VIP | |
| 好人卡 | |
| 积分 | 229 |
| 经验 | |
| 最后登录 | 2025-4-1 |
| 在线时间 | 8598 小时 |
- 梦石
- 0
- 星屑
- 22879
- 在线时间
- 8598 小时
- 注册时间
- 2011-12-31
- 回帖
- 3270
|
发表于 2014-11-4 00:45:11
|
显示全部楼层
參考(来自己閉站的RGSS研究所)
オートステート実装- #==============================================================================
- # □ オートステート実装(for VX Ace)
- #------------------------------------------------------------------------------
- # Version : 2_20120517
- # by サリサ・タイクーン
- # http://www.tycoon812.com/rgss/
- #==============================================================================
- #==============================================================================
- # □ 素材スイッチ
- #==============================================================================
- $rgsslab = {} if $rgsslab == nil
- $rgsslab["オートステート実装"] = true
- if $rgsslab["オートステート実装"]
- #==============================================================================
- # ○ カスタマイズポイント
- #==============================================================================
- module RGSSLAB end
- module RGSSLAB::Auto_State
- #--------------------------------------------------------------------------
- # ○ オートステートの文字列設定
- # 武器・防具のメモ欄にて記述する文字列を設定します。
- #
- # メモ欄に [ + NOTE + ステートID + ] と記述する事で
- # 自動付加するオートステートを設定する事ができます。
- #
- # 記述例:
- # NOTEが"オートステート:"で、ID 17に設定したい場合は
- # [オートステート:17] と記述します。
- # (複数指定する場合は、必要な分だけ指定して記述して下さい)
- #--------------------------------------------------------------------------
- NOTE = "オートステート:"
- #--------------------------------------------------------------------------
- # ○ オートステートの条件
- # オートステートの条件を指定します。
- #
- # ・記述方法
- # オートステートID => [HP, MP, ステートID]
- #
- # HP : 残りHPx‰で発動
- # MP : 残りMPx‰で発動
- # ステートID : 特定のステートIDに掛かっている時に発動
- # (オートステートによる付与では発動しません)
- #
- # 尚、該当する条件にnilの場合、条件無しになります。
- #
- # 又、ここに書かれていないオートステートIDは
- # 無条件で発動するものとして設定されます。
- # ([nil, nil, nil] と記述しているのと同じになります)
- #--------------------------------------------------------------------------
- ID = {
- 30 => [nil, nil, nil],
- }
- end
- # カスタマイズポイントは、ここまで
- #==============================================================================
- # □ RGSSLAB::Auto_State [module]
- #==============================================================================
- module RGSSLAB::Auto_State
- #--------------------------------------------------------------------------
- # ○ 素材設定用の定数定義
- #--------------------------------------------------------------------------
- MATERIAL_NAME = "オートステート実装"
- VERSION = 2
- RELEASE = 20120517
- end
- #==============================================================================
- # ■ Game_Battler [class]
- #==============================================================================
- class Game_Battler < Game_BattlerBase
- #--------------------------------------------------------------------------
- # ● ステートの付加 [再定義]
- # state_id : ステート ID
- #--------------------------------------------------------------------------
- def add_state(state_id)
- if state_addable?(state_id)
- add_new_state(state_id) unless state?(state_id)
- reset_state_counts(state_id)
- @result.added_states.push(state_id).uniq!
- self.update_auto_states if self.is_a?(Game_Actor) if $rgsslab["オートステート実装"]
- end
- end
- end
- #==============================================================================
- # ■ Game_Actor [class]
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ○ モジュールの設定
- #--------------------------------------------------------------------------
- RGSSLAB_078 = RGSSLAB::Auto_State
- #--------------------------------------------------------------------------
- # ● セットアップ [エイリアス]
- # actor_id : アクター ID
- #--------------------------------------------------------------------------
- alias auto_state_setup setup
- def setup(actor_id)
- auto_state_setup(actor_id)
- update_auto_states
- end
- #--------------------------------------------------------------------------
- # ○ オートステートの処理
- #--------------------------------------------------------------------------
- def update_auto_states
- for equip in equips.compact
- if equip.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/]
- for auto_state_id in equip.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/].scan(/(\d+)/)
- if RGSSLAB_078::ID[auto_state_id[0].to_i]
- if RGSSLAB_078::ID[auto_state_id[0].to_i][0]
- unless @hp <= self.mhp * RGSSLAB_078::ID[auto_state_id[0].to_i][0] / 1000.0
- remove_state(auto_state_id[0].to_i)
- next
- end
- end
- if RGSSLAB_078::ID[auto_state_id[0].to_i][1]
- unless @mp <= self.mmp * RGSSLAB_078::ID[auto_state_id[0].to_i][1] / 1000.0
- remove_state(auto_state_id[0].to_i)
- next
- end
- end
- if RGSSLAB_078::ID[auto_state_id[0].to_i][2]
- flag = false
- states.each do |state|
- flag = true if state.id == RGSSLAB_078::ID[auto_state_id[0].to_i][2]
- end
- next unless flag
- end
- add_state(auto_state_id[0].to_i, true)
- else
- add_state(auto_state_id[0].to_i, true)
- end
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ○ ステートの付加 [オーバーライド]
- # state_id : ステートID
- # force : 強制付加フラグ
- # flag : 復活フラグ
- #--------------------------------------------------------------------------
- def add_state(state_id, force = false, flag = false)
- return super(state_id) if force == false
- if state_id != 0 && state_id != nil
- add_new_state(state_id, flag) unless state?(state_id)
- @state_turns[state_id] = -1
- @state_steps[state_id] = -1
- @result.added_states.push(state_id).uniq!
- end
- end
- #--------------------------------------------------------------------------
- # ○ 新しいステートの付加 [オーバーライド]
- # state_id : ステートID
- # flag : 復活フラグ
- #--------------------------------------------------------------------------
- def add_new_state(state_id, flag = false)
- return super(state_id) if flag == false
- die if state_id == death_state_id
- @states.push(state_id)
- sort_states
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 装備の変更 [再定義]
- # slot_id : 装備スロット ID
- # item : 武器/防具(nil なら装備解除)
- #--------------------------------------------------------------------------
- def change_equip(slot_id, item)
- return unless trade_item_with_party(item, equips[slot_id])
- return if item && equip_slots[slot_id] != item.etype_id
- old = @equips[slot_id].object ? @equips[slot_id].object.dup : nil
- @equips[slot_id].object = item
- if old != nil
- if old.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/]
- for auto_state_id in old.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/].scan(/(\d+)/)
- remove_state(auto_state_id[0].to_i)
- end
- end
- end
- update_auto_states if $rgsslab["オートステート実装"]
- equip_combinations_process if $rgsslab["装備組み合わせオートステート付与"]
- refresh
- end
- #--------------------------------------------------------------------------
- # ○ 戦闘不能から復活 [オーバーライド]
- #--------------------------------------------------------------------------
- def revive
- super
- for equip in equips.compact
- if equip.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/]
- for auto_state_id in equip.note[/(\[#{RGSSLAB_078::NOTE}(\d+)\])+/].scan(/(\d+)/)
- add_state(auto_state_id[0].to_i, true, true)
- end
- end
- end
- equip_combinations_process if $rgsslab["装備組み合わせオートステート付与"]
- end
- #--------------------------------------------------------------------------
- # ○ HP の変更 [オーバーライド]
- # hp : 新しい HP
- #--------------------------------------------------------------------------
- def hp=(hp)
- super
- update_auto_states if $rgsslab["オートステート実装"]
- end
- end
- end
复制代码 |
|