#==============================================================================
# ** TDS Quick Travel
# Ver: 1.4
#------------------------------------------------------------------------------
# * Description:
# This script allows you to quickly travel to pre determined locations on a
# map.
#------------------------------------------------------------------------------
# * Features:
# Quickly change locations on a map.
#------------------------------------------------------------------------------
# * Instructions:
#
# To add a quick travel location to a map use this in a script call:
#
# add_map_quick_travel(id, name, map, map_id, x, y, dir)
#
# id = ID of the quick travel point. (It's order in the list)
# name = name of the quick travel location.
# map = map id to add quick travel location to.
# map_id = map ID to quick travel to.
# x = X coordinate of the quick travel location on the map
# y = Y coordinate of the quick travel location on the map
# dir = facing direction after quick traveling (2: Down , 4: Left, 6: Right, 8: Up)
#
# To disable quick travel use this on a script call:
#
# disable_map_quick_travel
#
# To enable quick travel use this on a script call:
#
# disable_map_quick_travel
#
# To call the quick travel selection menu press the "X" (A) key.
#
# To call the quick travel menu from an event, use this on a script call:
#
# call_map_quick_travel_menu
#
#------------------------------------------------------------------------------
# * Notes:
# None.
#------------------------------------------------------------------------------
# WARNING:
#
# Do not release, distribute or change my work without my expressed written
# consent, doing so violates the terms of use of this work.
#
# If you really want to share my work please just post a link to the original
# site.
#
# * Not Knowing English or understanding these terms will not excuse you in any
# way from the consequenses.
#==============================================================================
# * Import to Global Hash *
#==============================================================================
($imported ||= {})[:TDS_Quick_Travel] = true
#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
# This class handles system-related data. Also manages vehicles and BGM, etc.
# The instance of this class is referenced by $game_system.
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :map_quick_travel
attr_accessor :disable_quick_travel
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias tds_quick_travel_game_system_initialize initialize
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Run Original Method
tds_quick_travel_game_system_initialize
# Initialize Quick Travel Values
init_quick_travel
end
#--------------------------------------------------------------------------
# * Initialize Map Quick Travel
#--------------------------------------------------------------------------
def init_quick_travel
# Disable Quick Travel Flag
@disable_quick_travel = false
# Make Map Quick Travel Hash
@map_quick_travel = {}
end
#--------------------------------------------------------------------------
# * Determine if Map Quick Travel is possible
#--------------------------------------------------------------------------
def can_quick_travel?
# Return false if map quick travel is disabled
return false if @disable_quick_travel
# Return false if Map has no quick travel points
return false if !has_quick_travel?
# Return true by default
return true
end
#--------------------------------------------------------------------------
# * Determine if Map has Quick Travel points
#--------------------------------------------------------------------------
def has_quick_travel?
# Return false if Map Quick Travel List is nil or empty
return false if @map_quick_travel[$game_map.map_id].nil?
# Return true by default
return true
end
#--------------------------------------------------------------------------
# * Get Quick Travel Map List
#--------------------------------------------------------------------------
def quick_travel_map_list
# Get Map Quick Travel Points
return @map_quick_travel[$game_map.map_id].keys.sort.collect {|id| @map_quick_travel[$game_map.map_id][id]}
end
end
#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
# An interpreter for executing event commands. This class is used within the
# Game_Map, Game_Troop, and Game_Event classes.
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# * Constants (Structs)
#--------------------------------------------------------------------------
# Battle Action Base
Quick_Travel_Settings = Struct.new(:name, :map_id, :x, :y, :direction)
#--------------------------------------------------------------------------
# * Enable or Disable Map Quick Travel
#--------------------------------------------------------------------------
def enable_map_quick_travel ; $game_system.disable_quick_travel = false end
def disable_map_quick_travel ; $game_system.disable_quick_travel = true end
#--------------------------------------------------------------------------
# * Call Map Quick Travel Menu
#--------------------------------------------------------------------------
def call_map_quick_travel_menu
# If on Scene Map and there are quick travel points
if SceneManager.scene_is?(Scene_Map) and $game_system.has_quick_travel?
# Call Quick Travel Menu Process
SceneManager.scene.start_quick_travel_selection
end
end
#--------------------------------------------------------------------------
# * Add Map Quick Travel
#--------------------------------------------------------------------------
def add_map_quick_travel(id, name, map, map_id, x, y, dir = 2)
# Make Empty hash if necessary
$game_system.map_quick_travel[map] ||= {}
# Set Map Quick Travel Point
$game_system.map_quick_travel[map][id] = Quick_Travel_Settings.new(name, map_id, x, y, dir)
end
#--------------------------------------------------------------------------
# * Remove Map Quick Travel
#--------------------------------------------------------------------------
def remove_map_quick_travel(map_id, id)
# Return if there are quick travel points in the map
return if $game_system.map_quick_travel[map_id].nil?
# Delete Map Quick Travel Point
$game_system.map_quick_travel[map_id].delete(id)
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# This class performs the map screen processing.
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias tds_quick_travel_scene_map_update update
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update Quick Travel Input
update_quick_travel_input
# Run Original Method
tds_quick_travel_scene_map_update
end
#--------------------------------------------------------------------------
# * Start Quick Travel SElection
#--------------------------------------------------------------------------
def start_quick_travel_selection
# Make Scene Cover Sprite
@scene_cover = Sprite.new
@scene_cover.bitmap = Graphics.snap_to_bitmap
@scene_cover.bitmap.blur
@scene_cover.opacity = 0
@scene_cover.tone.set(-30, -30, -30)
@scene_cover.z = 5000
# Make Quick Travel Window
@quick_travel_list_window = Window_Quick_Travel_List.new
@quick_travel_list_window.x = (Graphics.width - @quick_travel_list_window.width) / 2
@quick_travel_list_window.y = (Graphics.height - @quick_travel_list_window.height) / 2
@quick_travel_list_window.z = 5100
@quick_travel_list_window.openness = 0
@quick_travel_list_window.open.activate.select(0)
# Set Quick Travel Window Handlers
@quick_travel_list_window.set_handler(:ok, method(:on_quick_travel_selection_ok))
@quick_travel_list_window.set_handler(:cancel, method(:on_quick_travel_selection_cancel))
# Fade In Scene Cover
15.times { Graphics.update ; @scene_cover.opacity += 17}
# Quick Travel Selection Update Loop
loop {
# Update Graphics, Input and Quick Travel Window
Graphics.update ; Input.update ; @quick_travel_list_window.update
# Break if Quick Travelis nil
break if @quick_travel_list_window.nil?
}
end
#--------------------------------------------------------------------------
# * [OK] Quick Travel Selection
#--------------------------------------------------------------------------
def on_quick_travel_selection_ok
# Get Transfer Information
transfer = @quick_travel_list_window.selected_transfer
# Deactivate and Close Quick Travel List window
@quick_travel_list_window.deactivate ; @quick_travel_list_window.close
# Update Graphics and Fadeout Scene Cover
10.times { Graphics.update ; @scene_cover.opacity -= 17 ; @quick_travel_list_window.update }
# Dispose of Scene Cover
@scene_cover.bitmap.dispose ; @scene_cover.dispose ; @scene_cover = nil
# Dispose of Quick Travel List Window
@quick_travel_list_window.dispose ; @quick_travel_list_window = nil
# Start Transfer
$game_player.reserve_transfer(transfer.map_id, transfer.x, transfer.y, transfer.direction)
$game_temp.fade_type = 0
# Update Input
Input.update
end
#--------------------------------------------------------------------------
# * [Cancel] Quick Travel Selection
#--------------------------------------------------------------------------
def on_quick_travel_selection_cancel
# Deactivate and Close Quick Travel List window
@quick_travel_list_window.deactivate ; @quick_travel_list_window.close
# Update Graphics and Fadeout Scene Cover
10.times { Graphics.update ; @scene_cover.opacity -= 17 ; @quick_travel_list_window.update }
# Dispose of Scene Cover
@scene_cover.bitmap.dispose ; @scene_cover.dispose ; @scene_cover = nil
# Dispose of Quick Travel List Window
@quick_travel_list_window.dispose ; @quick_travel_list_window = nil
# Update Input
Input.update
end
#--------------------------------------------------------------------------
# * Update Quick Travel Input
#--------------------------------------------------------------------------
def update_quick_travel_input
# Return if Interpreter is running or messages
return if !$game_system.can_quick_travel? or $game_map.interpreter.running? or ($game_message.busy? or $game_message.visible)
# If Input Trigger A
if Input.trigger?(:X)
# Play Ok Sound
Sound.play_ok
# Start Quick Travel Selection
start_quick_travel_selection
end
end
end
#==============================================================================
# ** Window_Quick_Travel_List
#------------------------------------------------------------------------------
# This window handles Quick Travel List selection.
#==============================================================================
class Window_Quick_Travel_List < Window_Selectable
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :quick_travel_list
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Get Quick Travel List
@quick_travel_list = $game_system.quick_travel_map_list
# Get Max Text Width of Commands
@max_text_width = max_text_width
# Create Window Contents
super(0, 0, window_width, window_height)
# Draw Window Contents
refresh
end
#--------------------------------------------------------------------------
# * Get Selected Transfer Information
#--------------------------------------------------------------------------
def selected_transfer ; @quick_travel_list[@index] end
#--------------------------------------------------------------------------
# * Window Width and Height
#--------------------------------------------------------------------------
def window_width ; [12 + max_text_width + (standard_padding * 2), Graphics.width].min end
def window_height ; fitting_height(visible_line_number) end
#--------------------------------------------------------------------------
# * Max Columns
#--------------------------------------------------------------------------
def col_max ; 1 end
#--------------------------------------------------------------------------
# * Get Number of Items
#--------------------------------------------------------------------------
def item_max ; @quick_travel_list.size end
#--------------------------------------------------------------------------
# * Get Number of Lines to Show
#--------------------------------------------------------------------------
def visible_line_number ; [[item_max + 1, 16].min, 2].max end
#--------------------------------------------------------------------------
# * Get Number of Rows Displayable on 1 Page
#--------------------------------------------------------------------------
def page_row_max ; super - 1 end
#--------------------------------------------------------------------------
# * Get Row Count
#--------------------------------------------------------------------------
def row_max ; super + 1 end
#--------------------------------------------------------------------------
# * Item Rect
#--------------------------------------------------------------------------
def item_rect(index) ; rect = super ; rect.y += line_height ; rect end
#--------------------------------------------------------------------------
# * Find Max Text Width
#--------------------------------------------------------------------------
def max_text_width
# Create Temporary Contents
contents = Bitmap.new(1, 1)
contents.font.size = Font.default_size
contents.font.bold = Font.default_bold
contents.font.italic = Font.default_italic
# Get Starting Width
width = 0
# Go Through Quick Travel List
@quick_travel_list.each {|t|
# Set Max Width
w = contents.text_size(t.name).width ; width += w if w > width
}
# Dispose of Contents
contents.dispose ; contents = nil
# Return Max Text Width
return [width, 230].max
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
super
contents.font.color = system_color
# Draw Quick Travel Header
draw_text(0, 0, contents_width, line_height, "Tuỳ Chọn Dịch Chuyển", 1)
end
#--------------------------------------------------------------------------
# * Draw Item
#--------------------------------------------------------------------------
def draw_item(index)
# Draw Quick Travel Point Name
draw_text(item_rect_for_text(index), @quick_travel_list.at(index).name)
end
end