赞 | 23 |
VIP | 0 |
好人卡 | 0 |
积分 | 9 |
经验 | 297497 |
最后登录 | 2018-10-13 |
在线时间 | 94 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 910
- 在线时间
- 94 小时
- 注册时间
- 2005-10-22
- 帖子
- 397
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
脚本来源:日本KGC网站
脚本说明:
導入後、カスタマイズ項目を好みに応じて変更してください。
変更後、属性[テレポート]を作成し、スキル・アイテムにセットします。
これでテレポート効果を持つスキル・アイテムの完成です。
イベントコマンド「スクリプト」で
$game_system.teleport_permit = false
というスクリプトを入力すると、テレポートを禁止できます。
(許可する場合は true を指定)
テレポート先を追加する命令は
Teleport.add(name, id, x, y[, dir])
Teleport.add_now_place
の2種類があります。
前者は転送場所をマップID・X座標・Y座標で直接指定します。
nameは転送先の名前、dirは転送後のプレイヤーの向き(省略可)です。
後者は現在地をそのままテレポート先に追加します。
マップ名は、マップツリーから自動取得されます。
テレポート先を削除する命令は
Teleport.delete(name)
です。
nameに指定した名前のテレポート先が削除されます。
{/hx}不好意思,不会翻译了,害怕翻译后反而看不懂,所以,把原说明直接放上了{/hx}
效果图:
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆テレポート - KGC_Teleport◆
- #_/----------------------------------------------------------------------------
- #_/ 200xに存在した「テレポート」もどきを作成します。
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #==============================================================================
- # ★ カスタマイズ項目 ★
- #==============================================================================
- module KGC
- # ◆テレポート SE
- # ≪"SE ファイル名"[, Volume, Pitch]≫
- # TELEPORT_SE = "018-Teleport01" ←のようにファイル名だけ指定してもOK
- TELEPORT_SE = RPG::AudioFile.new("018-Teleport01", 100)
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- $imported = {} if $imported == nil
- $imported["Teleport"] = true
- if $game_special_elements == nil
- $game_special_elements = {}
- $data_system = load_data("Data/System.rxdata")
- end
- # テレポート属性
- $game_special_elements["teleport"] = $data_system.elements.index("随意传送")
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- module Teleport
- #--------------------------------------------------------------------------
- # ● テレポート先の追加
- # name : 転送先の名前
- # id : 転送先のマップID
- # x : 転送先のX座標
- # y : 転送先のY座標
- # dir : 転送後の向き(省略時:下向き)
- #--------------------------------------------------------------------------
- def self.add(name, id, x, y, dir = 2)
- # 既に同じ名前が存在する場合は戻る
- return if ($game_system.teleport_dest.find { |d| d[0] == name }) != nil
- # テレポート先に追加
- $game_system.teleport_dest << [name, id, x, y, dir]
- end
- #--------------------------------------------------------------------------
- # ● 現在地をテレポート先に追加
- #--------------------------------------------------------------------------
- def self.add_now_place
- # 現在地を取得
- place = [$game_map.map_name,
- $game_map.map_id,
- $game_player.x,
- $game_player.y,
- $game_player.direction]
- # 既に同じ名前が存在する場合は戻る
- return if ($game_system.teleport_dest.find { |d| d[0] == name }) != nil
- # テレポート先に追加
- $game_system.teleport_dest << place
- end
- #--------------------------------------------------------------------------
- # ● テレポート先を削除
- # name : 転送先の名前
- #--------------------------------------------------------------------------
- def self.delete(name)
- # 該当するテレポート先を削除
- $game_system.teleport_dest.each { |dest|
- if dest[0] == name
- $game_system.teleport_dest.delete(dest)
- break
- end
- }
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Game_Temp
- #==============================================================================
- class Game_Temp
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :teleport_calling # テレポート 呼び出しフラグ
- attr_accessor :teleport_item # テレポートアイテム
- attr_accessor :teleport_user # テレポート使用者
- attr_accessor :teleport_cost_sp # テレポート消費SP
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias initialize_KGC_Teleport initialize
- def initialize
- # 元の処理を実行
- initialize_KGC_Teleport
- @teleport_item, @teleport_user = nil, nil
- @teleport_cost_sp, @teleport_calling = 0, false
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Game_System
- #==============================================================================
- class Game_System
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :teleport_dest # テレポート先
- attr_accessor :teleport_permit # テレポート許可フラグ
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias initialize_KGC_Teleport initialize
- def initialize
- # 元の処理を実行
- initialize_KGC_Teleport
- @teleport_dest, @teleport_permit = [], true
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Game_Map
- #==============================================================================
- class Game_Map
- #--------------------------------------------------------------------------
- # ● マップ名取得
- #--------------------------------------------------------------------------
- def map_name
- # MapInfo.rxdata をロード
- mapinfo = load_data("Data/MapInfos.rxdata")
- # マップ名を返す
- return mapinfo[@map_id].name
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_Teleport
- #------------------------------------------------------------------------------
- # テレポート先一覧を表示するウィンドウです。
- #==============================================================================
- class Window_Teleport < Window_Selectable
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(80, 80, 480, 320)
- @column_max = 2
- refresh
- self.back_opacity = 160
- self.visible = false
- self.index = 0
- end
- #--------------------------------------------------------------------------
- # ● テレポート先の取得
- #--------------------------------------------------------------------------
- def dest
- return @data[self.index]
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- if self.contents != nil
- self.contents.dispose
- self.contents = nil
- end
- @data = []
- # テレポート先を追加
- $game_system.teleport_dest.each { |d| @data << d }
- # 項目数が 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
- #--------------------------------------------------------------------------
- # ● 項目の描画
- # index : 項目番号
- #--------------------------------------------------------------------------
- def draw_item(index)
- dest = @data[index]
- x = 4 + index % 2 * 224
- y = index / 2 * 32
- self.contents.draw_text(x, y, 224, 32, dest[0], 0)
- end
- #--------------------------------------------------------------------------
- # ● カーソルの矩形更新
- #--------------------------------------------------------------------------
- def update_cursor_rect
- # カーソル位置が 0 未満の場合
- if @index < 0
- self.cursor_rect.empty
- return
- end
- # 現在の行を取得
- row = @index / @column_max
- # 現在の行が、表示されている先頭の行より前の場合
- if row < self.top_row
- # 現在の行が先頭になるようにスクロール
- self.top_row = row
- end
- # 現在の行が、表示されている最後尾の行より後ろの場合
- if row > self.top_row + (self.page_row_max - 1)
- # 現在の行が最後尾になるようにスクロール
- self.top_row = row - (self.page_row_max - 1)
- end
- # カーソルの幅を計算
- cursor_width = (self.width - 32) / @column_max
- # カーソルの座標を計算
- x = @index % @column_max * cursor_width
- y = @index / @column_max * 32 - self.oy
- # カーソルの矩形を更新
- self.cursor_rect.set(x, y, cursor_width, 32)
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Map
- #==============================================================================
- class Scene_Map
- #--------------------------------------------------------------------------
- # ● メイン処理
- #--------------------------------------------------------------------------
- alias main_KGC_Teleport main
- def main
- # テレポートウィンドウ作成
- @teleport_window = Window_Teleport.new
- # 元の処理を実行
- main_KGC_Teleport
- # ウィンドウを解放
- @teleport_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias update_KGC_Teleport update
- def update
- # 元の処理を実行
- update_KGC_Teleport
- # プレイヤーの移動中ではない場合
- unless $game_player.moving?
- # テレポート処理呼び出し中の場合
- if $game_temp.teleport_calling
- call_teleport
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● テレポート処理の呼び出し
- #--------------------------------------------------------------------------
- def call_teleport
- # テレポート呼び出しフラグ解除
- $game_temp.teleport_calling = false
- # テレポート実行フラグをオフ
- teleport_flag = false
- # テレポートウィンドウを表示
- @teleport_window.refresh
- @teleport_window.opacity = 0
- @teleport_window.visible = true
- @teleport_window.active = true
- loop {
- # ウィンドウを更新
- @teleport_window.opacity += 16 if @teleport_window.opacity < 255
- @teleport_window.update
- # ゲーム画面を更新
- Graphics.update
- # 入力情報を更新
- Input.update
- # B ボタンが押された場合
- if Input.trigger?(Input::B)
- # キャンセル SE を演奏
- $game_system.se_play($data_system.cancel_se)
- # アイテムの場合
- if $game_temp.teleport_item != nil
- # アイテム取得
- item = $game_temp.teleport_item
- # 消耗する場合は 1 個戻す
- $game_party.gain_item(item.id, 1) if item.consumable
- # アイテム使用解除
- $game_temp.teleport_item = nil
- # スキルの場合
- elsif $game_temp.teleport_user != nil
- # 使用者のSPを回復
- $game_temp.teleport_user.sp += $game_temp.teleport_cost_sp
- # 使用者、消費SPを解除
- $game_temp.teleport_user = nil
- $game_temp.teleport_cost_sp = 0
- end
- # トランジション準備
- Graphics.freeze
- # ループ離脱
- break
- end
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # テレポート場所を取得
- dest = @teleport_window.dest
- # 空欄を選択した場合
- if dest == nil
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- # ループ再開
- next
- end
- # 移動先を設定
- $game_temp.player_new_map_id = dest[1]
- # プレイヤーの位置を設定
- $game_temp.player_new_x = dest[2]
- $game_temp.player_new_y = dest[3]
- # プレイヤーの向きを設定
- $game_temp.player_new_direction = dest[4]
- # テレポート実行フラグをオン
- teleport_flag = true
- # ループ離脱
- break
- end
- }
- # テレポートウィンドウを消去
- @teleport_window.visible = false
- @teleport_window.active = false
- # テレポート実行の場合
- if teleport_flag
- # プレイヤー場所移動フラグをセット
- $game_temp.player_transferring = true
- # トランジション実行フラグをセット
- $game_temp.transition_processing = true
- # トランジション準備
- Graphics.freeze
- # テレポート SE を演奏
- if KGC::TELEPORT_SE.is_a?(RPG::AudioFile)
- $game_system.se_play(KGC::TELEPORT_SE)
- elsif KGC::TELEPORT_SE.is_a?(String)
- Audio.se_play("Audio/SE/" + KGC::TELEPORT_SE)
- end
- # 場所移動実行
- transfer_player
- else
- # トランジション実行
- Graphics.transition
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Item
- #==============================================================================
- class Scene_Item
- #--------------------------------------------------------------------------
- # ● フレーム更新 (アイテムウィンドウがアクティブの場合)
- #--------------------------------------------------------------------------
- alias update_item_KGC_Teleport update_item
- def update_item
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # アイテムウィンドウで現在選択されているデータを取得
- @item = @item_window.item
- # テレポート属性を持っている場合
- if @item != nil && @item.is_a?(RPG::Item) &&
- @item.element_set.include?($game_special_elements["teleport"])
- # 使用できる場合
- if $game_system.teleport_permit && @item.is_a?(RPG::Item) &&
- $game_party.item_can_use?(@item.id)
- # アイテムの使用時 SE を演奏
- $game_system.se_play(@item.menu_se)
- # 消耗品の場合は減らす
- $game_party.lose_item(@item.id, 1) if @item.consumable
- # 使用アイテムを保存
- $game_temp.teleport_item = @item
- # テレポート呼び出しフラグをセット
- $game_temp.teleport_calling = true
- # マップ画面に切り替え
- $scene = Scene_Map.new
- else
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- return
- end
- end
- # 元の処理を実行
- update_item_KGC_Teleport
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Skill
- #==============================================================================
- class Scene_Skill
- #--------------------------------------------------------------------------
- # ● フレーム更新 (スキルウィンドウがアクティブの場合)
- #--------------------------------------------------------------------------
- alias update_skill_KGC_Teleport update_skill
- def update_skill
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # スキルウィンドウで現在選択されているデータを取得
- @skill = @skill_window.skill
- # テレポート属性を持っている場合
- if @skill != nil && @skill.element_set.include?($game_special_elements["teleport"])
- # 使用できる場合
- if @skill != nil && @actor.skill_can_use?(@skill.id) &&
- $game_system.teleport_permit
- # スキルの使用時 SE を演奏
- $game_system.se_play(@skill.menu_se)
- # SP消費
- @actor.sp -= @skill.sp_cost
- # 使用者・消費SPを保存
- $game_temp.teleport_user = @actor
- $game_temp.teleport_cost_sp = @skill.sp_cost
- # テレポート呼び出しフラグをセット
- $game_temp.teleport_calling = true
- # マップ画面に切り替え
- $scene = Scene_Map.new
- else
- # ブザー SE を演奏
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 戻る
- return
- end
- end
- # 元の処理を実行
- update_skill_KGC_Teleport
- end
- end
复制代码 |
|