Jump to content

[M]ister

Members
  • Posts

    444
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by [M]ister

  1. A ideia é sempre obter o que já está salvo, efetuar as operações em cima do que obteve e então salvar todos novamente.

    -- Exemplo
    addCommandHandler("inventario",
    	function(thePlayer, _, action, WeaponID, ammo)
    		local houseName = playersInInterior[thePlayer]
    		
    		local itens = fromJSON(getHouseData(houseName, "houseWeapons"))
    		if (action == "incluir")
    			itens[WeaponID] = ammo
    		else if (action == "remover") then
    			itens[WeaponID] = nil
    		end
    		setHouseData(houseName, "houseWeapons", toJSON(itens))
    	end
    )

     

    • Thanks 1
  2. local marker = createMarker (1684.8952636719, -2082.3459472656, 12.546875, "cylinder", 6, 0, 0, 0, 100)
    
    function antbug1(thePlayer)
    	if isElementWithinMarker(source, marker) then
    		outputChatBox("*Veículo bloqueado!", thePlayer, 255, 0, 0)
    		cancelEvent()
    	end
    end
    addEventHandler("onVehicleStartEnter",root, antbug1)

     

  3. @dener189, o seu código é muito repetitivo... o uso de tabelas é sugerido para otimização/manutenção:

    local comandos = {
    	["adiconarSAMU"] = { acl = "SAMU", restrito = {"Admin","Console"} },
    	["adiconarVIP"]	= { acl = "VIP", restrito = {"Admin","Console"} },
    	["adiconarVIPOuro"] = { acl = "Ouro", restrito = {"Admin","Console"} },
    	["adiconarVIPPrata"] = { acl = "Prata", restrito = {"Admin","Console"} },
    	["adiconarVIPBronze"] = { acl = "Bronze", restrito = {"Admin","Console"} },
    	["adiconarYoutuber"] = { acl = "Youtuber", restrito = {"Admin","Console"} },
    	["adiconarComandosPolicia"] = { acl = "ComandosPolicia", restrito = {"Admin","Console"} },
    	["adiconarTraficante"] = { acl = "Traficante", restrito = {"Admin","Console"} }
    }
    
    addEventHandler("onResourceStart", resourceRoot,
    	function()
    		for cmd,_ in pairs(comandos) do
    			addCommandHandler(cmd,adicionar)
    		end
    	end
    )
    
    function adicionar(playerSource, commandName, accountName)
    	local permissao = false
    	if (not isGuestAccount(getPlayerAccount(playerSource))) then
    		local playerSourceAccount = getAccountName(getPlayerAccount(playerSource))
    		for _,acl in ipairs(comandos[commandName].restrito) do
    			if isObjectInACLGroup ( "user." .. playerSourceAccount, aclGetGroup ( acl ) ) then
    				permissao = true
    				break
    			end
    		end
    	end
    	if (not permissao) then
    		outputChatBox("Erro. Você não tem permissão para utilizar esse comando!", playerSource)
    		return false
    	end
    	
    	if (not accountName) then
    		outputChatBox("Erro. Nenhuma conta informada!", playerSource)
    		outputChatBox("Para dar TAG digite: /" .. comandos[commandName].acl .. " [CONTA]", playerSource)
    		return false
    	end
    	
    	if (not getAccount(accountName)) then
    		outputChatBox("Erro. Conta não encontrada!", playerSource)
    		return false
    	end
    	
    	aclGroupAddObject(aclGetGroup(comandos[commandName].acl), "user."..accountName)
    	outputChatBox("A conta '"..accountName.."' foi adicionado no grupo " .. comandos[commandName].acl .. " com sucesso!", playerSource)
    end

    (não testado)

    • Thanks 1
  4. local values = {
    	[234] = 100,
    	[211] = 200
    }
    
    local theMarker = createMarker(0, 0, 0, "cylinder", 1.5, 255, 255, 0, 170)
    
    addEventHandler("onPlayerMarkerHit",root,
    	function(markerHit, matchingDimension)
    		if (markerHit == theMarker and matchingDimension) then
    			local veh = getPedOccupiedVehicle(source)
    			if (veh and values[getElementModel(veh)) then
    				givePlayerMoney(source,values[getElementModel(veh)])
    			end
    		end
    	end
    )

    Leia: https://www.Lua.org/pil/2.5.html

    • Like 1
    • Thanks 1
  5. Adicione o bind também no player que entrar no servidor: onPlayerJoin

    Isso: "motoronagora" or "motoroffagora" apesar de funcionar, não é uma lógica correta, pois para o computador ambos são valores válidos (verdadeiros) o que torna o uso do or indiferente. Ali ele sempre vai utilizar o "motoronagora" pelo simples fato de estar mais à esquerda e não por uma comparação lógica.

  6. playerBlips = { }
    function oi ()
    	for index,value in ipairs(getElementsByType("player")) do
    		if( playerBlips [ value ] ) then
    			destroyElement( playerBlips[ value ] )
    			playerBlips [ value ] = nil
    		end
    		playerBlips[ value ] = createBlipAttachedTo ( value, 0,2,130,10,230)
    		setElementVisibleTo(playerBlips[value],getRootElement( ),false)
    		
    		if (getPlayerTeam(value)) then
    			for _, p in ipairs(getPlayersInTeam(getPlayerTeam(value))) do
    				setElementVisibleTo(playerBlips[value],p,true)
    			end
    		end
    	end
    end	
    addEventHandler("onElementModelChange",getRootElement(),oi)

     

    • Thanks 1
  7. Sim.

    Recomendo que você de uma estudada em lógica de programação, pois isso é um dos conceitos mais básicos.... Você pode sim aprender pela tentativa e erro (como agora), mas o tempo gasto para aprender vai ser bem maior, antes 50 minutos estudando, do que 2 horas quebrando a cabeça.

  8. function DeltaACL()
    	local accountName = getAccountName(getPlayerAccount(client))
    	if isObjectInACLGroup("user."..accountName, aclGetGroup("FT")) then
    		triggerClientEvent(client, "openDx", resourceRoot)
    	end
    end
    addEvent("Delta:VACL", true)
    addEventHandler("Delta:VACL", resourceRoot, DeltaACL)
    function DeltaAbrir(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement)
    	if button == "left" and state == "down" then
    		if clickedElement then
    			if (getElementType(clickedElement) == "player") then
    				local x, y, z = getElementPosition(localPlayer)
    				local px, py, pz = getElementPosition(clickedElement)
    				local distance = getDistanceBetweenPoints3D(x, y, z, px, py, pz)
    				if distance <= 3 then
    					triggerServerEvent("Delta:VACL", resourceRoot)
    					playerName = getPlayerName(clickedElement):gsub("#%x%x%x%x%x%x", "")
    				end
    				playerClicked = clickedElement
    			end
    		end
    	end
    end
    addEventHandler("onClientClick", root, DeltaAbrir)
    
    addEvent("openDx", true)
    addEventHandler("openDx", resourceRoot,
    	function()
    		if not isEventHandlerAdded("onClientRender", root, DeltaDX) then
    			addEventHandler("onClientRender", root, DeltaDX)
    			DX = true
    		end
    	end
    )

     

    • Thanks 1
  9. 20 hours ago, MaligNos said:
    
    local equipes = {}
    setTimer(function()
    	if (#getElementsByType("team") > 0) then
    		for _, team in ipairs(getElementsByType("team")) do
    			table.insert(equipes,{nome = getTeamName(team),membros = countPlayersInTeam(team)})
    		end
    		table.sort(equipes, function(a,b) return a.membros > b.membros end)
    		if (equipes[1].membros > 0) then
    			outputChatBox("Maior equipe: "..equipes[1].nome.." - "..equipes[1].membros.." membro(s)")
    		end
    	end
    end,5000,0)
    

     

    Faltou um resete no array, daquele jeito só vai acumulando os valores a cada execução... um simples: equipes = {}  na linha 3 já resolve.

    • Thanks 1
  10. local equipes = {}
    setTimer(function()
    	if (#getElementsByType("team") > 0) then
    		for _, team in ipairs(getElementsByType("team")) do
    			table.insert(equipes,{nome = getTeamName(team),membros = countPlayersInTeam(team)})
    		end
    		table.sort(equipes, function(a,b) return a.membros > b.membros end)
    		if (equipes[1].membros > 0) then
    			outputChatBox("Maior equipe: "..equipes[1].nome.." - "..equipes[1].membros.." membro(s)")
    		end
    	end
    end,5000,0)

     

    • Like 1
    • Thanks 1
×
×
  • Create New...