- Ошибка
-
// F: \ addons \ amxmodx \ scripting \ poll.sma (89): error 017: undefined symbol "get_user_gametime"
- Компилятор
- Локальный
- Amx Mod X
- 1.9.0
- Исходный код
-
#include <amxmodx>
#include <reapi>
#include <util_parser>
#include <sqlx>
#define PLUGIN "Poll"
#define VERSION "1.0"
#define AUTHOR "Nunfy"
#define MYSQL_HOSTNAME "localhost" // Вставляем свои значения
#define MYSQL_USERNAME "root"
#define MYSQL_PASSWORD ""
#define MYSQL_DATABASE "up"
// ctrl + f "table_name", выбераем сразу всё(или поочередно) заменяем этот текст на название свой таблицы в mysql
#define MAX_MENU_SIZE 512 // Максимальный размер меню
#define MAX_ITEM_LENGHT 200 // Максимальный длинна пункта меню
#define MAX_POLLS 5 // Максимальное количество опросов
#define MAX_NICKNAME_LENGHT 30 // Максимальная длинна никнейма
#define MAX_STEAM_ID_LENGHT 35 // Максимальная длинна стим ид
#define MAX_MAP_LENGHT 30 // Максимальная длинна названия карты
#define MIN_USER_GAME_TIME 3600 // Минимальное время нахождения игрока на сервере(в секундах)
#define register_menu(%0,%1,%2) register_menucmd(register_menuid(%0), %1, %2)
enum user_data
{
bool: uMenu,
uPoll,
bool: uAnswered
};
static config_file_dir[] = "addons/amxmodx/configs/poll.ini"; // путь к ini файлу
new polls[MAX_POLLS][5][MAX_ITEM_LENGHT],
polls_items[MAX_POLLS],
ud[MAX_PLAYERS + 1][user_data];
new Handle: mysql_turple;
new Handle: mysql_connection;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHookChain(RG_CBasePlayer_Killed, "user_killed");
RegisterHookChain(RG_CSGameRules_RestartRound, "restart_round");
register_menu("\r", 1023, "main_menu_handler");
new file_id = UTIL_ParserLoadFile(config_file_dir);
for(new p; p < MAX_POLLS; p++)
{
new string[10];
format(string, charsmax(string), "[POLL_%d]", p);
console_print(0, "%s", string);
for(new i; i < UTIL_ParserGetLines(file_id, string); i++)
{
UTIL_ParserGetContent(file_id, i, polls[p][i], MAX_ITEM_LENGHT + 1, string);
polls_items[p] = i;
console_print(0, "%s", polls[p][i]);
}
}
mysql_connect();
new Handle: query = SQL_PrepareQuery(mysql_connection, "UPDATE table_name SET map = ''");
if(!SQL_Execute(query))
{
new error[512];
SQL_QueryError(query, error, charsmax(error));
set_fail_state(error);
}
SQL_FreeHandle(query);
}
public client_connect(id)
{
load_data(id);
}
public client_disconnected(id, bool:drop, message[], maxlen)
{
ud[id][uMenu] = false;
ud[id][uPoll] = 0;
ud[id][uAnswered] = false;
}
public user_killed(const this, pevAttacker, iGib)
{
if(ud[this][uAnswered] == true)
{
return;
}
else if(get_user_gametime(id) < MIN_USER_GAME_TIME)
{
return;
}
new string[MAX_MENU_SIZE], keys = MENU_KEY_7;
switch(polls_items[ud[this][uPoll]])
{
case 1:
{
format(string, charsmax(string), "\r[\wОпрос\r]\
^n^n%s\
^n^n\r7. \w%s",
polls[ud[this][uPoll]][0],
polls[ud[this][uPoll]][1]);
keys = MENU_KEY_7;
}
case 2:
{
format(string, charsmax(string), "\r[\wОпрос\r]\
^n^n%s\
^n^n\r7. \w%s\
^n\r8. \w%s",
polls[ud[this][uPoll]][0],
polls[ud[this][uPoll]][1],
polls[ud[this][uPoll]][2]);
keys = MENU_KEY_7|MENU_KEY_8;
}
case 3:
{
format(string, charsmax(string), "\r[\wОпрос\r]\
^n^n%s\
^n^n\r7. \w%s\
^n\r8. \w%s\
^n\r9. \w%s",
polls[ud[this][uPoll]][0],
polls[ud[this][uPoll]][1],
polls[ud[this][uPoll]][2],
polls[ud[this][uPoll]][3]);
keys = MENU_KEY_7|MENU_KEY_8|MENU_KEY_9;
}
case 4:
{
format(string, charsmax(string), "\r[\wОпрос\r]\
^n^n%s\
^n^n\r7. \w%s\
^n\r8. \w%s\
^n\r9. \w%s\
^n\r0. \w%s",
polls[ud[this][uPoll]][0],
polls[ud[this][uPoll]][1],
polls[ud[this][uPoll]][2],
polls[ud[this][uPoll]][3],
polls[ud[this][uPoll]][4]);
keys = MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0;
}
}
ud[this][uMenu] = true;
show_menu(this, keys, string);
}
public restart_round()
{
new users_ids[MAX_PLAYERS], users_num;
get_players(users_ids, users_num, "h");
for(new i; i < users_num; i++)
{
if(ud[users_ids[i]][uMenu] == true)
{
show_menu(users_ids[i], MENU_KEY_0, "^n", 1);
}
}
}
public main_menu_handler(id, key)
{
switch(key)
{
case 6..9:
{
ud[id][uAnswered] = true;
new nickname[MAX_NICKNAME_LENGHT + 1], steam_id[MAX_STEAM_ID_LENGHT + 1], map[MAX_MAP_LENGHT + 1];
get_user_name(id, nickname, charsmax(nickname));
get_user_authid(id, steam_id, charsmax(steam_id));
get_mapname(map, charsmax(map));
new Handle: query = SQL_PrepareQuery(mysql_connection, "INSERT INTO table_name (nickname, steam_id, question, answer, next_poll_id, map) \
VALUES ('%s', '%s', '%s', '%s', '%d', '%s')",
nickname,
steam_id,
polls[ud[id][uPoll]][0],
polls[ud[id][uPoll]][key - 5],
ud[id][uPoll] + 1,
map);
if(!SQL_Execute(query))
{
new error[512];
SQL_QueryError(query, error, charsmax(error));
set_fail_state(error);
}
SQL_FreeHandle(query);
}
}
}
stock mysql_connect()
{
new error, string[512];
mysql_turple = SQL_MakeDbTuple(MYSQL_HOSTNAME, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);
SQL_SetCharset(mysql_turple, "utf8");
mysql_connection = SQL_Connect(mysql_turple, error, string, charsmax(string));
if(mysql_connection == Empty_Handle)
{
set_fail_state(string);
}
}
stock load_data(id)
{
new steam_id[MAX_STEAM_ID_LENGHT + 1];
get_user_authid(id, steam_id, charsmax(steam_id));
new Handle: query = SQL_PrepareQuery(mysql_connection, "SELECT * FROM table_name WHERE steam_id = '%s' AND next_poll_id = (SELECT MAX(next_poll_id) FROM table_name)",
steam_id);
if(!SQL_Execute(query))
{
new error[512];
SQL_QueryError(query, error, charsmax(error));
set_fail_state(error);
}
else if(SQL_MoreResults(query))
{
ud[id][uPoll] = SQL_ReadResult(query, 5);
new map[MAX_MAP_LENGHT + 1];
get_mapname(map, charsmax(map));
query = SQL_PrepareQuery(mysql_connection, "SELECT * FROM table_name WHERE steam_id = '%s' AND map = '%s'",
steam_id, map);
if(!SQL_Execute(query))
{
new error[512];
SQL_QueryError(query, error, charsmax(error));
set_fail_state(error);
}
else if(SQL_MoreResults(query))
{
ud[id][uAnswered] = true;
}
}
SQL_FreeHandle(query);
}
В этой теме было размещено решение! Перейти к решению.