MeisterTrainerForum

Bitte loggen sie sich ein oder registrieren sie sich.

Einloggen mit Benutzername, Passwort und Sitzungslänge
Erweiterte Suche  

Autor Thema: fmteamtool  (Gelesen 2880 mal)

narwal

  • Bambini
  • *
  • Offline Offline
fmteamtool
« am: 19.Dezember 2015, 15:37:59 »

Der Quellcode befindet sich im Anhang dieses Posts.

Edit: Ach ja, das hier unterstützt insgesamt keine Torhüter. Weil… Gründe!

Edit 2: Falls es so was in der Art schon in gut gibt, vergesst das hier einfach. Ich habe überhaupt nichts vorher (oder nachher) recherchiert. :)

Hi.

Das hier bezieht sich auf den FM2012, passt aber möglicherweise auch auf neuere Versionen oder ist leicht anpassbar, falls sich an den Attributen, Positionen, Rollen und Aufgaben („duty“, weiß nicht, wie es auf Deutsch heißt) für Spieler nichts oder wenig geändert hat.

Ich habe im Laufe der Zeit einige kleine Helferlein programmiert, um mir das Verwalten meiner Teams zu erleichtern oder um zumindest mehr Spaß an der Sache zu haben. Einen Teil davon möchte ich hier für jeden frei nutzbar (WTFPL) zur Verfügung stellen. Es handelt sich um ein PHP-Tool mit dem einfallsreichen Namen fmteamtool, das eine Datei mit Spielerdaten und eine Datei mit einer taktische Aufstellung als Eingaben annimmt und daraus ein HTML-Dokument mit Analysen dazu generiert.

Ich mache mal ein Beispiel.

Das hier ist das aktuelle Team von Nîmes Olympique aus meinem letzten Spielstand im vom Tool erwarteten Format:

format = en

Luis  Díaz (DL, ML)
13 16 12  6 16 15  7  9 15 17 16 14 17 16
 5 16  7 15 17 15 15 20  6 17 16 16 16 16
16 13 13  3 15 17 15 14

Ralph  Thompson (DL)
 6 11 10  4 16  3 12  7 17 14 15 10 18 11
15 17 16 14 15 13 18 15  7  7 10 17 13 17
15 17 14 16 10 16 15 16

Robert  Poole (DC)
 7  5  5  5 11  3 18  4  6 19  7  7 17  7
12 16 15 15 15  8 17 17  4 16 14 19 12 15
16 18 17 13 16 20 15 16

Denis  Bocchini (DC)
10  7  4  3 10  8 18  6  4 13  9  9 18  9
14 12 17  9 12 11 14 14  6 12  7 13 12 15
17 17 17 12 14 17 13 13

Simon  Bentley (DC)
 5  8  7  2 10  6 18  4  6 18 13 13 16  9
15 19 12 16 18 10 18 15  6 19 12 19 16 20
18 18 16 15 16 17 14 16

Pedro  José (DR, DC)
10  8  6  2 15  8 15  2  4 18 14 10 17 14
14 17 11 18 14  7 17 16  6  6 10 18 16 13
14 16 16 16 15 14 12 13

Martin  Jindrich (DL, DR)
 7  7  7  5 15  5  9  6  7 16 11 10 18 15
12 15 14 10 14 15 15 16  5  8  8 16 12 15
14 16 15  5 14 18 12 12

Lassina  Ouattara (DC, DM, MC)
11 10 12  9 17 15 14 13 10 13 18 10 18 17
 8 17 18 16 14 15 14 15  9 11 11 14 12 17
17 15 13  5 15 16 12 14

Steve  Bristow (MC)
 5  9  9  8 17  6  7 10  3 14 16 15 15 15
16 13 11 13 13 15 10 17 10  8  9 10 12 15
19 13 13 12  5 16 12 14

Marco  Rudolph (DM, MC)
11 10  9  8 17  8  6 11  2 12 18  5 14 19
11 13 13 15 13 18 14 16  7 17 17 18 14 15
15 19 16 13 16 15 13 14

Jean  Guerin (MC)
 8 12 13 13 16  7 18 14  9 14 19 16 13 19
 7 11  8 15 12 19 11 19 11  8 13 13 12 16
19 18 18  8 11 18 14 12

