Remember Event Position
Author: Shaz
Introduction
If you move an event on the map, then leave the map and return, the event, by default, goes back to its original place (where you put it when designing the map). To get around that, you have to have another parallel process event run every time the map loads, to see if the event has been moved, and if so, put it in its correct position. If you have a lot of these in your game, that's a lot of additional events just checking where events should be. I dislike lots of "setup" events sitting around on maps, so devised this little script to let you tell an event to save its position, and go back to that position next time the map is loaded.
How to Use
Paste this script into its own slot in the Materials section.
Script
Spoiler Code:
- #--------------------------------------------------
- # Remember Event Position 1.0
- #--------------------------------------------------
- #
- # Author: Shaz
- #
- # Description: This script lets you set the position and direction
- # where an event will appear next time the map is
- # loaded. Events will appear in this new position
- # rather than the place they were put during design.
- #
- #--------------------------------------------------
- #
- # Installation:
- #
- # Copy into a new script slot in the Materials section
- #
- #--------------------------------------------------
- #
- # Use:
- #
- # Examples below show syntax for an Event Command on an Event Tab.
- # You can use @event_id for the current event, or specify an event number.
- # To execute from within a Set Move Route command, omit the
- # $game_map.events[@event_id]. part, and just use save_pos() and forget_pos().
- #
- # To tell an event to move to its current position the next time
- # the map is loaded, execute the following in a script call:
- # $game_map.events[@event_id].save_pos()
- #
- # To tell an event to move to a particular position (not its
- # current position) the next time the map is loaded,
- # execute the following in a script call:
- # $game_map.events[@event_id].save_pos(1, 2, 8)
- # - the above will move the event to x=1, y=2, facing up
- #
- # To tell an event to forget its previously remembered position
- # and go back to its default position the next time time map
- # is loaded, execute the following in a script call:
- # $game_map.events[@event_id].forget_pos()
- #--------------------------------------------------
- class Game_System
- alias shaz_mem_position_gs_init initialize
- attr_accessor :event_positions
- def initialize
- shaz_mem_position_gs_init
- @event_positions = {}
- end
- end
- # Check to ensure $game_system.event_positions exists (save files created
- # prior to this script being added would not have it initialized)
- class Game_Map
- alias shaz_mem_positions_gm_init initialize
- def initialize
- shaz_mem_positions_gm_init
- $game_system.event_positions = {} if !$game_system.event_positions
- end
- end
- class Game_CharacterBase
- attr_accessor
- end
- class Game_Event
- alias shaz_mem_position_gcb_init initialize
- def initialize(map_id, event)
- shaz_mem_position_gcb_init(map_id, event)
- if $game_system.event_positions.has_key?([map_id, @id])
- mvx, mvy, mvdir = $game_system.event_positions[[map_id, @id]]
- moveto(mvx, mvy)
- set_direction(mvdir) if mvdir
- @stop_count = 0
- refresh
- end
- end
- def save_pos(x = @x, y = @y, dir = @direction)
- $game_system.event_positions[[@map_id, @id]] = [x, y, dir]
- end
- def forget_pos
- $game_system.event_positions.delete([@map_id, @id])
- end
- end
复制代码
How to Call
SpoilerTo save the current event's position after a move route:
Code:
- Set Move Route: This event (Wait)
- : $>Move away from Player
- : $>Script: save_pos()
复制代码
To save the current event's position, but not within a move route:
(Conditional branch only used as part of the example - only the last line is relevant)
Code:
- Conditional Branch: Switch [0001: Move Away] == ON
- Set Move Route: This event (Wait)
- : $>Move away from Player
- Else
- Set Move Route: This event (Wait)
- : $>Move toward Player
- Branch End
- Script: $game_map.events[@event_id].save_pos()
复制代码
To make a different event move to a set position when the map is next loaded:
Code:
- Script: $game_map.events[4].save_pos(15, 6)
复制代码
FAQ
Conditions
May be used freely in any game, commercial or otherwise. Please give credit.
Please do not copy and post to other forums.
Credits
Shaz
本贴来自国际rpgmaker官方论坛作者:Shaz处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:
https://forums.rpgmakerweb.com/threads/remember-event-position.1853/