adding updating to mods

This commit is contained in:
KingMcDonalds
2025-08-17 23:16:40 -07:00
parent 9270cd0540
commit 02894ddeb1
93 changed files with 452 additions and 154 deletions
Binary file not shown.
Binary file not shown.
@@ -4,7 +4,7 @@ lua54 'yes'
description 'Biker - Grapeseed'
author 'G&Ns Studio'
version '4.1.0'
version '4.1.1'
this_is_a_map 'yes'
Binary file not shown.
@@ -3,12 +3,9 @@ lua54 'yes'
game "gta5"
author 'brofx'
description 'brofx_farmhouse_02'
version '1.0.0'
description 'brofx_farmhouse02'
version '1.1.0'
data_file "INTERIOR_PROXY_ORDER_FILE" "interiorproxies.meta"
files { "stream/interiorproxies.meta" }
this_is_a_map "yes"
Binary file not shown.
+4 -29
View File
@@ -7,39 +7,14 @@
<Item>
<indices content="char_array">
0
134
0
64
64
64
64
0
0
13
16
</indices>
<liveries>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
<Item value="false"/>
</liveries>
</Item>
</colors>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+109 -22
View File
@@ -8,7 +8,9 @@ end
local ox_inventory = hasResource('ox_inventory') and exports.ox_inventory
local qb_inventory = hasResource('qb-inventory') and exports['qb-inventory']
local ps_inventory = hasResource('ps-inventory') and exports['ps-inventory']
local qs_inventory = hasResource('qs-inventory') and exports['qs-inventory']
local codem_inventory = hasResource('codem-inventory') and exports['codem-inventory']
local QBCore, ESX = hasResource('qb-core'), hasResource('es_extended')
if IsDuplicityVersion() then
@@ -29,7 +31,7 @@ if IsDuplicityVersion() then
end
end
if Scully.UseItem and (qb_inventory or qs_inventory) then
if Scully.UseItem and (qb_inventory or ps_inventory or qs_inventory or codem_inventory) then
fw.Functions.CreateUseableItem('radio', function(source, item)
TriggerClientEvent('scully_radio:openRadio', source, Scully.RadioColour)
end)
@@ -51,16 +53,19 @@ if IsDuplicityVersion() then
function Scully.Functions.GetPlayerName(source)
local player = fw.GetPlayerFromId(source)
local firstname = player.get('firstName')
if firstname then
return '', string.sub(firstname, 1, 1) .. '. ' .. player.get('lastName')
else
return '', GetPlayerName(source)
if player then
local firstname = player.get('firstName')
if firstname then
return '', string.sub(firstname, 1, 1) .. '. ' .. player.get('lastName')
else
return '', GetPlayerName(source)
end
end
end
if Scully.UseItem and qs_inventory then
if Scully.UseItem and (qs_inventory or codem_inventory) then
fw.RegisterUsableItem('radio', function(source)
TriggerClientEvent('scully_radio:openRadio', source, Scully.RadioColour)
end)
@@ -100,6 +105,7 @@ if IsDuplicityVersion() then
end)
end
else
local playerState = LocalPlayer.state
local playerData = {}
if QBCore then
@@ -109,6 +115,17 @@ else
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
playerData = fw.Functions.GetPlayerData()
local callsign = GetResourceKvpString(playerData.citizenid .. ':callsign:' .. Scully.KVPHandle)
local radioName = GetResourceKvpString(playerData.citizenid .. ':name:' .. Scully.KVPHandle)
if callsign then
TriggerServerEvent('scully_radio:updateRadioInfo', 'callsign', callsign)
end
if radioName then
TriggerServerEvent('scully_radio:updateRadioInfo', 'name', radioName)
end
end)
RegisterNetEvent('QBCore:Client:OnPlayerUnload', function()
@@ -121,32 +138,50 @@ else
playerData.job = job
end)
RegisterNetEvent('qb-inventory:client:updateInventory', function()
Scully.Functions.HasItem(function(hasItem)
if not hasItem then
TriggerEvent('scully_radio:leaveChannel', true)
CreateThread(function()
while true do
if playerState.radioChannel and (playerState.radioChannel > 0) then
Scully.Functions.HasItem(function(hasItem)
if not hasItem then
TriggerEvent('scully_radio:leaveChannel', true)
end
end)
end
end)
end)
RegisterNetEvent('inventory:client:UpdatePlayerInventory', function()
Scully.Functions.HasItem(function(hasItem)
if not hasItem then
TriggerEvent('scully_radio:leaveChannel', true)
end
end)
Wait(2500)
end
end)
Scully.Functions.ShowNotification = fw.Functions.Notify
function Scully.Functions.UpdateInfo(data)
Scully.Radio[data.type] = data.value
SetResourceKvp(playerData.citizenid .. ':' .. data.type .. ':' .. Scully.KVPHandle, data.value)
TriggerServerEvent('scully_radio:updateRadioInfo', data.type, data.value)
Scully.Functions.ShowNotification(Scully.Language.UpdatedYour .. ' ' .. data.type .. ' ' .. Scully.Language.To .. ' ' .. data.value .. '!')
end
elseif ESX then
local playerState = LocalPlayer.state
local fw = exports.es_extended:getSharedObject()
playerData = fw.GetPlayerData()
RegisterNetEvent('esx:playerLoaded', function(data)
Wait(1000)
playerState.isLoggedIn = true
playerData = data
local callsign = GetResourceKvpString(playerData.identifier .. ':callsign:' .. Scully.KVPHandle)
local radioName = GetResourceKvpString(playerData.identifier .. ':name:' .. Scully.KVPHandle)
if callsign then
TriggerServerEvent('scully_radio:updateRadioInfo', 'callsign', callsign)
end
if radioName then
TriggerServerEvent('scully_radio:updateRadioInfo', 'name', radioName)
end
end)
RegisterNetEvent('esx:onPlayerLogout', function()
@@ -161,6 +196,14 @@ else
end)
Scully.Functions.ShowNotification = fw.ShowNotification
function Scully.Functions.UpdateInfo(data)
Scully.Radio[data.type] = data.value
SetResourceKvp(playerData.identifier .. ':' .. data.type .. ':' .. Scully.KVPHandle, data.value)
TriggerServerEvent('scully_radio:updateRadioInfo', data.type, data.value)
Scully.Functions.ShowNotification(Scully.Language.UpdatedYour .. ' ' .. data.type .. ' ' .. Scully.Language.To .. ' ' .. data.value .. '!')
end
else
CreateThread(function()
Wait(500)
@@ -172,7 +215,18 @@ else
end)
RegisterNetEvent('playerSpawned', function()
LocalPlayer.state:set('isLoggedIn', true, false)
playerState:set('isLoggedIn', true, false)
local callsign = GetResourceKvpString('radio:callsign:' .. Scully.KVPHandle)
local radioName = GetResourceKvpString('radio:name:' .. Scully.KVPHandle)
if callsign then
TriggerServerEvent('scully_radio:updateRadioInfo', 'callsign', callsign)
end
if radioName then
TriggerServerEvent('scully_radio:updateRadioInfo', 'name', radioName)
end
end)
function Scully.Functions.ShowNotification(text)
@@ -180,6 +234,14 @@ else
AddTextComponentSubstringPlayerName(text)
EndTextCommandThefeedPostTicker(true, true)
end
function Scully.Functions.UpdateInfo(data)
Scully.Radio[data.type] = data.value
SetResourceKvp('radio:' .. data.type .. ':' .. Scully.KVPHandle, data.value)
TriggerServerEvent('scully_radio:updateRadioInfo', data.type, data.value)
Scully.Functions.ShowNotification(Scully.Language.UpdatedYour .. ' ' .. data.type .. ' ' .. Scully.Language.To .. ' ' .. data.value .. '!')
end
end
function Scully.Functions.HasAccess(channel)
@@ -229,7 +291,32 @@ else
end
end
elseif qb_inventory then
hasRadioItem = qb_inventory:HasItem(checkItems)
for i = 1, #checkItems do
local hasItem = qb_inventory:HasItem(checkItems[i], 1)
if hasItem then
hasRadioItem = true
break
end
end
elseif ps_inventory then
for i = 1, #checkItems do
local hasItem = ps_inventory:HasItem(checkItems[i], 1)
if hasItem then
hasRadioItem = true
break
end
end
elseif codem_inventory then
for i = 1, #checkItems do
local hasItem = codem_inventory:HasItem(checkItems[i], 1)
if hasItem then
hasRadioItem = true
break
end
end
end
if not Scully.UseItem then hasRadioItem = true end
+2 -1
View File
@@ -31,7 +31,8 @@ escrow_ignore {
'config.lua',
'functions/*.lua',
'ox_inventory_items.lua',
'qb-inventory_items.lua'
'qb-inventory_items.lua',
'talkover_protection.lua'
}
ui_page 'ui/index.html'
Binary file not shown.
@@ -0,0 +1,238 @@
local radioChannel = 0
local radioNames = {}
local disableRadioAnim = false
local talkingPlayers = {}
local playerState = LocalPlayer.state
--- event syncRadioData
--- syncs the current players on the radio to the client
---@param radioTable table the table of the current players on the radio
---@param localPlyRadioName string the local players name
function syncRadioData(radioTable, localPlyRadioName)
radioData = radioTable
logger.info('[radio] Syncing radio table.')
if GetConvarInt('voice_debugMode', 0) >= 4 then
print('-------- RADIO TABLE --------')
tPrint(radioData)
print('-----------------------------')
end
for tgt, enabled in pairs(radioTable) do
if tgt ~= playerServerId then
toggleVoice(tgt, enabled, 'radio')
end
end
sendUIMessage({
radioChannel = radioChannel,
radioEnabled = radioEnabled
})
if GetConvarInt("voice_syncPlayerNames", 0) == 1 then
radioNames[playerServerId] = localPlyRadioName
end
end
RegisterNetEvent('pma-voice:syncRadioData', syncRadioData)
--- event setTalkingOnRadio
--- sets the players talking status, triggered when a player starts/stops talking.
---@param plySource number the players server id.
---@param enabled boolean whether the player is talking or not.
function setTalkingOnRadio(plySource, enabled)
toggleVoice(plySource, enabled, 'radio')
radioData[plySource] = enabled
playMicClicks(enabled)
end
RegisterNetEvent('pma-voice:setTalkingOnRadio', setTalkingOnRadio)
--- event addPlayerToRadio
--- adds a player onto the radio.
---@param plySource number the players server id to add to the radio.
function addPlayerToRadio(plySource, plyRadioName)
radioData[plySource] = false
if GetConvarInt("voice_syncPlayerNames", 0) == 1 then
radioNames[plySource] = plyRadioName
end
if radioPressed then
logger.info('[radio] %s joined radio %s while we were talking, adding them to targets', plySource, radioChannel)
playerTargets(radioData, MumbleIsPlayerTalking(PlayerId()) and callData or {})
else
logger.info('[radio] %s joined radio %s', plySource, radioChannel)
end
end
RegisterNetEvent('pma-voice:addPlayerToRadio', addPlayerToRadio)
--- event removePlayerFromRadio
--- removes the player (or self) from the radio
---@param plySource number the players server id to remove from the radio.
function removePlayerFromRadio(plySource)
if plySource == playerServerId then
logger.info('[radio] Left radio %s, cleaning up.', radioChannel)
for tgt, _ in pairs(radioData) do
if tgt ~= playerServerId then
toggleVoice(tgt, false, 'radio')
end
end
sendUIMessage({
radioChannel = 0,
radioEnabled = radioEnabled
})
radioNames = {}
radioData = {}
playerTargets(MumbleIsPlayerTalking(PlayerId()) and callData or {})
else
toggleVoice(plySource, false)
if radioPressed then
logger.info('[radio] %s left radio %s while we were talking, updating targets.', plySource, radioChannel)
playerTargets(radioData, MumbleIsPlayerTalking(PlayerId()) and callData or {})
else
logger.info('[radio] %s has left radio %s', plySource, radioChannel)
end
radioData[plySource] = nil
if GetConvarInt("voice_syncPlayerNames", 0) == 1 then
radioNames[plySource] = nil
end
end
end
RegisterNetEvent('pma-voice:removePlayerFromRadio', removePlayerFromRadio)
--- function setRadioChannel
--- sets the local players current radio channel and updates the server
---@param channel number the channel to set the player to, or 0 to remove them.
function setRadioChannel(channel)
if GetConvarInt('voice_enableRadios', 1) ~= 1 then return end
type_check({channel, "number"})
TriggerServerEvent('pma-voice:setPlayerRadio', channel)
radioChannel = channel
end
--- exports setRadioChannel
--- sets the local players current radio channel and updates the server
---@param channel number the channel to set the player to, or 0 to remove them.
exports('setRadioChannel', setRadioChannel)
-- mumble-voip compatability
exports('SetRadioChannel', setRadioChannel)
--- exports removePlayerFromRadio
--- sets the local players current radio channel and updates the server
exports('removePlayerFromRadio', function()
setRadioChannel(0)
end)
--- exports addPlayerToRadio
--- sets the local players current radio channel and updates the server
---@param _radio number the channel to set the player to, or 0 to remove them.
exports('addPlayerToRadio', function(_radio)
local radio = tonumber(_radio)
if radio then
setRadioChannel(radio)
end
end)
--- exports toggleRadioAnim
--- toggles whether the client should play radio anim or not, if the animation should be played or notvaliddance
exports('toggleRadioAnim', function()
disableRadioAnim = not disableRadioAnim
TriggerEvent('pma-voice:toggleRadioAnim', disableRadioAnim)
end)
-- exports disableRadioAnim
--- returns whether the client is undercover or not
exports('getRadioAnimState', function()
return toggleRadioAnim
end)
--- check if the player is dead
--- seperating this so if people use different methods they can customize
--- it to their need as this will likely never be changed
--- but you can integrate the below state bag to your death resources.
--- LocalPlayer.state:set('isDead', true or false, false)
function isDead()
if playerState.isDead then
return true
elseif IsPlayerDead(PlayerId()) then
return true
end
end
RegisterCommand('+radiotalk', function()
if GetConvarInt('voice_enableRadios', 1) ~= 1 then return end
if isDead() then return end
local talkingProtection = false
for player, talking in pairs(talkingPlayers) do
if talking then
local currentChannel = Player(player).state.radioChannel
if currentChannel ~= radioChannel then
talkingPlayers[player] = false
else
talkingProtection = true
break
end
end
end
if talkingProtection then return end
if not radioPressed and radioEnabled then
if radioChannel > 0 then
logger.info('[radio] Start broadcasting, update targets and notify server.')
playerTargets(radioData, MumbleIsPlayerTalking(PlayerId()) and callData or {})
TriggerServerEvent('pma-voice:setTalkingOnRadio', true)
radioPressed = true
playMicClicks(true)
if GetConvarInt('voice_enableRadioAnim', 0) == 1 and not (GetConvarInt('voice_disableVehicleRadioAnim', 0) == 1 and IsPedInAnyVehicle(PlayerPedId(), false)) then
if not disableRadioAnim then
RequestAnimDict('random@arrests')
while not HasAnimDictLoaded('random@arrests') do
Citizen.Wait(10)
end
TaskPlayAnim(PlayerPedId(), "random@arrests", "generic_radio_enter", 8.0, 2.0, -1, 50, 2.0, 0, 0, 0)
end
end
Citizen.CreateThread(function()
TriggerEvent("pma-voice:radioActive", true)
while radioPressed do
Wait(0)
SetControlNormal(0, 249, 1.0)
SetControlNormal(1, 249, 1.0)
SetControlNormal(2, 249, 1.0)
end
end)
end
end
end, false)
RegisterCommand('-radiotalk', function()
if radioChannel > 0 or radioEnabled and radioPressed then
radioPressed = false
MumbleClearVoiceTargetPlayers(voiceTarget)
playerTargets(MumbleIsPlayerTalking(PlayerId()) and callData or {})
TriggerEvent("pma-voice:radioActive", false)
playMicClicks(false)
if GetConvarInt('voice_enableRadioAnim', 0) == 1 then
StopAnimTask(PlayerPedId(), "random@arrests", "generic_radio_enter", -4.0)
end
TriggerServerEvent('pma-voice:setTalkingOnRadio', false)
end
end, false)
if gameVersion == 'fivem' then
RegisterKeyMapping('+radiotalk', 'Talk over Radio', 'keyboard', GetConvar('voice_defaultRadio', 'LMENU'))
end
--- event syncRadio
--- syncs the players radio, only happens if the radio was set server side.
---@param _radioChannel number the radio channel to set the player to.
function syncRadio(_radioChannel)
if GetConvarInt('voice_enableRadios', 1) ~= 1 then return end
logger.info('[radio] radio set serverside update to radio %s', radioChannel)
radioChannel = _radioChannel
end
RegisterNetEvent('pma-voice:clSetPlayerRadio', syncRadio)
RegisterNetEvent('scully_radio:setTalkingOnRadio', function(player, talking)
local currentChannel = Player(player).state.radioChannel
if currentChannel == radioChannel then
talkingPlayers[player] = talking
end
end)
+4 -4
View File
@@ -69,7 +69,7 @@ ensure vMenu
ensure Delete-Vehicle
ensure delped
ensure disable_interior
ensure Cruise-Control
//ensure Cruise-Control
ensure guidehud
ensure EGRP-LoadingScreen
ensure NeverWanted
@@ -87,7 +87,7 @@ ensure Tackle
ensure WeazelNewsCam
ensure Crouch
ensure CalmAI
ensure Engine-Toggle
//ensure Engine-Toggle
ensure PiggyBack
ensure Weaponry
ensure rpemotesreborn1.6.0
@@ -122,7 +122,7 @@ ensure Smart-Clamp
ensure Frame-Monitor
ensure Chair-Bed-System
ensure Nearest-Postal
ensure Sandy-Streetlights
///ensure Sandy-Streetlights
ensure LifeInvader-MLO-Script
ensure Safe-Zones
ensure Server-Queue
@@ -148,7 +148,7 @@ ensure DeathCam
//ensure Doorlock
ensure wk_wars2x
ensure Firework-Box
ensure Fighterjet-HUD
///ensure Fighterjet-HUD
ensure speedcams
//ensure dopeNotify
//ensure okokNotify