Так всё равно твой сервер будет относится к серверам сообщества стим, не получится как не крути) Просто сделай паблик или соревновательный 5-5 и не парься!Это как то может повлиять на работу tickbase manipulation? Просто это основная проблема которую мне нужно решить, хотя бы ограничить её чем то. И как показывает практика VALVE сервера с этим справляются на ура
У меня нет цели сделать его полностью как VALVE. То есть, я понимаю, что он будет относится к серверам сообщества. То что я хочу сделать, в принципе можно реализовать, но я не знаю как. Речь идёт именно о tickbase manipulation. К примеру, если мой сервер будет работать на 128 тик рейте, то получится что то похожее, но этот самый tickbase manipulation будет ограничен слишком сильно, а если поставить 64 тик рейт, то он не будет ограничен вообще. В официальных серверах VALVE используется 64 тик рейт, но при этом он ограничен так как нужно. Я вот и пытаюсь разобраться в том, как это было сделано. Возможно за эту вещь отвечают какие то определённые квары, возможно тут не в кварах дело, и придётся делать плагин на заказ, то есть на данный момент мне пока что вообще не известно ничего из этого. Если я подаю заявку на dev source, то она может висеть там дня 3-4 и её никто не принимает. Именно поэтому я и обратился сюда с этим вопросом. Я вот сейчас даже, для полного понимания скину описание того, что я имею в виду.Так всё равно твой сервер будет относится к серверам сообщества стим, не получится как не крути) Просто сделай паблик или соревновательный 5-5 и не парься!
Даже до конца не читал, вот ссылка на плагин от tickbase manipulation, хз то не то, не варюсь в теме пабликовУ меня нет цели сделать его полностью как 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, хз то не то, не варюсь в теме пабликов
Я обратился сюда за помощью, потому что никаких МАНУАЛОВ или АДДОНОВ на решение данного вопроса в открытом доступе не существует@SМILE, в сообществе куча аддонов, вы имеете у себя в голове образ сервера VALVE, так реализуйте самостоятельно без создания новой темы то, что вам нужно ориентируясь только на аддоны и различные мануалы , любите вы пострадать фигней и ничего не делать.
Ну для этого уже идите заказывать нужный вам плагин на dev-source, за бесплатно вам такое не будут писать (скорее всего)Этот плагин лишь делает детект, после чего банит либо кикает. В моём случае нужно не детектить ,а ограничить каждого игрока
Перед тем как создать эту тему, я на протяжении 3 дней пытался найти ответ и гуглил всё что только можно, но результатов 0@SМILE, в сообществе куча аддонов, вы имеете у себя в голове образ сервера VALVE, так реализуйте самостоятельно без создания новой темы то, что вам нужно ориентируясь только на аддоны и различные мануалы , любите вы пострадать фигней и ничего не делать.
Если бы они приняли заказ это было бы замечательно, только вот моя заявка практически неделю висела без ответаНу для этого уже идите заказывать нужный вам плагин на dev-source, за бесплатно вам такое не будут писать (скорее всего)
Ну значит либо никто не хочет это делать, либо на вашу задачу нету ответа, используйте то что есть (да и нигде твоего тикета я не вижу)Если бы они приняли заказ это было бы замечательно, только вот моя заявка практически неделю висела без ответа
Не собрана для тех людей, которые не понимают это либо не разбирались с этим никогда@SМILE, да что вы говорите, а теперь можно ли краткое ТЗ собранное из аддонов и серверных переменных? вы просите то, что не понимаете, ваша речь вообще не собрана и для обычного активного "форумщика" мало, что даст ваша поверхностная задача.
Ответы на решение задачи этой есть, уже существовал, или может быть даже сейчас существует до сих пор такой сервер сообщества, где он ограничивает этот tickabase так же как и на официальном сервере VALVE, только наврятли мне скажут как и что делать, даже если я заплачу. На то он и единственныйНу значит либо никто не хочет это делать, либо на вашу задачу нету ответа, используйте то что есть (да и нигде твоего тикета я не вижу)
Мне нужно ограничить использование tickbase manipulation до значения, которое я смогу указать. По другому это никаким образом объяснить нельзя@SМILE, я понимаю, что вам надо ОБРАЗНО, но технического задания я не вижу, мне самому додумывать все подробности?
Ля, вот это встреча. Не думал, что мне ответит такой великий человекЫаа, решение простое жеж
Ты это хочешь сделать для читов же, да?
Смотришь, как сделана проверка на ММ сервер в тех же слитых сурсах легендвара в3 и эмулируешь на своем сервере
Я попытаюсь, и начну это совсем скороЫаа, решение простое жеж
Ты это хочешь сделать для читов же, да?
Смотришь, как сделана проверка на ММ сервер в тех же слитых сурсах легендвара в3 и эмулируешь на своем сервере
Напиши, в любом случае лишним не будет - вдруг у кого то будет подобный вопросОтвет еще нужен?
#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;
}
if(tickcount == iLastTickCount[client])
{
return Plugin_Handled;
}
if(tickcount < iLastTickCount[client])
{
return Plugin_Handled;
}
if(tickcount > iLastTickCount[client])
{
return Plugin_Continue;
}
будет. а на третьем вообще Continue, возможно ты не заметил.@Madness aka null138, ты серьёзно?После этих 3 проверок никакой код не будет выполнятся жеC-подобный:if(tickcount == iLastTickCount[client]) { return Plugin_Handled; } if(tickcount < iLastTickCount[client]) { return Plugin_Handled; } if(tickcount > iLastTickCount[client]) { return Plugin_Continue; }