Andy  Saunders (MC)
 6  5 12  8 14  3  8 11  2  8 15  5 12 12
 9 11  8  9 12 15  8 12 14  4  9  5 17 17
15 13 10 10 13 16 13  6

Werner  Gärtner (AML, AMC, ML)
13 16 16 11 17  9 12 12 11  6 16 13  5 16
10 18 12 12 15 19 16 17 17 17 18  8 12 14
16 17 15  9 13 18 12 13

Baptiste  Palcani (AML, AMR)
 5 19 14 12 17  7  5 10  4  5 17 10  2 15
 8 16  9 17 14 17 16 14 16 13 17  8 11 13
12 15 18  6 17 13 12 12

Andrew  Proudlock (AML, AMR, ST)
14 14 14 14 15  9 12 11  3  4 16 15  7 14
 7 14  7 16 12 12 17 16 10 12 16  7 12 14
15 15  8 12  9 16 11 13

Ángel  Luis (AMC, MC)
13  7 14 12 17 14 10 13  9  6 19  2  8 18
 7 15  6 14 10 17 17 19 13 14 16 11 11 14
19 19 17  3 20 19 13 15

Patxi  Alkorta (AMC, MC)
 8 11 16 13 17  7 10 14  5  7 18 18  6 18
 9 12  5 10 12 19 14 20 15  6 17 10 16 16
17 16 12  4 12 20 15 14

Damien  Myers (AMR, MR)
13 19 16 13 18 12  9 10  5  6 16 15  4 18
 7 19  9 17 18 20 14 18 19 11 19  7 13 18
15 18 18  5 15 17 14 11

Alan  Harvey (ST, AMR, AML)
 8 17 17 13 16  9 14  9  2  3 11  9  2 19
14 16  8 17 13 19 15 16 17 14 17  6 16 15
19 19 17 11 15 17 13 16

Jesús  Espinosa (AMC, ST)
16 16 16 19 18 17 16 13  7  7 18 15  4 18
 8 19 11 18 15 17 18 14 15 14 18 11 12 16
14 16 19  6 13 14 14 12

Gabriel  Ramage (ST)
11 13 16 16 18 12 14 10  9  6 18  8  6 15
12 14 13 14 13 15 11 14 18 13 17  9 11 10
17 16 14 14 14 17 13 18

Ross  Gilchrist (ST)
13 11 17 15 14 13 12 11  4  8 12  7  8 15
 5  8  5 16 10 15 13 17 13 11 17  7 11 13
18 16 12  8 10 16 12  8

Das hier ist eine Taktikdatei:

# Duvels' reincarnation v2.2
# http://www.thedugout.net/community/showthread.php?t=81755

DL-FB-auto
DC-CD-D
DC-CD-D
DR-FB-auto

MC-BWM-D
MC-DLP-S

AML-AP-A
AMC-AM-A
AMR-W-A

ST-P-A

Sagen wir mal, dass die Dateien als nimes.txt beziehungsweise duvel.txt vorliegen. Dann sieht der Aufruf des Tools in etwa so aus:

$ ./fmteamtool nimes.txt duvel.txt > out.html
Das ist für eine Linux-Konsole. Das Tool sollte grundsätzlich auch unter anderen Betriebssystemen laufen, aber konkrete Anleitungen dazu kann ich nicht liefern, weil ich nur sehr umständlich Zugriff auf andere Systeme haben.

Hier ein Screenshot der generierten HTML-Ausgabe:

- http://www.ld-host.de/uploads/images/d3950d8a6dce5070a4f81a5b49d800ec.jpg (Mirror: http://i.imgur.com/2Ym8ruO.jpg)

Der meines Erachtens wesentliche Teil der Ausgabe ist die Tabelle ganz oben. Der Rest ist eine Auflistung der einzelnen Spieler und ihrer Stärken auf den von ihnen spielbaren Positionen (ungeachtet der Taktik) sowie eine allgemeine Liste der relevanten Attribute für jede im Spiel mögliche Kombination aus Position, Rolle und Aufgabe.

Die Tabelle ist grundsätzlich so zu verstehen wie diese Tabellen auf etwa transfermarkt.de, in denen ein Kader nach Positionen dargestellt ist:

- http://www.transfermarkt.de/fc-barcelona/kadernachposition/verein/131

Ich halte das für eine sehr vorteilhafte Darstellung, um einen informativen Überblick über einen Kader zu erhalten.

Das Tool listet dabei jedoch nicht alle möglichen Positionen auf, sondern nur diejenigen Positionen, die in der übergebenen Taktik existieren.

Dafür errechnet das Tool anhand der Attribute eines Spielers eine „Spielstärke“ für jeden Spieler für jede in der Taktik enthaltene Kombination aus Position/Rolle/Aufgabe. Der Algorithmus dafür ist unspektakulär: „Bilde den Mittelwert aller Attribute, die das Spiel für diese Position/Rolle/Aufgabe als wichtig markiert.“ Die Stärken für Positionen, die ein Spieler beherrscht, sind in der Darstellung fett markiert. Die übrigen Werte errechne ich mehr spaßeshalber und um vielleicht eine Idee zu bekommen, ob man einen Spieler umschulen könnte.

Die vier Spalten tec, men, phy und sum stellen die Summe aller technischen, mentalen und physischen sowie insgesamt aller Attribute dar. (Auf den höchsten Gesamtwert, der mir bislang untergekommen ist, kommt ein MC/AMC mit 547 Punkten. Das ist ein Schnitt von 15.2 pro Attribut.)

Zur Sinnhaftigkeit solcher Zahlen möchte ich an dieser Stelle nur sagen, dass einerseits natürlich Aussagekraft verloren geht, wenn alle Attribute gleich stark gewichtet oder einfach addiert werden, dass das letztlich aber dennoch nicht unproduktiv ist, weil Position/Rolle/Aufgabe die wichtigen Attribute recht genau eingrenzen und weil es wirklich nicht so ist, dass Spieler große Schwankungen in der Höhe der relevanten Attribute aufweisen. Anders gesagt: Es ist davon auszugehen, dass ein ST-P-A (Striker, Poacher, Attack) mit einem Schnitt von 16.5 nahezu immer der bessere Spieler ist als ein ST-P-A mit einem Schnitt von 16.0. Das gilt übrigens tendenziell durchaus auch für die Sterne-Wertungen.

Zum Aufbau der Spieler-Dateien:

Sie können mit einer "format"-Zeile beginnen:

format = de
oder

format = en
Whitespace sollte keine Rolle spielen. Beim Fehlen wird "en" angenommen.

Das Format bezieht sich auf die Reihenfolge der Attributwerte. Ein Eintrag wie

Yoan  Clerc (MC, AMC)
15 15 17 13 18 19 12 16  5 13 18 14 16 18
13 17  9 16 12 20 17 12 16 16 17 15 16 17
17 11 10 18 14 18 17 20

ist so gedacht, dass die Werte aus den drei Spalten (technical, mental, physical) von oben nach unten in jeweils eine Zeile getippt werden. Da die Reihenfolge der Attribute pro Spalte im Spiel aber alphabetisch ist und damit sprachabhängig, unterscheidet sie sich zwischen den verschiedenen Sprachversionen. Dafür existiert die format-Zeile. Wird die passende Sprache gesetzt (derzeit nur "de" und "en"), können die Werte immer bequem der Reihe nach abgetippt werden. Die Anwendung sortiert dann passend um.

Ansonsten müssen bei den einzelnen Spielereinträgen zwischen Vor- und Nachname zwei Leerzeichen stehen, und Vor- und Nachname müssen immer gesetzt sein. (Sorry, ist faul programmiert.) Bei Künstlernamen also den Künstlernamen zweimal schreiben oder so.

Auf den Namen folgen in Klammern die Positionen, die der Spieler spielen kann oder soll. Die Auswahl bleibt dem Nutzer überlassen.

Das ist eigentlich schon alles. Das Format ist einigermaßen verzeihend, was Whitespace und dergleichen angeht, aber für ordnungsgemäße Funktion wäre es schon ganz gut, sich an die Vorgaben (siehe etwa Beispieldatei oben) zu halten.

Zeilen, die mit einem "#"-Symbol beginnen, zählen als Kommentar und werden nicht berücksichtigt. Gleiches gilt für Leerzeilen.

Zum Aufbau der Taktik-Dateien:

Eine Taktikdatei besteht aus einer oder mehreren Zeilen nach dem Schema:

Position-Rolle-Aufgabe
Beispielsweise:

ST-P-A
Die Bezeichnungen werden nur auf Englisch akzeptiert. (Wiederum: Sorry, es ist faul programmiert.) Eine Liste der gültigen Bezeichnungen ist der beigefügten README-Datei zu entnehmen.

Kommentare mit "#"-Symbol sind auch in diesen Dateien möglich. Leerzeilen werden ignoriert. Siehe wiederum die oben vorgestellte Demo-Datei.

Feedback und dergleichen gerne. Und vorsichtshalber gesagt, obwohl das Tool eigentlich nichts löscht oder so: Benutzung ist bei so was natürlich immer auf eigene Gefahr!

Ich gebe auch gern technischen Support. Wenn es jemand weiterentwickeln möchte oder als Webservice hosten, würde ich das sehr begrüßen und wohl auch mitwirken. Ich möchte nur nicht administrativ involviert sein, und ich möchte es deshalb auch nicht wirklich auf etwa mein GitHub packen.

Viele Grüße

narwal

[gelöscht durch Administrator]
« Letzte Änderung: 19.Dezember 2015, 16:02:50 von narwal »
Gespeichert

vonholzminden

  • Nationalspieler
  • *****
  • Offline Offline
Re: fmteamtool
« Antwort #1 am: 19.Dezember 2015, 21:05:51 »

Wow. Hört sich sehr kompliziert an.
Gespeichert

Savard

  • Sesselfußballer
  • **
  • Offline Offline
Re: fmteamtool
« Antwort #2 am: 20.Dezember 2015, 10:22:02 »

Klingt kompliziert, aber auch verdammt nützlich! Ich spiele den FM16 und werd das ganze bei Zeiten mal ausprobieren. Danke fürs programmieren!
Gespeichert

Savard

  • Sesselfußballer
  • **
  • Offline Offline
Re: fmteamtool
« Antwort #3 am: 20.Dezember 2015, 10:31:04 »

Kurze Nachfrage: wozu benötigt das Tool die Taktik? Für die Trainingsvorschläge?
Gespeichert

narwal

  • Bambini
  • *
  • Offline Offline
Re: fmteamtool
« Antwort #4 am: 20.Dezember 2015, 13:20:39 »

Zitat von: Savard
Kurze Nachfrage: wozu benötigt das Tool die Taktik? Für die Trainingsvorschläge?

Die Taktik legt fest, welche Spalten mit Position/Rolle/Aufgabe (ich nenne das in der Kombination ab jetzt mal „Taktikposition“) in der Tabelle ganz oben auftauchen. Das hat einerseits den praktischen Grund, dass es mehr als 100 einzelne Taktikpositionen gibt (kann man nicht alle auflisten) und dass sich einem Spieler im FM nicht wirklich ein Attributsdurchschnitt für eine generische Position wie DC, DM, MC, ST, … zuweisen lässt, da etwa für MC-BWM-D und MC-AP-A völlig unterschiedliche Attribute relevant sind.

In der Detailansicht wird pro Spieler aber der Schnitt für alle Positionen, die er spielen kann, aufgeführt. Das ist völlig unabhängig von der Taktik. Zum Beispiel:

(Codeblock scrollen.)

Domingo Marín

Positions: MC, AMC, ST

Corners        14    Aggression     11    Acceleration   20
Crossing        9    Anticipation   13    Agility        20
Dribblig       12    Bravery         9    Balance        18
Finishing      16    Composure      14    Jumping         5
First Touch    15    Concentration   8    Nat. Fitness   11
Free Kick T.   16    Creativity     15    Pace           19
Heading        13    Decisions      10    Stamina        14
Long Shots     13    Determination  17    Strength       15
Long Throws    10    Flair          16
Marking        12    Influence      12
Passing        16    Off The Ball   15
Penalty T.     16    Positioning     9
Tackling       14    Teamwork       15
Technique      15    Work Rate      16

Total attribute points: 493 (191 + 180 + 122)

P-A     16.2     DLF-A   14.7     AF-A    14.3     CM-D    13.7
T-A     15.5     AP-S    14.7     AP-A    14.2     DLP-D   13.5
IF-S    15.1     CM-auto 14.5     DLF-S   14.1     TM-A    13.4
AM-A    15.0     CM-A    14.5     CM-S    13.9     BWM-D   13.2
AM-S    14.9     CF-A    14.5     BWM-S   13.9     TM-S    12.9
DF-S    14.9     CF-S    14.5     BBM-S   13.9
IF-A    14.8     DF-A    14.4     DLP-S   13.8

Der Spieler kann diverse Taktikpositionen spielen. Von denen waren bei meinem Arsenal-Team damals aber nur MC-BWM-D, MC-DLP-S, AMC-AM-A und ST-P-A relevant. Es war schlicht nicht von Bedeutung, wie gut er sich als Box2Box-Midfielder macht oder dergleichen. Deshalb braucht das in der Kadertabelle ganz oben auch nicht aufzutauchen.

Ach ja: Es spricht aber nichts dagegen, einer Taktik-Datei mehr oder weniger als 10 Positionen hinzuzufügen (oder beispielsweise auch etwas wie 5 Innenverteidiger-Taktikpositionen), wenn man mehr oder weniger relevante Spalten haben möchte.

Auch wäre es natürlich denkbar, sich weitere Funktionalität zu schreiben, die etwa versucht, zu einem bestehenden Kader nach bestimmten Kriterien die beste Taktik zu finden. Die Programmierung dazu ist aber nicht mehr wirklich trivial, und es ist zweifelhaft, dass dabei bessere Ergebnisse entstehen, als wir sie mit menschlicher Kreativität erreichen würden.

Die aktuelle Ausgabe ist zudem einerseits auf meine Spielweise des Spiels ausgelegt und andererseits ein wenig improvisiert, weil ich das für das Release gestern alles ein wenig umgebaut habe. (Ich hatte es zum Beispiel auf Composer aufgebaut und zudem die Infos, die ich gerade brauchte, hardgecodet. Das wollte ich hier jetzt keinem zumuten, um die Nutzung nicht zu umständlich zu machen. PHP selbst dürfte für Windows-Nutzer schon schwierig genug werden, weil das für viele nicht so leicht lokal aufzusetzen ist wie etwa Java, das man halt irgendwie hat, glaube ich? PHP hat aber die beiden großen Vorteile, dass der ausgeführte Code prinzipbedingt offen einsehbar ist und jeder (zumindest halbwegs) überprüfen kann, dass der keinen Blödsinn anstellt, und dass sich die Anwendung leicht in eine Webseite umwandeln lässt, die quasi überall hostbar ist.)



Ein Problem mit den Trainingsvorschlägen ist aktuell, dass das Tool nicht weiß, auf welcher Position der Manager (also der Anwender, also wir) einen Spieler einplant. Derartige Hints habe ich im Format der Team-Dateien nicht drin. (Ich habe das „Should train…“-Feature nur für die Veröffentlichung hier kurz reingeklatscht, um es als Idee mitzuliefern.) Wenn nun ein Spieler MC und AMC spielen kann (zum Beispiel #16 und #17, Luis und Alkorta, aus dem Screenshot aus dem Eröffnungspost), dann gibt das Tool aktuell den Trainingsvorschlag auf Grundlage der ersten passenden Position aus der Taktik-Datei. Da die beiden auch MC spielen können, erhalten Luis und Alkorta deshalb als Empfehlung marking bzw. tackling. Das Tool will sie als Ball Winning Midfielders trainieren, obwohl sie klar als AMCs vorgesehen sind und dort auch ihre Stärken haben. Ein weiteres Problem besteht darin, dass immer das niedrigste relevante trainierbare Attribut eines Spielers für die Position/Rolle/Aufgabe angegeben wird. Das ist auch nicht so ganz optimal, weil ich etwa bei einem offensiven Außenverteidiger im Zweifel eher Schnellligkeit als Flanken anheben wollen würde. Oder auch: Spieler mit Antritt/Schnelligkeit unter 15 trainieren erst mal das, bevor sie mit Nervenstärke anfangen. Eine bessere Umsetzung der Funktionalität wäre es also wahrscheinlich, einfach die trainierbaren Attribute pro Spieler in der Detailansicht des Spielers zu markieren.
« Letzte Änderung: 20.Dezember 2015, 19:01:11 von narwal »
Gespeichert