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) | 
