Question

Как сделать промокоды, чтобы при создании еще нужно было вписать кол-во часов сколько нужно отыграть для получения бонуса,

 

Спойлер

case CREATEPROMO:
		{
		    if(!response) return false;
		    switch(listitem)
		    {
		        case 0: SPD(playerid,CREATEPROMO+1,DIALOG_STYLE_INPUT,"{F7860D}>> VIP аккаунт","{FFFFFF}Введите в строчку ниже уровень VIP аккаунта для приза(от 1 до 3):","Далее","Отмена"),SetPVarInt(playerid,"TYPEPRIZ",1);
                case 1: SPD(playerid,CREATEPROMO+2,DIALOG_STYLE_INPUT,"{F7860D}>> Донат-очки","{FFFFFF}Введите в строчку ниже количество донат-очков для приза(на Ваше усмотрение):","Далее","Отмена"),SetPVarInt(playerid,"TYPEPRIZ",2);
                case 2: SPD(playerid,CREATEPROMO+3,DIALOG_STYLE_INPUT,"{F7860D}>> Игровая Валюта","{FFFFFF}Введите в строчку ниже количество игровой валюты для приза(на Ваше усмотрение):","Далее","Отмена"),SetPVarInt(playerid,"TYPEPRIZ",3);
		    }
		}
		case CREATEPROMO+1:
		{
		    if(!response) return false;
		    SetPVarInt(playerid,"PRIZ",strval(inputtext));
			SPD(playerid,CREATEPROMO+4,DIALOG_STYLE_INPUT,"{F7860D}>> Придумайте промокод","Теперь Вам необходимо придумать промокод\n{FFFFFF}Промокод должен состоять из 6 символов(Только латинские буквы и цифры)\nПример: AA11AA","Далее","Отмена");
		}
		case CREATEPROMO+2:
		{
		    if(!response) return false;
		    SetPVarInt(playerid,"PRIZ",strval(inputtext));
			SPD(playerid,CREATEPROMO+4,DIALOG_STYLE_INPUT,"{F7860D}>> Придумайте промокод","Теперь Вам необходимо придумать промокод\n{FFFFFF}Промокод должен состоять из 6 символов(Только латинские буквы и цифры)\nПример: AA11AA","Далее","Отмена");
		}
		case CREATEPROMO+3:
		{
		    if(!response) return false;
		    SetPVarInt(playerid,"PRIZ",strval(inputtext));
			SPD(playerid,CREATEPROMO+4,DIALOG_STYLE_INPUT,"{F7860D}>> Придумайте промокод","Теперь Вам необходимо придумать промокод\n{FFFFFF}Промокод должен состоять из 6 символов(Только латинские буквы и цифры)\nПример: AA11AA","Далее","Отмена");
		}
		case CREATEPROMO+4://azaza
		{
		    if(!response) return false;
		    if(mysql_fetch_row(inputtext)) return ShowPlayerDialog(playerid,D_PROMO,DIALOG_STYLE_INPUT,""MODE_PREF">> Введите промокод","{F21111}Ошибка: {FFFFFF}данный промокод уже есть в базе данных\n{FFFFFF}Придумайте другой промокод:","Далее","Отмена");
		    if(strlen(inputtext) < 6 || strlen(inputtext) > 6 || IsTextRussian(inputtext)) return SPD(playerid,CREATEPROMO+4,DIALOG_STYLE_INPUT,"{F7860D}>> Введите промокод","{FFFFFF}Промокод должен состоять из 6 символов(Только латинские буквы и цифры)\nПример: AA11AA","Далее","Отмена");
			new PRIZ = GetPVarInt(playerid,"PRIZ"),TYPEPRIZ = GetPVarInt(playerid,"TYPEPRIZ");
			AllPromo++;
			promoinfo[AllPromo][prAmount] = PRIZ;
			promoinfo[AllPromo][prPriz] = TYPEPRIZ;
			promoinfo[AllPromo][prID] = AllPromo;
			format(promoinfo[AllPromo][prName],24,"%s",inputtext);
			CreatePromo(AllPromo);
			SendMes(playerid,COLOR_ORANGE,"Вы успешно создали промокод: %s.",inputtext);
            SendMes(playerid,COLOR_ORANGE,"Тип приза(%d) | количество приза: %d",TYPEPRIZ,PRIZ);
		}

 

 

Edited by MuhammadPawn
Причина: Убрал код под спойлер

Заметка от MuhammadPawn , создано

Правила форума Пункт 3. ОФОРМЛЕНИЕ ТЕМЫ НА ФОРУМЕ (ОБЩЕЕ): 3.2. Код больше 10 строк брать еще и под спойлер.

Share this post


Link to post

15 answers to this question

  • 0

Возьми с мода Perfomance RolePlay или тот же Radmir RolePlay (Не реклама)

Share this post


Link to post
  • 0

@archiboy6 у вас есть сохранение отыгранных часов? Если да, то скиньте переменные

Share this post


Link to post
  • 0

@Jaliba Baron Нету, может можно сделать как-то по PayDay допустим надо отыграть 8 PayDay чтобы получить промо-код

 

Share this post


Link to post
  • 0

@archiboy6 Можно, но есть еще выриант, можно проверять LVL игрока, и если допустим у него 3 LVL то ему разрешены промо-коды

Share this post


Link to post
  • 0

@Jaliba Baron Не, я именно хочу чтобы игрок отыграл время, и ему тогда выдавало приз

@Jaliba Baron Вообщем, нужно как-то сделать чтобы игрок отыграл определенное кол-во PayDay и ему выдавался бонус

выбирать сколько отыграть, от 0 до 20, помоги пожалуйста

Share this post


Link to post
  • 0

@archiboy6 Ко всем enum PI (PlayerInfo):
 

priz

в payday:
 

PI[playerid][priz]++;
if(PI[playerid][priz] == 1800) //Время для отыгровки
{
	PI[playerid][priz] = 0;
	GameTextForPlayerEx(playerid, "+50 rub donate", 4000, 7);
	PI[playerid][/* переменная приза */] += 50; //За место "50" ваше кол-во
	SendClientMessage(playerid, COLOR_MSG, "Информация: вы получили 10 rub donate за 30 минут на сервере");
}

Как то так, надеюсь помог

Share this post


Link to post
  • 0

Да не, не так поняли, я хотел чтобы при создании промокода можно было вписывать сколько игрок должен отыграть для получения призза

Share this post


Link to post
  • 0

@archiboy6 Ко всем enum:
 

Спойлер

	DIALOG_PROMO_CREATE,			// создание промокода
	DIALOG_PROMO_ACTIVATE,			// активация промокода

	PROMO_TYPE_MONEY = 0, 	// деньги
	PROMO_TYPE_DONATE,		// донат
	PROMO_TYPE_EXP,			// опыт

 

К диалогам:
 

Спойлер

 


			case DIALOG_PROMO_CREATE:
			{
				if(response)
				{
					new code[32], type, amount, usings, paydays;

					if(sscanf(inputtext, "P<,>s[32]dddd", code, type, amount, usings, paydays))
					{
						SendClientMessage(playerid, 0x999999FF, "Некорректный ввод");
						cmd::createpromo(playerid, "");

						return 1;
					}
					else
					{
						if(!(0 <= type <= 2))
						{
							SendClientMessage(playerid, 0x999999FF, "Тип должен быть от 0 до 2 (деньги, донат, exp)");
							cmd::createpromo(playerid, "");

							return 1;
						}

						if(!(1 <= amount <= 1_000_000))
						{
							SendClientMessage(playerid, 0x999999FF, "Количество должно быть от 1 до 1.000.000");
							cmd::createpromo(playerid, "");

							return 1;
						}

						if(!(1 <= usings <= 1_000))
						{
							SendClientMessage(playerid, 0x999999FF, "Количество использований должно быть от 1 до 1000");
							cmd::createpromo(playerid, "");

							return 1;
						}

						if(!(0 <= paydays <= 20))
						{
							SendClientMessage(playerid, 0x999999FF, "Количество PayDay должно быть от 0 до 20");
							cmd::createpromo(playerid, "");

							return 1;
						}

						new query[128],
							Cache: result,
							rows;

						mysql_format(mysql, query, sizeof query, "SELECT * FROM promocode WHERE code='%s'", code);
						result = mysql_query(mysql, query, true);

						rows = cache_num_rows();

						cache_delete(result);

						if(rows)
						{
							SendClientMessage(playerid, 0x999999FF, "Такой промокод уже есть в базе данных");
							cmd::createpromo(playerid, "");

							return 1;
						}

						mysql_format(mysql, query, sizeof query, "INSERT INTO promocode (code, type, amount, usings, paydays) VALUES ('%s', %d, %d, %d, %d)",
						code, type, amount, usings, paydays);

						mysql_query(mysql, query);

						format(query, sizeof query, "Промокод \"%s\" создан (Т: %s, К: %d, И: %d, PD: %d)", code, promo_info[type][P_NAME], amount, usings, paydays);
						SendClientMessage(playerid, 0x66CC33FF, query);
					}
				}
			}
			case DIALOG_PROMO_ACTIVATE:
			{
				if(response)
				{
					if(!strlen(inputtext))
					{
						cmd::promo(playerid, "");

						return 1;
					}

					new query[256],
						Cache: result,
						rows,
						type,
						amount,
						paydays,
						usings;

					mysql_format(mysql, query, sizeof query, "SELECT * FROM promocode_activations WHERE uid='%d' AND code='%s'", GetPlayerAccountID(playerid), inputtext);
					result = mysql_query(mysql, query, true);

					rows = cache_num_rows();

					if(rows)
					{
						// type = cache_get_field_content_int(0, "type");
						paydays = cache_get_field_content_int(0, "paydays");

						format(query, sizeof query, "Вы уже активировали этот промокод");

						if(paydays)
							format(query, sizeof query, "%s. Вы получите свой приз через %d PayDay", query, paydays);

						SendClientMessage(playerid, 0x3399FFFF, query);

						cache_delete(result);

						return 1;
					}

					cache_delete(result);

					mysql_format(mysql, query, sizeof query, "SELECT * FROM promocode WHERE code='%s' AND usings > 0", inputtext);
					result = mysql_query(mysql, query, true);

					rows = cache_num_rows();

					if(rows)
					{
						type = cache_get_field_content_int(0, "type");
						amount = cache_get_field_content_int(0, "amount");
						usings = cache_get_field_content_int(0, "usings");
						paydays = cache_get_field_content_int(0, "paydays");
					}

					cache_delete(result);

					if(!rows)
					{
						SendClientMessage(playerid, 0x999999FF, "Введенный промокод не существует");
						cmd::promo(playerid, "");

						return 1;
					}

					if(usings > 0)
					{
						if(!paydays)
						{
							AddPlayerData(playerid, promo_info[type][P_DATA], +, amount);
							UpdatePlayerDatabaseInt(playerid, promo_info[type][P_SQL_NAME], GetPlayerData(playerid, promo_info[type][P_DATA]));
						}

						format(query, sizeof query, "Вы активировали промокод \"%s\"", inputtext);

						if(paydays > 0)
							format(query, sizeof query, "%s. Вы получите свой приз через %d PayDay", query, paydays);

						SendClientMessage(playerid, 0x66CC33FF, query);

						mysql_format(mysql, query, sizeof query, "UPDATE promocode SET usings='%d' WHERE code='%s'", usings - 1, inputtext);
						mysql_query(mysql, query, false);

						mysql_format(mysql, query, sizeof query, "INSERT INTO promocode_activations (uid, code, paydays) VALUES (%d, '%s', %d)",
						GetPlayerAccountID(playerid), inputtext, paydays);
						mysql_query(mysql, query, false);
					}
					else
					{
						SendClientMessage(playerid, 0x999999FF, "Лимит использования промокода исчерпан");
						cmd::promo(playerid, "");
					}
				}
			}
		}
	}

К паблику/стоку payday
 

Спойлер

			new rows,
				Cache: result;

			mysql_format(mysql, fmt_str, sizeof fmt_str, "SELECT id, paydays, code FROM promocode_activations WHERE uid=%d AND paydays > 0", GetPlayerAccountID(playerid));
			result = mysql_query(mysql, fmt_str, true);

			rows = cache_num_rows();

			if(rows)
			{
				for(new idx; idx < rows; idx ++)
				{
					new id = cache_get_row_int(idx, 0),
						paydays = cache_get_row_int(idx, 1),
						code[32];

					cache_get_row(idx, 2, code);

					mysql_format(mysql, fmt_str, sizeof fmt_str, "UPDATE promocode_activations SET paydays='%d' WHERE id='%d'", paydays - 1, id);
					mysql_query(mysql, fmt_str, false);

					if(paydays == 1)
					{
						new Cache: p_cache;

						mysql_format(mysql, fmt_str, sizeof fmt_str, "SELECT type, amount FROM promocode WHERE code='%s'", code);
						p_cache = mysql_query(mysql, fmt_str, true);

						new type = cache_get_row_int(0, 0),
							amount = cache_get_row_int(0, 1);

						cache_delete(p_cache);

						AddPlayerData(playerid, promo_info[type][P_DATA], +, amount);
						UpdatePlayerDatabaseInt(playerid, promo_info[type][P_SQL_NAME], GetPlayerData(playerid, promo_info[type][P_DATA]));

						SendClientMessage(playerid, -1, "");

						format(fmt_str, sizeof fmt_str, "Получен приз за промокод \"%s\"", code);
						SendClientMessage(playerid, 0x66CC33FF, fmt_str);
					}
				}
			}

			cache_delete(result);
		}
		SetPlayerData(playerid, P_GAME_FOR_HOUR, 0);
	}

 

