PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit EBook Schadensberechnung



Arrad
26.04.2010, 11:37
Hey Leute,
hab vor kurzem wieder mit dem makern angefangen und wage mich jetzt zum ersten Mal in meinem Leben an mein eigenes AKS. Obwohl ich mich mit komplexerem scripten so gut wie garnicht auskenne, mach ich ganz gute Fortschritte und hab das AKS aus dem EBook so weit nachgebaut.

Jetzt habe ich aber nen Hänger, denn ich versuche das Ganze nicht nur nachzubauen, sondern auch den Sinn dahinter zu verstehen.

Zweierlei Probleme:

1) Kann mir jemand das Schadensberechnungsscript aus dem EBook AKS erläutern? Habs mir x-Mal durchgelesen, aber ich verstehe einfach nicht wie da der Schaden errechnet wird (das Ausweichen versteh ich) und hier liegt auch Problem NR.2

2) Aus irgendeinem Grund funktioniert das Abziehen der Lebensenergie nicht so wirklich. Der Gegner greift zwar an und man hört auch das Geräusch für einen Treffer bzw. für das Ausweichen des Helden, jedoch ändert sich die HP Anzeige des Helden nicht. Meine Vermutung ist, dass es an der Schadensberechnung liegt. Deswegen bitte ich euch erstmal euch mal folgenden Code anzuschauen, nach Fehlern zu gucken und anschließend eventuell zu erklären wie das prinzipiell abläuft. Wäre euch wirklich suer dankbar für schnelle Hilfe :)

EDIT: Hab Probleme den Code einzufügen. Kann mir jemand fix erklären wie man den aus dem Maker kopiert?

Cherry
26.04.2010, 14:08
Verwende für so etwas bitte den EasyEventExporter (http://www.multimediaxis.de/showthread.php?t=112743). Spart Arbeit und zeigt außerdem Eventeinstellungen an, die normal nicht sichtbar sind (z.B. Picturetransparenzen, etc.)

1. das ganze Event kopieren (Rechtsklick->kopieren)
2. EasyEventExporter öffnen
3. Bei der Frage auf "Ja" klicken und die Datei "vbcode_lightbg.eft" im Ordner "ftemplates" auswählen (dadurch wird der Code im Forum gehighlighted)
4. Das Ergebnis dann hier reinkopieren

mfG Cherry

Arrad
26.04.2010, 15:50
Hey Cherry,
danke erstmal für die Hilfe.

Hier also das Script zur Schadensberechnung:



- SCRIPT -
<> Change Variable: [25 Ergebnis] = 0
<> Change Variable: [26 Abzug] = 0
<> Change Variable: [27 Random] = Random [0-100]
<> Fork Condition: If Variable [27 Random] <= V[28 Attacker AGI] then ...
. <> Loop
. . <> Fork Condition: If Variable [29 Attacker ATK] == 0 then ...
. . . <> Break Loop
. . . <>
. . : End of fork
. . <> Change Variable: [25 Ergebnis] += Random [0-1]
. . <> Change Variable: [29 Attacker ATK] -= 1
. . <>
. : End of loop
. <> Change Variable: [27 Random] = Random [0-100]
. <> Fork Condition: If Variable [27 Random] <= V[30 Enemy AGI] then ...
. . <> Loop
. . . <> Fork Condition: If Variable [31 Enemy DEF] == 0 then ...
. . . . <> Break Loop
. . . . <>
. . . : End of fork
. . . <> Change Variable: [26 Abzug] += Random [0-1]
. . . <> Change Variable: [31 Enemy DEF] -= 1
. . . <>
. . : End of loop
. . <>
. : End of fork
. <>
: End of fork
<> Change Variable: [25 Ergebnis] -= V[26 Abzug]




Erklärung: Schadensberechnung ist ein Common Event, welches aufgerufen wird, sobold der Gegner in Kontakt mit dem Spieler gerät und die Attributwerte des Angreifers und Verteidigers eingesetzt wurden.

Wie gesagt benötige ich zunächst bitte jemanden der mir erklärt was genau in diesem Script passiert, da ich das Berechnungsprinzip für den Schaden hier nicht genau verstehe und mir eventuell einen Fehler aufzeigt, der dafür sorgt, dass das Ganze nicht funzt.

Arrad
26.04.2010, 21:03
Sorry für den Doppelpost aber konnte die Antwort einkreisen.
Fehler liegt anscheinend doch nicht in der Schadensberechnung sondern in dem Common Event für HP Darstellung. Schaden wird dem Held also angerechnet, jedoch nicht passend dargestellt. Die Anzeige bleibt also praktisch auf dem Anfangswert von 40 HP. Am Event, dass die HP Anzeige nach einem Treffer aktualisiert kanns auch nicht liegen. Das funktioniert einwandfrei. Bevor ich hier groß im Script rumkrame, gibt es da irgendwelche typischen Anfängerfehler die man begeht, damit die HP Anzeige nicht funktioniert?

goldenroy
26.04.2010, 21:08
gibt es da irgendwelche typischen Anfängerfehler die man begeht, damit die HP Anzeige nicht funktioniert?

Nunja, mir ist es früher oft passiert, das ich bei Variable Operations statt "Set" irgentetwas anderes ausgewählt habe. Das solltest du mal überprüfen^^

Corti
26.04.2010, 21:47
Was kann daran so schwer sein?

a) wird die Schadsenszahl korrekt ausgerechnet?
b) wird die Schadenszahl korrekt von den HP subtrahiert?
c) wird die HP Anzeige aktualisiert

die Variableninhalte kann man über die Debugansicht im Maker schön sehn, starte das Spiel im Testmodus ausm Maker heraus und drück mal F9 falls du das noch nicht kennst.

Ansonsten Debugnachrichten:

Message-box und dann \V[0001] reintippen um z.B. Variable 0001 anzuzeigen.

Wenn was nicht klappt, nachverfolgen wie weit etwas klappt. Überlegen, was in welcher Reihenfolge passieren muss, und kontrollieren, ob es passiert.

XGazudin
26.04.2010, 22:05
Wie gesagt benötige ich zunächst bitte jemanden der mir erklärt was genau in diesem Script passiert, da ich das Berechnungsprinzip für den Schaden hier nicht genau verstehe
Ich gehe als erstes mal auf die ATK des Angreifenden ein.
Var 29 ist ja der Angriffswert des Angreifenden, bestimmt also mit die Höhe des Schadens.
Die Art und Weise wie das passiert kann man in der Schleife sehen:
Es wird abgefragt ob Var 29 0 ist, wenn nicht wird auf Var 25 entweder 0 oder 1 drauf addiert, und von Var 29 eins abgezogen, dann wird wieder abgefragt: ist Var 29 = 0?
Das ganze läuft also so oft durch, wie der Wert von Var 29 Hoch ist.
Wenn Var 29 also den Wert 30 hat, läuft die Schleife 30x, da ja jedesmal 1 von Var 29 angezogen wir und danach wieder abgefragt wird ob Var 29 0 ist, wenn ja wird die Schleife beendet.
Konkret heißt das nun, dass wenn Var29 einen Wert von 30 hätte, Var 25 am Ende der Schleife einen Wert ZWISCHEN 0 (sehr unwahrscheinlich) und 30(genauso unwahrscheinlich) hätte.
Am wahrscheinlichsten wäre aber, dass Var25 am Ende ein Ergebnis um 15 rum hat, weil ja bei jedem der 30 Schleifendurchläufe eine 50%tige Chance besteht, dass 1 auf Var25 addiert wird.
Das sorgt dafür, dass nicht jedesmal der gleiche Schaden ausgeteilt wird, sondern das Ergebnis immer um ein paar Schadenspunkte variiert.
Du hättest auch genauso gut angeben können dass nicht ein Wert zwischen 0 und 1, sondern zum Beispiel genau 1 auf das Ergebnis addiert wird bei jedem durchlauf, dann hättest du keine Variation mehr.
Ein Random-Wert von 1-2 hätte dagegen zur Folge dass das Ergebnis bei meinem Beispiel (Var29 = 30) irgendwo im Bereich von 30 bis 60 landen würde.
Dies ist jedenfalls der Teil, der im event den Schadenswert ohne Abzug der Verteidigung des Kontrahenten berechnet.

Und genau das gleiche passiert eben etwas weiter unten (unter der nächsten Abfrage über den Random und den Wert der Agi-Variable) nochmal, aber eben für die DEF des Kontrahenten.
Am Ende hat amn also einen Berechneten ATK-Wert, und einen DEF-Wert....nun noch die DEF von der ATK abziehen und der Schaden ist berechnet.
Ich habe mich nie mit dem E-Book AKS befasst deswegen weiß ich nicht ganz genau wie diese Abfragen über die Agi-Variablen in den Kontext passen, aber das sind wohl höhstwahrscheinlich Referenzen auf die Fähigkeit von Held/Gegner überhaupt zu treffen, bzw zu reagieren (DEF).
Es muss erstmal getroffen werdenn bevor überhaupt die Notwendigkeit besteht, Schaden zu berechnen (ATK), auf der anderen Seite muss der Gegner reagieren um einen Teil des Schadens abzuwenden (DEF).
Man könnte hier also die zweite AGI-Abfrage auch als eine Art kritische Trefferrate betrachten, da ja die Möglichkeit besteht, dass der DEF Wert des Gegners komplett ignoriert wird (bzw auf 0 gelassen) was ja den Schaden unter umstönden enorm erhöhen kann.


und mir eventuell einen Fehler aufzeigt, der dafür sorgt, dass das Ganze nicht funzt
Wie du schon sagtest der Fehler scheint wohl in der Anzeige zu liegen, kann in dem Script so weit keinen Fehler sehen.

melior
27.04.2010, 07:41
Mach doch einfach
Var[29:ATK]*Rnd[95-105]
Var[29:ATK]/100

Kannst die Werte bei Random natürlich auch variieren, also zum Beispiel 80-120 oder so. Da brauchts nicht wirklich eine Schleife, hat aber den selben Effekt. So ist der Angriffswert auch nicht immer gleich und das Ganze ist mit 2 Codezeilen erledigt.

Arrad
27.04.2010, 13:00
Hi erstmal und danke an alle die sich die Mühe gemacht haben hier zu antworten. Super Community :)

@XGazudin

Wow. Superlange Erklärung und hat für mich einiges klarer gemacht. Dank dir schau ich da jetzt durch ;)

@ Corti

Habs jetzt überprüft. Die Schadenzahl wird korrekt ermittelt und auch korrekt von den HP abgezogen. Der Fehler muss also irgendwo in der HP Darstellung liegen. Ich mach mich erstmal selbstständig auf die Suche und schau nochmal vorbei wenn ich nicht mehr weiter weiß :)

Nochmal Danke an Alle

Arnold
27.04.2010, 22:04
Zeig mal den Code von der HP-Darstellung, ansonsten: rufst du bei dem Event bei dem man Schaden bekommt das Common Event HP-Darstellung auf?

Arrad
28.04.2010, 13:37
Hey,
also hab gestern den ganzen Tag an der Fehlersuche gesessen und das Problem nicht gefunden und mich dann einfach dazu entschieden ein neues, eigenes Script zu schreiben und siehe da, es funktioniert einwandfrei und sieht besser aus als vorher.

Danke nochmal für die Hilfe http://www.multimediaxis.de/images/smilies/old/sm_12.gif