Advertisement
friezakinght

Drug System v2.0

Jul 9th, 2014
548
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.12 KB | None | 0 0
  1. /*Drug System made by Friezakinght
  2. Current Version: 2.0
  3.  
  4. Commands:
  5. /buydrugs
  6. /usedrugs
  7. /mydrugs
  8. /givedrugs
  9. /setdrugs (only for RCON admins)
  10. /agivedrugs (only for RCON admins)
  11. /checkdrugs (only for RCON admins)
  12.  
  13. Author/Scripter: friezakinght
  14. Thanks to:
  15. Y_Less for - foreach, sscanf, Y_ini
  16. Zeex for - ZCMD
  17.  
  18. You can modify the script how you like, however, please keep the credits.
  19. Currently working on v3.0, which might be the final version, thank you for downloading my script.
  20.  
  21. Changelog v2.0:
  22.  
  23. Added /givedrugs command. - Players can easily give drugs to other players.
  24. Added /agivedrugs command. - RCON Admins can give a player a specific amounts of drug
  25. Added /checkdrugs command. - RCON Admins can see a specific player's drug amount
  26. Changed some text colors so it would look more user-friendly
  27. Now the maximum amount of drugs you can buy per purchase is 500g
  28. Now players can type /usedrugs 1/2/3 [1 is for Cocaine, 2 is for Weed and 3 is for Heroine]
  29. Now the player's HUD won't hide when he gets high.
  30. Now when the player wants to get high with weed he will get a cigar in his hand.
  31. When the player uses a drug it gives him a message saying what drug he used(snort cocaine, smoke a joint, inject heroine)
  32. Now you can easily change the price per gram at #define DRUG_GRAM_PRICE
  33. Fixed the .AMX file, in version 1 it's size was like 4,1mb, now it's 350kb+.
  34. */
  35.  
  36. #include <a_samp>
  37. #include <YSI\y_ini>
  38. #include <zcmd>
  39. #include <sscanf2>
  40. #include <foreach>
  41.  
  42. #define USER_FILE "UserDrugs/%s.ini"
  43. #define DRUG_SHOP_MENU 1
  44. #define DRUG_GRAM_PRICE 500
  45.  
  46. #define RED 0xFF0000FF
  47. #define BLUE 0x999999
  48. #define WHITE 0xFFFFFFAA
  49. #define GREEN 0x33AA33AA
  50.  
  51. enum PlayerInfo
  52. {
  53.     pName,
  54.     pDrugs
  55. }
  56. new PDrugs[MAX_PLAYERS][PlayerInfo];
  57. new IsHigh[MAX_PLAYERS];
  58.  
  59. public OnFilterScriptInit()
  60. {
  61.     print("\n--------------------------------------");
  62.     print(" Drug System by friezakinght v2.0");
  63.     print("--------------------------------------\n");
  64.    
  65.     return 1;
  66. }
  67.  
  68. public OnFilterScriptExit()
  69. {
  70.     foreach(Player, p)
  71.     {
  72.         if(IsPlayerConnected(p))
  73.         {
  74.             SaveUserDrugStats(p);
  75.         }
  76.     }
  77.     return 1;
  78. }
  79.  
  80. public OnPlayerConnect(playerid)
  81. {
  82.     if(fexist(DrugFilePath(playerid)))
  83.     {
  84.         INI_ParseFile(DrugFilePath(playerid), "LoadDrugData_%s", .bExtra = true, .extra = playerid);
  85.     }
  86.     else
  87.     {
  88.         new playerName[MAX_PLAYER_NAME];
  89.         GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
  90.         new INI:ufile = INI_Open(DrugFilePath(playerid));
  91.         INI_SetTag(ufile, "general");
  92.         INI_WriteString(ufile, "pName", playerName);
  93.         INI_WriteInt(ufile, "pDrugs",  0);
  94.         INI_Close(ufile);
  95.     }
  96.     return 1;
  97. }
  98.  
  99. public OnPlayerDisconnect(playerid, reason)
  100. {
  101.     SaveUserDrugStats(playerid);
  102.     return 1;
  103. }
  104.  
  105. public OnPlayerSpawn(playerid)
  106. {
  107.     IsHigh[playerid] = 0;
  108.     SetPlayerDrunkLevel(playerid, 0);
  109.     return 1;
  110. }
  111.  
  112. public OnPlayerDeath(playerid, killerid, reason)
  113. {
  114.     IsHigh[playerid] = 0;
  115.     SetPlayerWeather(playerid, 1);
  116.     SetPlayerDrunkLevel(playerid, 0);
  117.     return 1;
  118. }
  119.  
  120. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  121. {
  122.     if(dialogid == DRUG_SHOP_MENU && response == 1)
  123.     {
  124.         if(strlen(inputtext) <= 0) { ShowPlayerDialog(playerid, DRUG_SHOP_MENU, DIALOG_STYLE_INPUT,"{006600}Buy drugs","{FFFFFF}Enter the amount of {006600}grams {FFFFFF}you would like to {00FF00}buy{FFFFFF}:","Buy","Close"); }
  125.         else if(!DrugAmountIsNumeric(inputtext)) { ShowPlayerDialog(playerid, DRUG_SHOP_MENU, DIALOG_STYLE_INPUT,"{006600}Buy drugs","{FFFFFF}Enter the amount of {006600}grams {FFFFFF}you would like to {00FF00}buy{FFFFFF}","Buy","Close"); }
  126.         else
  127.         {
  128.         new
  129.             pcash = GetPlayerMoney(playerid),
  130.             str[128],
  131.             amount = strval(inputtext),
  132.             cash = amount * DRUG_GRAM_PRICE;
  133.         if(amount <= 500)
  134.         {
  135.             if(pcash >= cash)
  136.             {
  137.                 GivePlayerMoney(playerid, - cash);
  138.                 format(str, sizeof(str), "You bought {00FF00}%d {FFFFFF}grams of drugs for {00FF00}$%d{FFFFFF}.", amount, cash);
  139.                 SendClientMessage(playerid, -1, str);
  140.                 PDrugs[playerid][pDrugs] += amount;
  141.                 SaveUserDrugStats(playerid);
  142.             }
  143.             else
  144.             {
  145.                 format(str, sizeof(str), "You don't have enough money for %dg of drugs!", amount);
  146.                 SendClientMessage(playerid, RED, str);
  147.             }
  148.         }
  149.         else
  150.         {
  151.             format(str, sizeof(str), "You cannot buy more than 500g of drugs per purchase!");
  152.             SendClientMessage(playerid, RED, str);
  153.         }
  154.         }
  155.     }
  156.     return 1;
  157. }
  158.  
  159. CMD:buydrugs(playerid, params[])
  160. {
  161.     if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid, -1, "You need to be connected to buy drugs!");
  162.     ShowPlayerDialog(playerid, DRUG_SHOP_MENU, DIALOG_STYLE_INPUT,"{006600}Buy drugs","{FFFFFF}Enter the amount of {006600}grams {FFFFFF}you would like to {00FF00}buy{FFFFFF}","Buy","Close");
  163.     return true;
  164. }
  165.  
  166. CMD:usedrugs(playerid, params[])
  167. {
  168.     if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid, BLUE, "You're not even connected to the server.");
  169.     if(IsHigh[playerid] == 1) return SendClientMessage(playerid, BLUE, "You're already high!" );
  170.     if(PDrugs[playerid][pDrugs] == 0) return SendClientMessage(playerid, BLUE, "You don't have a gram of drugs");
  171.     new drugname[32];
  172.     if(sscanf(params,"s[32]",drugname))
  173.     {
  174.         SendClientMessage(playerid, BLUE, "USAGE: /usedrugs [drugname/number]");
  175.         SendClientMessage(playerid, BLUE, "CHOICES: Cocaine [1](75HP), Weed [2](50HP), Heroine [3](25HP).");
  176.  
  177.         return 1;
  178.     }
  179.     new Float:PHealth;
  180.     if(strcmp(drugname, "cocaine", true) == 0 || strcmp(drugname, "1", true) == 0)
  181.     {
  182.         GetPlayerHealth(playerid, PHealth);
  183.         if(PDrugs[playerid][pDrugs] >= 3)
  184.         {
  185.             SetPlayerWeather(playerid, -66);
  186.             SetPlayerDrunkLevel(playerid, 4000);
  187.             SetPlayerTime(playerid,12,00);
  188.             GameTextForPlayer(playerid, "~r~The drug effect will be gone in a minute", 3000, 5);
  189.             IsHigh[playerid] = 1;
  190.             PDrugs[playerid][pDrugs] -= 3;
  191.             SaveUserDrugStats(playerid);
  192.             SendClientMessage(playerid, WHITE, "You snorted 3g of cocaine.");
  193.             SetTimer("IsHighTimer", 120000, false);
  194.             if(PHealth <= 75)
  195.             {
  196.                 GivePlayerHealth(playerid, 25);
  197.             }
  198.             else
  199.             {
  200.                 SetPlayerHealth(playerid, 100);
  201.             }
  202.         }
  203.         else
  204.         {
  205.             SendClientMessage(playerid, BLUE, "You need 3g of drugs to snort cocaine.");
  206.         }
  207.     }
  208.     if(strcmp(drugname, "weed", true) == 0 || strcmp(drugname, "2", true) == 0)
  209.     {
  210.         if(PDrugs[playerid][pDrugs] >= 2)
  211.         {
  212.             GetPlayerHealth(playerid, PHealth);
  213.             SetPlayerWeather(playerid, -66);
  214.             SetPlayerDrunkLevel(playerid, 4000);
  215.             SetPlayerTime(playerid,12,00);
  216.             GameTextForPlayer(playerid, "~r~The drug effect will be gone in a minute", 3000, 5);
  217.             IsHigh[playerid] = 1;
  218.             PDrugs[playerid][pDrugs] -= 2;
  219.             SaveUserDrugStats(playerid);
  220.             SetPlayerSpecialAction(playerid, SPECIAL_ACTION_SMOKE_CIGGY);
  221.             SendClientMessage(playerid, WHITE, "You lit a joint and started smoking.");
  222.             SetTimer("IsHighTimer", 120000, false);
  223.             if(PHealth <= 50)
  224.             {
  225.                 GivePlayerHealth(playerid, 50);
  226.             }
  227.             else
  228.             {
  229.                 SetPlayerHealth(playerid, 100);
  230.             }
  231.         }
  232.         else
  233.         {
  234.             SendClientMessage(playerid, BLUE, "You need 2g of drugs to smoke weed.");
  235.         }
  236.  
  237.     }
  238.     if(strcmp(drugname, "heroine", true) == 0 || strcmp(drugname, "3", true) == 0)
  239.     {
  240.         if(PDrugs[playerid][pDrugs] >= 1)
  241.         {
  242.             SetPlayerWeather(playerid, -66);
  243.             SetPlayerDrunkLevel(playerid, 4000);
  244.             SetPlayerTime(playerid,12,00);
  245.             GameTextForPlayer(playerid, "~r~The drug effect will be gone in a minute", 3000, 5);
  246.             IsHigh[playerid] = 1;
  247.             PDrugs[playerid][pDrugs] -= 1;
  248.             SaveUserDrugStats(playerid);
  249.             SendClientMessage(playerid, WHITE, "You injected 1g of heroine into your veins.");
  250.             SetTimer("IsHighTimer", 120000, false);
  251.             if(PHealth <= 25)
  252.             {
  253.                 GivePlayerHealth(playerid, 75);
  254.             }
  255.             else
  256.             {
  257.                 SetPlayerHealth(playerid, 100);
  258.             }
  259.         }
  260.         else
  261.         {
  262.             SendClientMessage(playerid, BLUE, "You need 1g of drugs to inject heroine.");
  263.         }
  264.     }
  265.     return 1;
  266. }
  267.  
  268. CMD:mydrugs(playerid, params[])
  269. {
  270.     new cline[100];
  271.     format(cline, sizeof(cline), "Drugs: %dg", PDrugs[playerid][pDrugs]);
  272.     SendClientMessage(playerid, GREEN, cline);
  273.     return 1;
  274. }
  275.  
  276. CMD:setdrugs(playerid, params[])
  277. {
  278.     new fstr[200];
  279.     new damount, id;
  280.     if(sscanf(params, "ud", id, damount)) return SendClientMessage(playerid, RED, "[USAGE]: /setdrugs [player id] [amount]");
  281.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid, RED, "Player not found.");
  282.     if(IsPlayerAdmin(playerid))
  283.     {
  284.         PDrugs[id][pDrugs] = damount;
  285.         PlayerPlaySound(id,1085,0.0,0.0,0.0);
  286.         format(fstr, sizeof(fstr), "You have set %s [%d] drug amount to {00FF00}%d{FFFFFF}.", GetName(id), id, damount);
  287.         SendClientMessage(playerid, WHITE, fstr);
  288.         format(fstr, sizeof(fstr), "Admin %s [%d] has set your drug amount to {00FF00}%d{FFFFFF}.", GetName(playerid), playerid, damount);
  289.         SendClientMessage(id, WHITE, fstr);
  290.         SaveUserDrugStats(id);
  291.     }
  292.     else
  293.     {
  294.         SendClientMessage(playerid, RED, "You don't have the permission to acces this command!");
  295.     }
  296.     return true;
  297. }
  298.  
  299. CMD:givedrugs(playerid, params[])
  300. {
  301.     new fstr[200];
  302.     new damount, id;
  303.     if(sscanf(params, "ud", id, damount)) return SendClientMessage(playerid, RED, "[USAGE]: /givedrugs [player id] [amount]");
  304.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid, RED, "Player not found.");
  305.     if(PDrugs[playerid][pDrugs] >= damount)
  306.     {
  307.         PDrugs[id][pDrugs] += damount;
  308.         PDrugs[playerid][pDrugs] -= damount;
  309.         PlayerPlaySound(id,1085,0.0,0.0,0.0);
  310.         format(fstr, sizeof(fstr), "You have given %s [%d] {00FF00}%d{FFFFFF} drug grams.", GetName(id), id, damount);
  311.         SendClientMessage(playerid, WHITE, fstr);
  312.         format(fstr, sizeof(fstr), "%s [%d] has given you {00FF00}%d{FFFFFF} grams of drugs.", GetName(playerid), playerid, damount);
  313.         SendClientMessage(id, WHITE, fstr);
  314.         SaveUserDrugStats(id);
  315.         SaveUserDrugStats(playerid);
  316.     }
  317.     else
  318.     {
  319.         SendClientMessage(playerid, RED, "You don't have enough grams of drugs!");
  320.     }
  321.     return true;
  322. }
  323.  
  324. CMD:agivedrugs(playerid, params[])
  325. {
  326.     new fstr[200];
  327.     new damount, id;
  328.     if(sscanf(params, "ud", id, damount)) return SendClientMessage(playerid, RED, "[USAGE]: /agivedrugs [player id] [amount]");
  329.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid, RED, "Player not found.");
  330.     if(IsPlayerAdmin(playerid))
  331.     {
  332.         PDrugs[id][pDrugs] += damount;
  333.         PlayerPlaySound(id,1085,0.0,0.0,0.0);
  334.         format(fstr, sizeof(fstr), "You have given %s [%d] {00FF00}%d{FFFFFF} drug grams.", GetName(id), id, damount);
  335.         SendClientMessage(playerid, WHITE, fstr);
  336.         format(fstr, sizeof(fstr), "Admin %s [%d] has given you {00FF00}%d{FFFFFF} grams of drugs.", GetName(playerid), playerid, damount);
  337.         SendClientMessage(id, WHITE, fstr);
  338.         SaveUserDrugStats(id);
  339.     }
  340.     else
  341.     {
  342.         SendClientMessage(playerid, RED, "You don't have the permission to acces this command!");
  343.     }
  344.     return true;
  345. }
  346.  
  347. CMD:checkdrugs(playerid, params[])
  348. {
  349.     new id;
  350.     if(sscanf(params, "u", id)) return SendClientMessage(playerid, RED, "[USAGE]: /checkdrugs [player id]");
  351.     if(!IsPlayerConnected(id)) return SendClientMessage(playerid, RED, "Player not found.");
  352.     if(IsPlayerAdmin(playerid))
  353.     {
  354.         new msg[48];
  355.         format(msg, sizeof(msg), "[Name]: %s [%d] [Drugs]: %dg", GetName(id), id, PDrugs[id][pDrugs]);
  356.         SendClientMessage(playerid, BLUE, msg);
  357.     }
  358.     else
  359.     {
  360.          SendClientMessage(playerid, RED, "You don't have the permission to acces this command!");
  361.     }
  362.     return true;
  363. }
  364.  
  365. stock SaveUserDrugStats(playerid)
  366. {
  367.     if(IsPlayerConnected(playerid))
  368.     {
  369.         new playerName[MAX_PLAYER_NAME];
  370.         GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
  371.         new file[40];
  372.         format(file, sizeof(file), USER_FILE, playerName);
  373.         new INI:ufile = INI_Open(file);
  374.         INI_SetTag(ufile, "general");
  375.         INI_WriteString(ufile, "pName", playerName);
  376.         INI_WriteInt(ufile, "pDrugs",  PDrugs[playerid][pDrugs]);
  377.         INI_Close(ufile);
  378.     }
  379.     return 1;
  380. }
  381.  
  382. forward LoadDrugData_general(playerid, name[], value[]);
  383. public LoadDrugData_general(playerid, name[], value[])
  384. {
  385.     INI_Int("pName", PDrugs[playerid][pName]);
  386.     INI_Int("pDrugs", PDrugs[playerid][pDrugs]);
  387.     return 1;
  388. }
  389.  
  390. forward IsHighTimer(playerid);
  391. public IsHighTimer(playerid)
  392. {
  393.     IsHigh[playerid] = 0;
  394.     SetPlayerWeather(playerid, 1);
  395.     SetPlayerDrunkLevel(playerid, 0);
  396. }
  397.  
  398. stock DrugAmountIsNumeric(const string[])
  399. {
  400.     new i;
  401.     while(string[i] != '\0') //end of string
  402.     {
  403.         if (string[i] > '9' || string[i] < '0'){return 0;}
  404.         i++;
  405.     }
  406.     return 1;
  407. }
  408.  
  409. stock GivePlayerHealth(playerid,Float:Health)
  410. {
  411.     new Float:health; GetPlayerHealth(playerid,health);
  412.     SetPlayerHealth(playerid,health+Health);
  413. }
  414.  
  415. stock GetName(playerid)
  416. {
  417.     new Name[24];
  418.     GetPlayerName(playerid, (Name), sizeof(Name));
  419.     return Name;
  420. }
  421.  
  422. stock DrugFilePath(playerid)
  423. {
  424.     new string[128],playername[MAX_PLAYER_NAME];
  425.     GetPlayerName(playerid,playername,sizeof(playername));
  426.     format(string,sizeof(string),USER_FILE,playername);
  427.     return string;
  428. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement