Voice volume in a personnal menu

Hello im a begginer in LUA and i created the GUI for a personal menu using NativeUI.

So i added a list to change the voice volume with : Faible Normal Fort (Low Normal High)

And i don’t know how to add it to the menu and the change take effect.

Here its the code for the voice volume :

local defaultdistance = 5.001 -- Default distance to voice
local highdistance = 12.001 -- Hight distance to voice
local lowdistance = 1.001 -- Low distance to voice
local currentdistancevoice = 0 -- Current distance to voice (0 to 2)
function Notify(text)
    SetNotificationTextEntry('STRING')
    AddTextComponentString(text)
    DrawNotification(false, true)
end

AddEventHandler('onClientMapStart', function()
	if currentdistancevoice == 0 then
		NetworkSetTalkerProximity(defaultdistance) -- 5 meters range
	elseif currentdistancevoice == 1 then
		NetworkSetTalkerProximity(highdistance) -- 12 meters range
	elseif currentdistancevoice == 2 then
		NetworkSetTalkerProximity(lowdistance) -- 1 meters range
	end
end)
Citizen.CreateThread(function()
 	while true do
 		Citizen.Wait(0)
 		if IsControlJustPressed(1, defaultkey) then
 			currentdistancevoice = (currentdistancevoice + 1) % 3
			if currentdistancevoice == 0 then
				NetworkSetTalkerProximity(defaultdistance) -- 5 meters range
				Notify("~w~Niveau vocal : ~b~normal")
			elseif currentdistancevoice == 1 then
				NetworkSetTalkerProximity(highdistance) -- 12 meters range
				Notify("~w~Niveau vocal : ~b~crier")
			elseif currentdistancevoice == 2 then
				NetworkSetTalkerProximity(lowdistance) -- 1 meters range
				Notify("~w~Niveau vocal : ~b~chuchoter")
			end
 		end
 	end
 end)

And here it’s my code with the personnal menu :

-- Creer le parent des menus  avec un titre en gros et un petit pour la barre des titres --
_menuPool = NativeUI.CreatePool()
mainMenu = NativeUI.CreateMenu("Menu Personnel", "~h~~b~Menu personnel", 0.10, 0)
_menuPool:Add(mainMenu)

-- Creer un menu nommé InventaireMenu --
function InventaireMenu(menu)
    local submenu = _menuPool:AddSubMenu(menu, "Inventaire")
    submenu:AddItem(NativeUI.CreateItem("Appuyer va déclancher une notification", "Déclenchement d'une notification !"))
end

-- Creer un menu nommé PortefeuilleMenu --
function PortefeuilleMenu(menu)
    local submenu = _menuPool:AddSubMenu(menu, "Portefeuille")
end

-- Creer un menu nommé VetementMenu --
function VetementMenu(menu)
	local submenu = _menuPool:AddSubMenu(menu, "Vêtement")
	local lunette = {
		"Lunette 1",
		"Lunette 2",
	}
	local newitem = NativeUI.CreateListItem("Lunette", lunette, 1)
	submenu:AddItem(newitem)
	menu.OnListChange = function(sender, item, index)
		if item == newitem then
			dish = item:IndexToItem(index)
			ShowNotification("Vous avez remis vos ~b~" .. dish .. "~w~.")
		end
	end
	local chapeau = {
		"Chapeau 1",
		"Chapeau 2",
	}
	local newitem = NativeUI.CreateListItem("Chapeau", chapeau, 1)
	submenu:AddItem(newitem)
	menu.OnListChange = function(sender, item, index)
		if item == newitem then
			dish = item:IndexToItem(index)
			ShowNotification("Vous avez remis votre ~b~" .. dish .. "~w~.")
		end
	end
end

-- Creer un menu nommé AnimationMenu --
function AnimationMenu(menu)
    local submenu = _menuPool:AddSubMenu(menu, "Animations")
	local othermenu = _menuPool:AddSubMenu(submenu, "Saluer")

    for i = 1, 1, 1 do
        othermenu:AddItem(NativeUI.CreateItem("Saluer 1", ""))
		othermenu:AddItem(NativeUI.CreateItem("Saluer 2", ""))
		othermenu:AddItem(NativeUI.CreateItem("Saluer 3", ""))
		othermenu:AddItem(NativeUI.CreateItem("Saluer 4", ""))
		othermenu:AddItem(NativeUI.CreateItem("Saluer 5", ""))
		othermenu:AddItem(NativeUI.CreateItem("Saluer 6", ""))
    end
	
	local othermenu1 = _menuPool:AddSubMenu(submenu, "Humeur")

    for i = 1, 1, 1 do
        othermenu1:AddItem(NativeUI.CreateItem("Humeur 1", ""))
		othermenu1:AddItem(NativeUI.CreateItem("Humeur 2", ""))
		othermenu1:AddItem(NativeUI.CreateItem("Humeur 3", ""))
		othermenu1:AddItem(NativeUI.CreateItem("Humeur 4", ""))
		othermenu1:AddItem(NativeUI.CreateItem("Humeur 5", ""))
		othermenu1:AddItem(NativeUI.CreateItem("Humeur 6", ""))
    end
	
	local othermenu2 = _menuPool:AddSubMenu(submenu, "Sportives")

    for i = 1, 1, 1 do
        othermenu2:AddItem(NativeUI.CreateItem("Sportive 1", ""))
		othermenu2:AddItem(NativeUI.CreateItem("Sportive 2", ""))
		othermenu2:AddItem(NativeUI.CreateItem("Sportive 3", ""))
		othermenu2:AddItem(NativeUI.CreateItem("Sportive 4", ""))
		othermenu2:AddItem(NativeUI.CreateItem("Sportive 5", ""))
		othermenu2:AddItem(NativeUI.CreateItem("Sportive 6", ""))
    end
	
	local othermenu3 = _menuPool:AddSubMenu(submenu, "Festives")

    for i = 1, 1, 1 do
        othermenu3:AddItem(NativeUI.CreateItem("Danse 1", ""))
		othermenu3:AddItem(NativeUI.CreateItem("Danse 2", ""))
		othermenu3:AddItem(NativeUI.CreateItem("Danse 3", ""))
		othermenu3:AddItem(NativeUI.CreateItem("Danse 4", ""))
		othermenu3:AddItem(NativeUI.CreateItem("Danse 5", ""))
		othermenu3:AddItem(NativeUI.CreateItem("Danse 6", ""))
    end
	
	local othermenu4 = _menuPool:AddSubMenu(submenu, "Autres")

    for i = 1, 1, 1 do
        othermenu4:AddItem(NativeUI.CreateItem("Autre 1", ""))
		othermenu4:AddItem(NativeUI.CreateItem("Autre 2", ""))
		othermenu4:AddItem(NativeUI.CreateItem("Autre 3", ""))
		othermenu4:AddItem(NativeUI.CreateItem("Autre 4", ""))
		othermenu4:AddItem(NativeUI.CreateItem("Autre 5", ""))
		othermenu4:AddItem(NativeUI.CreateItem("Autre 6", ""))
    end
end

-- Creer un menu nommé GestionvehiculeMenu --
function GestionvehiculeMenu(menu)
    local submenu = _menuPool:AddSubMenu(menu, "Gestion du véhicule")
	submenu:AddItem(NativeUI.CreateItem("Allumer/Eteindre le moteur", ""))
	submenu:AddItem(NativeUI.CreateItem("Donner un double des clés", ""))
	submenu:AddItem(NativeUI.CreateItem("Ouvrir coffre", ""))
	submenu:AddItem(NativeUI.CreateItem("Ouvrir capôt avant", ""))
end

-- Creer un menu nommé GestionvehiculeMenu --
function DemarcheMenu(menu)
    local demarche = {
        "Nom de la démarche 1",
        "Nom de la démarche 2",
        "Nom de la démarche 3",
        "Nom de la démarche 4",
        "Nom de la démarche 5",
        "Nom de la démarche 6",
    }
    local newitem = NativeUI.CreateListItem("Démarche", demarche, 1)
    menu:AddItem(newitem)
    menu.OnListChange = function(sender, item, index)
        if item == newitem then
            dish = item:IndexToItem(index)
            ShowNotification("Changement de la démarche en : ~b~" .. dish .. "~w~.")
        end
    end
end

-- Creer un menu nommé VoixMenu --
function VoixMenu(menu)
    local voix = {
        "Faible",
        "Normal",
        "Forte",
    }
    local newitem = NativeUI.CreateListItem("Niveau de la voix", voix, 1)
    menu:AddItem(newitem)
    menu.OnListChange = function(sender, item, index)
        if item == newitem then
            dish = item:IndexToItem(index)
            ShowNotification("Niveau de la voix : ~b~" .. dish .. "~w~.")
        end
    end
end

-- Creer un menu nommé ParametreMenu --
function ParametreMenu(menu)
    local submenu = _menuPool:AddSubMenu(menu, "Paramètres")
	submenu:AddItem(NativeUI.CreateItem("Menu 1", ""))
	submenu:AddItem(NativeUI.CreateItem("Menu 2", ""))
	submenu:AddItem(NativeUI.CreateItem("Menu 3", ""))
	submenu:AddItem(NativeUI.CreateItem("Menu 4", ""))
	submenu:AddItem(NativeUI.CreateItem("Menu 5", ""))
end

-- Creer un menu nommé SauvegardepositionMenu --
function SauvegardepositionMenu(menu)
    local submenu = _menuPool:AddSubMenu(menu, "Sauvegarder votre position")
end

-- Raccourcis pour les menus au lieu de les appeler a chaque fois --
InventaireMenu(mainMenu)
PortefeuilleMenu(mainMenu)
VetementMenu(mainMenu)
AnimationMenu(mainMenu)
GestionvehiculeMenu(mainMenu)
DemarcheMenu(mainMenu)
VoixMenu(mainMenu)
ParametreMenu(mainMenu)
SauvegardepositionMenu(mainMenu)
_menuPool:RefreshIndex()

-- Ouvrir le menu via F5 --
Citizen.CreateThread(function()
    while true do
        Citizen.Wait(0)
        _menuPool:ProcessMenus()
        if IsControlJustPressed(1, 167) then
            mainMenu:Visible(not mainMenu:Visible())
        end
    end
end)

-- Si le joueur veut bouger, arreter l'animation --
Citizen.CreateThread(function()
    while true do
        Citizen.Wait(0)
        if IsPedUsingAnyScenario(GetPlayerPed(-1)) then
            if IsControlJustPressed(1, 32) or IsControlJustPressed(1, 33) or IsControlJustPressed(1, 34) or IsControlJustPressed(1, 35) or IsControlJustPressed(1, 8) or IsControlJustPressed(1, 9) then
                ClearPedTasks(GetPlayerPed(-1))
            end
        end

    end
end)

-- Fonction utiles --
-- Afficher les infos du joueur --
function DrawPlayerInfo(target)
	drawTarget = target
	drawInfo = true
end

-- Arreter d'Afficher les infos du joueur --
function StopDrawPlayerInfo()
	drawInfo = false
	drawTarget = 0
end

-- Affichage des notifications --
function ShowNotification(text)
    SetNotificationTextEntry("STRING")
    AddTextComponentString(text)
    DrawNotification(false, false)
end

-- Jouer une animation --
function animsAction(animObj)
    RequestAnimDict( animObj.lib )
    while not HasAnimDictLoaded( animObj.lib ) do
        Citizen.Wait(0)
    end
    if HasAnimDictLoaded( animObj.lib ) then
        TaskPlayAnim( GetPlayerPed(-1), animObj.lib , animObj.anim ,8.0, -8.0, -1, 0, 0, false, false, false )
    end
end

-- Jouer une animation de Scénario --
function animsActionScenario(animObj)
    local ped = GetPlayerPed(-1);

    if ped then
        local pos = GetEntityCoords(ped);
        local head = GetEntityHeading(ped);
        --TaskStartScenarioAtPosition(ped, animObj.anim, pos['x'], pos['y'], pos['z'] - 1, head, -1, false, false);
        TaskStartScenarioInPlace(ped, animObj.anim, 0, false)
        if IsControlJustPressed(1,188) then
        end

    end
end

-- Avoir l'ID d'un joueur --
function getPlayerID(source)
    local identifiers = GetPlayerIdentifiers(source)
    local player = getIdentifiant(identifiers)
    return player
end

-- Avoir son ID --
function getIdentifiant(id)
    for _, v in ipairs(id) do
        return v
    end
end

-- Avoir les joueurs sur le serveur --
function getPlayers()
    local playerList = {}
    for i = 0, 32 do
        local player = GetPlayerFromServerId(i)
        if NetworkIsPlayerActive(player) then
            table.insert(playerList, player)
        end
    end
    return playerList
end

-- Distance par defaut du volume de la voix --
local defaultdistance = 5.001
local highdistance = 12.001
local lowdistance = 1.001
local currentdistancevoice = 0 -- Current distance to voice (0 to 2)

-- Quand un joueur se connecte, met le niveau par defaut --
AddEventHandler('onClientMapStart', function()
	if currentdistancevoice == 0 then
		NetworkSetTalkerProximity(defaultdistance) -- 5 meters range
	elseif currentdistancevoice == 1 then
		NetworkSetTalkerProximity(highdistance) -- 12 meters range
	elseif currentdistancevoice == 2 then
		NetworkSetTalkerProximity(lowdistance) -- 1 meters range
	end
end)

So at this point i don’t know how it can work, because i want to just have to scroll on the right and it change to low, scroll again Normal etc… (To know what i’m talking http://prntscr.com/jfukz3) :

-- Creer un menu nommé VoixMenu --
function VoixMenu(menu)
    local voix = {
        "Faible",
        "Normal",
        "Forte",
    }
    local newitem = NativeUI.CreateListItem("Niveau de la voix", voix, 1)
    menu:AddItem(newitem)
    menu.OnListChange = function(sender, item, index)
        if item == newitem then
            dish = item:IndexToItem(index)
            ShowNotification("Niveau de la voix : ~b~" .. dish .. "~w~.")
        end
    end
end
1 Like

You know default GTA does this?

What ? i don’t understand ?

I think there is a mix-up in translation, looking at his script it looks like voice proximity not volume.

says like 1 meters range, 12 meters range etc

Yes its the range of the voice volume when a player can listen you like when you are in low at the distance of 5m they can understand you but at 6m they cant

ohh ok. Though you meant volume in general.

No its my bad, bad translation x)