Beiträge von ThreeOfMe

    Interesting side fact for SpendMoney. The function actually has an undocumented fourth parameter of type Boolean. The 4th parameter defaults to "false".

    Code
    SpendMoney(Target, 1000, "misc", true)

    If set to "true", the money will be spent even if the SIM does not have enough money. Otherwise the money is not spent and the function returns "false".

    @Fajeth Danke für die Ergänzung, ich arbeite das mal in den Text ein.



    Du meinst, die Dynastien führen das nicht parallel durch? Wie kommst du darauf? Oder falsch verstanden?`

    Korrekt. Die Dynastien durchlaufen den KI-BaseTree nacheinander in einer festen Reihenfolge. Allerdings werden die Skripte i.A. so schnell durchlaufen, dass das dem Spieler nicht auffallen würde.


    Den Ablauf habe ich mithilfe von Debug-Meldungen (Log und Ingame) analysiert. So habe ich auch die Auswertung der Gewichtung herausgefunden.

    Bei meiner Arbeit am Mod "Trade, War, Politics" (TWP) habe ich mich sehr viel mit der KI aus Gilde 2 befasst. Ich beschreibe hier, welche Ebenen der KI im Spiel zur Verfügung stehen, wofür sie eingesetzt werden (Vanilla) und worüf sie genutzt werden können (TWP).



    Dynastie-KI


    Die Dynastie-KI ist gewissermaßen das Pendant zum Spieler, wenn es um die Geschicke der eigenen Dynastie geht. Hier werden weitreichende Entscheidungen getroffen und die eigenen Dynastie-Mitglieder mit Aufgaben betraut.


    Die Dynastie-KI verwendet eine baumartige Struktur zur Entscheidungsfindung, diese beginnt im Ordner Scripts/AI/BaseTree. Die dortigen Skript folgen diesem Ablauf:

    • Der Alias "dynasty" wird initialisiert mit der aktuellen Dynastie (Schattendynastie oder Farbdynastie).
    • Alle Weight()-Funktionen des ersten Ordners werden ausgeführt. Diese Funktionen geben einen Wert zwischen 0 und 100 zurück -- die Gewichtung.
    • Aus den Skripten, deren Gewichtung größer 0 ist, wird ein Skript ausgewählt. Je höher die Gewichtung eines Skripts, desto wahrscheinlicher ist die Auswahl dieses Skriptes. Es kann aber nur ein Skript ausgewählt werden.
    • Die execute()-Funktion des ausgewählten Skripts wird ausgeführt.
    • Falls es einen Ordner mit demselben Namen gibt, wiederholt sich der Ablauf ab (2) für diesen Ordner. Falls das Skript Aliase initialisiert hat, stehen diese auch den weiteren Skripten zur Verfügung.

    Generell gilt: Jede Dynastie (außer Spieler) durchläuft nacheinander diese Skripte. Damit ist die Rechenlast durch diese KI bei größeren Karten nicht höher, aber die einzelnen Dynastien treffen weniger Entscheidungen und wirken dadurch ggf. weniger aktiv. ABER: Die Skripte sind recht ineffizient, wenn zuviel Logik in der Weight-Funktion steckt.


    Die Dynasty-KI ist gut geeignet für Entscheidungen, die die gesamte Dynastie betreffen. Gerade Aktionen, die die Gunst zu anderen Dynastien beeinflussen sind hier gut aufgehoben. Diese KI ist nicht geeignet für Entscheidungen, die den aktuellen Zustand von Familienmitgliedern oder Angestellten betreffen. In Vanilla wurde hier z.B. die KI der Schergen implementiert. Auch Heilung und Gebäudereparatur sind in anderen Skripten besser aufgehoben.


    TWP: Der Entscheidungsbaum wurde aufwendig überarbeitet und beinhaltet jetzt diese Entscheidungsebenen:

    • Was steht an? -> Wahl, Gericht, Fehde, Duell, Arbeit, Dynastie
    • Was ist zu tun? -> z.B. Angreifen/Verteidigen, Gunst gewinnen, Kinder kriegen, Arbeiten, Expandieren
    • Wer kann das erledigen? -> z.B. einer der Ehepartner, der Angeklagte, der Besitzer eines Betriebs, jemand der nichts zu tun hat

    Vanilla: Die Entscheidungen sind teilweise recht einfach gestrickt und gehen nach dem Muster:
    Wer? -> Was? -> Warum?


    Gebäude-KI


    TODO


    SIM-KI


    Die meisten Skripte des Spiels enthalten Aktivitäten einzelner SIMs. Wenn ein SIM im Spiel etwas tut, dann ist das auf diese Arten von Skripten zurückzuführen:

    • Measures beschreiben Aktionen, die der SIM aktiv ausführt. Als Spieler wählt man die meisten dieser Aktionen durch Knopfdruck aus. Auch das Bewegen per Mausklick ist ein Measure.
    • States beschreiben Zustände des SIM. Ein SIM kann zu einem Zeitpunkt in mehreren States sein und durchläuft dabei jeweils das State-Script. Wird ein State durch eine Aktion unterbrochen, so wird der State anschließend fortgesetzt.
    • Behaviours sind Reaktionen der SIMs auf ihre Umwelt. Hier finden sich z.B. die Reaktionen auf Diebstahl, Feuer oder das Schwarze Brett.


    Wenn ein SIM "nichts" tut, durchläuft er tatsächlich ein Measure. Für die meisten SIMs ist das das Measure Idle, bei festen NPCs ist es in der Tabelle BuildingNPC.dbt vorgegeben (Spalte behaviour verweist auf ID in Measures.dbt).


    Scripts/Measures/Behaviour/std_idle.lua
    Das Skript wird für die meisten SIMs ausgeführt, wenn diese nichts anderes zu tun haben. Der SIM wird dann v.a. seine Bedürfnisse erfüllen wie Einkaufen oder einen Gottesdienst besuchen.

    TWP: Das Idle-Skript kann sehr gut verwendet werden, um untätige Angestellte mit Arbeitsaufträgen zu versorgen. In TWP ist damit die KI für Gauner-Berufe implementiert, z.B. für Dieb und Dirne. Für diese Berufe greifen die Gebäude-Skripte nicht, weil die KI-Einstellung für "Produktion" nicht aktiviert werden können.

    Gut:

    • Verbesserte Geldleihe
    • SpinningCart-Fix
    • OOS-Stabilität (außer Gericht)
    • Sortierung der Gebäude-Erweiterungen


    Verzichtbar:

    • Produktion in der Piratenfestung (lieber Erweiterung für zweites/drittes Schiff)
    • Unnütze Zwischenprodukte, z.B. Teig
    • Sammeln als Measure
    • Gunst/Attraktivität beim Ehepartner
    • Käse, Wurst, Salz

    Ich verstehe bei diesem Spiel so einiges nicht :P Fällt halt auch nicht sofort auf, wenn mans nicht weiß. Denn solange die Sammler genug sammeln, produzieren sie auch die anderen Sachen mit. Aber oftmals schmeißen sie Weihwasser oder Lavendel halt einfach auf den Markt, und müssen dann wieder los, obwohl die Produktion entsprechender Items sehr viel sinnvoller gewesen wäre …


    Ganz vermeiden kann ich diesen Fall auch nicht. Der Steinmetz zB muss sein zeug sammeln und verarbeiten … Ich muss sehen, wie sich die KI in der Praxis anstellt, ich hoffe hier einfach, dass ich Rezepte so gestalten kann, dass die KI produziert, OBWOHL die Karren ständig Sachen auf den Markt schmeißen.

    Ich erwähne an der Stelle mal, dass TWP das Problem von einer anderen Seite angehen wird -- sobald ich mal wieder etwas Zeit finde. Die Betriebe sollen dann das Verkaufslager auch für den Handel zwischen Dynastien verwenden. Da ich dafür die Rohstofflieferungen kontrollieren muss, werde ich die Karren des Betriebs für diesen Zweck blockieren. Wenn ich dann noch den Warenverkauf per Karren selbst nachskripte, sind mehrere Probleme gelöst: Rohstoffversorgung, Verkauf und die lästigen Endprodukte, die bei Rohstofflieferanten abgelegt werden.

    Ich kann dir ggf. aber helfen, Fixes und Änderungen von 0.96 in deine Mod zu porten, sodass man nach wie vor die Wahl hat, entweder das "reine" MMP 0.96 zu spielen oder eben mit TWP. Der Vorteil ist, dass du deine angestrebte Richtung verfolgen kannst und ich weiter meine, ohne, dass wir uns da gegenseitig in die Quere kommen ;) Vielleicht gefällt dir so manche radikale Änderung meinerseits ja auch gar nicht ;)

    Stimmt schon ;) Dann sollte aber auch die nächste TWP-Version ohne eine vorige Installation des MMP auskommen. Und die beiden Mods können voneinander profitieren, solange wir Änderungen sauber dokumentieren.

    Interessant ... kannst du mir ja via PN erklären. Wobei ich anderes gerade dringlicher finde :) (zB wie man deine Verkaufstheken-Mod am Besten integriert ...)

    Für dich dringlicher, für mich liegt die Verkaufstheke ja gewissermaßen schon in der Vergangenheit ;)


    Das Integrieren der Verkaufstheke in MMP ist sicherlich sinnvoll, aber durch die vielen notwendigen Eingriffe in vorhandene Skripte eben nicht trivial. Zumal ich in dem Zeitraum auch nicht ausschließlich an der Theke gearbeitet habe bzw. einige Fixes erst im späteren Verlauf der Mod dazukamen.


    Denk doch mal drüber nach, ob sich das Farm-Rework nicht eher auf MMP+TWP 0.95.5 aufsetzen lässt. Hast du die veränderte KI mal probe gespielt?


    @Jollina Du hattest bei deinem damaligen Test glaub ich einen älteren Versionsstand der TWP-Mod erwischt, hast du die aktuelle mal ausprobiert?

    Heute mal zwischen Tür und Angel das visuelle Feedback bei der Viehzucht verbessert.


    Ohnehin liegt ein großer Fokus darauf, so transparent und zugänglich wie möglich die neuen Features darzustellen. Am Ende soll dieses Rework die Messlatte sein, an die sich der Rest des Spiels angleichen soll. Auch wenn diese Angleichung nur Step by Step geschehen wird

    Da bin ich ja gespannt :)


    Hast du vielleicht ein paar Screenshots zum UI? Mit der aktuellen Version der TWP-Mod sind z.B. Handelsrouten und Verkaufslager ganz gut geworden.

    wir haben es auch mit dem modpack versucht aber selbiges problem können nichtmal starten weil direkt out of sync ist

    In dem Fall waren die Spieldateien nicht identisch. Wenn ihr ohnehin im LAN seid, installiert die mod(s) einmal und kopiert dann den gesamten Spielordner auf beide Rechner. Oder macht jeden Schritt gleichzeitig nacheinander, das reduziert die Fehlerquote.


    Ich spiele recht regelmäßig mit MegaModPack und TradeWarPolitics im LAN. Die meisten Spiele gehen über mehrere Abende mit sehr seltenen OOS, vielleicht einmal am Abend.

    Hier ist kurz der OOS-Speichertrick:


    1. Beim OOS noch kurz weiterlaufen lassen, z.B. bis zum Ende einer Amtssitzung.
    2. Der Mitspieler (nicht der Host!) speichert das Spiel ab.
    3. Der Host schickt die frisch gespeicherte Spieldatei zum Mitspieler.
    4. Spiel laden, korrekte Farbe der Dynasty auswählen und starten.


    Ihr müsst trotzdem mit zunehmenden OOS rechnen im späteren Spielverlauf. Ich rate auch davon ab, an der Einstellung async_fatal etwas zu drehen -- dann könnt ihr genauso gut alleine spielen.


    Auch wenn es nicht jedermanns Geschmack sein mag, treten mit dem MegaModPack deutlich weniger OOS-Situationen auf. Wer mag, kann meinen Mod TradeWarPolitics noch dazu legen.

    Hat also gar nichts mit meinem Angestellten zu tun? War also nur Zufall, dass mein Angestellter zur gleichen Zeit starb? Das hieße im Umkehrschluss, dass das Kündigen meines Mitarbeiters nichts gebracht hat und wohl nur deshalb das Spiel weiterlief, weil die Dame nach dem nächsten Mal Spielstand neuladen einer anderen Zufalls-Tätigkeit nachging als Ihren Geliebten zu fragen und dann war dieser schon tot.


    Interessant allemal, lässt sich das beheben oder gibt's Workarounds?

    So ungefähr. Allerdings tritt der Fehler in dem Spielstand kurz vor dem Crash tatsächlich mit erschreckender Gleichmäßigkeit auf. Möglicherweise änderte das Entlassen des Angestellten etwas völlig unerwartetes. Vielleicht auch nur dadurch, dass der entlassene Angestellte sich nun plötzlich in die Gruppe derjenigen untätigen SIMs einreihte, die nun beschäftigt werden mussten. Dadurch verschiebt sich möglicherweise ein Zufallszahlengenerator um ein paar Werte und führt dazu, dass die werte Dame sich gegen das Heiraten entscheidet? Wer weiß...


    Korrigieren konnte ich das. Möchtest du es für das Spiel oder für ein Neues?

    Das war etwas unerwartet...


    Tatsächlich ist das Skript "ms_Marry.lua" für den Absturz verantwortlich. Aber die Umstände sind doch eher ungewöhnlich. Die werte Laure Ferrand versucht hier ihren Geliebten zu heiraten, aber just in diesem Moment tritt der Geliebte seinen letzten Weg an und verstirbt...