101 lines
		
	
	
		
			No EOL
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			No EOL
		
	
	
		
			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) |