Also was gibt es da großartig zu erklären?Zitat von Freierfall
Es ist einfach nur optimal gelöst, klar, das mit dem X und Y Position für jeden Gegner versteht man schneller. Aber ich kann mit Sicherheit sagen, dass die Lösung, wie ich es mache, leichter ist...
Aber ok, ich werde nun mal einen Erklärungsversuch starten, in meinen Worten, genau genommen geh ich das Script hier einmal durch und sage mit jedem Befehl, was passiert.
Also:
Angefangen wird mit dem einfachen Ball, oder Stein/Kugel/Patrone whatever.
Diese lässt sich per Enterbestätigung abfeuern.
- Enter Password: [0001:Passwort] (Als Bestätigungswartung einfach "wait Until Key Hit" ankreutzen)
- PlaySE: Earth4 (Ja, bla, ein Sound nebenbei)
- Berechnung der Position des Helden (hierbei müsste jedem soweit klar sein, wie das geht)
- Steinevent auf die Position des Helden per berechneten Variablen im oberen Vorgang
- Steinevent in die gleiche Facerichtung wie den Helden bringen
- 0.0 (nicht unbedingt notwenid, hab ich aber einfach mal gemacht)
Jetzt wird das Allgemeine Event "Ballflieger" gecallt, also weiter zum Event "Ballflieger" in der Database...
Der Schalter Stein WECH! ist allgemein dafür da, dass er verschwindet, wenn der Ball das Wasser oder einen Gegner berührt.
- Felderanzahl auf 0 setzen (das Steinevent fliegt genau 20 Felder weit, dann wird er wieder auf das links - obere Feld gesetzt (Feld 1x 1y)
- Die Variable Seite auf den Wert 2 setzen (!!!Grund: Dieser Wert sorgt dafür, dass später die zweite Seite der "Gegnerevents" gecallt wird!!!)
- Jetzt wird einfach ein Cycle gestartet, welches ERST beendet wird, wenn entweder die Felderanzahl auf 21 ist, oder der Schalter Stein WECH!
- Nun wird das Steinevent um ein Feld nach vorne bewegt (wie ihr hier seht, habe ich das Steinevent IN einem Common Event einer Movebefehl zugewiesen, warum es so geht, erkläre ich später noch).
- Danach kommen 2x 0.0 Waits weil das Steinevent eine Geschwindigkeit von 4x faster hat und eine Fortbewenung dauert exakt 2x 0.0 sekunden.
(So brauch ich nicht 1000 mal in der Sekunde die Position des Steins berechnen und erhalte eine höhere performance).
So, jetzt kommt der Teil, den hier alle wohl etwas komplexer finden...
- Berechnung der Position des Steinevents in einer Variable (das geht ja noch)
- Set Event's ID (So, damit haben einige vielleicht schon Probleme, das ist nämlich der Knackpunkt an der Berührungsberechnung der GEGNEREVENTS und dem STEINEVENT!)
Hier bekommt die Variable "ID" den Event ID Wert von der Steinevent Position. (Wenn ihr die ID von einem Event wissen wollt, dann müsst ihr ins Eventfenster des entsprechenden Events gehen und dort ganz oben links im Fenster gucken, da steh er)
Problem hier bei ist folgendes: Das Steinevent hat AUCH eine ID, und zwar die ID 1 (weil es das erste Event auf der Map ist). Nun ist es aber so, wenn der Stein auf einem Gegnerevent ist, hat der Gegner die höhere ID. Und die Variable bekommt bei der Set Event's ID Berechnung IMMER den Wert der höheren ID, also bekommt die Variable den ID Wert des Gegners.
Jetzt haben wir schonmal diese Variable und brauchen nichtmehr die Position des GEgners berechnen, da wir ja mithilfe dieses Befehls zwei Fliegen mit einer Klappe gekillt haben
Nur müssen wir wissen, wie man denn jetzt diesen tollen Wert sinnvoll nutzt, so geht es auch weiter in der common Event "Abfrage Event".
Das hier verwirrt jetzt vielleicht etwas, weil da diese blöden Forks sind, dass hab ich persönlich etwas bekloppt gelöst, aber bitte haut mich nicht dafür x)
(Dort sind nämlich in den Forks nur die Werte der anderen Events, die nicht mit in die Berechnung rein sollen). Also überspringt den obrigen Teil des Events und guckt direkt etwas weiter unten wo der Schalter Stein WECH! auf ON gesetzt wird. Hier habt ihr es, wenn die Variable "ID" über 3 ist, dann hat das Steinevent IRGENDETWAS berührt (und zwar einen Gegnerevent).
Auf den SUPERSTEINFORK braucht ihr einfach mal nicht zu gucken, guckt nur in das else von diesem Fork.
Dort ist der Befehl "Call Event", und jetzt schaut euch das mal genauer an!
Dort wird ganz einfach die Event Number gecallt (steht also in der Variable "ID" der Wert 50, so wird das Event mit der ID 50 gecallt), das untere ist dann die Eventseite, die gecallt wird (welche ich ja schon weiter oben auf 2 gesetzt habe).
Jetzt klicken wir einfach irgendein Gegner an, und dort sieht man.... alles ist gleich (BIS auf die ID, die ja vom Rpgmaker AUTOMATISCH gesetzt wird, wenn man ein neues Event erstellt). Mithilfe davon haste schonmal den ersten Teil automatisiert.
Jetzt hast du die 2. Eventseite (Die dritte ist unwichtig!). Diese wird ja über diese common events nach dem oben erklärtem Prinzip gecallt.
Hier ist wichtig, das man erstmal einen Schalter als Condition setzt, der im Spiel "niemals" auf ON gesetzt wird! Denn der Comand Call Event ignoriert diese Condition, und es soll "nur" über diesen Befehl abgefragt werden!
In diesem Event wird erstmal die Position in eine Variable gesetzt. Dann wird per diese Position nochmal der entsprechende ID Wert gesetzt. (Man beachte hierbei, dass kein anderes Event mit einer höheren ID bei dieser Berechnung sich auf diesem Event befindet).
DANN wird dieser "ID Wert" + 8 berechnet. (dad versteh jetzt keiner, gell? *g*)
Ich kanns verstehen, es ist ganz einfach, denn die "HP Zuweisung".
Haben wir beispielweise ein Event mit der ID 24 und rechnen die + 8, so erhalten wir den Wert 32.
Jetzt schaut mal da rein, wo + Alex Attack steht (ihr wisst schon). Da wird euch auffallen, dass nicht die Variable selber genommen wird, sondern "Variablen No." -> das ist der nächste Knackpunkt in dem Script.
Hier hat also in dem Event mit der ID 24 die Variable ID den Wert 32 und genau dieser Wert wird hier jetzt eingesetzt für die Zuweisung des Variablenslots. Bei Variablen No. wird in diesem Fall die Variable 0032 benutzt,
und dient hier als "HP" für den Gegner 24. Also wird die Variable 0032 mit dem Stärkewert des Helden addiert.
Und um eine ordentliche Abfrage zu machen, muss man noch eine Variable raussuchen, die den Wert der Variable 0032 annimmt, das geht weiter unten auch per Variablen No.
Jetzt kommt noch die letzte Abfrage, wenn der Wert über 50 ist (also hat der Gegner 50 HP), wird er auf das obere linke Feld gesetzt.
So geht das komplette Script, einen bessere Weg gibt es meiner Ansicht nach in solchen Fällen wirklich nicht. Man muss beim Programmieren eines beachten (mit dem maker solche Scripte machen ist theoretischweise schon programmieren), man muss es so scripten, dass es sich automatisch weiter scriptet.
Man muss dem Script die Fähigkeit geben, automatisch die HP Variablen ETC. zuzuweisen und man selber nicht in jedem Event nochmal reinkramen muss und die Variable ändert, in unsere heutigen Technik muss alles so automatisiert laufen, wie nur möglich.
Exel ist einer meiner beliebtesten Beispiele, hier muss auch alles automatisiert sein, damit es Sinn macht. Beim Programmieren ist es ähnlich, denkt immer daran, versucht es so zu machen, dass es einfach zu erweitern ist. Auch der Maker kann automatische Zuweisungen, wie ihr da seht, man muss nur tricksen![]()