Advertisement
Guest User

Double-O-Users

a guest
Feb 15th, 2012
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.17 KB | None | 0 0
  1. #if defined _dou_included
  2.     #endinput
  3. #endif
  4. #define _dou_included
  5.  
  6. #include <a_samp>
  7. #include <Double-O-Files_2>
  8.  
  9. /*
  10. native RegisterUser(playerid, password[]);
  11. native CheckUserLogin(playerid, password[]);
  12. native LoginUser(playerid);
  13. native StoreUserData(playerid);
  14. native IsUserRegistered(playerid);
  15. native IsUserLoggedIn(playerid);
  16. native SetUserPassword(playerid, password[]);
  17. native SetAutoLogin(playerid, bool:autologin);
  18. native SetUVarInt(playerid, uvar[], value);
  19. native UpdateUVarInt(playerid, uvar[], value);
  20. native GetUVarInt(playerid, uvar[]);
  21. native SetUVarFloat(playerid, uvar[], Float:value);
  22. native UpdateUVarFloat(playerid, uvar[], Float:value);
  23. native Float:GetUVarFloat(playerid, uvar[]);
  24. native SetUVarString(playerid, uvar[], string[]);
  25. native GetUVarString(playerid, uvar[], string[], len = sizeof string);
  26. native DeleteUVar(playerid, uvar[]);
  27. */
  28.  
  29. /*
  30.  *  Definitionen:
  31.  *      Einfachheitshalber kann man all dass,
  32.  *      was unten definiert einfach definieren,
  33.  *      bevor man #include <Double-O-Users> benutzt.
  34.  */
  35.  
  36. #if !defined USER_ACCOUNT_PATH
  37.     #define USER_ACCOUNT_PATH       "Users\\%s.ini"
  38. #endif
  39.  
  40. #if !defined MAX_USER_FILE
  41.     #define MAX_USER_FILE           (MAX_UVAR_NAME)
  42. #endif
  43.  
  44. #if !defined MAX_UVAR_STRING
  45.     #define MAX_UVAR_STRING         (256)
  46. #endif
  47.  
  48. #if !defined UVAR_TAG
  49.     #define UVAR_TAG                "UVAR_"
  50. #endif
  51.  
  52. #if !defined MAX_UVAR_NAME
  53.     #define MAX_UVAR_NAME           (64)
  54. #endif
  55.  
  56. #if !defined MIN_USER_PW
  57.     #define MIN_USER_PW             (3)
  58. #endif
  59.  
  60. #if !defined INT_DATA_SECTION
  61.     #define INT_DATA_SECTION        "IntData"
  62. #endif
  63.  
  64. #if !defined FLOAT_DATA_SECTION
  65.     #define FLOAT_DATA_SECTION      "FloatData"
  66. #endif
  67.  
  68. #if !defined STRING_DATA_SECTION
  69.     #define STRING_DATA_SECTION     "StringData"
  70. #endif
  71.  
  72. /*
  73.  *  Variablen & zusätzliche Callbacks
  74.  *      Die einzige globale Variable, welche benötigt wird,
  75.  *      ist nicht ausserhalb dieser Include verwendbar.
  76.  *      Die Callbacks OnUserLogin und OnUserRegister können
  77.  *      im Gamemode oder so verwendet werden.
  78.  */
  79.  
  80. forward OnUserLogin(playerid, bool:autologin);
  81. forward OnUserRegister(playerid);
  82.  
  83. static stock
  84.     bool:UserLoggedIn[MAX_PLAYERS char];
  85.    
  86. /*
  87.  *  Callback-Hooks
  88.  */
  89.    
  90. public OnPlayerConnect(playerid)
  91. {
  92.     new
  93.         userfile[MAX_USER_FILE];
  94.        
  95.     DOF2::SetCaseSensitivity(false);
  96.        
  97.     userfile = GetUserFile(playerid);
  98.     UserLoggedIn{playerid} = false;
  99.    
  100.     if (DOF2::FileExists(userfile))
  101.     {
  102.         new
  103.             bool:autologin = DOF2::GetBool(userfile, "AutoLogin", "Settings"),
  104.             ip[16];
  105.            
  106.         if (autologin)
  107.         {
  108.             GetPlayerIp(playerid, ip, sizeof ip);
  109.             if (!strcmp(ip, DOF2::GetString(userfile, "IP", "Settings")))
  110.                 LoginUser(playerid);
  111.         }
  112.     }
  113.     return CallLocalFunction("DOU_OnPlayerConnect", "i", playerid);
  114. }
  115.  
  116. #if defined _ALS_OnPlayerConnect
  117.     #undef OnPlayerConnect
  118. #else
  119.     #define _ALS_OnPlayerConnect
  120. #endif
  121. #define OnPlayerConnect DOU_OnPlayerConnect
  122. forward DOU_OnPlayerConnect(playerid);
  123.  
  124. public OnPlayerDisconnect(playerid, reason)
  125. {
  126.     if (UserLoggedIn{playerid})
  127.     {
  128.         StoreUserData(playerid);
  129.         UserLoggedIn{playerid} = false;
  130.     }
  131.     DOF2::Exit();
  132.     return CallLocalFunction("DOU_OnPlayerDisconnect", "ii", playerid, reason);
  133. }
  134.  
  135. #if defined _ALS_OnPlayerDisconnect
  136.     #undef OnPlayerDisconnect
  137. #else
  138.     #define _ALS_OnPlayerDisconnect
  139. #endif
  140. #define OnPlayerDisconnect DOU_OnPlayerDisconnect
  141. forward DOU_OnPlayerDisconnect(playerid, reason);
  142.  
  143. /*
  144.  *  Funktionen
  145.  */
  146.  
  147. static stock GetUserFile(playerid)
  148. {
  149.     new
  150.         string[MAX_USER_FILE];
  151.        
  152.     GetPlayerName(playerid, string, sizeof string);
  153.     format(string, sizeof string, USER_ACCOUNT_PATH, DOF2::udb_encode(string));
  154.     return string;
  155. }
  156.  
  157. stock RegisterUser(playerid, password[], bool:autologin = false)
  158. {
  159.     new
  160.         userfile[MAX_USER_FILE];
  161.    
  162.     userfile = GetUserFile(playerid);
  163.    
  164.     if (strlen(password) < MIN_USER_PW || DOF2::FileExists(userfile))
  165.         return 0;
  166.        
  167.     new
  168.         string[MAX_UVAR_NAME],
  169.         day,
  170.         month,
  171.         year;
  172.        
  173.     DOF2::CreateFile(userfile);
  174.     DOF2::SetInt(userfile, "PasswordHash", DOF2::num_hash(password), "Settings");
  175.     getdate(year, month, day);
  176.     format(string, sizeof string, "%d.%d.%d", day, month, year);
  177.     DOF2::SetString(userfile, "RegistrationDate", string, "Settings");
  178.     GetPlayerIp(playerid, string, sizeof string);
  179.     DOF2::SetString(userfile, "RegistrationIP", string, "Settings");
  180.     DOF2::SetString(userfile, "IP", string, "Settings");
  181.     DOF2::SetBool(userfile, "AutoLogin", autologin, "Settings");
  182.     DOF2::WriteFile();
  183.     UserLoggedIn{playerid} = true;
  184.     CallRemoteFunction("OnUserRegister", "i", playerid);
  185.     return 1;
  186. }
  187.  
  188. // Passwort überprüfen.
  189. stock bool:CheckUserLogin(playerid, password[])
  190. {
  191.     new
  192.         userfile[MAX_USER_FILE];
  193.        
  194.     userfile = GetUserFile(playerid);
  195.    
  196.     if (!password[0] || !DOF2::FileExists(userfile))
  197.         return false;
  198.        
  199.     return (DOF2::num_hash(password) == DOF2::GetInt(userfile, "PasswordHash", "Settings"));
  200. }
  201.  
  202. // Spieler einloggen. Sollte erst angewendet werden, wenn Passwort mit CheckUserLogin überprüft wurde.
  203. stock LoginUser(playerid)
  204. {
  205.     if (!UserLoggedIn{playerid} && LoadUserData(playerid))
  206.     {
  207.         new
  208.             ip[16];
  209.            
  210.         UserLoggedIn{playerid} = true;
  211.         GetPlayerIp(playerid, ip, sizeof ip);
  212.         DOF2::SetString(GetUserFile(playerid), "IP", ip, "Settings");
  213.         CallRemoteFunction("OnUserLogin", "i", playerid);
  214.         return 1;
  215.     }
  216.     return 0;
  217. }
  218.  
  219. // Unwichtig. Für dich.
  220. OnDefaultParseFile(extraid, value[], key[], tag[], file[])
  221. {
  222.     #pragma unused file
  223.     #pragma unused value
  224.    
  225.     /*
  226.      *  Diese Funktion wird von DOF2::ParseFile aufgerufen.
  227.      *  Da weder die Anzahl noch die Namen der zu ladenden UVars
  228.      *  bestimmt ist, überprüft man, aus welcher Sektion ein Eintrag aus
  229.      *  dem Userfile kommt und speichert diese dann einfach als UVar ab.
  230.      *  Sektionen:
  231.      *      - IntData
  232.      *      - FloatData
  233.      *      - StringData
  234.      */
  235.    
  236.     if (IsPlayerConnected(extraid) && tag[0])
  237.     {
  238.         if (!strcmp(tag, INT_DATA_SECTION, true))
  239.         {
  240.             new
  241.                 varname[MAX_UVAR_NAME] = UVAR_TAG;
  242.                
  243.             strcat(varname, key);
  244.             SetPVarInt(extraid, varname, DOF2::ParseInt());
  245.             return 1;
  246.         }
  247.        
  248.         if (!strcmp(tag, FLOAT_DATA_SECTION, true))
  249.         {
  250.             new
  251.                 varname[MAX_UVAR_NAME] = UVAR_TAG;
  252.                
  253.             strcat(varname, key);
  254.             SetPVarFloat(extraid, varname, DOF2::ParseFloat());
  255.             return 1;
  256.         }
  257.        
  258.         if (!strcmp(tag, STRING_DATA_SECTION, true))
  259.         {
  260.             new
  261.                 varname[MAX_UVAR_NAME] = UVAR_TAG;
  262.                
  263.             strcat(varname, key);
  264.             SetPVarString(extraid, varname, value);
  265.             return 1;
  266.         }
  267.     }
  268.     return 0;
  269. }
  270.  
  271. // Finger weg davon.
  272. static stock LoadUserData(playerid)
  273. {
  274.     new
  275.         userfile[MAX_USER_FILE];
  276.        
  277.     userfile = GetUserFile(playerid);
  278.    
  279.     if (!DOF2::FileExists(userfile))
  280.         return 0;
  281.        
  282.     return DOF2::ParseFile(userfile, playerid, true);
  283. }
  284.  
  285. // Zur Sicherheit zwischendurch abspeichern? Benutze das hier.
  286. stock StoreUserData(playerid)
  287. {
  288.     if (!UserLoggedIn{playerid})
  289.         return 0;
  290.        
  291.     new
  292.         upperindex = GetPVarsUpperIndex(playerid),
  293.         varname[MAX_UVAR_NAME],
  294.         string[MAX_UVAR_STRING],
  295.         userfile[MAX_USER_FILE],
  296.         taglen = strlen(UVAR_TAG);
  297.        
  298.     userfile = GetUserFile(playerid);
  299.    
  300.     if (!DOF2::FileExists(userfile))
  301.         return 0;
  302.        
  303.     for (new i = 0; i < upperindex; i++)
  304.     {
  305.         /*
  306.          *  Alle PVars durchgehen, überprüfen ob der Name der PVar mit UVAR_ beginnt,
  307.          *  falls ja, Typ der PVar bestimmen und in die entsprechende Sektion
  308.          *  im Userfile speichern.
  309.          */
  310.          
  311.         GetPVarNameAtIndex(playerid, i, varname, sizeof varname);
  312.         if (!strcmp(varname, UVAR_TAG, .length = taglen))
  313.         {
  314.             switch (GetPVarType(playerid, varname))
  315.             {
  316.                 case PLAYER_VARTYPE_INT:
  317.                     DOF2::SetInt(userfile, varname[taglen], GetPVarInt(playerid, varname), INT_DATA_SECTION);
  318.                
  319.                 case PLAYER_VARTYPE_FLOAT:
  320.                     DOF2::SetFloat(userfile, varname[taglen], GetPVarFloat(playerid, varname), FLOAT_DATA_SECTION);
  321.                    
  322.                 case PLAYER_VARTYPE_STRING:
  323.                 {
  324.                     GetPVarString(playerid, varname, string, sizeof string);
  325.                     DOF2::SetString(userfile, varname[taglen], string, STRING_DATA_SECTION);
  326.                 }
  327.             }
  328.         }
  329.     }
  330.    
  331.     DOF2::WriteFile();
  332.     return 1;
  333. }
  334.  
  335. // Ist Spieler eingeloggt?
  336. stock bool:IsUserLoggedIn(playerid)
  337.     return UserLoggedIn{playerid};
  338.  
  339. // Ist Spieler registriert?
  340. stock bool:IsUserRegistered(playerid)
  341.     return DOF2::FileExists(GetUserFile(playerid));
  342.    
  343. // Passwort ändern?
  344. stock SetUserPassword(playerid, password[])
  345. {
  346.     if (!UserLoggedIn{playerid})
  347.         return 0;
  348.        
  349.     new
  350.         userfile[MAX_USER_FILE];
  351.        
  352.     userfile = GetUserFile(playerid);
  353.    
  354.     if (strlen(password) < MIN_USER_PW || !DOF2::FileExists(userfile))
  355.         return 0;
  356.        
  357.     DOF2::SetInt(userfile, "PasswordHash", DOF2::num_hash(password), "Settings");
  358.     return 1;
  359. }
  360.  
  361. // Autologin für Spieler einstellen.
  362. stock SetAutoLogin(playerid, bool:autologin)
  363. {
  364.     if (!UserLoggedIn{playerid})
  365.         return 0;
  366.        
  367.     new
  368.         userfile[MAX_USER_FILE];
  369.        
  370.     userfile = GetUserFile(playerid);
  371.    
  372.     if (!DOF2::FileExists(userfile))
  373.         return 0;
  374.        
  375.     DOF2::SetBool(userfile, "AutoLogin", autologin, "Settings");
  376.     return 1;
  377. }
  378.  
  379. /*
  380.  *  UVars:
  381.  *      UVar anstatt PVar anwenden, falls automatisch gespeichert werden soll.
  382.  */
  383.  
  384. stock SetUVarInt(playerid, uvar[], value)
  385. {
  386.     new
  387.         varname[MAX_UVAR_NAME] = UVAR_TAG;
  388.        
  389.     strcat(varname, uvar);
  390.     return SetPVarInt(playerid, varname, value);
  391. }
  392.  
  393. // Dies rechnet einfach 'value' zum derzeitigen Wert hinzu (oder zieht ab, falls 'value' negativ).
  394. stock UpdateUVarInt(playerid, uvar[], value)
  395. {
  396.     new
  397.         varname[MAX_UVAR_NAME] = UVAR_TAG;
  398.        
  399.     strcat(varname, uvar);
  400.     return SetPVarInt(playerid, varname, value + GetPVarInt(playerid, varname));
  401. }
  402.  
  403. stock GetUVarInt(playerid, uvar[])
  404. {
  405.     new
  406.         varname[MAX_UVAR_NAME] = UVAR_TAG;
  407.        
  408.     strcat(varname, uvar);
  409.     return GetPVarInt(playerid, varname);
  410. }
  411.  
  412. stock SetUVarFloat(playerid, uvar[], Float:value)
  413. {
  414.     new
  415.         varname[MAX_UVAR_NAME] = UVAR_TAG;
  416.        
  417.     strcat(varname, uvar);
  418.     return SetPVarFloat(playerid, varname, value);
  419. }
  420.  
  421. // Dies rechnet einfach 'value' zum derzeitigen Wert hinzu (oder zieht ab, falls 'value' negativ).
  422. stock UpdateUVarFloat(playerid, uvar[], Float:value)
  423. {
  424.     new
  425.         varname[MAX_UVAR_NAME] = UVAR_TAG;
  426.        
  427.     strcat(varname, uvar);
  428.     return SetPVarFloat(playerid, varname, value + GetPVarFloat(playerid, varname));
  429. }
  430.  
  431. stock Float:GetUVarFloat(playerid, uvar[])
  432. {
  433.     new
  434.         varname[MAX_UVAR_NAME] = UVAR_TAG;
  435.        
  436.     strcat(varname, uvar);
  437.     return GetPVarFloat(playerid, varname);
  438. }
  439.  
  440. stock SetUVarString(playerid, uvar[], string[])
  441. {
  442.     new
  443.         varname[MAX_UVAR_NAME] = UVAR_TAG;
  444.        
  445.     strcat(varname, uvar);
  446.     return SetPVarString(playerid, varname, string);
  447. }
  448.  
  449. stock GetUVarString(playerid, uvar[], string[], len = sizeof string)
  450. {
  451.     new
  452.         varname[MAX_UVAR_NAME] = UVAR_TAG;
  453.        
  454.     strcat(varname, uvar);
  455.     return GetPVarString(playerid, varname, string, len);
  456. }
  457.  
  458. stock DeleteUVar(playerid, uvar[])
  459. {
  460.     new
  461.         varname[MAX_UVAR_NAME] = UVAR_TAG,
  462.         userfile[MAX_USER_FILE];
  463.        
  464.     userfile = GetUserFile(playerid);  
  465.     strcat(varname, uvar);
  466.    
  467.     if (DOF2::FileExists(userfile) && UserLoggedIn{playerid})
  468.     {
  469.         switch GetPVarType(playerid, varname)
  470.         {
  471.             case PLAYER_VARTYPE_INT:
  472.                 DOF2::Unset(userfile, uvar, INT_DATA_SECTION);
  473.                
  474.             case PLAYER_VARTYPE_FLOAT:
  475.                 DOF2::Unset(userfile, uvar, FLOAT_DATA_SECTION);
  476.                
  477.             case PLAYER_VARTYPE_STRING:
  478.                 DOF2::Unset(userfile, uvar, STRING_DATA_SECTION);
  479.         }
  480.     }
  481.     return DeletePVar(playerid, varname);
  482. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement