BLOG Mini-Blog by Javekson

Сообщения
12
Реакции
-4
Javekson, а сделать так чтоб только только хед шот воспроизводил, можно?
Сколько искал подобных- не один не нашел
 
Сообщения
42
Реакции
0
Javekson
Не могли бы вы удалить меню из этого плагина, параметры цвета и параметр хранилища?

Потому что это лишнее и не знаю почему, но иногда после смены карты отображаются другие цвета. Я хочу, чтобы стандартные были всегда.

Плагин тот же, но без опций настроек, меню и тем более хранилища.

Пожалуйста помоги.

на сервере меню никто не использует, а записи в NVAULT еще есть:

Код:
TLVn�������b�VALVE_2:0:19678759470 0 0    �b�VALVE_2:0:15770721220 0 0��b�VALVE_2:0:6813659540 0 0��b�VALVE_2:0:16291661220 0 0��b�STEAM_0:1:996017020 0 0}��b�VALVE_2:0:5912562630 0 0d��b�STEAM_0:0:6120748460 0 0d��b�VALVE_2:0:8017310110 0 0.��b�VALVE_2:0:18234904360 0 0i�b�VALVE_2:0:17014848270 0 0��b�VALVE_2:0:8985129860 0 0
 

Вложения

Сообщения
1,015
Реакции
818
Помог
10 раз(а)
После обнародования ресурса Gate SQL мне стало интересно пострадать фигней и вот, что из этого вышло.
Данный метод собирает список(историю) имен и ip-адресов игрока.
В качестве связи, было выбрано отношение многие-ко-многим, что дало нам 5 таблиц.

Столкнулся с неудобством работы напрямую с базой данных средствами амхх, поэтому решил работать с модулем AmxxEasyHttp
Что такое PHP я узнал пару недель назад, поэтому скрипт обработки запросов работает через жопу )) но работает )
Желающих написать скрипт я не нашел, если найдутся тут, что бы сделать по умному буду рад. )

Так, имеем плагин:

C++:
/**
* Название: List Names
* Версия: 1.0.0
* Автор: Javekson
*
* Совместимость:
*    * AMX Mod X 1.9.0, AMX Mod X 1.10.0
*
* Требования:
*    * ReAPI, AmxxEasyHttp
*
* Благодарности:
*    * dev-cs.ru
*
* История изменений:
*    1.0.0 ( 01.09.2022 )
*        * Первый релиз
*/

#pragma semicolon 1

/* ---------------------------------------- НАЧАЛО НАСТРОЕК ---------------------------------------- */

/**
* Адрес скрипта для обработки отправленных запросов
*/
new const URL[ ] = "http://matroskin73.site/index.php";

/**
* Секретный ключ для защиты от подмены данных
*/
new const SECRET_KEY[ ] = "]YtSr3C_B!jDJ?7k";

/**
* Максимальное время в секундах на выполнение запроса
*/
#define REQUEST_TIMEOUT 15

/**
* Наименование логов для ведения ошибочной информации
*/
new const ERRORS_LOGS[ ] = "errors__list_names.log";

/* ---------------------------------------- КОНЕЦ НАСТРОЕК ---------------------------------------- */

#include amxmodx
#include reapi
#include easy_http

#define HTTP_STATUS_OK 200
#define MAX_SALT_LENGTH 16
#define MAX_HASH_LENGTH 34
#define MAX_BODY_LENGTH 256
#define MAX_ERROR_LENGTH 256
#define MAX_CONTENT_LENGTH 256
#define MAX_RESPONSE_LENGTH 512
#define MILLISECONDS_IN_SECOND 1000

public plugin_init( )
{
    register_plugin( "List Names", "1.0.0", "Javekson" );
    
    RegisterHookChain( RG_CBasePlayer_SetClientUserInfoName, "hook_changed_name_post", .post = true );
}

public client_authorized( id, const authid[ ] )
{
    if( !is_user_bot( id ) && !is_user_hltv( id ) )
    {
        new ip[ MAX_IP_LENGTH ];
        get_user_ip( id, ip, charsmax( ip ), .without_port = true );
        
        new name[ MAX_NAME_LENGTH ];
        formatex( name, charsmax( name ), "%n", id );
        
        make_request( authid, ip, name );
    }
}

public hook_changed_name_post( const id, const infoBuffer[ ], const newName[ ] )
{
    if( !is_user_bot( id ) && !is_user_hltv( id ) )
    {
        new authid[ MAX_AUTHID_LENGTH ];
        get_user_authid( id, authid, charsmax( authid ) );
        
        new ip[ MAX_IP_LENGTH ];
        get_user_ip( id, ip, charsmax( ip ), .without_port = true );
        
        make_request( authid, ip, newName );
    }
}

public callback_request( const EzHttpRequest:requestid )
{
    new EzHttpErrorCode:errcode = ezhttp_get_error_code( requestid );
    
    if( errcode != EZH_OK )
    {
        new error[ MAX_ERROR_LENGTH ];
        ezhttp_get_error_message( requestid, error, charsmax( error ) );
        
        log_to_file( ERRORS_LOGS, "Request state #%i failed with error: #%i, %s", requestid, errcode, error );
        
        return PLUGIN_CONTINUE;
    }
    
    new response[ MAX_RESPONSE_LENGTH ];
    ezhttp_get_data( requestid, response, charsmax( response ) );
    
    new code = ezhttp_get_http_code( requestid );
    
    if( code != HTTP_STATUS_OK )
    {
        log_to_file( ERRORS_LOGS, "Request status #%i failed with error: #%i, %s", requestid, code, response );
        
        return PLUGIN_CONTINUE;
    }
    
    // server_print( "response: %s", response );
    
    return PLUGIN_CONTINUE;
}

stock make_request( const authid[ ], const ip[ ], const name[ ] )
{
    new EzHttpOptions:request = ezhttp_create_options( );
    
    ezhttp_option_set_header( request, "Content-Type", "application/x-www-form-urlencoded" );
    ezhttp_option_set_plugin_end_behaviour( request, EZH_FORGET_REQUEST );
    ezhttp_option_set_timeout( request, REQUEST_TIMEOUT * MILLISECONDS_IN_SECOND );
    
    new salt[ MAX_SALT_LENGTH ];
    generate_string( salt, charsmax( salt ) );
    
    new content[ MAX_CONTENT_LENGTH ];
    formatex( content, charsmax( content ), "%s%s%s%s%s", authid, ip, name, salt, SECRET_KEY );
    
    new hash[ MAX_HASH_LENGTH ];
    hash_string( content, Hash_Md5, hash, charsmax( hash ) );
    
    new body[ MAX_BODY_LENGTH ];
    formatex( body, charsmax( body ), "authid=%s&ip=%s&name=%s&salt=%s&hash=%s", authid, ip, name, salt, hash );
    
    ezhttp_option_set_body( request, body );
    
    ezhttp_post( URL, "callback_request", request );
}

stock generate_string( str[ ], len )
{
    for( new i; i < len; i++ )
    {
        switch( random( 3 ) )
        {
            case 0: str[ i ] = random_num( 'A', 'Z' );
            case 1: str[ i ] = random_num( 'a', 'z' );
            case 2: str[ i ] = random_num( '0', '9' );
        }
    }
}
Обратите внимание на настройки, в них нужно указать адрес до вашего скрипта обработки и главное указать секретный ключ, который совпадает с секретным ключом в конфиге веб-скрипта.

Заливаем файлы скрипта в отдельную директорию, в конфиге указываем данные от базы, там же указываем секретный ключ.
Затем выполняем install.php что бы создались необходимые таблицы, к примеру: https://matroskin73.site/install.php в ответ должны получить что таблицы созданы успешно.

Только после этого ставим модуль и плагин. Начнется собираться инфа. В html я так же не шарю, поэтому нужен человек, кому не лень будет собрать просто табличку с данными. Но тем кто умеет вот ряд запросов, для примера, которые позволят вытащить историю ника:

Покажет все никнеймы игрока по его стим айди:
C++:
SELECT
  names.name
FROM
  lnk_users_names
  INNER JOIN users ON lnk_users_names.user_id = users.id
  INNER JOIN names ON lnk_users_names.name_id = names.id
WHERE
  users.authid = 'STEAM_0:0:172513837';
Результат:
Javekson
Javekson12

Покажет актуальный ник игрока зная его стим айди
Код:
SELECT
  names.name
FROM
  lnk_users_names
  INNER JOIN users ON lnk_users_names.user_id = users.id
  INNER JOIN names ON lnk_users_names.name_id = names.id
WHERE
  users.authid = 'STEAM_0:0:172513837'
ORDER BY
  lnk_users_names.updated_at DESC
LIMIT
  1
Результат:
Javekson12

Покажет всех игроков, кто юзал мой ник помимо меня
Код:
WITH last_names AS (SELECT
  authid,
  names.name,
  first_value(names.name) over (partition by authid order by lnk_users_names.updated_at desc) last_name
FROM
  lnk_users_names
  INNER JOIN users ON lnk_users_names.user_id = users.id
  INNER JOIN names ON lnk_users_names.name_id = names.id
) select authid, last_name from last_names where name = 'javekson';
Результат:
STEAM_0:0:172513837Javekson12
STEAM_5:0:1475500398Matros

Покажет всех игроков кто использовал более 1 ника за все время
Код:
WITH duplicates AS (SELECT
  authid,
  names.name,
  COUNT(user_id) over (partition by user_id ) count,
    first_value(names.name) over (partition by authid order by lnk_users_names.updated_at desc) last_name
FROM
  lnk_users_names
  INNER JOIN users ON lnk_users_names.user_id = users.id
  INNER JOIN names ON lnk_users_names.name_id = names.id
) select DISTINCT authid, last_name, count from duplicates HAVING count > 1
Результат:
STEAM_0:0:172513837Javekson122
STEAM_5:0:1475500398Matros 2
STEAM_5:1:1542009036KYLIK 4


Данные запросы можете использовать что бы вывести историю ника или иную информацию на своей сайт
 

Вложения

Сообщения
392
Реакции
283
Помог
3 раз(а)
Затем выполняем install.php что бы создались необходимые таблицы, к примеру: https://matroskin73.site/install.php в ответ должны получить что таблицы созданы успешно.
Я бы ещё удалял скрипт установки после этого)

