Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Event im Spiel kopieren



SMWma
11.12.2010, 16:50
Ja hallo ^,^
Wie kopiere ich im Spiel ohne Swtiches ein Event?
Ich habe bisher 2 Event-Kopier-Skripte gefunden:
Eins von Shining Advance, dass sich schon beim laden einer Karte das Spiel aufhängt:

class Spriteset_Map
def add_sprite(event)
@character_sprites.push(Sprite_Character.new(@viewport1,event))
end
end

class Scene_Map
def copy_event(map_id,event_id)
event = Game_Event.new(map_id, load_data(sprintf("Data/Map%03d.rxdata", map_id)).events[event_id])
$game_map.events[$game_map.events.keys.max+1] = event
event.id = $game_map.events.keys.max
@spriteset.add_sprite(event)
event.refresh
return event
end
end

class Game_Event
def id=(n)
@id = n
@event.id = n
end
end
Es wird so benutzt:

$scene.copy_event(map_id,event_id).moveto(x,y)


Und eins, dass mehr oder weniger klappt: http://www.rpg-studio.de/scriptdb/Events-klonen.html

class Spriteset_Map
#--------------------------------------------------------------------------
def refresh
$game_map.need_refresh = true
unless @character_sprites == nil
for sprite in @character_sprites
sprite.dispose
end
end
@character_sprites = []
for i in $game_map.events.keys.sort
sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
@character_sprites.push(sprite)
end
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
end
#--------------------------------------------------------------------------
end

class Game_Map
#--------------------------------------------------------------------------
def add_event(map_id,id,x,y)
s = 1
(1..@events.size + 1).each{|s|break unless @events.keys.include?(s)}
map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
ev = map.events[id]
ev.id = s
@events[s] = Game_Event.new(@map_id, ev)
@events[s].moveto(x, y)
return @events[s].id
end
#--------------------------------------------------------------------------
end

class Scene_Map
#--------------------------------------------------------------------------
attr_accessor :spriteset
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
def refresh
$game_map.need_refresh = true
unless @character_sprites == nil
for sprite in @character_sprites
sprite.dispose
end
end
@character_sprites = []
for i in $game_map.events.keys.sort
sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
@character_sprites.push(sprite)
end
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
end
#--------------------------------------------------------------------------

class Game_Map
#--------------------------------------------------------------------------
def add_event(map_id,id,x,y)
s = 1
(1..@events.size + 1).each{|s|break unless @events.keys.include?(s)}
map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
ev = map.events[id]
ev.id = s
@events[s] = Game_Event.new(@map_id, ev)
@events[s].moveto(x, y)
return @events[s].id
end
#--------------------------------------------------------------------------
end

class Scene_Map
#--------------------------------------------------------------------------
attr_accessor :spriteset
#--------------------------------------------------------------------------
end Das Event wird zwar kopiert, aber die Grafik wird nicht angezeigt!
Es wird so benutzt:

$game_map.add_event(map_id,id,x,y)
# ... weitere Events ...
# ... es können bel. viele Events angeben werden

Die Scripts.rxdata Datei findet ihr im Anhang!

Ascare
12.12.2010, 07:08
Ohne mir jetzt dir scripts.rxdata anzuschauen:
Sieht so aus als hättest du das sprite refresh vergessen.


# Aufruf:
# $game_map.add_event(map_id,id,x,y)
# ...weitere Events...
# $scene.spriteset.refresh

SMWma
12.12.2010, 08:37
Durch das hinzufügen von:
$scene.spriteset.refresh
hatte es geklappt ^,^
Aber wie lasse ich mir die ID des neuen Events in der Variable $newevent speichern?
Da steht was von:

Man kann sich die ID des neuen Events zurückgeben lassen (@id = $game_map.add...)
Aber so weiter helfen tut es mir nicht ^,^

ETeCe
15.12.2010, 10:31
Du musst beim Erstellen des Event-Klons den Rückgabewert der Variable zuordnen:

$game_variables[16] = $game_map.add_event(1,15, 2, 21)

würde beispielsweise das entspr. Event an die entspr. Stelle kopieren und dessen ID in Variable 16 speichern.