• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Помогите доработать систему промокодов

Статус
В этой теме нельзя размещать новые ответы.

saaashaaaa

Изучающий
Пользователь
Регистрация
12 Авг 2019
Сообщения
172
Лучшие ответы
0
Репутация
2
Всем привет!
Вырезал систему промокодов с мода. Все хорошо работает, промокоды создаются, активируются, но есть проблемка. Если игрок активировал промокод, то он может его активировать повторно и при этом ему будет выдаваться содержимое промокода. В чат пишется, что вы уже активировали данный промокод, но призы почему-то выдается :)
Код:
PHP:
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;
}
PHP:
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;
}
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу