Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Промокоды

Статус пользователя Impeccable
сообщение 28.2.2021, 6:29
Сообщение #1
Стаж: 5 лет 2 месяца

Сообщений: 22
Благодарностей: 1
Полезность: 35

Доброго времени суток, в очередной раз столкнулся с проблемой...
Поставил себе на сервер плагин промокодов, но...
При активации промокода в консоли выдаёт:
Код:
L 02/28/2021 - 07:23:01: Актвация промокода (1234, abcdefghijklmnopqrstuv, 60 мин) - GSClient (STEAM_2:0:1241910057)
L 02/28/2021 - 07:23:01: [admin_loader.amxx] Загружено 13 администраторов из MySQL
stats


А нужные флаги так и не выдаются.

Исходный код:
Cкрытый текст
Код:
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <time>
#include <reapi>

const TASK_LOAD_CONFIG = 518232;
const TASK_LOAD = 158716;

/* Настройки */
#define SQL_HOST "" // Хост базы данных
#define SQL_DATEBASE "" // База данных
#define SQL_USER "" // Пользователь базы данных
#define SQL_PASSWORD "" // Пароль от базы данных

#define SERVER_ID 4 // id сервера
#define SQL_TABLE "" // Таблица с админами
#define SQL_TABLE_SERVERS "" // Таблица для активации админов

#define PLUGIN_PREFIX "Online" // Префикс перед сообщениями в чате и в логах
#define COMMAND "promocode" // Команда для ввода промокода


//#define SEE_MENU // (*) Показ меню после первой смерти.

#if defined SEE_MENU
new bool:g_bSeeMotd[33];
new KEYSMENU = (1<<4)|(1<<9);
#endif


enum _:eData_Codes { PROMOCODE[64], ACCESS[64], TIME };
new aDataCodes[eData_Codes];

enum _:TOTAL_SQL_TYPES { SQL_TYPE_INSERT, SQL_TYPE_IGNORE }
new Handle:g_hSqlTuple;
new g_szSteamID[MAX_PLAYERS + 1][34];

new g_szLogFile[PLATFORM_MAX_PATH];

public plugin_init() {
register_plugin("Promocode", "0.1", "AlexandrFiner");
register_clcmd(COMMAND, "Command_Promcode");
register_clcmd("say /promo", "Open_PromoMenu");
register_clcmd("say_team /promo", "Open_PromoMenu");
register_menucmd(register_menuid("Open_PromoMenu"), 1023, "Close_PromoMenu");
register_dictionary("time.txt");

#if defined SEE_MENU
RegisterHookChain(RG_CBasePlayer_Killed, "player_kill", true);
register_menu("Menu_Server", KEYSMENU, "Menu_Server");
#endif

}

public client_putinserver(id)
get_user_authid(id, g_szSteamID[id], charsmax(g_szSteamID[]));

public plugin_cfg() {
new szDir[] = "addons/amxmodx/logs/promocode";
if(!dir_exists(szDir)) {
mkdir(szDir);
}
new szDate[16]; get_time("%Y%m%d", szDate, charsmax(szDate));
formatex(g_szLogFile, charsmax(g_szLogFile), "%s/log_%s.txt", szDir, szDate);

SQL_SetAffinity("mysql");
g_hSqlTuple = SQL_MakeDbTuple(SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DATEBASE);
}


#if defined SEE_MENU
public player_kill(victim)
{
if(!is_user_connected(victim)) {
return;
}

if(!g_bSeeMotd[victim]) {
static menu[1024], len;
len = formatex(menu[len], charsmax(menu) - len, "\rХочешь узнать как получить бесплатно VIP?^n^n");
len += formatex(menu[len], charsmax(menu) - len, "\r5. \yДа, Я хочу VIP :)^n");
len += formatex(menu[len], charsmax(menu) - len, "\r0. \yВыход");

show_menu(victim, KEYSMENU, menu, -1, "Menu_Server");
}
g_bSeeMotd[victim] = true;
}

public Menu_Server(victim, key) {
switch(key) {
case 4: {
if(is_user_connected(victim)) {
show_motd(victim, "forum.txt", "Forum");
}
}
}
}

public client_disconnected(id)
{
g_bSeeMotd[id] = false;
}
#endif


public SQL_Handler(iFailState, Handle:sqlQuery, const szError[], iError, const szData[], iDataSize) {
switch(iFailState)
{
case TQUERY_CONNECT_FAILED:
{
log_amx("MySQL connection failed");
log_amx("[ %d ] %s", iError, szError);
if(iDataSize) {
log_amx("Query state: %d", szData[1]);
}
return;
}
case TQUERY_QUERY_FAILED:
{
new szLastQuery[512];
SQL_GetQueryString(sqlQuery, szLastQuery, charsmax(szLastQuery));
log_amx("MySQL query failed");
log_amx("[ %d ] %s", iError, szError);
log_amx("[ SQL ] %s", szLastQuery);
if(iDataSize) {
log_amx("Query state: %d", szData[1]);
}
return;
}
}

new iAuthType = szData[0];
switch(iAuthType)
{
case SQL_TYPE_INSERT:
{
new insertId = SQL_GetInsertId(sqlQuery);

new szQuery[512];
formatex(szQuery, charsmax(szQuery), "INSERT INTO `%s` (`admin_id`, `server_id`, `use_static_bantime`) VALUES ('%d', '%d', 'no')", SQL_TABLE_SERVERS, insertId, SERVER_ID);
new szDataNew[1]; szDataNew[0] = SQL_TYPE_IGNORE;
SQL_ThreadQuery(g_hSqlTuple, "SQL_Handler", szQuery, szDataNew, sizeof szDataNew);
server_cmd("amx_reloadadmins");
}
}
}

public plugin_precache() {
load_config();
set_task_ex(60.0, "load_config", TASK_LOAD_CONFIG, .flags = SetTask_Repeat);
}

public load_config() {
new szPath[PLATFORM_MAX_PATH], szCfgFile[PLATFORM_MAX_PATH];
get_configsdir(szPath, charsmax(szPath));
formatex(szCfgFile, charsmax(szCfgFile), "%s/promocode.ini", szPath);

if(!file_exists(szCfgFile)) {
set_fail_state("[Промокоды] Файл %s не найден.", szCfgFile);
return;
}

new iConfig = fopen(szCfgFile, "rt");
if(iConfig)
{
new szBuffer[512], szTime[8];
while(!feof(iConfig))
{
fgets(iConfig, szBuffer, charsmax(szBuffer));

if(!szBuffer[0] || szBuffer[0] == ';')
continue;

parse(szBuffer,
aDataCodes[PROMOCODE], charsmax(aDataCodes[PROMOCODE]),
aDataCodes[ACCESS], charsmax(aDataCodes[ACCESS]),
szTime, charsmax(szTime)
);
aDataCodes[TIME] = str_to_num(szTime);
break;
}
fclose(iConfig);
}
}

public Command_Promcode(id) {
new szArg[32];
read_args(szArg, charsmax(szArg));
remove_quotes(szArg);
trim(szArg);

if(!strlen(szArg))
return PLUGIN_HANDLED;

if(equali(szArg, aDataCodes[PROMOCODE])) {
//if(get_user_flags(id) & read_flags(aDataCodes[PROMOCODE])) {
if(get_user_flags(id) & read_flags(aDataCodes[ACCESS])) {
client_print_color(id, print_team_red, "^4[%s] ^1Простите, но у вас ^3уже ^1есть эта привлегия^1.", PLUGIN_PREFIX);
return PLUGIN_HANDLED;
}

new iTime = 60 * aDataCodes[TIME];

//client_print_color(id, id, "^4[%s] ^1Вам ^4успешно ^1выдана услуга. Срок: ^3%d мин.", PLUGIN_PREFIX, aDataCodes[TIME]);
client_print_color(0, print_team_default, "^4[%s] ^1Игрок ^3%n ^1активировал ^4Promo VIP ^1на ^3%d ^1мин.", PLUGIN_PREFIX, id, aDataCodes[TIME]);

new iSysTime;
iSysTime = get_systime() + 7200;
new szQuery[512];
formatex
(
szQuery, charsmax(szQuery),
"\
INSERT INTO `%s` ( `access`, `flags`, `steamid`, `nickname`, `icq`, `created`, `expired`, `days`, `ashow`) VALUES ( '%s', 'ce', '%s', '%s', 'Промокод - %n', '%d', '%d', '1', '1') \
",
SQL_TABLE, aDataCodes[ACCESS], g_szSteamID[id], g_szSteamID[id], id, iSysTime, (iSysTime + iTime)
);
new szDataNew[1]; szDataNew[0] = SQL_TYPE_INSERT;
SQL_ThreadQuery(g_hSqlTuple, "SQL_Handler", szQuery, szDataNew, sizeof szDataNew);

log_to_file(g_szLogFile, "Актвация промокода (%s, %s, %d мин) - %n (%s)", aDataCodes[PROMOCODE], aDataCodes[ACCESS], aDataCodes[TIME], id, g_szSteamID[id]);
}
else client_print_color(id, print_team_red, "^4[%s] ^1Данный промокод ^3не найден^1 в базе.", PLUGIN_PREFIX);
return PLUGIN_HANDLED;
}

public Open_PromoMenu(id) {
new szMenu[512],
iLen = formatex(szMenu, charsmax(szMenu), "\yАктивировать промокод^n^n");
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wВвести промокод^n");
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r0. \wВыход");
return show_menu(id, (1<<0|1<<9), szMenu, -1, "Open_PromoMenu");
}

public Close_PromoMenu(id, iKey) {
switch(iKey) {
case 0: {
client_cmd(id, "messagemode ^"%s^"", COMMAND);
client_print_color(id, id, "^4[%s] ^1Введите промо код и нажмите Enter.", PLUGIN_PREFIX);
}
case 9: return PLUGIN_HANDLED;
}
return Open_PromoMenu(id);
}


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


что-то вроде подписи
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Impeccable
сообщение 28.2.2021, 13:06
Сообщение #2
Стаж: 5 лет 2 месяца

Сообщений: 22
Благодарностей: 1
Полезность: 35

Всё, я разобрался. Дело было в том, что я SERVER ID не поменял...))
Код:
Код:
#define SERVER_ID


что-то вроде подписи
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Impeccable
сообщение 28.2.2021, 16:27
Сообщение #3
Стаж: 5 лет 2 месяца

Сообщений: 22
Благодарностей: 1
Полезность: 35

Если кто-то захочет заюзать данный плагин и столкнётся с проблемой такой, что флаги по факту будут выданы на n-ое время больше, чем вы указала то просто в строке
Код:
iSysTime = get_systime() + 7200;

Оставьте только:
Код:
iSysTime = get_systime();


что-то вроде подписи
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Impeccable
сообщение 28.2.2021, 16:53
Сообщение #4
Стаж: 5 лет 2 месяца

Сообщений: 22
Благодарностей: 1
Полезность: 35

Проблема на проблеме... =)
Пока что я не знаю как её решить...
Суть в том, что новые промокоды, которые я добавляю - невозможно активировать...
Пишет, мол не находит в базе


что-то вроде подписи
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Impeccable
сообщение 3.3.2021, 7:12
Сообщение #5
Стаж: 5 лет 2 месяца

Сообщений: 22
Благодарностей: 1
Полезность: 35

Связался с разработчиком данного плагина и он заявил, что промокоды добавляются через Python скрипт, но вот как это всё же убрать? Как сделать, чтобы те промокоды, которые я добавляю - работали?
Подскажите пожалуйста


что-то вроде подписи
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя r1nk0
сообщение 3.3.2021, 9:01
Сообщение #6


Стаж: 12 лет

Сообщений: 1417
Благодарностей: 705
Полезность: 349

Цитата(Impeccable @ 3.3.2021, 8:12) *
Связался с разработчиком данного плагина и он заявил, что промокоды добавляются через Python скрипт, но вот как это всё же убрать? Как сделать, чтобы те промокоды, которые я добавляю - работали?
Подскажите пожалуйста



покажи как в базе выглядит нормальный промокод и добавленные тобой


Создание и редактирование карт ($) - vk.com/id476857873
Настройка и техническое обслуживание ваших игровых серверов - vk.com/id476857873
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Impeccable
сообщение 4.3.2021, 6:48
Сообщение #7
Стаж: 5 лет 2 месяца

Сообщений: 22
Благодарностей: 1
Полезность: 35

r1nk0,
Не совсем понял суть... Как прописаны в ini?
Цитата
"1234" "abcdefghijklmnopqrstuv" "60"
"9999" "abcdefghijklmnopqrstuv" "60"


А в базе данных хз как... Если я правильно понял, то плагин не из базы их считывает, а из файла...


что-то вроде подписи
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TheArtemMaps
сообщение 4.3.2021, 8:46
Сообщение #8
Стаж: 6 лет 8 месяцев
Город: Киев

Сообщений: 703
Благодарностей: 64
Полезность: < 0

Цитата(Impeccable @ 4.3.2021, 7:48) *
r1nk0,
Не совсем понял суть... Как прописаны в ini?


А в базе данных хз как... Если я правильно понял, то плагин не из базы их считывает, а из файла...

Не только с файла ещё из базы данных.


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Impeccable
сообщение 8.3.2021, 16:06
Сообщение #9
Стаж: 5 лет 2 месяца

Сообщений: 22
Благодарностей: 1
Полезность: 35

Не могу понять, в какой таблице смотреть...


что-то вроде подписи
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Impeccable
сообщение 8.3.2021, 16:12
Сообщение #10
Стаж: 5 лет 2 месяца

Сообщений: 22
Благодарностей: 1
Полезность: 35

Может прояснит ситуацию как-то, сам скрипт промокодов
https://dev-cs.ru/resources/1069/ (не реклама)


что-то вроде подписи
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: