#==============================================================================
#
# ▼ Yanfly Engine Ace - Spawn Event v1.00
# -- Last Updated: 2012.02.08
# -- Level: Normal, Hard
# -- Requires: n/a
#
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-SpawnEvent"] = true
#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.02.08 - Started Script and Finished.
#
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# For those who would like to spawn pre-made events from the current map or
# even other maps, this script allows you to do so. With the option of spawning
# the events at specific locations or a random spot marked by a certain region,
# you can have events spawn using simple script calls. The events remain until
# a map change.
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
#
# -----------------------------------------------------------------------------
# Script Calls - These commands are used with script calls.
# -----------------------------------------------------------------------------
# spawn_event_location(x, y, event_id)
# spawn_event_location(x, y, event_id, map_id)
# This causes a new event to be created at location x and y on the current map.
# The event to be created will use the event data from event_id. If no map_id
# is used, then the current map's event will be used to spawn the new event.
# The event cannot spawn on top of another event or vehicle. If there is an
# event or vehicle in place, then no event will be spawned at all.
#
# spawn_event_region(region_id, event_id)
# spawn_event_region(region_id, event_id, map_id)
# This causes a new event to be created at a random location with a matching
# region_id. The event to be created will use the event data from event_id. If
# no map_id is used, then the current map's event will be used to spawn the
# new event. If the region_id does not exist on the current map, then no event
# will be spawned. The event will not spawn on top of another event nor on top
# of a vehicle. If there is not enough room to spawn an event, then no event
# will be spawned at all. This process takes slightly longer on larger maps.
#
#==============================================================================
# ▼ Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
#
#==============================================================================
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# new method: spawn_event
#--------------------------------------------------------------------------
def spawn_event(dx, dy, event_id, map_id)
return if $game_player.collide_with_characters?(dx, dy)
return if dx == $game_player.x && dy == $game_player.y
map_id = @map_id if map_id == 0
map = load_data(sprintf("Data/Map%03d.rvdata2", map_id))
event = generated_event(map, event_id)
return if event.nil?
key_id = @events.keys.max + 1
@events[key_id] = Game_Event.new(@map_id, event)
@events[key_id].moveto(dx, dy)
SceneManager.scene.spriteset.refresh_characters
end
#--------------------------------------------------------------------------
# new method: generated_event
#--------------------------------------------------------------------------
def generated_event(map, event_id)
for key in map.events
event = key[1]
next if event.nil?
return event if event.id == event_id
end
return nil
end
#--------------------------------------------------------------------------
# new method: spawn_event_region
#--------------------------------------------------------------------------
def spawn_event_region(reg_id, event_id, map_id)
tile = get_random_region_tile(reg_id)
return if tile.nil?
spawn_event(tile[0], tile[1], event_id, map_id)
end
#--------------------------------------------------------------------------
# new method: get_random_region_tile
#--------------------------------------------------------------------------
def get_random_region_tile(reg_id)
tiles = []
for i in 0...width
for j in 0...height
next unless (region_id(i, j) == reg_id) or (reg_id == 0)
next if $game_player.collide_with_characters?(i, j)
next if i == $game_player.x && j == $game_player.y
tiles.push([i, j])
end
end
return tiles.sample
end
end # Game_Map
#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# new method: spawn_event_location
#--------------------------------------------------------------------------
def spawn_event_location(dx, dy, event_id, map_id = 0)
return unless SceneManager.scene_is?(Scene_Map)
$game_map.spawn_event(dx, dy, event_id, map_id)
end
#--------------------------------------------------------------------------
# new method: spawn_event_region
#--------------------------------------------------------------------------
def spawn_event_region(region_id, event_id, map_id = 0)
return unless SceneManager.scene_is?(Scene_Map)
$game_map.spawn_event_region(region_id, event_id, map_id)
end
end # Game_Interpreter
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :spriteset
end # Scene_Map
#==============================================================================
#
# ▼ End of File
#
#==============================================================================