WeeD1 Posted October 3, 2020 Share Posted October 3, 2020 (edited) Olá, estou com um problema, o script está acusando Warning quando o objeto clicado não é o correto, como arrumar? WARNING: Blitz/blitz.lua:63: Bad argument @ 'getElementType' [Expected element at argument 1, got nil] function quandoClicar(mouseButton, buttonState, clickedElement, worldPosX, worldPosY, worldPosZ, screenPosX, screenPosY) if (mouseButton == "left") and (buttonState == "down") and (getElementType(clickedElement) == "object") and (getElementType(source) == "player") then if (getElementData(source, "Modo:Blitz")) == true then destroyElement(clickedElement) else outputChatBox("#FFD700[AVISO] Você precisa estar no modo blitz para tirar os cones, use /blitz.", source, 255,255,255, true) end end end addEventHandler("onPlayerClick", getRootElement(), quandoClicar) Edited October 3, 2020 by WeeD1 Link to comment
Other Languages Moderators androksi Posted October 3, 2020 Other Languages Moderators Share Posted October 3, 2020 Olá. Recomendo usar o evento client-side onClientClick. Pois o evento que você está utilizando, ele possui uma área de clique um pouco errada. Creio eu que seja devido à sincronização. Já no evento que citei acima, ele irá reconhecer qualquer elemento, independente da posição, latência ou qualquer outra coisa. 1 Link to comment
WeeD1 Posted October 3, 2020 Author Share Posted October 3, 2020 4 hours ago, andreisrw said: Olá. Recomendo usar o evento client-side onClientClick. Pois o evento que você está utilizando, ele possui uma área de clique um pouco errada. Creio eu que seja devido à sincronização. Já no evento que citei acima, ele irá reconhecer qualquer elemento, independente da posição, latência ou qualquer outra coisa. Fiz o teste com client-side, porém ainda sem sucesso, agora o objeto não está mais sendo excluído do mapa O único erro que acusa é esse: WARNING: Blitz/c.lua:2: Bad argument @ 'getElementType' [Expected element at argument 1, got boolean] Minha tentativa: function quandoClicar(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement) if (button == "left") and (state == "down") and (getElementType(clickedElement) == "object") and (getElementType(localPlayer) == "player") then if (getElementData(localPlayer, "Modo:Blitz")) == true then destroyElement(clickedElement) else outputChatBox("#FFD700[AVISO] Você precisa estar no modo blitz para excluir algum objeto, use /blitz.", 255,255,255, true) end end end addEventHandler("onClientClick", getRootElement(), quandoClicar) Link to comment
Other Languages Moderators androksi Posted October 3, 2020 Other Languages Moderators Share Posted October 3, 2020 (edited) function whenClick(button, state, _, _, _, _, _, clickedElement) local isLeft = button == "left" local isUp = state == "up" if isLeft and isUp then local object = clickedElement if isElement(object) and getElementType(object) == "object" then outputChatBox(getElementModel(object)) end end end addEventHandler("onClientClick", root, whenClick) Código testado. Não é necessário verificar se a pessoa que clicou é um jogador, pois apenas um jogador pode clicar. Então é sem sentido. Apenas não adicionei aquela elementData, faça isso você mesmo. O código está funcionando perfeitamente. Edited October 3, 2020 by andreisrw 1 Link to comment
WeeD1 Posted October 3, 2020 Author Share Posted October 3, 2020 Funcionou sim, obrigado 31 minutes ago, andreisrw said: function whenClick(button, state, _, _, _, _, _, clickedElement) local isLeft = button == "left" local isUp = state == "up" if isLeft and isUp then local object = clickedElement if isElement(object) and getElementType(object) == "object" then outputChatBox(getElementModel(object)) end end end addEventHandler("onClientClick", root, whenClick) Código testado. Não é necessário verificar se a pessoa que clicou é um jogador, pois apenas um jogador pode clicar. Então é sem sentido. Apenas não adicionei aquela elementData, faça isso você mesmo. O código está funcionando perfeitamente. Só mais uma dúvida, o destroyElement funciona em client-side? (Não achei no Wiki sobre), pois tentei adicionar ele ao script, e não funcionou. (Sem erro no debugscript) Se não funcionar, tem alguma forma de eu excluir o objeto sendo client-side? Link to comment
Other Languages Moderators androksi Posted October 3, 2020 Other Languages Moderators Share Posted October 3, 2020 Você pode sim. Invés de adicionar o destroyElement diretamente, faça um trigger para o server-side, e destrua-o lá. Spoiler -- Client-side function whenClick(button, state, _, _, _, _, _, clickedElement) local isLeft = button == "left" local isUp = state == "up" if isLeft and isUp then local object = clickedElement if isElement(object) and getElementType(object) == "object" then triggerServerEvent("click:destroyObject", resourceRoot, object) end end end addEventHandler("onClientClick", root, whenClick) -- Server-side addEvent("click:destroyObject", true) addEventHandler("click:destroyObject", resourceRoot, function(object) destroyElement(object) outputChatBox("Você removeu um objeto.", client, 0, 255, 0) end) NOTA: Apenas objetos que foram criados em determinado lado, podem ser removidos. Objetos criados em client-side, só podem ser manuseados client-side, e vice-versa. Porém, isso não te impede de manuseá-los através de trigger. Posso estar enganado sobre, estou apenas relatando o que aconteceu comigo a algum tempo atrás. 1 Link to comment
WeeD1 Posted October 3, 2020 Author Share Posted October 3, 2020 Ahh sim, valeu. ajudou demais 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