Continuous Maps Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Continuous Maps

2 participantes

Ir para baixo

Continuous Maps Empty Continuous Maps

Mensagem por AvilaMan Sáb Ago 02, 2014 2:15 pm

Olá galera, bom eu ainda não aprendi muito de scripts mas sim sei e gosto de fazer mapas e mundos no Maker XP.
Pra me facilitar o trabalho eu peguei um script do Blizz. Os mesmos criadores do BlizzABS.

Introdução:
No caso o script faz que um mapa fique colado com o outro e assim poder criar um mundo enorme sem lag, nem necessidade de teleport pra passar de um mapa ao outro 



Nota:
[Eu não uso NetPlay, e não testei se pode funcionar nele. Acho que seria um bom complemento pra seus jogos, poder criar por exemplo uma Dungeon grande com muito mob e boss, em vários mapas pra reduzir o lag.]

Como Utilizar: 

E bem simples, e só botar os mapas que você quer colar e as coordenadas x e y onde o mapa ficara colado.
Código:
#[MAP_ID1, MAP_ID2, X_OFFSET, Y_OFFSET]
    [1, 2, 25, 0]

Vou deixar uma Demo, pra quem não entendeu como funciona.
Download da DEMO


Script: [O script vem por defeito em Inglês.]
Código:
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Continuous Maps by Blizzard
# Version: 1.2
# Type: Custom Map System
# Date: 14.12.2009
# Date v1.2: 11.9.2010
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#  
#  This work is protected by the following license:
# #----------------------------------------------------------------------------
# #  
# #  Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# #  ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #  
# #  You are free:
# #  
# #  to Share - to copy, distribute and transmit the work
# #  to Remix - to adapt the work
# #  
# #  Under the following conditions:
# #  
# #  Attribution. You must attribute the work in the manner specified by the
# #  author or licensor (but not in any way that suggests that they endorse you
# #  or your use of the work).
# #  
# #  Noncommercial. You may not use this work for commercial purposes.
# #  
# #  Share alike. If you alter, transform, or build upon this work, you may
# #  distribute the resulting work only under the same or similar license to
# #  this one.
# #  
# #  - For any reuse or distribution, you must make clear to others the license
# #    terms of this work. The best way to do this is with a link to this web
# #    page.
# #  
# #  - Any of the above conditions can be waived if you get permission from the
# #    copyright holder.
# #  
# #  - Nothing in this license impairs or restricts the author's moral rights.
# #  
# #----------------------------------------------------------------------------
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# Compatibility:
#
#   95% compatible with SDK v1.x. 80% compatible with SDK 2.x. WILL corrupt old
#   savegames. Compatible with Blizz-ABS. Not compatible with Intelligent
#   Passability from Blizz-ABS, it's being turned off.
#
#
# Features:
#
#   - virtually creates one continuous map from any number of map fragments
#   - easy to configure
#
# new in v1.2:
#  
#   - lammer bug where transferring into a non-configured map would crash the
#     game
#   - lammer bug when teleporting into another set of maps would mess up
#     everything
#
#
# Instructions:
#
# - Explanation:
#
#   This Script will allow you to make the game simulate a continuous map using
#   smaller maps. The system displays the current map and the neighbor maps.
#   Walking over a map border will cause the new map to be loaded as main map
#   and the neighbor maps will be changed.
#
#
# Notes:
#
#   - You may notice lag when walking over a map border.
#   - Do not use too big maps as it increases loading time and the short moment
#     of lag will become more and more visible. Due to the fact that map
#     loading times in Blizz-ABS are increased, those moments will be longer if
#     Blizz-ABS is being used.
#   - Remember to connect ALL neighbor maps or you might experience bugs.
#
#
# If you find any bugs, please report them here:
# http://forum.chaos-project.com
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

