[jTool] Offline Map Konverter
Hallo,
ich veröffentliche hiermit einen Map Konverter für den Offline-Gebrauch. Die Idee kam mir durch die häufige Ausfallzeit der vorhandenen Online-Konverter. Außerdem haben sämtliche Online-Konverter keine Möglichkeit Pickups zu konvertieren, die mit MTA gesetzt worden sind. Dies ist hiermit ebenfalls möglich.
Ebenfalls wird hiermit sichergestellt, das eure Maps beim konvertieren nirgends abgefangen werden, da die Konvertierung ausschließlich lokal geschieht.
Verzichtserklärung:
Der Code wird veröffentlicht "wie er ist". Es wird dringendst empfohlen vor Benutzung ein Backup der Mapfiles zu machen. Für Schäden jeglicher Art übernehme ich keine Haftung, die Benutzung erfolgt auf eigene Verantwortung.
Der Code darf jederzeit von jedem verändert werden, solange die Namensnennung nicht aus dem Code entfernt wird.
Der Code darf nicht unter eigenem Name veröffentlicht werden, weder frei noch kommerziell.
Vorführung
Das Tool ist nicht mehr als eine kleine ausführbare Datei bzw. ein Visual Basic Code (.vbs) um es beim Namen zu nennen. Im richtigen Verzeichnis abgelegt und gestartet macht der Code in Sekundenschnelle die Arbeit für die man selbst mehrere Stunden bräuchte.
Anleitung
Die folgenden Schritte sollen zeigen wie der Code verwendet werden kann, um die .map Dateien von MTA in einen für PAWN bestimmten Code umzuwandeln.
Ich weise nochmals darauf hin, vor Benutzung ein Backup der Mapfiles, bzw. der Dateien darin, anzulegen. Der Code wurde nach bestem Wissen und Gewissen getestet, dennoch können unvorhergesehene Ereignisse (z.B. Stromausfall) möglicherweise zu Fehlern führen. Ebenfalls weise ich nochmals darauf hin, dass die Benutzung auf eigene Gefahr geschieht.
1. Code herunterladen
Um den Code auf den Rechner zu bekommen gibt es zwei Möglichkeiten:
- Die erste und einfachste Variante ist der direkte Download. Im Anhang befindet sich ein ZIP-Ordner der die ausführbare Datei enthält.
1) ZIP Ordner auf den Windows-PC herunterladen
2) Datei entpacken - Die zweite Variante ist die manuelle Erstellung der Datei:
1) Kopiere folgenden Quellcode:C
Alles anzeigen'-------------------------------------------------------------------------' ' ' ' [jTool] - Offline Map Konverter ' ' jMapKonverter.vbs ' ' ' ' Version 1.0 - 13.04.2015 ' ' ' ' © Jeffry ' ' ' '-------------------------------------------------------------------------' '======================================================================================' 'Für Änderungen am Ausgabe-Layout die Einstellungen hier vornehmen: ' '======================================================================================' objectOutStr = "CreateDynamicObject($model, $x, $y, $z, $rx, $ry, $rz);" ' vehicleOutStr = "CreateVehicle($model, $x, $y, $z, $ra, $color1, $color2, -1);" ' pickupOutStr = "AddStaticPickup($model, $x, $y, $z);" ' '======================================================================================' Set fs = CreateObject("Scripting.FileSystemObject") pfad = fs.GetParentFolderName(Wscript.ScriptFullName) objects = 0 vehicles = 0 pickups = 0 allobjects = 0 allvehicles = 0 allpickups = 0 emptystr = " " findstr = "" out_id = "" out_x = "" out_y = "" out_z = "" out_rx = "" out_ry = "" out_rz = "" out_col1 = "" out_col2 = "" out_type = "" Set sDir = fs.getfolder(pfad) For Each file In sDir.Files If LCase(Right(file.path, 4)) = ".map" Then fail = 0 Set rFile = fs.OpenTextFile(file.path, 1) Set wFile = fs.CreateTextFile(Left(file.path, Len(file.path)-3) & "txt", True) Do While rFile.AtEndOfStream <> True str = rFile.ReadLine If InStr(str, "<object id") > 0 And InStr(str, "</object>") > 0 Then objects = objects + 1 findstr = "id=""" find = InStr(str, findstr)+Len(findstr) out_type = Mid(str, find, InStr(find, str, """")-find) findstr = "model=""" find = InStr(str, findstr)+Len(findstr) out_id = Mid(str, find, InStr(find, str, """")-find) findstr = "posX=""" find = InStr(str, findstr)+Len(findstr) out_x = Mid(str, find, InStr(find, str, """")-find) If InStr(out_x, ".") = 0 Then out_x = out_x & ".0" findstr = "posY=""" find = InStr(str, findstr)+Len(findstr) out_y = Mid(str, find, InStr(find, str, """")-find) If InStr(out_y, ".") = 0 Then out_y = out_y & ".0" findstr = "posZ=""" find = InStr(str, findstr)+Len(findstr) out_z = Mid(str, find, InStr(find, str, """")-find) If InStr(out_z, ".") = 0 Then out_z = out_z & ".0" findstr = "rotX=""" find = InStr(str, findstr)+Len(findstr) out_rx = Mid(str, find, InStr(find, str, """")-find) If InStr(out_rx, ".") = 0 Then out_rx = out_rx & ".0" findstr = "rotY=""" find = InStr(str, findstr)+Len(findstr) out_ry = Mid(str, find, InStr(find, str, """")-find) If InStr(out_ry, ".") = 0 Then out_ry = out_ry & ".0" findstr = "rotZ=""" find = InStr(str, findstr)+Len(findstr) out_rz = Mid(str, find, InStr(find, str, """")-find) If InStr(out_rz, ".") = 0 Then out_rz = out_rz & ".0" str = objectOutStr str = Replace(str, "$model", out_id) str = Replace(str, "$x", out_x) str = Replace(str, "$y", out_y) str = Replace(str, "$z", out_z) str = Replace(str, "$rx", out_rx) str = Replace(str, "$ry", out_ry) str = Replace(str, "$rz", out_rz) str = str & " //" & Replace(Replace(out_type, "(", "["), ")", "]") wFile.WriteLine str End If Loop rFile.Close Set rFile = fs.OpenTextFile(file.path, 1) Do While rFile.AtEndOfStream <> True str = rFile.ReadLine If InStr(str, "<vehicle id") > 0 And InStr(str, "</vehicle>") > 0 Then vehicles = vehicles + 1 findstr = "id=""" find = InStr(str, findstr)+Len(findstr) out_type = Mid(str, find, InStr(find, str, """")-find) findstr = "model=""" find = InStr(str, findstr)+Len(findstr) out_id = Mid(str, find, InStr(find, str, """")-find) findstr = "posX=""" find = InStr(str, findstr)+Len(findstr) out_x = Mid(str, find, InStr(find, str, """")-find) If InStr(out_x, ".") = 0 Then out_x = out_x & ".0" findstr = "posY=""" find = InStr(str, findstr)+Len(findstr) out_y = Mid(str, find, InStr(find, str, """")-find) If InStr(out_y, ".") = 0 Then out_y = out_y & ".0" findstr = "posZ=""" find = InStr(str, findstr)+Len(findstr) out_z = Mid(str, find, InStr(find, str, """")-find) If InStr(out_z, ".") = 0 Then out_z = out_z & ".0" findstr = "rotZ=""" find = InStr(str, findstr)+Len(findstr) out_rz = Mid(str, find, InStr(find, str, """")-find) If InStr(out_rz, ".") = 0 Then out_rz = out_rz & ".0" findstr = "color=""" find = InStr(str, findstr)+Len(findstr) out_col1 = Mid(str, find, InStr(find, str, ",")-find) find = InStr(find, str, ",")+1 out_col2 = Mid(str, find, InStr(find, str, ",")-find) str = vehicleOutStr str = Replace(str, "$model", out_id) str = Replace(str, "$x", out_x) str = Replace(str, "$y", out_y) str = Replace(str, "$z", out_z) str = Replace(str, "$ra", out_rz) str = Replace(str, "$color1", out_col1) str = Replace(str, "$color2", out_col2) str = str & " //" & Replace(Replace(out_type, "(", "["), ")", "]") wFile.WriteLine str End If Loop rFile.Close Set rFile = fs.OpenTextFile(file.path, 1) Do While rFile.AtEndOfStream <> True str = rFile.ReadLine If InStr(str, "<pickup id") > 0 And InStr(str, "</pickup>") > 0 Then pickups = pickups + 1 findstr = "id=""" find = InStr(str, findstr)+Len(findstr) out_type = Mid(str, find, InStr(find, str, """")-find) findstr = "type=""" find = InStr(str, findstr)+Len(findstr) out_id = Mid(str, find, InStr(find, str, """")-find) findstr = "posX=""" find = InStr(str, findstr)+Len(findstr) out_x = Mid(str, find, InStr(find, str, """")-find) If InStr(out_x, ".") = 0 Then out_x = out_x & ".0" findstr = "posY=""" find = InStr(str, findstr)+Len(findstr) out_y = Mid(str, find, InStr(find, str, """")-find) If InStr(out_y, ".") = 0 Then out_y = out_y & ".0" findstr = "posZ=""" find = InStr(str, findstr)+Len(findstr) out_z = Mid(str, find, InStr(find, str, """")-find) If InStr(out_z, ".") = 0 Then out_z = out_z & ".0" Select case out_id case "10": out_id = "321" 'Dildo case "11": out_id = "322" 'Dildo case "12": out_id = "323" 'Vibrator case "13": out_id = "324" 'Vibrator case "14": out_id = "325" 'Flower case "15": out_id = "326" 'Cane case "1": out_id = "331" 'Brassknuckle case "2": out_id = "333" 'Golfclub case "3": out_id = "334" 'Nightstick case "4": out_id = "335" 'Knife case "5": out_id = "336" 'Bat case "6": out_id = "337" 'Shovel case "7": out_id = "338" 'Poolstick case "8": out_id = "339" 'Katana case "9": out_id = "341" 'Chainsaw case "16": out_id = "342" 'Grenade case "17": out_id = "343" 'Teargas case "18": out_id = "344" 'Molotov case "22": out_id = "346" 'Colt 45 case "23": out_id = "347" 'Silenced case "24": out_id = "348" 'Deagle case "25": out_id = "349" 'Shotgun case "26": out_id = "350" 'Sawed-off case "27": out_id = "351" 'Combat Shotgun case "28": out_id = "352" 'UZI case "29": out_id = "353" 'MP5 case "30": out_id = "355" 'AK-47 case "31": out_id = "356" 'M4 case "33": out_id = "357" 'Rifle case "34": out_id = "358" 'Sniper case "35": out_id = "359" 'Rocket Launcher case "36": out_id = "360" 'Rocket Launcher HS case "37": out_id = "361" 'Flamethrower case "38": out_id = "362" 'Minigun case "39": out_id = "363" 'Satchel case "40": out_id = "364" 'Bomb case "41": out_id = "365" 'Spraycan case "42": out_id = "366" 'Fire Extinguisher case "43": out_id = "367" 'Camera case "44": out_id = "368" 'Nightvision case "45": out_id = "369" 'Infrared case "46": out_id = "371" 'Parachute case "32": out_id = "372" 'Tec-9 case "health": out_id = "1240" 'Health case "armor": out_id = "1242" 'Armor case else: out_id = "???" 'Unknown? End Select str = pickupOutStr str = Replace(str, "$model", out_id) str = Replace(str, "$x", out_x) str = Replace(str, "$y", out_y) str = Replace(str, "$z", out_z) str = str & " //" & Replace(Replace(out_type, "(", "["), ")", "]") wFile.WriteLine str End If Loop wFile.WriteLine "" str = "/*************************************************" wFile.WriteLine str str = "* Die folgenden Items wurden konvertiert: *" wFile.WriteLine str If objects = 1 Then str = "" Else: str = "e" End If str = "* - " & objects & " Objekt" & str & " " & Left(emptystr, 33-Len(objects)-Len(str)) & "*" wFile.WriteLine str If vehicles = 1 Then str = "" Else: str = "e" End If str = "* - " & vehicles & " Fahrzeug" & str & " " & Left(emptystr, 31-Len(vehicles)-Len(str)) & "*" wFile.WriteLine str If pickups = 1 Then str = "" Else: str = "s" End If str = "* - " & pickups & " Pickup" & str & " " & Left(emptystr, 33-Len(pickups)-Len(str)) & "*" wFile.WriteLine str str = "* *" wFile.WriteLine str str = "* Datum: " & Date() & " - " & Time() & " *" wFile.WriteLine str str = "* Konvertiert durch jTool - jMapKonverter.vbs *" wFile.WriteLine str str = "*************************************************/" wFile.WriteLine str wFile.Close allobjects = allobjects + objects allvehicles = allvehicles + vehicles allpickups = allpickups + pickups End If Next str = Chr(10) & "Die Konvertierung wurde erfolgreich abgeschlossen!" & Chr(10) & Chr(10) & "Es wurden folgende Items konvertiert:" & Chr(10) If allobjects = 1 Then emptystr = "" Else: emptystr = "e" End If str = str & " - " & allobjects & " Objekt" & emptystr & Chr(10) If allvehicles = 1 Then emptystr = "" Else: emptystr = "e" End If str = str & " - " & allvehicles & " Fahrzeug" & emptystr & Chr(10) If allpickups = 1 Then emptystr = "" Else: emptystr = "s" End If str = str & " - " & allpickups & " Pickup" & emptystr & Chr(10) & Chr(10) & Chr(10) str = str & "Vielen Dank f" & Chr(252) & "r die Verwendung von jTool - jMapKonverter.vbs!" & Chr(10) str = str & Chr(169) & "Jeffry - April 2015" Msgbox str, vbInformation , "Konvertierung erfolgreich!"
2) Erstelle eine leere Textdatei (.txt) und öffne diese mit einem Editor.
3) Füge den kopierten Code ein.
4) Speichere die Datei mit "Speichern unter..." als "jMapKonverter.vbs"
5) Erstelle am besten einen Ordner "Konverter" in den die "jMapKonverter.vbs" gespeichert werden kann.
2. Code ausführen
Der Code durchsucht das gesamte Verzeichnis (den gesamten Ordner) in dem die Datei liegt nach .map Dateien. Die zu konvertierenden .map Dateien müssen nun in das Verzeichnis des Konverters gelegt werden.
1) Kopiere die zu konvertierende .map Datei(en) in den "Konverter" Ordner.
2) Klicke doppelt auf die Datei "jMapKonverter.vbs" und warte. Je nach Größe der Maps und Prozessorgeschwindigkeit kann der Vorgang einige Sekunden dauern.
3) Sobald der Prozess zu Ende ist, bekommst Du eine Ergebnismeldung.
3. Ergebnis ansehen
In dem Ordner "Konverter" wurde nun eine Textdatei, mit dem Name der .map Datei, erstellt, in der sich der konvertierte Code befindet.
1) Öffne die Textdatei mit einem Text-Editor.
2) Nun siehst Du den konvertierten Code, der nun in Deinen Gamemode/Filterscript eingefügt werden kann.
3) Optional: Wenn Du nicht willst, dass die im Ordner liegende(n) Map(s) jedes mal erneut konvertiert werde(n), entferne die .map Datei(en) wieder aus dem Ordner.
Kompatibilität
Die Konvertierung geschieht aus dem .map Format in ein beliebiges, von PAWN lesbares, Format.
Um Änderungen am Format vorzunehmen müssen lediglich die Ausgabe-Strings verändert werden. Die vorhandenen Platzhalter werden jeweils bei der Konvertierung ersetzt. Im Folgenden ein Beispiel:
Original:
'======================================================================================'
'Für Änderungen am Ausgabe-Layout die Einstellungen hier vornehmen: '
'======================================================================================'
objectOutStr = "CreateDynamicObject($model, $x, $y, $z, $rx, $ry, $rz);" '
vehicleOutStr = "CreateVehicle($model, $x, $y, $z, $ra, $color1, $color2, -1);" '
pickupOutStr = "AddStaticPickup($model, $x, $y, $z);" '
'======================================================================================'
Geändert:
'======================================================================================'
'Für Änderungen am Ausgabe-Layout die Einstellungen hier vornehmen: '
'======================================================================================'
objectOutStr = "CreateObject($model, $x, $y, $z, $rx, $ry, $rz);" '
vehicleOutStr = "AddStaticVehicle($model, $x, $y, $z, $ra, $color1, $color2);" '
pickupOutStr = "CreatePickup($model, 2, $x, $y, $z, -1);" '
'======================================================================================'
Fragen/Probleme/Anregungen/Rückmeldungen
Bei Fragen und Problemen jeglicher Art bitte ich um die Benutzung der "Antworten" Funktion. Sollte ich binnen 48 Stunden nicht geantwortet haben, kann mir gerne eine Private Nachricht (PN) geschickt werden.
Für Anregungen betreffend Vorschlägen oder Verbesserungen bin ich jederzeit offen. Ich bitte darum, diese ebenfalls über die "Antworten" Funktion zu posten.
Über Rückmeldungen würde ich mich freuen.
Changelog
- 13.04.2015: [v1.0] Erste Veröffentlichung
- 22.06.2015: [v1.0] Download-Bilder repariert
- 08.11.2015: [v1.0] Code-Formatierung an WBB4 angepasst
Download
Viel Spaß mit dem Tool, ich hoffe es erspart dem einen oder anderen etwas Zeit.
Beste Grüße,
Jeffry