Jump to content

Blip aparecer apenas para um determinado jogador


Recommended Posts

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

 

Link to comment
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?

Link to comment
  • Other Languages Moderators

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
Link to comment
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

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