Вопросы

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

 

Спойлер

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 пользователей онлайн

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

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

    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };