Recommended Posts

Olá, eu estou desenvolvendo um código e me vi a necessidade de usar uma database, porém não entendo nada do assunto, eu andei dando uma lida no tutorial do @Lord Henry porém não entendi como por cada coisa em pratica;

O que eu quero fazer: Uma Loja de Skins, que a mesma tem um botão de usar, na hora que ele apertar o botão de Comprar, se ele já tiver a Skin comprada, aparece uma mensagem para apertar no outro botão (Botão de usar a Skin), porém estou em dúvidas nessa parte de obter se ele tem a skin... Enfim, na Database em Geral. Se pudessem me ajudar ficaria agradecido :)

function DeltaSCR_Comprar (_, state)
	if DeltaSCR_Painel == true then
		if state == "down" then
			if isCursorOnElement (screenW * 0.5295, screenH * 0.5583, screenW * 0.1094, screenH * 0.0500) then -- //CANCELAR
				DeltaSCR_Abrir ()
			elseif isCursorOnElement (screenW * 0.5295, screenH * 0.4917, screenW * 0.1094, screenH * 0.0500) then -- //USAR
				
			elseif isCursorOnElement (screenW * 0.5295, screenH * 0.4250, screenW * 0.1094, screenH * 0.0500) then -- //COMPRAR
				local rowItem = guiGridListGetSelectedItem (skinsList)
				if rowItem ~= -1 then
					if guiGridListGetItemText (skinsList, rowItem, 1) == "Skin 1" then
						setElementModel (localPlayer, 0)
						takePlayerMoney (300)
						DeltaSCR_Abrir ()
					elseif guiGridListGetItemText (skinsList, rowItem, 1) == "Skin 2" then
						setElementModel (localPlayer, 1)
						takePlayerMoney (300)
						DeltaSCR_Abrir ()
					elseif guiGridListGetItemText (skinsList, rowItem, 1) == "Skin 3" then
						setElementModel (localPlayer, 2)
						takePlayerMoney (300)
						DeltaSCR_Abrir ()
					elseif guiGridListGetItemText (skinsList, rowItem, 1) == "Skin 4" then
						setElementModel (localPlayer, 7)
						takePlayerMoney (300)
						DeltaSCR_Abrir ()
					elseif guiGridListGetItemText (skinsList, rowItem, 1) == "Skin 5" then
						setElementModel (localPlayer, 9)
						takePlayerMoney (300)
						DeltaSCR_Abrir ()
					elseif guiGridListGetItemText (skinsList, rowItem, 1) == "Skin 6" then
						setElementModel (localPlayer, 10)
						takePlayerMoney (300)
						DeltaSCR_Abrir ()
					elseif guiGridListGetItemText (skinsList, rowItem, 1) == "Skin 7" then
						setElementModel (localPlayer, 11)
						takePlayerMoney (300)
						DeltaSCR_Abrir ()
					elseif guiGridListGetItemText (skinsList, rowItem, 1) == "Skin 8" then
						setElementModel (localPlayer, 12)
						takePlayerMoney (300)
						DeltaSCR_Abrir ()
					end
				end
			end
		end
	end
end
addEventHandler ("onClientClick", getRootElement(), DeltaSCR_Comprar)

 

Share this post


Link to post
Posted (edited)

Esse código é do lado cliente e o que vai precisar é fazer toda a parte do banco de dados e carregamento no lado server. A consulta na base de dados não precisa ser a todo momento que verificar o que o jogador possui, pra isso tem as tabelas ou element-data que você pode armazenar temporariamente no jogador, e para fazer uma verificação entre UI/jogador local (client) e os dados do jogador (server) você vai precisar da função triggerServerEvent client > server e triggerClientEvent server > client.

Edited by DNL291
  • Like 1

Share this post


Link to post
1 hour ago, #DeltaSCR said:

u andei dando uma lida no tutorial do @Lord Henry porém não entendi como por cada coisa em pratica

O que exatamente vc não entendeu? A parte de criar o banco de dados?

Share this post


Link to post
1 minute ago, Lord Henry said:

O que exatamente vc não entendeu? A parte de criar o banco de dados?

Tipo, eu li o seu tutorial, e entendi mais ou menos o que cada coisa faz, porém não entendi como por em pratica, Por exemplo: Como criar o banco de dados, onde encaixar no código, o que vem antes, e o que vem depois... 

Share this post


Link to post

Lá no final tem um exemplo de cada coisa, além da sintaxe de criar o banco de dados. Está dentro de um spoiler.

Spoiler

Tipo esse.

 

Share this post


Link to post

Ok, então o primeiro passo, no caso criar o banco de dados seria nesse modelo?

executeSQLQuery ("CREATE TABLE IF NOT EXISTS tabelaLegal (ID INTEGER NOT NULL PRIMARY KEY, PosX REAL, PosY REAL, PosZ REAL, accountName TEXT)")

Tipo, como estou trabalhando com uma Loja de Skins, acha que somente uma coluna (ID) basta? Ou precisa criar algo a mais?

Share this post


Link to post
Posted (edited)

Dai isso vem com a lógica mano. Vc é quem deve saber quantas colunas deve ter na tabela. Quais dados serão salvos.

Antes de criar uma tabela nova no banco de dados, vc já deve saber quais dados serão armazenados lá.

É o mesmo que tentar criar um painel sem saber quais botões e campos terão nele.

Edited by Lord Henry
  • Thanks 1

Share this post


Link to post
Posted (edited)

Ah sim... Tipo, qual a diferença entre executeSQLQuery e os as funções db (dbConnect, etc)? Quando eu uso cada um desses?

Edited by #DeltaSCR

Share this post


Link to post

As funções db criam um banco de dados customizado, enquanto que o executeSQLQuery usa o banco de dados nativo do MTA registry.db

Eu acho mais fácil usar o banco de dados nativo do MTA.

Share this post


Link to post
9 hours ago, Lord Henry said:

As funções db criam um banco de dados customizado, enquanto que o executeSQLQuery usa o banco de dados nativo do MTA registry.db

Eu acho mais fácil usar o banco de dados nativo do MTA.

Ah sim, eu vou usar funções db, pois quero meio que um sistema independente, aí nesse caso, o que eu usaria para criar a tabela?

Share this post


Link to post

Esse sistema independente ficará fora do servidor? Ou acessível por sites externos?

Share this post


Link to post
19 hours ago, Lord Henry said:

Esse sistema independente ficará fora do servidor? Ou acessível por sites externos?

Tipo, o que vai acontecer é: O Player abre um painel de Skins, quando ele apertar no botão de usar, vai chegar a database; No caso só um arquivo mesmo de database, que vai ficar somente nos arquivos do Servidor

Share this post


Link to post

Se vai ficar no servidor, pra quê criar um banco de dados novo? É mais fácil usar o banco de dados nativo.

Se vc já está com dificuldade em fazer o mais fácil, pq quer tentar o mais difícil?

Share this post


Link to post
2 hours ago, Lord Henry said:

Se vai ficar no servidor, pra quê criar um banco de dados novo? É mais fácil usar o banco de dados nativo.

Se vc já está com dificuldade em fazer o mais fácil, pq quer tentar o mais difícil?

Por que como eu te disse, quero produzir o código totalmente independente, pois exemplo, caso o servidor reinicie, se eu tiver o arquivo database, eu não perco nada

Share this post


Link to post
1 hour ago, #DeltaSCR said:

Por que como eu te disse, quero produzir o código totalmente independente, pois exemplo, caso o servidor reinicie, se eu tiver o arquivo database, eu não perco nada

Mas não tem como perder, use setAccountData diretamente e não setElementData se não quer arriscar em perder dados caso o servidor de crash por exemplo

Share this post


Link to post
Posted (edited)

Como mencionado pelo nosso colega acima, os bancos de dados nativos do MTA não se perdem ao reiniciar o servidor.

Não sei de onde vc inventou que perde...

Edited by Lord Henry

Share this post


Link to post

Então se eu usar setAccountData, mesmo que o servidor reinicie eu não perco nada?

Share this post


Link to post
5 minutes ago, #DeltaSCR said:

Então se eu usar setAccountData, mesmo que o servidor reinicie eu não perco nada?

é.

Share this post


Link to post

Ta, mas agora fiquei em dúvida, setAccountData tem diferença com usar executeSQLQuery? Se sim, me explique pls

Share this post


Link to post

Ok, sei que é mais difícil, porém ainda sim desejo aprender com a database mesmo, sem ser a do próprio MTA...

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.