sirrjohn Posted August 23, 2023 Share Posted August 23, 2023 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
Other Languages Moderators Lord Henry Posted August 25, 2023 Other Languages Moderators Share Posted August 25, 2023 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. Link to comment
sirrjohn Posted August 26, 2023 Author Share Posted August 26, 2023 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 Lord Henry Posted August 28, 2023 Other Languages Moderators Share Posted August 28, 2023 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. 1 Link to comment
Recommended Posts