Probleme beim Kampfscript

Das Board für Schwierigkeiten beim Adventure-Machen und zum Melden von Bugs
Post Reply
parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Probleme beim Kampfscript

Post: # 73869Post parkiii
30 Jun 2009, 18:27

Erst einmal möchte ich alle herzlich begrüßen, da ich ja neu in diesem Forum bin! :D

Ich habe schon einige PaC Adventures mit PaC-DK erstellt, doch nun habe ich mich an ein Rollenspiel mit rundenbasiertem Kampfsystem gewagt!

Anfangs hatte ich etliche Schwierigkeiten und Fragen, doch mit Hilfe dieses Forums konnte ich bis jetzt alle Probleme bewältigen. Mittlerweile hatte ich das Spiel schon bis zum ersten Gegner, jedoch nur mit normalen Attacken. Nun wollte ich magische Attacken in das Spiel einbringen und setzte für den Gegner eine Zufallsvariable ein, die bestimmen sollte, ob er nun eine magische oder eine physische Attacke einsetzen sollte.

Mein Script für den gegnerischen Angriff sieht so aus:

Code: Select all

if_num (HP Enemy ; >0)
{
 randomnum (Enemy Action ; 2)
 {
    if_num (Enemy Action ; 1)
  {
  textout (200 ; Enemy's Turn! ; 260 ; 130 ; 3 ; 200 ; 0 ; 0)
  wait (1)
  texthide (200)
  randomnum (ZDEF ; [DEF])
  randomnum (Enemy Angriffswert ; [EATK]-[ZDEF])
   {
    if_num (Enemy Angriffswert ; <1)
    setnum (Enemy Angriffswert ; 0)
   }
  textout (201 ; Normal Attack! ; 260 ; 200 ; 2 ; 200 ; 0 ; 0)
  wait (1)
  textout (202 ; [Enemy Angriffswert] ; 284 ; 240 ; 2 ; 255 ; 0 ; 0)
  wait (2)
  texthide (201)
  texthide (202)
  setnum (HP ; [HP]-[Enemy Angriffswert])
  }
    if_num (Enemy Action ; 2)
  {
  textout (200 ; Enemy's Turn! ; 260 ; 130 ; 3 ; 200 ; 0 ; 0)
  wait (1)
  texthide (200)
  randomnum (ZMAGD ; [MAGD])
  randomnum (Enemy Magiewert ; [EMAG]-[ZMAGD])
   {
    if_num (Enemy Magiewert ; <1)
    setnum (Enemy Magiewert ; 0)
   }
  textout (203 ; Magic Attack! ; 260 ; 200 ; 2 ; 0 ; 0 ; 200)
  wait (1)
  textout (204 ; [Enemy Magiewert] ; 284 ; 240 ; 2 ; 255 ; 0 ; 0)
  wait (2)
  texthide (203)
  texthide (204)
  setnum (HP ; [HP]-[Enemy Magiewert])
  setnum (MP Enemy ; -2)
  }
 }
}


ZDEF ist der Zufallsverteidisungswert, der aus dem Pool des normalen Verteidigungswertes DEF bestimmt wird.

EATK ist die Angriffskraft des Gegners.

ZMAGD ist der Zufallsverteidigungswert für magische Attacken, der aus dem Pool des normalen Verteidigungswertes für magische Attacken MAGD bestimmt wird.

Code: Select all

 {
    if_num (Enemy Angriffswert ; <1)
    setnum (Enemy Angriffswert ; 0)
   }
Dieser Befehl sollte eine negative Schadensberechnung und die daraus folgende Erhöhung der gegnerischen Lebenspunkte vermeiden.


Meine Frage: Wäre dieser Script ausreichend um die Attacken aller Gegner zu bestimmen und auszuwählen?

Ich hätte mir das Spielkonzept folgendermaßen vorgestellt:
Man kann sich nicht bewegen, ebensowenig die Gegner.
Man hat lediglich ein Kampfmenü, in dem man zwischen verschiedenen Attacken und Items auswählen kann.
Besiegt man einen Gegner, kommt man in das nächste Gebiet.
Bevor man ein Gebiet betritt, werden alle Werte des Gegners neu festgelegt, je nachdem welcher Gegner im nächsten Raum wartet.

Eigentlich müsste der Script ausreichend sein, oder?




Bitte um baldige Antwort,
mit freundlichen Grüßen,
parkiii


EDIT: Problem gelöst.
Last edited by parkiii on 01 Jul 2009, 18:28, edited 2 times in total.

Lachi
An Adventure Creator
Posts: 316
Joined: 07 Aug 2008, 22:32

Post: # 73870Post Lachi
30 Jun 2009, 18:33

Erstmal ein freundliches Hallo und willkommen im Forum.

Zugegeben, bei deinem Problem bin ich jetzt nicht der richtige, aber Schiman kann dir wahrscheinlich helfen, da er selbst schon ein sehr komplexes Kampfsystem gescriptet hat.
Ich habe schon einige PaC Adventures mit PaC-DK erstellt
Warum sind die noch nicht online?????
Wir sind doch alle sehr an PAC-Kreationen interessiert!!!!!!
[img]http://img269.imageshack.us/img269/4060/enjoylachibalken.png[/img]

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Post: # 73872Post parkiii
30 Jun 2009, 18:36

Quote:
Ich habe schon einige PaC Adventures mit PaC-DK erstellt
Warum sind die noch nicht online?????
Wir sind doch alle sehr an PAC-Kreationen interessiert!!!!!!
Zum einen weil ich erst heute von dieser Seite erfahren habe, zum anderen weil ich diese Adventures vor 2 Jahren erstellt habe und die Grafiken auf Grund meiner damals fehlenden Designkenntnisse ein dementsprechend niedriges Niveau besitzen... :lol:

Lachi
An Adventure Creator
Posts: 316
Joined: 07 Aug 2008, 22:32

Post: # 73873Post Lachi
30 Jun 2009, 19:23

Sie können ja trotzdem spannend und unterhaltsam sein!

..naja, vielleicht überlegst du es dir ja noch :wink:
[img]http://img269.imageshack.us/img269/4060/enjoylachibalken.png[/img]

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 73874Post Schiman
30 Jun 2009, 19:46

Hallo und herzlich willkommen im Forum^^.

Kommen wir gleich zur Sache ;). Erstmal: Warum machst du einfach so zwischendrin Klammern? Willst du damit deinen Code in sinnvolle Blöcke unterteilen? Wenn ja, dann empfehle ich dir eher Kommentare.
Ansonsten müssen Klammern ja nur hinter if's und on`s und so, du machst das ja sonst auch richtig. Aber das ist ja Geschmackssache ;).

Ansonsten sehe ich nicht warum dein Skript nicht funktionieren sollte. Natürlich ist es reichlich langweilig so ein Text-Kampfsystem^^, aber von der Technik her... sollte gehen. Vielleicht testest du es einfach und dann siehst du doch obs geht.

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Post: # 73875Post parkiii
30 Jun 2009, 19:50

Danke für die rasche Antwort!

Ja, die Klammern sind zwecks des Überblicks und der Sicherheit ;)

Habe gerade alle Probleme gelöst, eines jedoch bleibt:
Der erste (und bis jetzt einzige) Gegner setzt komischerweise nur normale Attacken ein.
Wählt die Zuvallsvariable den Wert 2 und somit eine magische Attacke, macht der Gegner einfach nichts und ich bin wieder am Zug.
Nicht einmal der Text 'Enemy's Turn' erscheint.

Aber da du bereits die Richtigkeit meines Scriptes feststelltest, wüsste ich nicht, woran das sonst liegen könnte, dass der Computer seine Aktion mittendrin unterbricht...


Postskriptum: Ich wollte einfach mal ein Spiel mit Pokemon-ähnlichem Kampfsystem kreieren. Kunstvolle Erweiterungen wie Level-Ups durch Erfahrungspunkte, Läden mit neuartigen Rüstungen und Waffen und weiteres folgen noch :D

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 73876Post Schiman
30 Jun 2009, 20:09

parkiii wrote:Wählt die Zuvallsvariable den Wert 2 und somit eine magische Attacke, macht der Gegner einfach nichts und ich bin wieder am Zug.
Nicht einmal der Text 'Enemy's Turn' erscheint.
Könntest du noch sagen, was das für eine Funktion ist, die du da hast? Ist das zufällig eine Infinit-Funktion oder eine Funktion, die aus einer Cutscene oder einer anderen Funktion heraus aufgerufen wird?
Wenn das der Fall ist, dann probier mal folgendes:
Nimm den randomnum-Befehl aus dieser Funktion raus und machs VOR den Aufruf dieser Funktion in die vorhergehende Funktion rein. Also:

