Вопросы

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

 

Спойлер

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);
		}

 

 

Отредактировано пользователем MuhammadPawn
Причина: Убрал код под спойлер

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

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

Поделиться сообщением


Ссылка на сообщение

15 ответов на этот вопрос

  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

 

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

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

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

Поделиться сообщением


Ссылка на сообщение
  • 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 минут на сервере");
}

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 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`);


 

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

Отредактировано пользователем MuhammadPawn
Причина: Убрал код под спойлер

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

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

Отредактировано пользователем MuhammadPawn

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Talex
      От Talex
      Всем привет, сливаю первый мод!
      Информация о моде:

      — Основа Gamenix.
      — Мод переведен на Mysql R39, теперь ни каких слётов нет, мод работает стабильно с онлайном 160+.
      — Новый автосалон на TextDraw.
      — Система 3-х автомобилей (1 можно купить по дефолту, 2 и 3 за донат).
      — Автомобили у игроков теперь не пропадают (Id'ы авто сбивались, с номерами теперь тоже всё в порядке).
      — Оформление сервера полностью переработано, теперь оно более красивое.
      — Защита от копирования карты.
      — в меню сервера добавлен пункт визуальных настроек.
      — Номера на транспорт теперь можно приобрести в /donate.
      — Сделан новый красивый спидометр.
      — При получении номера, добавлен выбор региона.
      — Сделана система радаров и промокодов, создание прямо из игры.
      — Новый интерьер казино.
      — Магазин скинов теперь на TextDraw.
      — Автошкола полностью функционирует.
      — Добавлена информация после коннекта о последнем входе в собственный аккаунт.
      — Приватная защита от всех видов DDoS атак и DoS атак.                                                                                                                                    
      — пароль от АП (/alog) теперь у каждого администратора индивидуальный.
      — Изменено оформление самого мода
      Это не все изменения мода, их ещё очень много. все не упомнишь. 
      Автор мода: Неизвестен
      CUNBERS RP 8.4.3.rar