StrangeLoopGames / EcoIssues

131 stars 21 forks source link

Reputation is assigned incorrectly #24931

Closed Enel300 closed 5 months ago

Enel300 commented 5 months ago

0.10.2.2. beta release-660

Hello,

Reputation is assigned incorrectly by the game when automated by law. We have a law that should give players a number of negative reputation when they switch to the Abandoned group but refund exactly the same amount when they leave it. For this we wrote a law with an if-loop. If players now get out of the Abandoned group, the law does not work because they get an untraceable negative value instead of the programmed positive value. Something is wrong here. Please take a closer look. You can reproduce or provoke it this way. Thank you.

D3nnis3n commented 5 months ago

Please attach the full law as seen in the editor.

Enel300 commented 5 months ago

2024-05-14 23_46_33

Enel300 commented 5 months ago

Dieses Gesetz wurde erlassen, nachdem Spieler bereits auf dem Server waren. Sie waren schon in der Gruppe "Abandoned". Sind dann aus der Gruppe gekommen da sie sich wieder eingeloggt haben und haben auf einmal einen nicht nachvollziehbaren Reputationsabzug von -10 erhalten (Wo kommt denn dieser Wert her??!!) und sind somit mit -10 durch die Welt gelaufen...

Eigentlich sollte es pari sein: du gehst in die Gruppe Abandoned, du bekommst -50. Du verlässt diese Gruppe, du erhältst +50. Somit bist du wieder bei Null.

D3nnis3n commented 5 months ago

Die 10 Reputation kommen vermutlich daher, dass Settlements nur eine begrenzte Menge Reputation per Gesetzen vergeben können, was in Settlements.eco definiert werden kann:

"MaxGivableReputationThroughLaws": [ 10.0, 20.0, 40.0 ], "MaxGivableToSinglePartyPerDay": [ 5.0, 10.0, 20.0 ], "MaxGivableToSinglePartyTotal": [ 10.0, 40.0, 100.0 ], "MinGivableToSinglePartyTotal": [ -10.0, -60.0, -100.0 ],

Wenn das Settlement System nicht genutzt wird, gelten diese Settings nicht, dann wird statt dem Settlement der Spieler, der das Gesetz erstellt hat, als Ausgangspunkt für die Reputation genommen - dieser kann pro Tag ebenfalls nur +10 oder -10 (also insgesamt 10 Punkte pro Spieler) in Gesetzen vergeben. Das scheint also korrekt zu funktionieren.

D3nnis3n commented 5 months ago

Es scheint auch kein Fehler im Law-System vorzuliegen, weil das Gesetz nicht korrekt geschrieben ist.

Der Auslöser (Triggers) ist "Demographic Change" mit "Abandoned", also wird das Gesetz aktiviert, wenn ein solcher passieren soll (in deinem Fall: Spieler wird die Demographic "Abandoned" verlassen). Die Bedingung (If), dass das Gesetz ausgeführt wird ist, das man nicht den Titel "Abwesenheit" hat, was zum Zeitpunkt der Gesetzaktivierung (die vor dem Wechsel passiert) wohl erfüllt ist. (Geht aus der gegebenen Info nicht hervor)

Dann wird ausgeführt, was in "Then" steht. Das kann sich aber nicht mehr auf den Trigger beziehen, das geht nur im "If" Bereich, also wird jedwedes Beitreten in eine andere Demographic das Definierte auslösen. Die Zweite kann nicht ausgeführt werden, weil die erste bereits die maximale Reputation pro Tag und Spieler überschreitet und wird in jedem Fall ignoriert. Ob es überhaupt zur Ausführung käme ist die andere Frage, da die Conditions so eigentlich nicht gedacht sind. Das Law-System, wenn nicht korrekt genutzt, kann eine Menge unlogischer Ergebnisse produzieren, das sind aber keine Fehler - die Gesetze müssen korrekt geschrieben werden, es ist einfach nicht möglich jedes unlogische Konstrukt abzufangen.

Ein korrekt geschriebenes Gesetz sieht so aus, das "Enter Demographic" muss im "If" Teil in der Mitte stehen - nur dann bezieht es sich auch auf den Trigger und dessen Demographic. image