module CTMAPS
  
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# START Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  # define all neighbor maps here
  MAP_DATA = [
    # [MAP_ID1, MAP_ID2, X_OFFSET, Y_OFFSET]
    [1, 2, 25, 0], # connected map 1 and 2 where 2 has an X, Y offset of 25, 0
    [3, 1, 0, -15], # connected map 3 and 1 where 1 has an X, Y offset of 0, -15
    [3, 2, 25, -15],
    [3, 4, 0, 15],
    [3, 5, 25, 15],
    [4, 5, 25, 0],
    [6, 7, 25, 0],
    [8, 6, 0, -15],
    [8, 7, 25, -15],
    [8, 9, 0, 15],
    [8, 10, 25, 15],
    [9, 10, 25, 0],
  ]
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  MAP_DATA.compact!
  MAPS = {}
  MAP_DATA.each {|data|
      MAPS[data[0]] = [] if MAPS[data[0]] == nil
      MAPS[data[0]] |= [data[1, 3]]
      MAPS[data[1]] = [] if MAPS[data[1]] == nil
      MAPS[data[1]] |= [[data[0], -data[2], -data[3]]]}
  MAP_DATA = nil
  $ctmaps = 1.2
  
end


#==============================================================================
# Game_Temp
#==============================================================================

class Game_Temp
  
  attr_accessor :player_no_straighten
  
end
  
#==============================================================================
# Game_Character
#==============================================================================

class Game_Character
  
  attr_accessor :x
  attr_accessor :y
  attr_accessor :real_x
  attr_accessor :real_y
  
  alias straighten_ctmaps_later straighten
  def straighten
    if $game_temp.player_no_straighten
      $game_temp.player_no_straighten = nil
      return
    end
    straighten_ctmaps_later
  end
  
  alias moveto_ctmaps_later moveto
  def moveto(x, y)
    ox, oy = $game_map.upper_left;
    moveto_ctmaps_later(x - ox, y - oy)
  end
  
end

if $BlizzABS
#==============================================================================
# module BlizzABS
#==============================================================================

module BlizzABS
  
  #============================================================================
  # BlizzABS::Controller
  #============================================================================

  class Controller
    
    alias center_ctmaps_later center
    def center(x, y, flag = false)
      ox, oy = $game_map.upper_left
      center_ctmaps_later(x - ox, y - oy, flag)
    end
    
  end
  
  #============================================================================
  # BlizzABS::Utility
  #============================================================================

  class Utility
    
    alias setup_passability_ctmaps_later setup_passability
    def setup_passability(map, override = false)
      setup_passability_ctmaps_later(map) if override
    end
    
  end
  
end

$BlizzABS = BlizzABS::Processor.new

#==============================================================================
# Map_Battler
#==============================================================================

class Map_Battler
  
  attr_writer :id
  attr_writer :SELF
  
  alias moveto_ctmaps_later moveto
  def moveto(x, y)
    ox, oy = $game_map.upper_left
    moveto_ctmaps_later(x - ox, y - oy)
  end
  
end

else
#==============================================================================
# Game_Player
#==============================================================================

class Game_Player
  
  alias center_ctmaps_later center
  def center(x, y)
    ox, oy = $game_map.upper_left
    center_ctmaps_later(x - ox, y - oy)
  end
  
end

end

#==============================================================================
# Game_Map
#==============================================================================

class Game_Map
  
  attr_reader :upper_left
  attr_reader :lower_right
  attr_reader :maps
    
  alias init_ctmaps_later initialize
  def initialize
    @maps = {}
    @events = {}
    init_ctmaps_later
  end
  
  alias setup_ctmaps_later setup
  def setup(map_id)
    last_maps = @maps
    last_map_id = @map_id
    @upper_left = [0, 0]
    @lower_right = [0, 0]
    events = @events
    setup_ctmaps_later(map_id)
    @maps = get_neighbor_maps
    if !@maps.has_key?(last_map_id)
      @events = {}
      last_maps = {}
      last_map_id = 0
    else
      @events = events
    end
    setup_continuous_map
    setup_continuous_events(last_maps, last_map_id)
    if $BlizzABS
      @virtual_passability = $BlizzABS.util.setup_passability(@map, true)
    end
  end
  
  def get_neighbor_maps
    maps = {}
    maps[@map_id] = [@map, 0, 0]
    @upper_left = [0, 0]
    @lower_right = [@map.width, @map.height]
    if CTMAPS::MAPS.has_key?(@map_id)
      CTMAPS::MAPS[@map_id].each {|data|
          id, x, y = data
          if @maps[id] != nil
            map = @maps[id][0]
          else
            map = load_data(sprintf('Data/Map%03d.rxdata', id))
          end
          maps[id] = [map, x, y]
          @upper_left[0] = x if @upper_left[0] > x
          @upper_left[1] = y if @upper_left[1] > y
          width, height = x + map.width, y + map.height
          @lower_right[0] = width if @lower_right[0] < width
          @lower_right[1] = height if @lower_right[1] < height}
      maps.each_value {|data|
          data[1] -= @upper_left[0]
          data[2] -= @upper_left[1]}
    end
    return maps
  end
  
  def setup_continuous_map
    width = @lower_right[0] - @upper_left[0]
    height = @lower_right[1] - @upper_left[1]
    data = Table.new(width, height, 3)
    @map = @map.clone
    @map.events = {}
    @maps.each_key {|id|
        map, ox, oy = @maps[id]
        if id == @map_id
          map.events.each_key {|i| @map.events[i] = map.events[i]}
        else
          map.events.each_key {|i| @map.events[id * 1000 + i] = map.events[i]}
        end
        (0...map.width).each {|x| (0...map.height).each {|y| (0...3).each {|z|
            data[x + ox, y + oy, z] = map.data[x, y, z]}}}}
    @map.width = width
    @map.height = height
    @map.data = data
  end
  
  def setup_continuous_events(last_maps, last_map_id)
    correct_event_positions(last_maps) if last_maps[@map_id] != nil
    delete_removed_events(last_maps, last_map_id)
    shift_events_from_last_map(last_maps, last_map_id) if last_map_id != 0
    shift_events_for_new_map
    add_new_events(last_maps)
  end
  
  def delete_removed_events(last_maps, last_map_id)
    keys = []
    @maps.each_key {|id|
        keys += @events.keys.find_all {|key|
            @events[key].real_x < 0 || @events[key].real_y < 0 ||
            @events[key].real_x >= (@lower_right[0] - @upper_left[0]) * 128 ||
            @events[key].real_y >= (@lower_right[1] - @upper_left[1]) * 128}}
    (keys | keys).each {|key| @events.delete(key)}
  end
  
  def shift_events_from_last_map(last_maps, last_map_id)
    @events.each_key {|key|
        if key < 1000
          @events[last_map_id * 1000 + key] = @events[key]
          if $BlizzABS && @events[key].is_a?(Map_Battler)
            @events[key].SELF = @events[key].id = last_map_id * 1000 + key
          end
          @events.delete(key)
        end}
  end
  
  def shift_events_for_new_map
    @events.each_key {|key|
        if key >= @map_id * 1000 && key < (@map_id + 1) * 1000
          @events[key % 1000] = @events[key]
          if $BlizzABS && @events[key].is_a?(Map_Battler)
            @events[key].SELF = @events[key].id = key % 1000
          end
          @events.delete(key)
        end}
  end
  
  def correct_event_positions(last_maps)
    pix = $BlizzABS.pixel if $BlizzABS
    sx = @maps[@map_id][1] - last_maps[@map_id][1]
    sy = @maps[@map_id][2] - last_maps[@map_id][2]
    @events.each_value {|event|
        if $BlizzABS && event.is_a?(Map_Battler)
          x, y = sx * pix, sy * pix
        else
          x, y = sx, sy
        end
        event.x += x
        event.y += y
        event.real_x += sx * 128
        event.real_y += sy * 128}
  end
  
  def add_new_events(last_maps = {})
    if last_maps[@map_id] == nil
      @maps[@map_id][0].events.each_key {|i|
          if @events[i] == nil
            @events[i] = Game_Event.new(@map_id, @maps[@map_id][0].events[i])
            $BlizzABS.check_event_name(i) if $BlizzABS
          end}
    end
    pix = $BlizzABS.pixel if $BlizzABS
    (@maps.keys - last_maps.keys - [@map_id]).each {|id|
        map, sx, sy = @maps[id]
        sx -= @maps[@map_id][1]
        sy -= @maps[@map_id][2]
        map.events.each_key {|i|
            if @events[id * 1000 + i] == nil
              @events[id * 1000 + i] = event = Game_Event.new(id, map.events[i])
              if $BlizzABS
                $BlizzABS.check_event_name(id * 1000 + i)
                if event.is_a?(Map_Battler)
                  x, y = sx * pix, sy * pix
                else
                  x, y = sx, sy
                end
              else
                x, y = sx, sy
              end
              event.x += x
              event.y += y
              event.real_x += sx * 128
              event.real_y += sy * 128
            end}}
  end
  
  alias update_ctmaps_later update
  def update
    update_ctmaps_later
    return if $game_player.moving? || @maps.size <= 1
    map, x, y = @maps[@map_id]
    if $game_player.real_x < x * 128 || $game_player.real_y < y * 128 ||
        $game_player.real_x >= x * 128 + map.width * 128 ||
        $game_player.real_y >= y * 128 + map.height * 128
      (@maps.keys - [@map_id]).each {|id|
          map, x, y = @maps[id]
          if $game_player.real_x >= x * 128 && $game_player.real_y >= y * 128 &&
              $game_player.real_x < x * 128 + map.width * 128 &&
              $game_player.real_y < y * 128 + map.height * 128
            $game_temp.player_transferring = true
            $game_temp.player_no_straighten = true
            $game_temp.player_new_x = $game_player.real_x / 128 - x
            $game_temp.player_new_y = $game_player.real_y / 128 - y
            $game_temp.player_new_map_id = id
            $game_temp.player_new_direction = 0
            break
          end}
    end
  end
  
end


Espero ter ajudado! Ate mais galera!  Very Happy
AvilaMan
AvilaMan
Iniciante
Iniciante

Mensagens : 34
Créditos : 3

Ir para o topo Ir para baixo

Continuous Maps Empty Re: Continuous Maps

Mensagem por renan-vieira Sáb Ago 02, 2014 3:40 pm

Se não me enagano o LeonMM já tinha postado isso aqui na aldeia, depois dá uma olhada quando for compartilhar :) e seja bem-vindo

_________________
Secti MaInE - Mapa de Informações Estratégicas do Rio de Janeiro.
http://maine.rj.gov.br/

eMuseu - Museu Nacional do Esporte.
https://www.emuseudoesporte.com.br/

Memórias - Memórias de Oswaldo Cruz(App Hibrido Ionic).
Link do APP na playstore

Projetos citados acima foram produzidos com equipes no qual eu participei como programador Frontend e UI Design/UX Design.



Skype: Renan.vieiraa 
Facebook: /renandesign 
E-mail: renanvieira.webdesign@gmail.com
ou entre em contato via MP:^.^:
renan-vieira
renan-vieira
Colaborador
Colaborador

Medalhas : Continuous Maps ZgLkiRU
Mensagens : 652
Créditos : 254

Ficha do personagem
Nível: 1
Experiência:
Continuous Maps Left_bar_bleue0/50Continuous Maps Empty_bar_bleue  (0/50)
Vida:
Continuous Maps Left_bar_bleue30/30Continuous Maps Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

Continuous Maps Empty Re: Continuous Maps

Mensagem por AvilaMan Sáb Ago 02, 2014 3:44 pm

Foi mal eu não tinha visto que já compartilharam o script.  Neutral 

Estou olhando o que tem pra saber o que compartilhar.

Desculpa

_________________
Continuous Maps Firma10
AvilaMan
AvilaMan
Iniciante
Iniciante

Mensagens : 34
Créditos : 3

Ir para o topo Ir para baixo

Continuous Maps Empty Re: Continuous Maps

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos