Правила форума
1. Запрещено материться и оскорблять других участников форума. 2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня". 3. Запрещено взламывать сайт/форум или наносить любой вред проекту. 4. Запрещено рекламировать другие ресурсы. 5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы: 1. При вставке кода плагина необходимо использовать тег [code=php]. 2. Любые изображения должны быть загружены, как вложения к вашему сообщению. 3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
Что это вообще за бредятина - посылаем игроку команду, чтоб он послал команду серверу, что он отсоединился. Если пакет с этой мессагой вдруг не дойдет до игрока, то он так и останется на сервере.
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
А ты сам подумай. Даже если от консольного кика пакет не дойдет, сервер игрока отсоеденит. А тут отсоеденение произойдет только если этот пакет дойдет до клиента, клиент его обработает, пошлет пакет что он отсоеденился, и этот последний пакет дойдет до сервера. Просто гениально, да?
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob писал(а):А ты сам подумай. Даже если от консольного кика пакет не дойдет, сервер игрока отсоеденит. А тут отсоеденение произойдет только если этот пакет дойдет до клиента, клиент его обработает, пошлет пакет что он отсоеденился, и этот последний пакет дойдет до сервера. Просто гениально, да?
Гарантирует, что сообщение отправится с сервера, а не дойдет до игрока. Даже если я и ошибаюсь - это способ через заднее место. Тем более где гарантия что от игрока сообщение дойдет и на сервере он не останется стоять посреди карты.
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob писал(а):А ты сам подумай. Даже если от консольного кика пакет не дойдет, сервер игрока отсоеденит. А тут отсоеденение произойдет только если этот пакет дойдет до клиента, клиент его обработает, пошлет пакет что он отсоеденился, и этот последний пакет дойдет до сервера. Просто гениально, да?
Ты правда считаешь, что все svc_ пакеты которые можно отправить (сервом или плагином) обрабатываются сервом после их отправки? Что за бред... Формирование нашего пакета, это чисто добавление его в нужную очередь на отправку и не более того, нечего больше серву чтоли делать, чтобы их самому исполнять...
Во вторых очередь на отправку в этом плане реализованна грамотно. Каждый байт в reliable stream подтверждается клиентом, и пока клиент не подтвердит доставку этих байт, серв будет их слать до посинения, делается там это окнами итп итд (кому интересно могут поискать примерную реализацию в других игрушках отправляющих пакеты юзая UDP, хл мало чем отличается, да и в хлсдк есть структуры по которым можно судить о реализации юзаемых буферов). Если клиент не будет подтверждать доставку, то серв будет отправлять все больше и больше данных, что приведет к переполнению и клиент будет отсоединен.
Насчет глючности работы, это конечно да, часть работы выполняет сам клиент, есть читы которые блокируют ряд пакетов, например svc_intermission, что приводит к тому что игрок может бегать и расстреливать всех, когда серв сообщает о смене карты, правда клиент к этому не может подготовиться, но это пофег, побегать пострелять это круче чем подождать лишние 2-5 секунд, или принудительно нажать реконнект (те читы которые я знал уже палит вак)
Кстати пакета, который бы соовщал серверу о дисконнекте как бы нету... Список клиентских пакетов:
фактически как происходит дисконнект сказать трудно, сейчас лень лезть в код клиента, насколько я помню, при обработке svc_disconnect, там генерится один из видов intermission (виды intermission: svc_intermission, svc_finale, svc_disconnect) и все, судя по всему дальше где-то идет обработчик по этому флагу, а вот как общается он после этого с сервом надо смотреть... (может в clc_stringcmd, что-то посылает может нет... еще можно в коде посмотреть реагирование на ввод команды "disconnect" в консоли, может ее и отправляет он в clc_stringcmd)
Но то что сервер не обрабатывает пакеты, которые формируются плагинами (и не только) это точно!
И чисто технически, лучше не использовать (szReason[] = "Your kicked !") константные предопределенные строки в объявлении, темболее с ошибками в тексте... хотя вам видней что в инклюд кидать.
Добавлено спустя 13 минут 24 секунды: Отправка двух пакетов, надо ли оно вам в ваших инках смотрите сами, но обе мессаги имеют баги, о которых надо оговаривать заранее, хотя я отписывал в вики: Вы должны зарегистрироваться, чтобы видеть ссылки. ... SVC_FINALE
Ты правда считаешь, что все svc_ пакеты которые можно отправить (сервом или плагином) обрабатываются сервом после их отправки? Что за бред...
Действительно, что за бред? Где я такое писал?
Вобщем суть такова. Если писать в консоле "kick" - сервер отсоеденяет игрока и посылает ему svc_disconnect. Если же посылать просто svc_disconnect, клиент получив эту мессагу отправит на сервер команду ( через clc_stringcmd ) "dropclient", и сервер отсоеденит игрока только в случае если эта команда дойдет до него. Посылается она всего 1 раз, так как клиент сразу отсоеденяется, и вероятность того что она не дойдет крайне велика, следовательно и вероятность того что игрок после такого ( через svc_disconnect ) кика останется стоять на сервере пока сервер не отсоеденит его ругнувшись на timeout.
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.