PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Events verdoppeln lassen?! (Im Spiel)



chrisbyRRC
24.03.2009, 10:41
Gibt es eine Möglichkeit während des Spielens ein bestimmtes Event zu verdoppeln und anschließend zum Player zu teleportieren?

Habe keine passenden Button unter Event-Scripting gefunden.
Also das mit den Teleportieren über Variabeln zum Player krieg ich schon hin.

Nur wie soll ich das Event verdoppeln lassen, es gibt jediglich die möglichkeit:
"Set Event Location..." mit den mann Events tauschen und versetzten kann jedoch nicht verdoppeln.

Es soll nämlich so sein wenn der Player im Spiel zB Enter (C) drückt er verschiedene Objekte spawnen kann (zB nen Schild oder nen Stein).
Und das unendlich, und nicht nur einmal und dann ist das Event weg.

Is das irgendwie Möglich? Gibts Ruby-Scripts dazu oder weiss jemand doch ne Event-Scripting Methode??? :confused:

Wäre sehr Dankbar für Hilfe!;)

PS: Es ist der Rpg Maker XP :)

Shining Advances
24.03.2009, 12:17
also das hier ist jetzt ohne die verdopplung. (es wird jedes mal ein neues event erstellt)
sollte allerdings für dein spawnding reichen.

einfach neues script über main und dann einfügen.

class Scene_Map

def newevent(x=$game_player.x,y=$game_player.y,grafik="001-Fighter01",id=nil)
event = RPG::Event.new(x,y)
event.pages[0].graphic.character_name = grafik
if id != nil
event.pages[0].list = $data_common_events[id].list
end
eventid = $game_map.events.keys.max.to_i+1
$game_map.events[eventid] = Game_Event.new($game_map.id,event)
@spriteset.newevent(eventid)
return $game_map.events[eventid]
end
end

class Spriteset_Map
def newevent(eventid)
@character_sprites.push(Sprite_Character.new(@viewport1, $game_map.events[eventid]))
end
end

zur verwendung:
um ein neues event zu erstellen musst du bei call script (event commands letzte seite) $scene.newevent(*diverse argumente*) aufrufen.



$scene.newevent(X-Coord,Y-Coord,Charsetname,CommonEventNr)

x und y coord sollten klar sein ;)
kannst dort $game_player.x bzw $game_player.y einsetzen.
charsetname ist der name des charsets, dass das event haben soll.
commoneventnr gibt die nr des common events an, deren commandos das event dann hat.

wenn du nur $scene.newevent ohne argumente aufrufst. bekommste nen arshes clon auf den koordinaten des spieler, der nix macht außer schön rumstehen :D

die methode gibt nebenbei das neue event zurück, dh du kannst im call script noch ein paar sachen verändern.
bsp:


event = $scene.newevent(0,0,"002-Fighter02",1)
event.turn_left


credits gehn an mich, wenn dus benutzt :)


edit:
wenn du das spiel speicherst und wieder lädst, sind die neu erstellten events noch immer da!
ausnahme:
wenn du das spiel speicherst und es danach im editor veränderst, wird die map beim spiel fortsetzen neu geladen. dadurch werden nur die events erstellt, die auch im editor sind. dh die neu erstellten events sind wieder weg!

Skorp
24.03.2009, 18:55
Alternativ zum Skript von ´Shining Advances´ könnte ich noch das "Event klonen"- Skript empfehlen:



Mit diesem Skript kann man Events auf einer Map klonen. Der gesamte Eventcode wird dabei übernommen.



#--------------------------------------------------------------------------
# Events klonen V1 @ Abt Ploutôn
#--------------------------------------------------------------------------

# Monsta Edit: 1.0 05.06.07

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

# Neuerungen vom Monsta Edit
# - Man kann sich die ID des neuen Events zurückgeben lassen (@id = $game_map.add...)
# - Bug mit Self Switches bei geklonten Events behoben
# - Die Zeile "$game_map.need_refresh = true" brauch nicht mehr ins Call Skript
# - ID's werden richtig ersetzt (siehe Post SLB)

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

Nunja die Funktion steht im Skriptkopf...
Ansonsten hier noch ne kleine Anleitung:


Benutzungsweise:

Einfach auf einer neuen Map ein Event machen mit Parallel oer Autostartfunktion und folgendes in ein Eventskript Eintippen wenn man ein Event klonen will:

$game_map.add_event(map_id,id,x,y)
$scene.spriteset.refresh

und für 2 Events:

$game_map.add_event(map_id,id,x,y)
$game_map.add_event(map_id,id,x,y)
$scene.spriteset.refresh

Und so weiter...

map_id Die Map wo das Event rumsteht
id Die Id des Events also 8 oder 873
x,y die Koordinaten wo das Event auf der neuen Map hin soll.


Mit Hero x und y Variablen kann man das Event ja nachdem man es auf die Map teleportiert hat auch noch zum Helden teleportieren- aber damit müsstest du dich ja auskennen ;-).

EDIT:
Achso, hier noch die
Quelle des Skripts (http://www.rpg-studio.de/forum/rpg-studio-de-skripte-ressourcen-tutorials/rgss/rgss-skriptdatenbank/programmierhilfen/9900-events-klonen/)

chrisbyRRC
24.03.2009, 21:59
Joa alta!!!!:D:D:D:D
GEIL!!!! Das fetzt ja vielen Dank euch beiden, wenn das alles so hinhaut denn isses genau das was ich gesucht hab.

Vielen Dank hätte nich Gedacht das is die schon so als geniale Scripts gibt.http://www.multimediaxis.de/images/smilies/old/sm_12.gif

Credits gebühren natürlich euch!;)

EDIT:
@Shining Advances:
Super es funktioniert! Gibts ne Möglichkeit die gespawnten events durchgehbar zu machen (wie bei normalen event der schalter "Through" unter "Options") Gibts vllt. nen Script-Befehl den Ich gleich dahintersetzen kann?

Shining Advances
25.03.2009, 13:39
füg bei dem script am ende

class Game_Event
attr_accessor :through
end
ein.

un dann bei call script

event = $scene.newevent
event.through = true

chrisbyRRC
25.03.2009, 18:01
Einfach nur Geil! :D
Es funktioniert! Du bist der Beste ;)