Jump to content

Dúvida com Database


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)

 

Link to comment
  • Moderators

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

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

Link to comment

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?

Link to comment
  • Other Languages Moderators

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

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.

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

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

Link to comment
  • Other Languages Moderators

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?

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

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

Link to comment
  • Other Languages Moderators

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
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...