Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PlayerVars <- [];
- SqCore.OnPreLoad().Connect(function ()
- {
- SQLd <- SQLite.Connection("databases/accounts.db");
- SQLd.Exec("create table if not exists [players] ([id] integer primary key autoincrement, [name] text not null)");
- SQLd.Exec("create table if not exists [players_vars] ([uid] integer not null, [idx] varchar(24) not null, [value] not null, primary key(uid, idx))");
- });
- function RegisterPlayerVariable(var, value = null)
- {
- SqPlayer.newmember(var, value);
- PlayerVars.push(var);
- }
- SqPlayer.newmember("Registered", false);
- SqPlayer.newmember("Logged", false);
- SqPlayer.newmember("RID", -1);
- SqCore.On().PlayerCreated.Connect(function (player)
- {
- player.Load();
- });
- SqCore.On().PlayerDestroyed.Connect(function (player, header, payload)
- {
- player.Save();
- });
- function SqPlayer::Load()
- {
- local stmt = SQLd.Query("select id from [players] where lower(name) = '" + SQLite.Escape(this.Name.tolower()) + "'");
- if (stmt.Step())
- {
- this.Registered = true;
- this.RID = stmt.GetValue("id");
- local stmt2 = SQLd.Query("select idx, value from [players_vars] where uid = " + this.RID);
- while (stmt2.Step()) this[stmt2.GetValue("idx")] = stmt2.GetValue("value");
- }
- }
- function SqPlayer::Save()
- {
- if (this.Logged == true)
- {
- foreach (v in PlayerVars)
- {
- switch (typeof this[v])
- {
- case "null": break;
- case "string": SQLd.Exec("insert or replace into players_vars ([uid], [idx], [value]) values (" + this.RID + ", '" + ::SQLite.Escape(v) + "', '" + SQLite.Escape(this[v]) + "')"); break;
- case "integer": case "float": SQLd.Exec("insert or replace into players_vars ([uid], [idx], [value]) values (" + this.RID + ", '" + ::SQLite.Escape(v) + "', " + SQLite.Escape(this[v] + "") + ")"); break;
- default: throw "Invalid parameter type";
- }
- }
- }
- }
- SqRoutine(this, function ()
- {
- SQLd.Exec("begin transaction");
- foreach (player in ::ConnectedPlayers) player.Save();
- SQLd.Exec("commit");
- }, 1200000, 0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement