#include #define MAX_DRUGS 10 #define MAX_DRUG_NAME 35 #define DRUG_LIQUID (1) #define DRUG_GRAMS (2) #define DRUG_PILL (3) static DrugName[MAX_DRUGS][MAX_DRUG_NAME]; static DrugType[MAX_DRUGS]; static TempDrugName[MAX_PLAYERS][MAX_DRUG_NAME]; static TempDrugType[MAX_PLAYERS]; new Iterator:Drug; hook OnMySQLConnected() { inline const OnDrugsFound() { for(new i; i < cache_num_rows(); i++) { if(Iter_Free(Drug) == INVALID_ITERATOR_SLOT) { printf("The maximum amount of drugs has been reached. (%d)", Iter_Count(Drug)); break; } new drugid = INVALID_ITERATOR_SLOT; cache_get_value_name_int(i, "id", drugid); cache_get_value_name(i, "name", DrugName[drugid]); cache_get_value_name_int(i, "type", DrugType[drugid]); Iter_Add(Drug, drugid); } } MySQL_TQueryInline(MySQL_GetHandle(), using inline OnDrugsFound, "SELECT * FROM drugs"); } Drug_CreateStep(playerid, step) { switch(step) { case 1: // Name { inline _response(response, listitem, string:inputtext[]) { #pragma unused listitem if(!response) return 0; if(strlen(inputtext) < 1 || strlen(inputtext) > MAX_DRUG_NAME - 1) { SendErrorMessageF(playerid, "The drug name must be between 1 and %d characters.", MAX_DRUG_NAME - 1); return Drug_CreateStep(playerid, 1); } new drugName[MAX_DRUG_NAME]; StrCpy(drugName, inputtext, sizeof(drugName)); inline const OnNameVerified() { if(cache_num_rows()) { SendErrorMessage(playerid, "That drug name is already in use."); return Drug_CreateStep(playerid, 1); } format(TempDrugName[playerid], 24, "%s", inputtext); Drug_CreateStep(playerid, 2); } MySQL_TQueryInline(MySQL_GetHandle(), using inline OnNameVerified, "SELECT id FROM drugs WHERE name = '%e'", drugName); } Dialog_ShowCallback(playerid, using inline _response, DIALOG_STYLE_INPUT, "Create drug", "{b3b3b3}Type the drug name:", "Next", "Back"); } case 2: // Type { inline _response(response, listitem, string:inputtext[]) { #pragma unused inputtext if(!response) return Drug_CreateStep(playerid, 1); TempDrugType[playerid] = listitem + 1; new drugid = Drug_InsertToDB(TempDrugName[playerid], TempDrugType[playerid]); SendAdminWarningF(playerid, "You have created a new drug. ID: %d, Name: %s, Selling in: %s", drugid, DrugName[drugid], Drug_GetTypeName(drugid)); } 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"); } } return 1; } Drug_InsertToDB(const name[], type) { new drugid = Iter_Free(Drug); DrugType[drugid] = type; format(DrugName[drugid], MAX_DRUG_NAME, name); new query[128]; mysql_format(MySQL_GetHandle(), query, sizeof(query), "INSERT INTO drugs (id, name, type) VALUES (%d, '%e', %d)", drugid, name, type); mysql_tquery(MySQL_GetHandle(), query); Iter_Add(Drug, drugid); return drugid; } CMD:createdrug(playerid, params[]) { if(Iter_Free(Drug) == INVALID_ITERATOR_SLOT) return SendErrorMessage(playerid, "The maximum amount of drugs has been reached."); Drug_CreateStep(playerid, 1); return 1; } CMD:drugs(playerid, params[]) { new string[256]; strcat(string, "Drug name\tSelling in\n"); foreach(new i : Drug) { strcat(string, va_return("{b3b3b3}%s\t%s\n", DrugName[i], Drug_GetTypeName(i))); } Dialog_Show(playerid, DIALOG_STYLE_TABLIST_HEADERS, "Available drugs on the server", string, "Close"); return 1; } stock Drug_GetTypeName(drugid) { new string[MAX_DRUG_NAME]; switch(DrugType[drugid]) { case 1: strcat(string, "milliliters"); case 2: strcat(string, "grams"); case 3: strcat(string, "pills"); default: strcat(string, "unknown"); } return string; }