Antilag
Aktualny czas: 28-04-26, 18:33 Witaj! Przejdź do zakładki Logowanie lub Rejestracja


Wątek zamknięty 
[VX] Antilag
Revlis Offline
*


Liczba postów: 266
Dołączył: 04-03-15

Pomógł: 80



Post: #2
RE: Antilag

Znalazłem takie coś:
#==========================================================================
# ** Anti-Event Lag
#==========================================================================
# Concept basato sull'anti-event lag di Near Fantastica per rmxp.
#
# Creato da Sandgolem
# Editato da ProGm (reso funzionante ^^)
# Tradotto, quel poco che era da tradurre da Eikichi
#
# Versione 3 [VX]
# 22 Febbraio 2008
#
# Per un utilizzo migliore si consiglia di creare una classe nella sezione:
# "Materials" e di inserirvi il codice.
#==========================================================================

module GameBaker
  AntiLagDisable = 0
  AntiLagModifierX = 408
  AntiLagModifierWidth = 272
  AntiLagModifierY = 272
  AntiLagModifierHeight = 408
  AntiLagAlwaysMove = '&'
end

class Game_CommonEvent
  alias gamebaker_antilag_commonrefresh refresh
  def refresh
    gamebaker_antilag_commonrefresh
    gamebaker_antilag_add if @interpreter
    gamebaker_antilag_remove if !@interpreter
  end
  
  def gamebaker_antilag_remove
    return if !$game_map.gb_antilagcommons.include?(@common_event_id)
    $game_map.gb_antilagcommons -= [@common_event_id]
  end
  
  def gamebaker_antilag_add
    return if $game_map.gb_antilagcommons.include?(@common_event_id)
    $game_map.gb_antilagcommons += [@common_event_id]
  end
end

class Game_Event
  def force_move_route(move_route)
    super(move_route)
    if $game_map.gb_antilagnonmove.include?(@id)
      $game_map.gb_antilagnonmove -= [@id]
      $game_map.gb_antilagmoveevents += [@id]
    end
  end  
  
  alias gamebaker_antilag_init initialize
  def initialize(map_id, event)
    gamebaker_antilag_init(map_id, event)
    if event.name.include?(GameBaker::AntiLagAlwaysMove)
      $game_map.gb_antilagmove += [@id]
    end
  end
  
  alias gamebaker_antilag_evsetup setup
  def setup(new_page)
    gamebaker_antilag_evsetup(new_page)
    if @trigger == 3 or @trigger == 4
      start if @trigger == 3
      if !$game_map.gb_antilagprocess.include?(@id)
        $game_map.gb_antilagprocess += [@id]
      end
    elsif $game_map.gb_antilagprocess.include?(@id)
      $game_map.gb_antilagprocess -= [@id]
    end
    if @character_name == "" && @tile_id == 0
      if !$game_map.gb_antilagnosprite.include?(@id)
        $game_map.gb_antilagnosprite += [@id]
      end
    elsif $game_map.gb_antilagnosprite.include?(@id)
      $game_map.gb_antilagnosprite -= [@id]
    end
    if @move_type == 0 && !@step_anime &&
      !$game_map.gb_antilagnonmove.include?(@id)
      $game_map.gb_antilagnonmove += [@id]
    elsif $game_map.gb_antilagnonmove.include?(@id)
      $game_map.gb_antilagnonmove -= [@id]
    end
  end
  
  def gamebaker_antilag_interupdate
    if @interpreter != nil
      unless @interpreter.running?
        @interpreter.setup(@list, @event.id)
      end
      @interpreter.update
    end
  end
  
  def update
    super
  end
end

class Game_Map
  attr_accessor :gb_antilagcommons, :gb_antilagnonmove, :gb_antilagnosprite,
    :gb_antilagmoveevents, :gb_antilagmove, :gb_antilagprocess,
    :gb_antilagspriteevents, :gb_antilag_spriteupdate
  
  def gamebaker_antilag?(sg)
    return false if sg.real_x < @gb_antilagscreen_x or
                    sg.real_x > @gb_antilagscreen_width or
                    sg.real_y < @gb_antilagscreen_y or
                    sg.real_y > @gb_antilagscreen_height
    return true
  end
  
  alias gamebaker_antilag_setupev setup_events
  def setup_events
    gamebaker_antilag_getscreen
    @gb_antilagnonmove = []
    @gb_antilagmove = []
    @gb_antilagnosprite = []
    @gb_antilagprocess = []
    @gb_antilagcommons = [] if !@gb_antilagcommons
    gamebaker_antilag_setupev
    gamebaker_antilag_refresh_events
  end
  
  def gamebaker_antilag_getscreen
    @gb_antilagscreen_x = @display_x - GameBaker::AntiLagModifierX
    @gb_antilagscreen_y = @display_y - GameBaker::AntiLagModifierY
    @gb_antilagscreen_width =
      @display_x + (Graphics.width * 8) + GameBaker::AntiLagModifierWidth
    @gb_antilagscreen_height =
      @display_y + (Graphics.height * 8) + GameBaker::AntiLagModifierHeight
  end
  
  def gamebaker_antilag_refresh_events
    @gb_antilagalwaysmove = []
    @gb_antilagmoveevents = []
    @gb_antilagspriteevents = []
    for i in @events.values
      next if @gb_antilagnosprite.include?(i)
      @gb_antilagspriteevents += [i]
    end
    @gb_antilagspriteevents += [$game_player]
    for vehicle in $game_map.vehicles
      next if vehicle.map_id != @map_id
      @gb_antilagspriteevents += [vehicle]
    end
    for i in 0...@gb_antilagmove.size
      @gb_antilagalwaysmove += [@events[@gb_antilagmove[i]].id]
    end
    for i in @events.values
      next if @gb_antilagnonmove.include?(i.id)
      next if @gb_antilagmove.include?(i.id)
      @gb_antilagmoveevents += [i.id]
    end
    @gb_antilag_spriteupdate = true
  end
  
  alias gamebaker_antilag_ue update_events
  def update_events
    return gamebaker_antilag_ue if $game_switches[GameBaker::AntiLagDisable]
    gamebaker_antilag_getscreen
    for i in 0...@gb_antilagprocess.size
      @events[@gb_antilagprocess[i]].gamebaker_antilag_interupdate
    end
    for i in 0...@gb_antilagalwaysmove.size
      @events[@gb_antilagalwaysmove[i]].update
    end
    for i in 0...@gb_antilagmoveevents.size
      j = @gb_antilagmoveevents[i]
      @events[j].update if gamebaker_antilag?(@events[j])
    end
    for i in 0...@gb_antilagcommons.size
      @common_events[@gb_antilagcommons[i]].update
    end
  end
  
  alias gamebaker_antilag_maprefresh refresh
  def refresh
    gamebaker_antilag_maprefresh
    gamebaker_antilag_refresh_events
  end
end

class Game_Vehicle; attr_accessor :map_id; end

class Spriteset_Map
  def gamebaker_antilag_characters
    @gb_antilag_eventsprites = []
    for sprite in @character_sprites
      next if !$game_map.gb_antilagspriteevents.include?(sprite.character)
      @gb_antilag_eventsprites += [sprite]
    end
    $game_map.gb_antilag_spriteupdate = nil
  end
  
  alias gamebaker_antilag_uc update_characters
  def update_characters
    return gamebaker_antilag_uc if $game_switches[GameBaker::AntiLagDisable]
    gamebaker_antilag_characters if $game_map.gb_antilag_spriteupdate
    for sprite in @gb_antilag_eventsprites
      sprite.update if $game_map.gamebaker_antilag?(sprite.character)
    end
  end
end

#==========================================================================
# Questa parte è stata aggiunta da ProGM
#==========================================================================

class Game_Player
  def perform_transfer
    return unless @transferring
    @transferring = false
    set_direction(@new_direction)
    unless $game_map.map_id == @new_map_id and GameBaker::AntiLagDisable == 1
      $game_map.setup(@new_map_id)
    end
    moveto(@new_x, @new_y)
  end
end
Źródło:
http://www.rpg2s.net/forum/index.php/top...ag-script/
Testowałem na mapach 50x50, jak na razie działa jak powinien. Sam zamierzam go używać, więc jeśli pojawią się jakieś problemy byłbym wdzięczny jeśli mnie o nich poinformujesz.
(Ten post był ostatnio modyfikowany: 08-05-15 12:40 przez Revlis.)
08-05-15 12:16
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
Wątek zamknięty 


Wiadomości w tym wątku
Antilag - Diablo - 08-05-15, 12:00
RE: Antilag - Revlis - 08-05-15 12:16

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości

Kontakt | Ultima Forum | Wróć do góry | Wróć do forów | Wersja bez grafiki | RSS
Powered By MyBB. © 2013 MyBB Group. All Rights Reserved.
Skórka by Ayene.