Как настроить сервер следующим образом...

SМILE

Участник
Сообщения
32
Реакции
6
Неинформативное название или содержание темы
Нужно настроить сервер таким образом, чтобы он работал как официальный сервер VALVE. Может быть кто знает?
 

Туник

Участник
Сообщения
1,281
Реакции
263
Это как то может повлиять на работу tickbase manipulation? Просто это основная проблема которую мне нужно решить, хотя бы ограничить её чем то. И как показывает практика VALVE сервера с этим справляются на ура
Так всё равно твой сервер будет относится к серверам сообщества стим, не получится как не крути) Просто сделай паблик или соревновательный 5-5 и не парься!
 

SМILE

Участник
Сообщения
32
Реакции
6
Так всё равно твой сервер будет относится к серверам сообщества стим, не получится как не крути) Просто сделай паблик или соревновательный 5-5 и не парься!
У меня нет цели сделать его полностью как VALVE. То есть, я понимаю, что он будет относится к серверам сообщества. То что я хочу сделать, в принципе можно реализовать, но я не знаю как. Речь идёт именно о tickbase manipulation. К примеру, если мой сервер будет работать на 128 тик рейте, то получится что то похожее, но этот самый tickbase manipulation будет ограничен слишком сильно, а если поставить 64 тик рейт, то он не будет ограничен вообще. В официальных серверах VALVE используется 64 тик рейт, но при этом он ограничен так как нужно. Я вот и пытаюсь разобраться в том, как это было сделано. Возможно за эту вещь отвечают какие то определённые квары, возможно тут не в кварах дело, и придётся делать плагин на заказ, то есть на данный момент мне пока что вообще не известно ничего из этого. Если я подаю заявку на dev source, то она может висеть там дня 3-4 и её никто не принимает. Именно поэтому я и обратился сюда с этим вопросом. Я вот сейчас даже, для полного понимания скину описание того, что я имею в виду.
=================================================================
Как вы уже знаете, у каждого игрока есть свой счетчик тиков, который синхронизируется между клиентом и сервером. Сервер поддерживает его близким к реальному тику сервера (дельта контролируется sv_clockcorrection_msecs, по умолчанию 30). При обработке команд сервер устанавливает tickbase как текущий счетчик тиков в globals (вместе с time).

Счетчики, такие как время начала обезвреживания, время следующей атаки, время взрыва гранаты, основаны на этом. Каждый тик симуляции сервер накапливает входящие команды пользователей и проверяет, нужно ли корректировать tickbase, чтобы она находилась в диапазоне sv_clockcorrection_msecs от тика сервера. Если мы передаем серверу больше пакетов, чем нужно в данный тик, сервер сдвигает tickbase назад перед обработкой, потому что он хочет, чтобы она была синхронизирована с тиком сервера после выполнения команд. Сервер будет игнорировать некоторые команды пользователя позже ("anti-speedhack"), но tickbase все равно будет изменен.

Поэтому теперь нам нужен способ поставить в очередь больше usercmds за один тик. Когда присутствует потеря пакетов, сервер вводит дополнительные "фальшивые" usercmds для обработки (или копирует из резервной копии, отправленной клиентом) - но сейчас это ограничено до 10 на пакет. Также существует ограничение в 62 команды пользователя на сообщение CLC_Move и ограничение в 1 сообщение CLC_Move на пакет.

Таким образом, мы можем получить максимум: 62 реальных usercmds + 10 сгенерированных сервером из поддельного packetloss = 72 тика на пакет. Как обойти это ограничение? Отправить быстро несколько сетевых пакетов - так, чтобы сервер обрабатывал команды пользователей из них в одном тике симуляции. Сервер примет эти команды и сдвинет tickbase назад на их количество, но выполнит только несколько первых команд (из-за защиты от спидхака) - с большим отставанием от tickbase.
 

Ganter1234

Участник
Сообщения
1,149
Реакции
667
У меня нет цели сделать его полностью как VALVE. То есть, я понимаю, что он будет относится к серверам сообщества. То что я хочу сделать, в принципе можно реализовать, но я не знаю как. Речь идёт именно о tickbase manipulation. К примеру, если мой сервер будет работать на 128 тик рейте, то получится что то похожее, но этот самый tickbase manipulation будет ограничен слишком сильно, а если поставить 64 тик рейт, то он не будет ограничен вообще. В официальных серверах VALVE используется 64 тик рейт, но при этом он ограничен так как нужно. Я вот и пытаюсь разобраться в том, как это было сделано. Возможно за эту вещь отвечают какие то определённые квары, возможно тут не в кварах дело, и придётся делать плагин на заказ, то есть на данный момент мне пока что вообще не известно ничего из этого. Если я подаю заявку на dev source, то она может висеть там дня 3-4 и её никто не принимает. Именно поэтому я и обратился сюда с этим вопросом. Я вот сейчас даже, для полного понимания скину описание того, что я имею в виду.
=================================================================
Как вы уже знаете, у каждого игрока есть свой счетчик тиков, который синхронизируется между клиентом и сервером. Сервер поддерживает его близким к реальному тику сервера (дельта контролируется sv_clockcorrection_msecs, по умолчанию 30). При обработке команд сервер устанавливает tickbase как текущий счетчик тиков в globals (вместе с time).

Счетчики, такие как время начала обезвреживания, время следующей атаки, время взрыва гранаты, основаны на этом. Каждый тик симуляции сервер накапливает входящие команды пользователей и проверяет, нужно ли корректировать tickbase, чтобы она находилась в диапазоне sv_clockcorrection_msecs от тика сервера. Если мы передаем серверу больше пакетов, чем нужно в данный тик, сервер сдвигает tickbase назад перед обработкой, потому что он хочет, чтобы она была синхронизирована с тиком сервера после выполнения команд. Сервер будет игнорировать некоторые команды пользователя позже ("anti-speedhack"), но tickbase все равно будет изменен.

Поэтому теперь нам нужен способ поставить в очередь больше usercmds за один тик. Когда присутствует потеря пакетов, сервер вводит дополнительные "фальшивые" usercmds для обработки (или копирует из резервной копии, отправленной клиентом) - но сейчас это ограничено до 10 на пакет. Также существует ограничение в 62 команды пользователя на сообщение CLC_Move и ограничение в 1 сообщение CLC_Move на пакет.

Таким образом, мы можем получить максимум: 62 реальных usercmds + 10 сгенерированных сервером из поддельного packetloss = 72 тика на пакет. Как обойти это ограничение? Отправить быстро несколько сетевых пакетов - так, чтобы сервер обрабатывал команды пользователей из них в одном тике симуляции. Сервер примет эти команды и сдвинет tickbase назад на их количество, но выполнит только несколько первых команд (из-за защиты от спидхака) - с большим отставанием от tickbase.
Даже до конца не читал, вот ссылка на плагин от tickbase manipulation, хз то не то, не варюсь в теме пабликов
 
Сообщения
368
Реакции
114
@SМILE, в сообществе куча аддонов, вы имеете у себя в голове образ сервера VALVE, так реализуйте самостоятельно без создания новой темы то, что вам нужно ориентируясь только на аддоны и различные мануалы , любите вы пострадать фигней и ничего не делать.
 

SМILE

Участник
Сообщения
32
Реакции
6
Даже до конца не читал, вот ссылка на плагин от tickbase manipulation, хз то не то, не варюсь в теме пабликов
Этот плагин лишь делает детект, после чего банит либо кикает. В моём случае нужно не детектить ,а ограничить каждого игрока
Сообщения автоматически склеены:

@SМILE, в сообществе куча аддонов, вы имеете у себя в голове образ сервера VALVE, так реализуйте самостоятельно без создания новой темы то, что вам нужно ориентируясь только на аддоны и различные мануалы , любите вы пострадать фигней и ничего не делать.
Я обратился сюда за помощью, потому что никаких МАНУАЛОВ или АДДОНОВ на решение данного вопроса в открытом доступе не существует
 

Ganter1234

Участник
Сообщения
1,149
Реакции
667
Этот плагин лишь делает детект, после чего банит либо кикает. В моём случае нужно не детектить ,а ограничить каждого игрока
Ну для этого уже идите заказывать нужный вам плагин на dev-source, за бесплатно вам такое не будут писать (скорее всего)
 

SМILE

Участник
Сообщения
32
Реакции
6
@SМILE, в сообществе куча аддонов, вы имеете у себя в голове образ сервера VALVE, так реализуйте самостоятельно без создания новой темы то, что вам нужно ориентируясь только на аддоны и различные мануалы , любите вы пострадать фигней и ничего не делать.
Перед тем как создать эту тему, я на протяжении 3 дней пытался найти ответ и гуглил всё что только можно, но результатов 0
Сообщения автоматически склеены:

Ну для этого уже идите заказывать нужный вам плагин на dev-source, за бесплатно вам такое не будут писать (скорее всего)
Если бы они приняли заказ это было бы замечательно, только вот моя заявка практически неделю висела без ответа
 
Сообщения
368
Реакции
114
@SМILE, да что вы говорите, а теперь можно ли краткое ТЗ собранное из аддонов и серверных переменных? вы просите то, что не понимаете, ваша речь вообще не собрана и для обычного активного "форумщика" мало, что даст ваша поверхностная задача.
 

Ganter1234

Участник
Сообщения
1,149
Реакции
667
Если бы они приняли заказ это было бы замечательно, только вот моя заявка практически неделю висела без ответа
Ну значит либо никто не хочет это делать, либо на вашу задачу нету ответа, используйте то что есть (да и нигде твоего тикета я не вижу)
 

SМILE

Участник
Сообщения
32
Реакции
6
@SМILE, да что вы говорите, а теперь можно ли краткое ТЗ собранное из аддонов и серверных переменных? вы просите то, что не понимаете, ваша речь вообще не собрана и для обычного активного "форумщика" мало, что даст ваша поверхностная задача.
Не собрана для тех людей, которые не понимают это либо не разбирались с этим никогда
 

SМILE

Участник
Сообщения
32
Реакции
6
Ну значит либо никто не хочет это делать, либо на вашу задачу нету ответа, используйте то что есть (да и нигде твоего тикета я не вижу)
Ответы на решение задачи этой есть, уже существовал, или может быть даже сейчас существует до сих пор такой сервер сообщества, где он ограничивает этот tickabase так же как и на официальном сервере VALVE, только наврятли мне скажут как и что делать, даже если я заплачу. На то он и единственный
Сообщения автоматически склеены:

@SМILE, я понимаю, что вам надо ОБРАЗНО, но технического задания я не вижу, мне самому додумывать все подробности?
Мне нужно ограничить использование tickbase manipulation до значения, которое я смогу указать. По другому это никаким образом объяснить нельзя
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
Ыаа, решение простое жеж
Ты это хочешь сделать для читов же, да?
Смотришь, как сделана проверка на ММ сервер в тех же слитых сурсах легендвара в3 и эмулируешь на своем сервере
 

SМILE

Участник
Сообщения
32
Реакции
6
Ыаа, решение простое жеж
Ты это хочешь сделать для читов же, да?
Смотришь, как сделана проверка на ММ сервер в тех же слитых сурсах легендвара в3 и эмулируешь на своем сервере
Ля, вот это встреча. Не думал, что мне ответит такой великий человек
Сообщения автоматически склеены:

Ыаа, решение простое жеж
Ты это хочешь сделать для читов же, да?
Смотришь, как сделана проверка на ММ сервер в тех же слитых сурсах легендвара в3 и эмулируешь на своем сервере
Я попытаюсь, и начну это совсем скоро
 

over_trax

Участник
Сообщения
1,451
Реакции
488
Автор, отредактируй шапку темы, напиши там что тебе КОНКРЕТНО нужно, иначе срачь будет продолжаться
 

Madness aka null138

Участник
Сообщения
713
Реакции
735
Возможно уже не актуально, либо вообще это не то что необходимо ибо весь срач читать мне жутко лень.

Пример:
C++:
#define MAX_CMDNUM_UP_DIFFERENCE 170 // this is just random value

public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3], float angles[3], int& weapon, int& subtype, int& cmdnum, int& tickcount)
{
    static int iLastTickCount[MAXPLAYERS + 1];
    static int iLastCmdNum[MAXPLAYERS + 1];
 
    if(tickcount == iLastTickCount[client])
    {
        // illegal manipulation
        return Plugin_Handled;
    }
 
    if(tickcount < iLastTickCount[client])
    {
        // illegal manipulation
        return Plugin_Handled;
    }
 
    if(tickcount-1 > iLastTickCount[client])
    {
        // this can happen legally or can be illegal manipulation
        // probably the player got lagged but send new packet after
        return Plugin_Continue;
    }
 
    // this part is for c4 planting, defusing, grenade explode timing and etc.
    if(cmdnum > iLastCmdNum[client] && (cmdnum - iLastCmdNum[client]) >= MAX_CMDNUM_UP_DIFFERENCE)
    {
        // illegal manipulation
        return Plugin_Handled;
    }
 
    iLastTickCount[client] = tickcount;
    iLastCmdNum[client] = cmdnum;
 
    return Plugin_Continue;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,558
Реакции
5,051
@Madness aka null138, ты серьёзно?
C-подобный:
    if(tickcount == iLastTickCount[client])
    {
        return Plugin_Handled;
    }
 
    if(tickcount < iLastTickCount[client])
    {
        return Plugin_Handled;
    }
 
    if(tickcount > iLastTickCount[client])
    {
        return Plugin_Continue;
    }
После этих 3 проверок никакой код не будет выполнятся же
 

Madness aka null138

Участник
Сообщения
713
Реакции
735
@Madness aka null138, ты серьёзно?
C-подобный:
    if(tickcount == iLastTickCount[client])
    {
        return Plugin_Handled;
    }
 
    if(tickcount < iLastTickCount[client])
    {
        return Plugin_Handled;
    }
 
    if(tickcount > iLastTickCount[client])
    {
        return Plugin_Continue;
    }
После этих 3 проверок никакой код не будет выполнятся же
будет. а на третьем вообще Continue, возможно ты не заметил.

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