К командам:
 

Спойлер

 


CMD:createpromo(playerid, params[])
{
	if(GetPlayerAdminEx(playerid) < 5) return 1;

	Dialog
	(
		playerid, DIALOG_PROMO_CREATE, DIALOG_STYLE_INPUT,
		"{FFCD00}Создание промокода",
		"{FFFFFF}Для создания промокода введите\n"\
		"следующие параметры в окно ниже:\n\n"\
		"{33CC66}Параметры: Код, Тип, Кол-во, Использования, PayDay\n\n"\
		"{888888}Примечание:\n"\
		"{FFFFFF}- Код может содержать от 1 до 30 символов\n"\
		"- Тип от 0 до 2 (деньги, донат, exp)\n"\
		"- Количество от 1 до 1.000.000\n"\
		"- Количество использований от 1 до 1000\n"\
		"- Количество PayDay от 0 до 20",
		"Далее", "Отмена"
	);

	return 1;
}

CMD:promo(playerid, params[])
{
	Dialog
	(
		playerid, DIALOG_PROMO_ACTIVATE, DIALOG_STYLE_INPUT,
		"{FFCD00}Активация промокода",
		"{FFFFFF}Введите промокод в окно ниже:",
		"Далее", "Отмена"
	);

	return 1;
}

В базу данных:

 

Спойлер

 


CREATE TABLE `promocode` (
  `id` int(11) NOT NULL,
  `code` varchar(32) CHARACTER SET utf8 NOT NULL,
  `type` int(11) NOT NULL,
  `amount` int(11) NOT NULL,
  `usings` int(11) NOT NULL,
  `paydays` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Дамп данных таблицы `promocode`
--


-- --------------------------------------------------------
--
-- Структура таблицы `promocode_activations`
--

CREATE TABLE `promocode_activations` (
  `id` int(11) NOT NULL,
  `uid` int(11) NOT NULL,
  `code` varchar(32) NOT NULL,
  `paydays` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `promocode_activations`
--

--
-- Индексы таблицы `promocode`
--
ALTER TABLE `promocode`
  ADD PRIMARY KEY (`id`);

--
-- Индексы таблицы `promocode_activations`
--
ALTER TABLE `promocode_activations`
  ADD PRIMARY KEY (`id`);


 

Если будут ошибки пишите

Edited by MuhammadPawn
Причина: Убрал код под спойлер

Share this post


Link to post
  • 0

@Jaliba Baron Крашит павно

Share this post


Link to post
  • 0

@Jaliba Baron я хотел мод кинуть, а там сам посмотришь

Share this post


Link to post
  • 0

@archiboy6 это разве нельзя сделать в личных сообщения мода? И зачем буду смотреть ваш мод?

Share this post


Link to post
  • 0

@Jaliba Baron Вопрос зачем ты скинул ему левую систему промокода.... Когда он просит доработать свою?

Если не понимаешь как помочь, то лучше не отвечай 

Edited by MuhammadPawn

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Wiggins
      By Wiggins
      Доброго времени суток, нуждаюсь в помощи. Если есть люди, которые шарят в pawno, нужна помощь. Короче, мод ART RP, там в донате есть строка "Уникальные аксессуары", когда на него нажмешь, открывается TextDraw менью, нужно переделать это на обычную менью (/mm например, там обычная менью), буду рад, если поможете, за ранее спасибо.

      Если не ошибаюсь, строка текстдрав аксессуаров начинается с 1416 до 1443.
      art4.pwn