Jump to content

[!] 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

Link to comment
  • Other Languages Moderators
  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)
Link to comment
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

 

Link to comment
  • Other Languages Moderators

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
Link to comment
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!

Link to comment
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

 

Link to comment
  • Other Languages Moderators

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
Link to comment
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 .-.

 

Link to comment
  • Moderators
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
Link to comment
  • Moderators
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.

Link to comment
  • Other Languages Moderators

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.

Link to comment
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 

Link to comment

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.
×
×
  • Create New...