Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- #
- # ▼ Yanfly Engine Ace - Event Chase Player v1.00
- # -- Last Updated: 2012.01.05
- # -- Level: Normal
- # -- Requires: n/a
- #
- #==============================================================================
- $imported = {} if $imported.nil?
- $imported["YEA-EventChasePlayer"] = true
- #==============================================================================
- # ▼ Updates
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # 2012.01.05 - Started Script and Finished.
- #
- #==============================================================================
- # ▼ Introduction
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # This script allows you to make events that will chase the player or flee from
- # the player when the player enters within range of the event or when the event
- # sees the player.
- #
- #==============================================================================
- # ▼ 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.
- #
- # -----------------------------------------------------------------------------
- # Move Script Call - Open up the script call in the event move menu and use:
- # -----------------------------------------------------------------------------
- # Add these variable changes to an event's move route to use them.
- #
- # @chase_range = x
- # Event will chase the player after reaching x range.
- #
- # @flee_range = x
- # Event will flee from player after reaching x range.
- #
- # @chase_speed = x
- # Event will move at x speed when chasing.
- #
- # @flee_speed = x
- # Event will move at x speed when fleeing.
- #
- # @sight_lock = x
- # Event will chase/flee from player for x frames.
- #
- # @alert_balloon = x
- # Event will show ballon ID x when chasing or fleeing.
- #
- # @see_player = true
- # For events that require them to see the player first, use this script call
- # inside the movement boxes. This does not follow line of sight rules, which
- # means if there's a rock blocking you and the event, it will still see you.
- #
- #==============================================================================
- # ▼ 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.
- #
- #==============================================================================
- module YEA
- module EVENT_CHASE
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # - General Settings -
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # These settings adjust some general settings regarding chasing and fleeing
- # events. Adjust them as you see fit.
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # The number of frames before a balloon can show up again on the same
- # event. This is to prevent a massive balloon spamming. 60 frames = 1 sec.
- # By default, 120 frames is 2 seconds.
- ALERT_TIMER = 120
- # This is the default number of frames for how long the event will chase or
- # flee from the player if used with @see_player = true. To change the amount
- # individually for each event, use @sight_lock = x where x is a number.
- # By default, 300 frames is 5 seconds.
- SIGHT_LOCK = 300
- end # EVENT_CHASE
- end # YEA
- #==============================================================================
- # ▼ Editting anything past this point may potentially result in causing
- # computer damage, incontinence, explosion of user's head, coma, death, and/or
- # halitosis so edit at your own risk.
- #==============================================================================
- #==============================================================================
- # ■ Game_Event
- #==============================================================================
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # alias method: update_self_movement
- #--------------------------------------------------------------------------
- alias game_event_update_self_movement_ecp update_self_movement
- def update_self_movement
- return if $imported["YEA-StopAllMovement"] && Switch.stop_npc_movement
- update_chase_distance
- update_flee_distance
- if @stop_count > 0 && @chase_player
- move_type_toward_player
- elsif @stop_count > 0 && @flee_player
- move_type_away_player
- else
- game_event_update_self_movement_ecp
- end
- update_alert_balloon
- end
- #--------------------------------------------------------------------------
- # new method: update_chase_distance
- #--------------------------------------------------------------------------
- def update_chase_distance
- return if @erased
- return if @chase_range.nil?
- dis = distance_x_from($game_player.x).abs
- dis += distance_y_from($game_player.y).abs
- if chase_conditions
- @chase_player = true
- @move_speed = @chase_speed unless @chase_speed.nil?
- else
- @chase_player = false
- @move_speed = @page.move_speed
- @alert_player = false if @alert_timer <= 0
- end
- end
- #--------------------------------------------------------------------------
- # new method: chase_conditions
- #--------------------------------------------------------------------------
- def chase_conditions
- dis = distance_x_from($game_player.x).abs
- dis += distance_y_from($game_player.y).abs
- return true if @alert_lock > 0
- return true if dis <= @chase_range and see_player?
- if dis <= @chase_range && @see_player != true
- @alert_lock = @sight_lock if @sight_lock != nil && @sight_lock > 0
- return true
- end
- return false
- end
- #--------------------------------------------------------------------------
- # new method: update_flee_distance
- #--------------------------------------------------------------------------
- def update_flee_distance
- return if @erased
- return if @flee_range.nil?
- dis = distance_x_from($game_player.x).abs
- dis += distance_y_from($game_player.y).abs
- if flee_conditions
- @flee_player = true
- @move_speed = @flee_speed unless @flee_speed.nil?
- else
- @flee_player = false
- @move_speed = @page.move_speed
- @alert_player = false if @alert_timer <= 0
- end
- end
- #--------------------------------------------------------------------------
- # new method: flee_conditions
- #--------------------------------------------------------------------------
- def flee_conditions
- dis = distance_x_from($game_player.x).abs
- dis += distance_y_from($game_player.y).abs
- return true if @alert_lock > 0
- return true if dis <= @flee_range and see_player?
- if dis <= @flee_range && @see_player != true
- @alert_lock = @sight_lock if @sight_lock != nil && @sight_lock > 0
- return true
- end
- return false
- end
- #--------------------------------------------------------------------------
- # new method: update_alert_balloon
- #--------------------------------------------------------------------------
- def update_alert_balloon
- return if @erased
- @alert_timer = 0 if @alert_timer.nil?
- @alert_lock = 0 if @alert_lock.nil?
- @alert_lock -= 1 if @alert_lock >= 0
- return if @alert_balloon == nil || @alert_balloon == 0
- if (@chase_player || @flee_player) && !@alert_player
- @balloon_id = @alert_balloon
- @alert_player = true
- @alert_timer = YEA::EVENT_CHASE::ALERT_TIMER
- end
- @alert_timer -= 1 if @alert_player
- end
- #--------------------------------------------------------------------------
- # new method: see_player?
- #--------------------------------------------------------------------------
- def see_player?
- return false if @see_player != true
- sx = distance_x_from($game_player.x)
- sy = distance_y_from($game_player.y)
- if sx.abs > sy.abs
- direction = sx > 0 ? 4 : 6
- else
- direction = sy > 0 ? 8 : 2
- end
- if direction == @direction
- if @sight_lock == nil || @sight_lock <= 0
- @sight_lock = YEA::EVENT_CHASE::SIGHT_LOCK
- end
- @alert_lock = @sight_lock
- return true
- end
- return false
- end
- #--------------------------------------------------------------------------
- # new method: move_type_away_player
- #--------------------------------------------------------------------------
- def move_type_away_player
- sx = @x - $game_player.x
- sy = @y - $game_player.y
- if sx.abs + sy.abs >= 20
- move_random
- else
- case rand(6)
- when 0..3; move_away_from_player
- when 4; move_random
- when 5; move_forward
- end
- end
- end
- end # Game_Event
- #==============================================================================
- #
- # ▼ End of File
- #
- #==============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement