| 赞 | 168 |
| VIP | |
| 好人卡 | |
| 积分 | 229 |
| 经验 | |
| 最后登录 | 2025-4-1 |
| 在线时间 | 8598 小时 |
- 梦石
- 0
- 星屑
- 22879
- 在线时间
- 8598 小时
- 注册时间
- 2011-12-31
- 回帖
- 3270
|
发表于 2014-12-24 11:26:40
|
显示全部楼层
本帖最后由 tseyik 于 2014-12-24 11:44 编辑
ゲーム内共有変数
[pre lang="ruby" line="1"]=begin
★ゲーム内共有変数★
設定箇所で指定したスイッチと変数を、
セーブファイルの違いなど関係なく、ゲーム全体で共有します。
素材の一番下に挿入することをオススメします。
● 仕様 ●==========================================================
スクリプト導入後にセーブするとゲームフォルダ内に新しく
"PublicData"
というrvdataファイルが自動的に作成されます。
--------------------------------------------------------------------
共有データセーブのタイミングは、通常のセーブ時&シャットダウン時(設定可)、
共有データロードのタイミングは、通常のロード時&ゲーム立ち上げ時です。
--------------------------------------------------------------------
ゲーム立ち上げ時にも共有データファイルをロードするため、
タイトル画面にも変数やスイッチが反映されます。
====================================================================
● 注意 ●==========================================================
PublicData.rvdataが作成された後に、このスクリプトの設定を変更した場合、
ロード時にエラーを吐くことがあります。
その場合は、古いPublicData.rvdataを削除してからゲームを起動してください。
====================================================================
● イベントについて ●==============================================
イベントコマンドのスクリプトに、
PUBLIC_DATA.write_public_data
と記述すると、任意のタイミングで共有データのセーブを行うことができます。
エンディング時などにどうぞ。
--------------------------------------------------------------------
また、この記述をスクリプトエディタの任意の箇所にすると、
そのタイミングで共有データのセーブを行います。
戦闘終了後強制セーブなど、スクリプトができる人はどうぞ改造に。
====================================================================
※「スクリプト内グローバル変数」の部分に限り、
サポート対象外とさせていただきます。ゴメンネ。
ver1.01
Last Update : 2011/12/14
12/14 : ソースコードの見直し
----------------------2011--------------------------
04/08 : 新規
----------------------2009--------------------------
ろかん http://kaisou-ryouiki.sakura.ne.jp/
=end
module PUBLIC_DATA
#----------------------------------------------------------------------------
# ● 設定箇所ここから
#----------------------------------------------------------------------------
# 共有するスイッチ番号 (例 : SWITCH = [3, 7, 12])
SWITCH = []
# 共有する変数番号 (例 : VARIABLE = [1, 6])
VARIABLE = []
# 通常のセーブと同時に共有データのセーブも行うかどうか(true/ false)
S_AUTOSAVE = true
# シャットダウンと同時に共有データのセーブも行うかどうか(true/ false)
D_AUTOSAVE = true
#==========================================================================
# ● 以下、スクリプトが少しわかる人向け設定箇所
#==========================================================================
# 共有する変数の書き込み
def self.public_script_global_variable_save(file_name)
# Marshal.dump($abc, file_name) # このような形で追加 $abcの部分を変更
end
# 共有する変数の読み込み
def self.public_script_global_variable_load(file_name)
# $abc = Marshal.load(file_name) # このような形で追加 $abcの部分を変更
end
#----------------------------------------------------------------------------
# ● 設定箇所ここまで
#----------------------------------------------------------------------------
end
$rsi ||= {}
$rsi["ゲーム内共有変数"] = true
#==============================================================================
# ■ PUBLIC_DATA
#------------------------------------------------------------------------------
# 共有データの書き込み、読み込みを実行するモジュール
#==============================================================================
module PUBLIC_DATA
# 共有データファイル名
FILE_NAME = "PublicData"
#--------------------------------------------------------------------------
# ● 共有データの書き込み
#--------------------------------------------------------------------------
def self.write_public_data
file = File.open("#{FILE_NAME}.rvdata", "wb")
$public ||= {}
$public[0] = SWITCH
$public[1] = VARIABLE
Marshal.dump($public, file)
$public[0].each{|i| Marshal.dump($game_switches, file)}
$public[1].each{|i| Marshal.dump($game_variables, file)}
public_script_global_variable_save(file)
file.close
end
#--------------------------------------------------------------------------
# ● 共有データの読み込み
#--------------------------------------------------------------------------
def self.read_public_data
if File.exist?("#{FILE_NAME}.rvdata")
file = File.open("#{FILE_NAME}.rvdata", "rb")
$public = Marshal.load (file)
$public[0].each{|i|
$game_switches = Marshal.load(file) if SWITCH.include?(i)
}
$public[1].each{|i|
$game_variables = Marshal.load(file) if VARIABLE.include?(i)
}
public_script_global_variable_load(file)
file.close
end
end
end
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# ● 各種ゲームオブジェクトの作成
#--------------------------------------------------------------------------
alias public_data_create_game_objects create_game_objects
def create_game_objects
public_data_create_game_objects
PUBLIC_DATA.read_public_data
end
#--------------------------------------------------------------------------
# ● コマンド : シャットダウン
#--------------------------------------------------------------------------
alias public_data_command_shutdown command_shutdown
def command_shutdown
PUBLIC_DATA.write_public_data if PUBLIC_DATA::D_AUTOSAVE
public_data_command_shutdown
end
end
class Scene_File < Scene_Base
#--------------------------------------------------------------------------
# ● セーブの実行
#--------------------------------------------------------------------------
alias pablic_save do_save
def do_save
PUBLIC_DATA.write_public_data if PUBLIC_DATA::S_AUTOSAVE
pablic_save
end
#--------------------------------------------------------------------------
# ● ロードの実行
#--------------------------------------------------------------------------
alias pablic_load do_load
def do_load
pablic_load
PUBLIC_DATA.read_public_data
end
end
class Scene_End < Scene_Base
#--------------------------------------------------------------------------
# ● コマンド [シャットダウン] 選択時の処理
#--------------------------------------------------------------------------
alias shutdown_public_save command_shutdown
def command_shutdown
PUBLIC_DATA.write_public_data if PUBLIC_DATA::D_AUTOSAVE
shutdown_public_save
end
end
[/pre]
スタートコマンド拡張
[pre lang="ruby" line="1"]=begin
RGSS3
★ スタートコマンド拡張 ★
タイトルコマンドを増やし複数のマップからゲームを開始することができます。
おまけの追加などにどうぞ。
● 仕様 ●==========================================================
これはタイトル画面から複数のマップに飛ばすことを可能にするものです。
--------------------------------------------------------------------
これ自体にサウンドやギャラリーの機能はありません。
====================================================================
● 注意 ●==========================================================
「ゲーム内共有変数」との併用を前提条件にしたスクリプト素材です。
--------------------------------------------------------------------
最初からコマンドを増やした状態で開始し、その後も変更させない場合は、
「ゲーム内共有変数」は必要ありません。
====================================================================
ver1.00
Last Update : 2011/12/23
12/23 : RGSS2からの移植
ろかん http://kaisou-ryouiki.sakura.ne.jp/
=end
#===========================================
# 設定箇所
#===========================================
module Rokan
module Game_Start_Command
# 判断に利用する変数番号
GSV = 20
DEF_LIST = {
#--------------------------------------------------------------------
# 追加コマンドを定義(0~2は使用しないでください)
#--------------------------------------------------------------------
# 0 => ニューゲーム
# 1 => コンティニュー
# 2 => シャットダウン
#--------------------------------------------------------------------
# 定義番号 => ["コマンド名", 開始マップID, マップX座標, マップY座標],
#--------------------------------------------------------------------
3 => ["ギャラリー", 4, 10, 13],
4 => ["サウンド", 3, 11, 10],
#--------------------------------------------------------------------
}
COMMAND_LIST = {
#--------------------------------------------------------------------
# 指定変数内容によるコマンド内容を設定
# 望むコマンドの順番を上で定義した番号をつかって表現してください
#--------------------------------------------------------------------
# 指定変数に格納されている数値 => [コマンドの順番],
#--------------------------------------------------------------------
0 => [0, 1, 2],
1 => [0, 1, 3, 2],
2 => [0, 1, 4, 2],
3 => [0, 1, 3, 4, 2],
#--------------------------------------------------------------------
}
end
end
#===========================================
# ここまで
#===========================================
$rsi ||= {}
$rsi["スタートコマンド拡張"] = true
module DataManager
#--------------------------------------------------------------------------
# ● インクルード Rokan::Game_Start_Command
#--------------------------------------------------------------------------
include Rokan::Game_Start_Command
#--------------------------------------------------------------------------
# ● 定義されたコマンドリストの取得
#--------------------------------------------------------------------------
def self.def_list
DEF_LIST
end
#--------------------------------------------------------------------------
# ● 定義されたコマンドリストの取得
#--------------------------------------------------------------------------
def self.command_list
COMMAND_LIST[$game_variables[GSV]]
end
#--------------------------------------------------------------------------
# ● 拡張コマンドのセットアップ
#--------------------------------------------------------------------------
def self.setup_ex_command(index)
create_game_objects
data = def_list[command_list[index]]
$game_party.setup_starting_members
$game_map.setup(data[1])
$game_player.moveto(data[2], data[3])
$game_player.refresh
Graphics.frame_count = 0
end
end
class Window_TitleCommand < Window_Command
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
DataManager.command_list.each{|i|
case i
when 0
add_command(Vocab::new_game, :new_game)
when 1
add_command(Vocab::continue, :continue, continue_enabled)
when 2
add_command(Vocab::shutdown, :shutdown)
else
add_command(DataManager.def_list[0], :ex_command)
end
}
end
end
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# ● コマンドウィンドウの作成
#--------------------------------------------------------------------------
alias _ex_command_create_command_window create_command_window
def create_command_window
_ex_command_create_command_window
@command_window.set_handler(:ex_command, method(:command_ex))
end
#--------------------------------------------------------------------------
# ● 拡張コマンド
#--------------------------------------------------------------------------
def command_ex
DataManager.setup_ex_command(@command_window.index)
close_command_window
fadeout_all
$game_map.autoplay
SceneManager.goto(Scene_Map)
end
end[/pre]
|
|