Dann fragst du nach der speziellen ID. Also welchen Wert die Variable hat um zu erkennen, welcher Schild ausgerüstet ist. Der Wood Shield hat z.B. die ID 44, der Bronze Shield die ID 48.
Das hat aber wenig mit dem System des Blockens an sich zu tun. Das ist Grafikspielerei. Daher solltest du die Abfrage hierfür in ein anderes Event auslagern und per Call aufrufen.
Hier nochmal der Code für diejenigen, die vielleicht ein ähnliches Block-System in ihr Game integrieren wollen.
Der Code für den Block-Vorgang an sich:
Key Input Shield (PP) kein Switch:
Ich habe mich entschlossen, nur noch 900 HP dem Helden hinzu zu fügen, weil ich mir dann nur noch merken muss, dass der durch Gegner angerichtete Schaden nicht über 900 liegen darf. Das ist eher verkraftbar, als dass die HP des Helden 999 nicht übertreffen dürfen.
Hier die Abfrage, ob der Held überhaupt einen Schild angelegt hat:
Init Shield (PP) kein Switch:
Denkt daran, dass bei diesem Code die anderen Helden & Klassen in eurem Game zu Beginn keine Schilde angelegt haben dürfen! Ansonsten wird bei Druck auf den Block-Button trotz nicht angelegtem Schild trotzdem geblockt.
1) Was soll das ganze Wait 0.0 da. Das verzögert alles unnötig. Du brauchst nur ein Wait 0.0 am Ende des Events (bei PPs theoretisch auch nicht, weil die ein "automatisches" Wait 0.0 am Ende haben, aber da kann es manchmal tatsächlich nötig sein es mit einem zusätzlichen Wait 0.0 quasi zu "verdoppeln"), oder innerhalb einer Schleife mit Loop/Labels.
2) Du überprüfst hier nur ob "Nelu WITCH" einen Schild angelegt hast. Die anderen 3 Werte "verpuffen" weil du sie immer wieder überschreibst, bevor du mit ihnen irgendwas machst.
Und ich nehme an, mit "andere Helden" meinst du solche die nicht in der Party sind. Dafür müsstest du nur abfragen, ob ein Held in der Party ist, bevor du sein Schild checkst.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!
Sorry, dass ich jetzt etwas polemisch werde, aber:
Warum zur Hölle sollte man so ein Skript für diese Funktion verwenden? :'D
Ich würde von Vornherein alles, was viele Mapevents gemeinsam verwenden per Common Events skripten. Da muss man dann sowas wie ein Blocksystem sowieso nur einmalig einfügen Das würde ich dann definitiv per Switches machen und eine Abfrage, wenn der Switch an ist, dann soll der Schaden 0 betragen und wenn nicht, dann soll er ganz normal berechnet werden.
Einzig und allein müssen sogenannte Parameter übergeben werden beim Aufruf einer Funktion. Beim RPG Maker gibt es sowas leider nicht, also muss man sich da mit den Variablen behelfen, die man auf bestimmte Werte setzt, bevor da CE aufgerufen wird.
Aber wie gesagt, bei dir ist das ja wohl irgendwie nicht möglich, da du offensichtlich wirklich keine CEs verwendest
@Cherry Die Waits sind da, weil ohne sie nichts passiert. & ich verfolge eine strikte Politik beim Makern: "Alles, was funktioniert, ist gut!" (^:
Außerdem: Der Code muss natürlich so aussehen:
Anmerkung: Gibt es da noch irgendeine Möglichkeit das Ganze zu beschleunigen?
@Drakee Ist mit CE "Common Events" oder "Call Events" gemeint? Common Events verwende ich schon, aber nicht für Schadenabfrage. Ich verwende sie eher für das Aufrufen von Animationen oder Klassenabfragen.
Aber mal was anderes: Wo kann man sich in eurem Forum der Community vorstellen?
EDIT: Hab den "Hallo, ich bin neu hier"-Thread schon gefunden. (:
[QUOTE=Norpoleon;3263229]
Anmerkung: Gibt es da noch irgendeine Möglichkeit das Ganze zu beschleunigen?
Die Abfrage (@> Conditional Branch: Variable [0201:shield] > 0) könnte man in ein extra Common Event packen und dann nach jedem " @> Control Variables: [0201:shield] = [Nelu KLASSE]'s Shield ID" per Call-Event aufrufen. Aber prinzipiell würde das wieder nur Code pro Copy Paste einsparen, aber nicht die Anzahl der Copy Pastes. Jedoch geschieht das auch wieder zugunsten der Übersicht.
Da man nicht per Pointer auf die CharaterID zugreifen kann, geht das nicht anders ^^
Wenn ich alle Schildabfragen in ein Common Event packe, funktioniert das Blocken prima, bis auf die Tatsache, dass es richtig schön langsam & unexakt ist.
Packe ich die Schildabfragen jeweils in ein eigenes Common Event, passiert gar nichts.
Ich weiß, dass ich alles schon mal so hinbekommen habe, dass das Blocken richtig schön schnell & exakt war. Aber ich weiß nicht mehr, was ich da anders gemacht habe.
Es kann übrigens so immer noch nicht funktionieren. Du überschreibst diesmal zwar nicht die shield-Variable, aber dafür den shield control Switch jedes mal, weil selbst wenn eine der Bedingungen den Switch auf ON setzt, setzt die nächste ihn vllt wieder auf OFF; etc.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!
Hilft da eine weitere Conditional Branch, die ich gleich 0 setze & dann den Schalter auf OFF stelle?
EDIT: @Corti Ich sehe das ein bisschen anders. Man muss Dinge wagen & viel rumexperimentieren, damit man überhaupt etwas lernt. Ich kann noch so oft die Standard-Maker-Battlesystems nachbauen & verstehen wie ich will, davon lern ich ja auch nicht, wie ich ein ABS baue. Stattdessen muss man sich halt das ABS von jemand anderem besorgen & damit rumexperimentieren & versuchen es Schritt für Schritt so zu verstehen. (:
Cherry und Corti haben Recht, du solltest lieber vorher eine Nummer kleiner anfangen und genau verinnerlichen wie jeder Befehl funktioniert und selber versuchen einen Lösungsansatz zu finden.
Versuche nicht wild drauf los zu skripten, sondern überlege dir erst einen "Pseudo-Algorithmus".
Dennoch:
Pass auf, ganz einfach, nach diesem Fall, kann es vier verschiedene Alternativen geben. Die Alternativen hintereinander so auszuführen würde zu einer Überschreibung einer wohlmöglich erfüllten Bedingung führen. Das heißt, dass immer das ausgerüstete Schild von der "WITCH" alles vorher nichtig macht, weil das immer als Letztes ausgeführt wird. Das heißt, wenn man diese Klasse spielt, sollte das eigentlich funktionieren, aber mit den anderen Klassen dann wiederum nicht. Stattdessen musst du dem Maker sagen, dass es Alternativen sind, indem du Bedingungen mit Else-Verzweigungen benutzt.
Hier wird die Shield ID je nachdem, wer gerade in der Party ist, nach dem aktuellen Helden zugewiesen. Allerdings geht das auch nur so, wenn du wirklich immernur einen einzigen Charakter in der Party hast! (Bei einem ABS üblich, es sei denn Du benutzt NPC-Mitstreiter, was allerdings für einen Amateur zu viel des Guten wäre)
EDIT: Trotzdem überlege dir bitte Mal, was es mit diesem Befehl @> Control Variables: [0001:Shield ID] = [CHARACTER]'s Shield ID GENAU auf sich hat.
Wenn du andere fragen musst, warum etwas nicht funktioniert, hast du es gebaut ohne zu verstehen was du tust. Ich würde damit anfangen Dinge zu bauen, die du verstehst. Das geht am besten, in dem man den Zweck jeder Zeile versteht und wenn man eine Vorstellung hat, was passieren soll und nur Befehle anwendet, die auch Teil dieses Ablaufen sind, dann klappt das auch.
Dein Code da, was soll das? Du fragst viele Male pro Sekunde ab, ob deine drei Charaktere einen Schild haben. Wenn alle deine Helden einen Schild tragen, dann sollte das sogar funktionieren. Ansonsten wird der Switch doch im Millisekundentakt wechseln und dein Schildblockscript wird je nach dem wie viele deiner Charaktere gerade den Schild tragen entweder gar nicht, oder 33/66/100% der Zeit funktionieren, wechselnd im Takt von Millisekunden.
Das in verschiedenen CEs? Wie kommt man darauf?
Zitat
"Ich habe ein CE, dass im Millisekundentakt ein Switch wild und planlos an und aus schaltet! Woah, ich hab ne Idee! Anstatt nacheinander an-aus, nehme ich viele CEs und schalte die Switches ZEITGLEICH wild und planlos an und aus!"
...
Ich finds sowieso mutig, ein Action-Kampfsystem zu benutzen, wenn man nur sehr wenig bis gar nicht scripten kann, aber dann solltest du zumindest versuchen es zu lernen. Man lernt auch nicht kochen, wenn man immer nur eine Augenbinde tragend zufällige 25 Sachen in den Topf wirft und dann andere fragt, warum es scheisse schmeckt. Fang kleiner an. Bau es für einen Helden, wenn das funktioniert, bau es für zwei. Wenn es bei einem funktioniert und bei zweien nicht, weisst du wo du suchen musst. Wenn du erst ganz viel machst, dann fühlst du dich leichter überfordert und fragst lieber das Forum statt mal selbst zu überlegen.