Kleines Tool zum Punkte verteilen

  • Hallo.

    Ich bräuchte einen kleinen Anstoß um mein Tool fertig zu machen.
    Ich fang mal vorne an:
    - es gibt 16 "Items" mit verschiedenen Punktewerten (zb 300, 600, 7200, 9600)
    - diese können mehrfach vorkommen, also gibt man im Tool ein wieviele man von jeder Sorte hat
    - alles zusammen wird dann an 1-12 "Spieler" verteilt, sodass jeder mit möglichst der gleichen Anzahl an Punkten endet

    Mein Problem ist nun, wie erkläre ich dem Tool, dass es gerecht aufteilen soll?
    zb
    - 1x600p, 1x300p, 1x200p und 1x100p an 3 Personen -> 1. Person 600p, 2. Person 300p, 3. Person 200+100p
    - 1x600p, 3x300p, 5x100p an 4 Personen -> 1. Person 600p, 2. Person 300+100p, 3. Person 300+100, 4. Person 100+100+100p
    usw

    Hat jemand eine Idee oder einen "Rohling" nach dem ich weiter machen könnte?

    Einmal editiert, zuletzt von nemi (7. Februar 2014 um 14:37)

  • ja wie schon gesagt, ich steh da wirklich grad aufm schlauch.
    selbst mit arrays un random fällt mir nix ein, was nich in einem 10.000zeiler endet...
    deswegen frag ich ja die profis hier =D

    • Offizieller Beitrag

    Hier mal eine Variante, die eine relativ brauchbare Verteilung liefert. Bei manchen Item-Kombinationen bekommt allerdings nicht immer "Player 1" die meisten Punkte.

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $aItems = StringSplit('600,300,300,300,100,100,100,100,100', ',', 2)
    _ArrayStringToNumber($aItems)
    _ArraySort($aItems, 1)
    _ArrayDisplay($aItems, 'Liste der Items')

    [/autoit] [autoit][/autoit] [autoit]

    Global $aPlayer[4][3] = [['Player 1', '', 0],['Player 2', '', 0],['Player 3', '', 0],['Player 4', '', 0]]

    [/autoit] [autoit][/autoit] [autoit]

    Global $iAllItemsVal = 0
    For $i In $aItems
    $iAllItemsVal += $i
    Next
    ConsoleWrite('Gesamtwert aller Items: ' & $iAllItemsVal & @CR)
    Global $iAverage = Int($iAllItemsVal / UBound($aPlayer, 1))
    ConsoleWrite('Durchschnittswert für jeden Spieler: ' & $iAverage & @CR)

    [/autoit] [autoit][/autoit] [autoit]

    Global $iItemCount = 0, $iItemEnd = UBound($aItems) - 1
    Do
    For $i = 0 To UBound($aPlayer, 1) - 1
    If $aPlayer[$i][2] < $iAverage Then
    $aPlayer[$i][1] &= $aItems[$iItemCount] & ', '
    $aPlayer[$i][2] += $aItems[$iItemCount]
    $iItemCount += 1
    If $iItemCount > $iItemEnd Then ExitLoop 2
    EndIf
    If $aPlayer[$i][2] < $iAverage Then
    $aPlayer[$i][1] &= $aItems[$iItemEnd] & ', '
    $aPlayer[$i][2] += $aItems[$iItemEnd]
    $iItemEnd -= 1
    If $iItemCount > $iItemEnd Then ExitLoop 2
    EndIf
    Next
    Until $iItemCount > $iItemEnd
    _ArrayDisplay($aPlayer, 'Verteilung der Items')

    [/autoit] [autoit][/autoit] [autoit]

    Func _ArrayStringToNumber(ByRef $Array)
    For $i = 0 To UBound($Array) - 1
    $Array[$i] = Number($Array[$i])
    Next
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Hier ist eine Version, die noch besser verteilt:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $aItems = StringSplit('2400,600,600,300,300,300,100,100,100,100,100,50,50,50', ',', 2)
    _ArrayStringToNumber($aItems)
    _ArraySort($aItems, 1)
    _ArrayDisplay($aItems, 'Liste der Items')

    [/autoit] [autoit][/autoit] [autoit]

    Global $aPlayer[4][3] = [['Player 1', '', 0],['Player 2', '', 0],['Player 3', '', 0],['Player 4', '', 0]]

    [/autoit] [autoit][/autoit] [autoit]

    Global $iAllItemsVal = 0
    For $i In $aItems
    $iAllItemsVal += $i
    Next
    ConsoleWrite('Gesamtwert aller Items: ' & $iAllItemsVal & @CR)
    Global $iAverage = Int($iAllItemsVal / UBound($aPlayer, 1))
    ConsoleWrite('Durchschnittswert für jeden Spieler: ' & $iAverage & @CR)

    [/autoit] [autoit][/autoit] [autoit]

    Global $iItemCount = 0, $iItemEnd = UBound($aItems) - 1
    Do
    For $i = 0 To UBound($aPlayer, 1) - 1
    If $aPlayer[$i][2] = 0 Then
    $aPlayer[$i][1] &= $aItems[$iItemCount] & ', '
    $aPlayer[$i][2] += $aItems[$iItemCount]
    $iItemCount += 1
    If $iItemCount > $iItemEnd Then ExitLoop 2
    ElseIf $aPlayer[$i][2] + $aItems[$iItemCount] <= $iAverage + $aItems[$iItemEnd] Then
    $aPlayer[$i][1] &= $aItems[$iItemCount] & ', '
    $aPlayer[$i][2] += $aItems[$iItemCount]
    $iItemCount += 1
    If $iItemCount > $iItemEnd Then ExitLoop 2
    EndIf
    Next
    Until $iItemCount > $iItemEnd
    _ArrayDisplay($aPlayer, 'Verteilung der Items')

    [/autoit] [autoit][/autoit] [autoit]

    Func _ArrayStringToNumber(ByRef $Array)
    For $i = 0 To UBound($Array) - 1
    $Array[$i] = Number($Array[$i])
    Next
    EndFunc

    [/autoit]
  • also die verteilung funktioniert perfekt damit. danke
    im moment komm ich nur nich ganz damit klar, wie ich die werte rein bekomm.
    hab die gui ja soweit fertig und wenn dann zb eingetragen wird, dass man 13 300er items hat und 5 6400er oder sowas, muss das ja in den stringspilt.

    ich glaub es is viel zulange her, dass ich das das letzte ma gemacht hab xD

  • ich packs ma rein, weil ichs grad total verwurschtelt hab un alles wieder raus hab xD

    Spoiler anzeigen

    #Region ### Include section ###
    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #EndRegion
    ;

    #Region ### GUI section ###
    GUICreate ("AP Distributor", 445, 490)
    GUISetIcon (@ScriptDir & '\aion.ico')
    GUISetBkColor (0xFFFFFF)

    #Region ### Menu section ###
    $menu_1 = GUICtrlCreateMenu ("Datei")
    $menu_1_1 = GUICtrlCreateMenuItem ("Beenden", $menu_1)
    $menu_2 = GUICtrlCreateMenu ("Hilfe")
    $menu_2_1 = GUICtrlCreateMenuItem ("Anleitung", $menu_2)
    #EndRegion
    ;

    #Region ### Button section ###
    $start = GUICtrlCreateButton ("Verteilen", 5, 440, 80, 25)
    $calc = GUICtrlCreateButton ("Zwischenstand", 182.5, 440, 80, 25)
    $end = GUICtrlCreateButton ("Schließen", 360, 440, 80, 25)
    #EndRegion
    ;

    #Region ### Ikonen ###
    GUICtrlCreateGroup ("", 10, 5, 210, 190)
    GUICtrlCreatePic (@ScriptDir & '\oldtorso01.bmp', 14, 15, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldtorso02.bmp', 14, 60, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldtorso03.bmp', 14, 105, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldtorso04.bmp', 14, 150, 40, 40)
    GUICtrlCreateLabel ("Geringe uralte Ikone", 60, 29, 120, 15)
    GUICtrlCreateLabel ("Normale uralte Ikone", 60, 74, 120, 15)
    GUICtrlCreateLabel ("Große uralte Ikone", 60, 119, 120, 15)
    GUICtrlCreateLabel ("Mächtige uralte Ikone", 60, 164, 120, 15)
    $oldtorso01 = GUICtrlCreateInput ("0", 190, 28, 25, 17)
    $oldtorso02 = GUICtrlCreateInput ("0", 190, 73, 25, 17)
    $oldtorso03 = GUICtrlCreateInput ("0", 190, 118, 25, 17)
    $oldtorso04 = GUICtrlCreateInput ("0", 190, 163, 25, 17)
    #EndRegion
    ;

    #Region ### Siegel ###
    GUICtrlCreateGroup ("", 225, 5, 210, 190)
    GUICtrlCreatePic (@ScriptDir & '\oldseal01.bmp', 229, 15, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldseal02.bmp', 229, 60, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldseal03.bmp', 229, 105, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldseal04.bmp', 229, 150, 40, 40)
    GUICtrlCreateLabel ("Geringes uraltes Siegel", 275, 29, 120, 15)
    GUICtrlCreateLabel ("Normales uraltes Siegel", 275, 74, 120, 15)
    GUICtrlCreateLabel ("Großes uraltes Siegel", 275, 119, 120, 15)
    GUICtrlCreateLabel ("Mächtiges uraltes Siegel", 275, 164, 120, 15)
    $oldseal01 = GUICtrlCreateInput ("0", 405, 28, 25, 17)
    $oldseal02 = GUICtrlCreateInput ("0", 405, 73, 25, 17)
    $oldseal03 = GUICtrlCreateInput ("0", 405, 118, 25, 17)
    $oldseal04 = GUICtrlCreateInput ("0", 405, 163, 25, 17)
    #EndRegion
    ;

    #Region ### Kelche ###
    GUICtrlCreateGroup ("", 10, 195, 210, 190)
    GUICtrlCreatePic (@ScriptDir & '\oldcup01.bmp', 14, 205, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldcup02.bmp', 14, 250, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldcup03.bmp', 14, 295, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldcup04.bmp', 14, 340, 40, 40)
    GUICtrlCreateLabel ("Geringer uralter Kelch", 60, 219, 120, 15)
    GUICtrlCreateLabel ("Normaler uralter Kelch", 60, 264, 120, 15)
    GUICtrlCreateLabel ("Großer uralter Kelch", 60, 309, 120, 15)
    GUICtrlCreateLabel ("Mächtiger uralter Kelch", 60, 354, 120, 15)
    $oldcup01 = GUICtrlCreateInput ("0", 190, 218, 25, 17)
    $oldcup02 = GUICtrlCreateInput ("0", 190, 263, 25, 17)
    $oldcup03 = GUICtrlCreateInput ("0", 190, 308, 25, 17)
    $oldcup04 = GUICtrlCreateInput ("0", 190, 353, 25, 17)
    #EndRegion
    ;

    #Region ### Kronen ###
    GUICtrlCreateGroup ("", 225, 195, 210, 190)
    GUICtrlCreatePic (@ScriptDir & '\oldcrown01.bmp', 229, 205, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldcrown02.bmp', 229, 250, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldcrown03.bmp', 229, 295, 40, 40)
    GUICtrlCreatePic (@ScriptDir & '\oldcrown04.bmp', 229, 340, 40, 40)
    GUICtrlCreateLabel ("Geringe uralte Krone", 275, 219, 120, 15)
    GUICtrlCreateLabel ("Normale uralte Krone", 275, 264, 120, 15)
    GUICtrlCreateLabel ("Große uralte Krone", 275, 309, 120, 15)
    GUICtrlCreateLabel ("Mächtige uralte Krone", 275, 354, 120, 15)
    $oldcrown01 = GUICtrlCreateInput ("0", 405, 218, 25, 17)
    $oldcrown02 = GUICtrlCreateInput ("0", 405, 263, 25, 17)
    $oldcrown03 = GUICtrlCreateInput ("0", 405, 308, 25, 17)
    $oldcrown04 = GUICtrlCreateInput ("0", 405, 353, 25, 17)
    #EndRegion
    ;

    #Region ### Spieler ###
    GUICtrlCreateGroup ("", 10, 385, 425, 50)
    GUICtrlCreateLabel ("Anzahl der Gruppenmitglieder:", 15, 395, 150, 15)
    $player = GUICtrlCreateInput ("0", 170, 394, 25, 17)
    GUICtrlCreateLabel ("Aktuelle AP zur Vergabe:", 15, 415, 150, 15)
    $ap = GUICtrlCreateLabel ("0", 172, 415, 100, 15)
    #EndRegion
    ;

    GUISetState (@SW_SHOW)
    #EndRegion
    ;

    #Region ### Start Global section ###
    Global $points01 = "315"
    Global $points02 = "630"
    Global $points03 = "945"
    Global $points04 = "1260"
    Global $points05 = "630"
    Global $points06 = "1260"
    Global $points07 = "1890"
    Global $points08 = "2520"
    Global $points09 = "1200"
    Global $points10 = "2400"
    Global $points11 = "3600"
    Global $points12 = "4800"
    Global $points13 = "2400"
    Global $points14 = "4800"
    Global $points15 = "7200"
    Global $points16 = "9600"
    #EndRegion
    ;

    #Region ### Start HotKey section ###
    HotKeySet ("{END}", "_exit")
    HotKeySet ("{F1}", "_help")
    #EndRegion
    ;

    #Region ### Start Programm section ###
    ; GUI-Schleife
    While 1
    $nMsg = GUIGetMsg ()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $menu_1_1
    _exit ()
    Case $menu_2_1
    _help ()
    Case $start
    _start ()
    Case $calc
    _calc ()
    Case $end
    _exit ()
    EndSwitch
    WEnd

    ; Verteilung starten
    Func _start ()
    ;~ --------------------------------------------------------------------------------------------------------------------------
    ;~ Global $aItems = StringSplit('600,300,300,300,100,100,100,100,100', ',', 2) die zahlen müssten durch die $points variablen ersetzt werden, wenn da zb ne 5 beim 630er steht muss halt 5 ma der wert 630 aufploppen
    ;~ _ArrayStringToNumber($aItems)
    ;~ _ArraySort($aItems, 1)
    ;~ _ArrayDisplay($aItems, 'Liste der Items')

    ;~ Global $aPlayer[12][3] = [ ['Player 1', '', 0],['Player 2', '', 0],['Player 3', '', 0], _ hier müsste dann anhand der "$player" variable "$aPlayer[x][3]" entstehen und je nachdem dann "Spieler1-12" hinterlegt werden
    ;~ ['Player 4', '', 0],['Player 5', '', 0],['Player 6', '', 0], _
    ;~ ['Player 7', '', 0],['Player 8', '', 0],['Player 9', '', 0], _
    ;~ ['Player 10', '', 0],['Player 11', '', 0],['Player 12', '', 0]]

    ;~ Global $iAllItemsVal = 0
    ;~ For $i In $aItems
    ;~ $iAllItemsVal += $i
    ;~ Next
    ;~ ConsoleWrite('Gesamtwert aller Items: ' & $iAllItemsVal & @CR)
    ;~ Global $iAverage = Int($iAllItemsVal / UBound($aPlayer, 1))
    ;~ ConsoleWrite('Durchschnittswert für jeden Spieler: ' & $iAverage & @CR)

    ;~ Global $iItemCount = 0, $iItemEnd = UBound($aItems) - 1
    ;~ Do
    ;~ For $i = 0 To UBound($aPlayer, 1) - 1
    ;~ If $aPlayer[$i][2] < $iAverage Then
    ;~ $aPlayer[$i][1] &= $aItems[$iItemCount] & ', '
    ;~ $aPlayer[$i][2] += $aItems[$iItemCount]
    ;~ $iItemCount += 1
    ;~ If $iItemCount > $iItemEnd Then ExitLoop 2
    ;~ EndIf
    ;~ If $aPlayer[$i][2] < $iAverage Then
    ;~ $aPlayer[$i][1] &= $aItems[$iItemEnd] & ', '
    ;~ $aPlayer[$i][2] += $aItems[$iItemEnd]
    ;~ $iItemEnd -= 1
    ;~ If $iItemCount > $iItemEnd Then ExitLoop 2
    ;~ EndIf
    ;~ Next
    ;~ Until $iItemCount > $iItemEnd
    ;~ _ArrayDisplay($aPlayer, 'Verteilung der Items')
    ;~ --------------------------------------------------------------------------------------------------------------------------
    EndFunc

    ;~ --------------------------------------------------------------------------------------------------------------------------
    ;~ Func _ArrayStringToNumber(ByRef $Array)
    ;~ For $i = 0 To UBound($Array) - 1
    ;~ $Array[$i] = Number($Array[$i])
    ;~ Next
    ;~ EndFunc
    ;~ --------------------------------------------------------------------------------------------------------------------------

    ; AP zusammenrechnen
    Func _calc ()
    $01 = (GUICtrlRead ($oldtorso01) * $points01)
    $02 = (GUICtrlRead ($oldtorso02) * $points02)
    $03 = (GUICtrlRead ($oldtorso03) * $points03)
    $04 = (GUICtrlRead ($oldtorso04) * $points04)
    $05 = (GUICtrlRead ($oldseal01) * $points05)
    $06 = (GUICtrlRead ($oldseal02) * $points06)
    $07 = (GUICtrlRead ($oldseal03) * $points07)
    $08 = (GUICtrlRead ($oldseal04) * $points08)
    $09 = (GUICtrlRead ($oldcup01) * $points09)
    $10 = (GUICtrlRead ($oldcup02) * $points10)
    $11 = (GUICtrlRead ($oldcup03) * $points11)
    $12 = (GUICtrlRead ($oldcup04) * $points12)
    $13 = (GUICtrlRead ($oldcrown01) * $points13)
    $14 = (GUICtrlRead ($oldcrown02) * $points14)
    $15 = (GUICtrlRead ($oldcrown03) * $points15)
    $16 = (GUICtrlRead ($oldcrown04) * $points16)
    $all = ($01 + $02 + $03 + $04 + $05 + $06 + $07 + $08 + $09 + $10 + $11 + $12 + $13 + $14 + $15 + $16)
    GUICtrlSetData ($ap, $all)
    EndFunc

    ; Hilfe
    Func _help ()
    MsgBox (0, "Ausführliche Anleitung", "~Eintrag~" & @CRLF & @CRLF & _
    " - Tragt die Anzahl der Relikte in die dafür vorgesehenen Feld ein." & @CRLF & _
    " - Tragt die Anzahl der Gruppenmitglieder in das dafür vorgesehene Feld ein." & @CRLF & _
    " - (nur die Mitglieder, die auch AP haben möchten)." & @CRLF & @CRLF & _
    "~Verteilen~" & @CRLF & @CRLF & _
    " - Startet die Verteilung der Relikte an die Gruppenmitglieder." & @CRLF & @CRLF & _
    "~Zwischenstand~" & @CRLF & @CRLF & _
    " - Rechnet die gesamten AP vor der Verteilung aus." & @CRLF & @CRLF & _
    "~Schließen~" & @CRLF & @CRLF & _
    " - Beendet das Programm.")
    EndFunc

    ; Bot beenden - GUI schließen
    Func _exit ()
    Exit
    EndFunc
    #EndRegion;

    • Offizieller Beitrag

    Ich habe Dir Dein Script mal angepasst (Arrays erleichtern vieles):

    Spoiler anzeigen
    [autoit]


    #Region ### Include section ###
    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #EndRegion ### Include section ###
    ;

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### GUI section ###
    GUICreate("AP Distributor", 445, 490)
    GUISetIcon(@ScriptDir & '\aion.ico')
    GUISetBkColor(0xFFFFFF)

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### Menu section ###
    $menu_1 = GUICtrlCreateMenu("Datei")
    $menu_1_1 = GUICtrlCreateMenuItem("Beenden", $menu_1)
    $menu_2 = GUICtrlCreateMenu("Hilfe")
    $menu_2_1 = GUICtrlCreateMenuItem("Anleitung", $menu_2)
    #EndRegion ### Menu section ###
    ;

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### Button section ###
    $start = GUICtrlCreateButton("Verteilen", 5, 440, 80, 25)
    $calc = GUICtrlCreateButton("Zwischenstand", 182.5, 440, 80, 25)
    $end = GUICtrlCreateButton("Schließen", 360, 440, 80, 25)
    #EndRegion ### Button section ###
    ;
    Global $aidIcons[16], $sAllItems = "", $iAllItemsVal = 0
    #Region ### Ikonen ###
    GUICtrlCreateGroup("", 10, 5, 210, 190)
    GUICtrlCreatePic(@ScriptDir & '\oldtorso01.bmp', 14, 15, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldtorso02.bmp', 14, 60, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldtorso03.bmp', 14, 105, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldtorso04.bmp', 14, 150, 40, 40)
    GUICtrlCreateLabel("Geringe uralte Ikone", 60, 29, 120, 15)
    GUICtrlCreateLabel("Normale uralte Ikone", 60, 74, 120, 15)
    GUICtrlCreateLabel("Große uralte Ikone", 60, 119, 120, 15)
    GUICtrlCreateLabel("Mächtige uralte Ikone", 60, 164, 120, 15)
    $aidIcons[0] = GUICtrlCreateInput("0", 190, 28, 25, 17, $ES_NUMBER)
    $aidIcons[1] = GUICtrlCreateInput("0", 190, 73, 25, 17, $ES_NUMBER)
    $aidIcons[2] = GUICtrlCreateInput("0", 190, 118, 25, 17, $ES_NUMBER)
    $aidIcons[3] = GUICtrlCreateInput("0", 190, 163, 25, 17, $ES_NUMBER)
    #EndRegion ### Ikonen ###
    ;

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### Siegel ###
    GUICtrlCreateGroup("", 225, 5, 210, 190)
    GUICtrlCreatePic(@ScriptDir & '\oldseal01.bmp', 229, 15, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldseal02.bmp', 229, 60, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldseal03.bmp', 229, 105, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldseal04.bmp', 229, 150, 40, 40)
    GUICtrlCreateLabel("Geringes uraltes Siegel", 275, 29, 120, 15)
    GUICtrlCreateLabel("Normales uraltes Siegel", 275, 74, 120, 15)
    GUICtrlCreateLabel("Großes uraltes Siegel", 275, 119, 120, 15)
    GUICtrlCreateLabel("Mächtiges uraltes Siegel", 275, 164, 120, 15)
    $aidIcons[4] = GUICtrlCreateInput("0", 405, 28, 25, 17, $ES_NUMBER)
    $aidIcons[5] = GUICtrlCreateInput("0", 405, 73, 25, 17, $ES_NUMBER)
    $aidIcons[6] = GUICtrlCreateInput("0", 405, 118, 25, 17, $ES_NUMBER)
    $aidIcons[7] = GUICtrlCreateInput("0", 405, 163, 25, 17, $ES_NUMBER)
    #EndRegion ### Siegel ###
    ;

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### Kelche ###
    GUICtrlCreateGroup("", 10, 195, 210, 190)
    GUICtrlCreatePic(@ScriptDir & '\oldcup01.bmp', 14, 205, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldcup02.bmp', 14, 250, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldcup03.bmp', 14, 295, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldcup04.bmp', 14, 340, 40, 40)
    GUICtrlCreateLabel("Geringer uralter Kelch", 60, 219, 120, 15)
    GUICtrlCreateLabel("Normaler uralter Kelch", 60, 264, 120, 15)
    GUICtrlCreateLabel("Großer uralter Kelch", 60, 309, 120, 15)
    GUICtrlCreateLabel("Mächtiger uralter Kelch", 60, 354, 120, 15)
    $aidIcons[8] = GUICtrlCreateInput("0", 190, 218, 25, 17, $ES_NUMBER)
    $aidIcons[9] = GUICtrlCreateInput("0", 190, 263, 25, 17, $ES_NUMBER)
    $aidIcons[10] = GUICtrlCreateInput("0", 190, 308, 25, 17, $ES_NUMBER)
    $aidIcons[11] = GUICtrlCreateInput("0", 190, 353, 25, 17, $ES_NUMBER)
    #EndRegion ### Kelche ###
    ;

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### Kronen ###
    GUICtrlCreateGroup("", 225, 195, 210, 190)
    GUICtrlCreatePic(@ScriptDir & '\oldcrown01.bmp', 229, 205, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldcrown02.bmp', 229, 250, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldcrown03.bmp', 229, 295, 40, 40)
    GUICtrlCreatePic(@ScriptDir & '\oldcrown04.bmp', 229, 340, 40, 40)
    GUICtrlCreateLabel("Geringe uralte Krone", 275, 219, 120, 15)
    GUICtrlCreateLabel("Normale uralte Krone", 275, 264, 120, 15)
    GUICtrlCreateLabel("Große uralte Krone", 275, 309, 120, 15)
    GUICtrlCreateLabel("Mächtige uralte Krone", 275, 354, 120, 15)
    $aidIcons[12] = GUICtrlCreateInput("0", 405, 218, 25, 17, $ES_NUMBER)
    $aidIcons[13] = GUICtrlCreateInput("0", 405, 263, 25, 17, $ES_NUMBER)
    $aidIcons[14] = GUICtrlCreateInput("0", 405, 308, 25, 17, $ES_NUMBER)
    $aidIcons[15] = GUICtrlCreateInput("0", 405, 353, 25, 17, $ES_NUMBER)
    #EndRegion ### Kronen ###
    ;

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### Spieler ###
    GUICtrlCreateGroup("", 10, 385, 425, 50)
    GUICtrlCreateLabel("Anzahl der Gruppenmitglieder:", 15, 395, 150, 15)
    $player = GUICtrlCreateInput("0", 170, 394, 25, 17, $ES_NUMBER)
    GUICtrlCreateLabel("Aktuelle AP zur Vergabe:", 15, 415, 150, 15)
    $ap = GUICtrlCreateLabel("0", 172, 415, 100, 15)
    #EndRegion ### Spieler ###
    ;

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    #EndRegion ### GUI section ###
    ;

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### Start Global section ###
    Global $aPoints = StringSplit("315,630,945,1260,630,1260,1890,2520,1200,2400,3600,4800,2400,4800,7200,9600", ",", 2)
    #EndRegion ### Start Global section ###
    ;

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### Start HotKey section ###
    HotKeySet("{END}", "_exit")
    HotKeySet("{F1}", "_help")
    #EndRegion ### Start HotKey section ###
    ;

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### Start Programm section ###
    ; GUI-Schleife
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $menu_1_1
    _exit()
    Case $menu_2_1
    _help()
    Case $start
    _start()
    Case $calc
    _calc()
    Case $end
    _exit()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ; Verteilung starten
    Func _start()
    Local $iPlayerCount = GUICtrlRead($player)
    If $iPlayerCount = 0 Then Return
    Local $aPlayer[$iPlayerCount][3], $iAverage = 0
    _calc()
    If $sAllItems = '' Then Return
    Local $aItems = StringSplit(StringTrimRight($sAllItems, 1), ',', 2)
    Local $iItemCount = 0, $iItemEnd = UBound($aItems) - 1
    ConsoleWrite('Gesamtwert aller Items: ' & $iAllItemsVal & @CR)
    _ArrayStringToNumber($aItems)
    _ArraySort($aItems, 1)
    _ArrayDisplay($aItems, 'Liste der Items')
    For $i = 0 To $iPlayerCount - 1
    $aPlayer[$i][0] = "Player " & $i + 1
    $aPlayer[$i][1] = ""
    $aPlayer[$i][2] = 0
    Next
    $iAverage = Int($iAllItemsVal / UBound($aPlayer, 1))
    ConsoleWrite('Durchschnittswert für jeden Spieler: ' & $iAverage & @CR)
    Do
    For $i = 0 To UBound($aPlayer, 1) - 1
    If $aPlayer[$i][2] = 0 Then
    $aPlayer[$i][1] &= $aItems[$iItemCount] & ', '
    $aPlayer[$i][2] += $aItems[$iItemCount]
    $iItemCount += 1
    If $iItemCount > $iItemEnd Then ExitLoop 2
    ElseIf $aPlayer[$i][2] + $aItems[$iItemCount] <= $iAverage + $aItems[$iItemEnd] Then
    $aPlayer[$i][1] &= $aItems[$iItemCount] & ', '
    $aPlayer[$i][2] += $aItems[$iItemCount]
    $iItemCount += 1
    If $iItemCount > $iItemEnd Then ExitLoop 2
    EndIf
    Next
    Until $iItemCount > $iItemEnd
    _ArrayDisplay($aPlayer, 'Verteilung der Items')
    EndFunc ;==>_start

    [/autoit] [autoit][/autoit] [autoit]

    Func _ArrayStringToNumber(ByRef $Array)
    For $i = 0 To UBound($Array) - 1
    $Array[$i] = Number($Array[$i])
    Next
    EndFunc ;==>_ArrayStringToNumber

    [/autoit] [autoit][/autoit] [autoit]

    ; AP zusammenrechnen
    Func _calc()
    Global $aItems[1] = [0], $sAllItems = "", $iAllItemsVal = 0
    Local $iItemTmp = 0
    For $i = 0 To UBound($aidIcons) - 1
    $iItemTmp = GUICtrlRead($aidIcons[$i])
    If $iItemTmp > 0 Then
    $iAllItemsVal += $iItemTmp * $aPoints[$i]
    For $j = 1 To $iItemTmp
    $sAllItems &= $aPoints[$i] & ','
    Next
    EndIf
    Next
    GUICtrlSetData($ap, $iAllItemsVal)
    EndFunc ;==>_calc

    [/autoit] [autoit][/autoit] [autoit]

    ; Hilfe
    Func _help()
    MsgBox(0, "Ausführliche Anleitung", "~Eintrag~" & @CRLF & @CRLF & _
    " - Tragt die Anzahl der Relikte in die dafür vorgesehenen Feld ein." & @CRLF & _
    " - Tragt die Anzahl der Gruppenmitglieder in das dafür vorgesehene Feld ein." & @CRLF & _
    " - (nur die Mitglieder, die auch AP haben möchten)." & @CRLF & @CRLF & _
    "~Verteilen~" & @CRLF & @CRLF & _
    " - Startet die Verteilung der Relikte an die Gruppenmitglieder." & @CRLF & @CRLF & _
    "~Zwischenstand~" & @CRLF & @CRLF & _
    " - Rechnet die gesamten AP vor der Verteilung aus." & @CRLF & @CRLF & _
    "~Schließen~" & @CRLF & @CRLF & _
    " - Beendet das Programm.")
    EndFunc ;==>_help

    [/autoit] [autoit][/autoit] [autoit]

    ; Bot beenden - GUI schließen
    Func _exit()
    Exit
    EndFunc ;==>_exit
    #EndRegion ### Start Programm section ###

    [/autoit]
  • wow absolut das was ich wollte =D
    ich glaub ich sollte mich doch nochma extrem mit den arrays beschäftigen.
    vielen dank

    jetz muss ich nur noch die zahlen zurück in worte formulieren, aber das sollte ja jetz schnell gehn

    danke danke