randomnum (Enemy Action ; 2)
function(wieauchimmer)

Wenn das dann funktioniert, dann ist der komische Bug, den ich schon ständig vermute, bewiesen ;).

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Post: # 73877Post parkiii
30 Jun 2009, 20:17

if_num (Enemy Action ; 2)
Steht doch alles in meinem oben erwähnten Code.
Der untere Teil wäre dann alles, was der Gegner machen sollte, wenn die Zufallsvariable 2 gewählt wird.

Die Auswahl erfolgt einfach über

Code: Select all

randomnum (Enemy Action ; 2)
Es wird also 1 oder 2 gewählt.

Code: Select all

{
if_num (Enemy Action ; 1)
}
Dann wird die normale Attacke gemacht

Code: Select all

{
if_num (Enemy Action ; 2)
}
Dann sollte die magische Attacke gewählt werden. Stattdessen macht der Gegner aber gar nichts.

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 73878Post Schiman
30 Jun 2009, 20:40

Nein, das meine ich nicht.
Diese Funktion die du gepostet hast, die wird doch irgendwo aufgerufen, oder?
Probier mal VOR diesen Aufruf das randomnum zu setzen und in der Funktion, die du gepostet hast, das randomnum rauszulöschen.

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Post: # 73879Post parkiii
30 Jun 2009, 20:41

Und den randomnum Befehl in die vorige Aktion einbauen bringt auch nichts...

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 73880Post Schiman
30 Jun 2009, 20:43

hm, ich weiß zwar nicht, ob du genau verstanden hast, was ich meine, weil du "Aktion" statt "Funktion" sagst, aber kann sein, dass ich einfach zu penibel bin^^. Wenn das nicht hilft, dann weiß ich auch nicht.

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Post: # 73881Post parkiii
30 Jun 2009, 21:08

Anscheinend kann man einfach nicht 2 mal hintereinander einen if Befehl schreiben.
Denn der erste Befehl wird ausgeführt, trifft die Zufallszahl aber nicht auf den if Befehl zu, der danach steht, liest der Computer den Script gar nicht weiter und 'übersieht' den zweiten if Befehl...

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 73882Post Schiman
30 Jun 2009, 21:10

Na, das kann eigentlich ja gar nicht sein. Schließlich benutzt hier jeder von uns x-mal eine Menge If-Befehle hintereinander. Vielleicht ist irgendwo ein Fehler drin, den wir hier einfach nicht sehen.
Wenn du Lust hast, kannst du mal deine .adv Datei zur Verfügung stellen und ich schau mal rein.

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Post: # 73883Post parkiii
30 Jun 2009, 21:15

Okay, und wie stelle ich dir eine solche zur Verfügung?

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 73884Post Schiman
30 Jun 2009, 21:27

Indem du z.B. die .adv an sh_thorbruecke(at)web.de sendest ;). (Nur die .adv, da kann ich deine Skripts alle rausholen)

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Post: # 73887Post parkiii
30 Jun 2009, 21:41

achso, habs grad geschickt. viel vergnügen damit.

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Post: # 73898Post parkiii
01 Jul 2009, 18:28

Hab das Problem letztendlich selbst gelöst.
Woran es lag weiß ich nicht, ich habe den kompletten Script neu geschrieben und jetzt funktioniert es.

Der Gegner setzt schön abwechselnd magische und normale Attacken ein und wenn seine MP auf 0 sind, lässt er die magischen bleiben.

Trotzdem vielen Dank an Schiman!

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 73900Post Schiman
02 Jul 2009, 09:57

parkiii wrote:Hab das Problem letztendlich selbst gelöst.
Woran es lag weiß ich nicht, ich habe den kompletten Script neu geschrieben und jetzt funktioniert es.

Der Gegner setzt schön abwechselnd magische und normale Attacken ein und wenn seine MP auf 0 sind, lässt er die magischen bleiben.

Trotzdem vielen Dank an Schiman!
Ähm kein Problem^^, hab ja nichts gemacht. Verstehe aber nicht wo der Unterschied jetzt liegt. Ist das Skript immer noch in einer Textscene drin, oder hast du es jetzt ausgelagert?

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Post: # 73902Post parkiii
02 Jul 2009, 12:13

Nein, da hatte ich mich vorher schon vertan. Der Script war nie in einer Textscene. Der Angriff des eigenen Charakters ist in einer Textscene (wo man eben aussucht, welche Aktion man ausführen will), aber der Script des Gegners war schon immer in einer eigenen Cutscene.

Code: Select all

if_num (HP Enemy ; >0)
{
   enablemouse (false)
    randomnum (Enemy Action ; 2)
    
     if_num (MP Enemy ; <1)
     setnum (Enemy Action ; 1)
     
    if_num (Enemy Action ; 1)
  {
  textout (200 ; Enemy's Turn! ; 260 ; 130 ; 3 ; 200 ; 0 ; 0)
  wait (1)
  texthide (200)
  randomnum (ZDEF ; [DEF])
  randomnum (Enemy Angriffswert ; [EATK]-[ZDEF])
    if_num (Enemy Angriffswert ; <1)
    setnum (Enemy Angriffswert ; 0)
  textout (201 ; Normal Attack! ; 260 ; 200 ; 2 ; 200 ; 0 ; 0)
  wait (1)
  textout (202 ; [Enemy Angriffswert] ; 284 ; 240 ; 2 ; 255 ; 0 ; 0)
  wait (2)
  texthide (201)
  texthide (202)
  setnum (HP ; [HP]-[Enemy Angriffswert])
  enablemouse (true)
  endscene ()
  }
  if_num (Enemy Action ; 2)
  {
   textout (200 ; Enemy's Turn! ; 260 ; 130 ; 3 ; 200 ; 0 ; 0)
  wait (1)
  texthide (200)
  randomnum (ZMAGD ; [MAGD])
  randomnum (Enemy Magiewert ; [EMAG]-[ZMAGD])
    if_num (Enemy Magiewert ; <1)
    setnum (Enemy Magiewert ; 0)
  textout (203 ; Magic Attack! ; 260 ; 200 ; 2 ; 0 ; 0 ; 200)
  wait (1)
  textout (204 ; [Enemy Magiewert] ; 284 ; 240 ; 2 ; 255 ; 0 ; 0)
  wait (2)
  texthide (203)
  texthide (204)
  setnum (HP ; [HP]-[Enemy Magiewert])
  setnum (MP Enemy ; -1)
  enablemouse (true)
  endscene ()
  }
}
Das ist der Angriff des Gegners, der automatisch durch cutscene (Enemy ATK) nach meinem Angriff gestartet wird.

Post Reply