Currently Online

Latest Posts

Topic: Verbesserungsvorschlag : Kein Schiffe stapeln

Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 22:11
Posts: 248
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Widelands-Forum-Junkie
Location: Deutschland
Posted at: 2025-02-03, 16:36

EN : Improvment Suggestion : No Ship stacking

In vergangenden Mehrspieler Partien , zuletzt gegen carlie2 am 31.12.2024 , bin ich zum Schluss gekommen dass die neue Seekrieg Funktion doch noch unausgereift ist .
Außerdem hat man das auch schon in vielen Partien im Seekriegturnier 2023 gesehen .
Viel zu viel Mikro-Management und ein einziges "wer den anderen schneller mit Kriegsschiffen überschütten kann gewinnt" .
Ich habe eine simple Lösung für das Problem : An Land wird dies bereits bei Soldaten durchgeführt . Es kann sich nur ein Soldat auf einen Punkt befinden .
Genau das gleiche brauchen wir für Schiffe im allgemeinen , also nicht nur Kriegsschiffe .
Entweder man kopiert den Code für die Soldaten mit dieser entsprechenden Funktion und passt Sie an Schiffe im allgemeinen an oder ,
da ich nicht weiß wie diese Blockierung technisch gelöst wird , hier mein Lösungsvorschlag :
Bei der initalisierung der Partie wird eine neue Tabelle / ein neues Feld erstellt .
Jeder Punkt erhält eine leere String-Liste . Soldaten haben einen Blockierungsradius von 1 .
Schiffe sollten einen Blockierungsradius von 2 haben . Ich gehe mal davon aus das jede Einheit in Widelands eine eindeutige Nummer hat ,
die fortlaufend erhöht wird und immer an neu erschaffene Einheiten vergeben wird .
Das Beispiel Schiff mit der ID 1253 führt an allen Punkten im Radius von 2 um sich herum einmalig bei Erstellung des Schiffes
( Die Schiffsbaustelle wird in ein Schiff umgewandelt ) einmalig aus : "Füge Integer / String "1253" zur Integer / String Liste des Punktes hinzu .
Wenn das Schiff den Befehl erhält nach Osten zu fahren dann :
Prüfe alle 3 Punkte in Richtung Osten , außerhalb des Radius 2 , ob die Integer / String Liste der Punkte leer sind .
Prüfe alle 3 Punkte in Richtung Osten , innerhalb des Radius 2 , ob die Integer / String Liste nur die eigene ID 1253 enthält .
Eigentlich müsste man statt 6 Punkte nur 2 überprüfen aber ich bin mir da nicht ganz sicher , deshalb vorsichtshalber alle 6 .
Trifft obriges zu dann bewege um eins nach Osten . Wenn die Bewegung um eins nach Osten abgeschlossen ist ,
Füge bei allen 3 Punkten in Richtung Osten , die nun innerhalb des 2 Radius liegen die eigene ID 1253 zur Integer / String Liste hinzu .
Entferne bei allen 3 Punkten in Richtung Westen , die nun außerhalb des 2 Radius liegen die eigene ID 1253 aus der Integer / String Liste .
Trifft obriges nicht zu dann warte Beispielsweise 5 Sekunden ab und prüfe danach erneut ob nun eine Bewegung nach Osten möglich ist .
Falls das Schiff auch nach 60 Sekunden nicht weiter nach Osten sich bewegen kann , gebe eine Nachricht an den Spieler aus , dass das Schiff keinen Weg findet .
Diese Lösung führt aber auch zum Problem das wenn sich zwei Schiffe auf einer Route gegenseitig blockieren ,
das diese dann jedes mal vom Spieler manuell durch Mikro-Management entknoten werden müssen .
Um diese Art von Mikro-Management zu unterbinden , sollten Schiffe , sobald sie sich nicht mehr weiter bewegen können ,
versuchen einen Alternativen-Weg um das "Schiff-Hindernis" herum zu finden und erst wenn Sie gar keinen Weg mehr finden , dann den Spieler benachrichtigen .
Wenn der Spieler zu viele Schiffe bauen ließ und somit seine Küste verstopft der ist selbst Schuld .
Dann hat die "Schiff versenken" Funktion auch mal mehr nutzen .
Aber wenn ich es richtig beobachtet habe , gibt es bereits diese Ausweich Funktion für Schiffe , zumindest für Transport-Schiffe .

Das bringt übrigends auch die netten Taktien mit feindliche Transportschiffe zu blockieren an engstellen oder Häfen . Würde ich begrüßen .
Kann man mit der realen Welt vergleichen wo Kriegsschiffe dies Handelsschiffen auch androhen und behindern können .
Aber Sie dürfen keine Zivilen Schiffe angreifen und genau gleiches sollte auch in Widelands so bleiben . Blockieren ja , Versenken nein .

-

EN : The new Warship Function needs improvment . To much Micro-Management by Player in Warship fights .
The Solution : Similar to Land Soldiers , Ships generally , including Warships needs a Blocking Radius of 2 around the Ship ,
where no other Ship can enter the Point by moveing .
Each Point get at initzializing a new table / integer-list / string-list which is at start empty .
When the construction of a Ship is completed , the Ship send one time a add Ship-Unique-Unit-Number to all Points in Radius of 2 around the new Ship add Unit-Number .
When Ship moveing the table / list of next point is checked if it is empty . If not empty than ship try to find a alternative path to target .
If the ship cant find another alternative path to target than ship notificate the player that it cant find a path / ship moving is blocked .
If the player orders to many ships at shipyard and flooding his own coast , to the point where the ships no longer find a path ,
than the player self make the mistake and not the game . The current Function "Ship deleteing" becomes than also more usage .

This brings also the Tactic of blocking enemy civil ships at small sea points or ports . I would like that .
But similar to the real world , warships dont have the right to attack civil ships and i would say this must be also in Widelands .

icon name meaning
square_red /wlmedia/wlimages/square_red.png contra / -1
square_red /wlmedia/wlimages/square_red_green.png partially pro / +0.5
square_red /wlmedia/wlimages/square_green.png pro / +1
! [ ] ( /wlmedia/wlimages/square_green.png ) Bild einbinden
Edited: 2025-02-03, 16:57

Top Quote
kaputtnik
Avatar
Joined: 2013-02-18, 20:48
Posts: 2615
OS: Archlinux
Version: current master
Ranking
One Elder of Players
Location: Germany
Posted at: 2025-02-03, 17:37

Teayo, deine posts sind immer eine Textwand und sehr schwer zu lesen. Bitte benutze nicht <br>, und schon gar nicht nach jedem Satz. Bitte lass den Text fließen und benutze zweimal return um den Text in Absätze zu gliedern. Bitte benutze Listen um abfolgen darzustellen. Das ist natürlich nur ein Vorschlag, du kannst schreiben wie Du willst, aber damit erhöhst Du die Chancen das deine posts auch gelesen und vor allen Dingen verstanden werden.

Zum Thema: Es gibt etliche Dinge rund um marine Kriegsführung die noch offen sind. Kannst ja mal hier gucken.


Top Quote
Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 22:11
Posts: 248
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Widelands-Forum-Junkie
Location: Deutschland
Posted at: 2025-02-03, 19:33

@kaputtnik

EN : Improvment Suggestion : No Ship stacking

In vergangenden Mehrspieler Partien , zuletzt gegen carlie2 am 31.12.2024 , bin ich zum Schluss gekommen dass die neue Seekrieg Funktion doch noch unausgereift ist . Außerdem hat man das auch schon in vielen Partien im Seekriegturnier 2023 gesehen . Viel zu viel Mikro-Management und ein einziges "wer den anderen schneller mit Kriegsschiffen überschütten kann gewinnt" . Ich habe eine simple Lösung für das Problem : An Land wird dies bereits bei Soldaten durchgeführt . Es kann sich nur ein Soldat auf einen Punkt befinden . Genau das gleiche brauchen wir für Schiffe im allgemeinen , also nicht nur Kriegsschiffe . Entweder man kopiert den Code für die Soldaten mit dieser entsprechenden Funktion und passt Sie an Schiffe im allgemeinen an oder , da ich nicht weiß wie diese Blockierung technisch gelöst wird , hier mein Lösungsvorschlag :

  • Bei der initalisierung der Partie wird eine neue Tabelle / ein neues Feld erstellt . Jeder Punkt erhält eine leere String-Liste .
  • Soldaten haben einen Blockierungsradius von 1 . Schiffe sollten einen Blockierungsradius von 2 haben .
  • Ich gehe mal davon aus das jede Einheit in Widelands eine eindeutige Nummer hat , die fortlaufend erhöht wird und immer an neu erschaffene Einheiten vergeben wird .
  • Das Beispiel Schiff mit der ID 1253 führt an allen Punkten im Radius von 2 um sich herum einmalig bei Erstellung des Schiffes ( Die Schiffsbaustelle wird in ein Schiff umgewandelt ) einmalig aus : "Füge Integer / String "1253" zur Integer / String Liste des Punktes hinzu .

Wenn das Schiff den Befehl erhält nach Osten zu fahren dann :

  • Prüfe alle 3 Punkte in Richtung Osten , außerhalb des Radius 2 , ob die Integer / String Liste der Punkte leer sind .
  • Prüfe alle 3 Punkte in Richtung Osten , innerhalb des Radius 2 , ob die Integer / String Liste nur die eigene ID 1253 enthält .
  • Eigentlich müsste man statt 6 Punkte nur 2 überprüfen aber ich bin mir da nicht ganz sicher , deshalb vorsichtshalber alle 6 .

Trifft obriges zu dann bewege um eins nach Osten . Wenn die Bewegung um eins nach Osten abgeschlossen ist ,

  • Füge bei allen 3 Punkten in Richtung Osten , die nun innerhalb des 2 Radius liegen die eigene ID 1253 zur Integer / String Liste hinzu .
  • Entferne bei allen 3 Punkten in Richtung Westen , die nun außerhalb des 2 Radius liegen die eigene ID 1253 aus der Integer / String Liste .
  • Trifft obriges nicht zu dann warte Beispielsweise 5 Sekunden ab und prüfe danach erneut ob nun eine Bewegung nach Osten möglich ist .
  • Falls das Schiff auch nach 60 Sekunden nicht weiter nach Osten sich bewegen kann , gebe eine Nachricht an den Spieler aus , dass das Schiff keinen Weg findet .

Diese Lösung führt aber auch zum Problem das wenn sich zwei Schiffe auf einer Route gegenseitig blockieren , das diese dann jedes mal vom Spieler manuell durch Mikro-Management entknoten werden müssen . Um diese Art von Mikro-Management zu unterbinden , sollten Schiffe , sobald sie sich nicht mehr weiter bewegen können , versuchen einen Alternativen-Weg um das "Schiff-Hindernis" herum zu finden und erst wenn Sie gar keinen Weg mehr finden , dann den Spieler benachrichtigen . Wenn der Spieler zu viele Schiffe bauen ließ und somit seine Küste verstopft der ist selbst Schuld . Dann hat die "Schiff versenken" Funktion auch mal mehr nutzen . Aber wenn ich es richtig beobachtet habe , gibt es bereits diese Ausweich Funktion für Schiffe , zumindest für Transport-Schiffe .

Das bringt übrigends auch die netten Taktien mit feindliche Transportschiffe zu blockieren an engstellen oder Häfen . Würde ich begrüßen . Kann man mit der realen Welt vergleichen wo Kriegsschiffe dies Handelsschiffen auch androhen und behindern können . Aber Sie dürfen keine Zivilen Schiffe angreifen und genau gleiches sollte auch in Widelands so bleiben . Blockieren ja , Versenken nein .

-

EN : The new Warship Function needs improvment . To much Micro-Management by Player in Warship fights . The Solution : Similar to Land Soldiers , Ships generally , including Warships needs a Blocking Radius of 2 around the Ship , where no other Ship can enter the Point by moveing . Each Point get at initzializing a new table / integer-list / string-list which is at start empty . When the construction of a Ship is completed , the Ship send one time a add Ship-Unique-Unit-Number to all Points in Radius of 2 around the new Ship add Unit-Number . When Ship moveing the table / list of next point is checked if it is empty . If not empty than ship try to find a alternative path to target . If the ship cant find another alternative path to target than ship notificate the player that it cant find a path / ship moving is blocked . If the player orders to many ships at shipyard and flooding his own coast , to the point where the ships no longer find a path , than the player self make the mistake and not the game . The current Function "Ship deleteing" becomes than also more usage .

This brings also the Tactic of blocking enemy civil ships at small sea points or ports . I would like that . But similar to the real world , warships dont have the right to attack civil ships and i would say this must be also in Widelands .

Ist das so besser ?

Ich habe in dieser Nachricht keine >br< genutzt und auch Abfolgen mit "-" gelistet . Also bei mir sieht das jetzt schrecklich schlecht lesbar aus .

Bezüglich des Themas , so habe ich auf den Github Link von dir gesehen dass das Problem bereits in Behebung ist , was mich freut .


Edited by kaputtnik: Listen benötigen jeweils eine Leerzeile oben und unten. Ich hoffe ich habe den Post nach deinen Wünschen korrigiert und die Beschreibung in Wikisyntax angepasst.

Edited: 2025-02-03, 20:21

Top Quote
kaputtnik
Avatar
Joined: 2013-02-18, 20:48
Posts: 2615
OS: Archlinux
Version: current master
Ranking
One Elder of Players
Location: Germany
Posted at: 2025-02-03, 20:23

Listen benötigen jeweils eine Leerzeile oben und unten. Ich hoffe ich habe den Post nach deinen Wünschen entsprechend korrigiert und die Beschreibung in Wikisyntax angepasst.

Das ist besser, imho face-smile.png Danke!


Top Quote
Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 22:11
Posts: 248
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Widelands-Forum-Junkie
Location: Deutschland
Posted at: Yesterday 21:10

Aus diesen Thread ist noch keine Entscheidung zum Verbesserungsvorschlag das sich Schiffe nicht stapeln dürfen , ersichtlich .

Referenzen

Wiki - Game improvement Suggestions - id 001

Github - Marinekrieg Update - Projekt Übersicht Aufgaben

Github - Issue #1408 - Schiffe können an derselben Stelle sein - hessenfarmers Comment vom 15.06.2023

hessenfarmer schrieb auf Github :

Ich denke, die meisten von uns würden zustimmen, keinen zusätzlichen Code zum Ausweichen hinzuzufügen, aber das ist immer noch ärgerlich, selbst wenn man den Workaround mit dem Schiffsfenster berücksichtigt. Vielleicht könnten wir uns andere Maßnahmen überlegen, um die verschiedenen Schiffe auf einem Knoten optisch und inhaltlich voneinander zu unterscheiden. Ich dachte an spezielle Animationen von Schiffen, die nebeneinander auf einem Knoten liegen. Das heißt, die Leerlaufanimation so zu ändern, dass die Schiffe nach Norden oder Süden zeigen (so wären auch Leerlaufschiffe leicht zu erkennen, da wir uns nicht in diese Richtungen bewegen können) und etwas Code hinzuzufügen, um den X-Hotspot für jedes der Schiffe auf einem Knoten zu verschieben, um sie nebeneinander zu platzieren. Dafür müsste allerdings eine Beschränkung der Anzahl der Schiffe vorgenommen werden, die auf einem Punkt erlaubt sind (ein sinnvoller Wert wäre 3).

Ich finde den von hessenfarmer auf Github beschriebenen Lösungsweg schlecht. Sein Lösungsweg ist ein Kompromis mit maximal 3 Schiffen pro Punkt.

Ich schlage vor maximal 0.5 Schiffe pro Punkt , also das sich die Schiffe gar nicht Stapeln und zwischen zwei Schiffen ein freier Punkt ohne Schiff sein sollte .

Das würde dann auch von den Grafiken funktionieren . Hängt ja auch mit dem True-Scale Problem der Grafiken zusammen .

Die Grafiken der Schiffe sind nunmal sehr groß .

Ich begrüße es wenn das Spiel mehr logisch aussieht und mehrere Schiffe auf einen Haufen sehen nicht logisch aus und zusätzlich überlappen sich die Grafiken der Schiffe bei einen Punkt Abstand .

Wie man meinen Lösungsvorschlag umsetzen könnte / Anreize dazu , siehe dazu mein ersten Beitrag in diesen Thread der aber von kaputtnik als Textwand beschrieben wird .


Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 23:16
Posts: 2764
Ranking
One Elder of Players
Location: Bavaria
Posted at: Today 17:43

Das Problem ist ja längst bekannt. siehe den verlinkten Github Eintrag.
Die Lösung ist allerdings nicht trivial:
1. man kann keinen Code von Soldaten kopieren, weil Soldaten auch auf einem Punkt sein können. (zur Verdeutlichung kann man ein 2 Soldaten Gebäude abreißen und beide Soldaten werden wie ein einziger immer auf der glechejn Stelle im Gleichschritt zum nächsten Lagerhaus marschieren)
2. ist die vorgeschlagene Lösung aus meiner Sicht ein Performancekiller.

Nichtsdestoweniger ein vorsichtigers +1 für einen (noch zu entwickelnden) performanten Algorithmus zur Realisierung einer Blocking / Aus dem Weg Funktion. auch ein +1 für die daraus entstehende Blockadetaktik.

Allerdings kann das u:U. sehr lange dauern bis zu einer evtl. Implementierung, da in der Prio imho doch eher weiter hinten.


Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 23:16
Posts: 2764
Ranking
One Elder of Players
Location: Bavaria
Posted at: Today 17:47

Teayo wrote:

Wie man meinen Lösungsvorschlag umsetzen könnte / Anreize dazu , siehe dazu mein ersten Beitrag in diesen Thread der aber von kaputtnik als Textwand beschrieben wird .

Nur weil @kaputtnik den ersten Post in seiner ursprünglichenh Form zu recht als Textwand klassifizierte, muss man das imho nicht in jedem Post wiederholen. Dies stellte ja primär keine inhaltliche Kritik dar sondern eine Kritik an der Formatierung.
Es erleichtert die Motivation einen Post zu lesen erheblich wenn er strukturiert formatiert ist. Wenn man also möchte, dass Beiträge auch gelesen werden, bietet es sich an ein wenig Rücksicht auf das Befinden der Leserschaft zu nehmen.


Top Quote
Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 22:11
Posts: 248
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Widelands-Forum-Junkie
Location: Deutschland
Posted at: Today 18:04

Oke gut zu lesen das man die Absicht hat das Problem mit den Schiff stacking zu lösen . Die Priorität ist mir egal , dass das lange dauern kann damit habe ich kein Problem .

Ich habe noch eine Frage bezüglich meines Addons , zu den Wirtschaftsvorgaben :

ich kann bei keiner einzigen Ware eine Wirtschaftsvorgabe im Spiel vorgeben , dafür jedoch bei allen Arbeitern .

Liegt das daran das ich in der units.lua im Abschnitt wares_order bei allen Waren die Eigenschaft default_target_quantity=0 habe ?

Aber diese Eigenschaft habe ich auch bei allen Arbeitern , also kann es das auch wiederum irgendwie nicht sein .

Ich bin maximal verwirrt aber ich habe mich erstmal der Lösung anderer Probleme verschrieben .


Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 23:16
Posts: 2764
Ranking
One Elder of Players
Location: Bavaria
Posted at: Today 21:43

Teayo wrote:

Ich habe noch eine Frage bezüglich meines Addons , zu den Wirtschaftsvorgaben :

ich kann bei keiner einzigen Ware eine Wirtschaftsvorgabe im Spiel vorgeben , dafür jedoch bei allen Arbeitern .

Liegt das daran das ich in der units.lua im Abschnitt wares_order bei allen Waren die Eigenschaft default_target_quantity=0 habe ?

Aber diese Eigenschaft habe ich auch bei allen Arbeitern , also kann es das auch wiederum irgendwie nicht sein .

Wie soll jemand im Forum diese Information in diesem Thread finden?
Sorry aber diese Frage hat nichts mit dem Topic zu tun.
Bitte stelle sie doch in einem neuen Thread in einem geeigneten Forum z.B. "Technical Help" oder "Add-Ons"


Top Quote