Das wäre eine Idee. Habe das leider Coronabedingt noch nicht richtig Testen können. Letzter Infekt war irgendwie leichter.
Bin seit Samstag grade auf dem "KeinBockfürgarnix" Trip. Wenn es mir wieder besser geht hänge ich mich wieder dran
Ah, Ok, dann auch noch die.
Das ist die Encodierte Version, die andere würde ja nichts bringen. Musste Sie verpacken.
Ich stelle dir mal die 2 relevanten Dateien hier rein.
Wenn die Datei neu geladen wird, wird Sie vom Game wieder verschlüsselt, man muss sie dann beim Ändern nur jedes Mal Encrypten
Bin ja auch kein professioneller Programmierer 😃 Bei mir ist alles ein wenig Chaotisch. Manchmal muss ich andere Fragen was der Code eigentlich macht (Spaß)
Nein im Ernst, das ist für mich auch Neuland, muss mich da auch erst reinarbeiten.
Das Spiel ist wirklich ETS2 und die Originale Datei ist verschlüsselt.
In der SII_Utilities.Load_LAST_GAME_SII(); wird das letzte Savegame geladen, entschlüsselt und als normale Textdatei in TL_ETS_GAME_DRIVE_ENC_PATH gespeichert die dann eben ausgelesen werden kann.
Es geht im Moment weniger darum die Jobs auszulesen, eher einen eigenen Job einzufügen. Alles andere kommt später.
Die Job Daten, wenn man es als Key Value Pairs betrachtet, sind die Keys immer gleich nur die Values ändern sich eben in der StringBuilder Methode da wir ja eigene Daten einsetzen. Dazu muss in der JobListe der Firma diese Jobdaten die wir dort einfügen auch hinterlegt werden damit der Auftrag eben in der firma angezeigt wird.
Guten Morgen, Tag, Abend.
Ich suche auf diesem Wege jemanden, der mit mir den Client von TrucksLOG.de weiterentwickeln möchte.
Zu meinem Projekt:
Ich entwickele neben der Webseite einen C# Client der Daten vom Spiel Eurotruck Simulator 2 und American Truck Simulator aufzeichnet und in eine Datenbank überträgt. Von dieser Datenbank werden die Daten dann wiederum auf der Webseite weiterverarbeitet und ausgegeben. Man sieht z.B. von wo man gestartet ist, wie lange man gefahren ist und wohin es ging. Auch die Ladung und der Kilometerpreis wird berechnet und einiges mehr. Nach einigen Prüfungen kann man dann die Fracht abrechnen und erhält virtuelles Geld auf ein Konto, das man dummerweise noch nicht ausgeben kann.
Seit 2019 habe ich den Client allein entwickelt, da ich mittlerweile allerdings als stellv. Betriebsleiter nicht mehr so viel Zeit habe und die Entwicklung langsam ins Stocken gerät, wäre ein sec Dev recht hilfreich.
Ich selbst bin 51 Jahre, weder Fachinformatiker noch habe ich studiert, ich bin ein schlichter Autodidakt, der in seiner Freizeit gerne programmiert. Mein Code ist weder schön noch professionell, da ich mich nicht immer auf die neusten Technologien einarbeiten kann, weshalb der erste Eindruck vom Quellcode für euch wohl eher erschreckend sein dürfte.
Den Client gibt es mittlerweile in der 4. Version da ich irgendwann von 2 WinForms Versionen auf die mittlerweile 2. WPF-Version umgestiegen bin da die grafischen Bestandteile dort einfach besser sind und man mehr Möglichkeiten hat.
Es wird für diese Stelle keine Bezahlung geboten, da wir außer den Spenden, die für die Serverkosten draufgehen (leider reichen die nicht mal dafür aus) keine Einnahmen erzielen.
Wer Interesse hat, kann mich gerne Kontaktieren:
E-Mail: thommy@truckslog.de
Discord: TrucksLOG (discord.com) (der CTO Thommy)
Youtube: https://www.youtube.com/@truckslog
Facebook: https://www.facebook.com/groups/truckslog
Twitch: https://www.twitch.tv/truckslogde
oder einfach hier im Forum. Hätte ich auch als Erstes schrieben können 😉
Das mit dem String.Empty hört sich gut an. Das wäre dann nach GetLines denke ich mal ?
Ja das 2. einlesen ist totaler Quatsch, habe ich schon raus. Ist kein Json
Klar, das war auch mein Plan, leider klappt das nicht.
Ich hänge mal bisschen Code an...
Ich kommentiere die relevanten Zeilen
public static void ADD_JOB(string STARTFIRMA, string STARTORT)
{
SII_Utilities.Load_LAST_GAME_SII();
var _input = File.ReadAllLines(MainWindow.Global.TL_ETS_GAME_DRIVE_ENC_PATH);
var filePos_start = 0;
var filePos_end = 0;
foreach (var match in _input.Select((text, index) => new { text, lineNumber = index + 1 }).Where(x => x.text.Contains("company : company.volatile." + STARTFIRMA + "." + STARTORT)))
{
// ich suche in der Datei nach einer bestimmten Zeile, wenn er die gefunden hat, wird die Zeilennummer gespeichert
filePos_start = match.lineNumber;
var job = GetLines(match.lineNumber - 1);
filePos_end = job.Count; // die Länge der gefundenen Zeilen wird gespeichert
string tagLine, dataLine, _nameless = "_nameless.";
foreach (var row1 in job)
{
if (row1.Contains(':'))
{
string[] splittedLine = row1.Split(new char[] { ':' }, 2);
tagLine = splittedLine[0].Trim();
dataLine = splittedLine[1].Trim();
}
else
{
tagLine = row1.Trim();
dataLine = "";
}
/// ab hier werden die Daten ab der gefundenen Zeile eingelesen:
switch (tagLine)
{
case "":
{
break;
}
case "company":
{
JOB_CLASS.COMPANY = dataLine;
break;
}
case "permanent_data":
{
JOB_CLASS.PERMANENT_DATA = dataLine;
break;
}
case "delivered_trailer":
{
JOB_CLASS.DELIVERED_TRAILER = dataLine;
break;
}
case "delivered_pos":
{
JOB_CLASS.DELIVERED_POS = int.Parse(dataLine);
break;
}
case var s when s.StartsWith("delivered_pos["):
{
JOB_CLASS.DELIVERY_POS.Add(new Vector_3f(dataLine));
break;
}
case "job_offer":
{
JOB_CLASS.JOB_OFFER_ANZ = int.Parse(dataLine);
break;
}
case var s when s.StartsWith("job_offer["):
{
JOB_CLASS.JOB_OFFERS.Add(dataLine);
break;
}
case "cargo_offer_seeds:":
{
JOB_CLASS.CARGO_OFFER_SEED = int.Parse(dataLine);
break;
}
case var s when s.StartsWith("cargo_offer_seeds["):
{
JOB_CLASS.CARGO_OFFER_SEED_LIST.Add(uint.Parse(dataLine));
break;
}
case "discovered":
{
JOB_CLASS.DISCOVERED = bool.Parse(dataLine);
break;
}
case "reserved_trailer_slot":
{
JOB_CLASS.RESERVED_TRAILER_SLOT = dataLine;
break;
}
case "state":
{
JOB_CLASS.STATE = dataLine;
break;
}
case "state_change_time":
{
JOB_CLASS.STATE_CHANGE_TIME = dataLine;
break;
}
}
}
try
{
SII_Utilities.Load_LAST_GAME_SII(); // hier werden alle Zeilen nochmal eingelesen um dann die entsprechenden Zeilen zu entfernen
_input = File.ReadAllLines(MainWindow.Global.TL_ETS_GAME_DRIVE_ENC_PATH);
List<string> remove = new List<string>(_input);
Console.WriteLine(@"Remove Range : " + filePos_start + " - " + filePos_end);
remove.RemoveRange(filePos_start, (filePos_start+filePos_end));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + @" " + ex.StackTrace);
}
}
Und die gespeicherten Daten könnte ich theoretisch als text wieder einfügen aber wie?
internal static string PrintOut(string _NAMELESS, string ZIELORT, string ZIELFIRMA, int STRECKE, string LADUNG)
{
string returnString = "";
StringBuilder returnSB = new StringBuilder();
returnSB.AppendLine("company : " + JOB_CLASS.COMPANY);
returnSB.AppendLine(" permanent_data: " + JOB_CLASS.PERMANENT_DATA);
returnSB.AppendLine(" delivered_trailer: " + JOB_CLASS.DELIVERED_TRAILER);
returnSB.AppendLine(" delivered_pos: " + JOB_CLASS.DELIVERY_POS.Count);
for (int i = 0; i < JOB_CLASS.DELIVERY_POS.Count; i++)
returnSB.AppendLine(" delivered_pos[" + i + "]: " + JOB_CLASS.DELIVERY_POS[i]);
returnSB.AppendLine(" job_offer: " + (JOB_CLASS.JOB_OFFER_ANZ+1));
for (int i = 0; i < JOB_CLASS.JOB_OFFERS.Count; i++)
returnSB.AppendLine(" job_offer[" + i + "]: " + JOB_CLASS.JOB_OFFERS[i]);
returnSB.AppendLine(" job_offer[" + (JOB_CLASS.JOB_OFFERS.Count) + "]: " + "_nameless.TTT.TTTT.TTTT");
returnSB.AppendLine(" cargo_offer_seeds: " + JOB_CLASS.CARGO_OFFER_SEED_LIST.Count);
for (int i = 0; i < JOB_CLASS.CARGO_OFFER_SEED_LIST.Count; i++)
returnSB.AppendLine(" cargo_offer_seeds[" + i + "]: " + JOB_CLASS.CARGO_OFFER_SEED_LIST[i].ToString());
returnSB.AppendLine(" discovered: " + JOB_CLASS.DISCOVERED.ToString().ToLower());
returnSB.AppendLine(" reserved_trailer_slot: " + (JOB_CLASS.RESERVED_TRAILER_SLOT == null ? "nil" : JOB_CLASS.RESERVED_TRAILER_SLOT));
returnSB.AppendLine("}");
returnSB.AppendLine();
returnSB.AppendLine(" job_offer_data : " + _NAMELESS);
returnSB.AppendLine(" target: \"" + ZIELFIRMA + "." + ZIELORT + "\"");
returnSB.AppendLine(" expiration_time: 1500");
returnSB.AppendLine(" urgency: 0");
returnSB.AppendLine(" shortest_distance_km: " + STRECKE);
returnSB.AppendLine(" ferry_time: 0");
returnSB.AppendLine(" ferry_cost: 0");
returnSB.AppendLine(" cargo: cargo." + LADUNG);
returnSB.AppendLine(" cargo: cargo." + LADUNG);
returnSB.AppendLine(" company_truck: renault_premium_4x2_a");
returnSB.AppendLine(" trailer_variant: trailer.ffb_eut35");
returnSB.AppendLine(" trailer_definition: trailer_def.feldbinder.eut.single_3_35.silo_35_3p");
returnSB.AppendLine(" units_count: 35");
returnSB.AppendLine(" fill_ratio: 1");
returnSB.AppendLine(" trailer_place: 0");
returnSB.AppendLine("}");
returnString = returnSB.ToString();
return returnString;
}
Hallo.
Leider ging wohl mein letzter Beitrag im Nirvana unter oder wurde schlicht nicht Veröffentlicht. Dann versuche ich es mal in einem anderen Bereich 😉
Also: ich lese eine relativ große Textdatei in einen string[] ein und durchlaufe diesen mit einer foreach Schleife.
Dann suche ich nach einem bestimmten Vorkommen und lese danach die Zeilen bis zu nächsten }-Zeichen aus. Diese Daten werden in einer List<T> gespeichert, geändert und mit einem StringBuilder wieder ausgegeben. So weit, so Schlecht. Nun mein Problem:
Ich müsste diese Zeilen, die ich vorher kopiert habe, entfernen und exakt an dieser Stelle die neuen Daten einfügen. Zeilennummer wo die Sachen standen, habe ich und die Anzahl der List.Count was dann die Endzeile ergibt.
Wie mache ich das ?
Mal davon abgesehen, dass es mir als Benutzer nicht Recht wäre, wenn ein Programm einfach andere Programme löscht, wird es auch nicht funktionieren. Du könntest wohl über dein Programm nur den Uninstaller des jeweiligen Programmes aufrufen der dann das Programm deinstalliert.
Ziemlich jedes Programm hat im Installation Verzeichnis eine uninstall.exe oder ähnliches, die kannst du einfach mit
Process.Start(PFAD_ZUR_UNINSTALL);
starten.