Jump to content

Blip aparecer apenas para um determinado jogador


Recommended Posts

Posted

Olá pessoal, possuo um script de criação de bases para DayZ, e quando uso

local blipbase = createBlip(x, y, z-1, 56)

ele cria blips de todas as bases existentes no mapa

 

Eu gostaria de criar apenas os blips para as bases que o jogador possui, e apenas para ele especificamente, é possível?

 

function createBase(row)
	local id = tonumber(row['id'])
	local object = tonumber(row['object'])
	local owner = tostring(row['serialowner'])
	local x = tonumber(row['x'])
	local y = tonumber(row['y'])
	local z = tonumber(row['z'])
	local r = tonumber(row['r'])
	object = tonumber(object)
	if object == 2681 then
		zmin = -91.1
	elseif object == 2754 then
		zmin = -80.5
	elseif object == 2779 then
		zmin = -75.5
	else
		outputChatBox("The base object ID is not valid!",source)
		return false
	end
	local base_o = createObject(object,x,y,zmin)
	setElementRotation(base_o,0,0,r)
	local marker = createMarker ( x, y, z-1, "cylinder", 3, 255, 255, 255, 20 ) -- Вход
	local marker2 = createMarker ( x,y,-95, "cylinder", 3, 255, 255, 255, 20 ) -- Выход
	setElementData(marker, "id", id)
	setElementData(marker2, "id", id)
	setElementData(marker, "bases", true)
	setElementData(marker2, "bases", true)
	setElementData(marker, "verh1niz2", 1)
	setElementData(marker2, "verh1niz2", 2)
	baseCol = createColTube(x,y,-125,120,90)
	setElementData(baseCol,"base",true)
	setElementData(baseCol,"base_o",base_o)
	setElementData(baseCol,"owner",owner)
	setElementData(baseCol,"id",id)
	setElementData(baseCol,"marker",marker)
	setElementData(baseCol,"marker2",marker2)
end

 

  • Moderators
Posted

Se o script for server-side, o último parâmetro do createBlip é o jogador para quem ele será visível. Se não especificar esse parâmetro, ele será visível para todo mundo.

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Posted
12 hours ago, Lord Henry said:

Se o script for server-side, o último parâmetro do createBlip é o jogador para quem ele será visível. Se não especificar esse parâmetro, ele será visível para todo mundo.

Mas não teria que ter uma verificação em cima do elementdata "owner" e só se o jogador for dono da base aparecer o blip dela para ele?

  • Moderators
Posted

Vc pode verificar isso quando o jogador faz login.

local bases = {} -- Tabela com todas as bases criadas. (vc precisará adaptar sua função createBase para colocá-las nesta tabela)
local blips = {} -- Tabela com todos os blips das bases.

function baseBlip(_, _, theSource) -- theSource só existe quando essa função é chamada lá no createBase()
    if not theSource then
        theSource = source -- Se essa função foi chamada ao fazer login, theSource passa a ser quem logou.
    end
    for i, base in pairs(bases) do -- Para cada base da tabela, faça:
        if getPlayerFromSerial (getElementData(base, "owner")) then -- Se o jogador que tem o serial do dono desta base está online, então:
            if getPlayerFromSerial (getElementData(base, "owner")) == theSource then -- Se o jogador que logou é dono desta base, então:
                if isElement(blips[i]) then -- Se já existe o blip desta base, então:
                    setElementVisibleTo (blips[i], theSource, true) -- Torna este blip visível para este jogador que logou.
                else -- Se ainda não existe o blip desta base, então:
                    local x, y, z = getElementPosition(base) -- Obtém a posição da base para usar no blip.
                    blips[i] = createBlip(x, y, z, 58, 1, 255, 255, 255, 255, 0, 8500, theSource) -- Cria o blip visível somente para o jogador que logou.
                end
            end
        end
    end
end
addEventHandler("onPlayerLogin", root, baseBlip)

function unBlip()
    for i, base in pairs(bases) do -- Para cada base da tabela, faça:
        if getPlayerFromSerial (getElementData(base, "owner")) then -- Se o jogador que tem o serial do dono desta base está online, então:
            if getPlayerFromSerial (getElementData(base, "owner")) == source then -- Se o jogador que deslogou é dono desta base, então:
                if isElement(blips[i]) then -- Se essa base tem o blip criado, então:
                    setElementVisibleTo (blips[i], source, false) -- Para de mostrar pra esse jogador que deslogou ou saiu do servidor.
                end
            end
        end
    end
end
addEventHandler("onPlayerLogout", root, unBlip)
addEventHandler("onPlayerQuit", root, unBlip)

function getPlayerFromSerial (serial) -- Função útil que pega o player online com este serial.
    assert (type(serial) == "string" and #serial == 32, "getPlayerFromSerial - invalid serial")
    for i, player in pairs (getElementsByType ("player")) do
        if getPlayerSerial(player) == serial then
            return player
        end
    end
    return false
end

E lá no final da sua função createBase() adicione isso lá dentro:

table.insert(bases, baseCol) -- Adiciona a base que foi criada na tabela de bases.
baseBlip(false, false, getPlayerFromSerial(owner)) -- Tenta criar o blip para o dono da base, se ele estiver online.

 

  • Thanks 1

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...