點選上方RGSS圖示返回。


 

傳送術選單
[功能概述]
1.可輕易製作有到過某個地點就能使用選單選擇該地點並傳送的功能
2.沒有到過的地方就不會出現在選單裡

[使用方法]
1.在場所移動的指令後使用,以下為範例:
◆場所移動:[0010:大沙漠],(009,010)
◆腳本:save_map(9,10)


這樣當你移動到大沙漠之後,大沙漠座標9,10的點就是傳送點,可自行修改

2.製作一個公共事件,假設名稱叫做傳送,內容
◆腳本:$scene = Scene_Travel.new

3.製作一個特殊道具或魔法,使用時觸發公共事件傳送即可

4.有到過的地點被紀錄下來就會在選單裡出現,選擇即可進行傳送

[腳本]
1.在腳本開頭可調傳送音效TRAVEL_SE = SE名稱
2.將以下內容貼到Main之前

TRAVEL_SE = "014-Move02" # 音效設定
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
attr_accessor :travel # 傳送參數
end
#==============================================================================
# ■ Window_Travel(傳送魔法專用地圖選擇窗口)
#==============================================================================
class Window_Travel < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化對象
#--------------------------------------------------------------------------
def initialize
super(0, 64, 640, 416)
@column_max = 1
refresh
self.index = 0
self.opacity = 160
self.back_opacity = 255
end
#--------------------------------------------------------------------------
# ● 讀取地圖資料
#--------------------------------------------------------------------------
def travel_data
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@travel_index = []
@data = []
for i in $game_system.travel.keys
@travel_index.push(i)
end
# 地圖id由大到小排列
@travel_index.sort!
for i in @travel_index
@data.push($game_system.travel[i])
end
# 如果項目數不是0就生成位圖.重新描繪項目
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
# ● 描繪項目
#--------------------------------------------------------------------------
def draw_item(index)
name = @data[index][0]
y = index * 32
self.contents.font.color = Color.new(0,0,0)
self.contents.draw_text(1, y+1, 608, 32, name, 1)
self.contents.font.color = normal_color
self.contents.draw_text(0, y, 608, 32, name, 1)
self.contents.draw_text(0, y, 608, 32, name, 1)
end
end
#==============================================================================
# ■ class Interpreter
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# ● 記錄地圖資料(執行地圖傳送用)
#--------------------------------------------------------------------------
def save_map(x,y)
# 初始化傳送參數
$game_system.travel = {} if $game_system.travel == nil
# 讀取地圖ID
id = $game_map.map_id
# 讀取地圖名稱
map = load_data(sprintf("Data/MapInfos.rxdata"))
map_name = map[id].name
# 地圖ID在資料庫中不存在就寫入資料
unless $game_system.travel.include?(id)
$game_system.travel[id] = [map_name,id,x,y]
# 地圖ID在資料庫中存在但數據與現在不符合就寫入資料
else
if $game_system.travel[id] != [map_name,id,x,y]
$game_system.travel[id] = [map_name,id,x,y]
end
end
end
end
#==============================================================================
# ■ Scene_Travel(執行傳送魔法)
#==============================================================================
class Scene_Travel
#--------------------------------------------------------------------------
# ● 主處理
#--------------------------------------------------------------------------
def main
# 初始化傳送參數
$game_system.travel = {} if $game_system.travel == nil
# 生成地圖選擇窗口
@travel_window = Window_Travel.new
@travel_window.index = 0
# 生成幫助窗口
@help_window = Window_Help.new
if $game_system.travel != {}
@help_window.set_text("請選擇要移動的地點")
else
@help_window.set_text("目前沒有可以去的地點")
end
@help_window.back_opacity = 160
# 製作活動區塊
@spriteset = Spriteset_Map.new
# 執行過渡
Graphics.transition
# 主循環
loop do
# 刷新遊戲畫面
Graphics.update
# 刷新輸入訊息
Input.update
# 刷新畫面
update
# 如果畫面切換就中斷循環
if $scene != self
break
end
end
# 準備過渡
Graphics.freeze
# 釋放活動區塊所佔的記憶體空間
@spriteset.dispose
# 釋放窗口
@travel_window.dispose
@help_window.dispose
end
#--------------------------------------------------------------------------
# ● 刷新畫面
#--------------------------------------------------------------------------
def update
# 刷新窗口
@travel_window.update
@help_window.update
# 轉移特效
if $game_temp.transition_processing
@travel_window.contents_opacity -= 20
@help_window.contents_opacity = @travel_window.contents_opacity
if @travel_window.contents_opacity == 0
# 切換到地圖畫面
$scene = Scene_Map.new
end
return
end
# 按下B鍵時
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切換到地圖畫面
$scene = Scene_Map.new
return
end
# 讀取地圖資料
data = @travel_window.travel_data
# 按下確定鍵時
if Input.trigger?(Input::C)
if data == nil
# 演奏凍結 SE
$game_system.se_play($data_system.buzzer_se)
return
end
# 設置場所移動標誌
$game_temp.player_transferring = true
# 設置主角的移動目標
$game_temp.player_new_map_id = data[1]
$game_temp.player_new_x = data[2]
$game_temp.player_new_y = data[3]
# 設置處理過渡中標誌
$game_temp.transition_processing = true
# 演奏傳送音效 SE
Audio.se_play("Audio/SE/"+TRAVEL_SE, 100, 100)
# 關閉窗口
@travel_window.active = false
end
end
end

 

   

inserted by FC2 system