WeeD1 Posted October 3, 2020 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
Other Languages Moderators androksi Posted October 3, 2020 Other Languages Moderators 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
WeeD1 Posted October 3, 2020 Author 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)
Other Languages Moderators androksi Posted October 3, 2020 Other Languages Moderators 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
WeeD1 Posted October 3, 2020 Author 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?
Other Languages Moderators androksi Posted October 3, 2020 Other Languages Moderators 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
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