Или создавал скриптом рядом какой-нить файлик, наличие которого означает что установка уже была запущена.
 
Сообщения
935
Реакции
186
Помог
4 раз(а)
pmadisson75,
Код:
enum (<<=1) {
    SCORE_STATUS_DEAD = 1,
    SCORE_STATUS_BOMB,
    SCORE_STATUS_VIP
}
These names are already in the CSSDK
Delete this part of the code
 
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
Скину пожалуй несколько статей моих которые остались когда держал свой сервер, может кто захочет позаимствовать.

Администратор - это, в первую очередь, лицо проекта, он обязан служить эталоном добропорядочного и культурного игрока.

Администраторы обязаны
  • Знать и соблюдать правила поведения игры на сервере, а также старательно следить за их соблюдением остальными игроками.
  • Использовать полномочия администратора исключительно в целях поддержания порядка в ходе игрового процесса для пресечения нарушения свода правил поведения игры на сервере.
Администраторам рекомендуется
  • Относиться к игрокам на сервере доброжелательно даже в случае плохого поведения игрока, а также избегать конфронтации с другими игроками без видимых на то причин.
  • Принимать меры дисциплинарного воздействия на игроков (нарушивших правила), не наказывая его (словесное предупреждение).
  • Применять степень тяжести и срок наказания по возрастанию (от легкой формы наказания к более тяжелой), а также принимать во внимание новый это игрок или же постоянный.
Администраторам запрещается
  • Злоупотреблять своими должностными полномочиями, которые могут мешать планомерному ходу игрового процесса и использовать их по другому поводу (личная неприязнь к игрокам, плохое настроение и т.д.)
  • Необоснованно выносить наказания игрокам или наказывать с несоответствующей причиной нарушения правил, а также выносить наказания игрокам по их просьбе.
  • Использовать команды администрирования под никнеймом другого администратора.
Дополнительная информация
  • Принимать участие в просмотре, анализе демо-записей заблокированных игроков. Выписывать тайм-коды подозрительных моментов или иных нарушений, опубликовывать информацию в общей беседе для подтверждения нарушений прочими администраторами или игроками.
  • Не поддаваться на оскорбления, провокации других игроков, начиная оскорблять, провоцировать в ответ. Ваше настроение, предвзятость к игрокам не должны отражаться на правильности принятия Вами решений при вынесении наказания.
  • Рекомендуем покидать игру если: не можете принять адекватное и взвешенное решение при вынесении наказания; находитесь в состоянии алкогольного опьянения; у вас плохое настроение, депрессия, конфликты с игроками; игровой процесс вызывает раздражение, что в итоге может привести к негативным последствиям.
Наказание за несоблюдение свода правил и обязанностей
  • За несоблюдение свода правил и обязанностей администраторов главная администрация имеет право воспользоваться своими должностными полномочиями и принять меры для устранения правонарушения, при этом степень тяжести и срок наказания может выбрать на своё усмотрение.
Общие положения
  • Данный свод правил направлен на поддержание нормального здорового общения при обсуждении различных вопросов в сообществе проекта.
  • Правила распространяются абсолютно на всех участников, включая администраторов без исключений.
  • Все участники и администраторы имеют равные права и обязанности независимо от возраста, пола, национальности, места проживания, "знакомств" и действия других обстоятельств.
  • Незнание или непонимание правил не освобождает от ответственности за их несоблюдение и само по себе является отягчающим вину обстоятельством.
Участникам не рекомендуется
  • Использовать в процессе общения любые языки, кроме русского.
  • Написание бессмысленных и/или необоснованно часто повторяющихся сообщений.
  • Использовать в процессе общения нецензурную и/или ненормативную лексику, нарушающую морально-правовые или этические нормы общения.
Участникам запрещается
  • Использовать в процессе общения ярко выраженный националистический уклон, также пропаганду, возбуждающую социальную, расовую, национальную или религиозную ненависть, языковое превосходство.
  • Оскорблять, провоцировать, дискриминировать участников по любому признаку (половому, расовому, возрастному, профессиональному и т.д.), также запрещается общение направленное на унижение чести и достоинства участников.
  • Распространять информацию, несущую рекламный, в любой степени, характер (тематические сайты, серверы, форумы и т.д.)
  • Размещать информацию (изображения, и прочие файлы) содержащую в себе: порнографический характер, информацию откровенно эротического содержания или информацию прямо, или косвенно оскорбляющую чью-либо сторону, достоинство, личность и т.п.
Некоторые особенности из свода правил и ограничений
Блок правил «Не рекомендуется» означает нестрогое соблюдение данного свода правил, однако частое нарушение рекомендаций данного блока может повлечь за собой наказание, исходя из желания администратора или сложившейся ситуации в сообществе проекта.

Наказание за несоблюдение свода правил и ограничений
За несоблюдение свода правил и ограничений в сообществе проекта администратор имеет право воспользоваться своими должностными полномочиями и принять меры для устранения правонарушения, при этом степень тяжести и срок наказания может выбрать на своё усмотрение.
Общие положения
  • Данный свод правил направлен на обеспечение благоприятных, комфортных условий игры на сервере.
  • Правила распространяются абсолютно на всех игроков, включая администраторов без исключений.
  • Все игроки и администраторы имеют равные права и обязанности независимо от возраста, пола, национальности, места проживания, "знакомств" и действия других обстоятельств.
  • Незнание или непонимание правил не освобождает от ответственности за их несоблюдение и само по себе является отягчающим вину обстоятельством.
Игрокам не рекомендуется
  • Использовать в процессе общения любые языки, кроме русского.
  • Написание бессмысленных и/или часто повторяющихся сообщений, не относящихся к игровой ситуации или мешающим игровому процессу.
  • При использовании микрофона засорять эфир разговорами, не относящимися к игровой ситуации или мешающим игровому процессу.
  • Использование микрофона лицам младше 18 лет, за исключением случаев, когда информация является полезной или относится к игровой ситуации.
  • Использовать в процессе общения нецензурную и/или ненормативную лексику, нарушающую морально-правовые или этические нормы общения.
  • Использование никнеймов, содержащих в себе нецензурные слова (выражения), а также использование чужих никнеймов.
  • Распространять информацию, несущую рекламный, в любой степени, характер (тематические сайты, серверы, форумы и т.д.)
  • Использование текстур карты, в случае если их использование приведет к получению нечестного преимущества в игре перед другими игроками.
  • Мониторинг - получение мёртвым игроком или наблюдателем информации о расположении подвижных объектов на карте (игроки, оружие, бомба, заложники) и неоднократное разглашение об этом на весь сервер.
  • Кемперство - отсутствие игрока в зоне активных действий не связанное с выполнением командного задания, а также стремление закончить раунд по таймлимиту на протяжении нескольких раундов.
Игрокам запрещается
  • Использовать в процессе общения ярко выраженный националистический уклон, также пропаганду, возбуждающую социальную, расовую, национальную или религиозную ненависть, языковое превосходство.
  • Использование никнеймов, содержащих в себе нецензурные слова (выражения), направленных на оскорбление или унижение чести и достоинства игроков, а также использование никнеймов содержащих в себе названия чит-программ.
  • Оскорблять, провоцировать, дискриминировать игроков по любому признаку (половому, расовому, возрастному, профессиональному и т.д.), также запрещается общение направленное на унижение чести и достоинства игроков.
  • Использование всякого рода читов, скриптов, алиасов, багов, любых средств, дающих нечестное преимущество в игре перед другими игроками, а также использование вредоносных программ, нарушающих нормальную работу сервера.
Некоторые особенности из свода правил поведения игры
  • Блок правил «Не рекомендуется» означает нестрогое соблюдение данного свода правил, однако частое нарушение рекомендаций данного блока может повлечь за собой наказание, исходя из желания администратора или сложившейся ситуации на сервере.
Наказание за несоблюдение свода правил поведения игры
  • За несоблюдение свода правил поведения игры на сервере администратор имеет право воспользоваться своими должностными полномочиями и принять меры для устранения правонарушения, при этом степень тяжести и срок наказания может выбрать на своё усмотрение.
Часть 1
Предисловие


Данный свод правил относится к блоку правил «Не рекомендуется», поэтому нарушение рекомендаций данного блока является некритичным, особого внимания уделять не стоит. Исключением являются случаи, когда совершенное правонарушение мешает игровому процессу, приводит к неприятным последствиям или вызывает негативное влияние на других игроков.

Использовать в процессе общения любые языки, кроме русского.
Наказание для новых: предупреждение, повторное предупреждение, мут (в крайних случаях) сроком от 10 мин.

Наказание для постоянных: предупреждение, повторное предупреждение, мут (в крайних случаях) сроком от 10 мин.

Исключение: редкое нарушение.

Написание бессмысленных и/или часто повторяющихся сообщений, не относящихся к игровой ситуации или мешающим игровому процессу.
Наказание для новых: предупреждение, повторное предупреждение, мут (в крайних случаях) сроком от 10 мин.

Наказание для постоянных: предупреждение, повторное предупреждение, мут (в крайних случаях) сроком от 10 мин.

Исключение: редкое нарушение.

При использовании микрофона засорять эфир разговорами, не относящимися к игровой ситуации или мешающим игровому процессу.
Наказание для новых: предупреждение, повторное предупреждение, мут сроком от 30 мин.

Наказание для постоянных: предупреждение, мут сроком от 180 мин.

Исключение: редкое нарушение.

Использование микрофона лицам младше 18 лет, за исключением случаев, когда информация является полезной или относится к игровой ситуации.
Наказание для новых: предупреждение, повторное предупреждение, мут сроком от 30 мин.

Наказание для постоянных: предупреждение, мут сроком от 180 мин.

Исключение: редкое нарушение, информация является полезной или относится к игровой ситуации.

Использовать в процессе общения нецензурную и/или ненормативную лексику, нарушающую морально-правовые или этические нормы общения.
Наказание для новых: предупреждение, повторное предупреждение, мут сроком от 30 мин.

Наказание для постоянных: предупреждение, мут сроком от 180 мин.

Исключение: редкое нарушение, сокращенная форма, использование маски.

Использование никнеймов, содержащих в себе нецензурные слова (выражения), а также использование чужих никнеймов.
Наказание для новых: предупреждение, смена игрового имени, удаление, блокировка (в крайних случаях) сроком от 10 мин.

Наказание для постоянных: предупреждение, смена игрового имени, удаление, блокировка (в крайних случаях) сроком от 60 мин.

Исключение: не затрудняет процесс обращения к игроку, а использование чужих никнеймов не приводит к негативным последствиям.

Распространять информацию, несущую рекламный, в любой степени, характер (тематические сайты, серверы, форумы и т.д.)
Наказание для новых: предупреждение, повторное предупреждение, мут сроком от 30 мин.

Наказание для постоянных: предупреждение, мут сроком от 180 мин.

Исключение: информация не является тематической (личные страницы социальных сетей, сторонние сообщества, сайты, форумы и т.д.)

Использование текстур карты, в случае если их использование приведет к получению нечестного преимущества в игре перед другими игроками.
Наказание для новых: предупреждение, пинок, убийство, удаление, блокировка (в крайних случаях) сроком от 10 мин.

Наказание для постоянных: предупреждение, пинок, убийство, удаление, блокировка (в крайних случаях) сроком от 60 мин.

Исключение: не приводит к получению нечестного преимущества в игре перед другими игроками.

Мониторинг - получение мёртвым игроком или наблюдателем информации о расположении подвижных объектов на карте (игроки, оружие, бомба, заложники) и неоднократное разглашение об этом на весь сервер.
Наказание для новых: предупреждение, повторное предупреждение, мут сроком от 30 мин.

Наказание для постоянных: предупреждение, мут сроком от 180 мин.

Исключение: разглашение информации является действительно необходимым для досрочного завершения игрового процесса (раунда). Разрешается разглашать любую информацию после смерти игрока в течение 5 секунд.

Кемперство - отсутствие игрока в зоне активных действий не связанное с выполнением командного задания, а также стремление закончить раунд по таймлимиту на протяжении нескольких раундов.
Наказание для новых: предупреждение, пинок, убийство, удаление, блокировка (в крайних случаях) сроком от 10 мин.

Наказание для постоянных: предупреждение, пинок, убийство, удаление, блокировка (в крайних случаях) сроком от 60 мин.

Исключение: стремление закончить раунд по таймлимиту, в случае если игрок остался один в команде или данное действие позволяет изменить ход игрового события связанного с выполнением командного задания.

Часть 2
Предисловие


Данный свод правил относится к блоку правил «Запрещается», поэтому нарушение рекомендаций данного блока является критичным, уделяем особое внимание. Исключением являются случаи, когда совершенное правонарушение не мешает игровому процессу, не приводит к неприятным последствиям или не вызывает негативного влияния на других игроков.

Использовать в процессе общения ярко выраженный националистический уклон, также пропаганду, возбуждающую социальную, расовую, национальную или религиозную ненависть, языковое превосходство.
Наказание для новых: предупреждение, мут сроком от 180 мин.

Наказание для постоянных: предупреждение, мут сроком от 720 мин.

Исключение: не предусмотрено.

Использование никнеймов, содержащих в себе нецензурные слова (выражения), направленных на оскорбление или унижение чести и достоинства игроков, а также использование никнеймов содержащих в себе названия чит-программ.
Наказание для новых: предупреждение, смена игрового имени, удаление, блокировка сроком от 180 мин.

Наказание для постоянных: предупреждение, смена игрового имени, удаление, блокировка сроком от 720 мин.

Исключение: не предусмотрено, однако разрешается навсегда заблокировать игрока если данное правонарушение затрагивает родных и близких.

Оскорблять, провоцировать, дискриминировать игроков по любому признаку (половому, расовому, возрастному, профессиональному и т.д.), также запрещается общение направленное на унижение чести и достоинства игроков.
Наказание для новых: предупреждение, мут сроком от 180 мин.

Наказание для постоянных: предупреждение, мут сроком от 720 мин.

Исключение: не предусмотрено, однако разрешается навсегда заблокировать игрока, если данное правонарушение затрагивает родных и близких.

Использование всякого рода читов, скриптов, алиасов, багов, любых средств, дающих нечестное преимущество в игре перед другими игроками, а также использование вредоносных программ, нарушающих нормальную работу сервера.
Наказание для новых: холостые патроны, блокировка сроком от 1 недели.

Наказание для постоянных: холостые патроны, блокировка сроком от 1 недели.

Исключение: действие игрока является подозрительным и однозначного решения принять невозможно, однако разрешается заблокировать игрока для дальнейшего предоставления демо-записи.
4 Июн 2023
Вступление
Итак, лагом в общем случае можно назвать все внутри-компьютерные явления, которые мешают нормальной игре. Примеры: "слайд-шоу", зависание картинки, зависание игровых объектов. Но соседа с перфоратором к лагам отнести нельзя, хотя играть он мешает

Все причины лагов можно разделить на:
1) Проблемы на компьютере игрока - их в силах решить сам игрок;
2) Проблемы на канале связи между компьютером игрока и сервером;
3) Проблемы на сервере.

Ниже рассмотрим все это подробнее, но для начала список терминов, используемых в статье.