Probier bitte mal ein solches Gesetz und wenn du dort auch ein Problem produzieren kannst, mach einen neuen Issue auf. Das Gesetz hier ist ist nicht für Debugging geeignet, weil es gleich mehrere Logikfehler hat und die Reputationsgrenzen überschreitet. Verwende zum Testen daher bitte auch einen Reputationswert von "1", sodass die Reputationsgrenzen nicht überschritten werden. Was ein Gesetz nicht darf, wird einfach ignoriert und erschwert das Debugging.

Enel300 commented 5 months ago

Die 10 Reputation kommen vermutlich daher, dass Settlements nur eine begrenzte Menge Reputation per Gesetzen vergeben können, was in Settlements.eco definiert werden kann:

"MaxGivableReputationThroughLaws": [ 10.0, 20.0, 40.0 ], "MaxGivableToSinglePartyPerDay": [ 5.0, 10.0, 20.0 ], "MaxGivableToSinglePartyTotal": [ 10.0, 40.0, 100.0 ], "MinGivableToSinglePartyTotal": [ -10.0, -60.0, -100.0 ],

Wenn das Settlement System nicht genutzt wird, gelten diese Settings nicht, dann wird statt dem Settlement der Spieler, der das Gesetz erstellt hat, als Ausgangspunkt für die Reputation genommen - dieser kann pro Tag ebenfalls nur +10 oder -10 (also insgesamt 10 Punkte pro Spieler) in Gesetzen vergeben. Das scheint also korrekt zu funktionieren.

alles klar dann muss ich also hier die Werte verändern und das Gesetz würde richtig funktionieren?

Folgende Econfig haben wir in Features.eco:

{ "RentEnabled": true, "VoiceChatEnabled": true, "FoodVarietyMultiplierEnabled": true, "FoodTastinessMultiplierEnabled": true, "SettlementEnabled": false, "CultureEnabled": false, "AllowFaceTrackingOnServer": true, "AchievementsEnabled": true, "CameraModeEnabled": true, "InitialSpawnSelection": true, "ExhaustionTimeEnabled": false }

D3nnis3n commented 5 months ago

Ja, du hast das Settlement System deaktiviert - davon raten wir dringend ab, das ist eine Legacy-Einstellung die nicht mehr aktiv gepflegt wird, Bugfixes gibt es also entweder sehr verzögert oder gar nicht mehr. Das System könnte auch in der Zukunft entfernt werden.

Mittlerweile kannst du mit ein bisschen Setup eine globale Föderation mit Settlements machen (also Gesetze für die ganze Welt) und auch Claim Papers durch Skill Scrolls kannst du einstellen. Wenn du wissen willst, wie das geht, gib mir hier oder im Discord Bescheid.

Die Reputationsgrenzen für Gesetze kannst du mit deaktivierten Settlements nicht ändern - die Config die ich gepostet habe, gilt nur für Settlements.

Enel300 commented 5 months ago

Es scheint auch kein Fehler im Law-System vorzuliegen, weil das Gesetz nicht korrekt geschrieben ist.

Der Auslöser (Triggers) ist "Demographic Change" mit "Abandoned", also wird das Gesetz aktiviert, wenn ein solcher passieren soll (in deinem Fall: Spieler wird die Demographic "Abandoned" verlassen). Die Bedingung (If), dass das Gesetz ausgeführt wird ist, das man nicht den Titel "Abwesenheit" hat, was zum Zeitpunkt der Gesetzaktivierung (die vor dem Wechsel passiert) wohl erfüllt ist. (Geht aus der gegebenen Info nicht hervor)

Dann wird ausgeführt, was in "Then" steht. Das kann sich aber nicht mehr auf den Trigger beziehen, das geht nur im "If" Bereich, also wird jedwedes Beitreten in eine andere Demographic das Definierte auslösen. Die Zweite kann nicht ausgeführt werden, weil die erste bereits die maximale Reputation pro Tag und Spieler überschreitet und wird in jedem Fall ignoriert. Ob es überhaupt zur Ausführung käme ist die andere Frage, da die Conditions so eigentlich nicht gedacht sind. Das Law-System, wenn nicht korrekt genutzt, kann eine Menge unlogischer Ergebnisse produzieren, das sind aber keine Fehler - die Gesetze müssen korrekt geschrieben werden, es ist einfach nicht möglich jedes unlogische Konstrukt abzufangen.

Ein korrekt geschriebenes Gesetz sieht so aus, das "Enter Demographic" muss im "If" Teil in der Mitte stehen - nur dann bezieht es sich auch auf den Trigger und dessen Demographic. image

Probier bitte mal ein solches Gesetz und wenn du dort auch ein Problem produzieren kannst, mach einen neuen Issue auf. Das Gesetz hier ist ist nicht für Debugging geeignet, weil es gleich mehrere Logikfehler hat und die Reputationsgrenzen überschreitet. Verwende zum Testen daher bitte auch einen Reputationswert von "1", sodass die Reputationsgrenzen nicht überschritten werden. Was ein Gesetz nicht darf, wird einfach ignoriert und erschwert das Debugging.

Okay interessant, werde ich mal testen. Mein Gesetz funktionierte so wie es sollte nur eben die Zahl von +50 und +50 stimmte nicht. Immer wenn Spieler in die Gruppe gewechselt sind hat es gegriffen und auch wenn sie es verlassen haben. Ich brauche eine Conditional in einem Gesetz ähnlich wie beim Straßenbau wenn Straßen aufgehoben werden oder verlegt werden.

Enel300 commented 5 months ago

Ja, du hast das Settlement System deaktiviert - davon raten wir dringend ab, das ist eine Legacy-Einstellung die nicht mehr aktiv gepflegt wird, Bugfixes gibt es also entweder sehr verzögert oder gar nicht mehr. Das System könnte auch in der Zukunft entfernt werden.

Mittlerweile kannst du mit ein bisschen Setup eine globale Föderation mit Settlements machen (also Gesetze für die ganze Welt) und auch Claim Papers durch Skill Scrolls kannst du einstellen. Wenn du wissen willst, wie das geht, gib mir hier oder im Discord Bescheid.

Die Reputationsgrenzen für Gesetze kannst du mit deaktivierten Settlements nicht ändern - die Config die ich gepostet habe, gilt nur für Settlements.

Ja ich möchte kein Settlement System mit Federation, Culture etc. sondern das Spiel von davor. Daher habe ich es deaktiviert.

Enel300 commented 5 months ago

Ja, du hast das Settlement System deaktiviert - davon raten wir dringend ab, das ist eine Legacy-Einstellung die nicht mehr aktiv gepflegt wird, Bugfixes gibt es also entweder sehr verzögert oder gar nicht mehr. Das System könnte auch in der Zukunft entfernt werden.

Mittlerweile kannst du mit ein bisschen Setup eine globale Föderation mit Settlements machen (also Gesetze für die ganze Welt) und auch Claim Papers durch Skill Scrolls kannst du einstellen. Wenn du wissen willst, wie das geht, gib mir hier oder im Discord Bescheid.

Die Reputationsgrenzen für Gesetze kannst du mit deaktivierten Settlements nicht ändern - die Config die ich gepostet habe, gilt nur für Settlements.

Okay wenn ich die Reputationsgrenzen nicht ändern kann, dann kann ich also maximal ein Gesetz erlassen mit -10 und +10 ?

D3nnis3n commented 5 months ago

Ja ich möchte kein Settlement System mit Federation, Culture etc. sondern das Spiel von davor. Daher habe ich es deaktiviert.

Alles klar, trotzdem der Hinweis, dass wir das nicht mehr unterstützen und die Möglichkeit dafür gegebenenfalls in der Zukunft entfernt wird. In dem Fall wird dein Savegame mit einer solchen Version nicht mehr funktionieren. Etwaige Fehler im alten System werden nur noch behoben, wenn Ressourcen dafür frei sind.

Okay wenn ich die Reputationsgrenzen nicht ändern kann, dann kann ich also maximal ein Gesetz erlassen mit -10 und +10?

Das funktioniert auch nur, wenn jemand nicht am selben Tag Abandoned wird und wieder kommt (und dann -10 und +10 am selben Tag bekommen würde). Das Limit ist meines Wissens 10 Reputation pro Tag. Also sicher ist nur "5". Du kannst schauen, ob die Einstellung in Reputation.eco einen Effekt hätte, dort kann man die generellen Limits einstellen - das gilt dann aber für alle Spieler, daher alle Spieler können auch manuell mehr Reputation pro Tag vergeben. Es kann sein, dass sich das auswirkt - aber das weiß ich nicht, wie gesagt, Legacy System.

"MaxRepFromOnePerson": 30.0, "MinRepFromOnePerson": -10.0, "ReviewSizeLimit": 300, "MaxGivableRepPerDay": 15.0, "MaxGivableRepPerDayPerTarget": 3.0,

