Caching unter Enforce

  • Hiho,


    ich bin seit zwei Tagen mal wieder ein bisschen am coden und habe an manchen Stellen ein paar "Eigenarten" bemerkt. Ich vermute ja, dass Enforce die ganzen Scripte einmalig ausführt und dann cacht, was in meinem Fall schlecht ist, da ich immer neue Werte beziehen muss. Beispiel anhand einer Rückgabe:

    Beim Start des Games wird die Methode einmalig ausgeführt und die Werte berechnet, danach ändert sich nix mehr daran. Da dies aber u.a. bei Rezepten benötigt wird, welche eine zufällige Anzahl der beiden Ausgabeprodukte errechnet, darf solch ein Rückgabewert nicht gecacht werden. Selbst wenn man eine Instanz einer Klasse hat, müssen die Methoden eigenständig funktionieren, die Rückgabewerte dürfen nicht gespeichert werden, dass führt sonst zu etwaigen Problemen.


    Die einzig mir schlüssige Lösung wäre, eigene Klassen zu erstellen und diese neu zu instanzieren, was aber das Ganze wesentlich unübersichtlicher machen würde und am ende vielleicht nicht mal so funktioniert. Selbst static könnte das selbe Problem aufweisen.


    Hat hier jemand eine "einfache" Lösung parat?


    Grüße,

    JackHusky

  • Zitat


    einmalig ausführt und dann cacht"


    Eher interpretiert, binarisiert und dann dynamisch ausführt.


    Bin heute Abend in der Modding Bastelstube auf dem TS (oder in einem anderen öffentlichen Kanal nebenan)

    Ich habe ein Float, dass immer wieder ungeschrieben wird und es funktioniert. Mal sehen wo es in der Gesamtheit liegt.


    Mfg, HToneill

  • Also bei manchen klappt es, wenn ich eine klassenweite Variable nutze, bei anderen kommt es auf den Punkt der Ausführung an. Bei Rezepten z.B. gibt es ja die "Do" Methode, welche aber offenbar bei der ersten Ausführung ignoriert wird, denn hier gelten immer die Werte aus "Init". Ab der zweiten Ausführung wird "Do" ausgeführt.


    Es macht auch Sinn bereits verwendete Variablen zu nutzen, dafür muss man sich aber zum Teil erst durch die ganzen Vererbungen durcharbeiten, was nicht unbedingt immer einfach ist. Aktuelle Änderung zu dem von oben:

    Code
    override void Do(ItemBase ingredients[], PlayerBase player,array<ItemBase> results, float specialty_weight)//gets called upon recipe's completion
        {
            setResultCounts();
        }
    
    void setResultCounts()
        {
            m_ResultSetQuantity[0]    = Math.RandomInt(1,7);
            m_ResultSetQuantity[1]    = 8 - m_ResultSetQuantity[0];
        }


    Ich denke mal bei manchen Dingen ist eine große Dynamik nicht vorgesehen. Hier habe ich z.B. bei "RockBase" das Problem, wenn ich die Aktion fortsetze, also nach der Beendigung nicht abbreche, dass die erzeugten Items immer die selben sind. Ich denke mal auch hier habe ich nur eine Methode vergessen einzubinden, damit dies geht.