Jump to content

Qual melhor forma de fazer isso...


Recommended Posts

Olá, então eu estou com uma duvida tremenda, já dei uma olhada na wiki e nada de encontrar então venho pedir a ajuda de vocês brasileiros q utilizam o fórum.

 

Eu quero fazer uma especie de Cofre no meu banco, como assim cofre? Quando a pessoa deposita algo uma taxa vai pra esse cofre, e esse cofre serviria pra realizar emprestimos. Isso tudo já está proogramado agora minha duvida é oq eu posso utilizar pra realizar esse cofre. Geralmente eu utilizaria ElementDate e faria um 

setElementData(??,"Cofre",getElementData(??,"Cofre") + 1000)

Mas ai que vem a minha duvida, pelo meu conhecimento ElementDate só serve pra players, oq eu quero fazer teria quer ser algo global. Algo que seria igual pra todos do servidor, e eu não sei como fazer isso. Eu pensei em fazer em mysql, criar uma coluna chamada cofre e sempre que alguém realizar um deposito adicionar a taxa nessa coluna da tabela e quando as pessoas forem realizar emprestimos puxar o valor da tabela e descontar da tabela mas acho que não tem necessidade nenhuma de utilizar mysql.

Alguém pode me ajudar?

Edited by juaosilv
Link to comment
  • Other Languages Moderators
2 hours ago, juaosilv said:

pelo meu conhecimento ElementDate só serve pra players, oq eu quero fazer teria quer ser algo global.

Tá. Duas observações:

  1. elementData serve para qualquer elemento, não só para jogadores. É claro que ele é utilizado com mais frequência em jogadores. A principal utilidade da elementData é que ela é uma data temporária. Ela é perdida se o servidor reiniciar ou se o elemento que continha a data for destruído. Outra vantagem da elementData é que ela é sincronizada entre servidor e clientes por padrão. Isso significa que se vc usar setElementData em um elemento, essa data pode ser lida tanto client-side quanto server-side. O grande problema é que pra manter essa sincronização both-side, ela consome muito tráfego de rede do seu servidor, podendo causar lag. Por esse motivo a maioria de nós (desenvolvedores) preferimos evitar o uso dela para manter a otimização e os scripts mais leves.
  2. Você quer algo global, pelo que entendi o mesmo cofre será usado para empréstimos para todos os jogadores (não será 1 cofre pra cada player e sim um único cofre global). Se eu fosse você, salvaria os dados do cofre em um banco de dados. Dessa forma os dados dele não serão perdidos se o server reiniciar ou o resource for reiniciado. Comece por ExecuteSQLQuery
Edited by Lord Henry
Link to comment
3 hours ago, Lord Henry said:

Tá. Duas observações:

  1. elementData serve para qualquer elemento, não só para jogadores. É claro que ele é utilizado com mais frequência em jogadores. A principal utilidade da elementData é que ela é uma data temporária. Ela é perdida se o servidor reiniciar ou se o elemento que continha a data for destruído. Outra vantagem da elementData é que ela é sincronizada entre servidor e clientes por padrão. Isso significa que se vc usar setElementData em um elemento, essa data pode ser lida tanto client-side quanto server-side. O grande problema é que pra manter essa sincronização both-side, ela consome muito tráfego de rede do seu servidor, podendo causar lag. Por esse motivo a maioria de nós (desenvolvedores) preferimos evitar o uso dela para manter a otimização e os scripts mais leves.
  2. Você quer algo global, pelo que entendi o mesmo cofre será usado para empréstimos para todos os jogadores (não será 1 cofre pra cada player e sim um único cofre global). Se eu fosse você, salvaria os dados do cofre em um banco de dados. Dessa forma os dados dele não serão perdidos se o server reiniciar ou o resource for reiniciado. Comece por ExecuteSQLQuery

Se meu servidor no futuro tiver muitos usuários e diversos usuários utilizando o banco por exemplo isso não pode causar lag no mysql? Eu utilizava mysql pra programar em outros jogos e tive muitos problemas em relação a conexões, como são muitos usuários sempre que eles utilizavam a função o mysql abria e fechava uma conexão e isso acabava dando problema no meu mysql por causa de muitas conexões por segundo, ai o mysql caia ou lagava.

Eu já fiz algumas funções em mysql em script mas não sei muito como funciona, se abre e fecha uma conexão a cada uso e etc...

Meu problema principal é esse, pois eu não vou utilizar esse cofre só pra bancos. Minha ideia principal é fazer um cofre da cidade, então sempre que você comprar um carro, comidas, armas uma % desse valor é enviada pro cofre, então seria muitas conexões e no momento estou com uma maquina razoável. 

E sobre o ElementDate eu to com um save, sempre que um jogar sair ele salva.

Mas resumidamente minha pergunta é, existe outra forma de fazer isso ou é só em MYSQL? 


E uma outra pergunta, caso exista outra forma  além dessa que você disse em MYSQL, a que você mais me recomenda é a em MYSQL?

Obrigado pelo tempo q ta gastando p me ajudar.

 

 

Edited by juaosilv
Link to comment

Você não precisa interagir com o db todo instante, você pode fazer isso apenas no start/stop do resource:

start: carrega os dados do banco em uma variável/tabela/elementdata ….
stop: salva no banco

Utilizando o banco de dados do MTA (SQLite) ao invés do MySQL, seria bem mais eficaz também! 

Particularmente não acho interessante criar uma tabela para armazenar pouquíssimas informações, vai ser apenas o campo cofre consumindo uma única linha na tabela ? Eu optaria por salvar em um arquivo, ou então em uma conta “cobaia” responsável apenas por salvar informações relacionadas ao servidor, exemplo:

-- Vamos supor que eu tenha uma conta "serverData"

local accData = getAccount("serverData")
local bancoElem = createElement("banco")

addEventHandler("onResourceStart", resourceRoot,
	function()
		local cofre = getAccountData(accData, "banco.cofre") or 0
		setElementData(bancoElem, "cofre", cofre)
	end
)

addEventHandler("onResourceStop", resourceRoot,
	function()
		local cofre = getElementData(bancoElem, "cofre")
		setAccountData(accData, "banco.cofre", cofre )
	end
)

-- Para manipular o elementData em outros scripts, pode ser usado algo do tipo:
print(getElementData(getElementsByType("banco")[1], "cofre")) -- obter
setElementData(getElementsByType("banco")[1], "cofre", 500) -- alterar

 

Link to comment
12 hours ago, MaligNos said:

Você não precisa interagir com o db todo instante, você pode fazer isso apenas no start/stop do resource:

start: carrega os dados do banco em uma variável/tabela/elementdata ….
stop: salva no banco

Utilizando o banco de dados do MTA (SQLite) ao invés do MySQL, seria bem mais eficaz também! 

Particularmente não acho interessante criar uma tabela para armazenar pouquíssimas informações, vai ser apenas o campo cofre consumindo uma única linha na tabela ? Eu optaria por salvar em um arquivo, ou então em uma conta “cobaia” responsável apenas por salvar informações relacionadas ao servidor, exemplo:


-- Vamos supor que eu tenha uma conta "serverData"

local accData = getAccount("serverData")
local bancoElem = createElement("banco")

addEventHandler("onResourceStart", resourceRoot,
	function()
		local cofre = getAccountData(accData, "banco.cofre") or 0
		setElementData(bancoElem, "cofre", cofre)
	end
)

addEventHandler("onResourceStop", resourceRoot,
	function()
		local cofre = getElementData(bancoElem, "cofre")
		setAccountData(accData, "banco.cofre", cofre )
	end
)

-- Para manipular o elementData em outros scripts, pode ser usado algo do tipo:
print(getElementData(getElementsByType("banco")[1], "cofre")) -- obter
setElementData(getElementsByType("banco")[1], "cofre", 500) -- alterar

 

Consegui entender mais ou menos, mas ao utilizar o código de alterar que você mandou isso seria global ne? Se eu fizer pra descontar 1000 ou adicionar mais 1000, isso não seria só pra um jogador isso afetaria o valor do cofre de todos?

 

Pois a principio minha ideia é fazer um cofre pra cidade que sempre que qualquer jogador realizar uma taxa ir pro cofre, então o valor do cofre tem q ser igual e atualizar igual pra todos.

Edited by juaosilv
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...