Archiv verlassen und diese Seite im Standarddesign anzeigen : RPG Maker 2000 - Taschenlampe geht an/aus, wenn man ein Event anspricht
Wolftatze
07.08.2012, 17:53
Soo, und da bin ich wieder mit einer neuen Frage. Man lernt ja nie aus. ^^
Ich habe jetzt ein wunderbar funktionierendes Taschenlampenskript geskriptet. Läuft alles wunderbar, jedes Bild wird da angezeigt, wo es hingehört, kein Problem. War schon richtig stolz, dass beim ersten Versuch hinbekommen zu haben...
...bis ich ein Fass ansprach und die Lampe ausging.
Ja, die Taste zum Aktivieren der Lampe ist auf Space/Enter. Aber auf den Pfeiltasten oder Escape hätte es noch weniger Sinn gemacht, dann wäre sie mitten in der Bewegung oder eben beim Menü ausgegangen.
Jetzt die Frage: Kann man irgendwie einen Befehl dazwischenschalten, der die Lampe nicht aus- oder angehen lässt? Käme etwas blöd, wenn (wie geplant) der Charakter in einer Höhle vor einer beschriebenen Wand steht, die Lampe anmacht und sich beschwert, dass er es vor Dunkelheit nicht lesen kann. ^^ Lässt sich da etwas machen oder sollte ich die Lampe lieber über das Item im Inventar aktivieren lassen? Danke schon einmal im Voraus.
Auf Bald,
Wolftatze
djeurissen
07.08.2012, 18:35
Du kannst vor jedem Objekt, welches ansprechbar ist ein event platzieren, welches das Taschenlampen Skript solange pausiert bis man es wieder verlassen hat...
Ansonsten such dir einen Patch um alle Tasten abzufragen und setz die Taschenlampe auf einen anderen Buchstaben...
Ich würde das per Item machen. Es liegt ja auch nahe, dass man die Lampe wie andere Gegenstände über das Inventar benutzt. Natürlich gibt es andere Lösungen, aber damit machst du es dir wohl nur unnötig schwer (den Vorschlag von djeurissen mit dem Event halte ich z. B. für viel zu umständlich). Eine zusätzliche Taste per Patch ist nur dann sinnvoll, wenn die Lampe ständig zum Einsatz kommt.
MajinSonic
07.08.2012, 18:59
Im Endeffekt setzt du einen Switch. Den nennst du z.B. "In der Höhle"
Den machst du immer an, wenn du in Gebiete kommst, wo du die Lampe aktivieren sollst/darfst. Wenn du das Gebiet wieder verlässt musst du die Switches "in der höhle" und das später kommende "Lampe an" Ausschalten.
Dann Database->Item->"Taschenlampe" [Typ SWITCH] Einen neuen Switch erstellen und ihn bspw:"Lampenevent" nennen.
Dann Database->Common Event.
Neues Common event benennen ---> Typ Autostart --->Switch [Lampenevent]
Der Code dieses Events ist
<>Branch If [In der Höhle] ON
<>Change Switch ON [Lampe an]
else:
<>Change Switch OFF [Lampe an}
Comment: Nur zur Sicherheit
End
<>Change Switch OFF [Lamopenevent]
Dann brauchst du nur noch in den Höhlenmaps oder gar in den Common Events einen parallel Process machen, der das Lampenskript beinhaltet und welches sich nur bei LAMPE AN aktiv aktiviert.
LG
MajinSonic
Wolftatze
07.08.2012, 19:13
Danke an alle erstmal für die schnelle Hilfe. Ich werd mal sehen, wie ich es umsetze. Im absoluten Notfall mach ichs tatsächlich über das Item oder mit nem Tastenpatch.
Auf Bald,
Wolftatze
Stimmt, die Erreichbarkeit der Taschenlampe sollte vom Spielprinzip abhängig sein - so wie Kelven meinte. In einem Horrorgame wird man sie sicherlich ständig nutzen müssen, dann macht ein Hotkey Sinn. In einem Rollenspiel hingegen ist eine Taschenlampe wie ein gewöhnliches Fundobjekt, das sich an bestimmter Stelle über das Menü aktivieren lassen sollte. Das Ganze wäre übrigens über den 2k3, wo auch die Shift-Taste vergeben werden kann, leichter gewesen und unproblematisch, aber das war ja nicht deine Frage.
Djeurissens Vorschlag zur Direktlösung ist gar nicht all zu kompliziert, wenn es richtig angegangen wird.
Deine Taschenlampe wird ja über Enter aktiviert. Doch zeitgleich willst du mit Enter irgendein Objekt ansprechen, wodurch zwei Events gleichzeitig aktiv werden. Also selbst wenn du ins Map-Event einen Schalter legst, der das Common Event unterbricht, wird sich beides zwangsweise überschneiden, es sei denn die Taschenlampe springt mit einer winzigen Verzögerung an und hat so die Chance auf den Tab/Switch zu reagieren. Ich würde das Ganze folgendermaßen lösen (ohne den Maker vor der Nase zu haben):
Map Event:
<> Switch: Taschenlampenfunktion AN
<> Rest deines Events
<> Switch: Taschenlampenfunktion AUS
Common Event (Taschenlampenskript):
<> Wait 0.1 (oder mehrere Wait 0.0 hintereinander, aber 0.1 sollte genügen)
<> Bedingung Wenn: Taschenlampenfunktion AUS
Dann: Skript überspringen (zB über Layer) oder das Aktivierungs-Event Deaktivieren
Sonst: Taschenlampenskript ausführen
Man müsste dann zwar jedes mal zwei Schalter setzen, aber so ein großer Aufwand ist das nun auch nicht.
PS: Für den Schalter im Map-Event geht "Toggle AN/AUS" natürlich auch, aber das ist mir persönlich nicht kontrolliert genug. Kann Fehler erzeugen, wenn man nicht aufpasst.
[MG]
Wolftatze
09.08.2012, 23:46
...und wie immer sind die einfachsten Möglichkeiten die besten. Ich komme mir gerade reichlich dämlich vor. ^^
Zum Glück geht es (vorerst) nur um einen Raum, da wird es noch nicht so schwer, jedes Event noch einmal zu überarbeiten. Und der Grund, warum ich es gerne auf einer Taste hätte, war einfach, dass einen die Gegner verfolgen, solange man die Lampe anhat. Von daher wäre es etwas unpraktisch, dann ins Menü wechseln zu müssen, sinngemäß also die Laterne erst aus seinem Reisegepäck rauszukramen bzw reinzuverfrachten, nur damit das Licht an- oder ausgeht und die Biester einen nicht mehr verfolgen.
Ich bedanke mich bei allen für die schnelle Hilfe. Wahrscheinlich kann ich dann in grob geschätzt 5 Jahren auch das Tutorial in meinem Projekt fertig stellen. ^^'
Auf bald,
Wolftatze
MajinSonic
10.08.2012, 00:48
Du kannst, wenn du Tasten verwenden willst meinen Code komplett übernehmen. Nur lass den Schritt mit dem Item weg und mach einen Parallel Process in den Common Events und mach den Haken rein bei Switch und wähle den [In der Höhle]!
Dann musst du nur folgenden Code machen
<>Key Input Proc [variable xyz] [Haken bei SHIFT reinmachen...den rest raus...und den Wait befehl haken rein]
<>If Switch [Lampe An] OFF
Change Switch ON [Lampe An]
Else:
Change Switch OFF [Lampe An]
End Case
Das dürfte es schon gewesen sein.
LG
MajinSonic
<>If Switch [Lampe An] OFF
Change Switch ON [Lampe An]
Else:
Change Switch OFF [Lampe An]
End Case
Kann man ersetzen durch:
Change Switch TOGGLE [Lampe An]
MajinSonic
10.08.2012, 09:38
Stimmt...aber bei TOGGLE hatte ich schon oft ne Macke. Darum wähle ich lieber die sichere Methode.
Ich weiß nicht woran es liegt :)
LG
MajinSonic
Stimmt...aber bei TOGGLE hatte ich schon oft ne Macke. Darum wähle ich lieber die sichere Methode.
Ich weiß nicht woran es liegt :)
Muss ich zustimmen. Der Toggle-Befehl reagiert aus irgendwelchen Gründen nicht immer.
[MG]
Echt? Wär mir noch nie aufgefallen...
Hab jetzt gerade in den Programmcode der Change Switch Funktion gekuckt, es kann eigentlich nicht nicht funktionieren...
Assemblycode:
004ACAE0 loc_004ACAE0: ; CODE XREF: ProcChangeSwitch+78↑j
004ACAE0 00C mov eax, ds:LcfgSystem
004ACAE5 00C mov eax, [eax]
004ACAE7 00C mov edx, esi
004ACAE9 00C call GetSwitch
004ACAE9
004ACAEE 00C mov ecx, eax
004ACAF0 00C xor cl, 1
004ACAF3 00C mov eax, ds:LcfgSystem
004ACAF8 00C mov eax, [eax]
004ACAFA 00C mov edx, esi
004ACAFC 00C call SetSwitch
Pseudocode:
// Der RPG Maker verwendet 8-Bit booleans, 1 = true, 0 = false
uint8_t value = getSwitch(switchId);
value ^= 1; // ^ ist XOR, wer es nicht weiß
setSwitch(switchId, value);
So wird das gemacht, und das kann ja eigentlich nicht schiefgehen... oO
Habt ihr irgendwie ein Beispielprojekt wo es nicht funzt? Ich würde es mir gerne mal ansehen...
MajinSonic
11.08.2012, 23:02
Gerade habe ich leider keines zur Hand. Es kann natürlich auch sein, dass ich mich nun mit dem RM2k vertu'.
Naja...ich denke, es ist kein Hexenwerk mal eben eine Abfrage zu machen.
Ich meine, es war damals ein Rästel, bei dem man Schalter an und ausschaltet. Und jeder Schalter "toggelt" einen oder mehrere Schalter.
LG
MajinSonic
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.