Archiv verlassen und diese Seite im Standarddesign anzeigen : Mein Shooterscript
Ok, wie in dem anderen Thread versprochen, habe ich mal ein Shooterscript gebastelt, in genau 1,5 Stunden :)
Die Erklärung wird sich im Spiel selber nieder lassen, ihr braucht mich nicht in den Credits eintragen, wenn ihr des verwenden wollt, weil das halt der maker macht, nicht ich :P
Das soll auch mehr oder weniger eine Gegenüberstellung von Rm2k killers Script sein.
Eine wichtige Sache noch vorweg, ihr könnt, wenn ihr wollt, das eine kleine Event auf der map kopieren (oben in der Ecke), und selber eine map zusammen stellen. Ihr braucht LEDIGLICH die Gegner zu kopieren, fertig.
Jeder Gegner muss 2 mal getroffen werden, und nun ladet es euch mal runter und schaut einfach mal, was ich da verbrochen hab x)
Shooooooooterscript!!!! (http://rpg-maker.gamigo.de/netzwerk/deak/Anderes/Shooterscript.zip)
Achso, und viel Spaß beim spielen (und wer es schafft, alle Gegner von der Map zu klatschen, der kriegt nen Toastbrot von mir).
Ich habs zwar net geschafft, krieg ich aber trotzdem nen Toastbrot? Bitteee ;_;
Okay, ansonsten nett gemacht, man sieht zwar den Stein in der oberen linken Ecke (Waffe).. aber ansonsten, gut umgesetzt das man es leicht einbauen kan (sofern es wie du sagst versteht).
Nice Work Soldier.
Sesquipedalis
01.03.2005, 16:02
Ja, es ist ein recht schöner Script, auch wenn du mit den Monstern in der Map dann doch ein bisschenübertrieben hast... :D
Ja, aber recht schön, auch dass der Stein im Wasser verschwindetund die Spezialwaffen und die Kisten und das alles: Sehr schön!
Jedoch auch recht kompliziert... Du hast recht: Wer ihn benutzen will, muss in erstmal verstehen XD
Naja, sehr schöner Script (übrigens auch mit sehr schönem TB :D)
Dann mal danke für diesen tollen Script.
Kompliziert meint ihr?
Also mit viel Ehrlichkeit find ichs noch simpler als:
<> Variable Ch:[0001:Hero X]Set, Hero X pos
<> Variable Ch:[0002:Hero Y]Set, Hero Y pos
<> Variable Ch:[0003}:)egner1 X]Set, Gegner1 X pos
<> Variable Ch:[0004}:)egner1 Y]Set, Gegner1 Y pos
<> Fork optn: Varb[0001:Hero X]-V[0003}:)egner1 X]Equivl
<> Fork optn: Varb[0002:Hero Y]-V[0004}:)egner1 Y]Equivl
<> Variable Ch:[0005}:)egner1 HP] - ,Alex Attack
<>
:END Case
<>
:END Case
<>
Denn hier muss man für jeden einzelnen Gegner was neues einstellen.
Ich weis noch, wie vor geraumer Zeit jemand im Forum fragte: "Wie bekommt man bei einem AktionKS es so hin, dass man die Gegner nurnoch kopieren muss?"
Die Antwort darauf war: "Tja, das geht LEIDER nicht, du müsstest dir schon selber einen maker programmieren, wo das geht."
Und so weiter blablabla.
Hier ist der Beweis, dass man sich NICHT selber ein Maker programmieren muss, oder sowas. Hierdran sieht man, dass der maker sogar eine automatische Gegnervariablen Zuweisung in sich einrichten lässt. Wenn jeder maker in einem AKS nur die oben genannten Befehle benutzt, wird es am Ende nurnoch nervig sein, die Gegner ständig zu kopieren und umzuändert, wenn ihr versteht was ich meine.
Zudem suckt die Systemperformance derbe unter dieser ständigen X und Y Berechnung der Gegner, versucht mal diese Gegneranzahl in diesem Shooterscript mit X und Y zu berechnen....
Das Spiel wird sich aufhängen, sogar an guten Rechnern!
Ansonsten kann ich sagen, wenn man diese Befehle, die ich dort verwendet habe, kennt, dann ist es auch kein Problem, das zu verstehen.
Nämlich genau die Unwissenheit über die einzelnen Commands und deren Funktionen lässt die Gedanken über die Möglichkeiten mit dem Rpgmaker derbe abfallen.
Man muss als Programmierer lernen, Commands oder Befehle zu einer logischen Ausgabe zu verbinden, so dass man die wenigste Arbeit hat, das System zu erweitern und die beste Leistung rüber kommt. Manchmal muss man Prioritäten setzen, einen Mittelweg finden. Aber wenn man mit dem Rpgmaker die Commands entsprechend durchdenkt und verbindet, kann man fast alles machen, was man will, und das ohne großen Aufwand.
Rm2k killer
03.03.2005, 09:17
Kompliziert meint ihr?
Also mit viel Ehrlichkeit find ichs noch simpler als:
<> Variable Ch: [0001: Hero X]Set, Hero X pos
<> Variable Ch: [0002: Hero Y]Set, Hero Y pos
<> Variable Ch: [0003: Gegner1 X]Set, Gegner1 X pos
<> Variable Ch: [0004: Gegner1 Y]Set, Gegner1 Y pos
<> Fork optn: Varb[0001: Hero X]-V[0003: Gegner1 X]Equivl
<> Fork optn: Varb[0002: Hero Y]-V[0004: Gegner1 Y]Equivl
<> Variable Ch: [0005: Gegner1 HP] - ,Alex Attack
<>
:END Case
<>
:END Case
<>
Denn hier muss man für jeden einzelnen Gegner was neues einstellen.
Hm..wobei dies bei meinem A-Ks nicht der fall ist. ^^
Also ich muss sagen, interessantes script, hab mich noch nie recht mit der event ID beschäftigt, mal sehen ob ich da noch ein paar lustge kombinationen machen kann. Oo
Ansonsten werde ich mir dein script mal zur seite nehmen und versuchen die gegner Ki zu ändern und andere dinge einzuarbeiten, muss sehen ob das mit verschiedenen sachen kompatibel wirkt. xD (du siehst, ich muss jetzt pseudo-mäßig irgendwas schlechtes am script finden)
Nuja, gutes script, auch wenn ich es nicht leiden kann, wenn man die kugel noch sieht. das macht es nur unnötig langsam.
Cya,
-Odrez-
Hola, das ist genau das was ich suche! Gibt es eine möglichkeit das Script noch irgendwo zu bekommen? Ich hab schon mit den ID´s gespielt aber ich bekomme die IF-Abfrage für den Treffer einfach nicht hin....?!
Schade, bei mir funkt der Download irgendwie nicht.
Kannst dus mir vielleicht per e-mail schicken?
ringprotector@web.de
Gruß
Dave-d
OdaliaKaldasDarato
20.03.2005, 18:14
Bei mir funzt der link auch nicht...
kannst dus mir bitte auch per email schicken (TheArrangement@hotmail.de) ?
Jo, häts auch gern per mail, da der link nicht funzt: ikarus@my-mail.ch
Vielen Dank...
Peace Ikarus
verlink das doch bitte nochmal, der der link nun wirklich nicht geht.....
aber meine e-mail adresse möchte ich hier mal nicht posten. bekomme auch so schon genug spam.
Oder soll ich dir meine e-mail per PN schiken?
Ranarion
20.03.2005, 19:08
Ob du es glaubst oder nicht: Bei mir funktioniert der Link nicht^^
Meine E-Mail Adresse schreibe ich hier nicht rein-die schicke ich dir per PN
Hm, da hat jemand nen Thread etwas hochgepuscht... XD
Irgendwie hab ich das ganze selber komplett übersehen. Oo
De'ak kann leider momentan nicht (immer) ins Internet. Ich werde ihn bescheid geben, wenn er mal irgendwo zu sehen ist.
Ich hab das Skript selber leider auch nicht :/
Ich denke aber mal der Kernpunkt der Sache ist folgender:
Man kann die Abfrage insofern ändern, dass man nicht fragt
"Ist Geger X auf dem Feld Y?"
sondern
"Ist IRGENDWAS auf dem Feld Y?"
Das geht wiederum mit dem Befehl "Set Event ID" (der btw. eigentlich "Get Event ID" heißen müsste... schlecht übersetzt...)
Man gebe in diesem Befehl zwei Variablen an, die die Coordinaten des Feldes haben, das man untersuchen will.
In eine dritte Variable wird dann die Event ID eingespeichert.
Befindet sich in letzterer Variable nun ein Wert, weiß man zuerst "Auf diesem Feld befindet sich ein Event"
Um genau zu sein entspricht der Wert der raus kommt natürlich der ID des Events, das auf dem Feld steht.
Um etwas mit diesem Event zu machen (es sagen wir zum Beispiel verschwinden zu lassen) gibt es einen weiteren Trick:
Man CALLT das Event.
Netterweise kann man bei "Call Event" nämlich Variablen angeben, z.B. die Variable mit der Event-ID. Geben wir diese bei "Event" an, wird automatisch das Event, das sich auf dem untersuchten Feld befindet, aufgerufen, OHNE irgendeine Fork.
Und nun müssen nur noch alle Gegner Events eine Event Seite haben, indem ein Skript ist, das sie verschwinden lässt, eben die Event-Seite, die gecallt wird.
Man darf natürlich keine Switches verwenden, um die Gegner verschwinden zu lassen, den dann müsste man das Skript ja wieder für jeden einzelnen Gegner umschreiben.
Stattdessen kann man Set event Place verwenden um das Event an nen Ort zu teleportieren, wo es praktisch als verschwunden gilt (wie in Chocobo Panic mit den Kristallen) oder man verwendet einfach Clear Timer (wenn man damit klar kommt, das man fortan nichtmehr auf dieses Event zugreifen DARF, solange man auf der Map ist)
Ich denke das ist das wichtigste was man wissen muss.
Ich hoffe du bist damit einverstanden, das ich das hier erkläre, De'ak (falls du es hier lesen solltst)
C ya
Lachsen
Edit: Bad-Eight, ph33r m3!
Ok, Problem ist folgendes: Das Shooterscript befindet sich auf meinem Computer (ist klar). Dieser läuft aber momentan nicht (den Grund dafür will ich hier mal nicht nennen).
So ist es momentan leider unmöglich, dieses Script irgendwo hoch zu laden, denn ich habe es vorher auf der webspace von rpg-maker.com hochgeladen, und jeder weis unschwer, dass der schon abgekracht ist.
Also kann ich momentan leidern iemanden mein script schicken. Hat das Script zufälligerweise jemand hier noch, und wäre dazu bereit, es hoch zu laden?
Sgt. Pepper
22.03.2005, 11:04
Das? o.o (http://mngy.badrat.de/files/Shooterscript.zip).
Mehr gibts wohl nicht zu sagen?!
http://www.multimediaxis.de/images/smilies/old/sm_12.gif
jetzt kommts, vllt kann ein technik genie (oder auch jemand anders, ders versteht )
mal erklären, ich versteh das abfrage-event nicht bzw wie das funktioniert....
der stein speichert jede 2x0.0 sec seine pos, die wird mit der des monsters abgeglichen, so hab ich das erwartet, aber das abfrage-event in diesem script chek ich nicht...... :confused: :confused:
Wäre über eine erkläreung sehr interesserit, da mir das system doch schon sehr gefällt (Abreitserleichterung ^100, gegner nur noch kopieren)
mfg Freierfall
jetzt kommts, vllt kann ein technik genie (oder auch jemand anders, ders versteht )
mal erklären, ich versteh das abfrage-event nicht bzw wie das funktioniert....
der stein speichert jede 2x0.0 sec seine pos, die wird mit der des monsters abgeglichen, so hab ich das erwartet, aber das abfrage-event in diesem script chek ich nicht...... :confused: :confused:
Wäre über eine erkläreung sehr interesserit, da mir das system doch schon sehr gefällt (Abreitserleichterung ^100, gegner nur noch kopieren)
mfg Freierfall
Also was gibt es da großartig zu erklären?
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 :)
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.