in diesem Tutorial werde ich euch einmal erklären , wie ihr ganz einfach einen Valvuesearcher erstellen könnt. Als Programmiersprache verwende ich Autoit.
Gewisse Grundkenntnisse in Autoit sind für dieses Tutorial erforderlich.
1.) Erstellung einer GUI für den Valvuesearcher
Zuerstmal einmal solltet ihr euch eine GUI für den Valvuesearcher erstellen, dazu könnt ihr den Koda Form Designer benutzen.
So sieht meine GUI aus, damit ihr weißt, wie ihr es ungefähr machen könnt :
Code:
#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> $GUI = GUICreate("ValvueSearcher", 272, 106, 192, 124) $LabelSuche = GUICtrlCreateLabel("Suchen", 8, 12, 40, 17) $InputSuche = GUICtrlCreateInput("", 60, 8, 209, 21) $LabelValvue = GUICtrlCreateLabel("Valvue", 8, 44, 37, 17) $Edit1 = GUICtrlCreateEdit("", 60, 40, 209, 21, BitOR($ES_READONLY,$ES_WANTRETURN)) $Suchen = GUICtrlCreateButton("Suchen", 184, 72, 75, 25) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd
Nun müssen wir es erstmal so schreiben, dass wenn ein Name angegeben wird, in der Editbox auch die passende Valvue erscheint. Ich habe es mal so geschrieben :
Code:
#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> $GUI = GUICreate("ValvueSearcher", 272, 106, 192, 124) $LabelSuche = GUICtrlCreateLabel("Suchen", 8, 12, 40, 17) $InputSuche = GUICtrlCreateInput("", 60, 8, 209, 21) $LabelValvue = GUICtrlCreateLabel("Valvue", 8, 44, 37, 17) $Edit1 = GUICtrlCreateEdit("", 60, 40, 209, 21, BitOR($ES_READONLY,$ES_WANTRETURN)) $Suchen = GUICtrlCreateButton("Suchen", 184, 72, 75, 25) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Suchen Switch (GuiCtrlRead($InputSuche)) Case "Schwert" ; Wenn in der Inputbox bei Suche Schwert gelesen wird, dann ... GuiCtrlSetData($Edit1,"1") ; Wird in die Editbox die Zahl 1 geschrieben, welches die Valvue darstellen soll EndSwitch EndSwitch WEnd
3.) Valvues und Namen aus der Item_proto filtern
Wer nun denkt, dass er jede einzelne Valvue und jeden Name selber eintragen muss im Skript, der liegt da total falsch, da wird uns die Arbeit einfach ersparen können, indem wir die Informationen aus der Item_proto.xml
aus einem beliebigen Clienten ziehen können, wobei wir vorher die .epk und .eix entpacken müssen um an die Item_proto zu kommen und diese dann auch weiter zu entpacken.
So, dann haben wir nun die Item_proto entpackt und öffnen mal die item_proto.xml.
Hier mal eine Zeile aus der Item_proto.xml :
Code:
<Item vnum="10" hashName="'µµ+0'" name="Schwert+0" type="1" subtype="0" weight="0" size="2" antiflag="32" flag="1" wearflag="16" immuneflag="0" gold="0" buy_price="0" limittype0="1" limitvalue0="0" limittype1="0" limitvalue1="0" applytype0="7" applyvalue0="22" applytype1="0" applyvalue1="0" applytype2="0" applyvalue2="0" value0="0" value1="15" value2="19" value3="13" value4="15" value5="0" socket0="0" socket1="64992" socket2="127" socket3="64976" socket4="21631" socket5="4855" refine_vnum="11" refine_set="1" magic_pct="15" specular="0" socket_pct="1" />
Hier einmal der Code mit Erklärung, wo die .xml durchgelesen werden, die Namen und Valvues rausgefiltert werden und als Autoit Code in eine Textdatei geschrieben werden.
Code:
#include <String.au3> #include <File.au3> FileOpen(@ScriptDir & "\Source.txt",2) ; Source.txt wird geöffnet im Schreibmodus FileOpen(@ScriptDir & "\item_proto_dump.xml") ; item_proto_dump.xml wird im Lesemodus geöffnet $LCount = _FileCountLines(@ScriptDir & "\item_proto_dump.xml") ; Es wird ermittelt, wieviele Zeilen die item_proto_dump.xml hat For $i = 1 To $LCount ; For Schleife $i hat den Wert 1 und bei jeder For Schleife erhöht sich der Wert von $i um 1, bis die Anzahl der Zeilen erreicht wurde $ReadLine = FileReadLine(@ScriptDir & "\item_proto_dump.xml", $i) ; Bestimmte Zeile wird ausgelesen If StringInStr($ReadLine, 'name="') Then ; Wenn name=" sich im ausgelesenen Zeilentext befindet, dann ... $Name = _StringBetween($ReadLine, 'name="', '"',1) ; Name wird herausgefiltert $Valvue = _StringBetween($ReadLine, '<Item vnum="', '"',1) ; Valvue wird herausgefiltert FileWrite("Source.txt",'case "' & $Name[0] & '"' & @CRLF) ; Schreibt Autoit Code in Textdatei .. FileWrite("Source.txt",'GuiCtrlSetData($Edit1,"' & $Valvue[0] & '")' & @CRLF) ; Schreibt Autoit Code in Textdatei .. EndIf ; Ende der If Schleife Next ; Ende der Schleife FileClose(@ScriptDir & "\Source.txt") ; Schließt die Source.txt FileClose(@ScriptDir & "\item_proto_dump.xml") ; Schließt die item_proto_dump.xml wieder
So, nun packt ihr die item_proto_dump.xml in den Ordner, worin sich dieses Script befindet und startest das Skript. Nun dauert es einen Moment und ihr werdet dann sehen, dass die Infos herausgefiltert und als Code in eure Source.txt geschrieben wurden.
So sieht es bei mir in der Source.txt aus :
Code:
case "Yang" GuiCtrlSetData($Edit1,"1") case "Deutsche Version" GuiCtrlSetData($Edit1,"2") case "Schwert+0" GuiCtrlSetData($Edit1,"10") case "Schwert+1" GuiCtrlSetData($Edit1,"11") case "Schwert+2" GuiCtrlSetData($Edit1,"12") case "Schwert+3" GuiCtrlSetData($Edit1,"13") case "Schwert+4" GuiCtrlSetData($Edit1,"14") case "Schwert+5" GuiCtrlSetData($Edit1,"15") case "Schwert+6" GuiCtrlSetData($Edit1,"16") case "Schwert+7" GuiCtrlSetData($Edit1,"17") ....
Ja, nun müsst ihr den Inhalt der Source.txt noch in euer Skript einfügen, niemlich direkt nach dem " Switch (GuiCtrlRead($Edit1)) ", falls ihr mein Skript benutzt.
So sollte es dann bei euch ca. aussehen :
Code:
#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> $GUI = GUICreate("ValvueSearcher", 272, 106, 192, 124) $LabelSuche = GUICtrlCreateLabel("Suchen", 8, 12, 40, 17) $InputSuche = GUICtrlCreateInput("", 60, 8, 209, 21) $LabelValvue = GUICtrlCreateLabel("Valvue", 8, 44, 37, 17) $Edit1 = GUICtrlCreateEdit("", 60, 40, 209, 21, BitOR($ES_READONLY,$ES_WANTRETURN)) $Suchen = GUICtrlCreateButton("Suchen", 184, 72, 75, 25) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Suchen Switch (GuiCtrlRead($InputSuche)) case "Yang" GuiCtrlSetData($Edit1,"1") case "Deutsche Version" GuiCtrlSetData($Edit1,"2") case "Schwert+0" GuiCtrlSetData($Edit1,"10") case "Schwert+1" GuiCtrlSetData($Edit1,"11") case "Schwert+2" GuiCtrlSetData($Edit1,"12") case "Schwert+3" GuiCtrlSetData($Edit1,"13") ; ..... und so weiter EndSwitch EndSwitch WEnd