Доброго времени суток, поскольку многие из вас ищут систему промокодов, то я решил выложить её для вас.
Написанная не мною, вырезка из мода Just RP.
Для начала создадим диалог, ко всем дефайнам:
[code]#define D_PROMO 15000[/code]
Ко всем forward:
[code]forward ShowDPromo(playerid);
forward ShowAPromo(playerid);
forward ShowBPromo(playerid);
forward CreatePromo(playerid,code[]);
forward DeletePromo(playerid,code[]);
forward CheckPromo(playerid);
forward ActivatePromo(playerid,code[]);[/code]

Непосредственно сама команда:
[code]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. Создать промокод

2. Действующие промокоды

3. Активированные промокоды

4. Заблокированные промокоды

{F66B6D}5. Заблокировать промокод

{F66B6D}6. Удалить промокод»,»Далее»,»Выход»);
}
return true;
}[/code]

Ко всем диалогам:
[code]case D_PROMO:
{
if(!response) return 1;
switch(listitem)
{
case 0: ShowPlayerDialog(playerid,D_PROMO+1,DIALOG_STYLE_INPUT,»Создание промокода | {FE6060}Шаг: 1″,»{FFFFFF}Вам необходимо придумать промокод
Длина промокода должна быть 6 символов, состоящая из цифр и букв латинского алфавита

Введите промокод в строчку ниже:»,»Далее»,»Назад»);
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. Создать промокод

2. Действующие промокоды

3. Активированные промокоды

4. Заблокированные промокоды

{F66B6D}5. Заблокировать промокод

{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. Создать промокод

2. Действующие промокоды

3. Активированные промокоды

4. Заблокированные промокоды

{F66B6D}5. Заблокировать промокод

{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. Создать промокод

2. Действующие промокоды

3. Активированные промокоды

4. Заблокированные промокоды

{F66B6D}5. Заблокировать промокод

{F66B6D}6. Удалить промокод»,»Далее»,»Выход»);
return 1;
}
new totalstring[712];
if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid,D_PROMO+1,DIALOG_STYLE_INPUT,"Создание промокода | {FE6060}Шаг: 1","{FFFFFF}Вам необходимо придумать промокод Длина промокода должна быть 3 символов, состоящая из цифр и букв латинского алфавита Введите промокод в строчку ниже:","Далее","Назад"); SetPVarString(playerid,"PROMO",inputtext); strcat(totalstring,"{FFFFFF}Теперь необходимо ввести тип приза, количество выигрыша, количество активаций {4AA9CF}Типы: "); strcat(totalstring,"{FFFFFF}1. VIP аккаунт "); strcat(totalstring,"2. Игровая валюта "); strcat(totalstring,"3. Рубли "); strcat(totalstring,"Если указан тип '1', то в качестве количества приза - указываете дни, в течении которых будет действовать VIP аккаунт "); strcat(totalstring,"Если указаны типы '2' и '3', то соответственно указываете количество игровой валюты, и рублей для выигрыша. "); strcat(totalstring,"{F6F7D8}Указывать все значения нужно через запятую! "); strcat(totalstring,"Пример: 1,30,10 "); 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}Теперь необходимо ввести тип приза, количество выигрыша, количество активаций {4AA9CF}Типы: "); strcat(totalstring,"{FFFFFF}1. VIP аккаунт "); strcat(totalstring,"2. Игровая валюта "); strcat(totalstring,"3. Рубли "); strcat(totalstring,"Если указан тип '1', то в качестве количества приза - указываете дни, в течении которых будет действовать VIP аккаунт "); strcat(totalstring,"Если указаны типы '2' и '3', то соответственно указываете количество игровой валюты, и рублей для выигрыша. "); strcat(totalstring,"{F6F7D8}Указывать все значения нужно через запятую! "); strcat(totalstring,"Пример: 1,30,10 "); 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}Теперь необходимо ввести тип приза, количество выигрыша, количество активаций

{4AA9CF}Типы:
«);
strcat(totalstring,»{FFFFFF}1. VIP аккаунт
«);
strcat(totalstring,»2. Игровая валюта
«);
strcat(totalstring,»3. Рубли

«);
strcat(totalstring,»Если указан тип ‘1’, то в качестве количества приза — указываете дни, в течении которых будет действовать VIP аккаунт
«);
strcat(totalstring,»Если указаны типы ‘2’ и ‘3’, то соответственно указываете количество игровой валюты, и рублей для выигрыша.

«);
strcat(totalstring,»{F6F7D8}Указывать все значения нужно через запятую!
«);
strcat(totalstring,»Пример: 1,30,10
«);
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);
}[/code]

В самый конец мода:
[code]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}Число активаций:
«);
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 ", i+1, code, priztext,string, activate); strcat(promolist, string); } ShowPlayerDialog(playerid, D_NULL, DIALOG_STYLE_LIST,"{FFFFFF}Список действующих промокодов", promolist, "Закрыть", ""); return 1; } 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}Активирован: "); 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 ", i+1, code, priztext,string, data); strcat(promolist, string); } ShowPlayerDialog(playerid, D_NULL, DIALOG_STYLE_LIST,"{FFFFFF}Список активированных промокодов", promolist, "Закрыть", ""); return 1; } 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}Заблокирован: "); 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 ", i+1, code, priztext,string, data); strcat(promolist, string); } ShowPlayerDialog(playerid, D_NULL, DIALOG_STYLE_LIST,"{FFFFFF}Список заблокированных промокодов", promolist, "Закрыть", ""); return 1; } 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}успешно создан {FFFFFF}Тип выигрыша: {65A0D0}%d (%s) {FFFFFF}Количество выигрыша/дней: {65A0D0}%d {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"); } 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; } 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; } 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
{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;
}[/code]

И активация промокода в диалоговом окне (создаете сами, можете команду сделать, можете в меню игрока добавить):
[code]new stringer[256];
strcat(stringer,»{FFFFFF}В данном окне, Вы сможете активировать промокод
«);
strcat(stringer,»{F2F195}Возможные призы: VIP, Деньги, Донат

«);
strcat(stringer,»{FFFFFF}Введите полученный промокод в окошко ниже:»);
ShowPlayerDialog(playerid,D_PROMO+5,DIALOG_STYLE_INPUT,»{43A5DF}Активация промокода»,stringer,»Далее»,»Отмена»);[/code]

Ну и не забудьте выполнить вот такие SQL-запросы:
[code]CREATE TABLE `promo` (
`name` varchar(24) NOT NULL,
`activate` int(11) NOT NULL,
`block` int(11) NOT NULL,
`nactivations` int(11) NOT NULL,
`date` varchar(32) NOT NULL,
`typepriz` int(11) NOT NULL,
`amountpriz` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
COMMIT;
CREATE TABLE `promo_activations` (
`account_id` int(11) NOT NULL,
`name_promo` varchar(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
COMMIT;[/code]

Вот в общем-то и всё, если есть какие-то вопросы задавайте.
Автор данной системы, к сожалению, мне неизвестен.
Табуляцию я думаю выполните сами 🙂
Переделал: [b][color=#BF0000]danilasar[/color][/b] (то есть я)

От danilasar

Это я

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *