Frvetz / FS22_RealisticDamageSystem

Realistic Damage System
https://discord.com/invite/mfergkwhDu
52 stars 5 forks source link

Damage calculation question #32

Open Derjohann84 opened 1 month ago

Derjohann84 commented 1 month ago

Hi,

I am playing FS22 as close as possible with real—live values.

For example: I buy „used“ Tractors with 7000h working hours (set with easy def). In the vehicle xml I have changed the lifetime value from 600 to 15.000 and wearduration from 480 to 2000. Without your mod the wear in % is near real life wearing (playing a 150 ha farm and 200-300h working hours per ingame year) I pretty much like the idea of your mod but playing with it led to a fast increase of wear. I am assuming that your script take the working hours into account without putting them in relation to the changed lifetime value from the vehicle xml.

Do you have any suggestion what needs to be change that a tractor with thousands of working hours is not that fast wearing out? Potentially you can point me to the relevant function in you script.

thank you in advance Johannes

Frvetz commented 1 month ago

Hi Johannes,

thanks for getting in touch!

Yes you are right, my script only looks at the working hours and not the lifetime values. Is it enough for you to reduce the general number of faults? I've got a few in-game settings that you can use to do this (attached screenshot).

The only question is whether it is enough for you if all vehicles receive less wear, or if individual vehicles should receive a different amount of wear. In this case I can send you a customized version if you like. For future updates, I'll definitely make a note to add a function like the one you suggested!

I hope I could help

Cheers Gerrit / frvetz

*In case your from Germany you can answer in German, since I am :D

Settings

Derjohann84 commented 1 month ago

Hi Gerrit,

dann gerne weiter auf deutsch 🙂.

Danke für den Hinweis zur Menüpunkt frequency, denn habe ich tatsächlich noch nicht berücksichtigt. Was ich bereits nutze ist die mod Reparatur Und Lackierungseinstellungen mit dem Faktor 0,25 für Verschleiß.