Okay interessant, werde ich mal testen. Mein Gesetz funktionierte so wie es sollte nur eben die Zahl von +50 und +50 stimmte nicht. Immer wenn Spieler in die Gruppe gewechselt sind hat es gegriffen und auch wenn sie es verlassen haben. Ich brauche eine Conditional in einem Gesetz ähnlich wie beim Straßenbau wenn Straßen aufgehoben werden oder verlegt werden.

In deinem Fall hat das Gesetz für Leute, die die Demographic verlassen haben, den Effekt von "Enter Demographic" abgespielt - warum genau, kann ich nicht sagen. Es wäre möglich, dass der Civic Tick so spät kam, dass sie gleichzeitig in die "Active" Demographic gewechselt sind. "Enter Demographic" und "Leave Demographic", wenn in "Then" genutzt gilt für jede Änderung in irgendeiner Demographic, nicht nur für Änderungen an der, der in Trigger bestimmt ist. Wenn das nur für die Demographic gelten soll, die im Trigger bestimmt ist, muss das in "If" definiert werden.

Enel300 commented 5 months ago

Ja ich möchte kein Settlement System mit Federation, Culture etc. sondern das Spiel von davor. Daher habe ich es deaktiviert.

Alles klar, trotzdem der Hinweis, dass wir das nicht mehr unterstützen und die Möglichkeit dafür gegebenenfalls in der Zukunft entfernt wird. In dem Fall wird dein Savegame mit einer solchen Version nicht mehr funktionieren. Etwaige Fehler im alten System werden nur noch behoben, wenn Ressourcen dafür frei sind.

Okay wenn ich die Reputationsgrenzen nicht ändern kann, dann kann ich also maximal ein Gesetz erlassen mit -10 und +10?

Das funktioniert auch nur, wenn jemand nicht am selben Tag Abandoned wird und wieder kommt (und dann -10 und +10 am selben Tag bekommen würde). Das Limit ist meines Wissens 10 Reputation pro Tag. Also sicher ist nur "5". Du kannst schauen, ob die Einstellung in Reputation.eco einen Effekt hätte, dort kann man die generellen Limits einstellen - das gilt dann aber für alle Spieler, daher alle Spieler können auch manuell mehr Reputation pro Tag vergeben. Es kann sein, dass sich das auswirkt - aber das weiß ich nicht, wie gesagt, Legacy System.

"MaxRepFromOnePerson": 30.0, "MinRepFromOnePerson": -10.0, "ReviewSizeLimit": 300, "MaxGivableRepPerDay": 15.0, "MaxGivableRepPerDayPerTarget": 3.0,

Okay interessant, werde ich mal testen. Mein Gesetz funktionierte so wie es sollte nur eben die Zahl von +50 und +50 stimmte nicht. Immer wenn Spieler in die Gruppe gewechselt sind hat es gegriffen und auch wenn sie es verlassen haben. Ich brauche eine Conditional in einem Gesetz ähnlich wie beim Straßenbau wenn Straßen aufgehoben werden oder verlegt werden.

In deinem Fall hat das Gesetz für Leute, die die Demographic verlassen haben, den Effekt von "Enter Demographic" abgespielt - warum genau, kann ich nicht sagen. Es wäre möglich, dass der Civic Tick so spät kam, dass sie gleichzeitig in die "Active" Demographic gewechselt sind. "Enter Demographic" und "Leave Demographic", wenn in "Then" genutzt gilt für jede Änderung in irgendeiner Demographic, nicht nur für Änderungen an der, der in Trigger bestimmt ist. Wenn das nur für die Demographic gelten soll, die im Trigger bestimmt ist, muss das in "If" definiert werden.

"Nicht mehr unterstützen" bedeutet, dass es das Spiel nur noch mit Settlements geben wird? Wäre schade denn dann kann ich den Server eigentlich direkt dicht machen wenn er keine Zukunft hat, da ihr dem Spieler dies aufzwingt. Ich finde, die Entscheidung ob Settlement aktiviert oder nicht sollte beim Spieler liegen. Nicht alle mögen das System.

Okay ich werde versuchen das Limit der Reputation hochzusetzen und es dann nochmal testen. So entscheidend ist das Gesetz auch nicht. Ich würde es gern so einrichten mit der Reputation aber es muss nicht sein.

D3nnis3n commented 5 months ago

Das Problem ist, dass das Settlement System eine neue Codebasis für das gesamte Civics System ist, mit einigen Überschneidungen für das alte Non-Settlement System für rudimentäre Kompatibilität. Diese ist aber minimal - der Server kann etwa nicht vom einem System ins andere überführt werden, wenn die Einstellung nach der Generierung der Welt geändert wird, crashed der Server einfach und das Savegame kann dabei zerstört werden. Das kann versehentlich passieren und ist natürlich nicht gut.

Beide Codebasen tun aber im Grundsatz dasselbe und die neue eben noch etwas mehr für die neuen Funktionen, sind aber unterschiedlich. Wir müssten beide pflegen, also jede Änderung und neue Funktion in beide Systeme unterschiedlich einpflegen und Bugs beheben die in beiden Systemen unabhängig voneinander auftreten können, also doppelte Arbeit - das können wir aber nicht leisten, da beide sehr komplex sind. Entsprechend werden Fehler im alten System nur noch behoben, wenn Ressourcen dafür verfügbar sind und daher mit niedriger Priorität. Neue Funktionen werden ggf. auch einfach nicht für das alte System implementiert.

Wir haben das neue System auch bereits so weiterentwickelt, dass die von Spielern vermissten Funktionen einer optionalen globalen Regierung und von unbeschränkten Claim Stakes und Papern, die außerhalb von Settlements genutzt werden können, jetzt im neuen System als Möglichkeiten verfügbar sind. Entsprechend wird das alte System mittlerweile von weniger als 1% der öffentlichen Server (gewichtet nach Spielerzahl) genutzt und ist daher nicht mehr wirklich relevant - es ist auch einfach nicht mehr der Stand wie Eco jetzt funktioniert. Das System war ja von Anfang an als Weiterentwicklung und Ersatz des alten geplant, schon seit vor 2018.

Es ist für uns schlicht nicht möglich, alle Altlasten mitzuziehen und für eine Minderheit völlig unterschiedliche Systeme anzubieten, gerade wenn das neue System alles kann, was das alte auch konnte. Das machen auch Spiele mit deutlich mehr Mitarbeitern nicht - das Spiel hat sich eben weiterentwickelt, das ist ja die Idee von Early Access. Konfigurationsmöglichkeiten bieten wir immer gerne sehr viele an, aber es gibt Dinge, wo das einfach zu komplex ist.

Es gibt aktuell keinen konkreten Plan, das alte System zu entfernen bzw. nicht mehr nutzbar zu machen. Aber das kann passieren. Wir kommunizeren das dann lieber gleich transparent, damit niemand am Ende überrascht ist, wenn wir in einiger Zeit vielleicht feststellen müssen, dass die Altlasten unsere Möglichkeit das Spiel weiterzuentwickeln einschränken und daher entfernt werden müssen.

Entsprechend warnen wir Spieler davor und beantworten Fragen wie Dinge aus dem alten System im Neuen dargestellt werden können. Sollte das alte System mal entfernt werden, funktionieren Savegames damit ab der Version dann nicht mehr. Aber es gibt bereits jetzt regelmäßig Probleme bei Updates mit der Migration. Wir haben die Option für das alte System primär deswegen zur Verfügung gestellt, damit "skeptische" Spieler etwas Zeit haben zu wechseln und uns Feedback geben können, was sie im neuen System nicht mehr machen können, sodass wir diese Dinge im neuen System verbessern können. Uns ist natürlich klar, dass nicht jeder Spieler bei Veränderungen "Hurra" ruft, aber Veränderungen sind unausweichlich, genauso dass nicht alle alten Systeme beibehalten werden können. Dafür gibt es dann Übergangszeiten, sodass man sich daran im eigenen Tempo gewöhnen kann und wir noch Änderungen implementieren können, die den Übergang einfacher machen.

Du kannst natürlich gerne auch weiterhin mit dem alten System spielen, solange es verfügbar ist - du solltest dir nur darüber bewusst sein, dass du eben ein Legacy System ohne Support des neuen spielst. Und du kannst auch im neuen System Kultur einfach gar nicht verwenden, eine globale Föderation für globale Gesetze platzieren und sogar die Errichtung von anderen Settlements vollständig per Gesetz verbieten. Keine der Funktionen im neuen System muss verwendet werden, der Admin kann immer noch alles so konfigurieren, dass es nur eine globale Föderation gibt und sonst nichts.

Unsere zukünftige Entwicklung wird sich aber in jedem Fall ausschließlich um das neue Settlement System drehen und entsprechende Features daher auch in Verbindung damit entwickelt werden.