Список определений
ХЛ, Half-Life - в статье используется как название движка (но не игры про Гордона Фримена!). Данные из статьи применимы ко всем модам, созданным на этом движке, в том числе и для Counter-Strike.

Клиент - это программа (Half-Life), запущенная на компьютере игрока, которая обменивается данными с сервером и рисует картинку игрового мира.

HLDS, Half-Life Dedicated Server - это программа такая, собственно серверная часть для Half-Life.

Сервер - Компьютер, на котором запускается хлдс.

Квар, он же CVar, он же Console Variable - переменная, использующаяся в Half-Lfe, изменяющая какие-либо параметры игры. Может быть изменена пользователем из консоли (отсюда и название).

Квары используются как на клиенте, так и в хлдс. Квары, влияющие только на серверную часть, имеют префикс sv_ (примеры - sv_gravity, sv_clienttrace);

Квары, влияющие только на клиент имеют префикс cl_ (cl_lw, cl_lc, cl_updaterate).

Матчасть. Как хлдс контролирует поток данных к клиентам.
Отдача данных в хлдс контролируется отдельно для каждого клиента, на основе двух факторов:

1) Количество пакетов в секунду, передаваемых клиенту, назовем это значение updrate
2) Максимальная скорость передачи к клиенту, назовем это значение cmrate.

Исходными данными для определения updrate служат три переменные - это клиентская cl_updaterate, и серверные sv_maxupdaterate и sv_minupdaterate.

Алгоритм определения updrate можно записать так:

updrate := cl_updaterate;
if updaterate > sv_maxupdaterate then updaterate = sv_maxupdaterate;
if updaterate < sv_minupdaterate then updaterate = sv_minupdaterate;
Видно, что по умолчанию updrate равен клиентскому значению. Однако оно не должно вылазить за пределы максимальных и минимальных значений, определенных в хлдс.

Вот несколько примеров для лучшего понимания:

cl_updaterate
= 30, sv_minupdaterate = 20, sv_maxupdaterate = 60. В Этом случае клиент будет получать от сервера 30 пакетов в секунду, т е что клиент хотел, то и получил.

cl_updaterate = 100, sv_minupdaterate = 20, sv_maxupdaterate = 60. В Этом случае клиент будет получать от сервера 60 пакетов в секунду, тк значение уперлось в верхний порог.

cl_updaterate = 10, sv_minupdaterate = 20, sv_maxupdaterate = 60. В Этом случае клиент будет получать от сервера 20 пакетов в секунду, тк значение уперлось в нижний порог.

Исходными данными для cmrate служат значения клиентской переменной rate и серверных sv_maxrate и sv_minrate. Алгоритм определения точно такой же, как и у updrate, то есть по умолчанию cmrate = rate, однако если значения вылазит за пределы sv_minrate или sv_maxrate, то оно ограничивается.

Матчасть. Как хлдс формирует пакеты. Что такое choke. (Упрощенный вариант)
При работе хлдс все данные, которые должны быть посланы клиенту, складываются в отдельный буфер (он свой для каждого клиента), где и ждут момента, когда подойдет время их пересылки. Как только время подошло, данные начинаются записываться в пакет.

На размер пакета накладывается ограничение по cmrate, чтобы не перегрузить полосу, отведенную клиенту. Максимальный размер пакета, связанный с этим ограничением, может быть вычислен как cmrate/updrate, то есть максимальная скорость делится на количество пакетов в секунду.

Но что будет, если данных сервер сгенерировал больше, чем может отправить? Тогда все просто - в пакет записываются только данные, которые укладываются в максимальный лимит, остальные остаются ждать следующей пересылки. Так же в пакет дописывается однобайтовое сообщение svc_choke, которое сигнализирует о том, что хлдс не смог послать все данные, которые сгенерировал.

Да, эти данные придут к клиенту в следующем пакете, однако придут они уже с задержкой. А если очередь данных на хлдсе разрастается и никогда не заканчивается, то на клиенте можно наблюдать нехилый такой рост пинга, и значение choke = 99 (его можно посмотреть в net_graph 3).

Отдельным пунктом стоит отметить то, что проверка на размер пакета осуществляется только если сервер работает в Internet режиме (sv_lan 0). При sv_lan 1 эта проверка отключается. Это может быть причиной появления лагов при переводе хлдса на sv_lan 0 при ненастроенных sv_maxrate/sv_minrate.

Проводим диагностику.
Итак, чтобы избавиться от лагов, надо знать их причину. А причину нам поможет узнать очень хорошее встроенное в хл средство под названием net_graph, которое отображает в реальном времени информацию, связанную с передачей данных. Имеется 3 режима отображения, мы будем пользоваться первым (net_graph 1).

Для начала дадим описание того, что там вообще отображается:

-01QcPUvM3c.jpg

1 строчка - фпс, интервал десинхронизации (грубо говоря - пинг), значение cl_updaterate

2 строчка
- информация о данных от сервера: текущий размер пакета и средняя скорость приема

3 строчка - информация о данных к серверу: текущий размер пакета и средняя скорость отдачи

