This repository was archived by the owner on Feb 8, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSpeedPlayer.lua
More file actions
97 lines (82 loc) · 3.89 KB
/
Copy pathSpeedPlayer.lua
File metadata and controls
97 lines (82 loc) · 3.89 KB
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
-- SpeedPlayer Mod
-- Refactored from FS17, FS19 by *TurboStar* | LS Modcompany
-- V1.0.0.0 Initial release
-- V1.1.0.0 Adjusted values to patch 1.4.1.0
SpeedPlayer = {}
function SpeedPlayer:loadMap(...)
self.SPEEDS = {0.8, 2.0, 4.0*0.7, 4.0, 12.0, 32.0, 60.0, 80.0} -- m/s
self.SPEEDSLENGTH = #self.SPEEDS
self.TEXTS = {[0.8] = "keyslow3", [2.0] = "keyslow2", [4.0*0.7] = "keyslow1", [4.0] = "key0", [12.0] = "key1", [32.0] = "key2", [60.0] = "key15", [80.0] = "key3", ["other"] = "othermod"}
self.cont = 4 -- It starts with default speed
self.eventIdReduce, self.eventIdIncrease = "", ""
self.errorDisplayed, self.firstTime = false, true
end
function SpeedPlayer:registerActionEvents()
if self.isClient then
if SpeedPlayer.firstTime then
local spe = SpeedPlayer.SPEEDS[4]
SpeedPlayer.setSpeed(spe)
SpeedPlayer.firstTime = false
end
_, SpeedPlayer.eventIdReduce = g_inputBinding:registerActionEvent(InputAction.SPEEDMINUS, SpeedPlayer, SpeedPlayer.reduceSpeed, false, true, false, false, -1, true)
_, SpeedPlayer.eventIdIncrease = g_inputBinding:registerActionEvent(InputAction.SPEEDPLUS, SpeedPlayer, SpeedPlayer.incrementSpeed, false, true, false, false, 1, true)
end
end
Player.registerActionEvents = Utils.appendedFunction(Player.registerActionEvents, SpeedPlayer.registerActionEvents)
--- Event callback used to reduce cont, so the speed
function SpeedPlayer:reduceSpeed()
if (self.cont == 1) then return end
self.cont = self.cont - 1
-- g_inputBinding.events[SpeedPlayer.eventIdReduce].callbackState is -1 here
local spe = self.SPEEDS[self.cont]
self.setSpeed(spe)
end
--- Event callback used to increase cont, so the speed
function SpeedPlayer:incrementSpeed()
if (self.cont == self.SPEEDSLENGTH) then return end
self.cont = self.cont + 1
-- g_inputBinding.events[SpeedPlayer.eventIdIncrease].callbackState is 1 here
local spe = self.SPEEDS[self.cont]
self.setSpeed(spe)
end
--- Set speed changing each player informations
-- @param speed of the player (m/s)
function SpeedPlayer.setSpeed(speed)
local info = g_currentMission.player.motionInformation
if speed ~= nil then
-- Ratio taken from default speeds
info.maxWalkingSpeed = tonumber(speed)
info.maxRunningSpeed = tonumber(speed * (9/4))
info.maxSwimmingSpeed = tonumber(speed * (3/4))
info.maxCrouchingSpeed = tonumber(speed / 2)
info.maxFallingSpeed = tonumber(speed * 1.5)
info.maxCheatRunningSpeed = info.maxRunningSpeed -- Same as maxRunningSpeed, FS19_cheatsPlayerWalkspeedReset.zip by modelleicher is overwritten anyway
end
end
function SpeedPlayer:update(dt)
if g_currentMission:getIsClient() then -- don't run on the Dedicated Server itself
if g_gui.currentGui == nil and g_currentMission.controlledVehicle == nil then -- only if no vehicle is entered or menu is up
if (self.cont ~= nil and (self.cont < 1 or self.cont > self.SPEEDSLENGTH)) or self.cont == nil then
if not self.errorDisplayed then
print("SpeedPlayer: something is wrong on SpeedPlayer.cont ... Aborting functionality. Please report your log.txt")
self.errorDisplayed = true
end
return
end
local eventIdReduce = self.eventIdReduce
local eventIdIncrease = self.eventIdIncrease
g_inputBinding:setActionEventActive(eventIdReduce, SpeedPlayer.cont ~= 1)
g_inputBinding:setActionEventTextVisibility(eventIdReduce, SpeedPlayer.cont ~= 1)
g_inputBinding:setActionEventActive(eventIdIncrease, SpeedPlayer.cont ~= SpeedPlayer.SPEEDSLENGTH)
g_inputBinding:setActionEventTextVisibility(eventIdIncrease, SpeedPlayer.cont ~= SpeedPlayer.SPEEDSLENGTH)
local info = g_currentMission.player.motionInformation
if self.TEXTS[info.maxWalkingSpeed] ~= nil then
g_currentMission:addExtraPrintText(g_i18n:getText(self.TEXTS[info.maxWalkingSpeed]))
else
g_currentMission:addExtraPrintText(g_i18n:getText(self.TEXTS["other"]))
end
end
end
end
print(" Loading SpeedPlayer Mod...")
addModEventListener(SpeedPlayer)