101 lines
4.4 KiB
Lua
101 lines
4.4 KiB
Lua
-- add text entries for all the help types we have
|
|
AddTextEntry('FOUNTAIN_HELP', 'This fountain currently contains $~1~.~n~Press ~INPUT_PICKUP~ to obtain $~1~.~n~Press ~INPUT_DETONATE~ to place $~1~.')
|
|
AddTextEntry('FOUNTAIN_HELP_DRAINED', 'This fountain currently contains $~1~.~n~Press ~INPUT_DETONATE~ to place $~1~.')
|
|
AddTextEntry('FOUNTAIN_HELP_BROKE', 'This fountain currently contains $~1~.~n~Press ~INPUT_PICKUP~ to obtain $~1~.')
|
|
AddTextEntry('FOUNTAIN_HELP_BROKE_N_DRAINED', 'This fountain currently contains $~1~.')
|
|
AddTextEntry('FOUNTAIN_HELP_INUSE', 'This fountain currently contains $~1~.~n~You can use it again in ~a~.')
|
|
|
|
-- upvalue aliases so that we will be fast if far away
|
|
local Wait = Wait
|
|
local GetEntityCoords = GetEntityCoords
|
|
local PlayerPedId = PlayerPedId
|
|
|
|
-- timer, don't tick as frequently if we're far from any money fountain
|
|
local relevanceTimer = 500
|
|
|
|
CreateThread(function()
|
|
local pressing = false
|
|
|
|
while true do
|
|
Wait(relevanceTimer)
|
|
|
|
local coords = GetEntityCoords(PlayerPedId())
|
|
|
|
for _, data in pairs(moneyFountains) do
|
|
-- if we're near this fountain
|
|
local dist = #(coords - data.coords)
|
|
|
|
-- near enough to draw
|
|
if dist < 40 then
|
|
-- ensure per-frame tick
|
|
relevanceTimer = 0
|
|
|
|
DrawMarker(29, data.coords.x, data.coords.y, data.coords.z, 0, 0, 0, 0.0, 0, 0, 1.0, 1.0, 1.0, 0, 150, 0, 120, false, true, 2, false, nil, nil, false)
|
|
else
|
|
-- put the relevance timer back to the way it was
|
|
relevanceTimer = 500
|
|
end
|
|
|
|
-- near enough to use
|
|
if dist < 1 then
|
|
-- are we able to use it? if not, display appropriate help
|
|
local player = LocalPlayer
|
|
local nextUse = player.state['fountain_nextUse']
|
|
|
|
-- GetNetworkTime is synced for everyone
|
|
if nextUse and nextUse >= GetNetworkTime() then
|
|
BeginTextCommandDisplayHelp('FOUNTAIN_HELP_INUSE')
|
|
AddTextComponentInteger(GlobalState['fountain_' .. data.id])
|
|
AddTextComponentSubstringTime(math.tointeger(nextUse - GetNetworkTime()), 2 | 4) -- seconds (2), minutes (4)
|
|
EndTextCommandDisplayHelp(0, false, false, 1000)
|
|
else
|
|
-- handle inputs for pickup/place
|
|
if not pressing then
|
|
if IsControlPressed(0, 38 --[[ INPUT_PICKUP ]]) then
|
|
TriggerServerEvent('money_fountain:tryPickup', data.id)
|
|
pressing = true
|
|
elseif IsControlPressed(0, 47 --[[ INPUT_DETONATE ]]) then
|
|
TriggerServerEvent('money_fountain:tryPlace', data.id)
|
|
pressing = true
|
|
end
|
|
else
|
|
if not IsControlPressed(0, 38 --[[ INPUT_PICKUP ]]) and
|
|
not IsControlPressed(0, 47 --[[ INPUT_DETONATE ]]) then
|
|
pressing = false
|
|
end
|
|
end
|
|
|
|
-- decide the appropriate help message
|
|
local youCanSpend = (player.state['money_cash'] or 0) >= data.amount
|
|
local fountainCanSpend = GlobalState['fountain_' .. data.id] >= data.amount
|
|
|
|
local helpName
|
|
|
|
if youCanSpend and fountainCanSpend then
|
|
helpName = 'FOUNTAIN_HELP'
|
|
elseif youCanSpend and not fountainCanSpend then
|
|
helpName = 'FOUNTAIN_HELP_DRAINED'
|
|
elseif not youCanSpend and fountainCanSpend then
|
|
helpName = 'FOUNTAIN_HELP_BROKE'
|
|
else
|
|
helpName = 'FOUNTAIN_HELP_BROKE_N_DRAINED'
|
|
end
|
|
|
|
-- and print it
|
|
BeginTextCommandDisplayHelp(helpName)
|
|
AddTextComponentInteger(GlobalState['fountain_' .. data.id])
|
|
|
|
if fountainCanSpend then
|
|
AddTextComponentInteger(data.amount)
|
|
end
|
|
|
|
if youCanSpend then
|
|
AddTextComponentInteger(data.amount)
|
|
end
|
|
|
|
EndTextCommandDisplayHelp(0, false, false, 1000)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end) |