Simple Frage: Items rufen zugewiesene Commonevents nicht aus!
Hallihallo,
ich möchte gleich mal ohne Umschweife zum Thema kommen:
Ich möchte per Item-Shortcut Skript ein Item aufrufen, welches ein Common Event auslöst. (Beispielsweise später für ne Taschenlampe oder so..)
Nun, das Shortcut-Skript funktioniert soweit, die Items erfüllen soweit ihren Zweck, spielen auch testweise die Target Animations ab und so weiter. Das einzige, was nicht funktioniert ist das Aufrufen eines Common Events. >.<
Es scheint sich um ein Skriptfehler zu handeln, da das Event beim benutzen des Items über das Menü einwandfrei funktioniert!
Worauf muss ich eventuell achten?
Mein Problem müsste nun eigentlich ausreichend geschildert sein. Falls es doch noch Unklarheiten gibt, fragt mich doch bitte.
Ich hoffe, dass mir recht schnell geholfen wird und bedanke mich schoneinmal im Voraus.
Ich habe dem Item ja das Common Event über die Database zugewiesen.
Wenn man das Item nun benutzt soll das Common Event aufgerufen werden, was ja auch (wenn mans übers Menü aufruft) auch funktioniert.
Ich möchte allerdings das Item mit einem Skript per Taste ausführen. Das funktioniert auch fast gänzlich - mit Ausnahme des Common Events! Das wird, wenn das Item per Shortcut aufgerufen wird einfach ignoriert oder so.
Man drückt die Taste "B" -> Das Skript sorgt dafür, dass, wenn man "B" drückt das Item "Taschenlampe" benutzt wird -> Das Item Taschenlampe (sofern vorhanden) ruft ein Common Event hervor ...
So sollte das in der Theorie laufen, in der Praxis sieht dies aber nicht so aus, da der letzte Schritt (das Common Event) nicht ausgeführt wird.
Kannst du mal den entsprechenden Code vom Script posten?
Die einfachste Lösung wäre aber wohl nach dem Druck auf B (bei deinem Beispiel) einfach einen Switch für das Common Event einzuschalten. Na gut, ich weiß natürlich nicht was das Common Event machen soll.
Das Skript hab ich einfach dem RMXP Skript Explorer entnommen.
Was das Common Event schlussendlich machen soll, behalte ich mir ja noch vor. Ich habe testweise ausprobiert durch das Common Event Bilder anzeigen zu lassen, einen Text auszugeben oder den Bildschirm einzufärben. Das ganze hat wie immer funktioniert, wenn man das Item über das Menü "benutzt" hat.
Btw.
Zitat
Die einfachste Lösung wäre aber wohl nach dem Druck auf B (bei deinem Beispiel) einfach einen Switch für das Common Event einzuschalten.
...
Ja, daran hab ich natürlich als erstes gedacht. Doch, - ja halt mich ruhig für einen Noob, ich bin einer! - wie funktioniert das?
Ja, daran hab ich natürlich als erstes gedacht. Doch, - ja halt mich ruhig für einen Noob, ich bin einer! - wie funktioniert das?
...
Ah, das haben sie beim XP rausgenommen, sehe ich gerade. Beim 2K konnte man einem Gegenstand einen Switch zuweisen. Dann weiß ich leider auch keinen Rat.
Nun, aber ich muss ja nicht unbedingt den Umweg über das Item gehen, sondern kann einfach das Common Event durch das drücken der entsprechenden Taste aufrufen. Es wird dann einfach geprüft, ob das Item in der Tasche ist.
Kann ich (ohne Ruby-Skript) beliebige Tasten etwas bewirken lassen? (Ich mein damit nicht die Standardtasten WSAD, Shift, C und Q (und solche, die ich nun vergessen haben sollte..) ?
Ja, das geht.
Du benötigst einen Conitional Branch, der parallel überprüft, ob eine Taste gedrückt wird. Ich empfehle C, weil das den selben Input wie Enter verwendet, also kann man ein Event durch Enter-Druck auslösen lassen.
chrizzio. möchte aber spezielle Gegenstände über Shortcuts benutzen lassen. Es gibt auf jeden Fall ein Script zum Abfragen der Tastatur. Am besten du schaust mal auf den großen, englischsprachigen XP-Seiten nach (ich kenne die Links leider nicht auswändig).
Sollte das wirklich das ganze Shortcutscript sein, so kann ich dir ganz genau sagen, warum der Common Event nicht ausgeführt wird.
Dieses Script führt einfach die item_effect methode auf das Ziel aus, welche sich darum kümmert, dass die entsprechenden Statuswerte des Ziels entsprechend den Itemeinstellungen verändert werden (z.B. HP heilen, Stautswerte erhöhen, usw). Das Abarbeiten von Common Events wird aber nicht von dieser Methode behandelt. Dafür brauchst du die Interpreter Klasse.
Da steht, dass bei Scene_Map in Zeile 60 ein Fehler auftritt.
Ohne zu wissen was in dieser Zeile (und vielleicht noch in den umliegenden) steht kann man dir da nur schwer helfen (da sich durch evtl. Modifikationen deine Scene_Map von den anderen unterscheiden kann).
funktionierts vielleicht wenn du in dem script was ausgeführt wird wenn du die taste drückst das hier noch einfügst?
Zitat
$game_temp.common_event_id = 1
...
Das hab ich von jemanden bekommen. Damit rufe ich common events auf. Ich hab den Befehl allerdings in einem Event mit dem Befehl "Script aufrufen" in verwendung.
Ich bin noch nich sehr gut informiert in Ruby aber soweit ich das logisch nachvollziehn kann sollte das funktionieren.
Die "1" ist dabei die ID des Common Events. Ach ja, und beim Common-Event ist die Startvorraussetzung auf nichts gestellt, also weder "parallel" noch "Auto Start".
Ich hoffe ich konnte helfen.
Ich poste hier mal dein Script mit dem eintrag von mir.
Hab das nicht getestet aber ich denke das funkt.
Was ich verändert habe ist blau:
class Shortcut
def initialize
@shortcuts = [[65,1],[83,2]]
@GetKey = Win32API.new 'user32', 'GetAsyncKeyState', 'l', 'l'
end
def update
if @wait == nil
for i in 0...@shortcuts.size
@item = $data_items[@shortcuts[i][1]]
if @GetKey.call(@shortcuts[i][0]) != 0 and
$game_party.item_number(@item.id) > 0 and
$game_party.actors[0].item_effect(@item) == true and
$game_party.item_can_use?(@item.id) == true
$game_system.se_play(@item.menu_se)
$game_party.lose_item(@item.id, 1)
$game_player.animation_id = @item.animation2_id
$game_temp.common_event_id = 1
@wait = 30
end
end
else @wait = @wait > 0 ? @wait - 1 : nil end
end
end
class Scene_Title
def initialize
$shortcut = Shortcut.new
end
end