4 строчка - график данных от сервера. Каждая точка - входящий пакет, высота точек показывает задержку (пинг), чем выше точка, чем больше задержка. Сами точки могут быть 3-х цветов:

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

желтый - пакет с маркером choke, значит сервер не смог отправить все данные из-за политики рейтов

красный - пакет потерялся на просторах интернета

Количество loss (потерянных паетов) и choke пакетов можно так же увидеть в цифрах режиме net_graph 3. Значение, отображаемые там нужно понимать так - сколько пакетов из последних 100 было потеряно (loss) или переполнено (choke).

5 строчка
- текущее значение cl_cmdratre

6 строчка
- два графика (хотя трудно их там разглядеть), обновляются они синхронно, каждый столбец соответствует одному кадру, который отрисовывает клиент.

Первый график - высотой в один пиксель в самой нижней части. Содержит красные точки. Ими помечаются кадры, в которые не были отправлены cmd пакеты к серверу (можно сказать, аналог choke для клиента, то есть у клиента есть данные для отправки, но отправить он их не может, так как время отправки еще не подошло). В случае, если пакеты отправляются на сервер после отрисовки каждого кадра, графика вообще не видно.

Второй график - фиолтеовый в нижней части и красный в верхней - показывает уровень десинхронизации состояния клиента и сервера. Если присмотреться внимательно, то он представляет собой гребенку (типа вот так - //////). Степень десинхронизации зависит от того, когда был получен последний пакет от сервера. Следствия - при только что полученном пакете десинхронизация минимальна, а при большой задержке входящих пакетов - максимальна (график в таком случае превращается в красную полосу в верхней части)

Примеры, описания и решения
Ниже набор из 6-ти скриншотов + описание к ним

QRglHwEjjpc.jpg

График 1
Симптомы
- слайд-шоу, низкий фпс.

Причины: железу на клиенте пора на помойку, либо что-то еще нехило кушает процессорное время (может антивирус, или наоборот какая-то вирусня).

Решение: Найти и истребить объект, использующий ЦП, либо бежать в магазин за новым компьютером.

График 2
Видим красные точечки на зеленом графике - потеря пакетов. Это не лучший скрин для демонстрации, но ничего другого нет к сожалению.

Симптомы - рывки игроков во время игры, задержка стрельбы или других действий. Особенно хорошо проявляется, когда теряется несколько пакетов подряд.

Решение: Единого способа нет, т к причина может быть независящей от вас (может пьяный одмин за кабель запнулся). Что можно сделать - вырубить все, что использует сеть, особенно торренты и закачки. Можно попробовать собрать диагностику ping/traceroute и отправить в саппорт провайдера

График 3
А тут у нас фриз на компьютере клиента.

Симптомы - внезапомное "замирание" игры на 200-300 мсек, после чего нормальное продолжение. На нетграфе сопровождается подскоком зеленого графика "под потолок" (на скрине видно два фриза с небольшим интервалом), при этом на нижнем графике нет никаких отклонений.

Причины - в основном связаны с драйверами или железом. Фриз, который можно лицезреть на скрине был вызван "умным" поведением винчестера - после 5-6 секнуд не активности он паркует блок головок, а при при попытке чтения чего-либо распарковывает их, при этом вся система ненадолго зависает.

Решения - попробовать поставить "рядом" чистую ОС и посмотреть, будут ли фризы на ней. Если будут - проблема с железом, ищем виновника последовательной заменой комплектующих. Если же полет нормальный - дело было в каком-то шибко умном драйвере. Так же может иметь конфликт железо-железо, либо железо-драйвер. В общем, единый путь решения найти трудно.

График 4
Самая часто встречающаяся сейчас проблема - choke, желтизна на графике, который должен быть зеленым ;)

Симптомы - рост пинга при большом количестве игроков, либо на картах, где видно одновременно много объектов, задержка стрельбы, может быть видно передвижение других игроков и объектов рывками.

Причина: Сервер генерирует больше данных, чем может передать.

Решение: Нужно увеличивать скорость, выделяемую клиенту. Ставим rate побольше (например 500000) и смотрим, что произойдет. Если желтизна исчезла - можете поздравить себя с решением проблемы. Если нет - пытаемся достучаться админу сервера.

Если админом являйтесь вы, то тогда ставим в хлдсе sv_maxrate побольше (100000 например). Можно так же поднять и sv_minrate - это поможет игрокам с дефолтным конфигом (там вроде стоит rate 6000) избежать choke-ов и лагов.

График 5
Тут бы наблюдаем явную гребенку на нижнем графике - это означает что клинет получает данные через слишком большие интервалы времени. В игре может выражаться небольшим ростом пинга, небольшим подергиванием объектов, игроков.

Причины: низкий cl_updaterate или очень маленький sv_maxupdaterate на серверное стороне. Лечится увеличением значений этих переменных. Так же такое поведение может вызываться очень низким серверным ФПС (< 50).

Решается разгрузкой процессора на сервере, либо поднятием значения sys_ticrate (если он имеет малое значение, т е < 100). Можно еще поставить плагины для увеличения серверного фпс, только при перегруженном ЦП они не спасут.

График 6
Здесь можно лицезреть фриз на серверной стороне - был очень большой перерыв между обработками кадров на сервере. На нетграфе выражается подскоком на нижнего графике десинхронизации, при этом с доставкой пакетов проблем не было (верхний график в норме).

Причин несколько:
1) обычно связана с высокой загрузкой диска на сервере, когда хлдс пытается что-либо прочитать - происходит задержка.

2) может происходить из-за блокирующих запросов в перегруженную субд. Решение - переходим на неблокирующие (threaded) запросы, правда тут без переписывания кода плагинов не обойтись.

3) низкий приоритет, данный хлдсу. Если на сервере нашелся процесс с намного более высоким приоритетом, чем хлдс, при этом он загрузил весь (все) ЦП, то хлдс отправляется курить на это время.

Источник статьи: hlds.us
Автор: berq
SteamID - это уникальный идентификатор Вашего Steam-аккаунта (в случае, если Вы играете с лицензионной версии клиента Counter-Strike 1.6). Если же Вы играете с Non-Steam версии клиента Counter-Strike 1.6, то это уникальный идентификационный номер, который генерируется по Вашему оборудованию при помощи связки эмуляторов а-ля "клиент-сервер"

Для того, чтобы узнать свой игровой SteamID, пожалуйста, следуйте следующим инструкциям:

  • Запустите Ваш клиент Counter-Strike 1.6.
  • Зайдите именно на наш игровой сервер.
  • Откройте игровую консоль (нажатием клавиши "Ё").
  • В появившемся окне выполните команду "status".
  • В списке игроков найдите строку со своим NickName, там же будет и Ваш SteamID вида: STEAM_0:X:XXXXXXXXX
Важные примечания
  • По соображениям безопасности, на каждом игровом сервере Counter-Strike 1.6 будет свой игровой SteamID, то есть другим, отличным от предыдущего сервера, где Вы играли.
  • Данное правило предусмотрено только в случае если же Вы играете с Non-Steam версии клиента Counter-Strike 1.6, если же Вы играете с лицензионной версии клиента Counter-Strike 1.6, то Ваш игровой SteamID будет одинаковым на всех игровых серверах.
  • Так-же по тем или иными причинам Ваш игровой SteamID может изменится (только для Non-Steam версии клиента ) спустя некоторое время (установка другого клиента, переустановка Windows, специальный софт), поэтому рекомендуем перед каждой публикацией своего игрового SteamID проверять его актуальность согласно инструкции выше.
Демо запись - это видеозапись всего происходящего на экране игрока непосредственно в момент самой игры, всех его действий.

Для того, чтобы получить демо-запись Вашей игры, пожалуйста, следуйте следующим инструкциям:

✔ Откройте корневую директорию Вашего клиента Counter-Strike 1.6. Примерные пути корневой директории:

  • Steam: C:\Program Files (x86)\Steam\steamapps\common\Half-Life\cstrike
  • Non-Steam: C:\Games\Counter Strike 1.6\cstrike
  • GS-Client: C:\Games\GSClient 1.6\cstrike_downloads
✔ Найдите в ней демо-запись Вашей игры с примерным названием: GAME_FORCE_de_inferno.dem

✔ Выберите именно ту демо-запись в названии которой фигурирует наименование карты, которая Вас интересует.

✔ По необходимости скопируйте данную демо-запись на рабочий стол и заархивируйте её.
 
Последнее редактирование:
Сообщения
16
Реакции
4
Покажет актуальный ник игрока зная его стим айди
Покажет всех игроков, кто юзал мой ник помимо меня
Покажет всех игроков кто использовал более 1 ника за все время
У psychostats разве не такой же функционал?
Так же всю историю ников можно увидеть по айпи или стимайди, а так же историю стимайди и айпи с которых играл.
 
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
Оставлю это тут, как заметку:

В: а где узнать -num_edicts сколько оно по дефолту?
О: тут
В: А что вообще из себя представляет эдикт? Зачем он нужен?
О: Кол-во энтити на сервере
О: Edict - Entity Dictionary. Т.е. свойства любой энтити, с которой можно выполнить те или иные действия
Самый главный ответ от the_hunter

Ну попробую так объяснить (как можно проще):
Если бы в разрабатывали игру в 90х и вам нужно как-то хранить список энтити как бы вы это сделали? Массив? Можно. Вот только чтобы выяснить какие объекты например соприкасаются друг с другом, пришлось бы ОЧЕНЬ ЧАСТО гонять по всему массиву и выяснить че к чему. На каждый чих - прогон всего массива бессмысленно и беспощадно. В общем, для компов 90х довольно трудный процесс был.
И они решили эту проблему так: вместо массива - двусвязный список из структур edict, в которые хранят указатель на энтити (точнее, на другую структуру EntityVars, которая хранит в себе также указатель на энтити и различные параметры энтити. В сорцах ее называют pev то есть Pointer to Entity Variables), листья в edict хранят эту с чем связанна эти энтити. Таким образом, если нужно выяснить например коллизии энтити, не нужно бежать по всему массиву и выяснять. В edict уже есть инфа что к чему.

В общем, основный смысл в edict - аптемезацыйа.
 
Сообщения
53
Реакции
-1
jdaykar, привет бро можете дать свой вк или телеграмм есть несколько вопросов
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу