drugs.inc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include <YSI_Coding\y_hooks>
  2. #define MAX_DRUGS 10
  3. #define MAX_DRUG_NAME 35
  4. #define DRUG_LIQUID (1)
  5. #define DRUG_GRAMS (2)
  6. #define DRUG_PILL (3)
  7. static DrugName[MAX_DRUGS][MAX_DRUG_NAME];
  8. static DrugType[MAX_DRUGS];
  9. static TempDrugName[MAX_PLAYERS][MAX_DRUG_NAME];
  10. static TempDrugType[MAX_PLAYERS];
  11. new Iterator:Drug<MAX_DRUGS>;
  12. hook OnMySQLConnected()
  13. {
  14. inline const OnDrugsFound()
  15. {
  16. for(new i; i < cache_num_rows(); i++)
  17. {
  18. if(Iter_Free(Drug) == INVALID_ITERATOR_SLOT)
  19. {
  20. printf("The maximum amount of drugs has been reached. (%d)", Iter_Count(Drug));
  21. break;
  22. }
  23. new drugid = INVALID_ITERATOR_SLOT;
  24. cache_get_value_name_int(i, "id", drugid);
  25. cache_get_value_name(i, "name", DrugName[drugid]);
  26. cache_get_value_name_int(i, "type", DrugType[drugid]);
  27. Iter_Add(Drug, drugid);
  28. }
  29. }
  30. MySQL_TQueryInline(MySQL_GetHandle(), using inline OnDrugsFound, "SELECT * FROM drugs");
  31. }
  32. Drug_CreateStep(playerid, step)
  33. {
  34. switch(step)
  35. {
  36. case 1: // Name
  37. {
  38. inline _response(response, listitem, string:inputtext[])
  39. {
  40. #pragma unused listitem
  41. if(!response) return 0;
  42. if(strlen(inputtext) < 1 || strlen(inputtext) > MAX_DRUG_NAME - 1)
  43. {
  44. SendErrorMessageF(playerid, "The drug name must be between 1 and %d characters.", MAX_DRUG_NAME - 1);
  45. return Drug_CreateStep(playerid, 1);
  46. }
  47. new drugName[MAX_DRUG_NAME];
  48. StrCpy(drugName, inputtext, sizeof(drugName));
  49. inline const OnNameVerified()
  50. {
  51. if(cache_num_rows())
  52. {
  53. SendErrorMessage(playerid, "That drug name is already in use.");
  54. return Drug_CreateStep(playerid, 1);
  55. }
  56. format(TempDrugName[playerid], 24, "%s", inputtext);
  57. Drug_CreateStep(playerid, 2);
  58. }
  59. MySQL_TQueryInline(MySQL_GetHandle(), using inline OnNameVerified, "SELECT id FROM drugs WHERE name = '%e'", drugName);
  60. }
  61. Dialog_ShowCallback(playerid, using inline _response, DIALOG_STYLE_INPUT, "Create drug", "{b3b3b3}Type the drug name:", "Next", "Back");
  62. }
  63. case 2: // Type
  64. {
  65. inline _response(response, listitem, string:inputtext[])
  66. {
  67. #pragma unused inputtext
  68. if(!response) return Drug_CreateStep(playerid, 1);
  69. TempDrugType[playerid] = listitem + 1;
  70. new drugid = Drug_InsertToDB(TempDrugName[playerid], TempDrugType[playerid]);
  71. SendAdminWarningF(playerid, "You have created a new drug. ID: %d, Name: %s, Selling in: %s", drugid, DrugName[drugid], Drug_GetTypeName(drugid));
  72. }
  73. Dialog_ShowCallback(playerid, using inline _response, DIALOG_STYLE_TABLIST_HEADERS, "Create drug", "Choose the drug type\n{b3b3b3}Liquid\n{b3b3b3}Grams\n{b3b3b3}Pill", "Next", "Back");
  74. }
  75. }
  76. return 1;
  77. }
  78. Drug_InsertToDB(const name[], type)
  79. {
  80. new drugid = Iter_Free(Drug);
  81. DrugType[drugid] = type;
  82. format(DrugName[drugid], MAX_DRUG_NAME, name);
  83. new query[128];
  84. mysql_format(MySQL_GetHandle(), query, sizeof(query), "INSERT INTO drugs (id, name, type) VALUES (%d, '%e', %d)", drugid, name, type);
  85. mysql_tquery(MySQL_GetHandle(), query);
  86. Iter_Add(Drug, drugid);
  87. return drugid;
  88. }
  89. CMD:createdrug(playerid, params[])
  90. {
  91. if(Iter_Free(Drug) == INVALID_ITERATOR_SLOT) return SendErrorMessage(playerid, "The maximum amount of drugs has been reached.");
  92. Drug_CreateStep(playerid, 1);
  93. return 1;
  94. }
  95. CMD:drugs(playerid, params[])
  96. {
  97. new string[256];
  98. strcat(string, "Drug name\tSelling in\n");
  99. foreach(new i : Drug)
  100. {
  101. strcat(string, va_return("{b3b3b3}%s\t%s\n", DrugName[i], Drug_GetTypeName(i)));
  102. }
  103. Dialog_Show(playerid, DIALOG_STYLE_TABLIST_HEADERS, "Available drugs on the server", string, "Close");
  104. return 1;
  105. }
  106. stock Drug_GetTypeName(drugid)
  107. {
  108. new string[MAX_DRUG_NAME];
  109. switch(DrugType[drugid])
  110. {
  111. case 1: strcat(string, "milliliters");
  112. case 2: strcat(string, "grams");
  113. case 3: strcat(string, "pills");
  114. default: strcat(string, "unknown");
  115. }
  116. return string;
  117. }