#Teus

[!] Urgente [!] Sistema de fome mta RPG

Recommended Posts

Ola, estou tentando editar o ''mod fome'' que tem aqui na comunidade.

Eu queria colocar um painel (*GUI) que quando o player apertar o botao subir uma parte da % da barra e ele perder dinheiro, caso queira informaçoes detalhadas comunique abaixo

Share this post


Link to post
  1. Qual o resource em questão?
  2. Qual tecla será usada para abrir esse painel GUI?
  3. Isso deve funcionar em qualquer lugar? Ou somente em lugares específicos? (dentro de lanchonetes por exemplo)
  4. Você chegou a abrir o código do resource para estudar como ele funciona? (Se o resource estiver compilado, você não tem permissão para alterá-lo)

Share this post


Link to post
52 minutes ago, Lord Henry said:
  1. Qual o resource em questão?
  2. Qual tecla será usada para abrir esse painel GUI?
  3. Isso deve funcionar em qualquer lugar? Ou somente em lugares específicos? (dentro de lanchonetes por exemplo)
  4. Você chegou a abrir o código do resource para estudar como ele funciona? (Se o resource estiver compilado, você não tem permissão para alterá-lo)

1 -http://www.mtabrasil.com.br/2018/02/mod-fome-exclusivo.html (Esse resource)

2. Voce tera que chegar um cima do marker, dai vai aparecer uma mensagem em dx como por exemplo ''Aperte N para acessar o menu de lanches'' 

3. Apenas em cima do marker na lanchonete

4. Ja estudei, inclusive fiz uma alteraçao que adicionei uma 2° barra, que no caso será de sede

 

Share this post


Link to post
Posted (edited)

Estou vendo aqui, que o resource calcula a fome somente com base no tamanho da barra de fome e não salva esse valor em lugar nenhum. Se o resource for reiniciado ou o jogador reconectar no servidor, ele volta ao 100%. Além disso, pelo que entendi do código, ele come automaticamente o hamburger ao encostar no marker, e recarrega de graça toda a fome. Mas você quer q seja necessário apertar a tecla N depois que entrou no marker para comprar o lanche.

Na última função do markerHit (client.lua), delete a função e cole isso tudo:

function recarregaFome (key, state)
  if (getHungerState (localPlayer) < 60) then
    if getPlayerMoney () >= 10 then
      setHungerState (localPlayer,100)
      outputChatBox ("Você pagou $10 pelo hamburger.",255,255,0,false)
      outputChatBox ("Você está alimentado :D",0,255,0,false)
      triggerServerEvent ("take10money", localPlayer) -- Executa a função no server.lua
    else
      outputChatBox ("Você não tem dinheiro suficiente!",255,0,0,false)
    end
  else
    outputChatBox ("Você não está com fome!",255,0,0,false)
  end
end

addEventHandler ("onClientMarkerHit",getRootElement(),
function(hitEle,dim)
  if (localPlayer == hitEle) and (getElementData (source,"HAMBURGUER!") == true) then
    bindKey ("n", "down", recarregaFome)
    guiSetVisible (windowMessage, true) -- Mostra a mensagem GUI que já foi criada antes.
  end
end)

addEventHandler ("onClientMarkerLeave",getRootElement(),
function(leaveEle,dim)
  if (localPlayer == leaveEle) and (getElementData (source,"HAMBURGUER!") == true) then
    unbindKey ("n", "down", recarregaFome)
    guiSetVisible (windowMessage, false) -- Oculta a mensagem GUI.
  end
end)

Para fazer o jogador pagar, você deve fazer isso server-side, pois tirar dinheiro do jogador client-side não vai dar certo, já que vai tirar uma "grana falsa" e ele vai continuar com a mesma quantidade no servidor. Para isso, crie um script server.lua, declare-o no meta.xml e coloque isso no server.lua:

function pagarHamburger ()
  takePlayerMoney (client, 10)
end
addEvent ("take10money", true)
addEventHandler ("take10money", getRootElement(), pagarHamburger)

Declaração no meta.xml:

<script src="server.lua" type="server"/>

Para criar a mensagem GUI, informando para apertar a tecla N para comprar o hamburger, volte ao início do script client.lua, no começo da primeira função e crie o painel GUI com a mensagem lá, bem no início da função do onClientResourceStart. Coloque isso lá:

windowMessage = guiCreateWindow (0.0260,0.6,0.1828,0.08, "Lanchonete", true)
message = guiCreateLabel (0.05,0.5,1,1,"Pressione 'N' para comprar hamburger.",true, windowMessage)
guiSetVisible (windowMessage, false)

 

Edited by Lord Henry
  • Thanks 1

Share this post


Link to post
1 hour ago, Lord Henry said:

Estou vendo aqui, que o resource calcula a fome somente com base no tamanho da barra de fome e não salva esse valor em lugar nenhum. Se o resource for reiniciado ou o jogador reconectar no servidor, ele volta ao 100%. Além disso, pelo que entendi do código, ele come automaticamente o hamburger ao encostar no marker, e recarrega de graça toda a fome. Mas você quer q seja necessário apertar a tecla N depois que entrou no marker para comprar o lanche.

Na última função do markerHit (client.lua), delete a função e cole isso tudo:


function recarregaFome (key, state)
  if (getHungerState (localPlayer) < 60) then
    if getPlayerMoney () >= 10 then
      setHungerState (localPlayer,100)
      outputChatBox ("Você pagou $10 pelo hamburger.",255,255,0,false)
      outputChatBox ("Você está alimentado :D",0,255,0,false)
      triggerServerEvent ("take10money", localPlayer) -- Executa a função no server.lua
    else
      outputChatBox ("Você não tem dinheiro suficiente!",255,0,0,false)
    end
  else
    outputChatBox ("Você não está com fome!",255,0,0,false)
  end
end

addEventHandler ("onClientMarkerHit",getRootElement(),
function(hitEle,dim)
  if (localPlayer == hitEle) and (getElementData (source,"HAMBURGUER!") == true) then
    bindKey ("n", "down", recarregaFome)
    guiSetVisible (windowMessage, true) -- Mostra a mensagem GUI que já foi criada antes.
  end
end)

addEventHandler ("onClientMarkerLeave",getRootElement(),
function(leaveEle,dim)
  if (localPlayer == leaveEle) and (getElementData (source,"HAMBURGUER!") == true) then
    unbindKey ("n", "down", recarregaFome)
    guiSetVisible (windowMessage, false) -- Oculta a mensagem GUI.
  end
end)

Para fazer o jogador pagar, você deve fazer isso server-side, pois tirar dinheiro do jogador client-side não vai dar certo, já que vai tirar uma "grana falsa" e ele vai continuar com a mesma quantidade no servidor. Para isso, crie um script server.lua, declare-o no meta.xml e coloque isso no server.lua:


function pagarHamburger ()
  takePlayerMoney (client, 10)
end
addEvent ("take10money", true)
addEventHandler ("take10money", getRootElement(), pagarHamburger)

Declaração no meta.xml:


<script src="server.lua" type="server"/>

Para criar a mensagem GUI, informando para apertar a tecla N para comprar o hamburger, volte ao início do script client.lua, no começo da primeira função e crie o painel GUI com a mensagem lá, bem no início da função do onClientResourceStart. Coloque isso lá:


windowMessage = guiCreateWindow (0.0260,0.6,0.1828,0.08, "Lanchonete", true)message = guiCreateLabel (0.05,0.5,1,1,"Pressione 'N' para comprar hamburger.",true, windowMessage)guiSetVisible (windowMessage, false)

 

Obrigado pela ajuda e desculpe te fazer gastar tempo =) será de grande importancia sua ajuda!

Share this post


Link to post
2 minutes ago, Lord Henry said:

De nada, estamos aqui para ajudar.

Aproveitando, me ajuda com o painel? qual a function devo adicionar pra quando o player clicar no butao perder money e aumentar a barra? 

-----------Painel
function Painel()
        Painel1 = guiCreateWindow(477, 136, 260, 525, "ALIMENTOS", false)
        guiWindowSetSizable(Painel1, false)
        windowMessage = guiCreateWindow (0.0260,0.6,0.1828,0.08, "Lanchonete", true)
        message = guiCreateLabel (0.05,0.5,1,1,"Pressione 'N' para comprar hamburger.",true, windowMessage)
        guiSetVisible (windowMessage, false)

        Botao1 = guiCreateButton(0.08, 0.10, 0.53, 0.04, "HAMBURGUER", true, Painel1)
        guiSetFont(Botao1, "default-bold-small")
        guiSetProperty(Botao1, "NormalTextColour", "CBD80000")
        Botao2 = guiCreateButton(0.08, 0.16, 0.53, 0.04, "COCA-COLA", true, Painel1)
        guiSetFont(Botao2, "default-bold-small")
        guiSetProperty(Botao2, "NormalTextColour", "CBD80000")
        Botao3 = guiCreateButton(22, 118, 138, 23, "TACO", false, Painel1)
        guiSetFont(Botao3, "default-bold-small")
        guiSetProperty(Botao3, "NormalTextColour", "CBD80000")

        showCursor (true)
        addEventHandler ( "onClientGUIClick", Botao1, comida1, false )        
end
addCommandHandler ("comida", Painel)

function comida1()
showCursor(true)
triggerServerEvent ( "onGreeting", resourceRoot )
end

 

Share this post


Link to post

No exemplo que eu dei, ele já faz isso quando vc aperta a tecla N em cima do marker. Ele desconta $10 do jogador.

  • Thanks 1

Share this post


Link to post

Entao mano, eu fiz tudo que vc pediu acima e quando vou comprar comida (Mesmo com a barra mt baixa) aparece ''Voce nao esta com fome'' ,-, oq devo fazer agora?

OBS: Demorei pra relatar o erro pois fui viajar

 

Share this post


Link to post
Posted (edited)

Vi que você alterou o exemplo que mandei.

Acho que seria mais fácil não usar botões em menus. Bastaria usar N para comprar o alimento que está no pickup.

E vc está usando isso:

addEventHandler ( "onClientGUIClick", Botao1, comida1, false )

Só vai funcionar para o Botao1. Pois a função só é ativada no Botao1.

E você está criando o painel por meio de comando, isso dará erro se você tentar executar o painel sem ter criado ele. Na verdade usar comandos para criar painéis é um dos piores jeitos e nada otimizado. Você deve criar o painel ao iniciar o resource (onClientResourceStart), e logo em seguida deixá-lo invisível (guiSetVisible). Então na função que faz o painel aparecer, basta torná-lo visível novamente. Se você cria um painel por comando, você provavelmente vai precisar de outro comando para destruí-lo, sendo que é mais fácil apenas ocultá-lo.

 

Edited by Lord Henry
  • Like 1

Share this post


Link to post
3 hours ago, Lord Henry said:

Vi que você alterou o exemplo que mandei.

Acho que seria mais fácil não usar botões em menus. Bastaria usar N para comprar o alimento que está no pickup.

E vc está usando isso:


addEventHandler ( "onClientGUIClick", Botao1, comida1, false )

Só vai funcionar para o Botao1. Pois a função só é ativada no Botao1.

E você está criando o painel por meio de comando, isso dará erro se você tentar executar o painel sem ter criado ele. Na verdade usar comandos para criar painéis é um dos piores jeitos e nada otimizado. Você deve criar o painel ao iniciar o resource (onClientResourceStart), e logo em seguida deixá-lo invisível (guiSetVisible). Então na função que faz o painel aparecer, basta torná-lo visível novamente. Se você cria um painel por comando, você provavelmente vai precisar de outro comando para destruí-lo, sendo que é mais fácil apenas ocultá-lo.

 

N to usando mais painel, dei uma pesquisada e descobri que painel dxa o servidor pesado ent desisti de usar, msm sem painel (do jeito que vc mandou em cima) n funciona .-.

 

Share this post


Link to post
8 hours ago, #Teus said:

Entao mano, eu fiz tudo que vc pediu acima e quando vou comprar comida (Mesmo com a barra mt baixa) aparece ''Voce nao esta com fome'' ,-, oq devo fazer agora?

OBS: Demorei pra relatar o erro pois fui viajar

 

Primeiramente, nesses casos você precisa depurar seu código, colocando um output para o chat pra saber o que getHungerState realmente retorna.

Você poderia postar seu código aqui, ou se não quiser compartilhar ele publicamente é só enviar em privado pra alguém que possa te ajudar.

  • Thanks 1

Share this post


Link to post

Aproveita que o amigo abriu esse Topico, queria tirar uma duvida sobre esse recurso. Tem algum jeito de fazer o sistema de fome so que a barra em dx? e como?

Share this post


Link to post
36 minutes ago, TeixeiraRB said:

Aproveita que o amigo abriu esse Topico, queria tirar uma duvida sobre esse recurso. Tem algum jeito de fazer o sistema de fome so que a barra em dx? e como?

Você se refere ao dx-rectangle funcionando como o progress-bar da GUI? Use uma variável com o tamanho total da barra; digamos que você nomeia ela como barWidth.

Você vai precisar fazer o seguinte calculo no 3º argumento de dxDrawRectangle, que é a largura:

progressoAtual = (getHungerState() / 100) * barWidth

Se você quer dizer o calculo da barra, isso é o principal, que é o calculo do progresso atual.

Share this post


Link to post

Eu fiz um resource de fome/sede/sono que funciona assim. As barras aparecem em DX. O preço e tipo de alimento que é carregado depende do pickup (que também pode ser uma bebida). O sono é o mais simples, basta usar /dormir, dai o personagem faz animação de dormindo e começa a recarregar o sono aos poucos.

Se quiserem, posso fazer um vídeo mostrando como funciona.

Share this post


Link to post
15 hours ago, DNL291 said:

Você se refere ao dx-rectangle funcionando como o progress-bar da GUI? Use uma variável com o tamanho total da barra; digamos que você nomeia ela como barWidth.

Você vai precisar fazer o seguinte calculo no 3º argumento de dxDrawRectangle, que é a largura:

progressoAtual = (getHungerState() / 100) * barWidth

Se você quer dizer o calculo da barra, isso é o principal, que é o calculo do progresso atual.

Tipo fazer um resource de fome do 0 so que em dx.

 

5 hours ago, Lord Henry said:

Eu fiz um resource de fome/sede/sono que funciona assim. As barras aparecem em DX. O preço e tipo de alimento que é carregado depende do pickup (que também pode ser uma bebida). O sono é o mais simples, basta usar /dormir, dai o personagem faz animação de dormindo e começa a recarregar o sono aos poucos.

Se quiserem, posso fazer um vídeo mostrando como funciona.

Ficaria muito agradecido por ver o video 

Share this post


Link to post

Problema Resolvido. Obrigado a todos =)

 

Share this post


Link to post

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.