Advertisement
Guest User

Untitled

a guest
Jun 9th, 2017
331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.15 KB | None | 0 0
  1. PlayerVars <- [];
  2.  
  3. SqCore.OnPreLoad().Connect(function ()
  4. {
  5.     SQLd <- SQLite.Connection("databases/accounts.db");
  6.  
  7.     SQLd.Exec("create table if not exists [players] ([id] integer primary key autoincrement, [name] text not null)");
  8.     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))");
  9. });
  10.  
  11. function RegisterPlayerVariable(var, value = null)
  12. {
  13.     SqPlayer.newmember(var, value);
  14.     PlayerVars.push(var);
  15. }
  16.  
  17. SqPlayer.newmember("Registered", false);
  18. SqPlayer.newmember("Logged", false);
  19. SqPlayer.newmember("RID", -1);
  20.  
  21. SqCore.On().PlayerCreated.Connect(function (player)
  22. {
  23.     player.Load();
  24. });
  25.  
  26. SqCore.On().PlayerDestroyed.Connect(function (player, header, payload)
  27. {
  28.     player.Save();
  29. });
  30.  
  31. function SqPlayer::Load()
  32. {
  33.     local stmt = SQLd.Query("select id from [players] where lower(name) = '" + SQLite.Escape(this.Name.tolower()) + "'");
  34.     if (stmt.Step())
  35.     {
  36.         this.Registered    = true;
  37.         this.RID           = stmt.GetValue("id");
  38.  
  39.         local stmt2 = SQLd.Query("select idx, value from [players_vars] where uid = " + this.RID);
  40.         while (stmt2.Step()) this[stmt2.GetValue("idx")] = stmt2.GetValue("value");
  41.     }
  42. }
  43.  
  44. function SqPlayer::Save()
  45. {
  46.     if (this.Logged == true)
  47.     {
  48.         foreach (v in PlayerVars)
  49.         {
  50.             switch (typeof this[v])
  51.             {
  52.                 case "null": break;
  53.                
  54.                 case "string": SQLd.Exec("insert or replace into players_vars ([uid], [idx], [value]) values (" + this.RID + ", '" + ::SQLite.Escape(v) + "', '" + SQLite.Escape(this[v]) + "')"); break;
  55.                 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;
  56.  
  57.                 default: throw "Invalid parameter type";
  58.             }
  59.         }
  60.     }
  61. }
  62.  
  63. SqRoutine(this, function ()
  64. {
  65.     SQLd.Exec("begin transaction");
  66.     foreach (player in ::ConnectedPlayers) player.Save();
  67.     SQLd.Exec("commit");
  68. }, 1200000, 0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement