PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : technische frage für mathe-fans...



IndependentArt
29.12.2011, 14:12
ahoi

und zwar, bin ich grade dabei ein menü aufzubauen und zwar den teil, in dem man seine ausrüstung wechseln kann.
mir is jetz das problem gekommen, dass wenn ich einen statuswert auf sagen wir mal 255 begrenzen möchte, dass ich dann, wenn die waffe wieder gewechselt wird, nicht einfach den waffenwert abziehen kann, weil der ja dann zu viel wegnimmt.

BSP: angr 200 + waffe 100 = 300 (if angr größer als 255 set angr 255) ...wenn ich jetz also den waffenwert(100, wird in vari gespeichert), wieder abziehe, dann komme ich auf 155 angr, statt der 200, die es eig. sein müssten.
ich hab das jetz so gelöst, dass ich das, was die waffe und der grundangriffswert zusammen ergeben alternativ speichere und -255 rechne, in dem fall sind das dann 45, diese ziehe ich wiederrum vom waffenwert ab, 100 - 45 = 45 und das ziehe ich vom gesamt wert ab, 300 - 45 = 255, der rest des waffenwertes bleibt gespeichert und wenn ich diesen jetzt abziehe, komme ich wieder auf den ausgangsangriff 255 - 55 = 200

was mir jetz nochmal zu denken gegeben hat, ist dass waffe, rüstung und zubeghör die werte durcheinander beeinflussen können, ich hab das mal auf nem schmierblatt für 2 veränderungen ausprobiert, aber eig müsste es funktionieren:

11779



meine frage ist nur, ob da jemand lücken/verbesserungsmöglichkeiten sieht, vielleicht gibt es ja mathe-begeisterte, die sich da nochmal durchdenken wollen, wäre sehr dankbar dafür ^^

BDraw
29.12.2011, 15:10
Ohne es mir durchgerechnet zu haben:
Nimm einfach zwei Variablen. Die eine mit dem tatsächlichen Wert (bspw. 400), die andere mit dem, der angezeigt wird (255).


<>V[0002:begrenzter Wert] set V[0001:tatsächlicher Wert]
<>if V[0002] > 255
<>V[0002:begrenzter Wert] set 255
:END CASE
Wenn du jetzt bspw. ein Schwert mit 150 Angriff ablegst, rechnest du den tatsächlichen Wert -150 (wären hier dann ja 250), setzt den begrenzten Wert neu und gut ist.
Der Maker hat standardmäßig 5000 Variablen, die würde ich ausnutzen anstatt jetzt x Zeilen Code da reinzufriemeln.

Dem Spieler wird eben nur der begrenzte Wert angezeigt, und wenn du irgendwelchen Spökes hast á la "Dieser Machttrank steigert die Angriffskraft um 30%" rechnest du auch mit dem begrenzten Wert.

Ob du da jetzt noch Zusatzschwerter, Kraftarmreife oder Vitaminsirup dazuaddierst ist ja egal. Letztlich begrenzt der begrenzte Wert das Ganze wieder, ohne, dass du beim Zurückrechnen Probleme bekommst, da du dafür ja den tatsächlichen Wert nimmst.
Sind nur zwei Variablen und weitaus weniger Code. (:

IndependentArt
29.12.2011, 20:59
macht sinn und ist weniger fehleranfällig.

danke x)

Corti
30.12.2011, 16:49
Ich halte es für am wenigsten fehleranfällig den aktuellen Wert zu berechnen indem man die Werte der ausgerüsteten Gegenstände aufaddiert anstatt bei jedem Wechsel -alt+neu zu machen.

DNKpp
31.12.2011, 03:19
oder ein common event dafür verschwenden, ala ~GetCurStrength.
Darin eine temporäre variable auf den Wert der Strength vari schalten, und bei bedarf limitieren. Bin grade nicht mehr so maker confirm, sollte aber in etwa so gehen.



<>TempVari[005] = StrengthVari[105];
<>if (TempVari[005] > xxx)
<>TempVari[005] = xxx;

Dann im Code einfach die berechnungs vari auf den wert von TempVari setzen, und gut ist. So hast du wenigstens nur eine Stelle zu ändern, falls du das möchtest, und keine 2 Variablen, die dich dauerhaft blocken, sondern nur eine.

mfg

EDIT:
falls du jetzt nicht weißt, welchen vorteil das mit sich bringt:

ich weiß nciht, wie du scriptest, letztendlich solltest du aber vermeiden, mit einer variable zu rechnen, die überall verändert wird. Das ist für die fehlersuche ziemlich wichtig, das du weißt, wo du welche variable änderst. Deswegen würde ich am anfang eines großen code abschnitts immer mit temp variablen arbeiten, die die werte der richtigen variabeln enthalten, und diese über diese Getter common events bestücken. So hast du 1. nur einen code, den du im notfall überarbeiten musst (weil bei events die auf jeder karte vorkommen, die limitierung seperat zu ändern ist ehrlich gesagt ziemlich scheiße...) und 2. eine gewisse sicherheit dabei, das du dir deine wirkliche Variabel mit dem richtigen wert nicht verhaust. Ich kenn das nur zu gut, bei viel code ist die Reihenfolge der Variable schnell mal verändert, dann ist Vari[1] = Vari[2] auch gerne mal Vari[2] = Vari[1], und das ist uncool. Ist zumindest meine methode, und wirklich viele zusätzliche varis wasted man damit auch nicht, zumal es notfalls immer noch solche patches ~ala GibMir15kVaris gibt. zumal kannst du solche temp varis auch immer wieder verwenden (ist also nicht auf ein script limitiert, außer es looped ohne neu gesetzt zu werden).
Hoffe es war halbwegs verständlich was ich sagen möchte :P

mfg