Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Ergebnis 1 bis 9 von 9
  1. Beiträge anzeigen #1
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline

    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

  2. Beiträge anzeigen #2
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    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.

  3. Homepage besuchen Beiträge anzeigen #3
    General Avatar von Dada
    Registriert seit
    Jan 2007
    Ort
    Krefeld
    Beiträge
    3.729
     
    Dada ist offline
    Oder mit den Floats aus Ikarus arbeiten. Ist finde ich genauso verständlich und macht den Job fast genauer

  4. Beiträge anzeigen #4
    Abenteurer
    Registriert seit
    Jan 2017
    Beiträge
    63
     
    Jiggy ist offline
    @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);

  5. #5
    Falugify
    Gast
     
    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.

  6. #6
    Falugify
    Gast
     
    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)

  7. Beiträge anzeigen #7
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Zitat Zitat von Draxes Beitrag anzeigen
    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 Zitat von Dada Beitrag anzeigen
    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 Zitat von Jiggy Beitrag anzeigen
    @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 Zitat von Falugify Beitrag anzeigen
    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 Zitat von Falugify Beitrag anzeigen
    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?

  8. #8
    Falugify
    Gast
     
    Probiere es ingame oder lass es einfach.

  9. Beiträge anzeigen #9
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Zitat Zitat von Falugify Beitrag anzeigen
    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
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide