Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 17.09.2016, 23:14   #1 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard mdhClassReplace

mdhClassReplace.jar ist ein simples Javaprogramm um classnames in ext, sqs, sqf, sqm dateien im order und unterorder des tools zu aendern. Die ausgetauschten classnames stehen in der mdhClassReplace.cfg datei.





wie funktionierst:
1. erstelle und schreibe in die mdhClassReplaceLog.txt lognachrichten
2. die mdhClassReplace.cfg wird eingelesen um die classnames zu ermitteln welche in den ext, sqs, sqf und sqm dateien ausgetauscht werden sollen
3. jede ext, sqs, sqm, sqf datei im ordner und in den unterordnern des tools werden durchscannt und die classnames ausgetauscht

ein kleines beispiel fuer die verwendung um A2 missionsne nach A3 mit CUP zu portieren:
1. runterladen des tools mdhClassReplace.7z
2. extrahieren des tools in einen neuen ordner
3. arma2 missionsordner in den selben ordner wie das tool
4. ausfuehren der mdhClassReplace.jar
5. einen blick in die mdhClassReplaceLog.txt werden und pruefen was gemacht wurde
6. den arma2 missionsordner anschließend in den arma3 mission ordern kopieren und die mission im Arma 3 3D editor oeffnen

die verwendung des tools/mdhClassReplace.jar auf eigene gefahr

Download: http://moerderhoschi.bplaced.net/pub...lassReplace.7z

my A2 -> CUP ClassnameMSExcelWar -> http://moerderhoschi.bplaced.net/pub...Classnames.png

