UltimaForum

Skrypty [VX] - Klika Warstw dla Map

radek02 - Czw 08 Kwi, 2010 06:27
Temat postu: Klika Warstw dla Map
Witam . Buszując na necie , znalazłem ten oto skrypt , który pozwala zrobić dodatkowe warstwy do map :mrgreen: .

Autor :
Lavalle SF ( email'a nie posiadam )

Screen :
Spoiler:



Skrypt :
Spoiler:

Kod:
class Scene_Map < Scene_Base

  alias start_2 start
  alias update_2 update
  attr_reader :map_layer_spritesets

  def start
    start_2
    setup_map_layers
  end

  def update_transfer_player
    return unless $game_player.transfer?
    fade = (Graphics.brightness > 0)
    fadeout(30) if fade
    @spriteset.dispose
    for i in 0...@map_layer_spritesets.size
      @map_layer_spritesets[i].dispose
    end
    $game_player.perform_transfer 
    $game_map.autoplay       
    $game_map.update
    Graphics.wait(15)
    @spriteset = Spriteset_Map.new 
    setup_map_layers
    fadein(30) if fade
    Input.update
  end
   

  def setup_map_layers
    maps = load_data("Data/MapInfos.rvdata")
    game_map_name = maps[$game_map.map_id].name
    @map_layers = []
    @map_layer_spritesets = []
    map_names = []
    layer_map_names = []
    layer_index = []
    c = maps.keys
    d = c.max
    for i in 1..d
      unless maps[i] == nil
        a = nil
        map_names.push(maps[i].name)
        a = maps[i].name =~ /(l|L)\d+/
        layer_map_names.push(maps[i].name) if a != nil
        layer_index.push(maps.index(maps[i])) if a != nil
      end
    end

    for string in layer_map_names
      string.chop! until string == game_map_name or string == ""
    end

    if layer_map_names.include?(game_map_name)
      for i in 0...layer_map_names.size
        if layer_map_names[i] != ""
          map = Game_Map.new
          map.setup(layer_index[i])
          @map_layer_spritesets.push(Spriteset_Map_2.new(map))
          @map_layers.push(map)
        end
      end
    end
  end

  def update
    update_2
    for i in 0...@map_layer_spritesets.size
      @map_layers[i].update
      @map_layer_spritesets[i].update
    end
  end
end

class Spriteset_Map_2 < Spriteset_Map

  def initialize(layer)
    @layer = layer
    create_viewports
    create_tilemap
    update
  end

  def update
    update_tilemap
    update_viewports
  end

  def dispose
    @tilemap.dispose
  end

  def create_tilemap(a1 = nil, a2 = nil, a3 = nil, a4 = nil, a5 = nil, b = nil, c = nil, d = nil, e = nil)
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.bitmaps[0] = (a1 == nil ? Cache.system("TileA1") : a1)
    @tilemap.bitmaps[1] = (a2 == nil ? Cache.system("TileA2") : a2)
    @tilemap.bitmaps[2] = (a3 == nil ? Cache.system("TileA3") : a3)
    @tilemap.bitmaps[3] = (a4 == nil ? Cache.system("TileA4") : a4)
    @tilemap.bitmaps[4] = (a5 == nil ? Cache.system("TileA5") : a5)
    @tilemap.bitmaps[5] = (b == nil ? Cache.system("TileB") : b)
    @tilemap.bitmaps[6] = (c == nil ? Cache.system("TileC") : c)
    @tilemap.bitmaps[7] = (d == nil ? Cache.system("TileD") : d)
    @tilemap.bitmaps[8] = (e == nil ? Cache.system("TileE") : e)
    @tilemap.map_data = @layer.data
    @tilemap.passages = @layer.passages
  end

#  def update_tilemap
#    @tilemap.ox = @layer.display_x / 8
#    @tilemap.oy = @layer.display_y / 8
#    @tilemap.update
#  end

  def update_viewports
    @viewport1.tone = @layer.screen.tone
    @viewport1.ox = @layer.screen.shake
    @viewport2.color = @layer.screen.flash_color
    @viewport3.color.set(0, 0, 0, 255 - @layer.screen.brightness)
    @viewport1.update
    @viewport2.update
    @viewport3.update
  end
end




Aby skrypt działał , należy :
- Wkleić go nad Main, w edytorze skryptu
- Zrobić 2 mapy (jedną główną, a drugą z takim samym napisem co pierwsza, tylko z dodaniem "L1" / "L2" itd.
- Pierwszą mapkę, w drugiej tylko dodatki.

Ayene - Czw 08 Kwi, 2010 07:49

Świetny skrypt. Jedna tylko uwaga (dodałam już informację w powyższym poście):
Warstw z mapami może być wiele. W chwili gdy stworzymy trzy mapy, główną nazwiemy TEST, to kolejne powinny się nazywać: TEST L1 i TEST L2 - z czego ta z dopiskiem L2 będzie warstwą wierzchnią. Tym sposobem możemy nałożyć na siebie z 10 warstw (tylko po co?!)
Niemniej jednak skrypt jest bardzo pomysłowy i oczywiście przydatny :-> Na pewno skorzystam ;-)

Agumon - Czw 15 Kwi, 2010 18:38

Ale skrypt jest bardzo przydatny. Bo jak ja chcę dać na stolik szklanki to mi stolik ucina.
radek02 - Pią 16 Kwi, 2010 04:42

Agumon, ale czy dodałeś mapę z L1 ? czy normalnie postawiłeś szklanki w podstawowej mapie ?
cj2 - Pon 03 Sty, 2011 17:32

chodziło mu pewnie że bez tego skryptu.
Poster27 - Pon 03 Sty, 2011 21:18

Ciekawy skrypt. Dzięki niemu można tworzyć efektowniejsze mapy i zawsze miałem problem z tym, jak dodać 2 rzeczy na kupce. Mam nadzieję, że to nie są takie warstwy jak do XP, bo przez nie przestałem w nim tworzyć.
Drawestien - Pon 03 Sty, 2011 21:29

No nareszcie ktoś wstawił ten skrypt,po całym internecie buszowałem żeby go znaleźć.Przydami się...
Avara - Sro 20 Lip, 2011 13:14

Chciałam ten skrypt wypróbować, więc zrobiłam nowy projekt bez żadnych dodatkowych skryptów poza tym. Zrobiłam dwie mapy Test L1 i Test L2 i niezależnie od tego, gdzie umieszczę pozycję startową gracza, to tylko jedna mapa jest widoczna (nie nakładają się na siebie). Co zrobiłam nie tak?
Ayene - Sro 20 Lip, 2011 13:46

Czyli rozumiem, że pierwszą mapę, an której ustawiłaś start nazwałaś 'Test', a mapę, która ma się na nią nałożyć - 'Test L1'?
Avara - Sro 20 Lip, 2011 13:50

Dobra, już wiem, gdzie zrobiłam błąd. Nie było mapy Test, tylko od razu Test L1. Źle zrozumiałam instrukcje. Dzięki Ayene :-)

Powered by phpBB modified by Przemo © 2003 phpBB Group