Anfänger: WoW Makro-Konverter StringSplit/Array(?)

  • Hallo
    Ich bin neu hier und noch relativ unerfahren mit AutoIt.
    Ich habe zwar schon kleinere Sachen gemacht in AutoIt, auch mit GUI aber bei dem hier find ich keinen Anfang.

    Ich möchte einen Makro-Konverter für das Spiel World of Warcraft erstellen. Makros beinhalten ausführbare Aktionen im Spiel wie zb. Angriffe, Essen usw. Diese Makros kann man im Spiel erstellen. Sie werden in einer Datei namens macros-cache.txt abgelegt mit der ich nun arbeiten möchte. Ein einzelnes Makro sieht in dieser Datei dann so aus:

    Code
    MACRO 16777239 "Siegel1" Ability_ThunderBolt
    /cast Siegel der Rechtschaffenheit
    END


    MACRO 16777239 und END sind für mich irrelevant. Ich möchte folgendes weiterverarbeiten: Beschreibung(Siegel1), Icon(Ability_ThunderBolt) und das Makro selbst(/cast Siegel der Rechtschaffenheit)
    Eine komplette Makro-Datei mit mehreren Makros kann so aussehen:


    Der Konverter soll erkennen wo ein Makro beginnt und ended und die für mich relevanten Teile in eine andere Text-Datei Schreiben(erstmal).
    Habe schon einiges probiert aber so richtig versteh ich nicht wie das am besten geht.
    Habe folgendes Beispiel aus dem Forum:


    Das sieht schonmal ganz gut aus aber wie zerlegt man jetzt den Text am besten so, das ich an meine gewünschten Daten komme? Irgendwie mit StringSplit, aber wie genau in diesem Fall...?

    Bin für jeden Tip dankbar.

  • Spielst du darauf an? "Bots für Spiele jeglicher Art, insbesondere Onlinespiele und ganz besonders Silkroad Online sowie World of Warcraft"

    Das hat damit nichts zu tun, Makros gehören ganz normal zum Spiel dazu, ist nichts verbotenes. Ich möchte sie lediglich in ein anderes Format bringen damit ich sie in einem bestimmten Addon nutzen kann ohne alles von Hand neu erstellen zu müssen .Eine Addon ist quasi eine Erweiterung für das Spiel, auch nicht verboten.

  • und was macht dieses Addon ? im endeffekt versuchst du dir doch einen vorteil im spiel zu schaffen...
    Edit:// und bevor du auf kleinigkeiten in den Forumregeln eingehst:

    Zitat

    Diese Liste ist ausdrücklich nicht vollständig. Programme, die dem hinter diesen Regeln stehenden Geist widersprechen, sind ebenso als nicht erlaubt anzusehen

  • Addon sind auswählbare Programme, die zum Spielinhalt gehören. Blizzard hat extra für Addons ins Spiel ein Auswahlmenü eingebaut, wo man diese aktivieren kann. SOmit gehören Addons zum legalem Spielgeschehen dazu und werden von Blizzard sogar selber teilweise angeboten. Und mti Addons lässt sich rein gar nichts automatisieren (sprich Bot-like) sondern dienen lediglich zur Unterstützung des Spielers (Durch Lebensbalken, Fertigkeitenabklingzeiten, oder Chatnachrichten).


    Also ist das mit dem Bot usw. überflüssig :)

  • Addon sind auswählbare Programme, die zum Spielinhalt gehören. Blizzard hat extra für Addons ins Spiel ein Auswahlmenü eingebaut, wo man diese aktivieren kann. SOmit gehören Addons zum legalem Spielgeschehen dazu und werden von Blizzard sogar selber teilweise angeboten. Und mti Addons lässt sich rein gar nichts automatisieren (sprich Bot-like) sondern dienen lediglich zur Unterstützung des Spielers (Durch Lebensbalken, Fertigkeitenabklingzeiten, oder Chatnachrichten).


    Also ist das mit dem Bot usw. überflüssig


    Das glaube ich dir, aber es gibt sicherlich auch Addons von 3 anbietern... Und wenn er ein offizielles Addon verwenden würde, müsste er wohl kaum spieldateien in ein anderes Format bringen :S

  • Ähem. Addons können und dürfen von jeder beliebigen Person erstellt werden. Diese Addons können eigene Funktionen beinhalten und auch eigene makro-verwaltungen sein und müsen dazu nicht unbedingt das original-Makroformat verwenden.

    Mit folgendem Reg. Ausdruck sollte es möglch sein, das Format zu lesen ;)

    [autoit]

    #include <Array.au3>
    $sMakros = ClipGet()

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

    $aMakros = StringRegExp($sMakros, '(?s)(?m)^MACRO\h*(\d+)\h*"(.*?)"\h*(\w+)\v+(.*?)\v+END\b', 3)
    _ArrayDisplay($aMakros)

    [/autoit]
  • Ich habe doch bereits gesagt das es sich um ein ganz legales Addon handelt und du hast bereits gesagt das du kein WoW spielst/kennst. Nein, es verschaft mir keinen Vorteil im Spiel es verbessert lediglich das Handling von Makros und gibt einem mehr Möglichkeiten. Nochmal: Das ist ein offizielles addon was auch vom Hersteller tolleriert wird und man überall laden kann wo es WoWaddons gibt, curse, wowinterface etc. hier der link
    Das hat rein gar nichts mit irgendwelchen unfairen Vorteilen im Spiel zu tun!

    Btw: Es gibt unzählige Addons die einem keine unfairen Vorteile verschaffen jedoch das Spielerlebnis erheblich verbessern. Ich glaube das fast niemand WoW spielt ohne Addons. Addons gehören einfach dazu und ich kenne niemand der WoW ohne spielt.

  • Mit folgendem Reg. Ausdruck sollte es möglch sein, das Format zu lesen ;)

    [autoit]

    #include <Array.au3>
    $sMakros = ClipGet()

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

    $aMakros = StringRegExp($sMakros, '(?s)(?m)^MACRO\h*(\d+)\h*"(.*?)"\h*(\w+)\v+(.*?)\v+END\b', 3)
    _ArrayDisplay($aMakros)

    [/autoit]

    Danke progandy! Das sieht schon ziemlich gut aus. Das ist genau der Teil den ich nicht verstehe, wo kann man denn das nachlesen ((?s)(?m)^.....? Jetzt sind aber immer noch die Nummern drin(Action ID) zb.16777239 usw. Wie kann ich die auch noch ausschliessen? Ich merke gerade wie wenig Plan ich eigentlich habe von AutoIt 8|

  • Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <Array.au3>

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

    $sString = FileRead(@ScriptDir & "\Test.txt")

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

    $aResult = _StringBetween($sString, "MACRO", "END")

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

    Dim $aMakroInfo[UBound($aResult)][3]

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

    For $i = 0 To UBound($aResult) -1
    $aTmp = _StringBetween($aResult[$i], '"', '"')
    $aMakroInfo[$i][0] = $aTmp[0]
    Next

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

    For $i = 0 To UBound($aResult) -1
    $aTmp = _StringBetween($aResult[$i], $aMakroInfo[$i][0] & '" ', '/')
    $aMakroInfo[$i][1] = $aTmp[0]
    Next

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

    For $i = 0 To UBound($aResult) -1
    $sTmp = StringRight($aResult[$i], StringLen($aResult[$i]) - StringInStr($aResult[$i], "/"))
    $aMakroInfo[$i][2] = "/" & $sTmp
    Next

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

    _ArrayDisplay($aMakroInfo)

    [/autoit]


    Das ist die umständlichere, aber verständlichere Variante. ^^

  • Danke werd ich mir mal auf der Zunge zergehen lassen. Es dauert immer eine Weile bis ich das halbwegs verstanden habe.
    Aller Anfang ist schwer...

  • Danke progandy! Das sieht schon ziemlich gut aus. Das ist genau der Teil den ich nicht verstehe, wo kann man denn das nachlesen ((?s)(?m)^.....? Jetzt sind aber immer noch die Nummern drin(Action ID) zb.16777239 usw. Wie kann ich die auch noch ausschliessen? Ich merke gerade wie wenig Plan ich eigentlich habe von AutoIt 8|


    Das ist alles die Synax für reguläre Ausdrpcke. Diese findest du in der Hilfe unter StringRegExp ;)Die Zahlen sind mit im Array, weil ich einfach mal alles ausgelesen habe. Du musst es ja nicht mit in die neue Datei schreiben ;)
    Erklärung des regulären Ausdrucks:

    Spoiler anzeigen
  • pfff... ich glaube ich sollte erstmal was noch einfacheres machen, krieg das nicht auf die reihe.
    habe erstmal das script von name22 benutzt und das array sieht gut aus aber ich suche schon die ganze zeit wie ich jetzt mit den einzelnen strings arbeiten kann. damit der konverter funktionieren kann muß ich alles(beschreibung,icon,makro) einzeln in eine andere datei an einen bestimmten platz kopieren. vielleicht fällt der groschen ja noch. ich brauch einfach mehr basics...
    [Blockierte Grafik: http://www.bilder-hochladen.net/files/b9fh-b.jpg]

  • die kenne ich grad noch :P
    ich habs ja bereits damit verucht aber ich weis nicht wie ich das alles einzeln kopieren kann.

    Code
    $file = FileOpen(@ScriptDir & "\temp.txt", 1)
    filewrite($file, $sTmp)
    FileClose($file)


    das geht aber ich muss praktisch jedes feld wie auf dem bild einzeln kopieren und woanders einfügen.

  • ich bin 0,0 weitergekommen, ist immernoch so wie name22 gepostet hat + fileopen/filewrite getestet.


    filewrite($file, $sTmp) ist halt nur ein test, ich weis ja nicht wie ich das kriege was ich wirklich in die datei schreiben will.

  • Zitat

    das geht aber ich muss praktisch jedes feld wie auf dem bild einzeln kopieren und woanders einfügen.


    Blödsinn. ^^
    Du hast doch bereits ein Array mit allen Daten, ArrayDisplay dient nur zur Darstellung. ;)
    Am besten machst du das mit For Schleifen.

    Spoiler anzeigen
    [autoit]

    $hFile = FileOpen(@ScriptDir & "\Data.txt", 2)
    $sData = ""
    For $i = 0 To UBound($aMakroInfo) -1
    $sData &= $aMakroInfo[$i][0]
    Next
    FileWrite($hFile, $sData)
    FileCLose($hFile)

    [/autoit]
  • ja, das war nur als bilddliche erklärung gemeint damit klar ist was ich machen will. arraydisplay ist auch klar.
    im prinzip wollte ich das wissen was du gepostet hast. ich erhalte damit aber den text der ganzen spalte(bildlich).
    also zb: Siegel1Segen1Aura1Aura2FinishingGesundheit
    ich möchte aber jeweils nur siegel1 usw. weil ich das einzeln in eine neue datei einfügen will.

    hoffe es kam rüber...

  • So?

    Spoiler anzeigen
    [autoit]

    $hFile = FileOpen(@ScriptDir & "\Data.txt", 2)
    $sData = ""
    For $i = 0 To UBound($aMakroInfo) -1
    $sData &= $aMakroInfo[$i][0] & @CRLF
    Next
    FileWrite($hFile, $sData)
    FileCLose($hFile)

    [/autoit]


    Oder so?

    Spoiler anzeigen
    [autoit]

    $hFile = FileOpen(@ScriptDir & "\Data.txt", 2)
    FileWrite($hFile, $aMakroInfo[0][0])
    FileCLose($hFile)

    [/autoit]