Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[ACE]Teleport to Visited sites

Ver el tema anterior Ver el tema siguiente Ir abajo

[ACE]Teleport to Visited sites

Mensaje por newold el 2019-01-07, 16:17



Con este script puedes hacer aparecer una ventana que te permite teletransportarte a cualquier mapa que hayas visitado antes. También se pueden almacenar diferentes puntos de teletransporte en cada mapa.

Versión actualizada: 1.4

Instrucciones:

  • Copiar el script encima del main

    Código:
    #===============================================================================
    class TeleportToVisited

    =begin

          **************************************************************************
          Script Name:  TeleportToVisited
         
          Author:      Newold
         
          Description:  With this script you can make a window appear that
                        allows you to teleport to any map you have visited before.
                        You can also store different teleport points on each map.
                       
          Version:      1.4 - 10-01-2019
         
          License and  You can use this script as you want.
          Credits      It is free for comercial and not comercial projects.
                        You can give me thanks in the credits of your game or not,
                        as you wish.
     
          History / Updates:
            ▼ 10-01-2019 - Fixed "stack to deep" bug
            ▼ 09-01-2019 - You can now to postpone teleport and do it manually.
            ▼ 09-01-2019 - You can now disable/enable last teleport used
                          (default = false)
            ▼ 08-01-2019 - Now you can add teleports to any map from any map
            ▼ 07-01-2019 - Release Day.
          **************************************************************************
     
     
          **************************************************************************
                                Installation and use
          **************************************************************************
          ⚫️ INSTALLATION
         
          - Put this script over main
         
          - You need to download these images and unzip them in the folder
            "Graphics/Pictures"
            Link: Download images from mediafire (you need unzip):
              https://www.mediafire.com/file/n7bv66tbdr7cj3m/TeleportImages.rar/file
           
          - you can configure this script below this instructions
         
          ⚫️ HOW TO USE
         
          - When you visited a map, this map is added automatically to the
            teleport's list.
            If you do not want the map to be added automatically, you need
            to create an empty event on that map and name it
            ⇒⇒⇒⇒              noAddToTeleportList            ⇐⇐⇐⇐
         
          ··········································································
         
          - To add a teleport point manually, use the command call script of
            the events and inside you put this code:
           
            add_map(ref, name, map_id, x, y, direction)
           
              ● ref        ▶️ Can be a number (Ex: 1), a string (Ex: "name") or
                              symbol (:symbol)
                              ref is used to identify this teleport.
              ● name        ▶️ Only can be a string (Ex: "name")
                              name is used to name this teleport.
              ● map_id      ▶️ it can be nil (current map) or a number.
                              map_id refers to the id of the map.
              ● x          ▶️ it can be nil (current position X of player)
                              or a number.
              ● y          ▶️ it can be nil (current position Y of player)
                              or a number.
              ● direction  ▶️ it can be nil (current direction of player)
                              or a number. (2 = Down, 4 = Left, 6 = Right, 8 = Up)
                             
          ··········································································
         
          - To modify a parameter of a teleport point already added, use the
            command call script of the events and inside you put this code:
           
            update_map_info(map_id, attr, value, ref)
           
              ● map_id      ▶️ it is a number. map_id refers to the id of the map.
              ● attr        ▶️ name of the parameter to modify
                              (including the two points)
                              attr only can be :x, :y, :direction or :map_name
                                  ● :x          ▶️ Use :x to modify the
                                                  X coordinate of teleport
                                  ● :y          ▶️ Use :y to modify the
                                                  Y coordinate of teleport
                                  ● :direction  ▶️ Use :direction to modify where
                                                  the character will look when
                                                  teleporting
                                  ● :map_name  ▶️ Use :map_name to change the name
                                                  of teleport
              ● value      ▶️ It must be a text between quotation marks to modify
                              the value of :map_name (example "my text") or a number
                              to modify the other values
              ● ref        ▶️ Can be a number (Ex: 1), a string (Ex: "name") or
                              symbol (:symbol)
                             
          ··········································································
         
          - To show the teleport selection window, use the command call script
            of the events and inside you put this code:
           
            open_teleport
           
          - If you want to postpone the teleport and activate a switch instead to
            create some engine, you need put config @@config[:pospone_teleport] in
            true and define switch in @@config[:activate_switch]. Then you can
            create any engine in your game and finally teleport using the command
            call script of the events and inside you put this code:
           
            perform_teleport
           
          ··········································································
          **************************************************************************
    =end


     
      #=============================================================================
      #            ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ CONFIGURATION ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
      #=============================================================================
      @@config = {}
      # ············································································
      #                  images (in folder Graphics/Pictures)
      # ············································································
      # Image of cursor (hand)
      @@config[:cursor1] = "cursor001"
      # Image of cursor (selector)
      @@config[:cursor2] = "cursor002"
      # Image of cursor (current map)
      @@config[:cursor3] = "cursor003"
      # Pattern for window
      @@config[:window_pattern] = "window001"
      # ············································································
     
     
     
      # ············································································
      #                    Sounds (in folder Audio/SE)
      # ············································································
      # Cursor movement
      @@config[:cursor_se] = {
        :name    => "Cursor1",
        :volume  => 75,
        :pitch    => 100
      }
      # Decision (OK)
      @@config[:decision_se] = {
        :name    => "Decision2",
        :volume  => 75,
        :pitch    => 100
      }
      # Error (Buzzer)
      @@config[:buzzer_se] = {
        :name    => "Buzzer1",
        :volume  => 75,
        :pitch    => 100
      }
      # Cancel
      @@config[:cancel_se] = {
        :name    => "Cancel1",
        :volume  => 75,
        :pitch    => 100
      }
      # Teleport
      @@config[:teleport_se] = {
        :name    => "Teleport",
        :volume  => 75,
        :pitch    => 100
      }
      # ············································································
     
     
     
      # ············································································
      #                        Window Config
      # ············································································
      # Width window
      @@config[:window_width] = 240
      # Height window
      @@config[:window_height] = 160
      # Show displacement bar
      @@config[:show_displacement_bar] = true
      # Draw background stretched
      @@config[:stretch_background] = false
      # Config Font
      @@config[:font] = {
        :name                => "Verdana",
        :size                => 20,
        :color                => Color.new(255,255,255),
        :outline              => true,
        :out_color            => Color.new(0,0,0),
        :current_map_color    => Color.new(9,104,20)
      }
      # ············································································
     
        # ·········································································
        # Position Window
        # ·········································································
        # :top_left      > -------------------------------------------------------
        # :top            >
        # :top_right      >
        # :left          >
        # :screen_center  >                      screen
        # :right          >
        # :bottom_left    >
        # :bottom        >
        # :bottom_right  > -------------------------------------------------------
       
        # :center_top    > -------------------------------------------------------
        # :center_left    >
        # :center_right  >                      character
        # :center_bottom  >
        # :center        > -------------------------------------------------------
       
        # Point          > Fixed point (Point.new(x, y))
        # ·········································································
        @@config[:window_position] = :center_left
        # ·········································································
      # ············································································
     
     
       
      # ············································································
      # Other Config
      # ············································································
      # Suavize animation (show / hide window)
      @@config[:animation_suavize] = 8
      # Screen margin for window
      @@config[:screen_margin] = 10
      # Disable same teleport than current map
      # (last teleport is disabled. It enable when change teleport)
      @@config[:disable_last_teleport] = false
      # Postpone teleportation and activate switch
      @@config[:pospone_teleport] = false
      # switch to activate when success teleport. If you use
      # @@config[:pospone_teleport], this switch is activated instead of teleport
      # player. You must manually teleport the player using this command:
      # $TeleportToVisited.perform_teleport
      @@config[:activate_switch] = 100 
      # ············································································
     
     
      #=============================================================================
      #          ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ END CONFIGURATION ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
      #=============================================================================
     
     
     
      #=============================================================================
      class Point
        attr_accessor :x, :y
        def initialize(x=0, y=0)
          @x, @y = x, y
        end
      end
      #=============================================================================
      class Data
        attr_accessor :x, :y, :direction, :map_name, :map_id, :ref
      end
      #=============================================================================
     
      #-----------------------------------------------------------------------------
      attr_reader :data
      #-----------------------------------------------------------------------------
      def initialize
        @data = []
        @drawed = []
        @current_map = nil
        @index = 0
        @cursor_animation_index = 0
        @cursor_animation = [-1, 0, 0, -1, -1, 0, 1, 0, 0, 1, 0, 0, 1]
        @arrows_animation_index = 0
        @arrows_animation = [-1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0]
        @bar_displacement = 0
        @show_displacement_bar = true
        create_cursor
        create_window
      end
      #-----------------------------------------------------------------------------
      def create_cursor
        @cursor = Sprite.new
        @cursor.bitmap = Cache.picture(@@config[:cursor1])
        @cursor.z = 10000020
        @cursor.opacity = 0
        @cursor.visible = false
      end
      #-----------------------------------------------------------------------------
      def create_window
        src_rects = get_rects
       
        bitmap = Cache.picture(@@config[:window_pattern])
        transparent = Color.new(0,0,0,0)
       
        viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
        viewport.z = 500
        @window = Sprite.new(viewport)
        @window.x = 200
        @window.y = 100
        @window.bitmap = Bitmap.new(@@config[:window_width],
          @@config[:window_height])
        @window.ox = @window.width / 2
        @window.oy = @window.height / 2
        # Draw borders
        # ··············································
        # Left
        rect = src_rects[:left]
        h1 = src_rects[:top_left].height
        h2 = src_rects[:bottom_left].height
        rect2 = Rect.new(0, h1, rect.width, @window.height - h1 - h2)
        draw_window_part(bitmap, rect, rect2)
        # ··············································
        # Right
        rect = src_rects[:right]
        h1 = src_rects[:top_right].height
        h2 = src_rects[:bottom_right].height
        rect2 = Rect.new(@window.width - rect.width,
          h1, rect.width, @window.height - h1 - h2)
        draw_window_part(bitmap, rect, rect2)
        # ··············································
        # Top
        rect = src_rects[:top]
        w1 = src_rects[:top_left].width
        w2 = src_rects[:top_right].width
        rect2 = Rect.new(w1, 0, @window.width - w1 - w2, rect.height)
        draw_window_part(bitmap, rect, rect2)
        # ··············································
        # Bottom
        rect = src_rects[:bottom]
        w1 = src_rects[:bottom_left].width
        h2 = src_rects[:bottom_right].width
        rect2 = Rect.new(w1, @window.height - rect.height,
        @window.width - w1 - w2, rect.height)
        draw_window_part(bitmap, rect, rect2)
        # ··············································
        # Center and contents
        rect = src_rects[:center]
        x = src_rects[:top_left].width
        y = src_rects[:top_left].height
        w = @window.width - x - src_rects[:top_right].width
        h = @window.height - y - src_rects[:bottom_right].height
        rect2 = Rect.new(x, y, w, h)
        draw_window_part(bitmap, rect, rect2)
        # ··············································
        # Corner Top Left
        rect = src_rects[:top_left]
        x = 0
        y = 0
        draw_window_part_corner(bitmap, x, y, rect, transparent)
        # ··············································
        # Corner Top Right
        rect = src_rects[:top_right]
        x = @window.width - rect.width
        y = 0
        draw_window_part_corner(bitmap, x, y, rect, transparent)
        # ··············································
        # Corner Bottom Left
        rect = src_rects[:bottom_left]
        x = 0
        y = @window.height - rect.height
        draw_window_part_corner(bitmap, x, y, rect, transparent)
        # ··············································
        # Corner Bottom Right
        rect = src_rects[:bottom_right]
        x = @window.width - rect.width
        y = @window.height - rect.height
        draw_window_part_corner(bitmap, x, y, rect, transparent)
        # ··············································
        @window.z = 10000000
        # ··············································
       
        x = @window.x - @window.ox + src_rects[:top_left].width
        y = @window.y - @window.oy + src_rects[:top_left].height
        @viewport = Viewport.new(x, y, w, h)
        @viewport.z = 1000
       
        @contents = Sprite.new(@viewport)
        @bar_background = Sprite.new(@viewport)
        @bar_top = Sprite.new(@viewport)
        @selector = Sprite.new(@viewport)
       
        @contents.z = 100
        @selector.z = 150
        @bar_background.z = 200
        @bar_top.z = 250
       
        @arrow_top = Sprite.new
        rect = src_rects[:arrow_top]
        @arrow_top.bitmap = Bitmap.new(rect.width, rect.height)
        @arrow_top.bitmap.blt(0, 0, bitmap, rect)
        @arrow_bottom = Sprite.new
        rect = src_rects[:arrow_bottom]
        @arrow_bottom.bitmap = Bitmap.new(rect.width, rect.height)
        @arrow_bottom.bitmap.blt(0, 0, bitmap, rect)
        @arrow_top.z = 10000050
        @arrow_bottom.z = 10000050
       
        @window.visible          =        @contents.visible  =
        @bar_background.visible  =        @bar_top.visible    = false
       
        @window.opacity          =        @contents.opacity  =
        @bar_background.opacity  =        @bar_top.opacity    =
        @window.zoom_x            =        @contents.zoom_x    =
        @bar_background.zoom_x    =        @bar_top.zoom_x    =
        @window.zoom_y            =        @contents.zoom_y    =
        @bar_background.zoom_y    =        @bar_top.zoom_y    = 0

        @selector.visible = @arrow_top.visible = @arrow_bottom.visible = false
      end
      #-----------------------------------------------------------------------------
      def draw_window_part(bitmap, rect1, rect2)
        if @@config[:stretch_background] == true
          @window.bitmap.stretch_blt(rect2, bitmap, rect1)
        else
          w1 = rect1.width
          h1 = rect1.height
          w2 = rect2.width
          h2 = rect2.height
          mx = [(w2 / w1.to_f).ceil, 1].max
          my = [(h2 / h1.to_f).ceil, 1].max
          for i in 0...mx
            for j in 0...my
              x = rect2.x + i*w1
              y = rect2.y + j*h1
              @window.bitmap.blt(x, y, bitmap, rect1)
            end
          end
        end
      end
      #-----------------------------------------------------------------------------
      def draw_window_part_corner(bitmap, x, y, rect, fill_color)
        @window.bitmap.fill_rect(x, y, rect.width, rect.height, fill_color)
        @window.bitmap.blt(x, y, bitmap, rect)
      end
      #-----------------------------------------------------------------------------
      def get_rects
        rects = {
          :top_left        => Rect.new(0,0,8,8),
          :top              => Rect.new(8,0,8,8),
          :top_right        => Rect.new(16,0,8,8),
          :bottom_left      => Rect.new(0,16,8,8),
          :bottom          => Rect.new(8,16,8,8),
          :bottom_right    => Rect.new(16,16,8,8),
          :left            => Rect.new(0,8,8,8),
          :right            => Rect.new(16,8,8,8),
          :center          => Rect.new(8,8,8,8),
          :arrow_top        => Rect.new(24,0,8,4),
          :arrow_bottom    => Rect.new(24,4,8,4),
          :bar_background  => Rect.new(24,16,8,8),
          :bar_topA        => Rect.new(24,8,8,3),
          :bar_topB        => Rect.new(24,11,8,2),
          :bar_topC        => Rect.new(24,13,8,3)
        }
        rects
      end
      #-----------------------------------------------------------------------------
      def draw_displacement_bar(id)
        if @@config[:show_displacement_bar]
          bitmap = Cache.picture(@@config[:window_pattern])
          src_rects = get_rects
          case id
          when :background
            # Draw background
            unless @bar_background.bitmap.nil?
              @bar_background.bitmap.dispose
            end
            viewport = @viewport
            rect = src_rects[:bar_background]
            rect2 = Rect.new(0, 0, rect.width, viewport.rect.height)
            @bar_background.bitmap = Bitmap.new(rect2.width, rect2.height)
            ox = @bar_background.width / 2
            oy = @bar_background.height / 2
            @bar_background.ox = ox
            @bar_background.oy = oy
            @bar_background.bitmap.stretch_blt(rect2, bitmap, rect)
            @bar_background.x = viewport.rect.width - @bar_background.width + ox
            @bar_background.y = oy
          when :top
            # draw top
            unless @bar_top.bitmap.nil?
              @bar_top.bitmap.dispose
            end
            min_height = 25
            max_height = @contents.viewport.rect.height
            rows = max_height / @h
            extra_rows = @real_data.size - rows
            bar_height = (extra_rows <= 0) ? max_height :
              [[max_height / extra_rows, min_height].max, max_height].min
             
            if rows == @real_data.size-1 && bar_height == max_height
              bar_height = max_height * 0.9
            end
           
            @bar_top.bitmap = Bitmap.new(@bar_background.width, bar_height)
           
            rect1 = src_rects[:bar_topA]
            rect2 = Rect.new(0, 0, @bar_top.width, 3)
            @bar_top.bitmap.stretch_blt(rect2, bitmap, rect1)
           
            rect1 = src_rects[:bar_topB]
            rect2 = Rect.new(0, 3, @bar_top.width, bar_height - 6)
            @bar_top.bitmap.stretch_blt(rect2, bitmap, rect1)
           
            rect1 = src_rects[:bar_topC]
            rect2 = Rect.new(0, @bar_top.height - 3, @bar_top.width, 3)
            @bar_top.bitmap.fill_rect(rect2, Color.new(0,0,0,0))
            @bar_top.bitmap.stretch_blt(rect2, bitmap, rect1)
           
            @bar_top.ox, @bar_top.oy = @bar_top.width/2, @bar_top.height/2
            @bar_top.x = @bar_background.x
            @bar_top.y = @bar_background.y - @bar_background.oy + @bar_top.oy
           
            if @contents.height > @contents.viewport.rect.height
              h = extra_rows * @h.to_f
              h2 = (max_height - @bar_top.height)
              @bar_displacement = h2 / h
              @show_displacement_bar = true
            else
              @bar_displacement = 0
              @show_displacement_bar = false
            end
          end
        end
      end
      #-----------------------------------------------------------------------------
      def draw_contents(initial=false)
       
        data = []
        if initial
          @data.each{|d1|
            unless d1.nil?
              d1.each{|d2|
                unless d2.nil?
                  data << d2
                end
              }
            end
          }
        else
          data = @real_data
        end
        b = Bitmap.new(1,1)
        font = Font.new
        font.name = @@config[:font][:name]
        font.size = @@config[:font][:size]
        font.outline = @@config[:font][:outline]
        font.color = @@config[:font][:color]
        font.out_color = @@config[:font][:out_color]
        b.font = font
        size = b.text_size("O")
        h = size.height * data.size
        w = @contents.viewport.rect.width
        if @show_displacement_bar == true || h > @contents.viewport.rect.height
          w -= @bar_background.width
        end
        if initial
          unless @contents.bitmap.nil?
            @contents.bitmap.dispose
          end
          @contents.bitmap = Bitmap.new(w, h)
          @contents.bitmap.font = font
          @h = size.height
        end
        iniData = @contents.viewport.oy / @h
        endData = [iniData + @contents.viewport.rect.height / @h, data.size].min
        for i in iniData..endData
          next unless @drawed[i].nil?
          d = data[i]
          break if d.nil?
          tw = @contents.bitmap.font.size
          y = i * @h
          mod = 0
          if d == @current_map && @@config[:disable_last_teleport] == true
            b2 = Cache.picture(@@config[:cursor3])
            ratio = b2.height / @h.to_f
            nw = [(b2.width * ratio).to_i,  1].max
            nh = [(b2.height * ratio).to_i,  1].max
            rect = Rect.new(w-nw, y, nw, nh)
            @contents.bitmap.stretch_blt(rect, b2, b2.rect)
            mod = rect.width
          end
          while @contents.bitmap.text_size(d.map_name).width - mod > w &&
            @contents.bitmap.font.size > 4
            @contents.bitmap.font.size -= 1
          end
          @contents.bitmap.font.color = (d == @current_map &&
            @@config[:disable_last_teleport] == true) ?
            @@config[:font][:current_map_color] : @@config[:font][:color]
          @contents.bitmap.draw_text(0, y, w, size.height, d.map_name)
          @contents.bitmap.font.size = tw
         
          @drawed[i] = true
        end
        ox = @contents.width / 2
        oy = @contents.height / 2
        @contents.ox = ox
        @contents.oy = oy
        @contents.x = ox
        @contents.y = oy
       
        if initial
          unless @selector.bitmap.nil?
            @selector.bitmap.dispose
          end
          @selector.bitmap = Bitmap.new(w, @h)
          bitmap = Cache.picture(@@config[:cursor2])
          @selector.bitmap.stretch_blt(@selector.bitmap.rect, bitmap, bitmap.rect)
          @selector.y = 0
          @selector.visible = true
          @selector.opacity = 0
          @real_data = data
        end
      end
      #-----------------------------------------------------------------------------
      def add_map(map_id, ref=nil, name=nil, x=nil, y=nil, direction=nil)
        if !FileTest.exist?(sprintf("Data/Map%03d.rvdata2", map_id))
          return
        end
        x = x.nil? ? $game_player.x : x.to_i rescue 0
        y = y.nil? ? $game_player.y : y.to_i rescue 0
        direction = direction.nil? ? $game_player.direction : direction.to_i rescue 0
        name = name.nil? ? $data_mapinfos[map_id].name : name.to_s
        if @data[map_id].nil?
          @data[map_id] ||= []
          data            = Data.new
          data.x          = x
          data.y          = y
          data.direction  = direction
          data.map_name  = name
          data.map_id    = map_id
          data.ref = ref
          @data[map_id] << data
          @current_map = data
        else
          add = true
          @data[map_id].each{|data|
            if data.ref == ref
              add = false
              break
            end
          }
          if add
            data            = Data.new
            data.x          = x
            data.y          = y
            data.direction  = direction
            data.map_name  = name
            data.map_id    = map_id
            data.ref = ref
            @data[map_id] << data
            @current_map = data
          end
        end
      end
      #-----------------------------------------------------------------------------
      def update_map_info(map_id, attr, value, ref=nil)
        unless @data[map_id].nil?
          data = nil
          @data[map_id].each{|data2|
            next if data2.nil? || data2.ref != ref
            data = data2
            break
          }
          unless data.nil?
            begin
              eval("data.#{attr} = value")
            rescue
            end
          end
        end
      end
      #-----------------------------------------------------------------------------
      def show_window(x=0, y=0)
        if @window.disposed?
          dispose
          create_cursor
          create_window
        end
        @drawed.clear
        draw_displacement_bar(:background)
        draw_contents(true)
        draw_displacement_bar(:top)
        fix_position(x, y)
        mod = @@config[:animation_suavize]
        opacity = 255.0 / mod
        zoom = 1.0 / mod
        @viewport.ox = @viewport.oy = @index = 0
        update_index(0)
        data1 = [@cursor, @selector, @arrow_top, @arrow_bottom]
        data2 = [@window, @contents, @bar_background, @bar_top]
        data2.each{|s| s.visible = true}
        if !@show_displacement_bar
          @bar_background.visible = @bar_top.visible = false
        end
        while mod > 0
          data2.each{|s|
            s.opacity += opacity
            s.zoom_x += zoom
            s.zoom_y += zoom
          }
          Graphics.update
          mod -= 1
        end
        data1.each{|s|
          s.visible = true
          s.opacity = 255
        }
        update_pos_cursor
        @index = 0
        @cursor_animation_index = 0
        main
      end
      #-----------------------------------------------------------------------------
      def fix_position(x, y)
        ox, oy, w, h = @window.ox, @window.oy, @window.width, @window.height
        smx, smy = Graphics.width / 2, Graphics.height / 2
        margin = @@config[:screen_margin]
        case @@config[:window_position]
        when :top_left
          @window.x = margin + ox
          @window.y = margin + oy
        when :top
          @window.x = smx - w/2 + ox
          @window.y = margin + oy
        when :top_right
          @window.x = Graphics.width - margin - w + ox
          @window.y = margin + @window.oy
        when :left
          @window.x = margin + ox
          @window.y = smy - h/2 + oy
        when :screen_center
          @window.x = smx - w/2 + ox
          @window.y = smy - h/2 + oy
        when :right
          @window.x = Graphics.width - margin - w + ox
          @window.y = smy - h/2 + oy
        when :bottom_left
          @window.x = margin + ox
          @window.y = Graphics.height - margin - h + oy
        when :bottom
          @window.x = smx - w/2 + ox
          @window.y = Graphics.height - margin - h + oy
        when :bottom_right
          @window.x = Graphics.width - margin - w + ox
          @window.y = Graphics.height - margin - h + oy
        when :center_top
          @window.x = x
          @window.y = y - h + oy - 32
        when :center_bottom
          @window.x = x
          @window.y = y + oy
        when :center_left
          @window.x = x - w + ox - 16
          @window.y = y - 13
        when :center_right
          @window.x = x + ox + 16
          @window.y = y - 13
        when Point
          @window.x = @@config[:window_position].x + ox
          @window.y = @@config[:window_position].y + oy
        else
          @window.x = x + 16
          @window.y = y - 13
        end
        if @window.x - ox < @@config[:screen_margin]
          @window.x = @@config[:screen_margin] + ox
        end
        if @window.y - oy < @@config[:screen_margin]
          @window.y = @@config[:screen_margin] + oy
        end
        if @window.x + ox > Graphics.width - @@config[:screen_margin]
          @window.x = Graphics.width - @@config[:screen_margin] - w + ox
        end
        if @window.y + oy > Graphics.height - @@config[:screen_margin]
          @window.y = Graphics.height - @@config[:screen_margin] - h + oy
        end
        src_rects = get_rects
        x = @window.x - @window.ox + src_rects[:top_left].width
        y = @window.y - @window.oy + src_rects[:top_left].height
        @viewport.rect.x = x
        @viewport.rect.y = y
        x = @window.x - @window.ox
        y = @window.y - @window.oy
        @arrow_top.x = (x + @window.width / 2) - (@arrow_top.width / 2)
        @arrow_top.y = y + (@arrow_top.height / 2)
        @arrow_bottom.x = (x + @window.width / 2) - (@arrow_bottom.width / 2)
        @arrow_bottom.y = y + @window.height - (@arrow_top.height / 2)
      end
      #-----------------------------------------------------------------------------
      def hide(skip_animation=false)
        mod = @@config[:animation_suavize]
        opacity = 255.0 / mod
        zoom = 1.0 / mod
        data1 = [@cursor, @selector, @arrow_top, @arrow_bottom]
        data2 = [@window, @contents, @bar_background, @bar_top]
        while mod > 0 && !skip_animation
          data1.each{|s| s.opacity -= opacity}
          data2.each{|s|
            s.opacity -= opacity
            s.zoom_x -= zoom
            s.zoom_y -= zoom
          }
          Graphics.update
          mod -= 1
        end
        data1.each{|s|
          s.visible = false
          s.opacity = 0
        }
        data2.each{|s|
          s.visible = false
          s.opacity = s.zoom_x = s.zoom_y = 0
        }
        @exit = true
      end
      #-----------------------------------------------------------------------------
      def main
        @exit = false
        @action = false
        while !@exit
          Graphics.update
          Input.update
          update
          update_cursor_animation
          update_arrows_animation
          break if @exit
        end
        if @action
          if @@config[:pospone_teleport] == true
            id = [[@@config[:activate_switch].to_i, 1].max, 9999].min
            $game_switches[id] = true
          else
            perform_teleport
          end
        end
      end
      #-----------------------------------------------------------------------------
      def perform_teleport
        $game_map.interpreter.clear
        play_fx(:decision_se)
        play_fx(:teleport_se)
        SceneManager.scene.pre_transfer
        data = @real_data[@index]
        $game_player.reserve_transfer(data.map_id, data.x, data.y, data.direction)
        $game_player.perform_transfer
        $game_map.update
        SceneManager.scene.post_transfer
        if @@config[:pospone_teleport] == true
          id = [[@@config[:activate_switch].to_i, 1].max, 9999].min
          $game_switches[id] = false
        end
      end
      #-----------------------------------------------------------------------------
      def update
        if Input.repeat?(Input::DOWN)
          update_index(1)
        elsif Input.repeat?(Input::UP)
          update_index(-1)
        end
        if Input.repeat?(Input::LEFT) || Input.repeat?(Input::L)
          update_index(-(@contents.viewport.rect.height / @h))
        elsif Input.repeat?(Input::RIGHT) || Input.repeat?(Input::R)
          update_index(@contents.viewport.rect.height / @h)
        end
        if Input.trigger?(Input::B)
          play_fx(:cancel_se)
          hide
        end
        if Input.trigger?(Input::C)
          if @real_data[@index] == @current_map &&
            @@config[:disable_last_teleport] == true
            cancel_action
            return
          end
          hide(true)
          @action = true
          @current_map = @real_data[@index]
        end
      end
      #-----------------------------------------------------------------------------
      def cancel_action
        play_fx(:buzzer_se)
      end
      #-----------------------------------------------------------------------------
      def play_fx(id)
        begin
          data = @@config[id]
          Audio.se_play("Audio/SE/#{data[:name]}",
            data [:volume].to_i, data[:pitch].to_i)
        rescue
        end
      end
      #-----------------------------------------------------------------------------
      def update_index(n)
        last_index = @index
        @index += n
        if @index < 0
          @index = @real_data.size - 1
        elsif @index > @real_data.size - 1
          @index = 0
        end
        @selector.y = @h * @index
        if @selector.y - @viewport.oy < 0
          n = -(@selector.y - @viewport.oy)
          @viewport.oy -= n
          @bar_background.y -= n
        elsif @selector.y + @selector.height - @viewport.oy > @viewport.rect.height
          n = (@selector.y + @selector.height - @viewport.oy) - @viewport.rect.height
          @viewport.oy += n
          @bar_background.y += n
        end
        if last_index != @index
          play_fx(:cursor_se)
          draw_contents
          if @bar_displacement != 0
            @bar_top.y = @bar_background.y - @bar_background.oy + @bar_top.oy +
              @bar_displacement * @contents.viewport.oy
          end
          if @index == @real_data.size - 1
            @bar_top.y = @bar_background.y - @bar_background.oy +
              @bar_background.height + @bar_top.oy - @bar_top.height
          end
        end
        update_pos_cursor
      end
      #-----------------------------------------------------------------------------
      def update_pos_cursor
        @cursor.x = @viewport.rect.x - @cursor.width
        @cursor.y = @selector.y + @selector.height / 2 - @cursor.height / 2 -
          @viewport.oy + @viewport.rect.y
        @cursor_animation_index = 0
      end
      #-----------------------------------------------------------------------------
      def update_cursor_animation
        @cursor.x += @cursor_animation[@cursor_animation_index]
        @cursor_animation_index += 1
        if @cursor_animation_index > @cursor_animation.size - 1
          @cursor_animation_index = 0
        end
      end
      #-----------------------------------------------------------------------------
      def update_arrows_animation
        v = @contents.viewport
        @arrow_top.visible = (v.oy != 0)
        @arrow_bottom.visible = (@contents.height - v.oy > v.rect.height)
        @arrow_top.y    += @arrows_animation[@arrows_animation_index]
        @arrow_bottom.y -= @arrows_animation[@arrows_animation_index]
        @arrows_animation_index += 1
        if @arrows_animation_index > @arrows_animation.size - 1
          @arrows_animation_index = 0
        end
      end
      #-----------------------------------------------------------------------------
      def clear(data=nil)
        @data.clear
        unless data.nil?
          @data = data
          unless @data[$game_map.map_id].nil?
            @current_map = @data[$game_map.map_id][0]
          else
            @current_map = nil
          end
        end
      end
      #-----------------------------------------------------------------------------
      def dispose
        instance_variables.each{|var|
          if var.respond_to?(:dispose)
            var.dispose rescue next
          end
        }
      end
      #-----------------------------------------------------------------------------
    end
    #===============================================================================

    #===============================================================================
    class Game_Map
      #-----------------------------------------------------------------------------
      unless method_defined?(:setup_teleport_newold)
        alias setup_teleport_newold setup
      end
      #-----------------------------------------------------------------------------
      def setup(map_id)
        setup_teleport_newold(map_id)
        add_to_teleport_list = true
        no_add_text = "noAddToTeleportList".downcase
        @map.events.each do |i, event|
          if event.name.downcase == no_add_text
            add_to_teleport_list = false
            break
          end
        end
        if add_to_teleport_list
          $TeleportToVisited.add_map(map_id)
        end
      end
      #-----------------------------------------------------------------------------
    end
    #===============================================================================

    #===============================================================================
    class Game_Player < Game_Character
      #-----------------------------------------------------------------------------
      unless method_defined?(:moveto_teleport_newold)
        alias moveto_teleport_newold moveto
      end
      #-----------------------------------------------------------------------------
      def moveto(x, y)
        if (x < 0 || x > $game_map.width - 1)
          @new_x = 0
          x = 0
        end
        if (y < 0 || y > $game_map.height - 1)
          @new_y = 0
          y = 0
        end
        moveto_teleport_newold(x, y)
        map_id = $game_map.map_id
        $TeleportToVisited.update_map_info(map_id, :x, x)
        $TeleportToVisited.update_map_info(map_id, :y, y)
        $TeleportToVisited.update_map_info(map_id, :direction, self.direction)
      end
      #-----------------------------------------------------------------------------
    end
    #===============================================================================

    #===============================================================================
    module DataManager
      #=============================================================================
      class << self
        #---------------------------------------------------------------------------
        unless method_defined?(:setup_new_game_teleport_newold)
          alias setup_new_game_teleport_newold setup_new_game
        end
        def setup_new_game
          $TeleportToVisited.clear
          setup_new_game_teleport_newold
        end
        #---------------------------------------------------------------------------
        unless method_defined?(:load_game_without_rescue_teleport_newold)
          alias load_game_without_rescue_teleport_newold load_game_without_rescue
        end
        def load_game_without_rescue(index)
          $TeleportToVisited.clear
          load_game_without_rescue_teleport_newold(index)
        end
        #---------------------------------------------------------------------------
        unless method_defined?(:make_save_contents_teleport_newold)
          alias make_save_contents_teleport_newold make_save_contents
        end
        def make_save_contents
          contents = make_save_contents_teleport_newold
          contents[:teleportToVisited] = $TeleportToVisited.data.dup
          return contents
        end
        #---------------------------------------------------------------------------
        unless method_defined?(:extract_save_contents_teleport_newold)
          alias extract_save_contents_teleport_newold extract_save_contents
        end
        def extract_save_contents(contents)
          extract_save_contents_teleport_newold(contents)
          $TeleportToVisited.clear(contents[:teleportToVisited])
        end
        #---------------------------------------------------------------------------
      end
      #============================================================================
    end
    #===============================================================================

    #===============================================================================
    class Game_Interpreter
      #-----------------------------------------------------------------------------
      def open_teleport
        x = $game_map.events[@event_id].screen_x
        y = $game_map.events[@event_id].screen_y
        $TeleportToVisited.show_window(x, y)
      end
      #-----------------------------------------------------------------------------
      def perform_teleport
        $TeleportToVisited.perform_teleport
      end
      #-----------------------------------------------------------------------------
      def update_map_info(map_id, attr, value, ref=nil)
        $TeleportToVisited.update_map_info(map_id, attr, value, ref)
      end
      #-----------------------------------------------------------------------------
      def add_map(ref=nil, name="", map_id=nil, x=nil, y=nil, direction=nil)
        map_id = map_id.nil? ? $game_map.map_id : map_id.to_i
        direction = ([nil, 2, 4, 6, 8].include?(direction)) ? direction : 2
        $TeleportToVisited.add_map(map_id, ref, name, x, y, direction)
      end
      #-----------------------------------------------------------------------------
      def run
        begin
          wait_for_message
          while @list[@index] do
            execute_command
            @index += 1
          end
        rescue
          return
        end
        Fiber.yield
        @fiber = nil
      end
      #-----------------------------------------------------------------------------
    end
    #===============================================================================

    $TeleportToVisited = TeleportToVisited.new

  • El script usa las siguientes imágenes (las tienes que copiar a la carpeta Graphics/Pictures de tu proyecto)

    Bajar imágenes desde mediafire

  • Configuración y modo de empleo:


    • Al principio del script hay diferentes apartados que se pueden configurar
    • Para hacer que un mapa no se añada a la lista de teletransporte automáticamente debes crear un evento vacío en ese mapa y ponerle de nombre noAddToTeleportList
    • Para añadir un punto de teleport manualmente, usa el comando llamar script de los eventos y dentro pones este código:
      Código:
      add_map(ref, name, x, y, direction)

      • ref = ref puede ser un número (Ej: 1), un texto (Ej: "texto") o un símbolo (:simbolo).
      • name = name es el nombre personalizado que se mostrará para ese punto de teletransporte (Ej: "Mi teletransporte").
      • x = x puede ser nil (la posición actual X del jugador) u otro número
      • y = y puede ser nil (la posición actual Y del jugador) u otro número
      • direction = direction puede ser nil (la dirección actual del jugador) o 2 (Mirar Abajo), 4 (Mirar Izquierda), 6 (Mirar Derecha) u 8 (Mirar Arriba)
      • map_id = map_id puede ser nil (la id del mapa actual) u otro número


    • Para modificar un parámetro de un punto de teletransporte ya añadido, usa el comando llamar script de los eventos y dentro pones este código:
      Código:
      update_map_info(map_id, attr, value, ref)

      • map_id = la id del mapa
      • ref = la referencia usada al crear ese punto de teletransporte
      • attr = nombre del parámetro a modificar (incluido los dos puntos)
        (:x, :y, :direction, :map_name)

        • :x  => Posición X
        • :y  => Posición Y
        • :direction => Dirección hacia donde mirará el jugador al teletransportarse (2 = Abajo, 4 = izquierda, 6 = derecha, 8 = Arriba)
        • :map_name => nombre que se mostrará para seleccinar este teleport (entre comillas => "Nombre a mostrar")


      • value = valor que le vas a dar a ese parámetro


    • Para mostrar la ventana de selección de teletransporte, usa el comando llamar script de los eventos y dentro pones este código:
      Código:
      open_teleport





y listo. ¡Feliz Año! ^^


Última edición por newold el 2019-01-10, 12:12, editado 11 veces
avatar
newold
Principiante
Principiante

0/3

Créditos 1289

Gracias : 140

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por orochii el 2019-01-07, 22:38

Ta guay NewOld :^DD. Un uso para esto de teletransportar en un mismo mapa es teletransportar junto al pueblo en el mapamundi.

También está cool lo de añadir puntos de teletransporte "al vuelo". Es como lo hacía el RPG Maker 2003.
avatar
orochii
Reportero

0/3

Créditos 6984

Gracias : 484

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por Dariel Lopez el 2019-01-07, 23:19

Muchísimas gracias por tu ayuda newold; ya bajé las imágenes y el script y luego lo probaré porque ya es hora de ejercitarme para ir a correr.
Graicas de nuevo.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 754

Gracias : 45

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por Neonwind el 2019-01-08, 02:30

¡Al fin! ¡Un script de teletransportación para el ACE que entiendo! XD
Esto de verdad se agradece mucho, me será muy útil, gracias amigo.
avatar
Neonwind
Iniciado
Iniciado

0/3

Créditos 9

Gracias : 2

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por Dariel Lopez el 2019-01-08, 03:36

Cuando uso este comando add_map(ref, name) en un evento en proceso paralelo me marcaba este error:

Pero lo solucioné poniendo los dos puntos (:) antes del nombre Glen para que quedara así :Glen y con eso funcionó.
Pero luego de ese comando(add_map(ref, name))activé un interruptor A para pasar a otra hoja del evento en donde puse el comando update_map_info(map_id, attr, value, ref) el cual me quedó así:
update_map_info(:188, :10, :41, :4,
:"Glen", :1, :1)
pero me marca este error que no pude solucionar:

¿Qué estoy haciendo mal? Y te recuerdo que estoy usando el Arc Engine por si acaso sea eso que no funcione con ese script.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 754

Gracias : 45

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por newold el 2019-01-08, 09:35

Código:
add_map(ref, name)

ref puede ser:

  • Un número (ejemplo 4)
  • Un texto, que irá con comillas (ejemplo "Mi referencia")
  • o un símbolo que es un texto sin espacios y sin empezar en número con dos puntos al principio y sin comillas (ejemplo :mi_teleport_1)


Código:
update_map_info(map_id, attr, value, ref)


  • map_id es un número que indica la id del mapa (ejemplo 10)
  • ref puede ser:

    • Un número (ejemplo 4)
    • Un texto, que irá con comillas (ejemplo "Mi referencia")
    • o un símbolo que es un texto sin espacios y sin empezar en número con dos puntos al principio y sin comillas (ejemplo :mi_teleport_1)


  • attr solo puede ser :x para modificar la coordenada x de destino, :y para modificar la coordenada y de destino, :direction para modificar la dirección a la que mirará el personaje tras teletransportarse (solo puede ser 2,4,6 u 8; 2 = Abajo, 4 = izquierda, 6 = derecha, 8 = Arriba), o :map_name para modificar el nombre del teleport
  • valuedebe ser texto entre comillas para modificar el valor de :map_name (ejemplo "mi texto") o un número para modificar los otros valores
  • ref deberá ser la referencia que usaste al crear ese teleport


Ejemplo:


  • Crear un teleport en el mapa actual (este mapa tiene id = 45), en la posición actual del jugador, cuya referencia será :mi_casa y le ponemos de nombre "Mi casa del pueblo"
    Código:
    add_map(:mi_casa, "Mi casa del pueblo")

  • Modificar la coordenada x del teleport :mi_casa del mapa con id 45
    Código:
    update_map_info(45, :x, 160, :mi_casa)

  • Modificar el nombre del teleport :mi_casa del mapa con id 45
    Código:
    update_map_info(45, :map_name, "Nuevo nombre", :mi_casa)



PD: en unos minutos actualizaré el script para añadir la opción de añadir mapas diferentes al actual desde cualquier mapa, ya que ahora el comando para añadir mapas solo añade el mapa actual.
avatar
newold
Principiante
Principiante

0/3

Créditos 1289

Gracias : 140

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por Dariel Lopez el 2019-01-08, 23:28

Gracias por la explicación pero sigo sin poder actualizar el mapa, pero bueno, cuando agrego un mapa con esto: add_map(1, "Glen") funciona pero cuando abro la ventana de teleport me aparece dos veces el nombre del pueblo(Glen):

En donde está el nombre Glen con la figura a la derecha no me puedo teletransportar y en Glen con letras grandes sí.
Esto uso para actualizar las coordenadas del mapa:
update_map_info(188, :10, 41, 1)
El 188 es la id del mapa y el 10 es la coordenada x y el 41 la y y el 1 la ref.
Otra cosa es que en el teleport que hice con engine uso esto para que desaparezca el jugador:

