[botta&risposta] GMSDB - Game Maker Simple Database

Gex, Dll, DyLib, Js e ogni tipo di estensione per GameMaker
Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

[botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Vi propongo un set di script che ho realizzato per Animus per la gestione del database interno di carte e mazzi, tirato a lucido e generalizzato in modo che possa essere usato come database generico per i vostri progetti.
Si tratta di un sistema di database relativamente semplice e totalmente in GML, non necessita di DLL o altro, é sufficiente importare gli script scaricabili in questo topic o installare la GEX.

Comprende già una buona quantità di funzionalità, e tutto sommato é abbastanza testato considerando che l'ho usato per il mio gioco delle compe. Ha però ancora molte possibilità di espansione, se notate qualche funzionalità che manca e desiderate fatemi sapere, vale lo stesso per eventuali bugs.

A livello di performance non é un mostro, quindi come in un qualsiasi database é bene limitare il più possibile il numero di query (in questo caso di db_record_find che é la funzione più potente ma anche più pesante, in particolare se é specificato un sort (ordinamento risultati). Le altre funzioni sono abbastanza leggere e non pongono particolari problemi di performance). Io ho fatto il possibile per ottimizzare ma stiamo parlando di GML, su set di dati abbastanza grandi risulta molto lento effettuare operazioni di sorting o manipolazioni di list,grid e map

Download GEX V2.0

Il download comprende la GEX, un esempi editabile, il manuale e gli scripts da includere. Versione 2 compatibile solo con GM:Studio

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta]GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Ci sono gli script da importare in formato gml

Avatar utente
guidox
GMI Honor
Messaggi: 5765
Iscritto il: 26/07/2009, 17:23
Specialità: programmazione
Uso: GM:Studio 1.4 Android
Località: Marche
Contatta:

Re: [botta&risposta]GMSDB - Game Maker Simple Database

Messaggio da guidox »

:Q_____

Utilissimo!!!

Tu si che sai come divertirti... e renderti utile allo stesso tempo! :mrgreen:
Immagine

Immagine

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Ho aggiornato gli scripts, ora db_record_find é molto più veloce se viene specificato un limite e nessun ordine.
Ho anche aggiunto la funzione db_record_find_first(tabella,colonna,valore), che ritorna l'id del primo record nel database che ha un certo valore nella colonna indicata. Se nessun record é stato trovato, ritorna -1. Questa funzione é equivalente a un db_record_find con limite 1 e nessun ordine, ma é più comoda e veloce.

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Tizzio »

Sarebbe figo fare un sistema di query

db_query("SELECT * FROM tabella WHERE arma='ascia'")
non penso sia troppo difficile *____*
Non dico di aggiungere tutte le funzioni di mysql, ma almeno il SELECT, l'UPDATE, l'INSERT il WHERE

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Si vero, ma per le condizioni esce abbastanza complessa la cosa, inoltre rischia di esserci un po' troppo string parsing

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Jak »

Sto cercando di capirmi tra la gestione di questo database poichè di php o roba legata all'online so ben poco.
Eventualmente(anche in pm) potresti darmi qualche delucidazione sulla gestione di un database e simili? Potrebbe venirne fuori una buona versione dll. :sisisi:
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Jak »

Xeryan ha scritto:vedi un database come un insieme di fogli excel, ognuno di essi formati da colonne e valori (ds_grid per capirci)
Ok, fin qua ci sono. Però sopratutto per prestazioni e memoria devo capire come è meglio agire sulla struttura dati quindi come vanno identificate le varie celle/tabelle/valori ecc.
Che so, una tabella ha un'id o una stringa che lo identifica?
Il concetto di record?
Insomma una spiegazione un po più dettagliata per uno che non sa niente, per le varie funzionalità invece posso sbirciare gli script per capirne il funzionamento(così non rende inutile il lavoro di homunculus in quanto contribuisce in gran parte alla creazione della dll involontariamente).
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Forse é meglio vederci in chat se hai tempo. Comunque penso non sia particolarmente interessante una dll del genere se non per diletto, perché se già si vuole sfruttare sistemi esterni tanto vale usare cose come sqlite di cui già esistono dll e gex per gm.

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Jak »

Homunculus ha scritto:perché se già si vuole sfruttare sistemi esterni tanto vale usare cose come sqlite di cui già esistono dll e gex per gm.
Dici che non ha senso quindi? Peccato.
Inizialmente pensavo di farla comunque in quanto potrebbe servirmi in versione c++ ma a pensarci bene visto che non mi sono ancora voluto imparare i template mi sa che non ci guadagnerei molto nel database se non per immagazzinare stringhe e numeri.
Se dite che non sarebbe molto utile allora forse è meglio che lascio perdere.
Diletto si, ma se alla fine è un lavoro completamente inutile mi dispiace venga messo nel dimenticatoio.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Beh io perlomeno non vedo il motivo di utilizzare una dll che gestisce un database fatto a livello amatoriale quando esistono già soluzioni analoghe ben più solide e performanti. Se vai a vedere SQLite ti rendi conto di quanto sarebbe inutile il tuo lavoro. Di fatto anche il mio sarebbe inutile se non fosse comodo per il fatto che é tutto in GML ed open source.

Comunque giusto per tua info, la base dell'idea di database penso sia chiara ed é fondamentalmente quanto dice xeryan, una raccolta di "tabelle" di dati alle quali si può effettuare richieste. Ogni tabella ha un nome che la identifica (stringa) ed ha una sua struttura, una lista di colonne identificate anche loro da un nome formato stringa.
Ogni colonna ha generalmente un tipo di dato ben definito, un po' come una variabile in C++ per esempio, e può contenere solo valori di quel tipo (nei miei script per semplicità non c'é questo limite).

Un record é semplicemente una "riga" di dati in una tabella. In genere (ma si può anche non farlo) ogni tabella mantiene un indice univoco di ID che identificano ogni record, e come avviene nei miei script, un ID é assegnato una e una sola volta per tutta la vita della tabella, indipendentemente se il record viene cancellato. L'ID generalmente ha anche il vantaggio di garantire un accesso al dato a cui si riferisce in tempo O(1) (senza scorrere tutti i risultati fondamentalmente), ma é possibile applicare lo stesso ragionamento anche ad altre colonne aggiungendo altri indici, a scapito di un po' più di memoria utilizzata.

I record possono essere ritrovati mediante una query, che generalmente é una stringa con dei comandi tipo l'esempio fatto da tizzio che contengono istruzioni su cosa (condizioni, colonne, calcoli on the fly, ...) estrapolare dal database e come ritornarle (ordine, limiti a numero massimo di risultati ecc...). Il grosso lavoro di un database fondamentalmente é quello di interpretare le query e di garantire performance stellari nell'estrapolazione dei dati.

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Tizzio »

ah, quindi esiste una dll per sql, la cerco subito, grazie!

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da BaronVsCorsar »

che bellissimo lavoro Homu!!!

Manca con gravissima colpa un sistema di salvataggio/caricamento database (o per lo meno tabella), che sfruttando la conversione di una ds in stringa ti sarebbe stato relativamente "facile" da realizzare.

Anzi, dovresti proprio aggiungerlo, fare un gex con tanto di help in inglese (e qualche esempio in più, specilamnete su come comporre query con utilizzo di più condizioni), e verrebbe un interessantissimo lavoro.

Non solo a livello teorico, ma potenzialmente potrebbe essere anche utile. E sicuramente molto istruttivo spulciare il tuo codice!

@Jak, Tizzio: sqlite è una libreria (dll) opensource, di livello praticametne professionale, utilizzata da decine di programmi professionali e letteralmente centinaia di dispositivi più disparati (cellulari, tablet, router, modem....).
Velocissima, piccolissima, semplicissima, permette di gestire db su disco (in un unico file, os indipendent, file system indipendent) o addirittura database "su ram"... tipo quanto ha realizzato homu, il mio idolo dei db.
Esiste anche per gm, e mi pare proprio homu, ha gexizzato la dll ed è scaricabile sul sito.

@Jak2: vuoi fare qualche cosa di utile, ed un esercizio? Scaricati la versione della dll sqlite per gm, studiati le funzioni di interfaccia con il gml, scarica l'ultima versione di sqlite e crea una dll che fornisca le stesse funzioni di interfaccia, ma basata sull'ultima versione di sqlite!
Se lavori con un minimo di modularità puoi aggiornare sempre la tua sqliteforgm semplicemente ricompilando dll sqlite + Jakmodulo_di_interfaccia_con_gm :work:
A dire il vero mi sono sempre ripromesso di farlo io, ma non ho mai compilato una dll, e a parte qualche informazione carpita qui sul forum a sla e maz non ci ho neppure mai guardato :sisisi:
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Baron penso che ti sei perso le funzioni db_table_write e db_table_read che servono appunto a salvare le varie data structures che formano una tabella su file

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da BaronVsCorsar »

cosa te lo fa supporre? :hum: :lol:

e pensare che avevo letto tutte le funzioni cercando se c'erano queste due :|
Allora manca una manciata di esempi in più e la gexizzazione! :D
E come cilindro dal cappello suggerisco una funzione di caricamento tabella da un simil csv (magari semplificato), per poter
importare facilmente da excel o similia. :work:
Credo sia pure più facile di db_table_write e db_table_read ... mi devo inventare altre pretese più faticose da realizzare :twisted:
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Jak »

