1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Taskmanager / Aufgaben-Pool erstellen

Dieses Thema im Forum "Support & Discussion" wurde erstellt von PierreDole, 27. Juli 2017.

  1. PierreDole

    PierreDole New Member

    Registriert seit:
    25. Juli 2017
    Beiträge:
    16
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    De op't schöönst Stadt de Welt
    Ich grüble gerade, wie ich einen Taskmanager für Ultima Online programmiere. Nicht zu verwechseln mit dem Taskmanager, den Windows hat, welcher strenggenommen ein Prozessmanager ist.

    In UO kann man meistens nur eine Aktion zu Zeit tätigen. Während man z.B. drag and dropt, kann man keine Items benutzen, auch nicht per Script. Das macht Sinn. Eine While-Schleife, die beispielsweise einen Container lootet, kann deswegen leicht zur Todesfalle werden. Deswegen will ich eine Liste mit Aufgaben erstellen, die abgearbeitet wird. Die While-Schleife lootet nicht direkt, sondern schaut wie viele Items sich im Container befinden und übergibt die Loot-Aufgabe an den Taskmanager, bzw füllt den Aufgaben-Pool mit jedem einzelnen zu lootenden Item.

    Code (Text):

    Priorität    |    Aufgabe
    1             |   Heal(CharID)
    5             |   DragItemFromContainerToContainer(itemID, lootContainerID, BackpackID)
    5             |   DragItemFromContainerToContainer(itemID, lootContainerID, BackpackID)
    5             |   DragItemFromContainerToContainer(itemID, lootContainerID, BackpackID)
    5             |   DragItemFromContainerToContainer(itemID, lootContainerID, BackpackID)
    5             |   DragItemFromContainerToContainer(itemID, lootContainerID, BackpackID)
    5             |   DragItemFromContainerToContainer(itemID, lootContainerID, BackpackID)
     
    Jede Aufgabe hat eine Priorität, nach der die Liste sortiert wird, so daß die Aufgabe mit der niedrigsten Priorität immer als erstes ausgeführt wird. Wenn der Char während des Lootens geheilt werden muss, muss nicht gewartet werden bis eine While-Schleife stumpf zu ende lootet, oder sie per if-Anweisung abgebrochen wird. Das Heilen wird in die Liste eingefügt und so bald ein Item im Backpack plaziert wird, wird geheilt und dann weiter gelootet. So weit die Theorie...

    Praktisch nehme ich ein globales Dictionary, das von überall gefüllt werden kann und lasse in einem separatem Thread die Liste kontinuierlich abarbeiten. Nun will ich aber nicht eine seitenlange Switch-Anweisung coden, die die jeweiligen Aufgaben den entsprechenden Methoden zuweist. Gibt es eine Möglichkeit, in eine List eine Referenz auf eine Methode zu speichern, die dann nach dem Auslesen executet werden kann? Oder gibt es vielleicht eine andere bessere Möglichkeit dafür?
     
  2. CptVince

    CptVince New Member

    Registriert seit:
    1. Juli 2017
    Beiträge:
    19
    Zustimmungen:
    12
    Punkte für Erfolge:
    3
    Hast du schonmal ueber eine event driven architecture nachgedacht?

    Wenn ein Event gefeuert wird, wird alles gelocked da du gerade am ausfuehren einer Aktion bist.

    Nachdem der Lock aufgehoben ist, kannst du nach dem naechten Event nach der Priorisierung suchen und abfeuern.
     
  3. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    79
    Zustimmungen:
    41
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    CptVince gefällt das.
  4. krusty

    krusty Moderator Mitarbeiter Moderator

    Registriert seit:
    1. Juli 2017
    Beiträge:
    61
    Zustimmungen:
    26
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Ort:
    Wadiya
    CptVince gefällt das.
  5. PierreDole

    PierreDole New Member

    Registriert seit:
    25. Juli 2017
    Beiträge:
    16
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    De op't schöönst Stadt de Welt
    Danke für eure Vorschläge. Ich habe versucht ein Zwischending aus euren Vorschlägen zu realisieren und kam dabei auf eine simple aber geniale Idee. :) Eigentlich gibt es schon fast genau das, was ich suche: eine Console. Eine Console muss irgendwie Commends verarbeiten, und wie das funktioniert, wollte ich mir anschauen.
    Ich habe dieses Projekt gefunden https://github.com/TypecastException/ConsoleApplicationBase/tree/master/ConsoleApplicationBase und entsprechend geändert, sodaß die Commends nicht aus der Console kommen, sondern aus einer List. Läuft 1A! :)

    Btw. Die Jobs werden in einem Task und nicht in einem Thread ausgeführt. Ist egal, oder?
     
  6. source++

    source++ New Member

    Registriert seit:
    3. Juli 2017
    Beiträge:
    24
    Zustimmungen:
    22
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ein Task kann mehrere Threads verwenden, wenn du also willst das eine Aktion nach der anderen ausgeführt wird solltest du darauf achten das dein Task auch nur einen Thread verwendet, dann ist es egal.
     
    PierreDole gefällt das.
  7. PierreDole

    PierreDole New Member

    Registriert seit:
    25. Juli 2017
    Beiträge:
    16
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    De op't schöönst Stadt de Welt
    Alles klar, dann ändere ich das. Hatte bisher zwar keine Probleme mehr, seitdem ich die While-Schleife rausgehauen habe, aber sicher ist sicher.
     
  8. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    79
    Zustimmungen:
    41
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Unabhängig davon halte ich es trotzdem für eine sehr gute Idee, das in eine Library zu packen und priorisierend und dynamisch auf Events zu reagieren, welche man zuvor definiert. Evtl. sogar in unserer botsuite.
     
  9. PierreDole

    PierreDole New Member

    Registriert seit:
    25. Juli 2017
    Beiträge:
    16
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    De op't schöönst Stadt de Welt
    Es ist noch nicht alles final und alles Event gesteuert wäre noch geiler als stumpf eine Liste mit einer While-Schleife abzufragen. Ich brauche aber schnell etwas Spielbares. Von daher, optimieren werde ich es, wenn ich die Basics habe. :)

    Und, weil ich mich freue, wie es ohnehin schon funktioniert, hier mal die Log, die von den Commands erstellt wird:
    Ah, ist das geil! :D
     
    source++, krusty und CptVince gefällt das.
  10. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    79
    Zustimmungen:
    41
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Bei dem Game macht es noch richtig Spaß zu botten.Meld dich mal bei mir, dann ziehen wir was cooles auf!!! Ich find das sehr interessant. Ich kann da auch mit den Events helfen.
     

Diese Seite empfehlen

Die Seite wird geladen...