Event-Positionen behalten

#1

Ich hab' hier mal ein Script geschrieben -ich hoffe dass es das noch nicht gibt- welches die
Wirkung hat, dass alle Events an ihren Positionen bleiben und die Blickrichtung behalten, wenn man aus der Map raus und wieder rein geht.


Zusätzlich kann man auch per Aufruf der Methode $scene.save_events die Positionen der Events speichern und mit der Methode $scene.load_events dann wieder laden.


Hier das
Script:

class Game_Character
  #--------------------------------------------------------------------------
  # * Turn Character at direction
  #--------------------------------------------------------------------------
  def turn_at(turnat)
    case turnat
      when 2
        self.turn_down
      when 8
        self.turn_up
      when 4
        self.turn_left
      when 6
        self.turn_right
    end
  end
end
class Scene_Map
  #--------------------------------------------------------------------------
  # * Player Place Move
  #--------------------------------------------------------------------------
  def transfer_player
    #Save the Event Positions
    self.save_events
    # Clear player place move call flag
    $game_temp.player_transferring = false
    # If move destination is different than current map
    if $game_map.map_id != $game_temp.player_new_map_id
      # Set up a new map
      $game_map.setup($game_temp.player_new_map_id)
    end
    # Set up player position
    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
    # Set player direction
    case $game_temp.player_new_direction
    when 2  # down
      $game_player.turn_down
    when 4  # left
      $game_player.turn_left
    when 6  # right
      $game_player.turn_right
    when 8  # up
      $game_player.turn_up
    end
    # Straighten player position
    $game_player.straighten
    # Update map (run parallel process event)
    $game_map.update
    # Remake sprite set
    @spriteset.dispose
    #Load the Event-positions
    self.load_events
    @spriteset = Spriteset_Map.new
    # If processing transition
    if $game_temp.transition_processing
      # Clear transition processing flag
      $game_temp.transition_processing = false
      # Execute transition
      Graphics.transition(20)
    end
    # Run automatic change for BGM and BGS set on the map
    $game_map.autoplay
    # Frame reset
    Graphics.frame_reset
    # Update input information
    Input.update
  end
  #--------------------------------------------------------------------------
  # * Save the Event-positions from this map
  #--------------------------------------------------------------------------
  def save_events()
    i = 1
    x = $game_map.events[i].x
    y = $game_map.events[i].y
    r = $game_map.events[i].direction
    map = $game_map.map_id
    if $game_map.events[i] and @save_event_xy == nil
      @save_event_xy = {map => {i => {"x" => x, "y" => y, "r" => r}}}
      i += 1
    elsif $game_map.events[i] and @save_event_xy[map] == nil
      @save_event_xy.update({map => {i => {"x" => x, "y" => y, "r" => r}}})
      i += 1
    end
    while($game_map.events[i])
      x = $game_map.events[i].x
      y = $game_map.events[i].y
      r = $game_map.events[i].direction
      @save_event_xy[map].update({i => {"x" => x, "y" => y, "r" => r}})
      i += 1
    end
  end
  #--------------------------------------------------------------------------
  # * Loade the Event-position from this map
  #--------------------------------------------------------------------------
  def load_events()
    i = 1
    map = $game_map.map_id
    evts = @save_event_xy[map]
    while evts and evts[i] and $game_map.events[i]
      x = evts[i]["x"]
      y = evts[i]["y"]
      r = evts[i]["r"]
      $game_map.events[i].moveto(x, y)
      $game_map.events[i].turn_at(r)
      i += 1
    end
  end
end


Einbauen tust du es indem du es einfach über Main einfügst.
Ein
Nachteil ist, dass, wenn ein Event auf eine Route festgelegt wurde, die es gehen soll, dann fängt diese Route wenn man in eine Map kommt wieder von vorne an, egal, wo es steht!



(Wie findet ihr das Script? (Es ist nämlich mein erstes selbst geschriebenes :D))
((Mitlerweile hab' ich aber schon viele andere geschrieben^^))

Zitieren
#2

Bis jetz scheint es nützlich zu sein doch am besten kann man ihn bewerten wenn man ihn mal ausprobiert.;)
Den Nachteil hab ich nicht ganz verstanden.


......wenn ein Event auf eine Route festgelegt wurde, die es gehen soll, dann fängt diese Route wenn man in eine Map kommt wieder von vorne an, egal, wo es steht!


Ist das nicht immer so gewesen?
Kommt drauf an wie man events einsetzten will, wenn der Anwender will das die Anfangsposition des Events wieder von vorne beginnen soll scheint mir das kein Nachteil zu sein. Aber wie gesagt mal ausprobieren.^^

Dein bisschen Zorn ist nur ein endloser Ozean des Tötens auf dieser scheiß Welt. Es gibt keinen Anfang und kein Ende.
Zitieren
#3

Naja, der Nachteil ist größer, als du glaubst... Hier eine Veranschaulichung:
Also gehen wir mal davon aus, jemand will, dass ein Event um einen Baum herum eiert:
Die Route soll sich wiederholen und er soll dauerhaft darum eiern. Wenn sich aber jetzt der Hero teleportiert, wärend das Event da ist, wo der Pfei hinzeigt, dann geht der Typ/das Event, wenn man wieder in die Map kommt nichtmehr um den Baum, sondern gegen den Baum: (Ich hoffe es war verständlich erklärt)

Zitieren
#4

Hmm das ist wohl doch ganz schön übel...


Wenn jemand den verwenden möchte müsste er eventuell, wenn der 1:1 übernommen wird, mit variablen arbeiten und dann würde es funktionieren. Immer einen +1 zurechnen und die richtung bestimmen bei jedem wert. Wäre schon aufwendig.^^

Dein bisschen Zorn ist nur ein endloser Ozean des Tötens auf dieser scheiß Welt. Es gibt keinen Anfang und kein Ende.
Zitieren
Anmelden oder Registrieren, um zu antworten.