Return-To-The-Roots / s25client

Return To The Roots (Settlers II(R) Clone)
http://www.rttr.info
GNU General Public License v2.0
477 stars 75 forks source link

[addon] Improve distribution of goods / pathfinding for goods #87

Open Spikeone opened 9 years ago

Spikeone commented 9 years ago

Ich hatte gerade eine Idee:

Wenn ein Gebäude/Baustelle eine Ware anfordert, sollte zuerst in der Liste der Waren, die auf dem Weg zu einem Lagerhaus sind geschaut werden (und dort die nähste) mit der Entfernung des Warenhauses verglichen werden, und nur dann die Ware aus dem Warenhaus angefordert werden, wenn die "einzulagernde" nicht näher ist.

z.B: Goldmünze wird in Lagerhaus an Burg vorbeitransportiert -> Burg fordert an (bei Warenhaus) - dabei könnte man die Münze direkt umleiten.

Evtl zuerst nähstes Warenhaus suchen, dann alle "eingehenden" Waren auf Entfernung prüfen?

Spike (fvv1) wrote on 2014-05-13: #1 Hat so aber, soweit ich weiß, nicht im originalen Spiel funktioniert.

FloSoft (flosoft) wrote on 2014-05-13: #2 würde es aber für den multiplayer interessanter machen, vor allem bei sehr großen karten kanns dir sonst passieren das er die ware vom ADW anfordert ;)

jh (janhenrikk) wrote on 2014-05-15: #3 Kann man im Prinzip noch weiter treiben:

Annahme: Eine Baustelle hat x Bretter angefordert und diese sind aus einem Lagerhaus vom ADW unterwegs. Jetzt produziert ein Sägewerk direkt neben der Baustelle ein Brett. Dieses Brett könnte direkt zur Baustelle geliefert werden und eins der x Bretter vom ADW-Lagerhaus kann umdrehen.

Ist bestimmt aufwändig zu prüfen =)

Spike (fvv1) wrote on 2014-05-23: #4 Das stimmt natürlich, dass das den Multiplayer interessanter machen würde/könnte - was mir bisher aber an dem Projekt gefallen hat ist, dass tatsächlich bis auf wenige Ausnahmen fast alles so wie im originalen Spiel funktioniert und genau das Feeling auch aufkommt. Wenn man das natürlich schöner lösen könnte mit Modulen oder so, sprich man kann auswählen welcher Wegfindungstyp im Spiel angewandt wird (also so gut einstellbar wie in OttD glaube ich) dann wäre das perfekt finde ich.

https://bugs.launchpad.net/s25rttr/+bug/1319094

MarcusSt commented 8 years ago

Ich würde das maximal als Addon basteln, da die verbesserte Wegfindung mit großer Wahrscheinlichkeit auch kostenintensiver wäre und sich natürlich vom Original unterscheidet.

Flamefire commented 8 years ago

Im Prinzip kann sich das gut in die Bestellung einordnen: Suche nächstes WH, gehe alle Knoten in Entfernung des WH durch (Radius), ob dort die Ware liegt/transportiert wird und versuche die zu kriegen, wenn die auf dem Weg zu einem WH ist. Besser wahrscheinlich: Gehe alle Waren dieses Typs durch, die auf dem Weg zu einem WH sind und order die mit einer maximalen Länge, die der des WH entspricht

Shawn8901 commented 6 years ago

@Flamefire Ich mag die Idee, dass man Waren, die auf dem Weg zum WH sind umleitet. Gehe ich richtig davon aus, dass man diese Logik aber in OrderWare als Addon realisieren sollte (also die alte Logik ebenfalls zu behalten)? Ansonsten könnte man die gesamte Logik der Warenbestellung einfach darauf hin umstellen. Es gibt ja bereits die Logik "verlorene" Ware zu suchen. Diese müsste man dann nur leicht umbauen.

Flamefire commented 6 years ago

Ja ich würde das definitiv als Addon lösen. Wie @MarcusSt schon sagt: Es erfordert zusätzliche Rechenzeit und unterscheidet sich vom Original (nur Waren aus Lagerhaus oder Produktionsstätte holen) Man muss bei der Implementierung drauf achten, dass bei deaktiviertem Addon es nicht langsamer wird. Die Logik also am besten so weit oben wie sinnvoll möglich anbieten. Dann ist der Overhead nur 1 zusätzliche Abfrage.

Shawn8901 commented 6 years ago

Okay, ich denke ich habe eine ganz nette Lösung gefunden. Dafür habe ich den Code aber etwas umstrukturieren müssen (dafür ist er meiner Ansicht dann aber übersichtlicher). Ich überlege noch an einem Unit-Test für die Situation und werde dann mal einen PR vorbereiten.