Mitsch93

Drachentöter

  • »Mitsch93« ist der Autor dieses Themas

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Nachricht senden

1

Dienstag, 9. Januar 2018, 15:09

[Offen] Eventsteuerung über Scene_Map

Ahoi,

ich möchte - wenn möglich - einiges an Eventtechnik in Scene_Map auslagern (wenn es denn da richtig aufgehoben ist).
Konkret geht es um die Gegner und sichtbaren Teleport-Events.

1.) Gegner auf Map
Aktuell ist es ja so, dass Gegner anfangen, den Spieler zu verfolgen, sobald eine Mindes-Distanz zwischen ihnen unterschritten wurde.
Kann sich der Spieler aus dieser Distanz "flüchten", so hört der Gegner auf, ihm zu folgden. Eventtechnisch sieht das ganze so aus beim Gegner:
Seite 1 - Random Bewegen
Seite 2 - Spieler verfolgen + Kampf bei Berührung
Seite 3 - Tue nichts (wenn "StopAll"-Switch an ist)
Seite 4 - Nichts (Gegner besiegt)
Zusätzlich brauch ich natürlich noch zu jedem Gegner ein Parallel Process Event, das die Ausrufezeichen-Animation über ihm anzeigt,
während er den Spieler verfolgt.

Mein Ziel wäre das in die Skripttechnik auszulagern. Ich müsste nur noch z.B. "EnemyMap" in den Eventnamen schreiben und die Self-Switches
würden automatisch aktiviert werden. Sprich: Die 4 Eventseiten beim Gegner sollen erhalten bleiben, nur das Verfolgen bzw. Nicht-Verfolgen soll
per Skript abgewickelt werden. Zangsweise müsste dann auch das Anzeigen der Animation hierüber geregelt werden.

2.) Teleport Events
Hiermit meine ich die sichtbaren Mapübergänge. Das sind aktuell die Events, die mir beim Maperstellen die meiste Arbeit machen (mit Abstand).
Funktionsweise aktuell:
Kommt der Spieler nahe genug an ein Teleportevent, dann fängt es an seine Opacity zu erhöhen (langsam von 0 auf 255). Sobald dies geschehen ist,
bleibt die Opacity auf 255. Sobald sich der Spieler wieder weit genug entfernt, verringert sich die Opacity von 255 auf 0 und bleibt solange auf 0, bis der
Spieler wieder in Reichweite kommt.

Aktuell brauche ich dafür auch einige Steuerungs-Switches, damit die Opacity nicht in einer Schleife von 0 auf 255 erhöht wird, sondern das nur
einmalig passiert. Per Skript könnte man das sicher leichter handeln. Auch hier ist es das Ziel, dass ich später eigentlich nur noch "Teleporter" in
den Eventnamen schreiben müsste und der Skript dann den Rest übernimmt.Das eigentliche Teleportieren usw. würde natürlich im Event vorhanden bleiben.

Fragen, die sich mir hierzu stellen:

  1. Wäre das mit den Gegner wie beschrieben möglich?
  2. Wäre das mit den Teleportern wie beschrieben möglich?
  3. Wo implementiere ich am besten das Ganze? Scene_Map?
  4. Ich werde wohl nicht drum rumkommen, alle Events einer Map in einer Schleife zu durchlaufen, damit ich meine "Teleporter" und "EnemyMap" finde, oder?
  5. Ich habe noch keine Idee, wie ich es anstelle, dass eine Animation über einen NPC angezeigt wird, solange ein Self_Switch aktiv ist.

Josey

Storyteller

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Nachricht senden

2

Mittwoch, 10. Januar 2018, 17:41

Zum Teleport-Event:
Hast du es mal mit so einem Script ausprobiert?
Link
Bei diesem Script wird ein ausgewähltes Icon (manuell im Code einstellbar) angezeigt. Es beherrscht das reine Einfaden (aber auch hoch und runter hoovern und ein und ausfaden, solange der Trigger aktiviert ist). Man kann sogar einstellen, dass das Icon erst auftaucht, wenn ein bestimmter Switch ON ist. Kann man aber auch lassen.
Ganz sicher lässt sich da als Trigger eine Distanz einbauen? :3
Bzw ist hier ein Script, das auf Distanz ein- und ausfadet. Ist vlt besser XD°

Und worum geht es bei der Gegnersache? Ums Sparen von Switches? :3
  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star-half: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty: (Ein Stern- offiziell verliehen von Playm! XD)
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

Mitsch93

Drachentöter

  • »Mitsch93« ist der Autor dieses Themas

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Nachricht senden

3

Mittwoch, 10. Januar 2018, 18:19

Danke, Josey, werde mir die Skripte mal anschauen.

Zitat

Und worum geht es bei der Gegnersache? Ums Sparen von Switches? :3

Bei beiden Sachen gehts hauptsächlich um Einsparen von Arbeit. Für ein billiges Teleportevent ist das aktuell
echt abnormal viel. Und bei den Gegner ist es auch nicht besser. Brauche alleine für jeden Gegner 1 Parallel Process
Event für Distanzabfrage + Animationsanzeige. Und da muss man natürlich immer kleinlichst darauf achten, dass
man die richtige Event ID auch verwendet. Switche verwende ich immer die selben für die Gegner, da die
ja sowieso beim Instanzreset zurückgesetzt werden.

Josey

Storyteller

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Nachricht senden

4

Mittwoch, 10. Januar 2018, 18:54

Zumindest für das Teleportevent müsste das ja dann Arbeit sparen :/

Hide&Seek (Coconut) würde für die Distanzabfrage nicht helfen (oder benutzt du die schon)? Dort ist es möglich einen CB mit einer Distanz zu bestücken und wenn die Distanz true ist, kann man einen SelfSwitch umstellen und wenn sie false ist, die Random-Bewegung machen.

Zitat

Zusätzlich brauch ich natürlich noch zu jedem Gegner ein Parallel Process Event, das die Ausrufezeichen-Animation über ihm anzeigt, während er den Spieler verfolgt.

Meinst du damit dass die Animation immer wieder abgespielt werden würde? Wenn das alles so einfach ist, wie es für mich klingt, müsste das doch auch mit Hide&Seek möglich sein :/ Soll ich mal was basteln, bei dem man möglichst nur kopieren muss und du sagst mir dann, obs das ist, was du brauchst? Oder willst du selber erstmal mit H&S gucken (wenn dus nicht schon hast)?
Verfolgen die Gegner eigentlich per Pathfinding oder mit Move toward Player?

Sollte aber das Ausrufezeichen nur aufploppen und dann nicht mehr verschwinden (also die ganze Zeit da sein), kann man das auch über das Head-up-Icon lösen, denke ich ><
  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star-half: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty: (Ein Stern- offiziell verliehen von Playm! XD)
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

Mitsch93

Drachentöter

  • »Mitsch93« ist der Autor dieses Themas

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Nachricht senden

5

Mittwoch, 10. Januar 2018, 19:54

Distanzabfrage mach ich aktuell über ein Distanzabfrage-Skript. Das Standard Hide and Seek Skript müsste
ich aber sowieso noch verwenden, weil ich ja die Demo umkrempeln möchte (unter anderem mit einer Hide and Seek Passage).

Aber die Distanzabfrage ist auch nicht das Problem. Das kann ich auch in ein paar Zeilen Skript lösen, dafür gibt es ja den Onkel Pythagoras^^.

Ich habe mal über die Skripte drüber geguckt, da wird das aber irgendwie ganz anders gemacht, wie ich es vor hatte - wobei
ich ja nicht mal weiß, ob mein Plan mit Scene_Map / Game_Map aufgehen würde. Vorallem weiß ich nicht, wie gut man das Problem
in die vorhandenen Skripte copy-pasten kann.

Aber bei dem Headup Icon werd ich mal genauer nach gucken. Würde ja die selbe Funktion erfüllen.

Zitat

Verfolgen die Gegner eigentlich per Pathfinding oder mit Move toward Player?

Aktuell per stupider MoveRoute. Pathfinding wäre natürlich richtig schnieke.

Gerade stellen sich mir halt noch so Standardfragen: Ich möchte optimalerweise nur einmal alle Events durchgehen und mir diese merken, die
einen gewissen Namen haben z.b. "EnemyMap" und mit denen soll dann weitergearbeitet werden. Sonst würde ja bei jedem Refresh alle Events durchgegangen werden.
Kann mir vorstellen, dass das zu starken Lags führen kann je nach Mapgröße.

Josey

Storyteller

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Nachricht senden

6

Donnerstag, 11. Januar 2018, 10:28

Meintest du sowas in der Art mit dem Gegner und dem Teleporter? (Anhang ><)
Wegen dem Gegner hätte ich für das Ausrufezeichen (sollte es eine Ani sein und kein Icon über dem Kopf) noch eine bessere Version, die halt wirklich über den Gegnernamen geht. Wenn dann aber mehrere Gegner auf der Map sind, würden die alle das Ausrufezeichen bekommen, bisher kann ich nur über einen Namen gehen.
Dann wärs doch besser, sich aus dem Gegnerevent selbst die Event-ID geben zu lassen (ohne den Namen), die in einer Variable zu speichern und dann mit dieser Variable die Show-Ani abspielen zu lassen?

Ruby Quellcode

1
$game_variables[3] = @event_id

Ich hab von StorMeye einen Scriptschnippsel bekommen, der Show_Animation als Scriptbefehl zulässt, darf den aber nicht einfach weitergeben ohne zu fragen- aber es ist superkurz geschrieben, das kriegst du sicher hin. :D
Dann kannst du schreiben:

Ruby Quellcode

1
2
3
4
id= $game_variables[3]
 
inp=$game_system.map_interpreter
inp.show_ani(id,98)


Ich hab auch versucht das Icon-Script zu verwenden, aber offenbar wird das nicht mehr aktiv, sobald ein Event mehr Seiten hat oder so. Jedenfalls ging es nicht XD
Aber mit dem HeadUpIcon müsste das klappen, da hat man noch ein paar mehr Möglichkeiten :) (Allerdings ist bei der Version halt das Fragezeichen die ganze Zeit da und ploppt nicht immer wieder hoch)

Zitat

Aber die Distanzabfrage ist auch nicht das Problem. Das kann ich auch in ein paar Zeilen Skript lösen, dafür gibt es ja den Onkel Pythagoras^^.

Haha, kuhl, dass du sowas einfach hinkriegst XD

Zitat

Ich habe mal über die Skripte drüber geguckt, da wird das aber irgendwie ganz anders gemacht, wie ich es vor hatte - wobei
ich ja nicht mal weiß, ob mein Plan mit Scene_Map / Game_Map aufgehen würde. Vorallem weiß ich nicht, wie gut man das Problem
in die vorhandenen Skripte copy-pasten kann.

Okay, bei dem über Scene_Map/Game_Map zu gehen, kann ich dir gar nicht helfen, ich hab nur meinen umständlichen Kram XD

Zitat

Aktuell per stupider MoveRoute. Pathfinding wäre natürlich richtig schnieke.

In das, was ich gepostet habe, wäre auch ein Pathfind-Befehl integrierbar XD

Zitat

Gerade stellen sich mir halt noch so Standardfragen: Ich möchte optimalerweise nur einmal alle Events durchgehen und mir diese merken, die
einen gewissen Namen haben z.b. "EnemyMap" und mit denen soll dann weitergearbeitet werden. Sonst würde ja bei jedem Refresh alle Events durchgegangen werden.
Kann mir vorstellen, dass das zu starken Lags führen kann je nach Mapgröße.

Gut, da bin ich raus XD
Also, wenn du weiter die H&S-Lösung verfolgen willst, bin ich dein Mann, aber sonst musst du doch auf Playm warten :P
»Josey« hat folgende Datei angehängt:
  • Test - Mitsch2.rar (198,43 kB - 1 mal heruntergeladen - zuletzt: 11. Januar 2018, 18:39)
  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star-half: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty: (Ein Stern- offiziell verliehen von Playm! XD)
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

Mitsch93

Drachentöter

  • »Mitsch93« ist der Autor dieses Themas

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Nachricht senden

7

Donnerstag, 11. Januar 2018, 18:47

Also für die Teleportevents scheint das eigentlich schon ganz gut zu sein.
Nur das Hide&Seek Skript ist noch nicht ganz so tauglich, da ich da auch einiges für die Gegner machen müsste.
Mein Wunschziel ist ja: Einfach nur Gegner z.B. benennen und Skript regelt den Rest. Das einzige was bleibt, ist "Eventfüllung"
vom Gegner selbst und das ist im Grunde nur copy-paste.

8

Donnerstag, 11. Januar 2018, 22:37

Zitat

1.) Gegner auf Map
Versteh ich nicht. Mal in Paint oder so mal einen Automaten auf, mit gelabelten Zuständen und was in dem Zustand gilt ('SelfSwitch B = ON, Animation showing' ...) und die Übergänge ('Held ist maximal 5 Schritte entfernt', 'Held greift an', 'Held entfernt sich aus einem 8-Schritt-Radius' ...)

Mitsch93

Drachentöter

  • »Mitsch93« ist der Autor dieses Themas

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Nachricht senden

9

Freitag, 12. Januar 2018, 16:49

Hier nochmal eine genauere Erklärung:

Switches
Ich habe insgesamt Switches für 20 Gegner eingebaut. Grund dafür war, dass ich dann später
nur noch diese Switche zurücksetzen muss, wenn eine Instanz verlassen wird.
Sprich: Aktuell ist eine max. Gegneranzahl von 20 pro Instanz möglich.
Zu jeden Gegner gehören die folgenden Switches:

  • GegnerXinRange - True, wenn Spieler die Mindestdistanz zum Gegner X unterschreitet
  • GegnerXAnimation - False, solange Gegner X am Leben ist. *
  • GegnerXBesiegt - True, sobald Gegner X besiegt wurde
  • StopAll - "Globaler" Switch, der dafür sorgen soll, dass sich kein Gegner mehr auf der Map bewegt. Dieser SWith wird unter anderem auf ON gesetzt,
    wenn ein Spieler mit Schatztruhen oder anderen Objekten interagiert. Nach Ende der Interaktion wird der Switch wieder auf OFF gestellt => d.h. bewegen sich
    dann alle Gegner wieder


* Zweck hiervor: Nachdem ein Gegner besiegt wurde, wird eine "GegnerBesiegt" Animation abgespielt. Da
sich aber zu dieser Zeit der Spieler natürlich noch in Range zum Gegner befindet, würde die ,,GegnerAggro"-
Animation immer noch angezeigt werden. Deshalb setze ich den SWitch GegnerXAnimation auf true bevor die
Animation "GegnerBesiegt" angezeigt wird. Sprich: Der Zweck des Switch ist as Stoppen der Aggro-Animation, sobald
der Gegner besiegt wurde.

Range-Finder
Ist ein Parallel Process Event.
Berechnet alle 10 Frames die Distanz zwischen Spieler und GegnerX auf der Karte.

Gibt es mehr als einen Gegner auf der Map, werden diese auf die selbe Art im gleichen Event
abgefragt.

Das Event triggert dann den zum Gegner dazugehörigen Switch "GegnerXRange" auf TRUE, wenn
der Spieler zum Gegner die Mindestdistanz unterschritten hat. Ansonsten wird dieser Switch auf FALSE
getriggert.

MobAnimation - "Aggro Animation"
Ist ein Parallel Process Event.
Überprüft alle 2 Frames (ist Länge der Animation), ob die Aggro-Animation angezeigt wird oder nicht.

Das Anzeigen geschieht nur dann, wenn sich der Switch "GegnerXinRange" TRUE ist und "GegnerXAnimation" auf FALSE
(d.h. "Animation soll noch angezeigt werden").

Gegner-Event

Seite 1:
Diese Seite besitzt keine Conditions. Der Gegner bewegt sich einfach Random auf der Map.

Seite 2:
Condition: GegnerXinRange = TRUE.
Der Spieler hat nun die Mindestdistanz unterschritten und der Gegner verfolgt ihn per "Approach".
Bei Berührung wird der Kampf ausgelöst.

Wird der Gegner besiegt, wird zuerst der Switch "GegnerXAnimation" auf true gestellt, damit die Aggro-Animation
gestoppt wird. Danach wird die "GegnerBesiegt" Animation abgespielt.
Zum Schluss wird noch der Switch "GegnerXBesiegt" auf TRUE gestellt.

Kann der Spieler flüchten, wird der Gegner sich nur eine Schritte vom Spieler entfernen.

Seite 3:
Condition: StopAll = TRUE
"Globaler" Switch, der bewirken soll, das sich nichts auf der Map bewegt.
Gegner bewegt sich nicht.

Seite 4:
Condition: GegnerXBesiegt = TRUE
Komplett leeres Event ohne Grafik, da der Gegner ja bis zum Instanzreset nicht mehr existiert.
Diese Seite muss sich natürlich NACH Seite 3 befinden, da sonst der Gegner bei StopAll = TRUE angezeigt werden würde,
obwohl er bereits besiegt wurde.


Bemerkung:
Der Graph mag ein bisschen umständlich gezeichnet sein, aber wollte nur deutlich machen, dass bei StopAll = FALSE
der Gegner wieder zu seinem "normalen Verhalten" zurückkehrt.


Wie man sieht, verwende ich aktuell keine SelfSwitches, da es technisch auf diese Weise nicht möglich ist.
Es wäre aber doch evtl. denkbar mit Skripttechnik das ganze so zu reduzieren, dass man nur noch die "GegnerXBesiegt"-Switches
benötigt, da die ja resettet werden müssen beim Verlassen einer Instanz.
Das Problem bei der aktuellen Eventlösung ist, dass ein fremdes Event nicht den SelfSwitch eines anderen Events triggern kann.

Meine Lösung würde in die folgende Richtung gehen:

Seite 1 - keine Condition
Seite 2 - Condition: SelfSWitchA == TRUE
Seite 3 (NEU) - Condition: SelfSwitch B == TRUE
Seite 4 - Condition: StopAll == TRUE
Seite 5 - Condition: GegnerXbesiegt == TRUE

Seite 3 bräuchte man nun vermutlich, um zu verhindern, dass die Aggro-Animation weiterhin angezeigt wird.
Ich hab es mir so gedacht: Wird der Gegner besiegt (Seite 2), so wird der Self Switch B getriggert. Dieser sagt dem Skript
"Hör auf die Animation über Gegner X anzuzeigen". Seite 3 könnte dann ein Parallel Process/Autorun Event sein, das nur die "GegnerBesiegt"-
Animation abspielt und danach den Switch "GegnerXBesiegt" auf ON stellt.

Meine größte Sorge ist aber die Performance. Mein Plan wäre es ja, den Gegner-Events Namen zu geben wie "EnemyMap" und das SKript
sucht sich gerade diese Events raus. Aber natürlich müssten dann einmal alle Events einer Map durchlaufen werden und ich weiß nicht, wie lange
soetwas dauert wenn man Anzahl der Events > 100 hat. Evlt. könnte man einmalig beim Betreten einer Map die Events durchgehen, sich diese
für die aktuelle Map merken und beim Betreten einer neuen Map wieder verwerfen.

Zusätzlich könnte man dem Skript auch nur die MapIDs angeben, auf denen Gegner überhaupt möglich sind. Somit könnte sich der Skript
das Event-Suchen in z.B. Städten direkt sparen. Und gerade solche Maps haben ja eine höhere Anzahl an Events.
»Mitsch93« hat folgende Bilder angehängt:
  • enemies.PNG
  • parallel_process.PNG

10

Samstag, 13. Januar 2018, 01:23

Zitat

Es wäre aber doch evtl. denkbar mit Skripttechnik das ganze so zu reduzieren, dass man nur noch die "GegnerXBesiegt"-Switches
benötigt, da die ja resettet werden müssen beim Verlassen einer Instanz.

Ist eine Instanz eine einzelne Map oder eine Menge von Maps?
Ich denke, man könnte auch diese Switches durch SelfSwitches ersetzen, sollange noch einer frei ist im Event.

Aber klingt doch machbar. Man baut sich einen OnMapEnemy-Manager, der mit allen Event-IDs initialisiert wird, die er verwalten soll. Dann wird Game_Map bei jedem Update diesen Manager auch updaten und dann spielt der Manager halt für alle Events die er managed den Automaten durch. Die Automatenzustände muss er nichtmal doppelt speichern, sondern verwendet einfach die SelfSwitches der Events, um zu ermitteln in welchem Zustand der jeweilige Automat gerade ist. So wie Du das bereits alles durchgeplant hat, klingt das doch gut implementierbar.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class OnMapEnemy_Manager
  def setup( event_ids )
  end
  def update
  end
  def check_alive( event_id )
  end
  def check_distance( character_A, character_B )
  end
  def change_state_to_wander( event_id )
  end
  def change_state_to_chase( event_id )
  end
end
 
class Game_Map
  # alias ...
  def initialize
    @ome_manager = OnMapEnemy_Manager.new
  end
  def setup( map_id )
    @ome_manager.setup( @map.events.values.select{|ev| ev.name.include? "BöserGegner" }.map{ |ev| ev.id } )
  end
  def update
    @ome_manager.update
  end
end

Mitsch93

Drachentöter

  • »Mitsch93« ist der Autor dieses Themas

Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

  • Nachricht senden

11

Samstag, 13. Januar 2018, 10:22

Danke Playm, das Konstrukt sieht schonmal vielversprechend aus.

Spoiler
Ist eine Instanz eine einzelne Map oder eine Menge von Maps?
zum Lesen den Text mit der Maus markieren

In den meisten Fällen wird es eine Menge an Maps sein und nur in Ausnahmen eine einzelne Map.
Deshalb würde ich den "GegnerXBesiegt" Switch behalten, da ja folgendes auftreten könnte:

Eine Instanz besteht aus MapID 1-3. Der Spieler besiegt alle Gegner in der Instanz und verlässt sich danach. Der Ausgang
der Instanz befindet sich zB auf MapID 1. Jetzt müsste der Skript ja - der aktuell auf MapID1 ausgeführt wird - auf die SelfSwitches der Events der
Map 2 und 3 auch noch zugreifen.

Und wenn ich das gerade so schreibe, fällt mir auf, dass er das ja in jedem Fall machen muss, alleine, um die SelfSwitches der Gegner
zurückzusetzen ^^.

Und noch eine Kleinigkeit: Wie könnte ich denn in dem Konstrukt am geschicktesten die Bedrohungs-Reichweite angeben?
Am besten, indem ich die Gegner so benenne ,,MapEnemy(Range)" oder? Da könnte ich ja aus dem Eventnamen die Range extrahieren
und in check_distance verwenden.

Bei der Range hab ich mir ja überlegt, dass ich das mit dem guten alten Pythagoras in der Eben machen kann:

Quellcode

1
distance = sqrt ( (x_player - x_enemy)^2 + (y_player_ - y_enemy)^2 )

Wäre damit einfach möglich oder? Müsste man da noch irgendwas an Rundungen anstellen? Da ja bei dem Ergebnis natürlich
auch Nicht-Ganzzahlen rauskommen können, aber die Distanz ja meistens mit Ganzzahlen verglichen wird, wie zB bei dem
"Distance Skript".

12

Samstag, 13. Januar 2018, 13:15

Zitat

Und wenn ich das gerade so schreibe, fällt mir auf, dass er das ja in jedem Fall machen muss, alleine, um die SelfSwitches der Gegner
zurückzusetzen ^^.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class OnMapEnemy_Manager
  Instances = {
    :all_instances => [12,17,13,15,20,21,22],
    :woods => [12,13,17],
    :ruins => [15],
    :ship => [20, 21, 22]
  }
  def reset_instance( identifier )
    instance = Instances[identifier]
    return if instance == nil
    instance.each do |map_id|
      load_event_ids_from_map( map_id ).each do |event_id|
        reset( map_id, event_id )
      end
    end
  end
end
Vielleicht irgendsowas in der Richtung? Mir ist gerade aufgefallen, dass der OnMapEnemy_Manager natürlich auch irgendwie die aktuelle MapID kennen muss für die SelfSwitches. Weiß nicht, ob man die ihm übergeben sollte beim Setup, oder er einfach $game_map.map_id abfragen soll.

Zitat

Und noch eine Kleinigkeit: Wie könnte ich denn in dem Konstrukt am geschicktesten die Bedrohungs-Reichweite angeben?
Am besten, indem ich die Gegner so benenne ,,MapEnemy(Range)" oder? Da könnte ich ja aus dem Eventnamen die Range extrahieren
und in check_distance verwenden.
Wenn Du sonst keine Attribute brauchst, wäre das eine Möglichkeit. Außer den Wert im Eventnamen oder einem Kommentar auf einer der Eventseiten unterzubringen wüsste ich auch keine praktikable Alternative.

Zitat

Wäre damit einfach möglich oder? Müsste man da noch irgendwas an Rundungen anstellen?
Naja, Du würdest wahrscheinlich <= abfragen und nicht ==. Ansonsten musst Du dir überlegen, ob Du auf einer Map wo die Figuren sich eh nicht diagonal bewegen es nicht reicht die Cityblockdistance zu verwenden, die ohne Quadratwurzel auskommt. Alternativ statt mit der Distance mit Distance² zu vergleichen - weil wenn Du 20mal pro Frame es vermeiden kannst die Wurzel zu ziehen, hast Du 20 aufwändige Rechenschritte wegoptimiert.

Ähnliche Themen

Social Bookmarks