dener189 Posted November 19, 2018 Share Posted November 19, 2018 (edited) Olá, preciso de ajuda para fazer um script. Quero fazer um roteiro quando os jogadores não estiverem mais hospitalados, mais rápido e mais cordial e já sei que é necessário usar uma função getDistanceBetweenPoints3D, mais não sei como fazer um script com essa função pois nunca ouvi falar dela. Você pode fazer um roteiro? Edited November 19, 2018 by dener189 Link to comment
Other Languages Moderators Lord Henry Posted November 19, 2018 Other Languages Moderators Share Posted November 19, 2018 Não entendi direito o que você quer. Você quer que o jogador nasça num hospital mais próximo depois de morrer? Em vez de nascer num ponto aleatório. Link to comment
dener189 Posted November 19, 2018 Author Share Posted November 19, 2018 2 hours ago, Lord Henry said: Não entendi direito o que você quer. Você quer que o jogador nasça num hospital mais próximo depois de morrer? Em vez de nascer num ponto aleatório. exatamente, quero que o player nasça em uma dessas localizações após morrer "2034.9428710938, -1403.2003173828, 18", "-2655.3991699219, 638.16137695313, 15" "-1514.6713867188, 2522.4748535156, 56", "1607.62890625, 1818.9958496094, 11" "-2198.5632324219, -2306.6220703125, 31", OBS: Quero que nasça na mais próxima! Link to comment
Other Languages Moderators Lord Henry Posted November 19, 2018 Other Languages Moderators Share Posted November 19, 2018 Você disse que já sabe que é preciso usar a função getDistanceBetweenPoints3D. Isso já é um excelente começo. Usando ela e um FOR para verificar a distância entre cada ponto, você consegue determinar qual deles tem a menor distância e fazer o jogador nascer lá. A lógica funciona assim: Você tem uma variável local que será 9999 e outra variável que será o ID da menor posição possível. A primeira variável irá guardar a distância do primeiro elemento ao passar pelo FOR, a segunda irá guardar o ID 1, depois no segundo elemento, se a distância dele for menor do que a distância guardada nessa variável, então atualiza a variável com essa distância e a segunda variável passa a ser o ID 2, e vai fazendo isso com todos os demais itens dessa lista de posições. Ao final desse FOR, a primeira variável estará com a menor distância entre todos os elementos e a segunda variável estará com o ID da menor distância entre eles. Dai é só vc fazer o player nascer na posição desse ID. (Sei que ficou difícil de entender, quando eu chegar em casa eu faço um exemplo com comentários pra ficar fácil de entender) Link to comment
dener189 Posted November 20, 2018 Author Share Posted November 20, 2018 17 hours ago, Lord Henry said: Você disse que já sabe que é preciso usar a função getDistanceBetweenPoints3D. Isso já é um excelente começo. Usando ela e um FOR para verificar a distância entre cada ponto, você consegue determinar qual deles tem a menor distância e fazer o jogador nascer lá. A lógica funciona assim: Você tem uma variável local que será 9999 e outra variável que será o ID da menor posição possível. A primeira variável irá guardar a distância do primeiro elemento ao passar pelo FOR, a segunda irá guardar o ID 1, depois no segundo elemento, se a distância dele for menor do que a distância guardada nessa variável, então atualiza a variável com essa distância e a segunda variável passa a ser o ID 2, e vai fazendo isso com todos os demais itens dessa lista de posições. Ao final desse FOR, a primeira variável estará com a menor distância entre todos os elementos e a segunda variável estará com o ID da menor distância entre eles. Dai é só vc fazer o player nascer na posição desse ID. (Sei que ficou difícil de entender, quando eu chegar em casa eu faço um exemplo com comentários pra ficar fácil de entender) realmente n entendi nada Link to comment
STR6 Posted November 22, 2018 Share Posted November 22, 2018 local hospitais = { { x, y, z }, { x, y, z }, } function getNewSpawn( player ) local hospitais_ = { } local x, y, z = getElementPosition( player ) for i=1, #hospitais do table.insert( hospitais_, { distance = getDistanceBetweenPoints3D( x, y, z, hospitais[ i ][ 1 ], hospitais[ i ][ 2 ], hospitais[ i ][ 3 ] ), id = i } ) end table.sort( hospitais_, function( a, b ) return a.distance < b.distance end ) local id = hospitais_[ 1 ].id return hospitais[ id ][ 1 ], hospitais[ id ][ 2 ], hospitais[ id ][ 3 ] end --[[ local x, y, z = getNewSpawn( player ) ]]-- 2 Link to comment
Other Languages Moderators Lord Henry Posted November 24, 2018 Other Languages Moderators Share Posted November 24, 2018 Ta ae, coloquei comentários pra ficar mais fácil de entender. local spawnPos = { -- (Prefira usar no máximo 3 casas decimais.) [1] = {2034.9428710938, -1403.2003173828, 18}, -- Hospital 1 LS [2] = {-2655.3991699219, 638.16137695313, 15}, -- Hospital SF [3] = {-1514.6713867188, 2522.4748535156, 56}, -- Hospital Tierra Robada [4] = {1607.62890625, 1818.9958496094, 11}, -- Hospital LV [5] = {-2198.5632324219, -2306.6220703125, 31}, -- Hospital Whetstone } addEventHandler ("onPlayerWasted", getRootElement(), function () -- Executa essa função quando o player morre. local x, y, z = getElementPosition (source) -- x, y, z recebem a posição do player onde ele morreu. local dist = 99999 -- Distância do ponto mais próximo. local id = 0 -- ID da coordenada mais próxima. for i, v in ipairs (spawnPos) do -- Para cada table de coordenadas, faça: local pX, pY, pZ = unpack (spawnPos[i]) -- pX,pY, pZ recebem as coordenadas que estão no spawnPos[i] if getDistanceBetweenPoints3D (x, y, z, pX, pY, pZ) < dist then -- Se a distância dessa coordenada for menor que dist, então: dist = getDistanceBetweenPoints3D (x, y, z, pX, pY, pZ) -- Atualiza a distância para essa. id = i -- Atualiza o id para este. end end if id == 1 then -- Outputs que servem somente para testes. outputChatBox ("Hospital mais próximo: Los Santos", source) elseif id == 2 then outputChatBox ("Hospital mais próximo: San Fierro", source) elseif id == 3 then outputChatBox ("Hospital mais próximo: Tierra Robada", source) elseif id == 4 then outputChatBox ("Hospital mais próximo: Las Venturas", source) elseif id == 5 then outputChatBox ("Hospital mais próximo: Whetstone", source) end setElementData (source, "killNear", id) -- Seta o id mais próximo como data no player. end) function spawnMe () if getElementData (source, "killNear") then -- Se o jogador que morreu tem essa data, então: (quando o jogador entra no server, ele spawna sem essa data) setElementPosition (source, unpack (spawnPos[getElementData (source, "killNear")])) -- Coloca ele na posição desse ID que está na data. removeElementData (source, "killNear") -- Remove essa data, que não será mais usada até que ele morra novamente e uma nova data seja criada. end end addEventHandler ("onPlayerSpawn", getRootElement(), spawnMe) -- Executa essa função quando o player spawna. 1 Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now