MrDante Posted September 29, 2016 Posted September 29, 2016 (edited) Salve galera!, estou com um problema que anda me afetando muito, e gostaria de entender o porque acontece isso, eu tenho uma tabela dentro de outra tabela, e quero pegar os elementos da tabela dentro de uma tabela randomicamente. Mais ou menos isso: Boxs = { Marker = { Start = { {-714.84930, 961.21680, 12.23629} }, Positions = { {-709.06329345703, 951.41162109375, 11.969321250916}, {-715.99768066406, 974.80853271484, 11.71480178833} }, Create = {} }, Vehicle = {} } Positions = { {-709.06329345703, 951.41162109375, 11.969321250916}, {-715.99768066406, 974.80853271484, 11.71480178833} } addEventHandler("onMarkerHit", root, function (Jogador) if (source == Boxs.Marker.Create[1]) then if (getElementType(Jogador) == "player") then if (isElement(Boxs.Vehicle[Jogador])) then destroyElement(Boxs.Vehicle[Jogador]); end local x, y, z = getElementPosition(Jogador) Boxs.Vehicle[Jogador] = createVehicle(411, x, y, z); warpPedIntoVehicle(Jogador, Boxs.Vehicle[Jogador]); Boxs.Marker.Create[2] = createMarker(unpack(Boxs.Marker.Positions[math.random(1, #Boxs.Marker.Positions)]), "cylinder", 1, 255, 0, 0, 255); end end end ) for i, v in ipairs(Boxs.Marker.Start) do Boxs.Marker.Create[1] = createMarker(v[1], v[2], v[3], "cylinder", 1, 255, 0, 0); end Se alguém poder dar uma ajuda, ficarei muito grato Edited September 29, 2016 by DNL291
DNL291 Posted September 29, 2016 Posted September 29, 2016 Tente isto: addEventHandler("onMarkerHit", resourceRoot, function (Jogador) if (source == Boxs.Marker.Create[1]) then if (getElementType(Jogador) == "player") then if (isElement(Boxs.Vehicle[Jogador])) then destroyElement(Boxs.Vehicle[Jogador]); end local x, y, z = getElementPosition(Jogador) local mx, my, mz = unpack( Boxs.Marker.Positions[ math.random( #Boxs.Marker.Positions ) ] ) Boxs.Vehicle[Jogador] = createVehicle(411, x, y, z); warpPedIntoVehicle(Jogador, Boxs.Vehicle[Jogador]); Boxs.Marker.Create[2] = createMarker(mx, my, mz, "cylinder", 1, 255, 0, 0, 255); end end end ) Só defini variável pras posições da marca, não achei outro erro. Você tava tentando usar unpack direto dentro da função, isso não funciona (pelo que me lembro). Se não funcionar, mostre o erro do debug.
n3wage Posted September 29, 2016 Posted September 29, 2016 Só para complementar, Isso ocorre porque a linguagem pega apenas o primeiro argumento passado de funções executadas dentro de outras funções. Ou seja, Nessa linha: Boxs.Marker.Create[2] = createMarker(unpack(Boxs.Marker.Positions[math.random(1, #Boxs.Marker.Positions)]), "cylinder", 1, 255, 0, 0, 255); A linguagem só vai pegar o primeiro argumento retornado da função unpack, Assim ficando: Boxs.Marker.Create[2] = createMarker(POSICAO_X, "cylinder", 1, 255, 0, 0, 255); Por isso o erro ocorre, A solução é fazer como o DNL fez, criar variáveis com os valores retornados pela função unpack e depois usar essas variáveis na função createMarker.
MrDante Posted September 29, 2016 Author Posted September 29, 2016 Muito obrigado n3wage e DNL 291, ajudou muito! consegui compreender o que houve na função, obrigadão
[M]ister Posted September 29, 2016 Posted September 29, 2016 Eu nunca entendi direito o funcionamento do unpack() em relação a isso: local hue = {x, y, z} createMarker(unpack(hue)) -- Funciona createMarker(unpack(hue), "arrow") -- Não funciona quando adicionado outros parâmetros após ele
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