skyfamily Освоившийся 0 Освоившийся Posted January 9, 2023 (edited) · Report post Приветствую, у меня есть некий отрывок кода, который отвечает за промокод. После ввода этого промокода, промокод просто пропадает из файла ini. Что добавить или изменить в коде, чтоб можно было ТОЛЬКО 1 раз использовать промокод и что-бы он не пропадал. Пожалуйста помогите Код: Спойлер case 1993: { if(response) { new donate; new iniFile = ini_openFile("gamefiles/donate.ini"); if(ini_getInteger(iniFile, inputtext, donate) == 0) { SendClientMessage(playerid, COLOR_NEWS, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); format(string, sizeof(string), "Íà âàø áàíêîâñêèé ñ÷åò çà÷èñëåíî: %d âèðò", donate); SendClientMessage(playerid, COLOR_NEWS, string); format(string, sizeof(string), "Ñòàðûé áàëàíñ: %d âèðò", PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_YELLOW, string); PlayerInfo[playerid][pBank] += donate; format(string, sizeof(string), "Íîâûé áàëàíñ: %d âèðò", PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_YELLOW, string); SendClientMessage(playerid, COLOR_NEWS, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); PlayerInfo[playerid][pDonateAccount] += donate; ini_removeKey(iniFile, inputtext); if(PlayerInfo[playerid][pDonateAccount] >= 1000000 && PlayerInfo[playerid][pDonateRank] == 0) { SendClientMessage(playerid, COLOR_YELLOW, "Ïîçäðàâëÿåì! Âû äîñòèãëè 1 óðîâíÿ VIP"); SendClientMessage(playerid, COLOR_YELLOW, "Èñïîëüçóéòå /viphelp äëÿ ïðîñìîòðà ôóíêöèé VIP àêêàóíòà"); PlayerInfo[playerid][pDonateRank] = 1; } else if(PlayerInfo[playerid][pDonateAccount] >= 5000000 && PlayerInfo[playerid][pDonateRank] == 1) { SendClientMessage(playerid, COLOR_YELLOW, "Ïîçäðàâëÿåì! Âû äîñòèãëè 2 óðîâíÿ VIP"); SendClientMessage(playerid, COLOR_YELLOW, "Èñïîëüçóéòå /viphelp äëÿ ïðîñìîòðà ôóíêöèé VIP àêêàóíòà"); PlayerInfo[playerid][pDonateRank] = 2; } else if(PlayerInfo[playerid][pDonateAccount] >= 10000000 && PlayerInfo[playerid][pDonateRank] == 2) { SendClientMessage(playerid, COLOR_YELLOW, "Ïîçäðàâëÿåì! Âû äîñòèãëè 3 óðîâíÿ VIP"); SendClientMessage(playerid, COLOR_YELLOW, "Èñïîëüçóéòå /viphelp äëÿ ïðîñìîòðà ôóíêöèé VIP àêêàóíòà"); PlayerInfo[playerid][pDonateRank] = 3; } } Edited January 9, 2023 by skyfamily 0 Share this post Link to post
0 SCRIPTMAN Великий Гуру 268 Великий Гуру Posted January 11, 2023 (edited) · Report post То, как ты скопировал код - уже отталкивает от желания помочь, на будущее: перед копированием кода из Pawno куда-то переведи раскладку системы на русский. А вообще, давно стоит перейти на более современные редакторы кода, которые поддерживают установку сторонних компиляторов. За удаление промокода из файла отвечает следующая строка, её тебе и нужно удалить: ini_removeKey(iniFile, inputtext); Что касается того, что бы промокод человек мог активировать 1 раз(если я правильно понял) - сразу в голову приходит только одна идея, учитывая, что система на mxINI. Создавать вместе с промокодом в файле "donate.ini" ещё 1 файл с названием промокода, и туда записывать как ключ ник игрока, который будет равен 1, и проверять, если ключ равен одному, то выводим сообщение, что уже промокод активирован. Чтобы не было хлама из файлов с именами промокодов, это все пусть хранится в отдельной папке, например, "promocodes_info". Вообще, если накидать код, то получится что-то вроде этого: Спойлер case 1993: { if(response) { new promo_string_path[64]; // 64 - просто как максимальная длина пути и названия, чисто для примера format(promo_string_path, sizeof promo_string_path, "gamefiles/%s.ini", inputtext); // форматируем переменную в путь и записываем в виде имени файла название промокода new promo_check_file = ini_openFile(promo_string_path); new promo_check; // храним значение ключа ini_getInteger(promo_check_file, PlayerInfo[playerid][pName], promo_check); // получаем значение ключа в файле промокода if(promo_check == 1) // Если значение ключа под его ником равно 1 return SendClientMessage(playerid, -1, "Вы уже активировали данный промокод ранее!"); new donate; new iniFile = ini_openFile("gamefiles/donate.ini"); if(ini_getInteger(iniFile, inputtext, donate) == 0) { SendClientMessage(playerid, COLOR_NEWS, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); format(string, sizeof(string), "Íà âàø áàíêîâñêèé ñ÷åò çà÷èñëåíî: %d âèðò", donate); SendClientMessage(playerid, COLOR_NEWS, string); format(string, sizeof(string), "Ñòàðûé áàëàíñ: %d âèðò", PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_YELLOW, string); PlayerInfo[playerid][pBank] += donate; format(string, sizeof(string), "Íîâûé áàëàíñ: %d âèðò", PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_YELLOW, string); SendClientMessage(playerid, COLOR_NEWS, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); PlayerInfo[playerid][pDonateAccount] += donate; ini_setInteger(promo_check_file, PlayerInfo[playerid][pName], 1); // записываем в файл с именем промокода ник игрока и даём значение 1 ini_closeFile(promo_check_file); // так называемое правило хорошего тона - закрываем файл, он нам не понадобится. if(PlayerInfo[playerid][pDonateAccount] >= 1000000 && PlayerInfo[playerid][pDonateRank] == 0) { SendClientMessage(playerid, COLOR_YELLOW, "Ïîçäðàâëÿåì! Âû äîñòèãëè 1 óðîâíÿ VIP"); SendClientMessage(playerid, COLOR_YELLOW, "Èñïîëüçóéòå /viphelp äëÿ ïðîñìîòðà ôóíêöèé VIP àêêàóíòà"); PlayerInfo[playerid][pDonateRank] = 1; } else if(PlayerInfo[playerid][pDonateAccount] >= 5000000 && PlayerInfo[playerid][pDonateRank] == 1) { SendClientMessage(playerid, COLOR_YELLOW, "Ïîçäðàâëÿåì! Âû äîñòèãëè 2 óðîâíÿ VIP"); SendClientMessage(playerid, COLOR_YELLOW, "Èñïîëüçóéòå /viphelp äëÿ ïðîñìîòðà ôóíêöèé VIP àêêàóíòà"); PlayerInfo[playerid][pDonateRank] = 2; } else if(PlayerInfo[playerid][pDonateAccount] >= 10000000 && PlayerInfo[playerid][pDonateRank] == 2) { SendClientMessage(playerid, COLOR_YELLOW, "Ïîçäðàâëÿåì! Âû äîñòèãëè 3 óðîâíÿ VIP"); SendClientMessage(playerid, COLOR_YELLOW, "Èñïîëüçóéòå /viphelp äëÿ ïðîñìîòðà ôóíêöèé VIP àêêàóíòà"); PlayerInfo[playerid][pDonateRank] = 3; } } Я дописал проверку на то, активирован ли промо и написал добавление ника в файл с названием промокода. При создании промокода не забудь написать создание файла с его названием) P.S. Я очень мало проработал с mxINI, если где-то совершил ошибку, поправьте) Edited January 11, 2023 by SCRIPTMAN 0 Share this post Link to post
skyfamily Освоившийся 0
Приветствую, у меня есть некий отрывок кода, который отвечает за промокод. После ввода этого промокода, промокод просто пропадает из файла ini.
Что добавить или изменить в коде, чтоб можно было ТОЛЬКО 1 раз использовать промокод и что-бы он не пропадал. Пожалуйста помогите
Код:
case 1993:
{
if(response)
{
new donate;
new iniFile = ini_openFile("gamefiles/donate.ini");
if(ini_getInteger(iniFile, inputtext, donate) == 0)
{
SendClientMessage(playerid, COLOR_NEWS, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
format(string, sizeof(string), "Íà âàø áàíêîâñêèé ñ÷åò çà÷èñëåíî: %d âèðò", donate);
SendClientMessage(playerid, COLOR_NEWS, string);
format(string, sizeof(string), "Ñòàðûé áàëàíñ: %d âèðò", PlayerInfo[playerid][pBank]);
SendClientMessage(playerid, COLOR_YELLOW, string);
PlayerInfo[playerid][pBank] += donate;
format(string, sizeof(string), "Íîâûé áàëàíñ: %d âèðò", PlayerInfo[playerid][pBank]);
SendClientMessage(playerid, COLOR_YELLOW, string);
SendClientMessage(playerid, COLOR_NEWS, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
PlayerInfo[playerid][pDonateAccount] += donate;
ini_removeKey(iniFile, inputtext);
if(PlayerInfo[playerid][pDonateAccount] >= 1000000 && PlayerInfo[playerid][pDonateRank] == 0)
{
SendClientMessage(playerid, COLOR_YELLOW, "Ïîçäðàâëÿåì! Âû äîñòèãëè 1 óðîâíÿ VIP");
SendClientMessage(playerid, COLOR_YELLOW, "Èñïîëüçóéòå /viphelp äëÿ ïðîñìîòðà ôóíêöèé VIP àêêàóíòà");
PlayerInfo[playerid][pDonateRank] = 1;
}
else if(PlayerInfo[playerid][pDonateAccount] >= 5000000 && PlayerInfo[playerid][pDonateRank] == 1)
{
SendClientMessage(playerid, COLOR_YELLOW, "Ïîçäðàâëÿåì! Âû äîñòèãëè 2 óðîâíÿ VIP");
SendClientMessage(playerid, COLOR_YELLOW, "Èñïîëüçóéòå /viphelp äëÿ ïðîñìîòðà ôóíêöèé VIP àêêàóíòà");
PlayerInfo[playerid][pDonateRank] = 2;
}
else if(PlayerInfo[playerid][pDonateAccount] >= 10000000 && PlayerInfo[playerid][pDonateRank] == 2)
{
SendClientMessage(playerid, COLOR_YELLOW, "Ïîçäðàâëÿåì! Âû äîñòèãëè 3 óðîâíÿ VIP");
SendClientMessage(playerid, COLOR_YELLOW, "Èñïîëüçóéòå /viphelp äëÿ ïðîñìîòðà ôóíêöèé VIP àêêàóíòà");
PlayerInfo[playerid][pDonateRank] = 3;
}
}
Edited by skyfamily
Share this post
Link to post