UltimaForum

Wsparcie [VX] - Problem z użyciem skryptu

pw1602 - Sob 08 Wrz, 2012 21:07
Temat postu: Problem z użyciem skryptu
Siemka. Mam problem ze skryptem, a głównie to z jego "wywołaniem". Kiedy tylko dodam go do swojej kolekcji skryptów to podczas testowania gry wyskakuje mi, że jest problem z linijką 60.

Tutaj skrypt (Window Lighting):
Spoiler:

Kod:
module GameBaker
  AutoLightTiles = Hash.new
  AutoLightTiles[280] = [8,4,16,56]
  AutoLightTiles[281] = [9,4,14,48]
  AutoLightTiles[283] = [12,5,10,36]
  AutoLightTiles[296] = [7,10,18,64]
  AutoLightTiles[297] = [9,10,14,64]
  AutoLightTiles[299] = [7,12,18,64]
  AutoLightTiles[300] = [7,12,18,64]
  AutoLightTiles[301] = [7,3,18,56]
  AutoLightTiles[302] = [7,3,18,48]
  AutoLightTiles[303] = [7,3,18,36]

  AutoLightColors = Hash.new([255,255,255])
  AutoLightColors[299] = [128,196,255]

  AutoLightStart = Hash.new(255)
  AutoLightStart[281] = 220
  AutoLightStart[283] = 134
  AutoLightStart[296] = 196
  AutoLightStart[297] = 220
  AutoLightStart[302] = 220
  AutoLightStart[303] = 134

  AutoLightOpac = “96″
  AutoLightZ = 100000
end

class Spriteset_Map
  alias gamebaker_autolight_init initialize
  def initialize
    create_gblights
    gamebaker_autolight_init
  end

  alias gamebaker_autolight_disp dispose
  def dispose
    if @gb_autolights
      @gb_autolights.dispose if !@gb_autolights.disposed?
      @gb_autolights = nil
    end
    gamebaker_autolight_disp
  end

  alias gamebaker_autolight_upd update
  def update
    update_gblights
    gamebaker_autolight_upd
  end

  def update_gblights
    return if !@gb_autolights
    @gb_autolights.opacity = eval(GameBaker::AutoLightOpac).to_i
    @gb_autolights.ox = $game_map.display_x / 8
    @gb_autolights.oy = $game_map.display_y / 8
  end

  def create_gblights
    data = $game_map.data
    for x in 0…$game_map.width
      for y in 0…$game_map.height
        next if data[x,y,2] == 0
        if GameBaker::AutoLightTiles.include?(data[x,y,2])
          create_gblight(data[x,y,2],x,y)
        end
      end
    end
  end

  def create_gblight(num,x,y)
    sg = GameBaker::AutoLightTiles[num]
    light = Bitmap.new(sg[2],sg[3])
    clr = GameBaker::AutoLightColors[num]
    start = GameBaker::AutoLightStart[num]
    num = (start).to_f
    numup = num / (sg[3] + 6).to_f
    for i in 0…sg[3]
      rect = Rect.new(0,i,sg[2],i+1)
      color = Color.new(clr[0],clr[1],clr[2],num.to_i)
      light.fill_rect(rect,color)
      num = (num -= numup)
      num = (num -= numup) if i < 6
    end
    if !@gb_autolights
      @gb_autolights = Sprite.new
      @gb_autolights.bitmap = Bitmap.new($game_map.width * 32,$game_map.height * 32)
      @gb_autolights.z = GameBaker::AutoLightZ
      @gb_autolights.opacity = eval(GameBaker::AutoLightOpac).to_i
    end
    @gb_autolights.bitmap.blt((x * 32) + sg[0],(y * 32) + sg[1],light,
      Rect.new(0,0,sg[2],sg[3]))
  end
end



Proszę o pomoc.

SaE - Sob 15 Wrz, 2012 19:49

Linijka 60 i 61 powinna wyglądać tak:
Kod:
for x in 0...$game_map.width
      for y in 0...game_map.height

pw1602 - Sob 15 Wrz, 2012 19:58

Poprawiłem i teraz wyskoczył mi problem z linijką 25 ;/

@Edit
Dobra wpisałem tam liczbę taką samą, jak pod spodem, a kiedy wchodzę do gry to wyskakuje problem z linijką 61 ;/

@Edit2
Dobra brakowało tylko przed game_map tego $. Tylko teraz wszystko działa, lecz kiedy wchodzę do gry to nie ma tych efektów ;/

Ayene - Sob 15 Wrz, 2012 21:38

Nie działa Tobie, bo skrypt tworzy efekt światła tylko w oknach z Tile C.
pw1602 - Sob 15 Wrz, 2012 23:19

Używam innych Tile niż podstawowe, ale okna mam w Tile C. Nie wiem właśnie dlaczego to nie działa. W Tile C na samym końcu mam okna. Czy to coś zmienia?
Ayene - Sob 15 Wrz, 2012 23:29

Tak. Trzeba inaczej skonfigurować skrypt. Wrzuć tutaj swój TileC.
pw1602 - Sob 15 Wrz, 2012 23:38

Spoiler:



Proszę bardzo.

Ayene - Nie 16 Wrz, 2012 09:24

Podmień skrypt na poniższy:
Spoiler:

Kod:
module GameBaker
  AutoLightTiles = Hash.new 
  AutoLightTiles[490] = [3,13,26,48]
  AutoLightTiles[491] = [7,9,18,52]
  AutoLightTiles[492] = [10,5,12,56]
  AutoLightTiles[493] = [8,8,16,53]
  AutoLightTiles[494] = [4,9,25,52]
  AutoLightTiles[495] = [3,24,27,37] 
  AutoLightTiles[505] = [7,22,17,39] 
  AutoLightTiles[506] = [5,13,27,48]
  AutoLightTiles[507] = [0,13,27,48] 
  AutoLightTiles[508] = [6,9,26,52]
  AutoLightTiles[509] = [0,9,26,52] 
  AutoLightTiles[510] = [24,8,8,53]
  AutoLightTiles[511] = [0,8,8,53]

  AutoLightColors = Hash.new([255,255,255])

  AutoLightStart = Hash.new(255)
  AutoLightStart[492] = 220
 
  AutoLightOpac = "96"
  AutoLightZ = 100000
end

class Spriteset_Map
  alias gamebaker_autolight_init initialize
  def initialize
    create_gblights
    gamebaker_autolight_init
  end

  alias gamebaker_autolight_disp dispose
  def dispose
    if @gb_autolights
      @gb_autolights.dispose if !@gb_autolights.disposed?
      @gb_autolights = nil
    end
    gamebaker_autolight_disp
  end

  alias gamebaker_autolight_upd update
  def update
    update_gblights
    gamebaker_autolight_upd
  end

  def update_gblights
    return if !@gb_autolights
    @gb_autolights.opacity = eval(GameBaker::AutoLightOpac).to_i
    @gb_autolights.ox = $game_map.display_x / 8
    @gb_autolights.oy = $game_map.display_y / 8
  end

  def create_gblights
    data = $game_map.data
    for x in 0...$game_map.width
      for y in 0...$game_map.height
        next if data[x,y,2] == 0
        if GameBaker::AutoLightTiles.include?(data[x,y,2])
          create_gblight(data[x,y,2],x,y)
        end
      end
    end
  end

  def create_gblight(num,x,y)
    sg = GameBaker::AutoLightTiles[num]
    light = Bitmap.new(sg[2],sg[3])
    clr = GameBaker::AutoLightColors[num]
    start = GameBaker::AutoLightStart[num]
    num = (start).to_f
    numup = num / (sg[3] + 6).to_f
    for i in 0...sg[3]
      rect = Rect.new(0,i,sg[2],i+1)
      color = Color.new(clr[0],clr[1],clr[2],num.to_i)
      light.fill_rect(rect,color)
      num = (num -= numup)
      num = (num -= numup) if i < 6
    end
    if !@gb_autolights
      @gb_autolights = Sprite.new
      @gb_autolights.bitmap = Bitmap.new($game_map.width * 32,$game_map.height * 32)
      @gb_autolights.z = GameBaker::AutoLightZ
      @gb_autolights.opacity = eval(GameBaker::AutoLightOpac).to_i
    end
    @gb_autolights.bitmap.blt((x * 32) + sg[0],(y * 32) + sg[1],light,
      Rect.new(0,0,sg[2],sg[3]))
  end
end


pw1602 - Nie 16 Wrz, 2012 10:00

Wielkie dzięki Ayene. Wszystko działa, jak należy.

Powered by phpBB modified by Przemo © 2003 phpBB Group