Mit der Idee mit realistischen Werten zu spielen kommen ja zwei Herausforderungen. -Die LS Fahrzeuge werden also länger genutzt als in der Vanilla Spiel-Idee vorgesehen - sie müssen also deutlich langsamer verschleißen. -Die Fahrzeuge werden also auch deutlich älter, oder gebrauchte haben dann auch mal 10.000 h Betriebsstunden. Dem Punkt eins kann ich ggf. mit Anpassung der mod für Reparatur Und Lackierungseinstellungen begegnen ( ggf. den Faktor noch weiter runtersetzen 0,05 statt 0,25… Die hohen Betriebsstunden schlagen jedoch bei deinem Skrip ordentlich zu, füge ich bei einem neuen Schlepper 10000h über Easy dev hinzu, habe ich plötzlich 16% schaden.

Mein Wunschziel wäre es, dass ich in 100-200 Betriebsstunden ca 1-3 “Schäden” reparieren muss - Voraussetzung ich fahre den Motor warm und schalte nicht die Fahrbereiche unter Last (spiele mit CVT). Und das unabhängig von den Gesamtbetriebsstunden. (Klar könnte man sich da noch austoben und die lifetime aus der XML mit in Relation nehmen - aber keine Ahnung ob ausser mir noch mehr so verrückt sind und ultrarealistisch spielen wollen.

Falls du Lust hast mir eine customised Version zu erstellen wäre das natürlich mega. Ich muss gestehen das mich dein skript noch überfordert- bei XML Anpassungen traue ich mir ja schon einiges zu.

Beste Grüße Johannes

Frvetz commented 1 month ago

Hi Johannes,

da hast du natürlich vollkommen Recht! Wenn man mit so realistischen Werten spielt wie du, kommt man mit den Standardwerten überhaupt nicht zurecht.

Hier mal ein kurzer Crashkurs wo du was in meinem Script findest:

  1. Wichtige Dateien:
    • 'RealisticDamageSystem.lua'
    • 'registerRealisticDamageSystem.lua'

Alles was während des Spielens passiert findest du in 'RealisticDanageSystem.lua, alle Einstellungen sind in 'registerRealisticDamageSystem.lua'.

  1. 'RealisticDamageSystem.lua' Ganz oben findest du sehr viel Multiplayer-Sync- und XML-Speicher-Zeugs. Interessant wird es erst ab Zeile 530 (kann je nach Version leicht variieren. Einfach alles in "onUpdate"). Da findest du oben was passiert wenn man das erste Mal in ein Fahrzeug einsteigt bzw. das erste Mal mit dem Script spielt (Fahrzeuge die schon Betriebsstunden haben, starten nicht mit 300 Schäden). Dann kommt die Tutorialabfrage und die Funktion, dass das Menü wieder "gelöscht" wird nachdem es geöffnet wurde, sonst haben andere Menüs (wie Silos) meine Texte. Dann (Zeile 630) ist die Funktion, dass bei zu vielen Schäden, der Motor länger braucht, um anzuspringen und bei zu viel Last abstirbt. Danach kommt ein bisschen selbsterklärendes wie "inRangeOfPallet".

"Wichtig" wird es erst ab Zeile 750. Hier werden die Schäden erstellt. Erst bekannte Schäden durch Motorstunden, dann bekannte Schäden durch das Alter, dann unbekannte Schäden durch Motorstunden und zum Schluss unbekannte Schäden durch das Alter. 'NextKnownDamageOperatingHour': Gibt an bei welcher Motorstunde der nächste bekannte Schaden entsteht 'NextKnownDamageAge': Gibt an wann bei welchem Alter der nächste bekannte Schaden entsteht Das gleiche dann auch für 'Unknown' Hier kannst du theoretisch einfach die Werte in den jeweiligen 'math.random' Funktionen ändern. Hier wird bei jedem Durchlauf eine zufällige Zahl in dem Bereich in Klammern gewählt und zu den aktuellen Motorstunden/Alter hinzugefügt (sprich wenn du da "math.random(100, 200)" hinschreibst, erstellt er im Schnitt alle 150 Motorstunden einen bekannten bzw. unbekannten Schaden. Bei manchen math.random Funktionen habe ich schon eine relativ hohe Zahl (einmal 45, 75 und einmal 105, 135) und dahinter "/ 10" stehen. Das habe ich gemacht, um Dezimalzahlen zu erzeugen, damit auch mal bei z.B. 75,3 Motorstunden ein Schaden entsteht und nicht immer bei ganzen Zahlen. Da also einfach eine Null dranhängen (1000, 2000 bei dir, wenn ich mich nicht irre). Ein bisschen weiter unten (ab Zeile 820) ist dann jeweils ein Eintrag, um Wartung, Inspektion und CVT-Reparatur zu beenden und die Werte zurückzusetzen. Am Schluss der onUpdate Funktion sind die ganzen Konsolenbefehle. Eine komplette Liste mit Beschreibung findest du hier.

  1. 'registerRealisticDamageSystem.lua' Hier kannst du dir die Einstellungen anpassen. Zeile 190 - 380 sind die Werte, die bei der jeweiligen Auswahl angenommen werden.

Hoffe das bringt ein wenig Klarheit in das Chaos 😅 Meistens findest du im Script auch nochmal eine kurze Beschreibung in Grün hinter den jeweiligen Zeilen.

Ich habe dir hier mal eine Version angehängt, wo die Fahrzeug-Lifetime einbezogen wird. Der Zufallswert wird hier lifetime / 600 gerechnet. So ziemlich jedes Fahrzeug hat einen Lifetime-Wert von 600, was also für normale Spieler keinen Unterschied macht. Passt man sich jetzt die Lifetime auf 15.000 an, rechnet das Script z.B. "nächster bekannter Schaden in 6 Motorstunden 15.000/600 = nächster Schaden in 150 Motorstunden.

Neue Range für neue bekannte Schäden durch die Motorstunden: 112,5 - 187,5 Neue Range für neue unbekannte Schäden durch Mototstunden: 262,5 - 337,5 Das Alter habe ich nicht jetzt nicht geändert. Hierdurch entstehen im Jahr ca. 1,5 bekannte Schäden und ca. 2 unbekannte Schäden. Eventuell ist das sogar ein bisschen zu viel für dich. Hierfür könntest du einfach in Zeile 765 (bekannte Schäden) und 789 (unbekannte Schäden) größere Zahlen in math.random einsetzten.

Um ingame ein bisschen zu schauen, ob es passt, kannst du "rdsDebug" in die Log eingeben und die Werte für 'NextKnownDamageOperatingHour', 'NextKnownDamageAge', 'NextUnknownDamageOperatingHour' und 'NextUnknownDamageAge' auslesen. Neue Zeiten generierst du mit "rdsResetTimeUntilNextDamage" und den Debug beendest du wieder mit "rdsDebug", sonst schreibt er dir dauerhaft alle Werte in die Log.

Beste Grüße Gerrit 😄

FS22_RealisticDamageSystem.zip

Derjohann84 commented 1 month ago

Wow, du bist spitze! Das ist jede Menge guter Input, dass schau ich mir alles im Detail an und werde deine Vorschläge ausprobieren. Freue mich schon drauf 😁. Ist immer genial, wenn man den LS ein Stück weiter optimieren kann. Nochmals Danke!

Frvetz commented 1 month ago

Sehr gerne! 😁 Ich lasse den Issue noch ein paar Tage auf, falls du noch Fragen hast oder eine Änderung wünscht. Ansonsten würde ich ihn demnächst einfach schließen und bei Bedarf wieder öffnen :D