Posts by ThreeOfMe

    The TradingRoutes mod introduces quite a few features that will make your Guild 2 life much easier. These are invaluable once you own several businesses since they enable you to manage a large number of buildings on your own.


    I will give some base information on the features and state a few examples. I'll include the German translations for specific actions where appropriate.


    Global route settings
    The first dialog allows you to set global options and add new buildings/waypoints (Gebäude bzw. Wegpunkte) to the route. This is also where you finish the setup.


    The sale threshold (Verkaufsniveau) is set to 0% by default. This value is used for sales at the market. If the current market value of the goods is lower then this threshold, no goods will be sold. I rarely use this since market prices tend to drop eventually once your business is going well or taxes go up. I recommend marking the market as "not important" when using this feature.


    Most of you will know the interval setting from the Vanilla routes. I made only minor changes to this feature:

    • The available options include "Just once" and the 4/8 hours wait has been changed to 6 hours/12 hours.
    • The cart will now wait at the end of the route, not at the beginning. This allows for the cart to get going right away.


    Setting up a waypoint
    Whenever you stop at the market you get the usual two options "Load" (Einladen) and "Unload" (Ausladen). Both options ask you to select the item type and the amount of items you expect on the cart. This is somewhat different to the Vanilla routes:

    • If you load 20 wheat at two different waypoints there will only be 20 wheat on the cart. Load 40 wheat at the second waypoint to get 40 wheat onto the cart.
    • When unloading, make sure to select "0" if you want to sell all items. This is the amount that remains on the cart.

    One of the most wanted features was "Resupply" (Versorgen) for workshops. This will drop as many items as necessary to reach the specified amount in your workshop -- and not more! There will usually be items left on the cart after this action -- sell them, store them or wait.


    Important or not important?
    It would be quite annoying if your carts kept going back and forth without anything useful to do (say, at night). That's why I introduced the "important" (wichtig) marker at waypoints. Let's look what that does to the actions:

    • Load: The cart will stay until it contains given amount of items. This is useful for buying rare ressources at the market (i.e. leather) or waiting for production to finish.
    • Unload: The cart will stay until everything was sold as requested. This is only useful if you are using a sale threshold.
    • Resupply: The cart will stay until it runs out of items to resupply. Note that this overrides load and unload -- if the cart runs out of items it will not wait for the other load/unload actions to finish.


    Warning messages
    Whenever a cart is unable to finish a waypoint for more than 12 hours, a message will pop up to inform you. These are the options you have:

    • "I will take care of it!": Gives you time to get production going again. Next warning will pop up in 12 hours.
    • "Send it on rightaway!": Overrides the important marker for now. The cart moves on to the next waypoint.
    • "Never mind, he is used to that!": Increases time until warnings by 12 hours for this route.
    • "Why do you bother me? Please refrain from warning me!": Disables warnings for this route.


    Examples


    Supply a tavern from market:


    Supply a tavern from your farm and sell the rest (horse cart):


    I'd be glad to see your examples for trading routes! Ever tried to trade the rare goods from counting houses this way? ;)


    @ German community: Wenn jemand Lust zum Übersetzen hat, gerne melden :)

    Hallo Horsti,


    auch von mir vielen Dank für das positive Feedback! Mich würde noch interessieren, welche Version der Handelsrouten-Mod du hattest? Der Sprung von 0.5 auf 0.6 war relativ groß.


    Viele Grüße
    ThreeOfMe

    Beim Einkauf ist es ja eher eine Preissteigerung als ein Preisverfall. Und ein Stöberfaktor kommt spätestens beim fünften Spiel wohl kaum noch auf am Markt. Da will ich v.a. einfach mal ein paar Waren einkaufen und dafür möglichst wenig Geld ausgeben.


    Der einzige Fall, in dem ich am Markt keine "runden" Mengen (1, 5, 10, 20) einkaufe ist, wenn ich die Zahl nicht treffe.

    Da habe ich eine Idee... danke


    In Anlehnung an die Handelsrouten würde ich das "Karren versenden" erweitern um "Einladen und zurückfahren". Die Auswahl von Warentyp und Menge kann erfolgen wie bei der Handelsroute und mehrere Warentypen können eingeladen werden. Dabei wird auch der Feilschenbonus berücksichtigt.


    @Fajeth Na, Interesse? Schieberegler ade!

    Der Gebäudekauf und -bau sieht schon recht gut aus -- wenn auch manchmal noch etwas zu enthusiastisch. Die Auswahl des Gebäudetyps muss allerdings noch intelligenter werden. Zuweilen hatte ein Dorf vier Kirchen.

    Servus,


    ich sehe den Gebäudeangriff zwar als eines der kleineren Probleme, aber hier ist der Link zum Bugreport:
    Bugreport: Angriff auf Gebäude


    Der Quelltext aus meinem Kommentar 3 enthält die Korrektur (ID auf 81 ändern).


    Stellt in jedem Fall sicher, dass alle Eure Spieldateien identisch sind. Also macht am besten einer von euch die Änderung und stellt sie den anderern Mitspielern bereit.

    Kaum macht man es richtig... Ich hatte ausgerechnet die MessageClass verwendet, die ich im Spiel gefiltert habe. Ich hänge meinen Test-BaseTree als ZIP an. Alle weiteren Dateien habe ich gelöscht, um die Auswirkungen genauer beobachten zu können.


    Hier ist das Ergebnis im Spiel:


    Und meine Interpretation:

    • Die Datei "AIScripts.dbt" wird völlig ignoriert. Es werden einfach alle Skripte ausgeführt, die direkt im BaseTree liegen. Unterordner benötigen ein gleichnamiges Skript für die Entscheidung, ob die darin enthaltenen Skripte ausgeführt werden.
    • Ein Skript mit Weight() == 0 wird in keinem Fall ausgeführt. Das gilt auch, wenn kein weiteres Skript vorhanden ist.
    • Die Weight-Funktionen der Skripte werden tatsächlich zuerst aufgerufen und anschließend verarbeitet. Jeder Durchlauf führt auch tatsächlich ein Skript aus (Ausnahme: Alle Weight-Funktionen ergeben 0).
    • Insgesamt gehe ich davon aus, dass tatsächlich der Algorithmus aus meinem vorigen Kommentar verwendet wird.
    • Die AI-Dynastien (farbig und Schatten) werden sequentiell (nacheinander) und ohne Pause abgearbeitet. Die Abarbeitung ist dabei so schnell, dass selbst mehrere Sleep(100) nur wenig Druck aus den Nachrichten nehmen.
    • Auf die Aktuelle Dynastie wird in den vorhandenen Skripten per Alias "dynasty" zugegriffen. Welche Aliase sonst verfügbar sind und wie Daten an unterliegende Skripte weitergereicht werden, ist mir noch unklar. @Fajeth weißt du da mehr?

    Beim durchforsten und ausprobieren konnte ich noch keine realen Fortschritte erzielen.


    Ich hatte vor, ein "MsgNewsNoWait" an alle Spieler zu schicken, um die Ausführung eines Skriptes zu erkennen. Allerdings wird das nicht ausgeführt. Auch dort, wo ein "LogMessage" im Skript steht, finde ich keine Einträge im Log.


    Wie lassen sich KI-Skripte also testen -- also die Ausführung erzwingen und erkennen?

    Werden die DBT-Einträge in "AIScripts.dbt" und "AICharacterTypes" irgendwo ausgewertet? Die scheinen mir ja der Ausgangspunkt zu sein für die AI-Verarbeitung. Ich verstehe die aber grad so, dass lediglich die drei Ordner "CheckDynsasty", "CheckGuildHouse" und "CheckMyrmidon" abgearbeitet werden.


    Bezüglich der Skriptauswahl. Eine Gewichtung von ansonsten gleichwertigen Skripten kann n.m.E. nur so sinnvoll erfolgen:

    • Gleichwertige Skripte ermitteln (z.B. in CheckDynasty/Attack die Skripte High, Medium und Low)
    • Weight() auf den Skripten aufrufen, um Gewichtungen zu ermitteln. (z.B. 10, 50, 100)
    • Gewichtungen zusammenaddieren (10 + 50 + 100 = 160 = n)
    • Jedem Skript wird ein Intervall zwischen 0 und n zugeordnet, der seiner Gewichtung entspricht (high=1--10, medium=11--60, low=61--160).
    • Zufällig wird eine Zahl zwischen 1--n (x = Rand(n) + 1) ermittelt.
    • Es wird dasjenige Skript ausgeführt, in dessen Intervall x liegt. Oder Im Fall eines gleichnamigen Unterordners wird das Verfahren für die nächste Skript-Ebene fortgesetzt.

    Das Ganze sollte sich in C++ auch einigermaßen effizient implementieren lassen.

    Loading an existing savegame will not work when you change the underlying game files, i.e. install the mod.


    New game should be possible though. What kind of installation did you install tje mod into? Version 4.211? If the crash still happens once you checked your language (see below), post here again.


    What language do you play the game in? There is currently a German and an English download. Make sure your value in config.ini for the language matches the header line in Text.dbt (i.e. english).