shape1
shape2
shape3
shape4
shape7
shape8

Система промокодов


Alvaro

Новичок
Пользователь
20.10.2014
20
4
0
Доброго времени суток, поскольку многие из вас ищут систему промокодов, то я решил выложить её для вас. 

Написанная не мною, вырезка из мода Just RP. 

Для начала создадим диалог, ко всем дефайнам: 

#define D_PROMO 15000

Непосредственно сама команда:

cmd:pmenu(playerid, params[])
{
if(GetString(GetName(playerid), NGA1) || GetString(GetName(playerid), NGA2) || GetString(GetName(playerid), NGA4))
{
ShowPlayerDialog(playerid,D_PROMO,DIALOG_STYLE_LIST,"{43A5DF}Меню промокодов","\
1. Создать промокод \n\
2. Действующие промокоды \n\
3. Активированные промокоды \n\
4. Заблокированные промокоды \n\
{F66B6D}5. Заблокировать промокод \n\
{F66B6D}6. Удалить промокод","Далее","Выход");
}
return true;
}

Ко всем диалогам: 

case D_PROMO:
{
if(!response) return 1;
switch(listitem)
{
case 0: ShowPlayerDialog(playerid,D_PROMO+1,DIALOG_STYLE_INPUT,"Создание промокода | {FE6060}Шаг: 1","{FFFFFF}Вам необходимо придумать промокод\nДлина промокода должна быть 6 символов, состоящая из цифр и букв латинского алфавита\n\nВведите промокод в строчку ниже:","Далее","Назад");
case 1: mysql_function_query(dbHandle, "SELECT * FROM `promo` WHERE activate = '0' AND block = '0'", true, "ShowDPromo", "i", playerid);
case 2: mysql_function_query(dbHandle, "SELECT * FROM `promo` WHERE activate = '1'", true, "ShowAPromo", "i", playerid);
case 3: mysql_function_query(dbHandle, "SELECT * FROM `promo` WHERE block = '1'", true, "ShowBPromo", "i", playerid);
case 4: ShowPlayerDialog(playerid,D_PROMO+2,DIALOG_STYLE_INPUT,"{F66B6D}Блокировка промокода","{FFFFFF}Введите ниже промокод, который хотите заблокировать:","Далее","Назад");
case 5: ShowPlayerDialog(playerid,D_PROMO+3,DIALOG_STYLE_INPUT,"{F66B6D}Удаление промокода","{FFFFFF}Введите ниже промокод, который хотите удалить:","Далее","Назад");
}
}
case D_PROMO+2:
{
if(!response)
{
return ShowPlayerDialog(playerid,D_PROMO,DIALOG_STYLE_LIST,"{F2E70F}Меню промокодов","\
1. Создать промокод \n\
2. Действующие промокоды \n\
3. Активированные промокоды \n\
4. Заблокированные промокоды \n\
{F66B6D}5. Заблокировать промокод \n\
{F66B6D}6. Удалить промокод","Далее","Выход");
}
new qstring[128];
mysql_format(dbHandle, qstring, sizeof(qstring), "SELECT * FROM `promo` WHERE `name`='%s'", inputtext);
mysql_tquery(dbHandle, qstring, "BlockPromo", "is", playerid,inputtext);
}
case D_PROMO+3:
{
if(!response)
{
return ShowPlayerDialog(playerid,D_PROMO,DIALOG_STYLE_LIST,"{F2E70F}Меню промокодов","\
1. Создать промокод \n\
2. Действующие промокоды \n\
3. Активированные промокоды \n\
4. Заблокированные промокоды \n\
{F66B6D}5. Заблокировать промокод \n\
{F66B6D}6. Удалить промокод","Далее","Выход");
}
new qstring[128];
mysql_format(dbHandle, qstring, sizeof(qstring), "SELECT * FROM `promo` WHERE `name`='%s'", inputtext);
mysql_tquery(dbHandle, qstring, "DeletePromo", "is", playerid,inputtext);
}
case D_PROMO+1:
{
if(!response)
{
ShowPlayerDialog(playerid,D_PROMO,DIALOG_STYLE_LIST,"{F2E70F}Меню промокодов","\
1. Создать промокод \n\
2. Действующие промокоды \n\
3. Активированные промокоды \n\
4. Заблокированные промокоды \n\
{F66B6D}5. Заблокировать промокод \n\
{F66B6D}6. Удалить промокод","Далее","Выход");
return 1;
}
new totalstring[712];
if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid,D_PROMO+1,DIALOG_STYLE_INPUT,"Создание промокода | {FE6060}Шаг: 1","{FFFFFF}Вам необходимо придумать промокод\nДлина промокода должна быть 3 символов, состоящая из цифр и букв латинского алфавита\n\nВведите промокод в строчку ниже:","Далее","Назад");
SetPVarString(playerid,"PROMO",inputtext);
strcat(totalstring,"{FFFFFF}Теперь необходимо ввести тип приза, количество выигрыша, количество активаций\n\n{4AA9CF}Типы:\n");
strcat(totalstring,"{FFFFFF}1. VIP аккаунт\n");
strcat(totalstring,"2. Игровая валюта\n");
strcat(totalstring,"3. Рубли\n\n");
strcat(totalstring,"Если указан тип '1', то в качестве количества приза - указываете дни, в течении которых будет действовать VIP аккаунт\n");
strcat(totalstring,"Если указаны типы '2' и '3', то соответственно указываете количество игровой валюты, и рублей для выигрыша.\n\n");
strcat(totalstring,"{F6F7D8}Указывать все значения нужно через запятую!\n");
strcat(totalstring,"Пример: 1,30,10\n");
strcat(totalstring,"Где 1 - тип(VIP), 30 - кол-во дней, 10 - число активаций");
ShowPlayerDialog(playerid,D_PROMO+4,DIALOG_STYLE_INPUT,"Создание промокода | {FE6060}Шаг: 2",totalstring,"Далее","Назад");
}
case D_PROMO+4:
{
new totalstring[512];
if(!response)
{
strcat(totalstring,"{FFFFFF}Теперь необходимо ввести тип приза, количество выигрыша, количество активаций\n\n{4AA9CF}Типы:\n");
strcat(totalstring,"{FFFFFF}1. VIP аккаунт\n");
strcat(totalstring,"2. Игровая валюта\n");
strcat(totalstring,"3. Рубли\n\n");
strcat(totalstring,"Если указан тип '1', то в качестве количества приза - указываете дни, в течении которых будет действовать VIP аккаунт\n");
strcat(totalstring,"Если указаны типы '2' и '3', то соответственно указываете количество игровой валюты, и рублей для выигрыша.\n\n");
strcat(totalstring,"{F6F7D8}Указывать все значения нужно через запятую!\n");
strcat(totalstring,"Пример: 1,30,10\n");
strcat(totalstring,"Где 1 - тип приза(VIP), 30 - количество дней, 10 - число доступных активаций промокода");
ShowPlayerDialog(playerid,D_PROMO+4,DIALOG_STYLE_INPUT,"Создание промокода | {FE6060}Шаг: 2",totalstring,"Далее","Назад");
return 1;
}
new numb[3];
if(sscanf(inputtext, "p<,>iii",numb[0],numb[1],numb[2]))
{
strcat(totalstring,"{FFFFFF}Теперь необходимо ввести тип приза, количество выигрыша, количество активаций\n\n{4AA9CF}Типы:\n");
strcat(totalstring,"{FFFFFF}1. VIP аккаунт\n");
strcat(totalstring,"2. Игровая валюта\n");
strcat(totalstring,"3. Рубли\n\n");
strcat(totalstring,"Если указан тип '1', то в качестве количества приза - указываете дни, в течении которых будет действовать VIP аккаунт\n");
strcat(totalstring,"Если указаны типы '2' и '3', то соответственно указываете количество игровой валюты, и рублей для выигрыша.\n\n");
strcat(totalstring,"{F6F7D8}Указывать все значения нужно через запятую!\n");
strcat(totalstring,"Пример: 1,30,10\n");
strcat(totalstring,"Где 1 - тип приза(VIP), 30 - количество дней, 10 - число доступных активаций промокода");
ShowPlayerDialog(playerid,D_PROMO+4,DIALOG_STYLE_INPUT,"Создание промокода | {FE6060}Шаг: 2",totalstring,"Далее","Назад");
return 1;
}
SetPVarInt(playerid,"TYPEPROMO",numb[0]),SetPVarInt(playerid,"AMOUNTPROMO",numb[1]),SetPVarInt(playerid,"ACTIVATEPROMO",numb[2]);
new qstring[128],promoname[16];
GetPVarString(playerid, "PROMO", promoname, sizeof(promoname));
mysql_format(dbHandle, qstring, sizeof(qstring), "SELECT * FROM `promo` WHERE `name`='%s'", promoname);
mysql_tquery(dbHandle, qstring, "CreatePromo", "is", playerid,promoname);
}
case D_PROMO+5:
{
if(!response) return 1;
new qstring[128];
SetPVarString(playerid, "CODE", inputtext);
mysql_format(dbHandle, qstring, sizeof(qstring), "SELECT * FROM `promo_activations` WHERE `account_id` = '%d'",PI[playerid][pID]);
mysql_tquery(dbHandle, qstring, "CheckPromo", "i", playerid);
}

В самый конец мода:

forward ShowDPromo(playerid);
public ShowDPromo(playerid)
{
new rows,fields;
cache_get_data(rows, fields);
if(!rows) return SendClientMessage(playerid, -1, "{2789FA}Ошибка: {FFFFFF}действующих промокодов не обнаружено.");
new promolist[2000],code[24],priztext[24],string[100],typepriz,amountpriz,activate;
strcat(promolist, "{2789FA}№:\t{FFFFFF}Промокод:\t{FFFFFF}Тип приза:\t{FFFFFF}Количество:\t{2789FA}Число активаций:\n");
for(new i = 0; i < rows; i++)
{
cache_get_row(i, 0, code, dbHandle, 24);
typepriz = cache_get_row_int(i, 5, dbHandle);
amountpriz = cache_get_row_int(i, 6, dbHandle);
activate = cache_get_row_int(i, 3, dbHandle);
switch(typepriz)
{
case 1: priztext = "VIP аккаунт", format(string,sizeof string, "%dдней",amountpriz);
case 2: priztext = "Игр. валюта", format(string,sizeof string, "%dруб.",amountpriz);
case 3: priztext = "Рубли", format(string,sizeof string, "%dруб.",amountpriz);
}
format(string,sizeof(string),"{2789FA}%d \t{FFFFFF}%s \t{FFFFFF}%s \t{FFFFFF}%s \t{2789FA}%d\n", i+1, code, priztext,string, activate);
strcat(promolist, string);
}
ShowPlayerDialog(playerid, D_NULL, DIALOG_STYLE_LIST,"{FFFFFF}Список действующих промокодов", promolist, "Закрыть", "");
return 1;
}
forward ShowAPromo(playerid);
public ShowAPromo(playerid)
{
new rows,fields;
cache_get_data(rows, fields);
if(!rows) return SendClientMessage(playerid, -1, "{2789FA}Ошибка: {FFFFFF}активированных промокодов не обнаружено.");
new promolist[2000],code[24],priztext[24],data[32],string[128],typepriz,amountpriz;
strcat(promolist, "{2789FA}№:\t{FFFFFF}Промокод:\t{FFFFFF}Тип приза:\t{FFFFFF}Количество:\t{2789FA}Активирован:\n");
for(new i; i < rows; i++)
{
cache_get_row(i, 0, code, dbHandle, 24);
typepriz = cache_get_row_int(i, 5, dbHandle);
amountpriz = cache_get_row_int(i, 6, dbHandle);
cache_get_row(i, 4, data, dbHandle, 32);
switch(typepriz)
{
case 1: priztext = "VIP аккаунт", format(string,sizeof string, "%dдней",amountpriz);
case 2: priztext = "Игр. валюта", format(string,sizeof string, "%dруб.",amountpriz);
case 3: priztext = "Рубли", format(string,sizeof string, "%dруб.",amountpriz);
}
format(string,sizeof(string),"{2789FA}%d \t{FFFFFF}%s \t{FFFFFF}%s \t{FFFFFF}%s \t{2789FA}%s\n", i+1, code, priztext,string, data);
strcat(promolist, string);
}
ShowPlayerDialog(playerid, D_NULL, DIALOG_STYLE_LIST,"{FFFFFF}Список активированных промокодов", promolist, "Закрыть", "");
return 1;
}
forward ShowBPromo(playerid);
public ShowBPromo(playerid)
{
new rows,fields;
cache_get_data(rows, fields);
if(!rows) return SendClientMessage(playerid, -1, "{43A5DF}Ошибка: {FFFFFF}заблокированных промокодов не обнаружено.");
new promolist[2000],code[24],priztext[24],data[32],string[100],typepriz,amountpriz;
strcat(promolist, "{2789FA}№:\t{FFFFFF}Промокод:\t{FFFFFF}Тип приза:\t{FFFFFF}Количество:\t{2789FA}Заблокирован:\n");
for(new i; i < rows; i++)
{
cache_get_row(i, 0, code, dbHandle, 24);
typepriz = cache_get_row_int(i, 5, dbHandle);
amountpriz = cache_get_row_int(i, 6, dbHandle);
cache_get_row(i, 4, data, dbHandle, 32);
switch(typepriz)
{
case 1: priztext = "VIP аккаунт", format(string,sizeof string, "%dдней",amountpriz);
case 2: priztext = "Игр. валюта", format(string,sizeof string, "%dруб.",amountpriz);
case 3: priztext = "Рубли", format(string,sizeof string, "%dруб.",amountpriz);
}
format(string,sizeof(string),"{2789FA}%d \t{FFFFFF}%s \t{FFFFFF}%s \t{FFFFFF}%s \t{2789FA}%s\n", i+1, code, priztext,string, data);
strcat(promolist, string);
}
ShowPlayerDialog(playerid, D_NULL, DIALOG_STYLE_LIST,"{FFFFFF}Список заблокированных промокодов", promolist, "Закрыть", "");
return 1;
}
forward CreatePromo(playerid,code[]);
public CreatePromo(playerid,code[])
{
new rows,fields,string[256],typetext[24];
cache_get_data(rows, fields);
if(rows) return SendClientMessage(playerid,COLOR_ORANGE,"Промокод уже имеется в базе данных. Придумайте другой..");
new type = GetPVarInt(playerid,"TYPEPROMO");
switch(type)
{
case 1: typetext = "VIP аккаунт";
case 2: typetext = "Игровая валюта";
case 3: typetext = "Рубли";
}
new amount = GetPVarInt(playerid,"AMOUNTPROMO");
new totalactivate = GetPVarInt(playerid,"ACTIVATEPROMO");
format(string,sizeof(string),"INSERT INTO `promo` (`name`,`typepriz`,`amountpriz`,`nactivations`) VALUES ('%s','%d','%d','%d')",code,type,amount,totalactivate);
mysql_function_query(dbHandle, string, false, "", "");
format(string,sizeof(string),"{FFFFFF}Промокод {65A0D0}'%s' {FFFFFF}успешно создан\n\n{FFFFFF}Тип выигрыша: {65A0D0}%d (%s)\n{FFFFFF}Количество выигрыша/дней: {65A0D0}%d\n{FFFFFF}Число доступных активаций: {65A0D0}%d",code,type,typetext,amount,totalactivate);
ShowPlayerDialog(playerid, D_NULL, DIALOG_STYLE_MSGBOX, "Создание промокода | {FE6060}Финал", string, "Закрыть", "");

return DeletePVar(playerid,"TYPEPROMO"),DeletePVar(playerid,"AMOUNTPROMO"),DeletePVar(playerid,"ACTIVATEPROMO"),DeletePVar(playerid,"PROMO");
}
forward DeletePromo(playerid,code[]);
public DeletePromo(playerid,code[])
{
new rows,fields;
cache_get_data(rows, fields);
if(!rows) return SendClientMessage(playerid,-1,"{43A5DF}Ошибка: {FFFFFF}промокода не существует.");
new string[512];
format(string, sizeof(string), "DELETE FROM promo WHERE name = '%s'", code);
mysql_function_query(dbHandle, string, false, "", "");
format(string,sizeof(string),"{FFFFFF}Промокод {65A0D0}'%s' {FFFFFF}успешно удалён.",code);
SendClientMessage(playerid,-1,string);
return 1;
}
forward BlockPromo(playerid,code[]);
public BlockPromo(playerid,code[])
{
new rows,fields;
cache_get_data(rows, fields);
if(!rows) return SendClientMessage(playerid,-1,"{43A5DF}Ошибка: {FFFFFF}промокода не существует.");
new string[256];
new hourss,minn,secc;
gettime(hourss,minn,secc);
format(string,100,"%s / %02d:%02d:%02d",date("%dd.%mm.%yyyy",gettime()),hourss,minn,secc);
format(string, sizeof(string), "UPDATE promo SET `block`='1',`date`='%s' WHERE name='%s'", code, string);
mysql_function_query(dbHandle, string, false, "", "");
format(string,sizeof(string),"{FFFFFF}Промокод {65A0D0}'%s' {FFFFFF}успешно заблокирован.",code);
SendClientMessage(playerid,-1,string);
return 1;
}
forward CheckPromo(playerid);
public CheckPromo(playerid)
{
//new rows,fields;
//cache_get_data(rows, fields);
//if(rows) return SendClientMessage(playerid,-1,"{43A5DF}Ошибка: {FFFFFF}Вы уже активировали промокод, и не можете сделать это повторно.");
new accid;
accid = cache_get_row_int(0, 0, dbHandle);
if(accid == PI[playerid][pID]) return SendClientMessage(playerid,-1,"{FE0000}Ошибка: {FFFFFF}Вы уже активировали этот промокод, повторная активация невозможна.");
new qstring[128],code[16];
GetPVarString(playerid,"CODE",code,sizeof(code));
mysql_format(dbHandle, qstring, sizeof(qstring), "SELECT * FROM `promo` WHERE `name`='%s'", code);
mysql_tquery(dbHandle, qstring, "ActivatePromo", "is", playerid, code);
return 1;
}
forward ActivatePromo(playerid,code[]);
public ActivatePromo(playerid,code[])
{
new rows,fields;
cache_get_data(rows, fields);
printf("Не существует 2");
if(!rows) return SendClientMessage(playerid,-1,"{43A5DF}Ошибка: {FFFFFF}промокода не существует.");
new typepriz,amountpriz,nactivations,string[512],activate,block,data[24],typetext[34],typetext1[24];
new year,month,day;
new current_date = getdate(year, month, day);
for(new i; i < rows; i++)
{
typepriz = cache_get_row_int(i, 5, dbHandle);
amountpriz = cache_get_row_int(i, 6, dbHandle);
nactivations = cache_get_row_int(i, 3, dbHandle);
activate = cache_get_row_int(i, 1, dbHandle);
block = cache_get_row_int(i, 2, dbHandle);
cache_get_row(i, 4, data, dbHandle, 24);
switch(typepriz)
{
case 1: typetext = "VIP аккаунт сроком на",typetext1 = " дней",PI[playerid][pVip] = 1,PI[playerid][pVipTime] = current_date + amountpriz;
case 2: typetext = "Игровая валюта в количестве",typetext1 = " руб",GiveMoney(playerid,amountpriz);
case 3: typetext = "Рубли в количестве",typetext1 = " кр.",PI[playerid][pCredits] += amountpriz;
}
}
if(block > 0) return SendClientMessage(playerid,-1,"{43A5DF}Ошибка: {FFFFFF}промокод заблокирован.");
if(activate != 0)
{
format(string,sizeof(string),"{FFFFFF}Промокод '%s' {FFFFFF}уже активирован {65A0D0}%s\n{FFFFFF}К сожалению, Вы опоздали. Но ничего, получится в другой раз..",code,data);
ShowPlayerDialog(playerid,D_NULL,DIALOG_STYLE_MSGBOX,"{FE0000}Ошибка",string,"Закрыть","");
return true;
}
format(string,sizeof(string),"INSERT INTO `promo_activations` (`account_id`,`name_promo`) VALUES ('%d','%s')",PI[playerid][pID],code);
mysql_function_query(dbHandle, string, false, "", "");
SendClientMessage(playerid,COLOR_ORANGE,"Поздравляем! Вы активировали промокод!");
format(string,sizeof(string),"Промокод содержал: %s %d%s",typetext,amountpriz,typetext1),SendClientMessage(playerid,COLOR_ORANGE,string);
nactivations--;
format(string, sizeof(string), "UPDATE promo SET `nactivations`='%d' WHERE name='%s'", nactivations, code);
mysql_function_query(dbHandle, string, false, "", "");
if(nactivations == 0)
{
new hourss,minn,secc;
gettime(hourss,minn,secc);
format(string,100,"%s / %02d:%02d:%02d",date("%dd.%mm.%yyyy",gettime()),hourss,minn,secc);
format(string, sizeof(string), "UPDATE promo SET `activate`='1',`date`='%s' WHERE name='%s'", string,code);
mysql_function_query(dbHandle, string, false, "", "");
//return SendClientMessage(playerid,-1,"{FE0000}Ошибка: {FFFFFF}количество активаций для промокода исчерпано.");
return true;
}
DeletePVar(playerid,"CODE");
return 1;
}

И активация промокода в диалоговом окне (создаете сами, можете команду сделать, можете в меню игрока добавить):

new stringer[256];
strcat(stringer,"{FFFFFF}В данном окне, Вы сможете активировать промокод\n");
strcat(stringer,"{F2F195}Возможные призы: VIP, Деньги, Донат\n\n");
strcat(stringer,"{FFFFFF}Введите полученный промокод в окошко ниже:");
ShowPlayerDialog(playerid,D_PROMO+5,DIALOG_STYLE_INPUT,"{43A5DF}Активация промокода",stringer,"Далее","Отмена");

Вот в общем-то и всё, если есть какие-то вопросы задавайте.

Автор данной системы, к сожалению, мне неизвестен.

Табуляцию я думаю выполните сами :)

 

Alvaro

Новичок
Пользователь
20.10.2014
20
4
0
База промокодов

База активаций

Совсем забыл, импортируйте эти две базы к своей базе :)

 
Последнее редактирование модератором:

Andrei007

Новичок
Пользователь
17.03.2017
0
0
0
@Alvaro, Можешь написать как меню игрока добавить, просто когда я добавляю у меня 4errors, для примера пожалуйста.. 

 

Aurum

Освоившийся
Пользователь
04.04.2017
2
21
0
Довольно криво вырезано.

 