Todo eso es para que el jugador desaparezca poco a poco y luego aparezca en su nuevo destino también poco a poco; pero si te fijas hay un llamado de script que uso para poner el nombre de cada mapa con el script que tú mismo creaste y los interruptores apagados son para quitar las imágenes que uso en algunos mapas para animar los fondos.
¿Habrá alguna forma de agregarle eso al script? Porque de lo contrario no me servirá cuando cambie de pueblo porque algunos tienen fondos animados y además al cambiar de mapa debe de cambiar también su nombre.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 754

Gracias : 45

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por newold el 2019-01-09, 10:18

@Dariel Lopez escribió:Gracias por la explicación pero sigo sin poder actualizar el mapa, pero bueno, cuando agrego un mapa con esto: add_map(1, "Glen") funciona pero cuando abro la ventana de teleport me aparece dos veces el nombre del pueblo(Glen):

En donde está el nombre Glen con la figura a la derecha no me puedo teletransportar y en Glen con letras grandes sí.
Esto uso para actualizar las coordenadas del mapa:
update_map_info(188, :10, 41, 1)
El 188 es la id del mapa y el 10 es la coordenada x y el 41 la y y el 1 la ref.
Otra cosa es que en el teleport que hice con engine uso esto para que desaparezca el jugador:

Todo eso es para que el jugador desaparezca poco a poco y luego aparezca en su nuevo destino también poco a poco; pero si te fijas hay un llamado de script que uso para poner el nombre de cada mapa con el script que tú mismo creaste y los interruptores apagados son para quitar las imágenes que uso en algunos mapas para animar los fondos.
¿Habrá alguna forma de agregarle eso al script? Porque de lo contrario no me servirá cuando cambie de pueblo porque algunos tienen fondos animados y además al cambiar de mapa debe de cambiar también su nombre.

Vamos por partes:


  • El script automáticamente añade cada mapa nuevo que va encontrando. En tu caso, cuando inicias en el mapa "Glen" (con id 188), automáticamente el script ha metido ese mapa en la lista de teleports con las coordenadas y dirección que tuviera el jugador al teletransportarse, le ha dado de refencia nil y le ha puesto de nombre el que tenga asignado en la base de datos.
    Si no quieres que el script añada este teleport automáticamente en ese mapa debes crear un evento vacío y le pones de nombre noAddToTeleportList

  • Después tú añades un segundo teleport en el mapa "Glen" y le das de referencia 1 (el script comprueba que no haya ya un teleport añadido con la id de mapa y referencia dada).
    add_map(1, "Glen")
    Cómo no has especificado nada más en el add_map, se ha añadido un teleport al mapa actual con referencia "1" y nombre "Glen" y coordenadas y dirección las que tiene el jugador en ese momento. (Así que ahora tienes 2 teleports en el mapa de "Glen" que en tu caso ese mapa tiene id 188, por eso salen ahora dos teleports añadidos)
    Puedes añadir un teleport con coordenadas directamente al mapa que quieras así:
    add_map(ref, name, map_id, x, y, direction)

  • El script hace que el último teleport que has visitado no se pueda seleccionar (sale en rojo y con figura al lado). Ahora he actualizado el script en el primer post y he añadido en la configuración que se pueda desactivar o activar esa función (por defecto estará desactivada y así podrás seleccionar todos los teleports y ninguno se desactivará)





ahora vamos con el comando update_map_info, lo estás usando mal.

update_map_info(map_id, attr, value, ref)

map_id es un número, sin dos puntos y es la id del mapa
attr solo puede ser :x, :y, :direction o :map_name
value debe ser un número para cambiar x, y o direction, y un texto con comillas para cambiar map_name
ref debe ser la referencia que usaste al crear ese teleport


En tu caso, si quieres cambiar la coordenada x o y de un teleport (voy a usar el de tu ejemplo), sería así:

Cambiar la informaciónn del teletransporte del mapa 188 con ref = 1

# update_map_info(map_id, attr, value, ref)

Cambiar X a 10: update_map_info(188 , :x, 10, 1)
Cambiar Y a 41: update_map_info(188 , :y, 41, 1)
Cambiar direction a izquierda: update_map_info(188 , :direction, 4, 1)
Cambiar direction a derecha: update_map_info(1188 88, :direction, 6, 1)
Cambiar direction a arriba: update_map_info(188 , :direction, 8, 1)
Cambiar direction a abajo: update_map_info(188 , :direction, 2, 1)
Cambiar el nombre del teleport: update_map_info(188 , :map_name, "Nuevo nombre", 1)




Por último acabo de actualizar el script añadiendo una nueva opción, ahora puedes retrasar el teletransporte poniendo la variable en la configuración @@config[:pospone_teleport] a true y asignando un switch a la variable de configuración @@config[:activate_switch]. Si Haces eso, cuando pulsas en un teletransporte, en vez de teletrasnportarse el switch indicado pasa a ser true, en el evento que llamó el comando open_teleport puedes añadir ahora un condiciones y efectos y comprobar si ese switch es true (el personaje se va a teletransportar), hacer lo que quieras y después llamar a otro comando llamar script con el código:

Código:
perform_teleport

para completar el teletransporte.
avatar
newold
Principiante
Principiante

0/3

Créditos 1289

Gracias : 140

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por Dariel Lopez el 2019-01-10, 03:33

Gracias por la explicación newold pero encontré otra solución sin usar la última opción que le agregaste al script, pero por alguna razón que no encuentro en 5 de los 12 mapas de pueblos y/o ciudades me marca este error al usar el teleport:

Y no parece que me haya equivocado porque los eventos que usé en cada uno de los mapas son los mismos que usé en Glen -que es con el mapa que empecé a probar tu script- y solo los fui copiando de mapa en mapa y cambiando lo que tenía que cambiar; pero revisando me di cuenta de que en los mapas que me marca error son más grandes que en los que no me marca error. Tal vez eso sea lo que esté causando el error porque no encuentro otra explicación.
¿O no tiene nada que ver el tamaño de los mapas?
P.D. Acabo de confirmar que sí es el tamaño de los mapas lo que causa el error; no sé cual sea el tamaño que lo cause pero creo que cuando menos los de 85 de ancho son los que causan el error.
¿Podrías revisar eso por favor y ver si se puede corregir?
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 754

Gracias : 45

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por newold el 2019-01-10, 10:57

@Dariel Lopez escribió:Gracias por la explicación newold pero encontré otra solución sin usar la última opción que le agregaste al script, pero por alguna razón que no encuentro en 5 de los 12 mapas de pueblos y/o ciudades me marca este error al usar el teleport:

Y no parece que me haya equivocado porque los eventos que usé en cada uno de los mapas son los mismos que usé en Glen -que es con el mapa que empecé a probar tu script- y solo los fui copiando de mapa en mapa y cambiando lo que tenía que cambiar; pero revisando me di cuenta de que en los mapas que me marca error son más grandes que en los que no me marca error. Tal vez eso sea lo que esté causando el error porque no encuentro otra explicación.
¿O no tiene nada que ver el tamaño de los mapas?
P.D. Acabo de confirmar que sí es el tamaño de los mapas lo que causa el error; no sé cual sea el tamaño que lo cause pero creo que cuando menos los de 85 de ancho son los que causan el error.
¿Podrías revisar eso por favor y ver si se puede corregir?

He subido una nueva versión del script (1.4), pruébala a ver si encuentras más errores. Yo la he probado en mapas de cualquier tamaño y funciona perfectamente.
avatar
newold
Principiante
Principiante

0/3

Créditos 1289

Gracias : 140

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por Dariel Lopez el 2019-01-10, 22:39

Gracias de nuevo newold pero persiste el mismo problema. Lo curioso es que cuando recién llego a Kosta(uno de los que me marcan error) y me teletransporto ahí mismo no pasa nada; pero cuando me teletransporto a otros pueblos y trato de teleportarme de nuevo a Kosta me marca el StackError.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 754

Gracias : 45

Volver arriba Ir abajo

Re: [ACE]Teleport to Visited sites

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.