-
Posts
22 -
Joined
-
Last visited
Details
-
Location
Brazil
Recent Profile Visitors
630 profile views
Gustavo Freire's Achievements
Civilian (7/54)
3
Reputation
-
Gustavo Freire changed their profile photo
-
Fiz esse codigo cheio de gambiarra me ajuda
Gustavo Freire replied to Doongogar's topic in Programação em Lua
-- tabela com a posição dos markers local markers = { { pos = { 505.2783203125, -1340.4423828125, 15.9609375 }, -- XYZ int = 0, -- Interior -> padrão 0 dim = 0 -- Dimensão -> padrão 0 }, } -- aqui criamos um element pai, isso servirá para que não precisemos adicionar um evento pra cara marker local markerStorage = { ['parentElement'] = createElement( 'marker.parent' ), ['markerData'] = { } } -- armazena as bikes alugadas local rentStorage = { } -- desconta o dinheiro do jogador local getPay = function( value, thePlayer ) local validValue = value and tonumber( value ) and value > 0 if not validValue then return false end local playerMoney = getPlayerMoney( thePlayer ) or 0 if playerMoney < value then return false end return takePlayerMoney( thePlayer, tonumber( value ) ) end local isElementWithinRentMarker = function( thePlayer ) for i, _ in pairs( markerStorage['markerData'] ) do if isElementWithinMarker( thePlayer, i ) then return true end end return false end -- verifica se o player tem uma bike, se tiver ele destroi a bike e retorna true local verifyAndDestroyRentVehicle = function( thePlayer ) -- verifica se a pessoa tem uma bike alugada if rentStorage[ thePlayer ] then -- verifica se a bike existe if isElement( rentStorage[ thePlayer ] ) then -- destrói a bike destroyElement( rentStorage[ thePlayer ] ) end -- zera a tabela rentStorage[ thePlayer ] = nil return true end return false end -- mensagem para quando alguém entrar no marker local markerOutputMessage = function( hit, dim ) local isValidElement = isElement( hit ) and getElementType( hit ) == 'player' if not isValidElement then return end local isElementInVehicle = getPedOccupiedVehicle( hit ) if isElementInVehicle then outputChatBox( 'Você precisa estar fora de um veículo para alugar uma bicicleta.', hit, 255, 255, 255 ) return end outputChatBox( 'Digite /alugarbike para alugar a bike', hit, 0, 255, 0 ) end -- comando de alugar a bike addCommandHandler( 'alugarbike', function( thePlayer ) -- verifica se o jogador está em um dos markeres de aluguel local isElementInMarker = isElementWithinRentMarker( thePlayer ) -- verifica se o jogador está em um veículo local isElementInVehicle = getPedOccupiedVehicle( thePlayer ) -- caso alguma das verificações seja verdadeira ele cancela a execução if not isElementInMarker or isElementInVehicle then return end -- destrói a bike caso o jogador já tenha uma if verifyAndDestroyRentVehicle( thePlayer ) then return end -- cobra o dinheiro do jogador local payment = getPay( 50, thePlayer ) or false -- verifica se o jogador tem dinheiro suficiente/se o pagamento foi feito if not payment then outputChatBox( '#FFFFFFAlgo deu errado com seu pagamento, verifique se você tem a quantia necessária para alugar uma bike', thePlayer, 255, 255, 255, true ) return end -- pega posição do jogador local playerPosX, playerPosY, playerZ = getElementPosition( thePlayer ) -- pega dimensão e o interior do marker local dim, int = markerStorage['markerData']['dim'] or 0, markerStorage['markerData']['int'] or 0 -- cria a bike e armazena na tabela rentStorage[ thePlayer ] = createVehicle( 510, playerPosX, playerPosY, playerZ ) -- seta o interior e a dimensão da bike setElementDimension( rentStorage[ thePlayer ], dim ) setElementInterior( rentStorage[ thePlayer ], int ) -- teleporta o jogador pra dentro da bike warpPedIntoVehicle( thePlayer, rentStorage[ thePlayer ] ) end) -- esse evento será chamado sempre que o resource ligar addEventHandler( 'onResourceStart', resourceRoot, function( ) -- fazemos um loop na tabela com as posições dos markers for i, v in ipairs( markers ) do -- cria o marker local marker = createMarker( v.pos[1], v.pos[2], v.pos[3], 'cylinder', 1, 255, 0, 0, 150 ) -- criamos o marker -- setamos o interior e a dimensão do marker setElementInterior( marker, v.int ) setElementDimension( marker, v.dim ) -- setamos o marker como elemento filho do elemento pai que criamos acima setElementParent( marker, markerStorage['parentElement'] ) -- armazenamos alguns dados do marker markerStorage['markerData'][ marker ] = { ['markerElement'] = marker, ['int'] = v.int, ['dim'] = v.dim } end addEventHandler('onMarkerHit', markerStorage['parentElement'], markerOutputMessage) end) -- esse evento será chamado sempre que alguém sair de um veículo addEventHandler( 'onVehicleExit', root, function( thePlayer ) verifyAndDestroyRentVehicle( thePlayer ) end) -- esse evento é chamado sempre que alguém sair do servidor addEventHandler( 'onPlayerQuit', root, function( ) verifyAndDestroyRentVehicle( source ) end) Não sei o que foi que eu fiz que mandei a versão com erro pra vc ao invés da corrigida, mas agora sim, aqui está a correta. -
Fiz esse codigo cheio de gambiarra me ajuda
Gustavo Freire replied to Doongogar's topic in Programação em Lua
Erro meu, coloca uma vírgula na frente do 'parentElement'. local markerStorage = { ['parentElement'] = createElement( 'marker.parent' ), ['markerData'] = { } } -
Fiz esse codigo cheio de gambiarra me ajuda
Gustavo Freire replied to Doongogar's topic in Programação em Lua
local markers = { { pos = { 0, 0, 0 }, -- XYZ int = 0, -- Interior -> padrão 0 dim = 0 -- Dimensão -> padrão 0 }, { pos = { 0, 0, 0 }, -- XYZ int = 0, -- Interior -> padrão 0 dim = 0 -- Dimensão -> padrão 0 }, { pos = { 0, 0, 0 }, -- XYZ int = 0, -- Interior -> padrão 0 dim = 0 -- Dimensão -> padrão 0 }, { pos = { 0, 0, 0 }, -- XYZ int = 0, -- Interior -> padrão 0 dim = 0 -- Dimensão -> padrão 0 }, } Pra adicionar novos locais faça desse jeito. -
Fiz esse codigo cheio de gambiarra me ajuda
Gustavo Freire replied to Doongogar's topic in Programação em Lua
-- tabela com a posição dos markers local markers = { { pos = { 0, 0, 0 }, -- XYZ int = 0, -- Interior -> padrão 0 dim = 0 -- Dimensão -> padrão 0 }, } -- aqui criamos um element pai, isso servirá para que não precisemos adicionar um evento pra cara marker local markerStorage = { ['parentElement'] = createElement( 'marker.parent' ) ['markerData'] = { } } -- armazena as bikes alugadas local rentStorage = { } -- desconta o dinheiro do jogador local getPay = function( value, thePlayer ) local validValue = value and tonumber( value ) and value > 0 if not validValue then return false end local playerMoney = getPlayerMoney( thePlayer ) or 0 if playerMoney < value then return false end return takePlayerMoney( thePlayer, tonumber( value ) ) end -- verifica se o player tem uma bike, se tiver ele destroi a bike e retorna true local verifyAndDestroyRentVehicle = function( thePlayer ) -- verifica se a pessoa tem uma bike alugada if rentStorage[ thePlayer ] then -- verifica se a bike existe if isElement( rentStorage[ thePlayer ] ) then -- destrói a bike destroyElement( rentStorage[ thePlayer ] ) end -- zera a tabela rentStorage[ thePlayer ] = nil return true end return false end -- mensagem para quando alguém entrar no marker local markerOutputMessage = function( hit, dim ) local isValidElement = isElement( hit ) and getElementType( hit ) == 'player' local isElementInVehicle = getPedOccupiedVehicle( thePlayer ) if not isValidElement or not isElementInVehicle then return end outputChatBox( 'Digite /alugarbike para alugar a bike', hit, 0, 255, 0 ) end -- comando de alugar a bike addCommandHandler( 'alugarbike', function( thePlayer ) -- verifica se o jogador está em um dos markeres de aluguel local isElementInMarker = isElementWithinMarker( thePlayer, markerStorage['parentElement'] ) -- verifica se o jogador está em um veículo local isElementInVehicle = getPedOccupiedVehicle( thePlayer ) -- caso alguma das verificações seja verdadeira ele cancela a execução if not isElementInMarker or not isElementInVehicle then return end -- destrói a bike caso o jogador já tenha uma if verifyAndDestroyRentVehicle( thePlayer ) then return end -- cobra o dinheiro do jogador local payment = getPay( 50, thePlayer ) or false -- verifica se o jogador tem dinheiro suficiente/se o pagamento foi feito if not payment then outputChatBox( '#FFFFFFAlgo deu errado com seu pagamento, verifique se você tem a quantia necessária para alugar uma bike', thePlayer, 255, 255, 255, true ) return end -- pega posição do jogador local playerPosX, playerPosY, playerZ = getElementPosition( thePlayer ) -- pega dimensão e o interior do marker local dim, int = markerStorage['markerData']['dim'] or 0, markerStorage['markerData']['int'] or 0 -- cria a bike e armazena na tabela rentStorage[ thePlayer ] = createVehicle( 510, playerPosX, playerPosY, playerZ ) -- seta o interior e a dimensão da bike setElementDimension( rentStorage[ thePlayer ], dim ) setElementInterior( rentStorage[ thePlayer ], int ) -- teleporta o jogador pra dentro da bike warpPedIntoVehicle( thePlayer, rentStorage[ thePlayer ] ) end) -- esse evento será chamado sempre que o resource ligar addEventHandler( 'onResourceStart', resourceRoot, function( ) -- fazemos um loop na tabela com as posições dos markers for i, v in ipairs( markers ) do -- cria o marker local marker = createMarker( v.pos[1], v.pos[2], v.pos[3], 'cylinder', 1, 255, 0, 0, 150 ) -- criamos o marker -- setamos o interior e a dimensão do marker setElementInterior( marker, v.int ) setElementDimension( marker, v.dim ) -- setamos o marker como elemento filho do elemento pai que criamos acima setElementParent( marker, markerStorage['parentElement'] ) -- armazenamos alguns dados do marker markerStorage['markerData'][ marker ] = { ['markerElement'] = marker, ['int'] = v.int, ['dim'] = v.dim } end addEventHandler('onMarkerHit', markerStorage['parentElement'], markerOutputMessage) end) -- esse evento será chamado sempre que alguém sair de um veículo addEventHandler( 'onVehicleExit', root, function( thePlayer ) verifyAndDestroyRentVehicle( thePlayer ) end) -- esse evento é chamado sempre que alguém sair do servidor addEventHandler( 'onPlayerQuit', root, function( ) verifyAndDestroyRentVehicle( source ) end) Corrigi o erro. -
Fiz esse codigo cheio de gambiarra me ajuda
Gustavo Freire replied to Doongogar's topic in Programação em Lua
-- tabela com a posição dos markers local markers = { { pos = { 0, 0, 0 }, -- XYZ int = 0, -- Interior -> padrão 0 dim = 0 -- Dimensão -> padrão 0 } } -- aqui criamos um element pai, isso servirá para que não precisemos adicionar um evento pra cara marker local markerStorage = { ['parentElement'] = createElement( 'marker.parent' ) ['markerData'] = { } } -- armazena as bikes alugadas local rentStorage = { } -- desconta o dinheiro do jogador local getPay = function( value, thePlayer ) local validValue = value and tonumber( value ) and value > 0 if not validValue then return false end local playerMoney = getPlayerMoney( thePlayer ) or 0 if playerMoney < value then return false end return takePlayerMoney( thePlayer, tonumber( value ) ) end -- verifica se o player tem uma bike, se tiver ele destroi a bike e retorna true local verifyAndDestroyRentVehicle = function( thePlayer ) -- verifica se a pessoa tem uma bike alugada if rentStorage[ thePlayer ] then -- verifica se a bike existe if isElement( rentStorage[ thePlayer ] ) then -- destrói a bike destroyElement( rentStorage[ thePlayer ] ) end -- zera a tabela rentStorage[ thePlayer ] = nil return true end return false end -- mensagem para quando alguém entrar no marker local markerOutputMessage = function( hit, dim ) local isValidElement = isElement( hit ) and getElementType( hit ) == 'player' local isElementInVehicle = getPedOccupiedVehicle( thePlayer ) if not isValidElement or not isElementInVehicle then return end outputChatBox( 'Digite /alugarbike para alugar a bike', hit, 0, 255, 0 ) end -- comando de alugar a bike addCommandHandler( 'alugarbike', function( thePlayer ) -- verifica se o jogador está em um dos markeres de aluguel local isElementInMarker = isElementWithinMarker( thePlayer, markerStorage['parentElement'] ) -- verifica se o jogador está em um veículo local isElementInVehicle = getPedOccupiedVehicle( thePlayer ) -- caso alguma das verificações seja verdadeira ele cancela a execução if not isElementInMarker or not isElementInVehicle then return end -- destrói a bike caso o jogador já tenha uma if verifyAndDestroyRentVehicle( thePlayer ) then return end -- cobra o dinheiro do jogador local payment = getPay( 50, thePlayer ) or false -- verifica se o jogador tem dinheiro suficiente/se o pagamento foi feito if not payment then outputChatBox( '#FFFFFFAlgo deu errado com seu pagamento, verifique se você tem a quantia necessária para alugar uma bike', thePlayer, 255, 255, 255, true ) return end -- pega posição do jogador local playerPosX, playerPosY, playerZ = getElementPosition( thePlayer ) -- pega dimensão e o interior do marker local dim, int = markerStorage['markerData']['dim'] or 0, markerStorage['markerData']['int'] or 0 -- cria a bike e armazena na tabela rentStorage[ thePlayer ] = createVehicle( 510, playerPosX, playerPosY, playerZ ) -- seta o interior e a dimensão da bike setElementDimension( rentStorage[ thePlayer ], dim ) setElementInterior( rentStorage[ thePlayer ], int ) -- teleporta o jogador pra dentro da bike warpPedIntoVehicle( thePlayer, rentStorage[ thePlayer ] ) end) -- esse evento será chamado sempre que o resource ligar addEventHandler( 'onResourceStart', resourceRoot, function( ) -- fazemos um loop na tabela com as posições dos markers for i, v in ipairs( markers ) do -- cria o marker local marker = createMarker( v.pos[1], v.pos[2], v.pos[3], 'cylinder', 1, 255, 0, 0, 150 ) -- criamos o marker -- setamos o interior e a dimensão do marker setElementInterior( marker, v.int ) setElementDimension( marker, v.dim ) -- setamos o marker como elemento filho do elemento pai que criamos acima setElementParent( marker, markerStorage['parentElement'] ) -- armazenamos alguns dados do marker markerStorage['markerData'][ marker ] = { ['markerElement'] = marker, ['int'] = v.int, ['dim'] = v.dim } end addEventHandler('onMarkerHit', markerStorage['parentElement'], markerOutputMessage) end) -- esse evento será chamado sempre que alguém sair de um veículo addEventHandler( 'onVehicleExit', root, function( thePlayer ) verifyAndDestroyRentVehicle( thePlayer ) end) -- esse evento é chamado sempre que alguém sair do servidor addEventHandler( 'onPlayerQuit', root, function( ) verifyAndDestroyRentVehicle( source ) end) Fiz este código aqui, não testei, por isso pode ser que tenha algo errado. Recomendo que estude como funciona, tentei deixar o mais comentado possível pra facilitar sua compreensão. -
Gustavo Freire started following androksi
-
Olá, o evento onClientVehicleExit só está disponível no client-side, como este script é server-side você terá que usar o evento onVehicleExit.
- 4 replies
-
- brasil
- portuguese
-
(and 1 more)
Tagged with:
-
Como faço um objeto ficar girando?
Gustavo Freire replied to SlipModsModerator's topic in Programação em Lua
Olá, você precisa usar algum recurso para repetir este código. Ali no exemplo do Androksi ele utilizou o onClientPreRender. Segue abaixo um exemplo de como esse seu código deveria ser para funcionar da maneira que você quer. local object = false -- variável que armazenará o objeto ou o valor `false` para a verificação do comando local objectRotation = 0 -- rotação inicial do objeto local object_id = 1337 -- id do objeto que será criado local rotObject = function( ) -- função de rotação do objeto local pX, pY, pZ = getElementPosition( localPlayer ) setElementPosition( object, pX, pY, pZ + 1 ) -- seta a posição do objeto para cima do player setElementRotation( object, 0, 0, objectRotation ) -- seta a rotação do objeto objectRotation = objectRotation + 1 -- aumenta a rotação do objeto if objectRotation >= 360 then -- verifica se a rotação chegou ao fim e reinicia objectRotation = 0 end end local cdObject = function( ) -- cria e destroy o objeto if not object then local pX, pY, pZ = getElementPosition( localPlayer ) -- pega posição do jogador object = createObject( object_id, pX, pY, pZ ) -- cria o objeto na posição do jogador if object then addEventHandler( 'onClientPreRender', root, rotObject ) -- adiciona o evento de render end else if isElement( object ) then removeEventHandler( 'onClientPreRender', root, rotObject ) -- remove o evento de render destroyElement( object ) -- destroi o objeto object = false -- define a variável que armazena o objeto para false end end end addCommandHandler( 'objeto', cdObject ) -- adiciona o comando -
local mrk = createMarker(-2420.59448, -608.15979, 131.56250, "cylinder", 1.6, 255,0,0, 40) addEventHandler("onClientKey", getRootElement(), function(button, press) if isElementWithinMarker( source, mrk ) then if button == "F1" or "F3" then cancelEvent() end end end) Não testei mas veja se funciona
-
Muito obrigado pela ajuda, realmente foi erro meu. Problema resolvido!
-
Estou desenvolvendo um resource de assalto a lojinha que utiliza tabelas para criar os markers que vão dentro das lojinhas, porém me deparei com um problema no desenvolvimento, ao usar o isElementWithinMarker ele só me permite assaltar no último marker criado, tentei resolver isso de diversas formas mas todas obtive o mesmo problema --< server-side > function startAssaltoGF(source) if isElement(source) then if estaNoMarkerGF(source) == true then if isGuestAccount(getPlayerAccount(source)) then outputChatBox("#cd4747[ERRO]:#ffffffVocê deve estar logado para assaltar uma loja", source, 255, 255, 255, true) else outputChatBox("#cd4747[INFO]:#ffffffIniciando assalto.", source, 255, 255, 255, true) setPedAnimation(source, "bomber", "bom_plant", -1, true, false, true) toggleAllControls(source, false) setTimer( function() givePlayerMoney(source, 1000) outputChatBox("Você recebeu o dinheiro", source, 255, 255, 255, true) toggleAllControls(source, true) setPedAnimation(source, nil) end, 10000, 1) end end end end local marker = {} for i, v in ipairs(configLojinhaGF.pos) do marker[i] = createMarker(v[1], v[2], v[3]-1, "cylinder", 1.5, 255, 0, 0, 50) addEventHandler("onMarkerHit", marker[i], mostrarAssaltoGF) addEventHandler("onMarkerLeave", marker[i], tirarAssaltoGF) function estaNoMarkerGF(element) if isElement(element) then if isElementWithinMarker(element, marker[i]) then return true else return false end end end end --< shared-side/config> configLojinhaGF = { pos = { {-2499.488, -617.549, 132.563}, {-2499.318, -612.605, 132.563}, }, } obs: já tentei colocar a function do assalto dentro do for com: isElementWithinMarker(source, marker[i]) porém obtive o mesmo resultado. Desde já obrigado pela atenção!
-
local gate = createObject (16775, 2532, -1514.5999755859, 27.10000038147, 0, 0, 0) local marker = createMarker (2532, -1514.5999755859, 27.10000038147, "cylinder", 8, 0, 0, 0, 0) function moveGate (thePlayer) local accName = getAccountName ( getPlayerAccount ( thePlayer ) ) if isObjectInACLGroup ("user."..accName, aclGetGroup ( "CV" ) ) then moveObject(gate, 1900, 2532, -1.514,5999755859, 18,89999961853) end end addEventHandler ( "onMarkerHit", root, moveGate ) function move_back_gate () moveObject(gate, 1900, 2532, -1514.5999755859, 27.10000038147, 0, 0, 0) end addEventHandler ("onMarkerLeave", root, move_back_gate) tenta isso, lembrando que você deve estar na acl CV
-
O código que você postou foi traduzido para português dificultando a te ajudar mas tenta isso: local gate = createObject (16775, 2532, -1514.5999755859, 27.10000038147, 0, 0, 0) local marker = createMarker (2532, -1514.5999755859, 27.10000038147, "cylinder", 8, 0, 0, 0, 0) function moveGate (thePlayer) local accName = getAccountName ( getPlayerAccount ( thePlayer ) ) if isObjectInACLGroup ("user."..accName, aclGetGroup ( "CV" ) ) then Moveobject (gate, 1900, 2532, -1.514,5999755859, 18,89999961853) end end addEventHandler ( "onMarkerHit", root, moveGate ) function move_back_gate () moveObject (gate, 1900, 2532, -1514.5999755859, 27.10000038147, 0, 0, 0) end addEventHandler ("onMarkerLeave", root, move_back_gate)
-
A um tempo atrás experimentei fazer um script de copom para policiais, porém como não tinha funcionado deixei a idéia de lado e hoje resolvi tentar pedir ajuda aqui. Ele até funciona mas não da maneira correta, gostaria que quando apertasse o 'capslock' e falasse mandasse a voz ao copom e ao soltar ele fosse desativado, mas da maneira que fiz é necessário pressionar para ativar/desativar. Desde já muito obrigado! Edit: não sei se este script que mandei está funcionando, pois estava testando e deixei a idéia de lado -- CLIENT-SIDE addEventHandler("onClientKey",getRootElement(), function(btn, press) if btn == "capslock" then if (press) and exports.Admin:isPlayerDuty(localPlayer) then if getElementData(localPlayer,"inCall") == false then triggerServerEvent("Enable->radinho",localPlayer,localPlayer) setElementData(localPlayer,"inCall",true) outputChatBox("#cd4747[BCO- COPOM]:#ffffff COPOM ATIVADO!",255,255,255,true) else outputChatBox("#cd4747[BCO- COPOM]:#ffffff COPOM DESATIVADO",255,255,255,true) setElementData(localPlayer,"inCall",false) end end end end) --SERVER-SIDE addEvent("Enable->radinho", true) addEventHandler("Enable->radinho", root, function(thePlayer) if getElementData(thePlayer,"inCall") == true then local empty = exports.bco_voice:getNextEmptyChannel() exports.bco_voice:setPlayerChannel(thePlayer, empty) setPlayerVoiceBroadcastTo( thePlayer, root ) else exports.bco_voice:setPlayerChannel ( thePlayer, 100 ) end end)
-
PROBLEMA COM BANCO DE DADOS (ME AJUDEM POR FAVOR)
Gustavo Freire replied to Rakashy's topic in Programação em Lua
No seu vídeo dá pra ver que quando ele salva o item ele deixa a parte 'item_owner' como NULL, ou seja, ele está salvando um item mas não está atribuindo um dono, por favor mande o código do inventário para facilitar a ajuda. -
Este mod foi removido de um backup que não usa o dinheiro nativo do mta, como por exemplo o: givePlayerMoney(player, 1000) O que você deve fazer é adaptar esse script para o dinheiro nativo do mta. Tente usar isto: function buyItem(player, item, value, amount, count, db) local money = getPlayerMoney(player) if (money >= amount) then exports.inventario:giveItem(player, item, value, db, 0) takePlayerMoney(player, amount) exports["info"]:showBoxS(player,"Compra efetuada com sucesso","info") else exports["info"]:showBoxS(player,"Dinheiro insuficiente","error") end end addEvent("addItem", true) addEventHandler("addItem", getRootElement(), buyItem) desculpa se não estiver funcionando, ainda tenho muito o que aprender <:)