RPGVX.net
RPG-Maker VX => VX Technik [Frageforum] => Thema gestartet von: Franky am November 19, 2011, 21:49:33
-
Hey, ich brauche dringend ein kleines Update für das Anti-Lag-Script:
Bisher wird das gesamte Event, welches "update" genannt wurde, dauerhaft geupdatet.
Was ich benötige ist: Ein update, welches sich z.B. nur auf Eventpage 3 bezieht. Sobald Seite 3 aktiv ist, wird diese geupdatet, ist nun Seite 4 aktiv, wird diese nicht geupdatet, bzw. nur in der Nähe.
Ich kann leider kein anderes Script verwenden, da es sonst zu massig Fehlern kommen wird.
Alles was ich brauche ist also lediglich die Option, nur eine einzige Seite zu aktualisieren.
Dies kann z.B. über die Comment-Funktion erfolgen mittels "update page" (dies wird auf die zu updatende Seite gestellt), oder vlt. ist es auch möglich dies in den Eventnamen zu integrieren, indem man schreibt: "update(1,5,7)" (was bedeutet: Seite 1, 5 und 7 werden geupdatet, sobald sie aktiv sind, der Rest nicht).
Hier ist das Script, welches ich nutze (ein wenig modifiziert):
#==============================================================================
# hellMinor's "Just Anti-Lag"
# Version : beta v0.6
# Created by : hellMinor
# Do NOT redistribute without my permission
#==============================================================================
# Um ein Event immer zu updaten, nenn es einfach - update - und schon wird
# es permanent geupdatet
#==============================================================================
ADJUST = 10 # Bestimmt wieviele Felder außerhalb des Bildes geupdatet werden
FRAMESKIP = 2 # Wieviele Frames sollen vor dem neu zeichnen übergangen werden
ALLOW_SCROLL_UPDATE_SWITCH_ID = 20# Switch, bei dem der Scroll jedes mal
# geupdatet wird.
#==============================================================================
class Game_Map
#==============================================================================
def update_events
obere_schranke = @display_y/256 - $game_system.adjust
untere_schranke = @display_y/256 + 13 + $game_system.adjust
linke_schranke = @display_x/256 - $game_system.adjust
rechte_schranke = @display_x/256 + 17 + $game_system.adjust
for event in @events.values
event_x = event.x
event_y = event.y
if event.name == "update"
event.update
next
end
event.update if event_x >= linke_schranke and event_x <= rechte_schranke and event_y >= obere_schranke and event_y <= untere_schranke
end
for common_event in @common_events.values
common_event.update
end
end
end
#==============================================================================
class Spriteset_Map
#==============================================================================
alias create_viewports_just_antilag create_viewports
alias update_old_update update unless $@
def create_viewports
@skip = 0
create_viewports_just_antilag
end
def update
if @skip <= 0
@skip = FRAMESKIP
update_old_update
else
if $game_switches[ALLOW_SCROLL_UPDATE_SWITCH_ID]
update_tilemap
end
screen_x = $game_map.display_x/256
screen_y = $game_map.display_y/256
for sprite in @character_sprites
sprite_x = sprite.character.x
sprite_y = sprite.character.y
if sprite_x > (screen_x - $game_system.adjust) and sprite_x < (screen_x + 17 + $game_system.adjust) and sprite_y > (screen_y - $game_system.adjust) and sprite_y < (screen_y + 13 + $game_system.adjust) && sprite.animation?
sprite.update
end
end
end
@skip -= 1
end
def update_characters
screen_x = $game_map.display_x/256
screen_y = $game_map.display_y/256
for sprite in @character_sprites
sprite_x = sprite.character.x
sprite_y = sprite.character.y
if sprite_x > (screen_x - $game_system.adjust) and sprite_x < (screen_x + 17 + $game_system.adjust) and sprite_y > (screen_y - $game_system.adjust) and sprite_y < (screen_y + 13 + $game_system.adjust)
sprite.update
end
end
for ally in @allies_sprites.compact
if ally.character.destroy and !ally.disposed?
ally.dispose
$game_allies.delete(ally.character)
@allies_sprites.delete(ally)
elsif !ally.disposed?
ally.update if $game_map.in_range?(ally.character)
end
end
for monster in @monsters_sprites.compact
if monster.character.destroy and !monster.character.respawn and !monster.disposed?
monster.dispose
$game_monsters.delete(monster.character)
@monsters_sprites.delete(monster)
elsif !monster.disposed?
monster.update if $game_map.in_range?(monster.character)
end
end
for range in @range_sprites.compact
if range.character.destroy and !range.disposed?
range.dispose
$game_range.delete(range.character)
@range_sprites.delete(range)
elsif !range.disposed?
range.update if $game_map.in_range?(range.character)
end
end
for drop in @drop_sprites.compact
if drop.character.destroy and !drop.disposed?
drop.update
drop.character.character_name = ""
unless drop.animation?
drop.dispose
$game_drop.delete(drop.character)
$game_bomb.delete(drop.character)
@drop_sprites.delete(drop)
end
elsif !drop.disposed?
drop.update if $game_map.in_range?(drop.character)
end
end
for ally in $game_allies.compact
next if ally.draw
@allies_sprites.push(Sprite_Character.new(@viewport1, ally))
@weapon_sprites.push(Sprite_Weapon.new(@viewport1, ally))
@shield_sprites.push(Sprite_Shield.new(@viewport1 ,ally))
ally.draw = true
end
for range in $game_range.compact
next unless $game_map.in_range?(range)
next if range.draw
@range_sprites.push(Sprite_Character.new(@viewport1, range))
range.draw = true
end
for drop in $game_drop.compact
next unless $game_map.in_range?(drop)
next if drop.draw
@drop_sprites.push(Sprite_Drop.new(@viewport1, drop))
drop.draw = true
end
for bomb in $game_bomb.compact
next unless $game_map.in_range?(bomb)
next if bomb.draw
@drop_sprites.push(Sprite_Drop.new(@viewport1, bomb))
bomb.draw = true
end
for weapon in @weapon_sprites.compact
next unless $game_map.in_range?(weapon.character)
weapon.update
end
for shield in @shield_sprites.compact
next unless $game_map.in_range?(shield.character)
shield.update
end
for shadow in @shadow_floor.compact
next unless $game_map.in_range?(shadow.character)
shadow.update
end
end
end
#==============================================================================
class Game_Event < Game_Character
attr_reader :name
alias initialize_just_antilag initialize
def initialize(map_id, event)
initialize_just_antilag(map_id, event)
@name = @event.name
end
end
#============================================
class Game_System
attr_accessor :adjust
alias initialize_adjust initialize unless $@
def initialize
initialize_adjust
@adjust = ADJUST
end
end
Ich freue mich über jede Hilfe!
-
Keiner, niemand...? Da ist doch jemand!
-
Scriptbefehl:
event.update
Das müsste klappen, wenn du das ins Event als Scriptbefehl einfügst.
Edit: und einen Loop bzw. PP machen, sonst gehts auch nicht (glaub ich...).
-
Nun ja, er gibt den Fehler aus: undefined method for update.
Also wurde das noch gar nicht definiert.
Ich habe es als PP gemacht.
Ist es denn nicht leichter einen Comment dafür zu schreiben? (dasselbe gibt es auch im Vampyr SBABS, als Referenz)
Oder vielleicht ist auch die Methode möglich, im Eventnamen folgendes zu schreiben: update(1,3,5); also werden Seite 1, 3 und 5 geupdatet.
Ich bin da etwas skeptisch, was einen normalen Script-Befehl angeht, da dadurch nur einmalig das Anti-Lag-Script aufgerufen wird, oder nicht?
Aber ich kenne mich mit den Möglichkeiten nicht so aus, also nehme ich das, was mir angeboten wird! :grimace:
-
Ah, schade, ich dachte es würde klappen...
Ich kann mal nach der Uni schaun, was ich machenn kann. Aber ich bin eigentlich genau so sein Script-Noob wie du ;)
-
Danke xD!
Soll mich das aufheitern? :haha_zwinker:
Dann wünsche ich dir mal viel Glück!
Vielleicht komme ich ja auch noch auf ein paar Noob-Alternativen xD!
-
Alles so weit gelöst: :haha_zwinker:
class Game_Event < Game_Character
attr_reader :always_update
unless method_defined?(:refresh_ILC_alwaysUpdateSetPerEventPage)
alias_method(:refresh_ILC_alwaysUpdateSetPerEventPage, :refresh)
end
def refresh
last_page = @page
refresh_ILC_alwaysUpdateSetPerEventPage
if @page != last_page
@always_update = @event.name == "update" ? true : (@list == nil) ? false :
@list.any?{ |c| c.code == 108 and c.parameters[0] == "update page" }
end
end
end
#==============================================================================
class Game_Map
#==============================================================================
def update_events
s_oben = (@display_y >> 8) - $game_system.adjust
s_unten = (@display_y >> 8) + (Graphics.height >> 5) + $game_system.adjust
s_links = (@display_x >> 8) - $game_system.adjust
s_rechts = (@display_x >> 8) + (Graphics.width >> 5) + $game_system.adjust
@events.each_value do |event|
if event.always_update or (event.x.between?(s_links, s_rechts) and
event.y.between?(s_oben, s_unten))
event.update
end
end
@common_events.each_value do |common_event|
common_event.update
end
end
end