424 lines
No EOL
17 KiB
Ruby
424 lines
No EOL
17 KiB
Ruby
module FAKEREAL
|
||
|
||
EVENT_RUNNING = 84 # イベント実行中判定
|
||
|
||
end
|
||
|
||
#==============================================================================
|
||
# ■ Game_Switches
|
||
#------------------------------------------------------------------------------
|
||
# スイッチを扱うクラスです。組み込みクラス Array のラッパーです。このクラス
|
||
# のインスタンスは $game_switches で参照されます。
|
||
#==============================================================================
|
||
|
||
class Game_PublicSystem
|
||
#--------------------------------------------------------------------------
|
||
# ● オブジェクト初期化
|
||
#--------------------------------------------------------------------------
|
||
def initialize
|
||
@message = {} # 既読判定追加
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def memory(data)
|
||
data.each_pair{|k, v| @message[k] = v }
|
||
#@message = data # 既読判定追加
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def remember
|
||
#$game_system.kidoku_load(@message) # 既読判定追加
|
||
$game_temp.kidoku_load(@message) # 既読判定追加
|
||
end
|
||
end
|
||
|
||
# 既読スキップ機能を削除する場合は
|
||
# このセクションの削除と # 既読判定追加 の検索で出てくる行を全て削除
|
||
|
||
#==============================================================================
|
||
# ■ Window_Message
|
||
#------------------------------------------------------------------------------
|
||
# 文章表示に使うメッセージウィンドウです。
|
||
#==============================================================================
|
||
|
||
class Window_Message < Window_Base
|
||
#--------------------------------------------------------------------------
|
||
# ● 全テキストの処理
|
||
#--------------------------------------------------------------------------
|
||
alias kidoku_process_all_text process_all_text
|
||
def process_all_text
|
||
#$game_temp.kidoku_reserve($game_message.all_text)
|
||
kidoku_process_all_text
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 入力処理
|
||
#--------------------------------------------------------------------------
|
||
alias kidoku_process_input process_input
|
||
def process_input
|
||
kidoku_process_input
|
||
#$game_system.kidoku_set
|
||
end
|
||
end
|
||
|
||
#==============================================================================
|
||
# ■ Game_System
|
||
#------------------------------------------------------------------------------
|
||
# システム周りのデータを扱うクラスです。セーブやメニューの禁止状態などを保存
|
||
# します。このクラスのインスタンスは $game_system で参照されます。
|
||
#==============================================================================
|
||
=begin
|
||
class Game_System
|
||
#--------------------------------------------------------------------------
|
||
# ● 公開インスタンス変数
|
||
#--------------------------------------------------------------------------
|
||
attr_reader :kidoku # 既読文章配列 保存は通常セーブ及びシステムデータの保存と同時
|
||
#--------------------------------------------------------------------------
|
||
# ● オブジェクト初期化
|
||
#--------------------------------------------------------------------------
|
||
alias kidoku_initialize initialize
|
||
def initialize
|
||
kidoku_initialize
|
||
@kidoku = {}
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def kidoku_set(flag)
|
||
@kidoku ||= {}
|
||
@kidoku[flag] = true
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def kidoku?
|
||
k = $game_temp.kidoku_flag
|
||
@kidoku ||= {}
|
||
return @kidoku[k]
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def kidoku_load(data)
|
||
data.each_pair{|k, v| @kidoku[k] = v if !@kidoku[k] }
|
||
#@kidoku = data
|
||
end
|
||
end
|
||
=end
|
||
#==============================================================================
|
||
# ■ Game_Temp
|
||
#------------------------------------------------------------------------------
|
||
# セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン
|
||
# スタンスは $game_temp で参照されます。
|
||
#==============================================================================
|
||
|
||
class Game_Temp
|
||
#--------------------------------------------------------------------------
|
||
# ● 公開インスタンス変数
|
||
#--------------------------------------------------------------------------
|
||
attr_accessor :kidoku_flag #
|
||
attr_accessor :kidoku #
|
||
#--------------------------------------------------------------------------
|
||
# ● オブジェクト初期化
|
||
#--------------------------------------------------------------------------
|
||
alias kidoku_initialize initialize
|
||
def initialize
|
||
kidoku_initialize
|
||
@kidoku = {}
|
||
kidoku_flag_init
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def kidoku_flag_init
|
||
@kidoku_flag = nil
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def kidoku_load(data)
|
||
@kidoku = data
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
#def kidoku_set(flag, value = true)
|
||
#@kidoku[flag] = value
|
||
def kidoku_set(flag, value = true)
|
||
return if !flag
|
||
k = flag.dup
|
||
e = k.size == 4 ? k.pop : 0
|
||
@kidoku[k] ||= []
|
||
@kidoku[k][e] = value
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def kidoku?
|
||
return false if !kidoku_flag
|
||
return true if $game_switches[Option::Skip]
|
||
return true if $game_switches[Option::PeopleSkip] && $game_party.in_battle
|
||
return true if !message_skipable? && $game_switches[Option::PeopleSkip]
|
||
return false if !message_skipable?
|
||
return false if $game_party.in_battle
|
||
k = kidoku_flag.dup
|
||
e = k.size == 4 ? k.pop : 0
|
||
return false if @kidoku[k] == nil #@kidoku[k] ||= []
|
||
return @kidoku[k][e]
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def message_skipable?
|
||
$game_switches[FAKEREAL::EVENT_RUNNING] || $game_system.h_event
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def kidoku_test(num)
|
||
k = [num, 80, 3]
|
||
@kidoku[k] = [true, true, true]
|
||
end
|
||
end
|
||
|
||
#==============================================================================
|
||
# ■ Game_Interpreter
|
||
#------------------------------------------------------------------------------
|
||
# イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
|
||
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
|
||
#==============================================================================
|
||
|
||
class Game_Interpreter
|
||
#--------------------------------------------------------------------------
|
||
# ● 公開インスタンス変数
|
||
#--------------------------------------------------------------------------
|
||
attr_accessor :page #
|
||
attr_accessor :flag_ext #
|
||
attr_accessor :trigger_type #
|
||
attr_accessor :ce_flag #コモンイベント用フラグで追加
|
||
#--------------------------------------------------------------------------
|
||
# ● クリア
|
||
#--------------------------------------------------------------------------
|
||
alias kidoku_clear clear
|
||
def clear
|
||
kidoku_clear
|
||
@ce_flag = false #コモンイベント用フラグで追加
|
||
@page = 0
|
||
@trigger_type = 0
|
||
@writable = true
|
||
flag_init
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def flag(f = 1)
|
||
if @flag_ext
|
||
#$game_system.kidoku_set(kidoku_flag)
|
||
$game_temp.kidoku_set(kidoku_flag) if kidoku_write?
|
||
@flag_ext = f
|
||
else
|
||
@flag_ext = f
|
||
end
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def flag_end
|
||
#$game_system.kidoku_set(kidoku_flag)
|
||
$game_temp.kidoku_set(kidoku_flag) if kidoku_write?
|
||
flag_reset
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def flag_write
|
||
$game_temp.kidoku_set(kidoku_flag)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def flag_reset
|
||
@flag_ext = nil
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def flag_init
|
||
if @trigger_type != 4 && (@event_id != 0 && @map_id != 0)
|
||
@flag_ext = nil
|
||
$game_temp.kidoku_flag_init
|
||
end
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 実行
|
||
#--------------------------------------------------------------------------
|
||
alias kidoku_run run
|
||
def run
|
||
kidoku_run
|
||
#$game_system.kidoku_set(kidoku_flag) if $game_temp.kidoku_flag && !$game_party.in_battle
|
||
#$game_temp.kidoku_set(kidoku_flag) if $game_temp.kidoku_flag && !$game_party.in_battle && kidoku_write?
|
||
#if $game_temp.kidoku_flag && !$game_party.in_battle && kidoku_write?
|
||
#$game_temp.kidoku_set(kidoku_flag)
|
||
#end
|
||
$game_temp.kidoku_set(kidoku_flag) if !$game_party.in_battle && kidoku_write?
|
||
flag_init
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● コモンイベント ※既読判定が正常に動作しないのでコモンイベントのみ元々の動作に戻す
|
||
#--------------------------------------------------------------------------
|
||
def command_117
|
||
common_event = $data_common_events[@params[0]]
|
||
if common_event
|
||
child = Game_Interpreter.new(@depth + 1)
|
||
child.setup(common_event.list, same_map? ? @event_id : 0)
|
||
child.ce_flag = @ce_flag ? @ce_flag : [@map_id, @event_id, @page, @flag_ext].compact #コモンイベント用フラグで追加
|
||
child.neutral_run
|
||
end
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 実行 ※元々の実行動作。コモンイベントや外部呼出しイベントに
|
||
#--------------------------------------------------------------------------
|
||
def neutral_run
|
||
wait_for_message
|
||
while @list[@index] do
|
||
execute_command
|
||
@index += 1
|
||
end
|
||
Fiber.yield
|
||
@fiber = nil
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def kidoku_flag
|
||
#if flag_ext
|
||
if @ce_flag #コモンイベント用フラグで追加
|
||
k = @ce_flag.size == 3 ? (@ce_flag + [@flag_ext]).compact : @ce_flag
|
||
else
|
||
k = [@map_id, @event_id, @page, @flag_ext].compact
|
||
end
|
||
#else
|
||
#k = [@map_id, @event_id, @page]
|
||
#end
|
||
return k
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def kidoku_write?
|
||
$game_switches[FAKEREAL::EVENT_RUNNING] && @trigger_type != 4 &&
|
||
@list.any? {|ev| ev.code == 401 } && writable?
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇
|
||
#--------------------------------------------------------------------------
|
||
def writable?
|
||
@writable
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 注釈
|
||
#--------------------------------------------------------------------------
|
||
alias kidoku_command_108 command_108
|
||
def command_108
|
||
kidoku_command_108
|
||
@writable = false if @comments.include?("既読登録なし")
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇 並列イベントのセットアップ
|
||
#--------------------------------------------------------------------------
|
||
#def parallel_setup(list, event_id, map_id, page)
|
||
#clear
|
||
#@map_id = map_id
|
||
#@event_id = event_id
|
||
#@page = page
|
||
#@trigger_type = 4
|
||
#@list = list
|
||
#create_fiber
|
||
#end
|
||
#--------------------------------------------------------------------------
|
||
# ● 文章の表示
|
||
#--------------------------------------------------------------------------
|
||
# キャラ立ち絵スクリプト制御で設定
|
||
#alias kidoku_command_101 command_101
|
||
#def command_101
|
||
#$game_temp.k_map = @map_id
|
||
#$game_temp.k_event = @event_id
|
||
#kidoku_command_101
|
||
#end
|
||
end
|
||
|
||
#==============================================================================
|
||
# ■ Game_Event
|
||
#------------------------------------------------------------------------------
|
||
# イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
|
||
# イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
|
||
#==============================================================================
|
||
|
||
class Game_Event < Game_Character
|
||
#--------------------------------------------------------------------------
|
||
# ● 公開インスタンス変数
|
||
#--------------------------------------------------------------------------
|
||
attr_reader :page_number #
|
||
#--------------------------------------------------------------------------
|
||
# ● イベントページの設定をセットアップ
|
||
#--------------------------------------------------------------------------
|
||
alias kidoku_setup_page_settings setup_page_settings
|
||
def setup_page_settings
|
||
kidoku_setup_page_settings
|
||
@page_number = @event.pages.index(@page)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● イベントページの設定をクリア
|
||
#--------------------------------------------------------------------------
|
||
alias kidoku_clear_page_settings clear_page_settings
|
||
def clear_page_settings
|
||
kidoku_clear_page_settings
|
||
@page_number = -1
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● フレーム更新 ※再定義
|
||
#--------------------------------------------------------------------------
|
||
def update
|
||
super
|
||
check_event_trigger_auto
|
||
return unless @interpreter
|
||
unless @interpreter.running?
|
||
@interpreter.setup(@list, @event.id)
|
||
@interpreter.trigger_type = @trigger
|
||
@interpreter.page = page_number # 追加 上記一部変更
|
||
end
|
||
@interpreter.update
|
||
end
|
||
end
|
||
|
||
#==============================================================================
|
||
# ■ Game_Map
|
||
#------------------------------------------------------------------------------
|
||
# マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
|
||
# このクラスのインスタンスは $game_map で参照されます。
|
||
#==============================================================================
|
||
|
||
class Game_Map
|
||
#--------------------------------------------------------------------------
|
||
# ● 起動中のマップイベントを検出/セットアップ ※再定義
|
||
#--------------------------------------------------------------------------
|
||
def setup_starting_map_event
|
||
event = @events.values.find {|event| event.starting }
|
||
event.clear_starting_flag if event
|
||
@interpreter.setup(event.list, event.id) if event
|
||
@interpreter.page = event.page_number if event # 追加
|
||
event
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 自動実行のコモンイベントを検出/セットアップ ※再定義
|
||
#--------------------------------------------------------------------------
|
||
def setup_autorun_common_event
|
||
event = $data_common_events.find do |event|
|
||
event && event.autorun? && $game_switches[event.switch_id]
|
||
end
|
||
@interpreter.setup(event.list) if event
|
||
@interpreter.page = event.page_number if event # 追加
|
||
event
|
||
end
|
||
end |