-
Notifications
You must be signed in to change notification settings - Fork 5
/
RealisticDamageSystem.lua
1565 lines (1359 loc) · 92 KB
/
RealisticDamageSystem.lua
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
-- by Frvetz
-- Contact: [email protected]
-- THANKS TO W33ZL (POWER TOOLS MOD) FOR LETTING ME USE HIS MENU!
-- THANKS TO MECHMOXER FOR LETTING ME USE THE IDEA OF THE ENGINE DIE FUNCTION
-- THANKS TO [SbSh] SEBATIAN MODASTIAN FOR MULTIPLAYER TESTING
-- Date 02.12.2021
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--load event file for multiplayer sync and file for maintenance GUI
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
source(g_currentModDirectory.."events/SyncClientServerEvent.lua") --multiplayer event file
source(g_currentModDirectory .. "src/GUI/RealisticDamageSystemGUI.lua") --maintenance GUI
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--main script
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
RealisticDamageSystem = {};
RealisticDamageSystem.l10nEnv = "FS22_RealisticDamageSystem"; --need this to prevent localization error
RealisticDamageSystem.modDirectory = g_currentModDirectory; --need modDirectory for help menu
RealisticDamageSystem.wartungsEvent = nil; --whole button event itself
RealisticDamageSystem.ShowButton = false; --set to true if in range of a maintenance pallet
RealisticDamageSystem.ResetDamagesCommand = false; --set to true if console command for resetting the damages is called
RealisticDamageSystem.RemoveDamagesCommand = 0; --set how many damages should be removed
RealisticDamageSystem.FindDamagesCommand = false; --set to true if hidden damages should be uncovered
RealisticDamageSystem.ResetTimeUntilInspectionCommand = false; --set to true if console command for resetting the inspection is called
RealisticDamageSystem.StopActiveRepairCommand = false; --set to true if console command for stoping an active repair is called
RealisticDamageSystem.DebugCommand = false; --set to true if console command for DebugCommand is called
RealisticDamageSystem.DebugCommandOnce = false; --set to true if console command for DebugCommandOnce is called
RealisticDamageSystem.ResetTimeUntilNextDamageCommand = false; --set to true if console command for resetting the time until the next damage occurs is called
RealisticDamageSystem.ResetEverythingCommand = false; --set to true if console command for resetting everything is called
RealisticDamageSystem.TimeUntilInspectionCommand = 0; --set the time until the next inspection is needed
RealisticDamageSystem.UsersHadTutorialDialog = {} --users who had the chance to start the tutorial
RealisticDamageSystem.MaintenancePallets = {}; --create table where every maintenance pallet is stored
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--load moddesc version
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
local modDesc = loadXMLFile("modDesc", g_currentModDirectory .. "modDesc.xml")
RealisticDamageSystem.modVersion = getXMLString(modDesc, "modDesc.version")
function RealisticDamageSystem.prerequisitesPresent(specializations)
return true;
end;
function RealisticDamageSystem.registerEventListeners(vehicleType)
SpecializationUtil.registerEventListener(vehicleType, "onRegisterActionEvents", RealisticDamageSystem);
SpecializationUtil.registerEventListener(vehicleType, "onLoad", RealisticDamageSystem);
SpecializationUtil.registerEventListener(vehicleType, "onPostLoad", RealisticDamageSystem);
SpecializationUtil.registerEventListener(vehicleType, "onReadStream", RealisticDamageSystem);
SpecializationUtil.registerEventListener(vehicleType, "onWriteStream", RealisticDamageSystem);
SpecializationUtil.registerEventListener(vehicleType, "onReadUpdateStream", RealisticDamageSystem);
SpecializationUtil.registerEventListener(vehicleType, "onWriteUpdateStream", RealisticDamageSystem);
SpecializationUtil.registerEventListener(vehicleType, "onUpdate", RealisticDamageSystem);
end;
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--overwrite getCanMotorRun function to disable the motor start when maintenance active
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem.registerOverwrittenFunctions(vehicleType)
SpecializationUtil.registerOverwrittenFunction(vehicleType, "getCanMotorRun", RealisticDamageSystem.getCanMotorRun);
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--set button event
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem:onRegisterActionEvents()
if self.getIsEntered ~= nil and self:getIsEntered() then
RealisticDamageSystem.actionEvents = {}
_, RealisticDamageSystem.wartungsEvent = self:addActionEvent(RealisticDamageSystem.actionEvents, 'VEHICLE_MAINTENANCE', self, RealisticDamageSystem.DIALOG_MAINTENANCE, false, true, false, true, nil)
g_inputBinding:setActionEventTextPriority(RealisticDamageSystem.wartungsEvent, GS_PRIO_VERY_HIGH)
g_inputBinding:setActionEventTextVisibility(RealisticDamageSystem.wartungsEvent, false)
g_inputBinding:setActionEventActive(RealisticDamageSystem.wartungsEvent, false)
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--create variables when starting savegame
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem:onLoad(savegame)
local spec = self.spec_RealisticDamageSystem
if spec ~= nil then
-- First savegame load ever with the mod
spec.FirstLoadNumbersSet = false; --don't reset the numbers that are saved at the first start ever
-- Motor false start
spec.MotorDieTimer = -1; --motor false start timer for double ignition sound
spec.NumberMotorDieTimer = 0; --motor false start timer for double ignition sound
spec.RandomNumber = 0; --random number to decide whether the motor false start or not
spec.TimesSoundPlayed = 4; --number goes up when second motor start sound played
spec.DontStopMotor = false; --need this for motor false start
spec.LoadTooHigh = false; --engine died because load was too high
spec.BlinkingWarningTimer = -1; --timer for blinking warning visibility
spec.NumberBlinkingWarningTimer = 0; --timer for blinking warning visibility
-- Damages
spec.NextKnownDamageOperatingHour = 0; --next operating hour when a known damage occurs --float --need /10 to get a decimal number
spec.NextKnownDamageAge = 0; --next age when a known damage occurs
spec.NextUnknownDamageOperatingHour = 0; --next operating hour when an unknown damage occurs --float --need /10 to get a decimal number
spec.NextUnknownDamageAge = 0; --next age when an unknown damage occurs
spec.TotalNumberOfDamages = 0; --hidden damages + visible damages + found damages by inspection
spec.forDBL_TotalNumberOfDamagesPlayerKnows = 0; --visible damages + found damages by inspection
spec.TotalNumberOfDamagesPlayerDoesntKnow = 0; --visible damages + found damages by inspection
spec.AllDamagesTable = {}; --all damages in one table (with length - price - costs)
spec.LengthForDamages = {}; --length for every damage in one table
spec.forDBL_NextInspectionMonths = 12; --number of months until the next inspection is needed
spec.NextInspectionAge = 0; --vehicle age when the next inspection is needed
spec.VehiclePrice = self:getPrice(); --vehicle price needed for damage price calculation in file RealisticDamageSystemGUI
spec.DamagesThatAddedWear = 0; --needed to check if a new damaged was created and the vanilla damage amount of the vehicle needs to be updated
spec.DialogSelectedOptionCallback = 0; --set when starting a repair how many damages will be repaired to remove the vehicle damage afterwards
spec.DamagesMultiplier = 1; --need to compare to global damages multiplier to reset the next damage time if changed
spec.forDBL_EngineLight = false; --set to true if engine is in critial condition
-- Variables for maintenance and inspection active
spec.MaintenanceActive = false; --maintenance is active
spec.InspectionActive = false; --inspection is active
spec.FinishDay = 0; --day when the maintenance or inspection or CVT-repair is finished
spec.FinishHour = 0; --hour when the maintenance or inspection or CVT-repair is finished
spec.FinishMinute = 0; --minute when the maintenance or inspection or CVT-repair is finished
-- External mod CVT_Addon
spec.CVTRepairActive = false; --CVT-repair active
spec.CVTlength = 0; --CVT-repair length
spec.CVTcosts = 0; --CVT-repair costs
-- Tutorial
spec.TutorialStarted = false; --Tutorial is started
spec.TutorialUpdateFinishedTime = false; --Example in tutorial for when the maintenance needs to be paused
spec.InsertDamagesInTable = 0; --when tutorial started, only one example damage is shown in the maintenance menu
-- Multiplayer
spec.dirtyFlag = self:getNextDirtyFlag() --multiplayer sync
spec.MultiplayerCosts = 0;
spec.MultiplayerAddDamage = 0;
-- maintenance menu
spec.menuIsOpen = false
end
-- create new "spec" for CVTAddon to let CVT ask separately if this script is active
self.spec_RealisticDamageSystemEngineDied = {}
self.spec_RealisticDamageSystemEngineDied.EngineDied = false
-- insert every pallet on the map into a table to find location later
if self.typeName == "FS22_RealisticDamageSystem.palletMaintencance" then --searches for the Pallet
RealisticDamageSystem.MaintenancePallets[self.rootNode] = {} --insert pallets in table
end;
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--load multiplayer XML (saved for every player if he had the option to start the tutorial)
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem.loadedMission(mission, node)
if mission:getIsServer() then
if mission.missionInfo.savegameDirectory ~= nil and fileExists(mission.missionInfo.savegameDirectory .. "/RealisticDamageSystemMultiplayer.xml") then
local xmlFile = XMLFile.load("RealisticDamageSystemMultiplayer", mission.missionInfo.savegameDirectory .. "/RealisticDamageSystemMultiplayer.xml")
if xmlFile ~= nil then
if xmlFile:getString("RealisticDamageSystemMultiplayer.PlayerHadTutorialQuestion#playerIDs") ~= nil then
RealisticDamageSystem.UsersHadTutorialDialog = RealisticDamageSystem:MPStringToTable(xmlFile:getString("RealisticDamageSystemMultiplayer.PlayerHadTutorialQuestion#playerIDs"))
end
registerRealisticDamageSystem.CostsState = xmlFile:getInt("RealisticDamageSystemMultiplayer.CostsState", registerRealisticDamageSystem.CostsState)
registerRealisticDamageSystem.CostsSetting = xmlFile:getFloat("RealisticDamageSystemMultiplayer.CostsSetting", registerRealisticDamageSystem.CostsSetting)
registerRealisticDamageSystem.LengthState = xmlFile:getInt("RealisticDamageSystemMultiplayer.LengthState", registerRealisticDamageSystem.LengthState)
registerRealisticDamageSystem.LengthSetting = xmlFile:getFloat("RealisticDamageSystemMultiplayer.LengthSetting", registerRealisticDamageSystem.LengthSetting)
registerRealisticDamageSystem.IntervallState = xmlFile:getInt("RealisticDamageSystemMultiplayer.IntervallState", registerRealisticDamageSystem.IntervallState)
registerRealisticDamageSystem.IntervallSetting = xmlFile:getFloat("RealisticDamageSystemMultiplayer.IntervallSetting", registerRealisticDamageSystem.IntervallSetting)
registerRealisticDamageSystem.OpeningState = xmlFile:getInt("RealisticDamageSystemMultiplayer.OpeningState", registerRealisticDamageSystem.OpeningState)
registerRealisticDamageSystem.OpeningSetting = xmlFile:getInt("RealisticDamageSystemMultiplayer.OpeningSetting", registerRealisticDamageSystem.OpeningSetting)
registerRealisticDamageSystem.ClosingState = xmlFile:getInt("RealisticDamageSystemMultiplayer.ClosingState", registerRealisticDamageSystem.ClosingState)
registerRealisticDamageSystem.ClosingSetting = xmlFile:getInt("RealisticDamageSystemMultiplayer.ClosingSetting", registerRealisticDamageSystem.ClosingSetting)
xmlFile:delete()
end
end
end
if mission.cancelLoading then
return
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--save multiplayer XML (saved for every player if he had the option to start the tutorial)
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem.saveToEXTRAXMLFile(missionInfo)
if missionInfo.isValid then
local xmlFile = XMLFile.create("RealisticDamageSystemMultiplayer", missionInfo.savegameDirectory .. "/RealisticDamageSystemMultiplayer.xml", "RealisticDamageSystemMultiplayer")
if xmlFile ~= nil then
if RealisticDamageSystem.UsersHadTutorialDialog ~= nil then
xmlFile:setString("RealisticDamageSystemMultiplayer.PlayerHadTutorialQuestion#playerIDs", RealisticDamageSystem:MPTableToString(RealisticDamageSystem.UsersHadTutorialDialog))
end
xmlFile:setInt("RealisticDamageSystemMultiplayer.CostsState", registerRealisticDamageSystem.CostsState)
xmlFile:setFloat("RealisticDamageSystemMultiplayer.CostsSetting", registerRealisticDamageSystem.CostsSetting)
xmlFile:setInt("RealisticDamageSystemMultiplayer.LengthState", registerRealisticDamageSystem.LengthState)
xmlFile:setFloat("RealisticDamageSystemMultiplayer.LengthSetting", registerRealisticDamageSystem.LengthSetting)
xmlFile:setInt("RealisticDamageSystemMultiplayer.IntervallState", registerRealisticDamageSystem.IntervallState)
xmlFile:setFloat("RealisticDamageSystemMultiplayer.IntervallSetting", registerRealisticDamageSystem.IntervallSetting)
xmlFile:setInt("RealisticDamageSystemMultiplayer.OpeningState", registerRealisticDamageSystem.OpeningState)
xmlFile:setInt("RealisticDamageSystemMultiplayer.OpeningSetting", registerRealisticDamageSystem.OpeningSetting)
xmlFile:setInt("RealisticDamageSystemMultiplayer.ClosingState", registerRealisticDamageSystem.ClosingState)
xmlFile:setInt("RealisticDamageSystemMultiplayer.ClosingSetting", registerRealisticDamageSystem.ClosingSetting)
xmlFile:save()
xmlFile:delete()
end
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--create values in XML for every vehicle
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem.initSpecialization()
local schemaSavegame = Vehicle.xmlSchemaSavegame
schemaSavegame:register(XMLValueType.INT, "vehicles.vehicle(?).RealisticDamageSystem#NextInspectionAge")
schemaSavegame:register(XMLValueType.INT, "vehicles.vehicle(?).RealisticDamageSystem#DamagesThatAddedWear")
schemaSavegame:register(XMLValueType.INT, "vehicles.vehicle(?).RealisticDamageSystem#FinishDay")
schemaSavegame:register(XMLValueType.INT, "vehicles.vehicle(?).RealisticDamageSystem#FinishHour")
schemaSavegame:register(XMLValueType.INT, "vehicles.vehicle(?).RealisticDamageSystem#FinishMinute")
schemaSavegame:register(XMLValueType.INT, "vehicles.vehicle(?).RealisticDamageSystem#DialogSelectedOptionCallback")
schemaSavegame:register(XMLValueType.INT, "vehicles.vehicle(?).RealisticDamageSystem#NextKnownDamageAge")
schemaSavegame:register(XMLValueType.INT, "vehicles.vehicle(?).RealisticDamageSystem#NextUnknownDamageAge")
schemaSavegame:register(XMLValueType.INT, "vehicles.vehicle(?).RealisticDamageSystem#TotalNumberOfDamagesPlayerKnows")
schemaSavegame:register(XMLValueType.INT, "vehicles.vehicle(?).RealisticDamageSystem#TotalNumberOfDamagesPlayerDoesntKnow")
schemaSavegame:register(XMLValueType.FLOAT, "vehicles.vehicle(?).RealisticDamageSystem#NextKnownDamageOperatingHour")
schemaSavegame:register(XMLValueType.FLOAT, "vehicles.vehicle(?).RealisticDamageSystem#NextUnknownDamageOperatingHour")
schemaSavegame:register(XMLValueType.FLOAT, "vehicles.vehicle(?).RealisticDamageSystem#DamagesMultiplier")
schemaSavegame:register(XMLValueType.BOOL, "vehicles.vehicle(?).RealisticDamageSystem#FirstLoadNumbersSet")
schemaSavegame:register(XMLValueType.BOOL, "vehicles.vehicle(?).RealisticDamageSystem#MaintenanceActive")
schemaSavegame:register(XMLValueType.BOOL, "vehicles.vehicle(?).RealisticDamageSystem#InspectionActive")
schemaSavegame:register(XMLValueType.BOOL, "vehicles.vehicle(?).RealisticDamageSystem#CVTRepairActive")
schemaSavegame:register(XMLValueType.BOOL, "vehicles.vehicle(?).RealisticDamageSystem#EngineDied")
schemaSavegame:register(XMLValueType.STRING, "vehicles.vehicle(?).RealisticDamageSystem#LengthForDamages")
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--load values in XML for every vehicle
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem:onPostLoad(savegame)
local spec = self.spec_RealisticDamageSystem
if spec ~= nil then
if savegame ~= nil then
local xmlFile = savegame.xmlFile
local key = savegame.key .. ".RealisticDamageSystem"
spec.NextInspectionAge = xmlFile:getValue(key.."#NextInspectionAge", spec.NextInspectionAge)
spec.DamagesThatAddedWear = xmlFile:getValue(key.."#DamagesThatAddedWear", spec.DamagesThatAddedWear)
spec.FinishDay = xmlFile:getValue(key.."#FinishDay", spec.FinishDay)
spec.FinishHour = xmlFile:getValue(key.."#FinishHour", spec.FinishHour)
spec.FinishMinute = xmlFile:getValue(key.."#FinishMinute", spec.FinishMinute)
spec.DialogSelectedOptionCallback = xmlFile:getValue(key.."#DialogSelectedOptionCallback", spec.DialogSelectedOptionCallback)
spec.NextKnownDamageAge = xmlFile:getValue(key.."#NextKnownDamageAge", spec.NextKnownDamageAge)
spec.NextUnknownDamageAge = xmlFile:getValue(key.."#NextUnknownDamageAge", spec.NextUnknownDamageAge)
spec.forDBL_TotalNumberOfDamagesPlayerKnows = xmlFile:getValue(key.."#TotalNumberOfDamagesPlayerKnows", spec.forDBL_TotalNumberOfDamagesPlayerKnows)
spec.TotalNumberOfDamagesPlayerDoesntKnow = xmlFile:getValue(key.."#TotalNumberOfDamagesPlayerDoesntKnow", spec.TotalNumberOfDamagesPlayerDoesntKnow)
spec.NextKnownDamageOperatingHour = xmlFile:getValue(key.."#NextKnownDamageOperatingHour", spec.NextKnownDamageOperatingHour)
spec.NextUnknownDamageOperatingHour = xmlFile:getValue(key.."#NextUnknownDamageOperatingHour", spec.NextUnknownDamageOperatingHour)
spec.DamagesMultiplier = xmlFile:getValue(key.."#DamagesMultiplier", spec.DamagesMultiplier)
spec.FirstLoadNumbersSet = xmlFile:getValue(key.."#FirstLoadNumbersSet", spec.FirstLoadNumbersSet)
spec.MaintenanceActive = xmlFile:getValue(key.."#MaintenanceActive", spec.MaintenanceActive)
spec.InspectionActive = xmlFile:getValue(key.."#InspectionActive", spec.InspectionActive)
spec.CVTRepairActive = xmlFile:getValue(key.."#CVTRepairActive", spec.CVTRepairActive)
self.spec_RealisticDamageSystemEngineDied.EngineDied = xmlFile:getValue(key.."#EngineDied", self.spec_RealisticDamageSystemEngineDied.EngineDied)
spec.LengthForDamages = RealisticDamageSystem:StringToLengthTable(xmlFile:getValue(key.."#LengthForDamages", spec.LengthForDamages))
end
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--save values in XML for every vehicle
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem:saveToXMLFile(xmlFile, key, usedModNames)
local spec = self.spec_RealisticDamageSystem
if spec ~= nil then
xmlFile:setValue(key.."#NextInspectionAge", spec.NextInspectionAge)
xmlFile:setValue(key.."#DamagesThatAddedWear", spec.DamagesThatAddedWear)
xmlFile:setValue(key.."#FinishDay", spec.FinishDay)
xmlFile:setValue(key.."#FinishHour", spec.FinishHour)
xmlFile:setValue(key.."#FinishMinute", spec.FinishMinute)
xmlFile:setValue(key.."#DialogSelectedOptionCallback", spec.DialogSelectedOptionCallback)
xmlFile:setValue(key.."#NextKnownDamageAge", spec.NextKnownDamageAge)
xmlFile:setValue(key.."#NextUnknownDamageAge", spec.NextUnknownDamageAge)
xmlFile:setValue(key.."#TotalNumberOfDamagesPlayerKnows", spec.forDBL_TotalNumberOfDamagesPlayerKnows)
xmlFile:setValue(key.."#TotalNumberOfDamagesPlayerDoesntKnow", spec.TotalNumberOfDamagesPlayerDoesntKnow)
xmlFile:setValue(key.."#NextKnownDamageOperatingHour", spec.NextKnownDamageOperatingHour)
xmlFile:setValue(key.."#NextUnknownDamageOperatingHour", spec.NextUnknownDamageOperatingHour)
xmlFile:setValue(key.."#DamagesMultiplier", spec.DamagesMultiplier)
xmlFile:setValue(key.."#FirstLoadNumbersSet", spec.FirstLoadNumbersSet)
xmlFile:setValue(key.."#MaintenanceActive", spec.MaintenanceActive)
xmlFile:setValue(key.."#InspectionActive", spec.InspectionActive)
xmlFile:setValue(key.."#CVTRepairActive", spec.CVTRepairActive)
xmlFile:setValue(key.."#EngineDied", self.spec_RealisticDamageSystemEngineDied.EngineDied)
xmlFile:setValue(key.."#LengthForDamages", RealisticDamageSystem:LengthTableToString(spec.LengthForDamages))
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--multiplayer sync
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem:onReadStream(streamId, connection)
local spec = self.spec_RealisticDamageSystem
if spec ~= nil then
spec.NextInspectionAge = streamReadInt32(streamId)
spec.DamagesThatAddedWear = streamReadInt32(streamId)
spec.FinishDay = streamReadInt32(streamId)
spec.FinishHour = streamReadInt32(streamId)
spec.FinishMinute = streamReadInt32(streamId)
spec.DialogSelectedOptionCallback = streamReadInt32(streamId)
spec.NextKnownDamageAge = streamReadInt32(streamId)
spec.NextUnknownDamageAge = streamReadInt32(streamId)
spec.forDBL_TotalNumberOfDamagesPlayerKnows = streamReadInt32(streamId)
spec.TotalNumberOfDamagesPlayerDoesntKnow = streamReadInt32(streamId)
spec.NextKnownDamageOperatingHour = streamReadFloat32(streamId)
spec.NextUnknownDamageOperatingHour = streamReadFloat32(streamId)
spec.DamagesMultiplier = streamReadFloat32(streamId)
spec.FirstLoadNumbersSet = streamReadBool(streamId)
spec.MaintenanceActive = streamReadBool(streamId)
spec.InspectionActive = streamReadBool(streamId)
spec.CVTRepairActive = streamReadBool(streamId)
self.spec_RealisticDamageSystemEngineDied.EngineDied = streamReadBool(streamId)
spec.LengthForDamages = RealisticDamageSystem:StringToLengthTable(streamReadString(streamId))
RealisticDamageSystem.UsersHadTutorialDialog = RealisticDamageSystem:MPStringToTable(streamReadString(streamId))
registerRealisticDamageSystem.CostsState = streamReadInt32(streamId)
registerRealisticDamageSystem.CostsSetting = streamReadFloat32(streamId)
registerRealisticDamageSystem.LengthState = streamReadInt32(streamId)
registerRealisticDamageSystem.LengthSetting = streamReadFloat32(streamId)
registerRealisticDamageSystem.IntervallState = streamReadInt32(streamId)
registerRealisticDamageSystem.IntervallSetting = streamReadFloat32(streamId)
registerRealisticDamageSystem.OpeningState = streamReadInt32(streamId)
registerRealisticDamageSystem.OpeningSetting = streamReadInt32(streamId)
registerRealisticDamageSystem.ClosingState = streamReadInt32(streamId)
registerRealisticDamageSystem.ClosingSetting = streamReadInt32(streamId)
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--multiplayer sync
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem:onWriteStream(streamId, connection)
local spec = self.spec_RealisticDamageSystem
if spec ~= nil then
streamWriteInt32(streamId, spec.NextInspectionAge)
streamWriteInt32(streamId, spec.DamagesThatAddedWear)
streamWriteInt32(streamId, spec.FinishDay)
streamWriteInt32(streamId, spec.FinishHour)
streamWriteInt32(streamId, spec.FinishMinute)
streamWriteInt32(streamId, spec.DialogSelectedOptionCallback)
streamWriteInt32(streamId, spec.NextKnownDamageAge)
streamWriteInt32(streamId, spec.NextUnknownDamageAge)
streamWriteInt32(streamId, spec.forDBL_TotalNumberOfDamagesPlayerKnows)
streamWriteInt32(streamId, spec.TotalNumberOfDamagesPlayerDoesntKnow)
streamWriteFloat32(streamId, spec.NextKnownDamageOperatingHour)
streamWriteFloat32(streamId, spec.NextUnknownDamageOperatingHour)
streamWriteFloat32(streamId, spec.DamagesMultiplier)
streamWriteBool(streamId, spec.FirstLoadNumbersSet)
streamWriteBool(streamId, spec.MaintenanceActive)
streamWriteBool(streamId, spec.InspectionActive)
streamWriteBool(streamId, spec.CVTRepairActive)
streamWriteBool(streamId, self.spec_RealisticDamageSystemEngineDied.EngineDied)
streamWriteString(streamId, RealisticDamageSystem:LengthTableToString(spec.LengthForDamages))
streamWriteString(streamId, RealisticDamageSystem:MPTableToString(RealisticDamageSystem.UsersHadTutorialDialog))
streamWriteInt32(streamId, registerRealisticDamageSystem.CostsState)
streamWriteFloat32(streamId, registerRealisticDamageSystem.CostsSetting)
streamWriteInt32(streamId, registerRealisticDamageSystem.LengthState)
streamWriteFloat32(streamId, registerRealisticDamageSystem.LengthSetting)
streamWriteInt32(streamId, registerRealisticDamageSystem.IntervallState)
streamWriteFloat32(streamId, registerRealisticDamageSystem.IntervallSetting)
streamWriteInt32(streamId, registerRealisticDamageSystem.OpeningState)
streamWriteInt32(streamId, registerRealisticDamageSystem.OpeningSetting)
streamWriteInt32(streamId, registerRealisticDamageSystem.ClosingState)
streamWriteInt32(streamId, registerRealisticDamageSystem.ClosingSetting)
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--multiplayer sync
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem:onReadUpdateStream(streamId, timestamp, connection)
if not connection:getIsServer() then
local spec = self.spec_RealisticDamageSystem
if streamReadBool(streamId) then
if spec ~= nil then
spec.NextInspectionAge = streamReadInt32(streamId)
spec.DamagesThatAddedWear = streamReadInt32(streamId)
spec.FinishDay = streamReadInt32(streamId)
spec.FinishHour = streamReadInt32(streamId)
spec.FinishMinute = streamReadInt32(streamId)
spec.DialogSelectedOptionCallback = streamReadInt32(streamId)
spec.MultiplayerCosts = streamReadInt32(streamId)
spec.NextKnownDamageAge = streamReadInt32(streamId)
spec.NextUnknownDamageAge = streamReadInt32(streamId)
spec.forDBL_TotalNumberOfDamagesPlayerKnows = streamReadInt32(streamId)
spec.TotalNumberOfDamagesPlayerDoesntKnow = streamReadInt32(streamId)
spec.NextKnownDamageOperatingHour = streamReadFloat32(streamId)
spec.NextUnknownDamageOperatingHour = streamReadFloat32(streamId)
spec.DamagesMultiplier = streamReadFloat32(streamId)
spec.MultiplayerAddDamage = streamReadFloat32(streamId)
spec.FirstLoadNumbersSet = streamReadBool(streamId)
spec.MaintenanceActive = streamReadBool(streamId)
spec.InspectionActive = streamReadBool(streamId)
spec.CVTRepairActive = streamReadBool(streamId)
self.spec_RealisticDamageSystemEngineDied.EngineDied = streamReadBool(streamId)
spec.LengthForDamages = RealisticDamageSystem:StringToLengthTable(streamReadString(streamId))
RealisticDamageSystem.UsersHadTutorialDialog = RealisticDamageSystem:MPStringToTable(streamReadString(streamId))
end
end
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--multiplayer sync
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem:onWriteUpdateStream(streamId, connection, dirtyMask)
if connection:getIsServer() then
local spec = self.spec_RealisticDamageSystem
if spec ~= nil then
if spec.dirtyFlag ~= nil then
if streamWriteBool(streamId, bitAND(dirtyMask, spec.dirtyFlag) ~= 0) then
streamWriteInt32(streamId, spec.NextInspectionAge)
streamWriteInt32(streamId, spec.DamagesThatAddedWear)
streamWriteInt32(streamId, spec.FinishDay)
streamWriteInt32(streamId, spec.FinishHour)
streamWriteInt32(streamId, spec.FinishMinute)
streamWriteInt32(streamId, spec.DialogSelectedOptionCallback)
streamWriteInt32(streamId, spec.MultiplayerCosts)
streamWriteInt32(streamId, spec.NextKnownDamageAge)
streamWriteInt32(streamId, spec.NextUnknownDamageAge)
streamWriteInt32(streamId, spec.forDBL_TotalNumberOfDamagesPlayerKnows)
streamWriteInt32(streamId, spec.TotalNumberOfDamagesPlayerDoesntKnow)
streamWriteFloat32(streamId, spec.NextKnownDamageOperatingHour)
streamWriteFloat32(streamId, spec.NextUnknownDamageOperatingHour)
streamWriteFloat32(streamId, spec.DamagesMultiplier)
streamWriteFloat32(streamId, spec.MultiplayerAddDamage)
streamWriteBool(streamId, spec.FirstLoadNumbersSet)
streamWriteBool(streamId, spec.MaintenanceActive)
streamWriteBool(streamId, spec.InspectionActive)
streamWriteBool(streamId, spec.CVTRepairActive)
streamWriteBool(streamId, self.spec_RealisticDamageSystemEngineDied.EngineDied)
streamWriteString(streamId, RealisticDamageSystem:LengthTableToString(spec.LengthForDamages))
streamWriteString(streamId, RealisticDamageSystem:MPTableToString(RealisticDamageSystem.UsersHadTutorialDialog))
spec.MultiplayerCosts = 0
spec.MultiplayerAddDamage = 0
end
else
streamWriteBool(streamId, false)
end
end
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--multiplayer sync event
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem.SyncClientServer(vehicle, NextInspectionAge, DamagesThatAddedWear, FinishDay, FinishHour, FinishMinute, DialogSelectedOptionCallback, NextKnownDamageAge, NextUnknownDamageAge, forDBL_TotalNumberOfDamagesPlayerKnows, TotalNumberOfDamagesPlayerDoesntKnow, NextKnownDamageOperatingHour, NextUnknownDamageOperatingHour, DamagesMultiplier, FirstLoadNumbersSet, MaintenanceActive, InspectionActive, CVTRepairActive, EngineDied, LengthForDamages, UsersHadTutorialDialog)
local spec = vehicle.spec_RealisticDamageSystem
spec.NextInspectionAge = NextInspectionAge
spec.DamagesThatAddedWear = DamagesThatAddedWear
spec.FinishDay = FinishDay
spec.FinishHour = FinishHour
spec.FinishMinute = FinishMinute
spec.DialogSelectedOptionCallback = DialogSelectedOptionCallback
spec.NextKnownDamageAge = NextKnownDamageAge
spec.NextUnknownDamageAge = NextUnknownDamageAge
spec.forDBL_TotalNumberOfDamagesPlayerKnows = forDBL_TotalNumberOfDamagesPlayerKnows
spec.TotalNumberOfDamagesPlayerDoesntKnow = TotalNumberOfDamagesPlayerDoesntKnow
spec.NextKnownDamageOperatingHour = NextKnownDamageOperatingHour
spec.NextUnknownDamageOperatingHour = NextUnknownDamageOperatingHour
spec.DamagesMultiplier = DamagesMultiplier
spec.FirstLoadNumbersSet = FirstLoadNumbersSet
spec.MaintenanceActive = MaintenanceActive
spec.InspectionActive = InspectionActive
spec.CVTRepairActive = CVTRepairActive
vehicle.spec_RealisticDamageSystemEngineDied.EngineDied = EngineDied
spec.LengthForDamages = RealisticDamageSystem:StringToLengthTable(LengthForDamages)
RealisticDamageSystem.UsersHadTutorialDialog = RealisticDamageSystem:MPStringToTable(UsersHadTutorialDialog)
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--everything that happens all the time when playing
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
function RealisticDamageSystem:onUpdate(dt, isActiveForInput, isActiveForInputIgnoreSelection, isSelected)
if self.spec_motorized ~= nil then
local spec = self.spec_RealisticDamageSystem
local changeFlag = false --change to true when multiplayer needs to be synced
if self.isClient and isActiveForInputIgnoreSelection then
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--set values that need to be saved only on the first load with the mod
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if spec.FirstLoadNumbersSet ~= true then
spec.forDBL_TotalNumberOfDamagesPlayerKnows = math.floor(self:getDamageAmount() * 12) --set damages according to vehicle damage
spec.NextInspectionAge = self.age + 12 --set time until next inspection to 12
spec.NextKnownDamageAge = self.age + RealisticDamageSystem:RoundValue(math.random(6, 13) / registerRealisticDamageSystem.IntervallSetting, 0); --next age when a known damage occurs
spec.NextUnknownDamageAge = self.age + RealisticDamageSystem:RoundValue(math.random(3, 10) / registerRealisticDamageSystem.IntervallSetting, 0); --next age when an unknown damage occurs
spec.NextKnownDamageOperatingHour = self:getFormattedOperatingTime() + RealisticDamageSystem:RoundValue((math.random (45, 75) / 10) / registerRealisticDamageSystem.IntervallSetting, 1); --next operating hour when a known damage occurs --float --need /10 to get a decimal number
spec.NextUnknownDamageOperatingHour = self:getFormattedOperatingTime() + RealisticDamageSystem:RoundValue((math.random (105, 135) / 10) / registerRealisticDamageSystem.IntervallSetting, 1); --next operating hour when an unknown damage occurs --float --need /10 to get a decimal number
spec.MultiplayerAddDamage = -1 -- reset damage to set it later in the script to the proper amount
spec.FirstLoadNumbersSet = true
changeFlag = true --multiplayer sync
end;
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--ask player if he wants to start the tutorial
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if RealisticDamageSystem.UsersHadTutorialDialog[getUniqueUserId()] == nil then
if not spec.MaintenanceActive and not spec.InspectionActive and not spec.CVTRepairActive then
g_gui:showYesNoDialog(
{
text = g_i18n:getText("tutorial_Question_text", RealisticDamageSystem.l10nEnv),
title = g_i18n:getText("tutorial_Question_title", RealisticDamageSystem.l10nEnv),
target = self,
callback = RealisticDamageSystem.Tutorial,
}
)
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--insert unique user id into table to make sure every player in multiplayer gets the question only once
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
RealisticDamageSystem.UsersHadTutorialDialog[getUniqueUserId()] = {}
changeFlag = true --multiplayer sync
else
if spec.CVTRepairActive then
g_currentMission:showBlinkingWarning(g_i18n:getText("warning_CantStartTutorialCVT", RealisticDamageSystem.l10nEnv), 500) --show warning
elseif spec.InspectionActive then
g_currentMission:showBlinkingWarning(g_i18n:getText("warning_CantStartTutorialInspection", RealisticDamageSystem.l10nEnv), 500) --show warning
else
g_currentMission:showBlinkingWarning(g_i18n:getText("warning_CantStartTutorialMaintenance", RealisticDamageSystem.l10nEnv), 500) --show warning
end
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--when maintenance menu is open, update the text for every selection (update price and length)
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
local dialog = g_gui.guis["OptionDialog"]
if dialog ~= nil then
if dialog.target.isOpen then
if spec.menuIsOpen == true then --set menu is open
if self.spec_CVTaddon ~= nil and self.spec_CVTaddon.CVTdamage ~= nil and self.spec_CVTaddon.isVarioTM then
RealisticDamageSystemGUI:setText(dialog, spec, self.spec_CVTaddon)
elseif self.spec_CVTaddon ~= nil and self.spec_CVTaddon.CVTdamage ~= nil and spec.TutorialStarted then
RealisticDamageSystemGUI:setText(dialog, spec, self.spec_CVTaddon)
else
RealisticDamageSystemGUI:setText(dialog, spec, nil)
end
end
elseif not dialog.target.isOpen and spec.menuIsOpen == true then
local Dialog = dialog.target.optionElement.target
spec.menuIsOpen = false --set menu is open
if Dialog.newButtonInspection ~= nil then -- delete button to prevent mod conflict
Dialog.newButtonInspection:delete() -- works so never touch a running system
Dialog.newButtonInspection = nil -- workes so never touch a running system
end
if dialog.target.dialogTextElementCVT ~= nil then -- delete text to prevent mod conflict
dialog.target.dialogTextElementCVT:delete() -- works so never touch a running system
dialog.target.dialogTextElementCVT = nil -- workes so never touch a running system
end
if Dialog.newButtonCVT ~= nil then -- delete button to prevent mod conflict
Dialog.newButtonCVT:delete() -- works so never touch a running system
Dialog.newButtonCVT = nil -- workes so never touch a running system
end
if Dialog.yesButton ~= nil then -- enable button after tutorial again
Dialog.yesButton.disabled = false -- enable button after tutorial again
end
if Dialog.noButton ~= nil then -- enable button after tutorial again
Dialog.noButton.disabled = false -- enable button after tutorial again
end
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--motor false start and die function when total damages are > 8
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if spec.TotalNumberOfDamages >= 9 and spec.MaintenanceActive ~= true and spec.InspectionActive ~= true and spec.CVTRepairActive ~= true then
if g_currentMission.missionInfo.automaticMotorStartEnabled == false then
if spec.RandomNumber == 0 then
spec.RandomNumber = math.random(1, 3) --motor doens't start when random number is 1
end;
if spec.DontStopMotor == false then
if self:getIsMotorStarted() then
spec.MotorDieTimer = spec.MotorDieTimer - dt
spec.NumberMotorDieTimer = math.min(-spec.MotorDieTimer / 2000, 0.9) --timer for multiple ignition sound effect
if spec.NumberMotorDieTimer >= 0.290789 then
self:stopMotor() --stop motor
spec.MotorDieTimer = -1 --reset timer for multiple ignition sound effect
self:startMotor() --start motor for multiple ignition sound effect
spec.TimesSoundPlayed = spec.TimesSoundPlayed - 1 --count down the times the sound played (4 times)
end;
if spec.RandomNumber == 1 and spec.NumberMotorDieTimer >= 0.290789 and spec.TimesSoundPlayed == 0 then --if random number is 1 -> don't start motor
self:stopMotor()
g_currentMission:showBlinkingWarning(g_i18n:getText("warning_MotorFailed", RealisticDamageSystem.l10nEnv), 2300) --show warning
self.spec_RealisticDamageSystemEngineDied.EngineDied = true --set EngineDied for CVTneedClutch and NeedMotorStarted blinking warning
spec.TimesSoundPlayed = 4 --reset TimesSoundPlayed
spec.BlinkingWarningTimer = -1 --reset timer for blinking warning length
spec.RandomNumber = 0 --set random number to 0 to reset it
elseif spec.RandomNumber ~= 1 and spec.NumberMotorDieTimer >= 0.290789 and spec.TimesSoundPlayed == 1 then --if random number is not 1 -> start motor
spec.DontStopMotor = true --set DontStopMotor to prevent the vehicle from looping the multiple ignition sound effect
spec.RandomNumber = 0 --set random number to 0 to reset it
spec.TimesSoundPlayed = 4 --reset TimesSoundPlayed
end;
end;
else
if spec.LoadTooHigh ~= true then
self.spec_RealisticDamageSystemEngineDied.EngineDied = false --set EngineDied to false when vehicle is started again
end
end;
if not self:getIsMotorStarted() then
spec.DontStopMotor = false --set DontStopMotor to allow the multiple ignition sound effect again
end
end;
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--stop motor if engine load is too high
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if self:getMotorLoadPercentage() > 0.999999 and spec.LoadTooHigh == false then
self:stopMotor() --stop motor
g_currentMission:showBlinkingWarning(g_i18n:getText("warning_MotorFailed", RealisticDamageSystem.l10nEnv), 2300) --show warning
self.spec_RealisticDamageSystemEngineDied.EngineDied = true --set EngineDied for CVTneedClutch and NeedMotorStarted blinking warning
spec.LoadTooHigh = true --set LoadTooHigh to true to prevent the vehicle from stalling directly again because of a giants bug
spec.BlinkingWarningTimer = -1 --reset timer for blinking warning length
elseif self:getMotorLoadPercentage() < 0.3 and spec.LoadTooHigh == true then
spec.LoadTooHigh = false --set LoadTooHigh back to false to allow the engine to die again
end;
if self.spec_RealisticDamageSystemEngineDied.EngineDied then
spec.BlinkingWarningTimer = spec.BlinkingWarningTimer - dt
spec.NumberBlinkingWarningTimer = math.min(-spec.BlinkingWarningTimer / 2000, 1) --timer for blinking warning visibility
--if blinking warning disappeared again -> set engineDied to false to enable the NeedMotorStarted and CVTneedClutch blinking warning again
if spec.NumberBlinkingWarningTimer == 1 then
self.spec_RealisticDamageSystemEngineDied.EngineDied = false
spec.BlinkingWarningTimer = -1
end
end
spec.forDBL_EngineLight = true
else
spec.forDBL_EngineLight = false
spec.DontStopMotor = true --set to true when damages < 9 to prevent the vehicle from dying immediately after receiving 9 damages
end
if self:getIsMotorStarted() then
--giants bug:
--vehicle has been started with the multiple ignition sound effect + any item in the shop has been selected and "opened" -> leads to the motor sound being stopped
--everything else works fine, but the motor and gearbox sound is stopped (every other sound is still active as well)
local MotorSounds = self.spec_motorized.motorSamples
local gearboxSounds = self.spec_motorized.gearboxSamples
if not g_soundManager:getIsSamplePlaying(MotorSounds[1]) then
g_soundManager:playSamples(MotorSounds)
end
if not g_soundManager:getIsSamplePlaying(gearboxSounds[1]) then
g_soundManager:playSamples(gearboxSounds)
end
if not g_soundManager:getIsSamplePlaying(self.spec_motorized.samples.retarder) then
g_soundManager:playSample(self.spec_motorized.samples.retarder)
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--looks for the position of the pallets and adds the action event if the vehicle is in range of one
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
local inRange = RealisticDamageSystem:inRangeOfPallet(RealisticDamageSystem.MaintenancePallets, self.rootNode, self.ownerFarmId)
if inRange ~= nil then
g_inputBinding:setActionEventTextVisibility(RealisticDamageSystem.wartungsEvent, true)
g_inputBinding:setActionEventActive(RealisticDamageSystem.wartungsEvent, true)
else
g_inputBinding:setActionEventTextVisibility(RealisticDamageSystem.wartungsEvent, false)
g_inputBinding:setActionEventActive(RealisticDamageSystem.wartungsEvent, false)
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--calculate time until next inspection
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
spec.forDBL_NextInspectionMonths = math.max(0, spec.NextInspectionAge - self.age)
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--set text "inspection needed" when months until next inspection < 1
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if spec.MaintenanceActive ~= true and spec.InspectionActive ~= true and spec.CVTRepairActive ~= true then
if spec.forDBL_NextInspectionMonths == 0 then -- checks if a value is under 0
g_currentMission:addExtraPrintText(g_i18n:getText("warning_wartung", RealisticDamageSystem.l10nEnv):format(spec.forDBL_TotalNumberOfDamagesPlayerKnows)) --set hud text
else
g_currentMission:addExtraPrintText(g_i18n:getText("information_Motor", RealisticDamageSystem.l10nEnv):format(spec.forDBL_NextInspectionMonths, spec.forDBL_TotalNumberOfDamagesPlayerKnows)) --set hud text
end;
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--calculate damages
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
---------------
--known damages
---------------
--with operating hours
if self:getFormattedOperatingTime() >= spec.NextKnownDamageOperatingHour then --if a new damage should occur then:
spec.forDBL_TotalNumberOfDamagesPlayerKnows = spec.forDBL_TotalNumberOfDamagesPlayerKnows + 1 --add damage
spec.NextKnownDamageOperatingHour = self:getFormattedOperatingTime() + RealisticDamageSystem:RoundValue((math.random (45, 75) / 10) / registerRealisticDamageSystem.IntervallSetting, 1) --calculate new operating time until the next damage --need /10 to get a decimal number (4.5 - 7.5)
changeFlag = true --multiplayer sync
end
--with age
if self.age >= spec.NextKnownDamageAge and (spec.InspectionActive or spec.MaintenanceActive or spec.CVTRepairActive) then --if a new damage should occur then:
spec.NextKnownDamageAge = self.age + 1 --when active repair and new damage should be added: extend the time until the next damage so that no damage is being added during repair
changeFlag = true --multiplayer sync
elseif self.age >= spec.NextKnownDamageAge then
spec.forDBL_TotalNumberOfDamagesPlayerKnows = spec.forDBL_TotalNumberOfDamagesPlayerKnows + 1 --add damage
spec.NextKnownDamageAge = self.age + RealisticDamageSystem:RoundValue(math.random(6, 13) / registerRealisticDamageSystem.IntervallSetting, 0) --calculate new age until the next damage
changeFlag = true --multiplayer sync
end
-----------------
--unknown damages
-----------------
--with operating hours
if self:getFormattedOperatingTime() >= spec.NextUnknownDamageOperatingHour then --if a new damage should occur then:
spec.TotalNumberOfDamagesPlayerDoesntKnow = spec.TotalNumberOfDamagesPlayerDoesntKnow + 1 --add damage
spec.NextUnknownDamageOperatingHour = self:getFormattedOperatingTime() + RealisticDamageSystem:RoundValue((math.random (105, 135) / 10) / registerRealisticDamageSystem.IntervallSetting, 1) --calculate new operating time until the next damage --need /10 to get a decimal number (10.5 - 13.5)
changeFlag = true --multiplayer sync
end
--with age
if self.age >= spec.NextUnknownDamageAge and (spec.InspectionActive or spec.MaintenanceActive or spec.CVTRepairActive) then --if a new damage should occur then:
spec.NextUnknownDamageAge = self.age + 1 --when active repair and new damage should be added: extend the time until the next damage so that no damage is being added during repair
changeFlag = true --multiplayer sync
elseif self.age >= spec.NextUnknownDamageAge then
spec.TotalNumberOfDamagesPlayerDoesntKnow = spec.TotalNumberOfDamagesPlayerDoesntKnow + 1 --add damage
spec.NextUnknownDamageAge = self.age + RealisticDamageSystem:RoundValue(math.random(3, 10) / registerRealisticDamageSystem.IntervallSetting, 0) --calculate new age until the next damage
changeFlag = true --multiplayer sync
end
--total damages
spec.TotalNumberOfDamages = spec.TotalNumberOfDamagesPlayerDoesntKnow + spec.forDBL_TotalNumberOfDamagesPlayerKnows
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--set vehicle damage if new damage has been created
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if not g_currentMission.shopMenu.isOpen then
if spec.TotalNumberOfDamages ~= spec.DamagesThatAddedWear then
spec.MultiplayerAddDamage = (spec.TotalNumberOfDamages - spec.DamagesThatAddedWear) * 0.083 --add vehicle damage when new damage was created
spec.DamagesThatAddedWear = spec.TotalNumberOfDamages
changeFlag = true
end
end
--[[if math.abs(self:getDamageAmount() - (spec.TotalNumberOfDamages * 0.083)) >= 0.083 then --if vehicle damage does not represent the rds damage amount -> add rds damages
spec.forDBL_TotalNumberOfDamagesPlayerKnows = spec.forDBL_TotalNumberOfDamagesPlayerKnows + math.floor((self:getDamageAmount() - spec.TotalNumberOfDamages * 0.083) / 0.083)
spec.DamagesThatAddedWear = spec.DamagesThatAddedWear + math.floor((self:getDamageAmount() - spec.TotalNumberOfDamages * 0.083) / 0.083)
changeFlag = true
end--]]
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--everything that happens when maintenance is started
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if spec.MaintenanceActive == true then
if spec.FinishDay - g_currentMission.environment.currentDay ~= 1 then
g_currentMission:addExtraPrintText(g_i18n:getText("information_wartungMoreDays", RealisticDamageSystem.l10nEnv):format(spec.FinishDay - g_currentMission.environment.currentDay, spec.FinishHour, spec.FinishMinute)) --show info when maintenance is finished
else
g_currentMission:addExtraPrintText(g_i18n:getText("information_wartung", RealisticDamageSystem.l10nEnv):format(spec.FinishHour, spec.FinishMinute)) --show info when maintenance is finished
end
self.spec_RealisticDamageSystemEngineDied.EngineDied = true --set EngineDied for CVTneedClutch and NeedMotorStarted blinking warning
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--everything that happens when finish time is reached
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if RealisticDamageSystem.StopActiveRepairCommand or ((g_currentMission.environment.currentDay > spec.FinishDay) or ((g_currentMission.environment.currentDay == spec.FinishDay and g_currentMission.environment.currentHour > spec.FinishHour)) or (g_currentMission.environment.currentDay == spec.FinishDay and g_currentMission.environment.currentHour >= spec.FinishHour and g_currentMission.environment.currentMinute >= spec.FinishMinute)) then
if spec.DialogSelectedOptionCallback ~= 0 then --need this because DialogSelectedOptionCallback was not saved in the xml in a previous version and therefore could be 0 when reloading the savegame during a maintenance
spec.MultiplayerAddDamage = - (self:getDamageAmount() / spec.TotalNumberOfDamages) * spec.DialogSelectedOptionCallback --remove so much vehicle damage, so that when you repair all damages at once, there is 0% damage left
else
spec.MultiplayerAddDamage = -1 --set vehicle damage to 0
end
spec.MaintenanceActive = false
self.spec_RealisticDamageSystemEngineDied.EngineDied = false
spec.forDBL_TotalNumberOfDamagesPlayerKnows = spec.forDBL_TotalNumberOfDamagesPlayerKnows - spec.DialogSelectedOptionCallback
spec.DamagesThatAddedWear = spec.TotalNumberOfDamages - spec.DialogSelectedOptionCallback
spec.DialogSelectedOptionCallback = 0
--show info when maintenance is finished
g_gui:showInfoDialog({
titel = "titel",
text = g_i18n:getText("dialog_maintenance_finishedInformation", RealisticDamageSystemMotorStartDialog.l10nEnv):format(spec.forDBL_TotalNumberOfDamagesPlayerKnows),
})
changeFlag = true --multiplayer sync
end;
end;
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--everything that happens when inspection is started
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if spec.InspectionActive == true then
g_currentMission:addExtraPrintText(g_i18n:getText("information_Inspection", RealisticDamageSystem.l10nEnv):format(spec.FinishHour, spec.FinishMinute)) --show info when inspection is finished
self.spec_RealisticDamageSystemEngineDied.EngineDied = true --set EngineDied for CVTneedClutch and NeedMotorStarted blinking warning
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--everything that happens when finish time is reached
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if RealisticDamageSystem.StopActiveRepairCommand or ((g_currentMission.environment.currentDay > spec.FinishDay) or ((g_currentMission.environment.currentDay == spec.FinishDay and g_currentMission.environment.currentHour > spec.FinishHour)) or (g_currentMission.environment.currentDay == spec.FinishDay and g_currentMission.environment.currentHour >= spec.FinishHour and g_currentMission.environment.currentMinute >= spec.FinishMinute)) then
--show info when inspection is finished
g_gui:showInfoDialog({
titel = "titel",
text = g_i18n:getText("dialog_inspection_finishedInformation", RealisticDamageSystemMotorStartDialog.l10nEnv):format(spec.TotalNumberOfDamagesPlayerDoesntKnow, spec.forDBL_TotalNumberOfDamagesPlayerKnows + spec.TotalNumberOfDamagesPlayerDoesntKnow),
})
spec.InspectionActive = false
self.spec_RealisticDamageSystemEngineDied.EngineDied = false
spec.forDBL_TotalNumberOfDamagesPlayerKnows = spec.forDBL_TotalNumberOfDamagesPlayerKnows + spec.TotalNumberOfDamagesPlayerDoesntKnow
spec.TotalNumberOfDamagesPlayerDoesntKnow = 0
spec.NextInspectionAge = self.age + 12
changeFlag = true --multiplayer sync
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--FS22_CVT_Addon NEEDED!! everything that happens when CVT-repair is started
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if self.spec_CVTaddon ~= nil and self.spec_CVTaddon.CVTdamage ~= nil and self.spec_CVTaddon.isVarioTM then
if spec.CVTRepairActive == true then
self.spec_RealisticDamageSystemEngineDied.EngineDied = true --set EngineDied for CVTneedClutch and NeedMotorStarted blinking warning
if self.spec_CVTaddon.CVTdamage >= 90 then
g_currentMission:addExtraPrintText(g_i18n:getText("information_CVTChange", RealisticDamageSystem.l10nEnv):format(spec.FinishHour, spec.FinishMinute)) --show info when cvt-gearbox-change is finished
else
g_currentMission:addExtraPrintText(g_i18n:getText("information_CVTRepair", RealisticDamageSystem.l10nEnv):format(spec.FinishHour, spec.FinishMinute)) --show info when cvt-gearbox-repair is finished
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--everything that happens when finish time is reached
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if RealisticDamageSystem.StopActiveRepairCommand or ((g_currentMission.environment.currentDay > spec.FinishDay) or ((g_currentMission.environment.currentDay == spec.FinishDay and g_currentMission.environment.currentHour > spec.FinishHour)) or (g_currentMission.environment.currentDay == spec.FinishDay and g_currentMission.environment.currentHour >= spec.FinishHour and g_currentMission.environment.currentMinute >= spec.FinishMinute)) then
spec.CVTRepairActive = false
self.spec_RealisticDamageSystemEngineDied.EngineDied = false
self.spec_CVTaddon.CVTdamage = 0 --reset CVT-gearbox damage
self.spec_CVTaddon.forDBL_critDamage = 0 --reset CVT-gearbox damage
self.spec_CVTaddon.forDBL_warnHeat = 0 --reset CVT-gearbox damage
self.spec_CVTaddon.forDBL_warnDamage = 0 --reset CVT-gearbox damage
self.spec_CVTaddon.forDBL_critHeat = 0 --reset CVT-gearbox damage
self.spec_CVTaddon.forDBL_critDamage = 0 --reset CVT-gearbox damage
--show info when CVT-repair is finished
g_gui:showInfoDialog({
titel = "titel",
text = g_i18n:getText("dialog_cvt_finishedInformation", RealisticDamageSystemMotorStartDialog.l10nEnv),
})
changeFlag = true --multiplayer sync
end
end
end
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
--when console command is called (need this because spec is nil in console command)
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--
if RealisticDamageSystem.ResetDamagesCommand then
self:setDamageAmount(0, true)
spec.forDBL_TotalNumberOfDamagesPlayerKnows = 0
spec.TotalNumberOfDamagesPlayerDoesntKnow = 0
spec.DamagesThatAddedWear = 0
RealisticDamageSystem.ResetDamagesCommand = false
changeFlag = true --multiplayer sync
end
if RealisticDamageSystem.RemoveDamagesCommand ~= 0 then
spec.DamagesThatAddedWear = math.max(spec.TotalNumberOfDamages - RealisticDamageSystem.RemoveDamagesCommand, 0)
spec.forDBL_TotalNumberOfDamagesPlayerKnows = math.max(spec.forDBL_TotalNumberOfDamagesPlayerKnows - RealisticDamageSystem.RemoveDamagesCommand, 0)
if RealisticDamageSystem.RemoveDamagesCommand > 0 then
spec.MultiplayerAddDamage = - ((self:getDamageAmount() / spec.TotalNumberOfDamages) * RealisticDamageSystem.RemoveDamagesCommand)
else
spec.MultiplayerAddDamage = -RealisticDamageSystem.RemoveDamagesCommand * 0.083
end
RealisticDamageSystem.RemoveDamagesCommand = 0
changeFlag = true --multiplayer sync
end
if RealisticDamageSystem.FindDamagesCommand then
spec.forDBL_TotalNumberOfDamagesPlayerKnows = spec.forDBL_TotalNumberOfDamagesPlayerKnows + spec.TotalNumberOfDamagesPlayerDoesntKnow
spec.TotalNumberOfDamagesPlayerDoesntKnow = 0
RealisticDamageSystem.FindDamagesCommand = false
changeFlag = true --multiplayer sync
end
if RealisticDamageSystem.ResetTimeUntilInspectionCommand then
spec.NextInspectionAge = self.age + 12
RealisticDamageSystem.ResetTimeUntilInspectionCommand = false
changeFlag = true --multiplayer sync
end
if RealisticDamageSystem.StopActiveRepairCommand then
RealisticDamageSystem.StopActiveRepairCommand = false
end
if RealisticDamageSystem.DebugCommand then
print("Mod version: "..tostring(RealisticDamageSystem.modVersion))
print("Game setting costs: "..tostring(registerRealisticDamageSystem.CostsSetting))
print("Game setting length: "..tostring(registerRealisticDamageSystem.LengthSetting))
print("Game setting frequency: "..tostring(registerRealisticDamageSystem.IntervallSetting))
print("Game setting start time: "..tostring(registerRealisticDamageSystem.OpeningSetting))
print("Game setting end time: "..tostring(registerRealisticDamageSystem.ClosingSetting))
print("Vehicle name: "..tostring(self:getName()))
print("Vehicle age: "..tostring(self.age))
print("Vehicle operating time: "..tostring(self:getFormattedOperatingTime()))
print("Maintenance active: "..tostring(spec.MaintenanceActive))
print("Inspection active: "..tostring(spec.InspectionActive))
print("CVT-repair active: "..tostring(spec.CVTRepairActive))
print("Finish day: "..tostring(spec.FinishDay))
print("Current day: "..tostring(g_currentMission.environment.currentDay))
print("Finish hour: "..tostring(spec.FinishHour))
print("Current hour: "..tostring(g_currentMission.environment.currentHour))
print("Finish minute: "..tostring(spec.FinishMinute))
print("Current minute: "..tostring(g_currentMission.environment.currentMinute))
print("Number of damages that added base game damage: "..tostring(spec.DamagesThatAddedWear))
print("Total number of damages: "..tostring(spec.TotalNumberOfDamages))
print("Total number of damages player knows: "..tostring(spec.forDBL_TotalNumberOfDamagesPlayerKnows))
print("Total number of damages player doesnt know: "..tostring(spec.TotalNumberOfDamagesPlayerDoesntKnow))
print("Next operating time for new known damage: "..tostring(spec.NextKnownDamageOperatingHour))
print("Next operating time for new unknown damage: "..tostring(spec.NextUnknownDamageOperatingHour))
print("Next age for new known damage: "..tostring(spec.NextKnownDamageAge))
print("Next age for new unknown damage: "..tostring(spec.NextUnknownDamageAge))
print("Vehicle age when the next inspection is needed: "..tostring(spec.NextInspectionAge))
print("Players who had tutorial question:")
DebugUtil.printTableRecursively(RealisticDamageSystem.UsersHadTutorialDialog, "-" , 0, 3)
end
if RealisticDamageSystem.DebugCommandOnce then
print("Mod version: "..tostring(RealisticDamageSystem.modVersion))
print("Game setting costs: "..tostring(registerRealisticDamageSystem.CostsSetting))
print("Game setting length: "..tostring(registerRealisticDamageSystem.LengthSetting))
print("Game setting frequency: "..tostring(registerRealisticDamageSystem.IntervallSetting))
print("Game setting start time: "..tostring(registerRealisticDamageSystem.OpeningSetting))
print("Game setting end time: "..tostring(registerRealisticDamageSystem.ClosingSetting))
print("Vehicle name: "..tostring(self:getName()))
print("Vehicle age: "..tostring(self.age))