Hey zusammen,
ich habe lange nicht mehr programmiert, aber wollte mir gerne ein kleines Tool für FIFA basteln: Einen "Chemie-Optimierer"
Es gibt sowas auch als Web-Tool (https://www.futbooster.com), aber das dauert teilweise recht lang und ich würde gerne meine PC-Ressourcen dafür nutzen und ggfs. ein paar Ideen dazu einbauen. Also wollte ich mir erstmal eine vereinfachte Version davon mit AutoIt bauen.
Damit ich keine Spieler-Datenbanken etc. brauche, hole ich mir einfach einen gepflegten Kader via Http von einer Website, wo man sich Kader zusammenstellen (aber halt nicht derartig optimieren) kann und habe mir dann erstmal eine Funktion gebaut, die sozusagen die Auswirkung der Kanten auf die Punkte berechnet.
Jetzt bin ich mir aber so gar nicht sicher, wie ich die Formationen am Besten in AutoIt abbilden kann. Also eine Formation besteht aus 11 Punkten, die jeweils mit ganz klar definierten anderen Punkten über Kanten (2-5 Stück) verbunden sind. Eine Kante kann den Wert eines Punktes um -1, 0, +1 oder +2 verändern.
Also muss ich jetzt irgendwie jede einzelne Formation programmier-technisch beschreiben, damit ich das später dann "durch-loopen" kann^^ Was ist der beste Weg für sowas? Einfach ein 11er Array (0-10) und jeweils die "ID" des Punktes, zu dem es eine Kante gibt, mit in das Array schreiben?
Beispiel: Torwart ist 0, Innenverteidiger #1 ist 1, Innenverteidiger #2 ist 2 und der Torwart hat nur Kanten zu beiden Innenverteidigern:
#aFormation_One[0] = ["TW", 1 ,2] ;
=> Ich muss den "Namen" des Punktes auch immer wissen, da Spieler von bestimmten Positionen nachher nur auf bestimmte andere Positionen verschoben werden dürfen, um rum zu probieren. TW = Torwart z. B. bleibt immer auf seinem Punkt, ein defensiver Mittelfeldspieler darf aber auch auf die Position offensives Mittelfeld, etc. Heißt, ich brauche immer "Name" des Punktes und das Wissen, zu welchen anderen Punkten es Kanten gibt.
Oder gibt es da "bessere" Möglichkeiten, so etwas abzubilden, auch mit dem Wissen, dass das Tool die Kantenberechnung sehr schnell machen können muss, weil die Spieler dann diverse Male auf andere Positionen verschoben werden (Neuberechnung) und das ganze dann für 30 Formationen, bis das beste Ergebnis gefunden wurde.
Ich hoffe, es ist nicht zu kompliziert beschrieben... Damit man das Drumherum bei Bedarf besser verstehen kann, hier auch der bisherige Code:
#include <Array.au3>
#include <String.au3>
#include <WinHTTP.au3>
#include <WinHTTPConstants.au3>
Global $UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
Global $HTTP_Host = "https://www.futbin.com"
Global $HTTP_Agent = _WinHttpOpen($UA)
Global $HTTP_Connect = _WinHttpConnect($HTTP_Agent, $HTTP_Host)
$sHtml = _SimpleRequest("GET", "/21/squad/9249882")
Global $PlayersEleven[11][8]
;id = cardlid 1-11 => Haupt-Spieler; 12-23 => Subs
For $i = 1 To 11
$aArray = StringRegExp($sHtml, 'cardlid' & $i & '\"\s+data-formpos=\"(\w+)\"[^!]+data-player-commom=\"([^\"]+)\"[\s\d\w]+data-player-nation=\"([^\"]+)\"[\s\d\w]+data-player-club=\"([^\"]+)\"[\s\d\w]+data-player-league=\"([^\"]+)\"[^!]+Country:\s+([\w\s]+)[^!]+Club:\s+([\w\s]+)[^!]+League:\s+([\w\s]+)', 3)
$PlayersEleven[$i -1][0] = StringUpper($aArray[1]) ; Name
$PlayersEleven[$i -1][1] = $aArray[0] ; Position
$PlayersEleven[$i -1][2] = $aArray[2] ; Nation-ID
$PlayersEleven[$i -1][3] = $aArray[3] ; Club-ID
$PlayersEleven[$i -1][4] = $aArray[4] ; League-ID
$PlayersEleven[$i -1][5] = $aArray[5] ; Nation-Name
$PlayersEleven[$i -1][6] = $aArray[6] ; Club-Name
$PlayersEleven[$i -1][7] = $aArray[7] ; League-Name
Next
;~ _ArrayDisplay($PlayersEleven)
ConsoleWrite(checkChemieBonusBetweenTwoPlayers(1, 6) & @CRLF)
_Exit()
Func _SimpleRequest($sType = "GET", $sPath = "", $sPost = $WINHTTP_NO_REQUEST_DATA)
$aResponse = _WinHttpSimpleSSLRequest($HTTP_Connect, $sType, $sPath, Default, $sPost, Default, True)
Return $aResponse[1]
EndFunc ;==>_SimpleRequest
Func _Exit()
_WinHttpCloseHandle($HTTP_Connect)
_WinHttpCloseHandle($HTTP_Agent)
Exit
EndFunc
Func checkChemieBonusBetweenTwoPlayers($id_1, $id_2) ; Explanation (german): https://www.tonight.de/games/fifa/fifa-ultimate-team-fut-wie-funktioniert-chemie-teamchemie-spielerchemie-links-loyalitaet_77330.html
; bad link (-1; red), weak link (0; orange), strong link (+1; green), perfect link (+2; green)
; +1 for same nation, +1 for same club, +1 for same league
; if Icon: +1 for everyone / +2 for players with same nation / +3 for Icons with same nation
Local $iChemie = -1
If $PlayersEleven[$id_1][4] = 2118 or $PlayersEleven[$id_2][4] = 2118 Then ; Icons : Club = 112658 (FUT 21 ICONS); League = 2118 (Icons)
If $PlayersEleven[$id_1][4] = $PlayersEleven[$id_2][4] and $PlayersEleven[$id_1][2] = $PlayersEleven[$id_2][2] Then Return 3
If $PlayersEleven[$id_1][2] = $PlayersEleven[$id_2][2] Then Return 2
Return 1
Else ; Normal players
If $PlayersEleven[$id_1][2] = $PlayersEleven[$id_2][2] Then $iChemie += 1
If $PlayersEleven[$id_1][3] = $PlayersEleven[$id_2][3] Then $iChemie += 1
If $PlayersEleven[$id_1][4] = $PlayersEleven[$id_2][4] Then $iChemie += 1
EndIf
Return $iChemie
EndFunc
Alles anzeigen