Jump to content

Gustavo Freire

Members
  • Posts

    22
  • Joined

  • Last visited

Details

  • Location
    Brazil

Recent Profile Visitors

630 profile views

Gustavo Freire's Achievements

Civilian

Civilian (7/54)

3

Reputation

  1. -- 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.
  2. Erro meu, coloca uma vírgula na frente do 'parentElement'. local markerStorage = { ['parentElement'] = createElement( 'marker.parent' ), ['markerData'] = { } }
  3. 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.
  4. -- 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.
  5. -- 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.
  6. Olá, o evento onClientVehicleExit só está disponível no client-side, como este script é server-side você terá que usar o evento onVehicleExit.
  7. 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
  8. 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
  9. Muito obrigado pela ajuda, realmente foi erro meu. Problema resolvido!
  10. 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!
  11. 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
  12. 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)
  13. 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)
  14. 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.
  15. 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 <:)
×
×
  • Create New...