mdhClassReplace.jar Source:
Code:
package mdhClassReplace;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class mdhClassReplace {

	public static void dirTree(File dir, List classOld, List classNew) {
		File[] subdirs = dir.listFiles();
		for (File subdir : subdirs) {
			if (subdir.isDirectory()) {
				dirTree(subdir, classOld, classNew);
			} else {
				doFile(subdir, classOld, classNew);
			}
		}
	}

	public static void doFile(File file, List classOld, List classNew) {
		String extension = "";
		int i = file.getName().lastIndexOf('.');
		if (i > 0) {
			extension = file.getName().substring(i + 1).toLowerCase();
		}

		if (extension.contentEquals("sqm")
				|| extension.contentEquals("sqf")
				|| extension.contentEquals("sqs")
				|| extension.contentEquals("ext")) {
			writeLog("checkFile: " + file.getAbsolutePath());
			rplTxt(file.getAbsolutePath(), classOld, classNew);
		}
	}

	public static void rplTxt(String fileName, List classOld, List classNew) {

		Path path = Paths.get(fileName);
		Charset charset = StandardCharsets.UTF_8;

		String content = null;

		try {
			content = new String(Files.readAllBytes(path), charset);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		String contentLower = content.toLowerCase();

		boolean foundClass = false;
		for (int i = 0; i < classOld.size(); i++) {
			String classOldS = "\"" + classOld.get(i).toString() + "\"";
			String classNewS = "\"" + classNew.get(i).toString() + "\"";
			if (contentLower.contains(classOldS.toLowerCase())) {
				foundClass = true;
				content = content.replaceAll("(?i)"+classOldS, classNewS);
				writeLog("changedClass: " + classOldS + " to " + classNewS);								
			}
			
			classOldS = "'" + classOld.get(i).toString() + "'";
			classNewS = "'" + classNew.get(i).toString() + "'";
			if (contentLower.contains(classOldS.toLowerCase())) {
				foundClass = true;
				content = content.replaceAll("(?i)"+classOldS, classNewS);
				writeLog("changedClass: " + classOldS + " to " + classNewS);
			}
		}

		if (foundClass) {
			try {
				Files.write(path, content.getBytes(charset));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public static void writeLog(String logTxt) {
		PrintWriter out;
		logTxt = new java.util.Date() + " --> " + logTxt;
		try {
			out = new PrintWriter(new BufferedWriter(new FileWriter(
					"mdhClassReplaceLog.txt", true)));
			out.println(logTxt);
			System.out.println(logTxt);
			out.close();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

	}

	public static void main(String[] args) {

		writeLog("-------------------------------");
		writeLog("pgmStart");
		String currentDir = System.getProperty("user.dir");
		writeLog("currentDir: " + currentDir);

		File f = new File(currentDir);
		File c = new File(currentDir.concat("\\mdhClassReplace.cfg"));

		if (c.exists() && !c.isDirectory()) {

			String classOldS = "";
			String classNewS = "";
			List classOld = new ArrayList();
			List classNew = new ArrayList();

			try {
				BufferedReader in = new BufferedReader(new FileReader(c));
				String actLine = null;
				while ((actLine = in.readLine()) != null) {

					int seperatorPos = actLine.indexOf(";");
					classOldS = actLine.substring(0, seperatorPos);
					classNewS = actLine.substring(seperatorPos + 1);

					if (!classOldS.isEmpty() && !classNewS.isEmpty()) {
						classOld.add(classOldS);
						classNew.add(classNewS);
					}

				}
			} catch (IOException e) {
				e.printStackTrace();
				writeLog("pgmError: error while reading mdhClassReplace.cfg");
				System.exit(-1);
			}

			dirTree(f, classOld, classNew);
		} else {
			writeLog("mdhClassReplace.cfg not found");
		};
		
		writeLog("pgmEnd");
	}
}
updates:
v1.1
- problem mit groß/kleinschreibung beim klassennamen ersetzen gefixt
- mehr klassennamen zum ersetzten in die mdhClassReplace.cfg hinzugefuegt

v1.2
- mdhClassReplace.cfg um weitere Klassen ergaenzt
- update vom Javaprogramm, .sqs sowie .ext werden nun auch geprueft

gruß
hoschi
__________________



Geändert von Moerderhoschi (18.09.2016 um 18:13 Uhr). Grund: update 1.1
Moerderhoschi ist offline   Mit Zitat antworten
Alt 18.09.2016, 18:14   #2 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

update zu v1.1:
- problem mit groß/kleinschreibung beim klassennamen ersetzen gefixt
- mehr klassennamen zum ersetzten in die mdhClassReplace.cfg hinzugefuegt

mdhClassReplace.jar Source im ersten Beitrag ebenfalls aktualisiert
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 19.09.2016, 15:04   #3 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 38
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Gutes Tool zum porten. Danke Hoschi!
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 12.11.2016, 11:37   #4 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 38
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Kann man damit auch A1 Missionen irgendwie porten? Habe es eben versucht, bekomme aber nur diesen Eintrag im Log, ohne das die Mission geportet wird.

Zitat:

Sat Nov 12 11:34:37 CET 2016 --> pgmStart
Sat Nov 12 11:34:37 CET 2016 --> currentDir: C:\Users\norma_000\Documents\Linkgeber für Rocketdock\A3 Edit\mdhClassReplace
Sat Nov 12 11:34:37 CET 2016 --> checkFile: C:\Users\norma_000\Documents\Linkgeber für Rocketdock\A3 Edit\mdhClassReplace\[CTF] (20) Corridor v1.Sara\mission.sqm
Sat Nov 12 11:34:37 CET 2016 --> pgmEnd


Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 12.11.2016, 12:10   #5 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

ja geht auch, jedoch muss erst in der mdhClassReplace.cfg Datei die alten A1 Klassennamen mit den jetzigen zu ersetzenden CupKlassennamen befuellt werden.

Die letzte verfuegbare version ist nur mit A2 Klassen und den CupReplacements versorgt: mdhClassReplace.cfg

Falls Du Dir die Muehe geben solltest und die A1 Klassennamen sowie durch die zu ersetzenden CupKlassennamen zusammen zu suchen, wuerde ich mich sehr freuen falls Du die erweiterte mdhClassReplace.cfg bereitstellst
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 12.11.2016, 17:07   #6 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 38
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Ok, also muss ich eigentlich "nur" die Classnames definieren damit die sqm portiert wird. Mich hatte es eben nur verwundert, dass die mission.sqm zwar erkannt wurde aber gänzlich unberührt blieb.


Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 12.11.2016, 17:45   #7 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

Ja genau, einfach die A1 Klassen und Cup Klassen in der mdhClassReplace.cfg definieren dann sollte das klappen.

Das System funktioniert ganz simpel, links vom Semicolon alter Klassenname und rechts neuer Klassenname:

KlassenNameVorher;KlassenNameNachher

Ich denke wich werde die Tage mal die neue Version des JavaPGMs hochladen, dort werden dann auch .sqs und .ext mit bearbeitet.
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 12.11.2016, 19:19   #8 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 38
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Topp!

Ich habe die ersten 150 Classnames aufgenommen. Ich schick dir die Datei wenn ich soweit alles habe.


Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 12.11.2016, 22:01   #9 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

update v1.2:

- mdhClassReplace.cfg um weitere Klassen ergaenzt
- update vom Javaprogramm, .sqs sowie .ext werden nun auch geprueft
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119