-
Npc_ChangeAttribute Grenzen?
Hallo zusammen,
Ich hab mal wieder eine Frage:
ich benutze folgenden Code für eine prozentuale Heilung:
Code:
Npc_ChangeAttribute(self,ATR_MANA,(self.attribute[ATR_MANA_MAX] * (15/100)));
Ich möchte, dass ein Feuerkraut 15% Mana wiederherstellt.
Im Spiel wird aber überhaupt nichts wiederhergestellt, wenn ich das Feuerkraut zu mir nehme.
Andere Werte, wie z.B. 50%, 25%, 10% oder auch nur 5% klappen; eben alles, wo ich direkt durch einen Integer teilen kann:
Code:
Npc_ChangeAttribute(self,ATR_MANA,(self.attribute[ATR_MANA_MAX] / 2));
Kann ich irgendwie anders eine Wiederherstellung von 15% oder auch 35% erreichen?
* 0.15; * 0,15; / (20/3); keine Darstellung davon ist voll und ganz zufriedenstellend, wobei letztere wenigstens etwas wiederherstellt, aber nicht genau 15%, sondern etwas mehr... Und die ersten beiden bringen ')' expected (was nicht stimmte) und Syntax Error...
Irgendwie habe ich gerade ein Blackout, was darüber nachdenken angeht und komme nicht weiter... Vllt sieht ja jemand anders hier sofort den Fehler oder eine Lösung.
Vielen Dank schonmal
Gladi
-
Du hast schon gut erkannt, dass das Problem die Rechnung mit Integern ist. Dein oberer Versuch ist prinzipiell gut, allerdings musst du die Klammerung anpassen.
Bei (15 / 100) kommt erstmal 0 raus und alles multipliziert mit 0 führt dazu, dass keine Regeneration erfolgt. Also musst du Mithilfe von Klammerung dafür sorgen, dass zuerst mit 15 multipliziert wird und erst zuletzt das gesamte Ergebnis durch 100 geteilt wird.
-
Oder mit den Floats aus Ikarus arbeiten. Ist finde ich genauso verständlich und macht den Job fast genauer
-
Abenteurer
@gladi
Code Beispiel, um dein Problem zu lösen:
Code:
var int Beispielvariable; Beispielvariable = 1 + ((self.attribute[ATR_MANA_MAX] * 15) / 100);
Npc_ChangeAttribute (self, ATR_MANA, Beispielvariable);
1 Manapunkt wird definitiv hergestellt und zusätzlich 15% vom vorhandenen Mana. Für den Wert 1 empfehle ich den gleichen Wert zu nehmen, welcher prozentual wiederherstellt, zB. 20,
Code:
var int Beispielvariable; Beispielvariable = 20 + ((self.attribute[ATR_MANA_MAX] * 20) / 100);
Npc_ChangeAttribute (self, ATR_MANA, Beispielvariable);
-
22.01.2018 21:23
#5
Hab mit dem hier mal gearbeitet, funktioniert ohne Probleme:
Npc_ChangeAttribute (self, ATR_HITPOINTS, self.attribute[ATR_HITPOINTS_MAX] / 25 -2);
4% - 2 = 2 %
Geht auch mit 25 + 13 = 4% + 13 = 17 %
Funktioniert auch mit Mana.
Hoffe es hilft dir weiter.
-
22.01.2018 21:30
#6
Funktioniert super mit der normalen Funktion, es wird einfach der Wert dazu addiert, sieht dann einfach so aus:
Npc_ChangeAttribute (self, ATR_HITPOINTS, HP_Apple);
Npc_ChangeAttribute (self, ATR_HITPOINTS, self.attribute[ATR_HITPOINTS_MAX] / 25 -2);
Natürlich dann noch ein Vermerk, wieviel normale Heilung und wieviel Prozentual....
Man kann natürlich auch [ATR_HITPOINTS_MAX] / 10 nehmen, dann rechnet man mit dem normalen 10 und dann +25, dann haste deine 35 Prozent.
Mit dieser Methode brauchst du keine Scriptpakete, und ist relativ einfach zu verstehen und kannst auf jeden Prozentwert kommen + Normale Heilkraft.
Geändert von Falugify (22.01.2018 um 21:38 Uhr)
-
Zitat von Draxes
Du hast schon gut erkannt, dass das Problem die Rechnung mit Integern ist. Dein oberer Versuch ist prinzipiell gut, allerdings musst du die Klammerung anpassen.
Bei (15 / 100) kommt erstmal 0 raus und alles multipliziert mit 0 führt dazu, dass keine Regeneration erfolgt. Also musst du Mithilfe von Klammerung dafür sorgen, dass zuerst mit 15 multipliziert wird und erst zuletzt das gesamte Ergebnis durch 100 geteilt wird.
Danke, da stand ich vorhin wohl ziemlich auf dem Schlauch... Die richtige Klammersetzung hat das Problem behoben! Wusste auch nicht, dass innerhalb der Rechnung 15/100 erstmal auf null abgerundet wird.
Zitat von Dada
Oder mit den Floats aus Ikarus arbeiten. Ist finde ich genauso verständlich und macht den Job fast genauer
Wäre auch eine Alternative gewesen, stimmt. Allerdings hätt ich mich dann auch erst belesen müssen, wie...
Zitat von Jiggy
@gladi
Code Beispiel, um dein Problem zu lösen:
Code:
var int Beispielvariable; Beispielvariable = 1 + ((self.attribute[ATR_MANA_MAX] * 15) / 100);
Npc_ChangeAttribute (self, ATR_MANA, Beispielvariable);
1 Manapunkt wird definitiv hergestellt und zusätzlich 15% vom vorhandenen Mana. Für den Wert 1 empfehle ich den gleichen Wert zu nehmen, welcher prozentual wiederherstellt, zB. 20,
Code:
var int Beispielvariable; Beispielvariable = 20 + ((self.attribute[ATR_MANA_MAX] * 20) / 100);
Npc_ChangeAttribute (self, ATR_MANA, Beispielvariable);
Warum addierst du eine absolute Zahl dazu? Dein Code (ist übrigens der gleiche, wie oben von Draxes beschrieben und wie der, den ich auch schon benutzt habe (nur mit der falschen Klammersetzung, die du hier richtig hast)) tut es doch auch ohne diese absolute Zahl? Das verstehe ich nicht so ganz.
Zitat von Falugify
Hab mit dem hier mal gearbeitet, funktioniert ohne Probleme:
Npc_ChangeAttribute (self, ATR_HITPOINTS, self.attribute[ATR_HITPOINTS_MAX] / 25 -2);
4% - 2 = 2 %
Geht auch mit 25 + 13 = 4% + 13 = 17 %
Funktioniert auch mit Mana.
Hoffe es hilft dir weiter.
Zitat von Falugify
Funktioniert super mit der normalen Funktion, es wird einfach der Wert dazu addiert, sieht dann einfach so aus:
Npc_ChangeAttribute (self, ATR_HITPOINTS, HP_Apple);
Npc_ChangeAttribute (self, ATR_HITPOINTS, self.attribute[ATR_HITPOINTS_MAX] / 25 -2);
Natürlich dann noch ein Vermerk, wieviel normale Heilung und wieviel Prozentual....
Man kann natürlich auch [ATR_HITPOINTS_MAX] / 10 nehmen, dann rechnet man mit dem normalen 10 und dann +25, dann haste deine 35 Prozent.
Mit dieser Methode brauchst du keine Scriptpakete, und ist relativ einfach zu verstehen und kannst auf jeden Prozentwert kommen + Normale Heilkraft.
So einfach ist das leider nicht. Man kann doch nicht einfach 10% nehmen und dann absolut 25 draufpacken? Damit erreiche ich nicht die 35% Wiederherstellung, die ich haben möchte (außer mein Maximalleben wäre genau 100). Ein Beispiel (anhand deiner letzten Codezeile):
Ich habe 500 Leben. Möchte nun 35% wiederherstellen.
Nach deiner Rechnung würde ich ATR_HITPOINTS_MAX / 10 rechnen: 500 / 10 = 50 -> ein Zehntel von 500, oder 10%
Und dann 25 draufrechnen: 50 + 25 = 75 -> das sind allerdings dann nicht 35% von 500 Maximalleben, sondern 15%.
Oder meinst du was anderes, bzw. verstehe ich hier was völlig falsch?
-
22.01.2018 22:31
#8
Probiere es ingame oder lass es einfach.
-
Zitat von Falugify
Probiere es ingame oder lass es einfach.
Wider besseren Wissens geprüft (da du so überzeugt warst, nicht böse gemeint) und natürlich funktioniert es nicht.
Heilt bei 200 Leben genau 45 HP und bei 500 Leben genau 75 HP, was in beiden Fällen nicht 35% sind.
Vielleicht hast du auch nicht ganz verstanden, was genau ich wollte, aber nicht schlimm! Trotzdem danke für deine Idee!
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|