#DaNiLiN Posted August 7, 2018 Share Posted August 7, 2018 Eu Estou querendo desenvolver um sistema que e bem usado no samp, no caso seria assim. Um Pickup que ficaria estocado dinheiro porém que daria pra pega esse dinheiro usando comando e esse dinheiro regenerar dnv depois de um tempo mais nunca mechi com algo do tipo alguem sabe me dizer do que eu precisaria para fazer algo igual ou do tipo? Link to comment
[M]ister Posted August 8, 2018 Share Posted August 8, 2018 (edited) Segue exemplo: local x,y,z = 0,0,0 --- coloque a posição do pickup aqui local dinheiroPorSegundos = 1 local tempo = getRealTime().timestamp local pickup = createPickup(x, y, z, 3, 1274, 1000) local playerPickup = {} addEventHandler("onPickupHit", pickup, function(player) playerPickup[player] = true outputChatBox("*Digite /pegar para obter os $"..obterDinheiroPickup().." acumulados neste local",player) end ) addEventHandler( "onPickupLeave", pickup, function(player) if playerPickup[player] then playerPickup[player] = nil end end ) addEventHandler ( "onPlayerQuit", root, function() if playerPickup[source] then playerPickup[source] = nil end end ) addCommandHandler("pegar", function(player) if playerPickup[player] then givePlayerMoney(player,obterDinheiroPickup()) tempo = getRealTime().timestamp end end ) function obterDinheiroPickup() return (getRealTime().timestamp - tempo)*dinheiroPorSegundos end A cada segundo o pickup acumula + 1$ e quando alguém pega o dinheiro esse valor é zerado e continua acumulando novamente... Ficaria bem mais minimizado o código se fosse utilizado onPickupUse no lugar do comando para pegar o dinheiro do pickup. Edited August 8, 2018 by MaligNos 1 Link to comment
#DaNiLiN Posted August 8, 2018 Author Share Posted August 8, 2018 teria alguma forma de limitar? quando chega aos 10K Parasse de acumular? :\ Link to comment
Other Languages Moderators Lord Henry Posted August 8, 2018 Other Languages Moderators Share Posted August 8, 2018 (edited) 2 hours ago, danilin said: teria alguma forma de limitar? quando chega aos 10K Parasse de acumular? :\ function obterDinheiroPickup() local grana = (getRealTime().timestamp - tempo)*dinheiroPorSegundos -- Calcula a quantidade de grana acumulada com base no tempo real. if grana >= 10000 then -- Se a grana acumulada for maior ou igual a 10 mil, então: grana = 10000 -- A grana acumulada é igual a 10 mil. end return grana -- Essa função retorna a grana acumulada, que nunca será mais que 10 mil. end Tente isso nessa função. Edited August 8, 2018 by Lord Henry Correção de indentação. 1 Link to comment
#DaNiLiN Posted August 9, 2018 Author Share Posted August 9, 2018 addCommandHandler("pegar", function (player, pColShape, pElement) if playerPickup[player] then givePlayerMoney(player, obterDinheiroPickup()) tempo = getRealTime().timestamp local pickup = createObject( 1550, fX, fY, fZ ); local fX, fY, fZ = getElementPosition( pColShape ); exports.bone_attach:attachElementToBone( pickup, pElement, 4, 0, 0.4, - -0.4, -90, 40, 0 ); end end) addEventHandler("onPickupHit", pickup, Estou tendo poblema em criar o objeto nas costas do jogador, na linha 6, 7, 8 mais porém quando eu digito /pegar o objeto e criado e da WARNING na linha 7 qual seria o poblema? utilizei do modo errado? On 08/08/2018 at 14:05, Lord Henry said: function obterDinheiroPickup() local grana = (getRealTime().timestamp - tempo)*dinheiroPorSegundos -- Calcula a quantidade de grana acumulada com base no tempo real. if grana >= 10000 then -- Se a grana acumulada for maior ou igual a 10 mil, então: grana = 10000 -- A grana acumulada é igual a 10 mil. end return grana -- Essa função retorna a grana acumulada, que nunca será mais que 10 mil. end Tente isso nessa função. Link to comment
Other Languages Moderators Lord Henry Posted August 10, 2018 Other Languages Moderators Share Posted August 10, 2018 (edited) 15 hours ago, danilin said: Estou tendo poblema em criar o objeto nas costas do jogador, na linha 6, 7, 8 mais porém quando eu digito /pegar o objeto e criado e da WARNING na linha 7 qual seria o poblema? utilizei do modo errado? Sim, você fez bem errado. Vc declarou as variáveis fX, fY e fZ depois de usá-las no createPickup. Você deve declará-las antes, caso contrário o script vai dizer que elas não existem. Além disso, vc está tentando pegar a posição de pColShape, mas isso não é um elemento. E já falei pra vc parar de usar palavras reservadas para dar nome às coisas. (pickup e player.) Em vez disso, use thePickup e thePlayer. Edited August 10, 2018 by Lord Henry 1 Link to comment
#DaNiLiN Posted August 10, 2018 Author Share Posted August 10, 2018 local Cifrao = createPickup( -2180.62329, -232.94133, 36.77124, 3, 1550, 1000); local fX, fY, fZ = getElementPosition( Cifrao ); local pColShapeGetBox = createColSphere( fX, fY, fZ, 2 ); addEventHandler( "onColShapeHit", pColShapeGetBox, function( thePlayer ) setPedAnimation(player, "ROB_BANK", "CAT_Safe_Rob",-1, true, false, false) setTimer( function( thePlayer, pColShape ) setPedAnimation( thePlayer, nil ); local fX, fY, fZ = getElementPosition( pColShape ); local ObjP = createObject( 1550, fX, fY, fZ ); exports.bone_attach:attachElementToBone( ObjP, thePlayer, 4, 0, 0.4, - -0.4, -90, 40, 0 ); end, 1000,1, thePlayer, source ) end) neste código funciona normalmente a bolsa etc, mas e direto como pode ver, e estou com dificuldade para adicionar addCommandHandler quando eu o adiciono na função ai da aquele WARNING na linha 11 e 12; Link to comment
Other Languages Moderators Lord Henry Posted August 10, 2018 Other Languages Moderators Share Posted August 10, 2018 Os parâmetros de função do addCommandHandler são respectivamente: Player que executou o comando. (elemento) [Se o script for server-side] Comando utilizado. (texto) Texto 1 após o comando. (texto) Texto 2 após o comando. (texto) E assim por diante. Estude seu script e comente cada linha dele para saber como ele funciona, dessa forma: local cifrao = createPickup (-2180.62329, -232.94133, 36.77124, 3, 1550, 1000) -- Cria um pickup personalizado, com o modelo 1550 que respawna após 1 segundo. local fX, fY, fZ = getElementPosition (cifrao) -- fX, fY e fZ recebem as coordenadas do pickup. -- local pColShapeGetBox = createColSphere (fX, fY, fZ, 2) -- Nulo, é só usar onPickupHit. addEventHandler ("onPickupHit", cifrao, function (thePlayer) -- Executa essa função quando alguém colide no pickup cifrao. setPedAnimation (thePlayer, "ROB_BANK", "CAT_Safe_Rob", -1, true, false, false) -- Faz o player executar essa animação. local objPick = createObject (1550, fX, fY, fZ) -- Cria a bolsa de dinheiro. setTimer (function (thePlayer) -- Após 1 segundo: setPedAnimation (thePlayer, nil) -- Para a animação. exports.bone_attach:attachElementToBone (objPick, thePlayer, 4, -0.3, 0.2, 0, -125, 0, 0) -- Anexa a bolsa nas costas do player. (Não precisa colocar ; no fim de cada linha.) end, 1000, 1, thePlayer) end) 1 Link to comment
[M]ister Posted August 10, 2018 Share Posted August 10, 2018 6 hours ago, Lord Henry said: [...] E já falei pra vc parar de usar palavras reservadas para dar nome às coisas. (pickup e player.) Em vez disso, use thePickup e thePlayer. Eu não creio que as palavras (player, vehicle, object, pickup, marker, blip...) sejam palavras reservadas! Se fossem, qual é a utilidade/funcionalidade delas ? eu não consigo pensar em nenhuma, possivelmente a coloração "diferente" que é definida no editor de texto do fórum seja para destacar tais "tipos" de elementos/entidades. Talvez essas palavras pudessem ser objetos na programação orientada a objeto, mas dei uma olhada e a nomenclatura deles começam com letra maiúscula, sendo assim, Vehicle é diferente de vehicle Vehicle.create(411, 0, 0, 3) -- ok vehicle.create(411, 0, 0, 3) -- fail Por favor, me esclareça se eu estiver errado, pois sempre fui acostumado a usar essas palavras... 1 1 Link to comment
Other Languages Moderators Lord Henry Posted August 10, 2018 Other Languages Moderators Share Posted August 10, 2018 24 minutes ago, MaligNos said: Eu não creio que as palavras (player, vehicle, object, pickup, marker, blip...) sejam palavras reservadas! Se fossem, qual é a utilidade/funcionalidade delas ? eu não consigo pensar em nenhuma, possivelmente a coloração "diferente" que é definida no editor de texto do fórum seja para destacar tais "tipos" de elementos/entidades. Talvez essas palavras pudessem ser objetos na programação orientada a objeto, mas dei uma olhada e a nomenclatura deles começam com letra maiúscula, sendo assim, Vehicle é diferente de vehicle Por favor, me esclareça se eu estiver errado, pois sempre fui acostumado a usar essas palavras... Realmente, não são reservadas... Chamar assim foi equívoco meu. São nomes de entidades utilizadas pelos arquivos XML do MTA, por exemplo arquivos .map para que seja possível obtê-los do XML para usar diretamente em um script. De fato, se for em script isolado sem XML envolvido, creio que não há problema. Mas isso se torna um vício de programação e vícios devem ser evitados. Honestamente não sei o real motivo de se evitar seu uso em variáveis ou parâmetros, mas os exemplos da Wiki sempre evitam. <vehicle id="vehicle (Patriot) (1)" sirens="false" paintjob="3" interior="0" alpha="255" model="470" plate="IPA0VWH" dimension="0" color="95,10,21,0,0,0,0,0,0,0,0,0" posX="2160.6001" posY="-2281" posZ="13.6" rotX="0" rotY="0" rotZ="225"></vehicle> 1 1 Link to comment
[M]ister Posted August 10, 2018 Share Posted August 10, 2018 Acho que até com XML envolvido não tenha problema, pois via scripting essas entidades são tratadas como "string": getElementsByType ( "vehicle" ) Enfim, talvez até tenha um motivo maior, mas como você mesmo disse, já se tornou um "vício de programação" para mim kkkk, dificilmente vou abandonar o uso desses nomes em variáveis Link to comment
Other Languages Moderators Lord Henry Posted August 10, 2018 Other Languages Moderators Share Posted August 10, 2018 Criei um tópico na sessão internacional perguntando o motivo da Wiki sempre evitar usar os nomes das entidades nas variáveis. Espero que eles não me ignorem. (como sempre fazem) 1 1 Link to comment
[M]ister Posted August 10, 2018 Share Posted August 10, 2018 2 minutes ago, Lord Henry said: Criei um tópico na sessão internacional perguntando o motivo da Wiki sempre evitar usar os nomes das entidades nas variáveis. Espero que eles não me ignorem. (como sempre fazem) Boa! Irei tentar acompanhar lá também (tomara que não lhe ignorem kk) 1 Link to comment
#DaNiLiN Posted August 10, 2018 Author Share Posted August 10, 2018 Vocês dois são foda, consegui fazer oque planejava, obrigado mais uma vez Link to comment
#DaNiLiN Posted August 10, 2018 Author Share Posted August 10, 2018 Ops mais uma dúvida, como eu faço para que a quantidade de dinheiro do cifrão aparece na frente do cifrão? sendo que o Dx funciona pelo lado do cliente? Link to comment
Other Languages Moderators Lord Henry Posted August 10, 2018 Other Languages Moderators Share Posted August 10, 2018 (edited) 20 minutes ago, danilin said: Ops mais uma dúvida, como eu faço para que a quantidade de dinheiro do cifrão aparece na frente do cifrão? sendo que o Dx funciona pelo lado do cliente? É mais fácil criar o cifrão inteiro client-side e usar um triggerServerEvent para mandar o valor acumulado pro lado server e setar no player. Pois as funções de dxDraw são feitas usando onClientRender (a cada frame) e portanto ficaria inviável ficar recebendo esse valor do server para usar no client o tempo todo. Edited August 10, 2018 by Lord Henry Link to comment
#DaNiLiN Posted August 12, 2018 Author Share Posted August 12, 2018 tem como seta dinheiro no pickup tbm? EX: /entregar ai e setado tal quantidade no pickup. Link to comment
Other Languages Moderators Lord Henry Posted August 12, 2018 Other Languages Moderators Share Posted August 12, 2018 (edited) 14 minutes ago, danilin said: tem como seta dinheiro no pickup tbm? EX: /entregar ai e setado tal quantidade no pickup. Depende. Onde está guardado o valor acumulado do pickup? Numa variável ou como elementData? Edited August 12, 2018 by Lord Henry Link to comment
#DaNiLiN Posted August 12, 2018 Author Share Posted August 12, 2018 onde está guardado o valor acumulado. Link to comment
Other Languages Moderators Lord Henry Posted August 12, 2018 Other Languages Moderators Share Posted August 12, 2018 Just now, danilin said: onde está guardado o valor acumulado. Foi o que eu perguntei. Link to comment
Other Languages Moderators Lord Henry Posted August 12, 2018 Other Languages Moderators Share Posted August 12, 2018 Então só fazer isso na variável: nomeVariavel = nomeVariavel + quantidadeDeGrana Exemplo: granaPickup = granaPickup + 5000 Link to comment
#DaNiLiN Posted August 12, 2018 Author Share Posted August 12, 2018 e possivel um marker ou pickup armazenar até 500k ? Ex: Gerar 10k e os outros 450 ser setado? Link to comment
Other Languages Moderators Lord Henry Posted August 12, 2018 Other Languages Moderators Share Posted August 12, 2018 10 hours ago, danilin said: e possivel um marker ou pickup armazenar até 500k ? Ex: Gerar 10k e os outros 450 ser setado? Não há limite de estoque. Você define isso. Link to comment
#DaNiLiN Posted August 12, 2018 Author Share Posted August 12, 2018 ao invez do dinheiro ser gerado por por getRealTime ser gerada por setTimer tentei usando setTimer e givePlayerMoney mais não deu certo no caso minha ideia era o dinheiro ser gerado a cada uma hora 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