Alvaro

Новичок
Пользователь
20.10.2014
20
4
0
@Andrei007

Ну, для начала добавь сам пункт к диалогу меню. 

cmd:menu(playerid)
{
ShowPlayerDialog(playerid, D_MENU, DIALOG_STYLE_LIST, "Меню сервера", "\
// тут твои пункты
10. Активировать промокод.");
return 1;
}

Дальше идёшь к диалогу меню, у меня она D_MENU (к примеру)

Код:
case D_MENU:
{
    if(!response) return 1;
    switch(listitem)
    {
       case 0: // тут твои пункты
       case 9: // Непосредственно сам промокод, в меню 10 пункт, в диалоге обозначаем case 9
       {
	        new stringer[256];
		strcat(stringer,"{FFFFFF}В данном окне, Вы сможете активировать промокод\n");
		strcat(stringer,"{F2F195}Возможные призы: VIP, Деньги, Донат\n\n");
		strcat(stringer,"{FFFFFF}Введите полученный промокод в окошко ниже:");
		ShowPlayerDialog(playerid,D_PROMO+5,DIALOG_STYLE_INPUT,"{43A5DF}Активация промокода",stringer,"Далее","Отмена");
	}
     }
}
 

Alexander_Bobrov

Новичок
Пользователь
31.12.2017
0
0
0
все сделал, все перенес отредактировал под свой мод, при вводе команды "/pmenu" вылазит текст драв, после нажатия кнопки, например, "Создать промокод", ничего не происходит. Просто текстдрав исчезает. При повторном - тоже самое. ПОМГИТЕ ПОЖАЛУЙСТА

 

Vasatich

Новичок
Пользователь
30.09.2022
1
0
0
Мапер
А как теперь создать промокод?