juaosilv Posted April 22, 2019 Share Posted April 22, 2019 (edited) 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 April 22, 2019 by juaosilv Link to comment
Other Languages Moderators Lord Henry Posted April 22, 2019 Other Languages Moderators Share Posted April 22, 2019 (edited) 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: 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. 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 April 22, 2019 by Lord Henry Link to comment
juaosilv Posted April 22, 2019 Author Share Posted April 22, 2019 (edited) 3 hours ago, Lord Henry said: Tá. Duas observações: 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. 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 April 22, 2019 by juaosilv Link to comment
Other Languages Moderators Lord Henry Posted April 22, 2019 Other Languages Moderators Share Posted April 22, 2019 (edited) Sim, conexão com banco de dados é pesada se for feita muitas vezes simultaneamente. Edited April 22, 2019 by Lord Henry Link to comment
juaosilv Posted April 22, 2019 Author Share Posted April 22, 2019 5 minutes ago, Lord Henry said: Sim, conexão com banco de dados é pesada se for feita muitas vezes simultaneamente. Mas existe uma outra forma de fazer isso? Se sim qual? E se tiver outras formas a que você mais me recomenda é outra ou MYSQL? Link to comment
[M]ister Posted April 23, 2019 Share Posted April 23, 2019 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
Other Languages Moderators Lord Henry Posted April 23, 2019 Other Languages Moderators Share Posted April 23, 2019 Se for usar esse esquema de conta "cobaia", seria interessante colocar um verificador se a conta existe ou não. Link to comment
juaosilv Posted April 23, 2019 Author Share Posted April 23, 2019 (edited) 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 April 23, 2019 by juaosilv Link to comment
Other Languages Moderators Lord Henry Posted April 23, 2019 Other Languages Moderators Share Posted April 23, 2019 Sim, vai pra todos. Pelo menos no exemplo que ele deu. As contas são globais. 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