Guest User

Wallet [CONCEPT]

a guest
Sep 26th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.55 KB | None | 0 0
  1. #define FILTERSCRIPT
  2.  
  3. #include <a_samp>
  4. #include <zcmd>
  5. #include <sscanf>
  6. #include <YSI\y_ini>
  7.  
  8. #define buywallet 100
  9. #define playerfile          "Users/%s.ini"
  10.  
  11. enum PlayerInfo
  12. {
  13.     pWallet, pCash
  14. }
  15.  
  16. new
  17.     rp[MAX_PLAYERS],
  18.     rp1[MAX_PLAYERS],
  19.     pInfo[MAX_PLAYERS][PlayerInfo];
  20. //--------------------------------------------------------------------
  21. #if defined FILTERSCRIPT
  22. public OnFilterScriptInit()
  23. {
  24.     for(new i, j = GetPlayerPoolSize(); i <= j; i++)
  25.     {
  26.         if(fexist(UserPath(i)))
  27.         {
  28.             INI_ParseFile(UserPath(i), "LoadUser_%s", .bExtra = true, .extra = i);
  29.         }
  30.     }
  31.     return 1;
  32. }
  33.  
  34. public OnFilterScriptExit()
  35. {
  36.     for(new i, j = GetPlayerPoolSize(); i <= j; i++)
  37.     {
  38.         SaveStats(i);
  39.     }
  40.     return 1;
  41. }
  42. #endif
  43.  
  44. public OnPlayerConnect(playerid)
  45. {
  46.     if(fexist(UserPath(playerid)))
  47.     {
  48.         INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
  49.     }
  50.     //pInfo[playerid][pWallet] = 1;
  51.     return 1;
  52. }
  53.  
  54. public OnPlayerDisconnect(playerid, reason)
  55. {
  56.     new name[MAX_PLAYER_NAME], tname[MAX_PLAYER_NAME], targetid, money = GetPlayerMoney(playerid);
  57.  
  58.     GetPlayerName(playerid, name, sizeof(name));
  59.     GetPlayerName(targetid, tname, sizeof(tname));
  60.     switch(reason)
  61.     {
  62.         case 0: // Timeout / Crashed
  63.         {
  64.             if(rp[playerid] == 1 || rp1[targetid] ==1)
  65.             {
  66.                 if(pInfo[targetid][pWallet] == 0)
  67.                 {
  68.                     new string [200];
  69.                     format(string,sizeof(string), "You've recovered your wallet(0$). Reason: %s(%d) has crashed.", name, playerid);
  70.                     SendClientMessage(playerid, -1, string);
  71.                     pInfo[targetid][pWallet] = 1;
  72.                     pInfo[playerid][pWallet] = 0;
  73.                     pInfo[playerid][pCash] = 0;
  74.                 } else return 1;
  75.             }
  76.             return 1;
  77.         }
  78.         case 1: // Left
  79.         {
  80.             if(rp[playerid] == 1 || rp1[targetid] ==1)
  81.             {
  82.                 if(pInfo[targetid][pWallet] == 0)
  83.                 {
  84.                     new string [200];
  85.                     format(string,sizeof(string), "You've recovered your wallet(0$). Reason: %s(%d) has left.", name, playerid);
  86.                     SendClientMessage(playerid, -1, string);
  87.                     pInfo[targetid][pWallet] = 1;
  88.                     pInfo[playerid][pWallet] = 0;
  89.                     pInfo[playerid][pCash] = 0;
  90.                 } else return 1;
  91.             }
  92.         }
  93.         case 2: // Kicked / Banned
  94.         {
  95.             if(rp[playerid] == 1 || rp1[targetid] ==1)
  96.             {
  97.                 if(pInfo[targetid][pWallet] == 0)
  98.                 {
  99.                     new string [200];
  100.                     GivePlayerMoney(targetid, money);
  101.                     GivePlayerMoney(playerid, -money);
  102.                     format(string,sizeof(string), "You've recovered your wallet(%d$). Reason: %s(%d) has been kicked/banned.", name, playerid, money);
  103.                     SendClientMessage(playerid, -1, string);
  104.                     pInfo[targetid][pWallet] = 1;
  105.                     pInfo[playerid][pWallet] = 0;
  106.                     pInfo[playerid][pCash] = 0;
  107.                 } else return 1;
  108.             }
  109.         }
  110.     }
  111.     SaveStats(playerid);
  112.     return 1;
  113. }
  114.  
  115. public OnPlayerDeath(playerid, killerid, reason)
  116. {
  117.     new money = GetPlayerMoney(playerid), string[150], name[MAX_PLAYER_NAME], tname[MAX_PLAYER_NAME];
  118.    
  119.     GivePlayerMoney(killerid, money);
  120.     GivePlayerMoney(playerid, -money);
  121.    
  122.     GetPlayerName(killerid, name, sizeof(name));
  123.     GetPlayerName(playerid, tname, sizeof(tname));
  124.    
  125.     if(rp[playerid] == 1 || rp1[killerid] ==1)
  126.     {
  127.         format(string,sizeof(string), "You're killed by %s(%d) and lost your '%d$'.", name, killerid, money);
  128.         SendClientMessage(playerid, -1, string);
  129.        
  130.         format(string,sizeof(string), "You killed %s(%d) and recovered your money and also looted his cash('%d$').", tname, playerid, money);
  131.         SendClientMessage(killerid, -1, string);
  132.        
  133.         pInfo[playerid][pWallet] = 0;
  134.         pInfo[killerid][pWallet] = 1;
  135.        
  136.     } else SendClientMessage(playerid, -1, "You'll not recieve any money he robbed from you.");
  137.     return 1;
  138. }
  139.  
  140. CMD:rob(playerid, params[])
  141. {
  142.     new rob = random(10), targetid, Float:x, Float:y, Float:z, name[MAX_PLAYER_NAME], tname[MAX_PLAYER_NAME], money = GetPlayerMoney(targetid), string[200];
  143.     GetPlayerPos(targetid, x, y, z);
  144.  
  145.     GetPlayerName(playerid, name, sizeof(name));
  146.     GetPlayerName(targetid, tname, sizeof(tname));
  147.        
  148.     if(sscanf(params, "u", targetid)) return SendClientMessage(playerid, -1, "SERVER: /rob <playerid>");
  149.     if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, -1, "SERVER: Target ID not found(offline).");
  150.    
  151.     if(!IsPlayerInRangeOfPoint(playerid, 5, x, y, z)) return SendClientMessage(playerid, -1, "SERVER: Target ID is not in range.");
  152.     if(GetPlayerMoney(targetid) < 1) return SendClientMessage(playerid, -1, "SERVER: Target ID doesn't have any cash.");
  153.     if(pInfo[playerid][pWallet] == 0) return SendClientMessage(playerid, -1, "SERVER: You don't have wallet to store money, /buywallet.");
  154.     if(pInfo[targetid][pWallet] == 0) return SendClientMessage(playerid, -1, "SERVER: Target ID doesn't have any wallet to be robbed.");
  155.    
  156.     if(rob == 0 || rob == 2 || rob == 4 || rob == 6 || rob == 8 || rob == 10)
  157.     {
  158.         GivePlayerMoney(playerid, money);
  159.         GivePlayerMoney(targetid, -money);
  160.         format(string, sizeof(string), "You robbed %d$ from %s(%d). If player kills you then you'll loose money you've robbed!", money, tname, targetid);
  161.         SendClientMessage(playerid, -1, string);
  162.         format(string,sizeof(string), "%s(%d) has robbed your wallet containing '%d$'.", name, playerid, money);
  163.         SendClientMessage(targetid, -1, string);
  164.         SendClientMessage(targetid, -1, "Kill the player to regain your wallet before they hide it somewhere else you'll loose money.");
  165.         pInfo[targetid][pWallet] = 0;
  166.         rp[playerid] = 1;
  167.         rp1[targetid] = 1;
  168.         SetTimerEx("robbedplayer", 30000, false, "i", playerid);
  169.         SetTimerEx("beingrobbed", 30000, false, "i", targetid);
  170.     }
  171.     else
  172.     {
  173.         SendClientMessage(playerid, -1, "Player noticed you robbing them, attempt failed.");
  174.         format(string,sizeof(string), "%s(%d) tried to rob your wallet.", name, playerid);
  175.         SendClientMessage(targetid, -1, string);
  176.     }
  177.     return 1;
  178. }
  179.  
  180. CMD:wallet(playerid, params[])
  181. {
  182.     new string [150];
  183.     format(string,sizeof(string), "SERVER: Your wallet contains the same amount of money your HUD shows (%d).", GetPlayerMoney(playerid));
  184.     SendClientMessage(playerid, -1, string);
  185.     return 1;
  186. }
  187.  
  188. CMD:buywallet(playerid, params[])
  189. {
  190.     if(pInfo[playerid][pWallet] == 0)
  191.     {
  192.         new string [150];
  193.         format(string,sizeof(string), "SERVER: You bought a wallet for '%d'. Your money will be saved on exit. Beaware of being pickpocketed!", buywallet);
  194.         SendClientMessage(playerid, -1, string);
  195.         GivePlayerMoney(playerid, -buywallet);
  196.     } else SendClientMessage(playerid, -1, "SERVER: You already have a wallet.");
  197.     return 1;
  198. }
  199.    
  200. stock UserPath(playerid)
  201. {
  202.     new string[128], vname[MAX_PLAYER_NAME];
  203.     GetPlayerName(playerid, vname, sizeof(vname));
  204.     format(string, sizeof(string), playerfile, vname);
  205.     return string;
  206. }
  207.  
  208. forward SaveStats(playerid);
  209. public SaveStats(playerid)
  210. {
  211.     if(pInfo[playerid][pWallet] == 1)
  212.     {
  213.         new INI:File = INI_Open(UserPath(playerid));
  214.         INI_SetTag(File,"WALLET-DATA");
  215.         INI_WriteInt(File, "Wallet", pInfo[playerid][pWallet]);
  216.         INI_WriteInt(File, "Cash", GetPlayerMoney(playerid));
  217.         INI_Close(File);
  218.     }
  219.     else
  220.     {
  221.         new INI:File = INI_Open(UserPath(playerid));
  222.         INI_SetTag(File,"WALLET-DATA");
  223.         INI_WriteInt(File, "Wallet", 0);
  224.         INI_WriteInt(File, "Cash", 0);
  225.         INI_Close(File);
  226.     }
  227. }
  228.  
  229. forward robbedplayer(playerid);
  230. public robbedplayer(playerid)
  231. {
  232.     rp[playerid] = 0;
  233.     SendClientMessage(playerid, -1, "You're safe now from loosing money you've just robbed by getting killed.");
  234.     return 1;
  235. }
  236.  
  237. forward beingrobbed(targetid);
  238. public beingrobbed(targetid)
  239. {
  240.     rp1[targetid] = 0;
  241.     SendClientMessage(targetid, -1, "You're no longer being able to recover your money by killing that person.");
  242.     return 1;
  243. }
Add Comment
Please, Sign In to add comment