BaronVsCorsar ha scritto:@Jak2: vuoi fare qualche cosa di utile, ed un esercizio? Scaricati la versione della dll sqlite per gm, studiati le funzioni di interfaccia con il gml, scarica l'ultima versione di sqlite e crea una dll che fornisca le stesse funzioni di interfaccia, ma basata sull'ultima versione di sqlite!
Se lavori con un minimo di modularità puoi aggiornare sempre la tua sqliteforgm semplicemente ricompilando dll sqlite + Jakmodulo_di_interfaccia_con_gm :work:
L'idea è buona(quindi il porting per gm non è molto aggiornato?) Ma temo che alla fine sia esclusivamente per game maker ed attualmente ho progetti ben più grossi in mente.
L'idea era quella di sviluppare qualcosa che potesse arricchire il mio lavoro con qualcosa di nuovo(così da svagarmi un po) ed allo stesso tempo aiutare i poveri game makeriani e questo lavoro, per quanto potrebbe essere interessante, temo mi faccia solo perdere molto tempo per qualcosa che sappiamo benissimo che useranno in pochi. Ci penserò.
BaronVsCorsar ha scritto:A dire il vero mi sono sempre ripromesso di farlo io, ma non ho mai compilato una dll, e a parte qualche informazione carpita qui sul forum a sla e maz non ci ho neppure mai guardato :sisisi:
Fare una dll per game maker è piuttosto semplice, l'unica cosa un po faticosa è che puoi usare solo double e pchar(nell'interfaccia con gm si intende) di conseguenza bisogna farsi una struttura per l'immagazzinamento delle varie cose tramite indice numerico che potrebbe farti perdere un po di tempo.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Baron quella dell'esportazione in CSV é un'ottima idea, mi stavo scervellando qualche giorno fa per capire come visualizzare i dati di un db in modo semplice, al punto che pensavo di fare un'applicazione apposita. La soluzione in realtà é banale :spat:

Lo faccio sicuramente nei prossimi giorni. Riguardo alla GEXizzazione non sono molto convinto. Adoro le GEX perché nascondono gli scripts e di consguenza rendono più pulito l'editabile, ma questa estensione l'ho pensata molto open anche perché ha senso che alcuni scripts possano essere modificati o più che altro aggiunti al fine di estendere le funzionalità (pensa solo ai vari script db_op_* che definiscono le condizioni delle query). Non ci vuole molto a fare la gex in ogni caso, se ti interessa o interessa a qualcunaltro si può fare

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Jak »

due domandine da fare.
1) Non riesco a trovare una dll sqlite per game maker o perlomeno aggiornata abbastanza di recente. Trovo solo robe piuttosto vecchie. Sono io che non so cercare oppure proprio ci avrà provato un tizio solo millenni fa a fare la dll per sqlite?
Sto pensando che forse potrei provarci io(visto che forse me la studio per l'njine tanto vale provare a dllare se non è troppo complessa) ovviamente opensource.
Non guarderò la vecchia dll, mi farò tutto da 0 per adattarmi meglio all'interfaccia attuale di sqlite.
2)Volevo essere sicuro di questo:
http://www.sqlite.org/copyright.html
Praticamente dice "te la regaliamo, fa come fosse tua" giusto? Visto che vorrei appunto integrarla nell'njine sto bene attento alle varie licenze delle librerie che uso. :roll:
Voi che masticate l'inglese più di me illuminatemi.

EDIT: Source di sqlite, un header ed un .c questa si che è una libreria coi controcoioni che non ti fa bestemmiare per implementarla :rockrock:
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

So che la gex che ho fatto io tempo fa era basata su una dll già allora piuttosto vecchia. Non ho più visto altra roba quindi immagino che l'ultima disponibile sia sempre la stessa... SQLite comunque, almeno quando avevo guardato io, aveva una documentazione molto chiara e ben fatta, e come dici tu l'integrazione era fatta molto bene.

Per il punto 2 si, puoi fare quel che ti pare.

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Mysql e sqlite sono due concetti di database differenti, o meglio, hanno pregi e difetti differenti. Ho forti dubbi che uno andrA a sostituire l'altro proprio perchè coprono diverse tipologia di problema.

sqlite per esempio è pensato per essere integrato come stand alone, mysql invece ha nisogno di un'interfaccia sua e non è adatto ad essere portabile, troppo grosso. mysql peró è molto più scalabile e veloce proprio per questi motivi, sqlite non arriverà mai, e non ha senso che arrivi, a performance del genere

parlaci un po di nosql invece, io conosco solo di nome

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti