SQLite 0.2 - Profesores - 01.04.2018
How to load module:
Add to config
Code: <module src="SQLite.dll" type="server" /> // For windows
<module src="SQLite.so" type="server" /> // For linux
Functions:
userpointer handler = sqlite3_openDB(string dBname);
bool result = sqlite3_closeDB(userpointer handler);
bool result = sqlite3_exec(userpointer handler, string query);
bool result = sqlite3_execSelect(userpointer handler, string data, string query);
string errMsg = sqlite3_errmsg(userpointer handler);
integer errCode = sqlite3_errcode(userpointer handler);
string errStr = sqlite3_errstr(integer errCode);
Callbacks:
sqlite3_onSelect(string data*, table assocTable);
Example usage:
Squirrel Script local db; addEventHandler("onInit", function() { initAntyCheat(true); dB = sqlite3_openDB("server.db"); }); addEventHandler("onPlayerCommand", function(pid, cmd, params) { switch(cmd) { case "saveme": saveAccount(pid); break; case "loadme": loadAccount(pid); break; }; }); addEventHandler("sqlite3_onSelect", function(wtfIT, assoc) { local subStrings = split(wtfIT, "_"); switch(subStrings[0]) { case "la": { giveItem(subStrings[1].tointeger(), Items.id(assoc["instance"]), assoc["amount"].tointeger()); }; }; }); function saveAccount(pid) { local equipment = getEquipment(pid); //it's function from my anty-cheat (available from forum) local result = sqlite3_exec(dB, format("%s%s';", "SELECT id FROM 'items_", getPlayerName(pid))); if(result != true) { sendMessageToPlayer(pid, 0, 255, 0, "(SQLITE3): Save EQ started.."); sqlite3_exec(dB, format("CREATE TABLE 'items_%s' ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `instance` TEXT, `amount` INTEGER );", getPlayerName(pid))); foreach(k, v in equipment) { if(typeof Items.name(v[0]) == "string") { result = sqlite3_exec(dB, format("INSERT INTO 'items_%s' (`instance`, `amount`) VALUES ('%s', %d);", getPlayerName(pid), Items.name(v[0]), v[1])); if(result != true) { sendMessageToPlayer(pid, 255, 0, 0, "(SQLITE3): Unexpected error in save eq."); LogString("database", format("SQLITE3 error in save account: '%s'", getPlayerName(pid))); return 1; }; } else { LogString("database", format("NULL VALUE IN EQ: '%s'", getPlayerName(pid))); return 1; }; }; sendMessageToPlayer(pid, 0, 255, 0, "(SQLITE3): Equipment has been successfully saved"); } else { sendMessageToPlayer(pid, 0, 255, 0, "(SQLITE3): Save EQ started."); sqlite3_exec(dB, format("DELETE FROM 'items_%s';", getPlayerName(pid))); foreach(k, v in equipment) { if(typeof Items.name(v[0]) == "string") { result = sqlite3_exec(dB, format("INSERT INTO 'items_%s' (`instance`, `amount`) VALUES ('%s', %d);", getPlayerName(pid), Items.name(v[0]), v[1])); if(result != true) { sendMessageToPlayer(pid, 255, 0, 0, "(SQLITE3): Unexpected error in save eq."); LogString("database", format("SQLITE3 error in save account: '%s'", getPlayerName(pid))); return 1; }; } else { LogString("database", format("NULL VALUE IN EQ: '%s'", getPlayerName(pid))); return 1; }; }; sendMessageToPlayer(pid, 0, 255, 0, "(SQLITE3): Equipment has been successfully saved"); }; }; function loadAccount(pid) { local result = sqlite3_exec(dB, format("SELECT id FROM 'items_%s';", getPlayerName(pid))); if(result != true) { sendMessageToPlayer(pid, 255, 0, 0, "(SQLITE3): Your account doesn't exist in server database."); LogString("database", format("%s try to load data from doesn't exist account", getPlayerName(pid))); } else { clearInventory(pid); //it's from my AC callClientFunc(pid, "_clearInventory"); //it's from my AC sqlite3_execSelect(dB, "la_" + pid, format("SELECT * FROM 'items_%s';", getPlayerName(pid))); sendMessageToPlayer(pid, 0, 255, 0, "(SQLITE3): Equipment has been successfully loaded."); }; };
0.2 Download:
Binares: https://bitbucket.org/Profesores/sqsqlite/downloads/
Source code: https://bitbucket.org/Profesores/sqsqlite/src
* - Data provided in the 2th argument of sqlite3_execSelect()
RE: SQLite 0.1 - Profesores - 03.04.2018
Update 0.2:
Changelog:
-Fixed possible stack overflow,
-Staticly linking gcc libs for linux,
-Staticly linking SQLite lib for windows,
-Unification of types.
New functions:
string errMsg = sqlite3_errmsg(userpointer handler);
integer errCode = sqlite3_errcode(userpointer handler);
string errStr = sqlite3_errstr(integer errCode);
|