• Official Post

    Hallo Bald_Eagle


    ich mach das hier mal so Öffentlich, damit andere Tool Creator auch den Punkt hier einsehen können - es ist aber zu spezifisch, als das ich das in die Ankündigungen so detailliert schreiben will.


    Für ein kommendes Update brauchte ich die Möglichkeit einem einzelnen Planeten andere Multiproduktionswerte zu geben. Dieser Planet soll getrennt von allen Multiproduktionen einen Basis-Wert wieviel er produzieren soll erhalten (beispielsweise 100fach). Dieser Basiswert (also 100fach) soll aber auf alle Universenspeed-Konfigurationen angepasst werden.


    Hier ein Beispiel, bei 100fach Produktion bedeutet dies:


    RETRO Nexus:

    erhalten eine 99x Multiproduktion auf dem Planeten zugschalten


    Ein anderes Universum, als Beispiel Sirius (1,5x Universenspeed) wird nach folgender Rechnung aufgelöst:

    100/Speed - 1

    Also

    65,67x (es ist ok, dass wir minimale Verschiebungen zwischen den Universen haben; das kann man hier leider nicht umgehen)


    Bei der Entwicklung dieser Funktion ist folgendes Problem aufgetaucht:

    Die Grundproduktion und die Minentech ergaben bei einer Multiproduktion durch Rundungsprobleme (mehr Nachkommastellen) unterschiedliche Werte.

    Ich habe also die Grund- als auch die Minentech Berechnung so abgeändert, dass diese auf Grundlage von 1x Universenspeed errechnen, dann runden und dann *UniversenSpeed multiplizieren.


    Ich weiss an dieser Stelle nicht, welche Formeln du wo genau nutzt. Mein Java ist jetzt auch nicht so gut, dass ich dies schnell nachschlagen kann.


    Hier meine Änderungen der 3 Formeln:


    Mienentech:

    Code
    $production[$i] = floor(
                                                $production[$i] / $this->config["game.speed"]
                                                * ($energyTec/50)
                                            ) * $this->config["game.speed"];


    Für die Minen-Produktion


    Code
    $production = (
                                     ($this->config['resource_' . $i . '.production'] / $this->config['game.speed'])
                                        * $stufe * pow(1.15, $stufe)
                                    ) * $factors['resource_'.$i.'_factor'] * 0.1 * $productionsFactor;
                    $p = round(round($production) * $this->config['game.speed']);


    Wie du siehst, habe ich für die Minentech die Nachkommastellen mit floor weggetrimmt, bei der Produktion hab ich mich für ein runden entschieden.


    Reichen dir diese Informationen bereits? Ansonsten kann ich versuchen das Problem / die Lösung) genauer zu erklären :)


    Sobald das Update raus kommt, können wir ansonsten auch nochmal über die genaue Herleitung / Änderung sprechen. Ich wollte dich nur (ist glaube auch das erste mal) vorwarnen.


    Viele Grüße

    Dschibait

  • Ich habe also die Grund- als auch die Minentech Berechnung so abgeändert, dass diese auf Grundlage von 1x Universenspeed errechnen, dann runden und dann *UniversenSpeed multiplizieren.

    Gibt es einen bestimmten Grund, warum deine 'Basisproduktion' bereits mit dem Speedfaktor behaftet ist? Du könntest doch auch erst die gesamte Produktion komplett mit 1x Speed berechnen und erst am Schluss (ggf. runden und) mit dem Universumsspeed ($this->config['game.speed']) multiplizieren.

    Dann würdest du zwischendrin jeweils die Division einsparen.


    $energyTec/50 für Minentechnik scheint mir auch keine besonders glückliche Namenswahl.

    Hier meine Änderungen der 3 Formeln:

    [...]

    Reichen dir diese Informationen bereits? Ansonsten kann ich versuchen das Problem / die Lösung) genauer zu erklären

    Da sind nur 2 Formeln ;)


    Viele Grüße

    Eagle

    • Official Post

    Gibt es einen bestimmten Grund, warum deine 'Basisproduktion' bereits mit dem Speedfaktor behaftet ist? Du könntest doch auch erst die gesamte Produktion komplett mit 1x Speed berechnen und erst am Schluss (ggf. runden und) mit dem Universumsspeed ($this->config['game.speed']) multiplizieren.

    Dann würdest du zwischendrin jeweils die Division einsparen.

    das war einfach so als ich es übernommen habe :)

    Grundproblem dabei wird sein, dass diese Werte alle schön aufgelistet sein sollten (in der Wirtschaft) und der Programmierer (ich will keinen Flamen) dann einfach noch nicht so weit war, dass im nachhinein zu machen.

    Ich kann dir nicht sagen warum das tatsächlich gemacht wurde. Im SI2 wird alles mit 1fach berechnet und dann (durch den %-Einstellung des Gebäudes) hochgerechnet.



    $energyTec/50 für Minentechnik scheint mir auch keine besonders glückliche Namenswahl.

    da gibts noch schlimmere Bezeichnungen :P die noch verwirrender sind. Kommt aber auch nicht von mir.


    Da sind nur 2 Formeln ;)

    ja ich hab dir die Spice-Formel (oben wäre es nur für normale Minen Prodd) nicht mit zugeschrieben. Da wäre die Temperatur noch mit drinne; das war recht umständlich eh hier noch aufgebaut (weil wir den Temperaturbonus auch mit dem Unispeed multiplizieren) - ich glaube aber du weisst das für diese 3. Stelle auch umzusetzen.

  • sync für den Fix ist raus; Ankündigung für den Rest kommt die Tage.

    Änderungen zu vorher sind sichtbar. Muss ich anpassen.

    war es das bisher nicht?

    Ich hab in alten Universen geschaut, da passte es - mit der neuen Berechnungen auch.


    Re: Stundenproduktion * 24 - Tagesproduktion = -21

    Kr: Stundenproduktion * 24 - Tagesproduktion = -19

    Me: Stundenproduktion * 24 - Tagesproduktion = -1

    Sp: Stundenproduktion * 24 - Tagesproduktion = -7

    d.h. die Tagesproduktion ist minimal größer (angezeigt), als 24x Stundenproduktionen - alle Werte laut Wirtschaftsübersicht.

    Welcher Wert von beiden angerechnet wird, weiß ich nicht.


    Uni: Retro

    ID: 1078

  • d.h. die Tagesproduktion ist minimal größer (angezeigt), als 24x Stundenproduktionen - alle Werte laut Wirtschaftsübersicht.

    Welcher Wert von beiden angerechnet wird, weiß ich nicht.

    Die Prod pro Stunde hat Nachkommastellen die im Spiel nicht angezeigt werden aber mit für die Berechnung für die Tages Prod verwendet werden. So komme ich zumindest auf die gleichen Werte wie im Spiel für Hochofen, Krypt und Spice mine. Bei der Roheisen mine ist immer noch ein kleiner Fehler unabhängig davon ob der hochofen an oder aus ist.


    Zu 100% bin ich mir auch inzwischen nicht mehr sicher.


    Ich benutze "round" für den Prod.wert einer Mine pro Stunde und nach *Minentech/50 "floor" ausser beim Hochofen. Der ganze Rest wie +30;15 für basis prod und alle %,multi kommen danach und ansich ist das Ergebniss gleich wie im Spiel wenn man bei der Prod/h die Nachkommastellen ignoriert aber diese für die Prod/d mitverwendet. Bis auf die Tages Prod der Roheisenmine.


    Wenn du eine Lösung dafür findest schreib mal bitte wo der Fehler liegt.

  • Ich benutze "round" für den Prod.wert einer Mine pro Stunde[...]

    Das habe ich bisher auch getan, und so steht es oben ja auch.

    Wenn du allerdings in die Produktionsstatistik in der Gebäudeübersicht schaust, stehen dort die Basiswerte für 1x Produktion - unabhängig von Universum-Speed - und zwar abgerundet (Beispiel für RE):

    Wenn das sowieso das neue 'Normal' sein soll, würde ich vorschlagen, diese Reihe zu nehmen, danach alle Multi-, Allianz-, Gebäude-, VIP-, Forschungs- usw. -boni anwenden, die Grundproduktion addieren, Uni-Speed anwenden und ganz am Schluss (ab)runden. Das spart zwischendrin das ganze Runterdividieren und Hochmultiplizieren.

    • Official Post

    Die obere Formel ist die Berechnung der Minen-Grundproduktion.

    Darauf kommen ja aber nochmal Gebäudeuppgrades, VIP Bonus und co, die nicht Ganzzahlen (int) sind..

    Deswegen kommt da am Ende was ungerades raus, was wir vorher floor nehmen müssten um dann die Tagesproduktion auszurechnen.


    SpaceInvasion ist ein sehr altes Spiel - gerade diese Produktionsberechnungen bin ich jedes mal Froh wenn wir uns da auf etwas geeinigt haben, was auch in den Tools so läuft. Das sind viele viele Zeilen Code, die wirklich wirr an Runden oder eben nicht Runden oder sonst was sind.

    Eine Umstellung auf eine übersichtliche / sinnvolle Rechenweise wäre tatsächlich recht aufwendig (Fehler auch nicht ausgeschlossen) und würden für den Nutzen, nach meiner Meinung nach, zu viel Zeit kosten.


    Ihr dürft an dieser Stelle nicht vergessen, dass hier 3 Rechnungen aufeinander Treffen von Bald_eagle, xsonu und eben mir - wobei meine Berechnung durch software architekturische Entscheidungen unnötig noch mehr aufgebläht wurde (Stichwort Gameserver und Webseite sind unterschiedliche Ermittlungsverfahren auch wenn hier gleiche Formeln grob genutzt werden)

    Das macht an einigen Stellen tatsächlich Sinn, an einigen anderen überhaupt nicht; einiges habe ich schon neugeschrieben um Fehler (2 Fenster Bug, Teleporationsbug und plötzliches Ressverschwinden) zu beheben.

  • Dschibait

    Es gibt ja nur eine unregelmäßigkeit bei der 24h Prod die man unter Wirtschaft sieht. Könntest du nicht einfach die Prod pro Stunde abrunden und bei der Prod pro Tag als *24 schreiben. Ist jetzt nicht die beste lösung aber Ich glaube auch nicht das jemand 24h Stunden wartet um zu gucken ob ihn 10-20 Roheisen fehlen.