PDA

Просмотр полной версии : [Вопрос] По команде бан.



Zeror_Dalglish
03.07.2014, 17:44
Начал делать бан с использованием Unix Time. Все хорошо но почему то записывает Дату бана не правильно, а именно "46".


CMD:ban(playerid, params[])
{
new string[128], data[16], unbandate, year, month, day;
if(PlayerInfo[playerid][pLogged] == 0) return true;
if(PlayerInfo[playerid][pAdmin] < 3) return true;
if(sscanf(params, "uds[128]", params[0], params[1], params[2])) return SendClientMessage(playerid, COLOR_GRAD, "Используйте: /ban [id игрока] [Дней] [причина]");
if(params[1] > 30 || params[1] < 1) return SendClientMessage(playerid, COLOR_GRAD, "Время бана от 1 до 30 дней");
format(string, sizeof(string), "Администратор %s забанил игрока %s на %d дней. Причина: %s",PlayerInfo[playerid][pName],PlayerInfo[params[0]][pName],params[1],params[2]);
SendClientMessageToAll(COLOR_LIGHTRED, string);

getdate(year, month, day);
format(data, 16, "%02d.%02d.%04d", day, month, year);
unbandate = gettime() + params[1]*86400;
format(mysql_string, sizeof(mysql_string), "INSERT INTO `"TABLE_BANS"` (Name_Admin, Name_Player, Lvl_Admin, Ban_Data, Unban_Data, Ban_Reason) VALUES ('%s', '%s','%d', '%d', %d, '%s')", PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName], PlayerInfo[playerid][pAdmin], data, unbandate, params[2]);
mysql_function_query(connect_to_mysql, mysql_string, false, "", "");
return true;
}

В таблице тип varchar(32)
Возможно что то с сравнением, ибо я не знаю какое поставить :). Ставил utf8_general_ci все равно так же.
Помогите пожалуйста.

underwoker
03.07.2014, 20:24
Снова элементарные ответы же. Нужно просто чуть чуть посидеть и понять. Почитай о заполнителях.
%d / %i - числовые.
%s - строка.
В данном случае нужно использовать %s, т.к. ты отформатировал дату.

format(mysql_string, sizeof(mysql_string), "INSERT INTO `"TABLE_BANS"` (Name_Admin, Name_Player, Lvl_Admin, Ban_Data, Unban_Data, Ban_Reason) VALUES ('%s', '%s','%d', '%s', %d, '%s')", PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName], PlayerInfo[playerid][pAdmin], data, unbandate, params[2]);
mysql_function_query(connect_to_mysql, mysql_string, false, "", "");

Edwin
03.07.2014, 20:55
Varchar-то правильно, конвертированная дата записывается в текстовом варианте
Но ты ж и записывай текст а не числитель
Так должно работать:

CMD:ban(playerid, params[])
{
new string[128], data[16], unbandate, year, month, day;
if(PlayerInfo[playerid][pLogged] == 0) return true;
if(PlayerInfo[playerid][pAdmin] < 3) return true;
if(sscanf(params, "uds[128]", params[0], params[1], params[2])) return SendClientMessage(playerid, COLOR_GRAD, "Используйте: /ban [id игрока] [Дней] [причина]");
if(params[1] > 30 || params[1] < 1) return SendClientMessage(playerid, COLOR_GRAD, "Время бана от 1 до 30 дней");
format(string, sizeof(string), "Администратор %s забанил игрока %s на %d дней. Причина: %s",PlayerInfo[playerid][pName],PlayerInfo[params[0]][pName],params[1],params[2]);
SendClientMessageToAll(COLOR_LIGHTRED, string);

getdate(year, month, day);
format(data, 16, "%02d.%02d.%04d", day, month, year);
unbandate = gettime() + params[1]*86400;
format(mysql_string, sizeof(mysql_string), "INSERT INTO `"TABLE_BANS"` (Name_Admin, Name_Player, Lvl_Admin, Ban_Data, Unban_Data, Ban_Reason) VALUES ('%s', '%s','%d', '%s', %d, '%s')", PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName], PlayerInfo[playerid][pAdmin], data, unbandate, params[2]);
mysql_function_query(connect_to_mysql, mysql_string, false, "", "");
return true;
}

Zeror_Dalglish
03.07.2014, 21:49
Снова элементарные ответы же. Нужно просто чуть чуть посидеть и понять. Почитай о заполнителях.
%d / %i - числовые.
%s - строка.
В данном случае нужно использовать %s, т.к. ты отформатировал дату.

format(mysql_string, sizeof(mysql_string), "INSERT INTO `"TABLE_BANS"` (Name_Admin, Name_Player, Lvl_Admin, Ban_Data, Unban_Data, Ban_Reason) VALUES ('%s', '%s','%d', '%s', %d, '%s')", PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName], PlayerInfo[playerid][pAdmin], data, unbandate, params[2]);
mysql_function_query(connect_to_mysql, mysql_string, false, "", "");

ой тупанул, я видимо не заметил что %d -стоит.
В любом случий спасибо.

- - - Добавлено - - -

А вот ещё, как то можно конвертировать время до разбана в дни?

Edwin
03.07.2014, 23:36
"Спасибо" в карман не положишь :D

Конечно можно

stock UNIXconvert(unix_timestamp = 0)
{
new yyear = 1970, mmonth = 1, dday = 1, hhour = 0, mminute = 0, ssecond = 0;
getdate(yyear, mmonth, dday);
gettime(hhour, mminute, ssecond);
yyear = unix_timestamp / 31556926;
unix_timestamp -= yyear * 31556926;
yyear += 1970;

if(yyear % 4 == 0) unix_timestamp -= 21600;

dday = unix_timestamp / 86400;

switch (dday)
{
// в ssecond будет временно хранится число месяца
case 0..30 : { ssecond = dday; mmonth = 1; }
case 31..58 : { ssecond = dday - 31; mmonth = 2; }
case 59..89 : { ssecond = dday - 59; mmonth = 3; }
case 90..119 : { ssecond = dday - 90; mmonth = 4; }
case 120..150 : { ssecond = dday - 120; mmonth = 5; }
case 151..180 : { ssecond = dday - 151; mmonth = 6; }
case 181..211 : { ssecond = dday - 181; mmonth = 7; }
case 212..242 : { ssecond = dday - 212; mmonth = 8; }
case 243..272 : { ssecond = dday - 243; mmonth = 9; }
case 273..303 : { ssecond = dday - 273; mmonth = 10; }
case 304..333 : { ssecond = dday - 304; mmonth = 11; }
case 334..366 : { ssecond = dday - 334; mmonth = 12; }
}

unix_timestamp -= dday * 86400;
hhour = unix_timestamp / 3600;

unix_timestamp -= hhour * 3600;
mminute = unix_timestamp / 60;

unix_timestamp -= mminute * 60;
dday = ssecond + 1;
ssecond = unix_timestamp;

new string[50];
switch(mmonth)
{
case 1: string = "января";
case 2: string = "февраля";
case 3: string = "марта";
case 4: string = "апреля";
case 5: string = "мая";
case 6: string = "июня";
case 7: string = "июля";
case 8: string = "августа";
case 9: string = "сентября";
case 10: string = "октября";
case 11: string = "ноября";
case 12: string = "декабря";
}
format(string, sizeof(string), "%02d %s %d, %d:%02d:%02d", dday, string, yyear, hhour, mminute, ssecond);
return string;
}

underwoker
04.07.2014, 00:45
ой тупанул, я видимо не заметил что %d -стоит.
В любом случий спасибо.

- - - Добавлено - - -

А вот ещё, как то можно конвертировать время до разбана в дни?
Увы, вроде бы нет. Если вы о Unban_Data имеете ввиду.
Потом просто будут проблемы с проверкой даты разбана при коннекте игрока.

Zeror_Dalglish
04.07.2014, 00:50
Увы, вроде бы нет. Если вы о Unban_Data имеете ввиду.
Потом просто будут проблемы с проверкой даты разбана при коннекте игрока.

Да сам уже подумал что потом проблемы будут но вот ещё проблема.


forward Block_Ip_Address();
public Block_Ip_Address()
{
new rows,fields, Ip_Address_Block[17];
new Ip_Address_Block_Time;
cache_get_data(rows, fields);
Ip_Address_Block[16] = cache_get_field_content_int(0, "IP");
Ip_Address_Block_Time = cache_get_field_content_int(0, "Clock");
if(rows)
{
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
print("Вызыван паблик");
}
}

Почему то не срабатывает код хотя в логи что паблик вызван.

underwoker
04.07.2014, 02:09
Прологируйте так, все возможно.
Получается игрока просто не банит снова при нахождении ип адреса в БД?

forward Block_Ip_Address();
public Block_Ip_Address()
{
new rows,fields, Ip_Address_Block[17];
new Ip_Address_Block_Time;
cache_get_data(rows, fields);
Ip_Address_Block[16] = cache_get_field_content_int(0, "IP");
Ip_Address_Block_Time = cache_get_field_content_int(0, "Clock");
if(rows)
{
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
print("IP:%s Time: %d",Ip_Address_Block[16], Ip_Address_Block_Time);
print("Вызыван паблик");
}
}

Zeror_Dalglish
04.07.2014, 02:37
Прологируйте так, все возможно.
Получается игрока просто не банит снова при нахождении ип адреса в БД?

forward Block_Ip_Address();
public Block_Ip_Address()
{
new rows,fields, Ip_Address_Block[17];
new Ip_Address_Block_Time;
cache_get_data(rows, fields);
Ip_Address_Block[16] = cache_get_field_content_int(0, "IP");
Ip_Address_Block_Time = cache_get_field_content_int(0, "Clock");
if(rows)
{
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
print("IP:%s Time: %d",Ip_Address_Block[16], Ip_Address_Block_Time);
print("Вызыван паблик");
}
}



forward Block_Ip_Address_Cheeck();
public Block_Ip_Address_Cheeck()
{
new rows,fields, Ip_Address_Block[17];
new Ip_Address_Block_Time;
cache_get_data(rows, fields);
cache_get_field_content(0, "IP", Ip_Address_Block[16], connect_to_mysql);
Ip_Address_Block_Time = cache_get_field_content_int(0, "Clock");
if(rows)
{
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
printf("IP:%s Time: %d",Ip_Address_Block[16], Ip_Address_Block_Time);
print("Вызыван паблик");
}
}



[01:36:25] IP: Time: 100500
[01:36:25] Вызыван паблик

underwoker
04.07.2014, 03:16
forward Block_Ip_Address_Cheeck();
public Block_Ip_Address_Cheeck()
{
new rows,fields, Ip_Address_Block[17];
new Ip_Address_Block_Time;
cache_get_data(rows, fields);
cache_get_field_content(0, "IP", Ip_Address_Block[16], connect_to_mysql);
Ip_Address_Block_Time = cache_get_field_content_int(0, "Clock");
if(rows)
{
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
printf("IP:%s Time: %d",Ip_Address_Block[16], Ip_Address_Block_Time);
print("Вызыван паблик");
}
}



[01:36:25] IP: Time: 100500
[01:36:25] Вызыван паблик

Версия мускула какая? Если R8 - то у вас тут код не правилен вообще.
Как вы делаете запрос в мускул для того чтобы взять данные из IP и Clock?
То что у вас сейчас никак работать не будет, нету в функции аргументов дабы узнавался ид игрока и т.д.

Zeror_Dalglish
04.07.2014, 03:47
Версия мускула какая? Если R8 - то у вас тут код не правилен вообще.
Как вы делаете запрос в мускул для того чтобы взять данные из IP и Clock?
То что у вас сейчас никак работать не будет, нету в функции аргументов дабы узнавался ид игрока и т.д.

Зачем узнавать ID игрока?

- - - Добавлено - - -



mysql_function_query(connect_to_mysql, "SELECT * FROM `"TABLE_BLOCK_IP"`", true, "Block_Ip_Address_Cheeck", "");

underwoker
04.07.2014, 04:16
Зачем узнавать ID игрока?

- - - Добавлено - - -



mysql_function_query(connect_to_mysql, "SELECT * FROM `"TABLE_BLOCK_IP"`", true, "Block_Ip_Address_Cheeck", "");

Точно, путаю со своей системой банов. У вас же другая.

forward Block_Ip_Address_Cheeck();
public Block_Ip_Address_Cheeck()
{
new rows, fields, Ip_Address_Block[17], Ip_Address_Block_Time;
cache_get_data(rows, fields);
if(rows)
{
cache_get_field_content(0, "IP", Ip_Address_Block[16], connect_to_mysql);
Ip_Address_Block_Time = cache_get_field_content_int(0, "Clock");
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
printf("IP:%s Time: %d",Ip_Address_Block[16], Ip_Address_Block_Time);
print("Вызван паблик");
}
}

Zeror_Dalglish
04.07.2014, 04:24
Точно, путаю со своей системой банов. У вас же другая.

forward Block_Ip_Address_Cheeck();
public Block_Ip_Address_Cheeck()
{
new rows, fields, Ip_Address_Block[17], Ip_Address_Block_Time;
cache_get_data(rows, fields);
if(rows)
{
cache_get_field_content(0, "IP", Ip_Address_Block[16], connect_to_mysql);
Ip_Address_Block_Time = cache_get_field_content_int(0, "Clock");
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
printf("IP:%s Time: %d",Ip_Address_Block[16], Ip_Address_Block_Time);
print("Вызван паблик");
}
}

А разница? Вообще ей нету.
Проверил код все так же

underwoker
04.07.2014, 04:37
А разница? Вообще ей нету.
Проверил код все так же
Ей богу, хренью страдаете с этой BlockIpAddress.
Давным давно бы сделали уже обычную систему банов, в интернете полно мануалов.

И собсна еще 1 вопрос, где вы берете ип подключенного игрока?
Ни в паблике, ни в запросе - нет IP игрока.

Zeror_Dalglish
04.07.2014, 04:50
Ей богу, хренью страдаете с этой BlockIpAddress.
Давным давно бы сделали уже обычную систему банов, в интернете полно мануалов.

И собсна еще 1 вопрос, где вы берете ип подключенного игрока?
Ни в паблике, ни в запросе - нет IP игрока.

cache_get_field_content(0, "IP", Ip_Address_Block[16], connect_to_mysql);

- - - Добавлено - - -

И почему я должен отказываться от такой системы?

DeimoS
04.07.2014, 10:34
forward Block_Ip_Address();
public Block_Ip_Address()
{
new rows,fields, Ip_Address_Block[17];
new Ip_Address_Block_Time;
cache_get_data(rows, fields);
if(rows)
{
while(mysql_retrieve_row())
{
cache_get_field_content(0, "IP", Ip_Address_Block);
Ip_Address_Block_Time = cache_get_field_content_int(0, "Clock");
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
}
}
}

Zeror_Dalglish
04.07.2014, 13:09
forward Block_Ip_Address();
public Block_Ip_Address()
{
new rows,fields, Ip_Address_Block[17];
new Ip_Address_Block_Time;
cache_get_data(rows, fields);
if(rows)
{
while(mysql_retrieve_row())
{
cache_get_field_content(0, "IP", Ip_Address_Block);
Ip_Address_Block_Time = cache_get_field_content_int(0, "Clock");
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
}
}
}
Нету такой функций в R8 MySQL

DeimoS
04.07.2014, 13:37
Нету такой функций в R8 MySQL

Какой из?

Zeror_Dalglish
04.07.2014, 13:39
Какой из?

mysql_retrieve_row()

DeimoS
04.07.2014, 13:42
Эмм, покажите инклюд, который вы используете

Osetin
04.07.2014, 13:52
А что мешает использовать это:
http://pro-pawn.ru/showthread.php?8542-BlockIpAddress

DeimoS
04.07.2014, 13:55
А что мешает использовать это:
http://pro-pawn.ru/showthread.php?8542-BlockIpAddress

Тут это и используется. Только данные о блокировке хранятся в памяти сервера и при выключении всё стирается. А тут сделана запись времени бана при выключении сервера и возобновление блокировки при старте.

Zeror_Dalglish
04.07.2014, 14:47
Тут это и используется. Только данные о блокировке хранятся в памяти сервера и при выключении всё стирается. А тут сделана запись времени бана при выключении сервера и возобновление блокировки при старте.



/**
* MySQL plugin R39-2
*/


#if defined mysql_included
#endinput
#endif
#define mysql_included


/**
* Common error codes
*
* Client: http://dev.mysql.com/doc/refman/5.1/en/error-messages-client.html
* Server: http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html
*/

#define ER_DBACCESS_DENIED_ERROR 1044
#define ER_ACCESS_DENIED_ERROR 1045
#define ER_UNKNOWN_TABLE 1109
#define ER_SYNTAX_ERROR 1149
#define CR_SERVER_GONE_ERROR 2006
#define CR_SERVER_LOST 2013
#define CR_COMMAND_OUT_OF_SYNC 2014
#define CR_SERVER_LOST_EXTENDED 2055


enum E_LOGLEVEL
{
LOG_NONE = 0,
LOG_ERROR = 1,
LOG_WARNING = 2,
LOG_DEBUG = 4,

LOG_ALL = LOG_ERROR | LOG_WARNING | LOG_DEBUG
};

enum E_LOGTYPE
{
LOG_TYPE_TEXT = 1,
LOG_TYPE_HTML = 2
};

enum ORM_Error
{
ERROR_OK,
ERROR_NO_DATA
};

enum E_VAR_DATATYPE
{
DATATYPE_INT,
DATATYPE_FLOAT,
DATATYPE_STRING
};

enum E_MYSQL_OPTION
{
DUPLICATE_CONNECTIONS,
LOG_TRUNCATE_DATA
};

enum E_EXECTIME_UNIT
{
UNIT_MILLISECONDS,
UNIT_MICROSECONDS
};


#define mysql_real_escape_string mysql_escape_string
#define cache_num_fields cache_get_field_count
#define cache_num_rows cache_get_row_count
#define mysql_function_query(%0,%1,%2,%3,"%4"%5) mysql_tquery(%0,%1,%3,#%4%5)
#define mysql_reload(%0) mysql_tquery(%0,"FLUSH PRIVILEGES")
#define mysql_debug(%0) (%0?mysql_log(LOG_ALL):mysql_log())
#define ismysqlnull(%0) (strcmp(%0,"NULL",false)==0)


// ORM functions
native ORM:orm_create(const table[], connectionHandle = 1);
native orm_destroy(ORM:id);

native ORM_Error:orm_errno(ORM:id);

native orm_apply_cache(ORM:id, row);
native orm_select(ORM:id, callback[] = "", format[] = "", {Float, _}:...);
/*
native orm_select_inline(ORM:id, callback:Callback, format[], {Float,_}:...); //y_inline
*/
native orm_update(ORM:id);
native orm_insert(ORM:id, callback[] = "", format[] = "", {Float, _}:...);
/*
native orm_insert_inline(ORM:id, callback:Callback, format[], {Float,_}:...); //y_inline
*/
native orm_delete(ORM:id, bool:clearvars=true);

native orm_load(ORM:id, callback[] = "", format[] = "", {Float, _}:...) = orm_select;
native orm_save(ORM:id, callback[] = "", format[] = "", {Float, _}:...);

native orm_addvar_int(ORM:id, &var, varname[]);
native orm_addvar_float(ORM:id, &Float:var, varname[]);
native orm_addvar_string(ORM:id, var[], var_maxlen, varname[]);

native orm_delvar(ORM:id, varname[]);
native orm_setkey(ORM:id, varname[]);


// MySQL functions
native mysql_log(E_LOGLEVEL:loglevel = LOG_ERROR | LOG_WARNING, E_LOGTYPE:logtype = LOG_TYPE_TEXT);
native mysql_connect(const host[], const user[], const database[], const password[], port = 3306, bool:autoreconnect = true, pool_size = 2);
native mysql_close(connectionHandle = 1);
native mysql_reconnect(connectionHandle = 1);

native mysql_unprocessed_queries(connectionHandle = 1);
native mysql_current_handle();
native mysql_option(E_MYSQL_OPTION:type, value);

native mysql_errno(connectionHandle = 1);
native mysql_escape_string(const source[], destination[], connectionHandle = 1, max_len = sizeof(destination));
native mysql_format(connectionHandle, output[], len, format[], {Float,_}:...);
native mysql_pquery(connectionHandle, query[], callback[] = "", format[] = "", {Float,_}:...);
/*
native mysql_pquery_inline(connHandle, query[], callback:Callback, format[], {Float,_}:...); //y_inline
*/
native mysql_tquery(connectionHandle, query[], callback[] = "", format[] = "", {Float,_}:...);
/*
native mysql_tquery_inline(connHandle, query[], callback:Callback, format[], {Float,_}:...); //y_inline
*/
native Cache:mysql_query(conhandle, query[], bool:use_cache = true);

native mysql_stat(destination[], connectionHandle = 1, max_len = sizeof(destination));
native mysql_get_charset(destination[], connectionHandle = 1, max_len = sizeof(destination));
native mysql_set_charset(charset[], connectionHandle = 1);


// Cache functions
native cache_get_data(&num_rows, &num_fields, connectionHandle = 1);
native cache_get_row_count(connectionHandle = 1);
native cache_get_field_count(connectionHandle = 1);
native cache_get_field_name(field_index, destination[], connectionHandle = 1, max_len = sizeof(destination));

native cache_get_row(row, field_idx, destination[], connectionHandle = 1, max_len = sizeof(destination));
native cache_get_row_int(row, field_idx, connectionHandle = 1);
native Float:cache_get_row_float(row, field_idx, connectionHandle = 1);

native cache_get_field_content(row, const field_name[], destination[], connectionHandle = 1, max_len = sizeof(destination));
native cache_get_field_content_int(row, const field_name[], connectionHandle = 1);
native Float:cache_get_field_content_float(row, const field_name[], connectionHandle = 1);

native Cache:cache_save(connectionHandle = 1);
native cache_delete(Cache:cache_id, connectionHandle = 1);
native cache_set_active(Cache:cache_id, connectionHandle = 1);
native cache_is_valid(Cache:cache_id, connectionHandle = 1);

native cache_affected_rows(connectionHandle = 1);
native cache_insert_id(connectionHandle = 1);
native cache_warning_count(connectionHandle = 1);

native cache_get_query_exec_time(E_EXECTIME_UNIT:unit = UNIT_MICROSECONDS);
native cache_get_query_string(destination[], max_len = sizeof(destination));


// Forward declarations
forward OnQueryError(errorid, error[], callback[], query[], connectionHandle);


#if defined MYSQL_USE_YINLINE || defined E_CALLBACK_DATA
#if !defined E_CALLBACK_DATA
#include <YSI\y_inline>
#endif

static g_MySQL_InlineData[1000][E_CALLBACK_DATA];
static g_MySQL_VarArray[32][YSI_MAX_STRING];
static g_MySQL_AddressArray[32];

stock MySQL_Internal_SaveInline(callback:CB)
{
static bool:g_MySQL_LazyInit = true;
if(g_MySQL_LazyInit == true)
{
//set g_MySQL_InlineData empty
for(new i=0; i < sizeof(g_MySQL_InlineData); ++i)
for(new E_CALLBACK_DATA:e = E_CALLBACK_DATA:0; e < E_CALLBACK_DATA; ++e)
g_MySQL_InlineData[i][e] = 0;
g_MySQL_LazyInit = false;
}

for(new i=0; i < sizeof(g_MySQL_InlineData); ++i)
if(_:g_MySQL_InlineData[i][E_CALLBACK_DATA_POINTER] == 0)
if (Callback_Get(CB, g_MySQL_InlineData[i]))
return i;

return -1;
}

#define mysql_pquery_inline(%0,%1,%2,"%3"%4) \
mysql_pquery(%0,%1,"FJ37DH3JG_MYSQL_INTERNAL","d"#%3,MySQL_Internal_SaveInline(%2)%4)

#define mysql_tquery_inline(%0,%1,%2,"%3"%4) \
mysql_tquery(%0,%1,"FJ37DH3JG_MYSQL_INTERNAL","d"#%3,MySQL_Internal_SaveInline(%2)%4)

#define orm_select_inline(%0,%1,"%2"%3) \
orm_select(%0,"FJ37DH3JG_MYSQL_INTERNAL","d"#%2,MySQL_Internal_SaveInline(%1)%3)

#define orm_insert_inline(%0,%1,"%2"%3) \
orm_insert(%0,"FJ37DH3JG_MYSQL_INTERNAL","d"#%2,MySQL_Internal_SaveInline(%1)%3)


forward FJ37DH3JG_MYSQL_INTERNAL(...);
public FJ37DH3JG_MYSQL_INTERNAL(...)
{
new InlineDataIndex = getarg(0);
if(InlineDataIndex < 0)
return 0;

for(new i=0; i < numargs()-1; ++i)
{
for(new l=0; l < YSI_MAX_STRING; ++l)
{
new TmpVal = getarg(i+1, l);
if(l == 0 || g_MySQL_VarArray[i][l-1] < 256)
g_MySQL_VarArray[i][l] = TmpVal;
else
break;
}

g_MySQL_AddressArray[i] = AMX_GetRelativeAddress(g_MySQL_VarArray[i][0]);
}

Callback_Array(g_MySQL_InlineData[InlineDataIndex], g_MySQL_AddressArray);

Callback_Release(g_MySQL_InlineData[InlineDataIndex]);
for(new E_CALLBACK_DATA:e = E_CALLBACK_DATA:0; e < E_CALLBACK_DATA; ++e)
g_MySQL_InlineData[InlineDataIndex][e] = 0;

for(new i=0; i < numargs()-1; ++i)
{
g_MySQL_AddressArray[i] = 0;
for(new l=0, lmax=strlen(g_MySQL_VarArray[i]); l < lmax; ++l)
g_MySQL_VarArray[i][l] = 0;
}
return 1;
}
#endif


- - - Добавлено - - -


Тут это и используется. Только данные о блокировке хранятся в памяти сервера и при выключении всё стирается. А тут сделана запись времени бана при выключении сервера и возобновление блокировки при старте.



/**
* MySQL plugin R39-2
*/


#if defined mysql_included
#endinput
#endif
#define mysql_included


/**
* Common error codes
*
* Client: http://dev.mysql.com/doc/refman/5.1/en/error-messages-client.html
* Server: http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html
*/

#define ER_DBACCESS_DENIED_ERROR 1044
#define ER_ACCESS_DENIED_ERROR 1045
#define ER_UNKNOWN_TABLE 1109
#define ER_SYNTAX_ERROR 1149
#define CR_SERVER_GONE_ERROR 2006
#define CR_SERVER_LOST 2013
#define CR_COMMAND_OUT_OF_SYNC 2014
#define CR_SERVER_LOST_EXTENDED 2055


enum E_LOGLEVEL
{
LOG_NONE = 0,
LOG_ERROR = 1,
LOG_WARNING = 2,
LOG_DEBUG = 4,

LOG_ALL = LOG_ERROR | LOG_WARNING | LOG_DEBUG
};

enum E_LOGTYPE
{
LOG_TYPE_TEXT = 1,
LOG_TYPE_HTML = 2
};

enum ORM_Error
{
ERROR_OK,
ERROR_NO_DATA
};

enum E_VAR_DATATYPE
{
DATATYPE_INT,
DATATYPE_FLOAT,
DATATYPE_STRING
};

enum E_MYSQL_OPTION
{
DUPLICATE_CONNECTIONS,
LOG_TRUNCATE_DATA
};

enum E_EXECTIME_UNIT
{
UNIT_MILLISECONDS,
UNIT_MICROSECONDS
};


#define mysql_real_escape_string mysql_escape_string
#define cache_num_fields cache_get_field_count
#define cache_num_rows cache_get_row_count
#define mysql_function_query(%0,%1,%2,%3,"%4"%5) mysql_tquery(%0,%1,%3,#%4%5)
#define mysql_reload(%0) mysql_tquery(%0,"FLUSH PRIVILEGES")
#define mysql_debug(%0) (%0?mysql_log(LOG_ALL):mysql_log())
#define ismysqlnull(%0) (strcmp(%0,"NULL",false)==0)


// ORM functions
native ORM:orm_create(const table[], connectionHandle = 1);
native orm_destroy(ORM:id);

native ORM_Error:orm_errno(ORM:id);

native orm_apply_cache(ORM:id, row);
native orm_select(ORM:id, callback[] = "", format[] = "", {Float, _}:...);
/*
native orm_select_inline(ORM:id, callback:Callback, format[], {Float,_}:...); //y_inline
*/
native orm_update(ORM:id);
native orm_insert(ORM:id, callback[] = "", format[] = "", {Float, _}:...);
/*
native orm_insert_inline(ORM:id, callback:Callback, format[], {Float,_}:...); //y_inline
*/
native orm_delete(ORM:id, bool:clearvars=true);

native orm_load(ORM:id, callback[] = "", format[] = "", {Float, _}:...) = orm_select;
native orm_save(ORM:id, callback[] = "", format[] = "", {Float, _}:...);

native orm_addvar_int(ORM:id, &var, varname[]);
native orm_addvar_float(ORM:id, &Float:var, varname[]);
native orm_addvar_string(ORM:id, var[], var_maxlen, varname[]);

native orm_delvar(ORM:id, varname[]);
native orm_setkey(ORM:id, varname[]);


// MySQL functions
native mysql_log(E_LOGLEVEL:loglevel = LOG_ERROR | LOG_WARNING, E_LOGTYPE:logtype = LOG_TYPE_TEXT);
native mysql_connect(const host[], const user[], const database[], const password[], port = 3306, bool:autoreconnect = true, pool_size = 2);
native mysql_close(connectionHandle = 1);
native mysql_reconnect(connectionHandle = 1);

native mysql_unprocessed_queries(connectionHandle = 1);
native mysql_current_handle();
native mysql_option(E_MYSQL_OPTION:type, value);

native mysql_errno(connectionHandle = 1);
native mysql_escape_string(const source[], destination[], connectionHandle = 1, max_len = sizeof(destination));
native mysql_format(connectionHandle, output[], len, format[], {Float,_}:...);
native mysql_pquery(connectionHandle, query[], callback[] = "", format[] = "", {Float,_}:...);
/*
native mysql_pquery_inline(connHandle, query[], callback:Callback, format[], {Float,_}:...); //y_inline
*/
native mysql_tquery(connectionHandle, query[], callback[] = "", format[] = "", {Float,_}:...);
/*
native mysql_tquery_inline(connHandle, query[], callback:Callback, format[], {Float,_}:...); //y_inline
*/
native Cache:mysql_query(conhandle, query[], bool:use_cache = true);

native mysql_stat(destination[], connectionHandle = 1, max_len = sizeof(destination));
native mysql_get_charset(destination[], connectionHandle = 1, max_len = sizeof(destination));
native mysql_set_charset(charset[], connectionHandle = 1);


// Cache functions
native cache_get_data(&num_rows, &num_fields, connectionHandle = 1);
native cache_get_row_count(connectionHandle = 1);
native cache_get_field_count(connectionHandle = 1);
native cache_get_field_name(field_index, destination[], connectionHandle = 1, max_len = sizeof(destination));

native cache_get_row(row, field_idx, destination[], connectionHandle = 1, max_len = sizeof(destination));
native cache_get_row_int(row, field_idx, connectionHandle = 1);
native Float:cache_get_row_float(row, field_idx, connectionHandle = 1);

native cache_get_field_content(row, const field_name[], destination[], connectionHandle = 1, max_len = sizeof(destination));
native cache_get_field_content_int(row, const field_name[], connectionHandle = 1);
native Float:cache_get_field_content_float(row, const field_name[], connectionHandle = 1);

native Cache:cache_save(connectionHandle = 1);
native cache_delete(Cache:cache_id, connectionHandle = 1);
native cache_set_active(Cache:cache_id, connectionHandle = 1);
native cache_is_valid(Cache:cache_id, connectionHandle = 1);

native cache_affected_rows(connectionHandle = 1);
native cache_insert_id(connectionHandle = 1);
native cache_warning_count(connectionHandle = 1);

native cache_get_query_exec_time(E_EXECTIME_UNIT:unit = UNIT_MICROSECONDS);
native cache_get_query_string(destination[], max_len = sizeof(destination));


// Forward declarations
forward OnQueryError(errorid, error[], callback[], query[], connectionHandle);


#if defined MYSQL_USE_YINLINE || defined E_CALLBACK_DATA
#if !defined E_CALLBACK_DATA
#include <YSI\y_inline>
#endif

static g_MySQL_InlineData[1000][E_CALLBACK_DATA];
static g_MySQL_VarArray[32][YSI_MAX_STRING];
static g_MySQL_AddressArray[32];

stock MySQL_Internal_SaveInline(callback:CB)
{
static bool:g_MySQL_LazyInit = true;
if(g_MySQL_LazyInit == true)
{
//set g_MySQL_InlineData empty
for(new i=0; i < sizeof(g_MySQL_InlineData); ++i)
for(new E_CALLBACK_DATA:e = E_CALLBACK_DATA:0; e < E_CALLBACK_DATA; ++e)
g_MySQL_InlineData[i][e] = 0;
g_MySQL_LazyInit = false;
}

for(new i=0; i < sizeof(g_MySQL_InlineData); ++i)
if(_:g_MySQL_InlineData[i][E_CALLBACK_DATA_POINTER] == 0)
if (Callback_Get(CB, g_MySQL_InlineData[i]))
return i;

return -1;
}

#define mysql_pquery_inline(%0,%1,%2,"%3"%4) \
mysql_pquery(%0,%1,"FJ37DH3JG_MYSQL_INTERNAL","d"#%3,MySQL_Internal_SaveInline(%2)%4)

#define mysql_tquery_inline(%0,%1,%2,"%3"%4) \
mysql_tquery(%0,%1,"FJ37DH3JG_MYSQL_INTERNAL","d"#%3,MySQL_Internal_SaveInline(%2)%4)

#define orm_select_inline(%0,%1,"%2"%3) \
orm_select(%0,"FJ37DH3JG_MYSQL_INTERNAL","d"#%2,MySQL_Internal_SaveInline(%1)%3)

#define orm_insert_inline(%0,%1,"%2"%3) \
orm_insert(%0,"FJ37DH3JG_MYSQL_INTERNAL","d"#%2,MySQL_Internal_SaveInline(%1)%3)


forward FJ37DH3JG_MYSQL_INTERNAL(...);
public FJ37DH3JG_MYSQL_INTERNAL(...)
{
new InlineDataIndex = getarg(0);
if(InlineDataIndex < 0)
return 0;

for(new i=0; i < numargs()-1; ++i)
{
for(new l=0; l < YSI_MAX_STRING; ++l)
{
new TmpVal = getarg(i+1, l);
if(l == 0 || g_MySQL_VarArray[i][l-1] < 256)
g_MySQL_VarArray[i][l] = TmpVal;
else
break;
}

g_MySQL_AddressArray[i] = AMX_GetRelativeAddress(g_MySQL_VarArray[i][0]);
}

Callback_Array(g_MySQL_InlineData[InlineDataIndex], g_MySQL_AddressArray);

Callback_Release(g_MySQL_InlineData[InlineDataIndex]);
for(new E_CALLBACK_DATA:e = E_CALLBACK_DATA:0; e < E_CALLBACK_DATA; ++e)
g_MySQL_InlineData[InlineDataIndex][e] = 0;

for(new i=0; i < numargs()-1; ++i)
{
g_MySQL_AddressArray[i] = 0;
for(new l=0, lmax=strlen(g_MySQL_VarArray[i]); l < lmax; ++l)
g_MySQL_VarArray[i][l] = 0;
}
return 1;
}
#endif


- - - Добавлено - - -

вставлял в один php тег не знаю почему 2 получилось

underwoker
04.07.2014, 18:37
cache_get_field_content(0, "IP", Ip_Address_Block[16], connect_to_mysql);

- - - Добавлено - - -

И почему я должен отказываться от такой системы?
Возможно потому, что вы занимаетесь извращенством.

DeimoS
04.07.2014, 18:46
/**
* MySQL plugin R39-2
*/


#if defined mysql_included
#endinput
#endif
#define mysql_included


/**
* Common error codes
*
* Client: http://dev.mysql.com/doc/refman/5.1/en/error-messages-client.html
* Server: http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html
*/

#define ER_DBACCESS_DENIED_ERROR 1044
#define ER_ACCESS_DENIED_ERROR 1045
#define ER_UNKNOWN_TABLE 1109
#define ER_SYNTAX_ERROR 1149
#define CR_SERVER_GONE_ERROR 2006
#define CR_SERVER_LOST 2013
#define CR_COMMAND_OUT_OF_SYNC 2014
#define CR_SERVER_LOST_EXTENDED 2055


enum E_LOGLEVEL
{
LOG_NONE = 0,
LOG_ERROR = 1,
LOG_WARNING = 2,
LOG_DEBUG = 4,

LOG_ALL = LOG_ERROR | LOG_WARNING | LOG_DEBUG
};

enum E_LOGTYPE
{
LOG_TYPE_TEXT = 1,
LOG_TYPE_HTML = 2
};

enum ORM_Error
{
ERROR_OK,
ERROR_NO_DATA
};

enum E_VAR_DATATYPE
{
DATATYPE_INT,
DATATYPE_FLOAT,
DATATYPE_STRING
};

enum E_MYSQL_OPTION
{
DUPLICATE_CONNECTIONS,
LOG_TRUNCATE_DATA
};

enum E_EXECTIME_UNIT
{
UNIT_MILLISECONDS,
UNIT_MICROSECONDS
};


#define mysql_real_escape_string mysql_escape_string
#define cache_num_fields cache_get_field_count
#define cache_num_rows cache_get_row_count
#define mysql_function_query(%0,%1,%2,%3,"%4"%5) mysql_tquery(%0,%1,%3,#%4%5)
#define mysql_reload(%0) mysql_tquery(%0,"FLUSH PRIVILEGES")
#define mysql_debug(%0) (%0?mysql_log(LOG_ALL):mysql_log())
#define ismysqlnull(%0) (strcmp(%0,"NULL",false)==0)


// ORM functions
native ORM:orm_create(const table[], connectionHandle = 1);
native orm_destroy(ORM:id);

native ORM_Error:orm_errno(ORM:id);

native orm_apply_cache(ORM:id, row);
native orm_select(ORM:id, callback[] = "", format[] = "", {Float, _}:...);
/*
native orm_select_inline(ORM:id, callback:Callback, format[], {Float,_}:...); //y_inline
*/
native orm_update(ORM:id);
native orm_insert(ORM:id, callback[] = "", format[] = "", {Float, _}:...);
/*
native orm_insert_inline(ORM:id, callback:Callback, format[], {Float,_}:...); //y_inline
*/
native orm_delete(ORM:id, bool:clearvars=true);

native orm_load(ORM:id, callback[] = "", format[] = "", {Float, _}:...) = orm_select;
native orm_save(ORM:id, callback[] = "", format[] = "", {Float, _}:...);

native orm_addvar_int(ORM:id, &var, varname[]);
native orm_addvar_float(ORM:id, &Float:var, varname[]);
native orm_addvar_string(ORM:id, var[], var_maxlen, varname[]);

native orm_delvar(ORM:id, varname[]);
native orm_setkey(ORM:id, varname[]);


// MySQL functions
native mysql_log(E_LOGLEVEL:loglevel = LOG_ERROR | LOG_WARNING, E_LOGTYPE:logtype = LOG_TYPE_TEXT);
native mysql_connect(const host[], const user[], const database[], const password[], port = 3306, bool:autoreconnect = true, pool_size = 2);
native mysql_close(connectionHandle = 1);
native mysql_reconnect(connectionHandle = 1);

native mysql_unprocessed_queries(connectionHandle = 1);
native mysql_current_handle();
native mysql_option(E_MYSQL_OPTION:type, value);

native mysql_errno(connectionHandle = 1);
native mysql_escape_string(const source[], destination[], connectionHandle = 1, max_len = sizeof(destination));
native mysql_format(connectionHandle, output[], len, format[], {Float,_}:...);
native mysql_pquery(connectionHandle, query[], callback[] = "", format[] = "", {Float,_}:...);
/*
native mysql_pquery_inline(connHandle, query[], callback:Callback, format[], {Float,_}:...); //y_inline
*/
native mysql_tquery(connectionHandle, query[], callback[] = "", format[] = "", {Float,_}:...);
/*
native mysql_tquery_inline(connHandle, query[], callback:Callback, format[], {Float,_}:...); //y_inline
*/
native Cache:mysql_query(conhandle, query[], bool:use_cache = true);

native mysql_stat(destination[], connectionHandle = 1, max_len = sizeof(destination));
native mysql_get_charset(destination[], connectionHandle = 1, max_len = sizeof(destination));
native mysql_set_charset(charset[], connectionHandle = 1);


// Cache functions
native cache_get_data(&num_rows, &num_fields, connectionHandle = 1);
native cache_get_row_count(connectionHandle = 1);
native cache_get_field_count(connectionHandle = 1);
native cache_get_field_name(field_index, destination[], connectionHandle = 1, max_len = sizeof(destination));

native cache_get_row(row, field_idx, destination[], connectionHandle = 1, max_len = sizeof(destination));
native cache_get_row_int(row, field_idx, connectionHandle = 1);
native Float:cache_get_row_float(row, field_idx, connectionHandle = 1);

native cache_get_field_content(row, const field_name[], destination[], connectionHandle = 1, max_len = sizeof(destination));
native cache_get_field_content_int(row, const field_name[], connectionHandle = 1);
native Float:cache_get_field_content_float(row, const field_name[], connectionHandle = 1);

native Cache:cache_save(connectionHandle = 1);
native cache_delete(Cache:cache_id, connectionHandle = 1);
native cache_set_active(Cache:cache_id, connectionHandle = 1);
native cache_is_valid(Cache:cache_id, connectionHandle = 1);

native cache_affected_rows(connectionHandle = 1);
native cache_insert_id(connectionHandle = 1);
native cache_warning_count(connectionHandle = 1);

native cache_get_query_exec_time(E_EXECTIME_UNIT:unit = UNIT_MICROSECONDS);
native cache_get_query_string(destination[], max_len = sizeof(destination));


// Forward declarations
forward OnQueryError(errorid, error[], callback[], query[], connectionHandle);


#if defined MYSQL_USE_YINLINE || defined E_CALLBACK_DATA
#if !defined E_CALLBACK_DATA
#include <YSI\y_inline>
#endif

static g_MySQL_InlineData[1000][E_CALLBACK_DATA];
static g_MySQL_VarArray[32][YSI_MAX_STRING];
static g_MySQL_AddressArray[32];

stock MySQL_Internal_SaveInline(callback:CB)
{
static bool:g_MySQL_LazyInit = true;
if(g_MySQL_LazyInit == true)
{
//set g_MySQL_InlineData empty
for(new i=0; i < sizeof(g_MySQL_InlineData); ++i)
for(new E_CALLBACK_DATA:e = E_CALLBACK_DATA:0; e < E_CALLBACK_DATA; ++e)
g_MySQL_InlineData[i][e] = 0;
g_MySQL_LazyInit = false;
}

for(new i=0; i < sizeof(g_MySQL_InlineData); ++i)
if(_:g_MySQL_InlineData[i][E_CALLBACK_DATA_POINTER] == 0)
if (Callback_Get(CB, g_MySQL_InlineData[i]))
return i;

return -1;
}

#define mysql_pquery_inline(%0,%1,%2,"%3"%4) \
mysql_pquery(%0,%1,"FJ37DH3JG_MYSQL_INTERNAL","d"#%3,MySQL_Internal_SaveInline(%2)%4)

#define mysql_tquery_inline(%0,%1,%2,"%3"%4) \
mysql_tquery(%0,%1,"FJ37DH3JG_MYSQL_INTERNAL","d"#%3,MySQL_Internal_SaveInline(%2)%4)

#define orm_select_inline(%0,%1,"%2"%3) \
orm_select(%0,"FJ37DH3JG_MYSQL_INTERNAL","d"#%2,MySQL_Internal_SaveInline(%1)%3)

#define orm_insert_inline(%0,%1,"%2"%3) \
orm_insert(%0,"FJ37DH3JG_MYSQL_INTERNAL","d"#%2,MySQL_Internal_SaveInline(%1)%3)


forward FJ37DH3JG_MYSQL_INTERNAL(...);
public FJ37DH3JG_MYSQL_INTERNAL(...)
{
new InlineDataIndex = getarg(0);
if(InlineDataIndex < 0)
return 0;

for(new i=0; i < numargs()-1; ++i)
{
for(new l=0; l < YSI_MAX_STRING; ++l)
{
new TmpVal = getarg(i+1, l);
if(l == 0 || g_MySQL_VarArray[i][l-1] < 256)
g_MySQL_VarArray[i][l] = TmpVal;
else
break;
}

g_MySQL_AddressArray[i] = AMX_GetRelativeAddress(g_MySQL_VarArray[i][0]);
}

Callback_Array(g_MySQL_InlineData[InlineDataIndex], g_MySQL_AddressArray);

Callback_Release(g_MySQL_InlineData[InlineDataIndex]);
for(new E_CALLBACK_DATA:e = E_CALLBACK_DATA:0; e < E_CALLBACK_DATA; ++e)
g_MySQL_InlineData[InlineDataIndex][e] = 0;

for(new i=0; i < numargs()-1; ++i)
{
g_MySQL_AddressArray[i] = 0;
for(new l=0, lmax=strlen(g_MySQL_VarArray[i]); l < lmax; ++l)
g_MySQL_VarArray[i][l] = 0;
}
return 1;
}
#endif


Странный какой-то у вас инклюд, я вам скажу... Ну ищите подобную функцию, ибо не знаю как вы собираетесь без неё загружать все строки одновременно



Возможно потому, что вы занимаетесь извращенством.

Вы так же говорили бы и при переходе с SendClientMessage на диалоговые окна, когда они только появились?
Тут задумка совершенно проста. Храним в базе данных IP и время блокировки этого самого IP. При старте сервера вызываем новую функцию блокировки пользователей "BlockIpAddress" и блокируем все IP из базы. При выключении сервера обновляем данные в БД исходя из того, сколько сервер проработал. И получаем точно такой же эффект, как если бы блокировали с помощью функции "Ban" (То есть на сервер даже не пускало бы и коннекта не происходило). В данном случае человеку нужен именно такой эффект и он его реализовал. В чём заключается извращение?

Zeror_Dalglish
04.07.2014, 18:50
Странный какой-то у вас инклюд, я вам скажу... Ну ищите подобную функцию, ибо не знаю как вы собираетесь без неё загружать все строки одновременно




Вы так же говорили бы и при переходе с SendClientMessage на диалоговые окна, когда они только появились?
Тут задумка совершенно проста. Храним в базе данных IP и время блокировки этого самого IP. При старте сервера вызываем новую функцию блокировки пользователей "BlockIpAddress" и блокируем все IP из базы. При выключении сервера обновляем данные в БД исходя из того, сколько сервер проработал. И получаем точно такой же эффект, как если бы блокировали с помощью функции "Ban" (То есть на сервер даже не пускало бы и коннекта не происходило). В данном случае человеку нужен именно такой эффект и он его реализовал. В чём заключается извращение?

Да ну..
Это же BlueG его плагин и инклуд.
https://github.com/pBlueG/SA-MP-MySQL/releases

DeimoS
04.07.2014, 18:57
forward Block_Ip_Address();
public Block_Ip_Address()
{
new rows,fields, Ip_Address_Block[17];
new Ip_Address_Block_Time;
cache_get_data(rows, fields);
if(rows)
{
for(new r; r < rows; r++)
{
cache_get_field_content(r, "IP", Ip_Address_Block);
Ip_Address_Block_Time = cache_get_field_content_int(r, "Clock");
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
}
}
}

Zeror_Dalglish
04.07.2014, 20:59
forward Block_Ip_Address();
public Block_Ip_Address()
{
new rows,fields, Ip_Address_Block[17];
new Ip_Address_Block_Time;
cache_get_data(rows, fields);
if(rows)
{
for(new r; r < rows; r++)
{
cache_get_field_content(r, "IP", Ip_Address_Block);
Ip_Address_Block_Time = cache_get_field_content_int(r, "Clock");
BlockIpAddress(Ip_Address_Block[16], Ip_Address_Block_Time);
}
}
}
Что только не пытался сделать...



forward Block_Ip_Address_Cheeck();
public Block_Ip_Address_Cheeck()
{
new rows,fields, Ip_Address_Block[17];
new Ip_Address_Block_Time;
cache_get_data(rows, fields);
if(rows)
{
for(new r; r < rows; r++)
{
cache_get_field_content(r, "IP", Ip_Address_Block);
Ip_Address_Block_Time = cache_get_field_content_int(r, "Clock");
BlockIpAddress(Ip_Address_Block, Ip_Address_Block_Time);
printf("Паблик Block_Ip_Address_Cheeck загружон удачно\n IP: %s Clock: %d", Ip_Address_Block, Ip_Address_Block_Time);
}
}
}

Все нормально выводит но не блокирует IP при конекте.

- - - Добавлено - - -

Моя ошибка все работает

- - - Добавлено - - -

Сойдет ли данная форумула для записи в MySQL?


unbandate = gettime() + params[1]*86400;

DeimoS
04.07.2014, 22:19
gettime нужно в миллисекунды перевести, ибо BlockIpAddress время в миллисекундах хранит

Zeror_Dalglish
06.07.2014, 03:07
http://rghost.ru/56748763 видно что уже 2 часа... Должно разбанить.


CMD:ban(playerid, params[])
{
new string[128], data[50], unbandate, year, month, day, BLOCK_IP_CHEECK[16], hour,minuite,second;
if(PlayerInfo[playerid][pLogged] == 0) return true;
if(PlayerInfo[playerid][pAdmin] < 3) return true;
if(sscanf(params, "uds[128]", params[0], params[1], params[2])) return SendClientMessage(playerid, COLOR_GRAD, "Используйте: /ban [id игрока] [Дней] [причина]");
if(params[1] > 30 || params[1] < 1) return SendClientMessage(playerid, COLOR_GRAD, "Время бана от 1 до 30 дней");
format(string, sizeof(string), "Администратор %s забанил игрока %s на %d дней. Причина: %s",PlayerInfo[playerid][pName],PlayerInfo[params[0]][pName],params[1],params[2]);
SendClientMessageToAll(COLOR_LIGHTRED, string);
getdate(year, month, day);
gettime(hour,minuite,second);
Converts(minuite);
Converts(second);
Converts(hour);
format(data, 50, "Время: %02d.%02d.%04d Дата: %02d:%02d", day, month, year, hour,minuite);
unbandate = gettime() + params[1]*86400;
GetPlayerIp(params[0],BLOCK_IP_CHEECK,sizeof(BLOCK_IP_CHEECK));
format(mysql_string, sizeof(mysql_string), "INSERT INTO `"TABLE_BANS"` (Name_Admin, Name_Player, Lvl_Admin, Ban_Data, Unban_Data, Ban_Reason) VALUES ('%s', '%s','%d', '%s', %d, '%s')", PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName], PlayerInfo[playerid][pAdmin], data, unbandate, params[2]);
mysql_function_query(connect_to_mysql, mysql_string, false, "", "");
format(mysql_string, sizeof(mysql_string), "INSERT INTO `"TABLE_BLOCK_IP"` (Name,IP, Clock) VALUES ('%s', '%s', '%d')", PlayerInfo[params[0]][pName], BLOCK_IP_CHEECK, unbandate);
mysql_function_query(connect_to_mysql, mysql_string, false, "", "");
BlockIpAddress(BLOCK_IP_CHEECK, unbandate);
KickNew(params[0]);
return true;
}



forward Check_Ban_List(playerid);
public Check_Ban_List(playerid)
{
new rows, fields, ADMIN_ISSUING_BAN[24], NAME_PLAYER[24], Kolvo_Do_Rasbana, /*SUPERVISOR,*/ BAN_DATA[32], UNBAN_DATA, REASON_FOR_THE_BAN[50], MYSQL_STRING_CHECK_BAN_LIST[400], SQL_STRING_CHECK_BAN_LIST[400];
cache_get_data(rows, fields);
cache_get_field_content(0, "Name_Admin",ADMIN_ISSUING_BAN);
cache_get_field_content(0, "Name_Player",NAME_PLAYER);
//SUPERVISOR = cache_get_field_content_int(0, "Lvl_Admin");
cache_get_field_content(0, "Ban_Data",BAN_DATA);
UNBAN_DATA = cache_get_field_content_int(0, "Unban_Data");
cache_get_field_content(0, "Ban_Reason",REASON_FOR_THE_BAN);
UNBAN_DATA - BAN_DATA[32]; /*Пытался сделать сколько осталось до разбана но выходит ошибка..
error 032: array index out of bounds (variable "BAN_DATA") */
if(!rows)
{
if(gettime() >= UNBAN_DATA)
{
mysql_format(connect_to_mysql, MYSQL_STRING_CHECK_BAN_LIST, sizeof(MYSQL_STRING_CHECK_BAN_LIST), "DELETE FROM `"TABLE_BANS"` WHERE `Name_Player` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(connect_to_mysql, MYSQL_STRING_CHECK_BAN_LIST, false, "","");
mysql_format(connect_to_mysql, SQL_STRING_CHECK_BAN_LIST, sizeof(SQL_STRING_CHECK_BAN_LIST), "DELETE FROM `"TABLE_BLOCK_IP"` WHERE `Name` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(connect_to_mysql, SQL_STRING_CHECK_BAN_LIST, false, "","");
}
for(new i = 0; i != sizeof(GZInfo); i++)
{
GangZoneShowForPlayer(playerid,GZInfo[i][id],GZcolor(GZInfo[i][gFrak]));
}
for(new td = 0; td < 12; td++) PlayerTextDrawShow(playerid, gang[playerid][td]);
if(PlayerInfo[playerid][pInformer_Off_Onn] == 1)
{
for(new i = 0; i < sizeof(gang_td); i++) TextDrawShowForPlayer(playerid, gang_td[i]);
}
else if(PlayerInfo[playerid][pInformer_Off_Onn] == 0)
{
for(new win_dalglish = 0; win_dalglish < sizeof(gang_td); win_dalglish++) TextDrawHideForPlayer(playerid, gang_td[win_dalglish]);
}
if(Capture_On_Off == 1)
{
GangZoneFlashForPlayer(playerid,IsCapture,GZcolor(ID_GANG_ON_CAPTURE[0]));
}
return true;
}
else if(rows)
{
new str[400];
format(str, sizeof(str), "{FF6347}Аккаунт: %s\nДата блокировки: %s\nАдминистратор: %s\nПричина: %s\n\nДата разблокировки: %s",PlayerInfo[playerid][pName],BAN_DATA,ADMIN_ISSUING_BAN,REASON_FOR_THE_BAN, date("%dd/%mm/%yyyy в %hh:%ii",UNBAN_DATA));
ShowPlayerDialog(playerid,91,0,"Аккаунт заблокирован:",str,"Закрыть","");
KickNew(playerid);
}
return true;
}

DeimoS
06.07.2014, 03:21
Так что вам не понятно во фразе "gettime() тоже нужно в миллисекунды перевести"? Прочтите эту (http://wiki.sa-mp.com/wiki/BlockIpAddress) и эту (http://wiki.sa-mp.com/wiki/Gettime) статьи.

Теперь по поводу диалога. У вас первое условие сработает только для тех, кто не забанен, не? Вы собираетесь удалять строку в таблице только тогда, когда ваш запрос вернул 0 строк (не нашёл нужную строку).

Zeror_Dalglish
06.07.2014, 03:51
Так что вам не понятно во фразе "gettime() тоже нужно в миллисекунды перевести"? Прочтите эту (http://wiki.sa-mp.com/wiki/BlockIpAddress) и эту (http://wiki.sa-mp.com/wiki/Gettime) статьи.

Теперь по поводу диалога. У вас первое условие сработает только для тех, кто не забанен, не? Вы собираетесь удалять строку в таблице только тогда, когда ваш запрос вернул 0 строк (не нашёл нужную строку).
Тоесть суем else if(rows) туда удаление из базы?
По поводу переводка миллисекунды у меня с математикой не очень хороши дела :)

DeimoS
06.07.2014, 03:57
forward Check_Ban_List(playerid);
public Check_Ban_List(playerid)
{
new rows, fields, ADMIN_ISSUING_BAN[24], NAME_PLAYER[24], Kolvo_Do_Rasbana, /*SUPERVISOR,*/ BAN_DATA[32], UNBAN_DATA, REASON_FOR_THE_BAN[50], MYSQL_STRING_CHECK_BAN_LIST[400], SQL_STRING_CHECK_BAN_LIST[400];
cache_get_data(rows, fields);
if(!rows) return 1;
cache_get_field_content(0, "Name_Admin",ADMIN_ISSUING_BAN);
cache_get_field_content(0, "Name_Player",NAME_PLAYER);
//SUPERVISOR = cache_get_field_content_int(0, "Lvl_Admin");
cache_get_field_content(0, "Ban_Data",BAN_DATA);
UNBAN_DATA = cache_get_field_content_int(0, "Unban_Data");
cache_get_field_content(0, "Ban_Reason",REASON_FOR_THE_BAN);
UNBAN_DATA - BAN_DATA[32]; /*Пытался сделать сколько осталось до разбана но выходит ошибка..
error 032: array index out of bounds (variable "BAN_DATA") */
if(UNBAN_DATA > gettime())
{
new str[400];
format(str, sizeof(str), "{FF6347}Аккаунт: %s\nДата блокировки: %s\nАдминистратор: %s\nПричина: %s\n\nДата разблокировки: %s",PlayerInfo[playerid][pName],BAN_DATA,ADMIN_ISSUING_BAN,REASON_FOR_THE_BAN, date("%dd/%mm/%yyyy в %hh:%ii",UNBAN_DATA));
ShowPlayerDialog(playerid,91,0,"Аккаунт заблокирован:",str,"Закрыть","");
KickNew(playerid);
return 1;
}
else
{
mysql_format(connect_to_mysql, MYSQL_STRING_CHECK_BAN_LIST, sizeof(MYSQL_STRING_CHECK_BAN_LIST), "DELETE FROM `"TABLE_BANS"` WHERE `Name_Player` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(connect_to_mysql, MYSQL_STRING_CHECK_BAN_LIST, false, "","");
mysql_format(connect_to_mysql, SQL_STRING_CHECK_BAN_LIST, sizeof(SQL_STRING_CHECK_BAN_LIST), "DELETE FROM `"TABLE_BLOCK_IP"` WHERE `Name` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(connect_to_mysql, SQL_STRING_CHECK_BAN_LIST, false, "","");
}

for(new i = 0; i != sizeof(GZInfo); i++)
{
GangZoneShowForPlayer(playerid,GZInfo[i][id],GZcolor(GZInfo[i][gFrak]));
}
for(new td = 0; td < 12; td++) PlayerTextDrawShow(playerid, gang[playerid][td]);
if(PlayerInfo[playerid][pInformer_Off_Onn] == 1)
{
for(new i = 0; i < sizeof(gang_td); i++) TextDrawShowForPlayer(playerid, gang_td[i]);
}
else if(PlayerInfo[playerid][pInformer_Off_Onn] == 0)
{
for(new win_dalglish = 0; win_dalglish < sizeof(gang_td); win_dalglish++) TextDrawHideForPlayer(playerid, gang_td[win_dalglish]);
}
if(Capture_On_Off == 1)
{
GangZoneFlashForPlayer(playerid,IsCapture,GZcolor(ID_GANG_ON_CAPTURE[0]));
}
return true;
}

А по поводу математики. Грустно конечно, но никогда не поздно научиться. В текущем состоянии код работать будет неверно

Zeror_Dalglish
06.07.2014, 04:08
На что нужно умножить что бы получить миллисекунды? :)

- - - Добавлено - - -

Проверил, не работает :(

DeimoS
06.07.2014, 04:56
https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#newwindow=1&q=%D0%BC%D0%B8%D0%BB%D0%BB%D0%B8%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%20%D0%B2%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%D0%B5

Zeror_Dalglish
06.07.2014, 05:14
Ну как то так - 86400000 ms ?
А что с кодом он все так же не работает

DeimoS
06.07.2014, 05:39
Что именно не работает?

Zeror_Dalglish
06.07.2014, 19:44
Что именно не работает?

Удаление с базы

DeimoS
07.07.2014, 09:39
Удаление с базы

Логи MySQL покажите

Zeror_Dalglish
07.07.2014, 14:21
c
Логи MySQL покажите

Хм... Вообще не работает код...


forward Check_Ban_List(playerid);
public Check_Ban_List(playerid)
{
new rows, fields, ADMIN_ISSUING_BAN[24], NAME_PLAYER[24], /*Kolvo_Do_Rasbana, SUPERVISOR,*/ BAN_DATA[32], UNBAN_DATA, REASON_FOR_THE_BAN[50], MYSQL_STRING_CHECK_BAN_LIST[400], SQL_STRING_CHECK_BAN_LIST[400];
cache_get_data(rows, fields);
if(!rows) return 1;
cache_get_field_content(0, "Name_Admin",ADMIN_ISSUING_BAN);
cache_get_field_content(0, "Name_Player",NAME_PLAYER);
//SUPERVISOR = cache_get_field_content_int(0, "Lvl_Admin");
cache_get_field_content(0, "Ban_Data",BAN_DATA);
UNBAN_DATA = cache_get_field_content_int(0, "Unban_Data");
cache_get_field_content(0, "Ban_Reason",REASON_FOR_THE_BAN);
// UNBAN_DATA - BAN_DATA[32]; Пытался сделать сколько осталось до разбана но выходит ошибка..
if(UNBAN_DATA > gettime())
{
new str[400];
format(str, sizeof(str), "{FF6347}Аккаунт: %s\nДата блокировки: %s\nАдминистратор: %s\nПричина: %s\n\nДата разблокировки: %s",PlayerInfo[playerid][pName],BAN_DATA,ADMIN_ISSUING_BAN,REASON_FOR_THE_BAN, date("%dd/%mm/%yyyy в %hh:%ii",UNBAN_DATA));
ShowPlayerDialog(playerid,91,0,"Аккаунт заблокирован:",str,"Закрыть","");
KickNew(playerid);
return 1;
}
else
{
mysql_format(connect_to_mysql, MYSQL_STRING_CHECK_BAN_LIST, sizeof(MYSQL_STRING_CHECK_BAN_LIST), "DELETE FROM `"TABLE_BANS"` WHERE `Name_Player` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(connect_to_mysql, MYSQL_STRING_CHECK_BAN_LIST, false, "","");
mysql_format(connect_to_mysql, SQL_STRING_CHECK_BAN_LIST, sizeof(SQL_STRING_CHECK_BAN_LIST), "DELETE FROM `"TABLE_BLOCK_IP"` WHERE `Name` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(connect_to_mysql, SQL_STRING_CHECK_BAN_LIST, false, "","");
}

for(new i = 0; i != sizeof(GZInfo); i++)
{
GangZoneShowForPlayer(playerid,GZInfo[i][id],GZcolor(GZInfo[i][gFrak]));
}
for(new td = 0; td < 12; td++) PlayerTextDrawShow(playerid, gang[playerid][td]);
if(PlayerInfo[playerid][pInformer_Off_Onn] == 1)
{
for(new i = 0; i < sizeof(gang_td); i++) TextDrawShowForPlayer(playerid, gang_td[i]);
}
else if(PlayerInfo[playerid][pInformer_Off_Onn] == 0)
{
for(new win_dalglish = 0; win_dalglish < sizeof(gang_td); win_dalglish++) TextDrawHideForPlayer(playerid, gang_td[win_dalglish]);
}
if(Capture_On_Off == 1)
{
GangZoneFlashForPlayer(playerid,IsCapture,GZcolor(ID_GANG_ON_CAPTURE[0]));
}
return true;
}

Не показыает даже ТД, зоны..
Подключал CrashDetect с откладкой - -d3
Не чего не выдало.

DeimoS
07.07.2014, 14:23
Ну как пожелаете... Буду я ещё тут вас уговаривать

Zeror_Dalglish
07.07.2014, 14:25
Ну как пожелаете... Буду я ещё тут вас уговаривать

В MySQL лог нету не чего...

DeimoS
07.07.2014, 14:29
В MySQL лог нету не чего...

Так включите логирование MySQL. И прологируйте выполнение кода

Zeror_Dalglish
07.07.2014, 14:31
Так включите логирование MySQL. И прологируйте выполнение кода

Вот щяс проверю, возможно и удаляет..........
Вы мне можете помочь? Тут с операторами видно не то....
Потому что показ зон, текстдрайва не идет...

DeimoS
07.07.2014, 14:33
Вот щяс проверю, возможно и удаляет..........
Вы мне можете помочь? Тут с операторами видно не то....
Потому что показ зон, текстдрайва не идет...

Я и пытаюсь вам помочь, но вы активно сопротивляетесь

Zeror_Dalglish
07.07.2014, 14:36
Я и пытаюсь вам помочь, но вы активно сопротивляетесь

Сейчас, включу логирование....
Но, сейчас забанил аккаунт захожу меня пропускает....

DeimoS
07.07.2014, 14:46
Ну блин, почему люди самостоятельно не могут сделать банальное логирование кода? Это так трудно? Для этого надо изучать несколько месяцев Pawn?

forward Check_Ban_List(playerid);
public Check_Ban_List(playerid)
{
print("Check_Ban_List - начало");
new rows, fields, ADMIN_ISSUING_BAN[24], NAME_PLAYER[24], /*Kolvo_Do_Rasbana, SUPERVISOR,*/ BAN_DATA[32], UNBAN_DATA, REASON_FOR_THE_BAN[50], MYSQL_STRING_CHECK_BAN_LIST[400], SQL_STRING_CHECK_BAN_LIST[400];
cache_get_data(rows, fields);
printf("rows = %i",rows);
if(!rows) return 1;
cache_get_field_content(0, "Name_Admin",ADMIN_ISSUING_BAN);
cache_get_field_content(0, "Name_Player",NAME_PLAYER);
//SUPERVISOR = cache_get_field_content_int(0, "Lvl_Admin");
cache_get_field_content(0, "Ban_Data",BAN_DATA);
UNBAN_DATA = cache_get_field_content_int(0, "Unban_Data");
cache_get_field_content(0, "Ban_Reason",REASON_FOR_THE_BAN);
// UNBAN_DATA - BAN_DATA[32]; Пытался сделать сколько осталось до разбана но выходит ошибка..
printf("%i > %i", UNBAN_DATA, gettime());
if(UNBAN_DATA > gettime())
{
print("Игрок забанен");
new str[400];
format(str, sizeof(str), "{FF6347}Аккаунт: %s\nДата блокировки: %s\nАдминистратор: %s\nПричина: %s\n\nДата разблокировки: %s",PlayerInfo[playerid][pName],BAN_DATA,ADMIN_ISSUING_BAN,REASON_FOR_THE_BAN, date("%dd/%mm/%yyyy в %hh:%ii",UNBAN_DATA));
ShowPlayerDialog(playerid,91,0,"Аккаунт заблокирован:",str,"Закрыть","");
KickNew(playerid);
return 1;
}
else
{
print("Игрок разбанен");
mysql_format(connect_to_mysql, MYSQL_STRING_CHECK_BAN_LIST, sizeof(MYSQL_STRING_CHECK_BAN_LIST), "DELETE FROM `"TABLE_BANS"` WHERE `Name_Player` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(connect_to_mysql, MYSQL_STRING_CHECK_BAN_LIST, false, "","");
mysql_format(connect_to_mysql, SQL_STRING_CHECK_BAN_LIST, sizeof(SQL_STRING_CHECK_BAN_LIST), "DELETE FROM `"TABLE_BLOCK_IP"` WHERE `Name` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(connect_to_mysql, SQL_STRING_CHECK_BAN_LIST, false, "","");
}

for(new i = 0; i != sizeof(GZInfo); i++)
{
GangZoneShowForPlayer(playerid,GZInfo[i][id],GZcolor(GZInfo[i][gFrak]));
}
for(new td = 0; td < 12; td++) PlayerTextDrawShow(playerid, gang[playerid][td]);
if(PlayerInfo[playerid][pInformer_Off_Onn] == 1)
{
for(new i = 0; i < sizeof(gang_td); i++) TextDrawShowForPlayer(playerid, gang_td[i]);
}
else if(PlayerInfo[playerid][pInformer_Off_Onn] == 0)
{
for(new win_dalglish = 0; win_dalglish < sizeof(gang_td); win_dalglish++) TextDrawHideForPlayer(playerid, gang_td[win_dalglish]);
}
if(Capture_On_Off == 1)
{
GangZoneFlashForPlayer(playerid,IsCapture,GZcolor(ID_GANG_ON_CAPTURE[0]));
}
print("Check_Ban_List - конец");
return true;
}
И да, гангзоны будут показаны только если игрок был забанен, но время бана кончилось. Если вам надо иначе - вынесите код показа гангзон из данной функции и поместите его в коллбэк, откуда функция вызывается (ниже вызова этой функции)

Zeror_Dalglish
07.07.2014, 15:29
Ну блин, почему люди самостоятельно не могут сделать банальное логирование кода? Это так трудно? Для этого надо изучать несколько месяцев Pawn?

forward Check_Ban_List(playerid);
public Check_Ban_List(playerid)
{
print("Check_Ban_List - начало");
new rows, fields, ADMIN_ISSUING_BAN[24], NAME_PLAYER[24], /*Kolvo_Do_Rasbana, SUPERVISOR,*/ BAN_DATA[32], UNBAN_DATA, REASON_FOR_THE_BAN[50], MYSQL_STRING_CHECK_BAN_LIST[400], SQL_STRING_CHECK_BAN_LIST[400];
cache_get_data(rows, fields);
printf("rows = %i",rows);
if(!rows) return 1;
cache_get_field_content(0, "Name_Admin",ADMIN_ISSUING_BAN);
cache_get_field_content(0, "Name_Player",NAME_PLAYER);
//SUPERVISOR = cache_get_field_content_int(0, "Lvl_Admin");
cache_get_field_content(0, "Ban_Data",BAN_DATA);
UNBAN_DATA = cache_get_field_content_int(0, "Unban_Data");
cache_get_field_content(0, "Ban_Reason",REASON_FOR_THE_BAN);
// UNBAN_DATA - BAN_DATA[32]; Пытался сделать сколько осталось до разбана но выходит ошибка..
printf("%i > %i", UNBAN_DATA, gettime());
if(UNBAN_DATA > gettime())
{
print("Игрок забанен");
new str[400];
format(str, sizeof(str), "{FF6347}Аккаунт: %s\nДата блокировки: %s\nАдминистратор: %s\nПричина: %s\n\nДата разблокировки: %s",PlayerInfo[playerid][pName],BAN_DATA,ADMIN_ISSUING_BAN,REASON_FOR_THE_BAN, date("%dd/%mm/%yyyy в %hh:%ii",UNBAN_DATA));
ShowPlayerDialog(playerid,91,0,"Аккаунт заблокирован:",str,"Закрыть","");
KickNew(playerid);
return 1;
}
else
{
print("Игрок разбанен");
mysql_format(connect_to_mysql, MYSQL_STRING_CHECK_BAN_LIST, sizeof(MYSQL_STRING_CHECK_BAN_LIST), "DELETE FROM `"TABLE_BANS"` WHERE `Name_Player` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(connect_to_mysql, MYSQL_STRING_CHECK_BAN_LIST, false, "","");
mysql_format(connect_to_mysql, SQL_STRING_CHECK_BAN_LIST, sizeof(SQL_STRING_CHECK_BAN_LIST), "DELETE FROM `"TABLE_BLOCK_IP"` WHERE `Name` = '%s'",PlayerInfo[playerid][pName]);
mysql_function_query(connect_to_mysql, SQL_STRING_CHECK_BAN_LIST, false, "","");
}

for(new i = 0; i != sizeof(GZInfo); i++)
{
GangZoneShowForPlayer(playerid,GZInfo[i][id],GZcolor(GZInfo[i][gFrak]));
}
for(new td = 0; td < 12; td++) PlayerTextDrawShow(playerid, gang[playerid][td]);
if(PlayerInfo[playerid][pInformer_Off_Onn] == 1)
{
for(new i = 0; i < sizeof(gang_td); i++) TextDrawShowForPlayer(playerid, gang_td[i]);
}
else if(PlayerInfo[playerid][pInformer_Off_Onn] == 0)
{
for(new win_dalglish = 0; win_dalglish < sizeof(gang_td); win_dalglish++) TextDrawHideForPlayer(playerid, gang_td[win_dalglish]);
}
if(Capture_On_Off == 1)
{
GangZoneFlashForPlayer(playerid,IsCapture,GZcolor(ID_GANG_ON_CAPTURE[0]));
}
print("Check_Ban_List - конец");
return true;
}
И да, гангзоны будут показаны только если игрок был забанен, но время бана кончилось. Если вам надо иначе - вынесите код показа гангзон из данной функции и поместите его в коллбэк, откуда функция вызывается (ниже вызова этой функции)

Все хорошо работает спасибо!
Тему можно закрывать.

Zeror_Dalglish
09.07.2014, 00:38
А вот ещё день разбана и время конвертирует не правильно разница между временим бана и разбана 4 часа