Advertisement
B-Matt

MySQL ORM Gamemode

Nov 21st, 2013
529
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.74 KB | None | 0 0
  1. //Created by: B-Matt
  2. //(c) 2013.
  3.  
  4. #include <a_samp>
  5. #include <a_mysql>
  6. #include <sscanf2>
  7. #include <zcmd>
  8.  
  9. #define MAX_PLAYER_PASS                         (24)
  10.  
  11. enum player_enum
  12. {
  13.     ORM:ORMId,
  14.     pId,
  15.     pName[MAX_PLAYER_NAME],
  16.     pPassword[MAX_PLAYER_PASS],
  17.     pSkin,
  18.     pMoney,
  19.     pLevel,
  20.     pBanned,
  21.     pGun,
  22.     pAmmo,
  23.     Float:pPosX,
  24.     Float:pPosY,
  25.     Float:pPosZ
  26. }
  27. new
  28.     PlayerInfo[MAX_PLAYERS][player_enum];
  29.        
  30. new
  31.     SQL = -1,
  32.     start_tick = 0;
  33.  
  34. //Stocks
  35. stock ResetPlayerEnums(playerid)
  36. {
  37.     for(new player_enum:e; e < player_enum; ++e)
  38.         PlayerInfo[playerid][e] = 0;
  39. }
  40.  
  41. stock RegisterPlayer(playerid, password[])
  42. {
  43.     new
  44.         pname[MAX_PLAYER_NAME];
  45.     GetPlayerName(playerid, pname, sizeof(pname));
  46.     format(PlayerInfo[playerid][pName], MAX_PLAYER_NAME, "%s", pname);
  47.     format(PlayerInfo[playerid][pPassword], MAX_PLAYER_PASS, "%s", password);
  48.    
  49.     PlayerInfo[playerid][pSkin] = 1;
  50.     PlayerInfo[playerid][pMoney] = 2000;
  51.     PlayerInfo[playerid][pLevel] = 1;
  52.     PlayerInfo[playerid][pBanned] = 0;
  53.     PlayerInfo[playerid][pGun] = 0;
  54.     PlayerInfo[playerid][pAmmo] = 0;
  55.     PlayerInfo[playerid][pPosX] = 300.6595;
  56.     PlayerInfo[playerid][pPosY] = 1412.0372;
  57.     PlayerInfo[playerid][pPosZ] = 8.4545;                  
  58.     orm_insert(PlayerInfo[playerid][ORMId], "OnPlayerRegister", "d", playerid);
  59.     return 1;
  60. }
  61. //Custom Callbacks
  62. forward OnPlayerLoad(playerid);
  63. public OnPlayerLoad(playerid)
  64. {
  65.     printf("Player load took: %d ms", GetTickCount() - start_tick);
  66.     start_tick = 0;
  67.    
  68.     switch(orm_errno(PlayerInfo[playerid][ORMId]))
  69.     {
  70.             case ERROR_OK: ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Login", "Please insert your password.", "Login", "Abort");
  71.             case ERROR_NO_DATA: ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Register", "Please insert your password.", "Register", "Abort");
  72.     }
  73.     orm_setkey(PlayerInfo[playerid][ORMId], "id");
  74.     return 1;
  75. }
  76. forward OnPlayerRegister(playerid);
  77. public OnPlayerRegister(playerid)
  78. {
  79.     printf("Playerid %d took SQL database ID %d.", playerid, PlayerInfo[playerid][pId]);
  80.     SpawnPlayer(playerid);
  81.    
  82.     printf("Player insert took: %d ms", GetTickCount() - start_tick);
  83.     start_tick = 0;
  84.     return 1;
  85. }
  86.  
  87. main() { }
  88.  
  89. public OnGameModeInit()
  90. {
  91.     SetGameModeText("MySQL r33 ORM Test");
  92.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  93.    
  94.     SQL = mysql_connect("127.0.0.1", "root", "samp", "");
  95.     mysql_log(LOG_DEBUG);
  96.     return 1;
  97. }
  98.  
  99. public OnGameModeExit()
  100. {
  101.     return 1;
  102. }
  103.  
  104. public OnPlayerConnect(playerid)
  105. {
  106.     ResetPlayerEnums(playerid);
  107.     start_tick = GetTickCount();
  108.     GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
  109.     new ORM:ormid = PlayerInfo[playerid][ORMId] = orm_create("accounts");
  110.    
  111.     orm_addvar_int(ormid, PlayerInfo[playerid][pId], "id");
  112.     orm_addvar_string(ormid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME+1, "name");
  113.     orm_addvar_string(ormid, PlayerInfo[playerid][pPassword], MAX_PLAYER_PASS, "password");
  114.     orm_addvar_int(ormid, PlayerInfo[playerid][pSkin], "skin");
  115.     orm_addvar_int(ormid, PlayerInfo[playerid][pMoney], "money");
  116.     orm_addvar_int(ormid, PlayerInfo[playerid][pLevel], "level");
  117.     orm_addvar_int(ormid, PlayerInfo[playerid][pBanned], "banned");
  118.     orm_addvar_int(ormid, PlayerInfo[playerid][pGun], "gun");
  119.     orm_addvar_int(ormid, PlayerInfo[playerid][pAmmo], "ammo");
  120.     orm_addvar_float(ormid, PlayerInfo[playerid][pPosX], "posx");
  121.     orm_addvar_float(ormid, PlayerInfo[playerid][pPosY], "posy");
  122.     orm_addvar_float(ormid, PlayerInfo[playerid][pPosZ], "posz");
  123.    
  124.     orm_setkey(ormid, "name");
  125.     orm_select(ormid, "OnPlayerLoad", "d", playerid);
  126.     return 1;
  127. }
  128.  
  129. public OnPlayerDisconnect(playerid, reason)
  130. {
  131.     orm_update(PlayerInfo[playerid][ORMId]);
  132.     for(new player_enum:e; e < player_enum; ++e) {
  133.         PlayerInfo[playerid][e] = 0;
  134.     }
  135.     orm_destroy(PlayerInfo[playerid][ORMId]);
  136.     return 1;
  137. }
  138.  
  139. public OnPlayerSpawn(playerid)
  140. {
  141.     SetPlayerColor(playerid, -1);
  142.     SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
  143.     SetPlayerPos(playerid, PlayerInfo[playerid][pPosX], PlayerInfo[playerid][pPosY], PlayerInfo[playerid][pPosZ]);
  144.     GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
  145.     SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
  146.     GivePlayerWeapon(playerid, PlayerInfo[playerid][pGun], PlayerInfo[playerid][pAmmo]);
  147.     return 1;
  148. }
  149.  
  150. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  151. {
  152.     switch(dialogid)
  153.     {
  154.             case 1: //Login
  155.             {
  156.                     if(!response) return Kick(playerid);
  157.                     if(PlayerInfo[playerid][pBanned]) return SendClientMessage(playerid, -1, "You are banned from this server!");
  158.                     if(!strcmp(inputtext, PlayerInfo[playerid][pPassword], false, MAX_PLAYER_PASS))
  159.                     {
  160.                             SpawnPlayer(playerid);
  161.                     }
  162.                     else return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Login", "Please insert your password. Wrong password!", "Login", "Abort");
  163.                     return 1;
  164.             }
  165.             case 2: //Register
  166.             {
  167.                     if(!response) return Kick(playerid);
  168.                     start_tick = GetTickCount();
  169.                     RegisterPlayer(playerid, inputtext);
  170.                     return 1;
  171.             }
  172.     }
  173.     return 0;
  174. }
  175.  
  176. //Commands
  177. CMD:money(playerid, params[])
  178. {
  179.     new
  180.             gplayerid, money;
  181.     if(sscanf(params, "ud", gplayerid, money)) return SendClientMessage(playerid, -1, "USAGE: /money [playerid/part of name][money]");
  182.     GivePlayerMoney(gplayerid, money);
  183.     PlayerInfo[playerid][pMoney] += money;
  184.     new
  185.         mysqlquery[500];
  186.     start_tick = GetTickCount();
  187.     mysql_format(SQL, mysqlquery, sizeof(mysqlquery), "UPDATE `accounts` SET `money` = '%d' WHERE `id` = '%d'", PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pId]);
  188.     mysql_tquery(SQL, mysqlquery, "", "");
  189.     orm_apply_cache(PlayerInfo[playerid][ORMId], 0);
  190.    
  191.     printf("Player update money (format+tquery) took: %d ms", GetTickCount() - start_tick);
  192.     start_tick = 0;
  193.     return 1;
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement