Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

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

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

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер
3 страниц V  « 2 3

Отваливается стим

, Обсуждение возможного фикса
Статус пользователя mazdan
сообщение 14.12.2012, 11:49
Сообщение #41


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

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

Должно быть как в этой теме https://c-s.net.ua/forum/topic46522.html?hl=steam+validation и после этого стим не определяется. Теоретически потому что его не дисконнектит. Соответственно попробовать с плагином и без и посмотреть что будет =)


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 14.12.2012, 12:26
Сообщение #42
Стаж: 15 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Спасибо за наводку, баг действительно в 95% случаев вызывается при аварийном завершении клиента CS. И с этого момента вынужден разочаровать - плагин, похоже, не работает.
Добавлю следующий момент - чтобы игрок не попал под влияние бага (вне зависимости от наличия плагина) надо не пытаться коннектиться к серверу до тех пор, пока сервер не сбросит его по таймауту (sv_timeout 60 по дефолту). Если игрок в течение этих 60 секунд попробует подсоединиться - он получит VALVE_ID_LAN.

P.S. если у меня появятся ещё какие-то наблюдения и мысли по модернизации плагина - постараюсь отписаться.

Отредактировал: S0m3Th1nG_AwFul!, - 14.12.2012, 12:29
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 14.12.2012, 12:41
Сообщение #43


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

тогда плагин антиреконнекта должен помогать на самом деле.
С плагином точно после отваливания по таймауту dproto продолжает выдавать VALVE_ID_LAN? По идее при отваливании по таймауту должен произойти всё таки стимдисконнект.
Вообщем интересует что происходит после sv_timeout с плагином и без. Ибо дисконнект происходит как раз по таймауту (с вызовом СтимКлиентДисконнектед или без него)


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 14.12.2012, 13:57
Сообщение #44
Стаж: 15 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Без плагина

Прикрепленное изображение

С плагином

Прикрепленное изображение

+AntiReconnect

Прикрепленное изображение
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 14.12.2012, 14:16
Сообщение #45


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

простите за тупость. Не пойму ситуация такая или нет
1. вход, завис, повторный вход, таймаут, дроп прошлого игрока, повторный вход.

Просто вижу входы уже после таймаута или только до него.
Вопрос чтобы получить авторизацию если входил до таймаута и после таймаута "прошлого себя". На данный момент для восстановления нужно сервер перезагружать. С плагином надеялся что сработает без перезагрузки. Просто при перезаходе игрока.

После таймаута должно определяться в не зависимости от того входил игрок до таймаута или нет. Если я туплю и такая ситуация проверена - извиняюсь.


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 14.12.2012, 14:20
Сообщение #46
Стаж: 15 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Цитата(mazdan @ 14.12.2012, 16:16) *
простите за тупость. Не пойму ситуация такая или нет
1. вход, завис, повторный вход, таймаут, дроп прошлого игрока, повторный вход.

Просто вижу входы уже после таймаута. Вопрос чтобы получить авторизацию если входил до дропа и после дропа "прошлого себя" по таймауту.

После таймаута должно определяться в не зависимости от того входил игрок до таймаута или нет. Если я туплю и такая ситуация проверена - извиняюсь.

1. Вход с [Native]
2. Зависание
3. Повтор вход с [dproto]
4. Сброса "старого игрока" по timeout по неизвестной причине не происходит вообще. И вот на этом моменте ещё одно дополнение - если у клиента поменять IP - он сможет вновь авторизоваться по [Native] схеме без перезапуска сервера.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 14.12.2012, 14:28
Сообщение #47


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

всё, раз дроп не происходит тогда понятно. СтимКлиентДисконнектед то у меня по дропу вызывается. Еще раз спасибо. Потом посмотрим как быть. Может Crock что-то подскажет, без информации сложно и ему =) На чистом сервере дроп происходит потому что игрок не может перезайти пока прошлого не дропнет по таймауту.

Еще раз Спасибо.

если его не дропает по таймауту он так и висит в спектрах/status? ID у повторного вход 1 или 2? (не userid, а id имеенно)


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 14.12.2012, 15:10
Сообщение #48
Стаж: 15 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Цитата(mazdan @ 14.12.2012, 16:28) *
если его не дропает по таймауту он так и висит в спектрах/status? ID у повторного вход 1 или 2? (не userid, а id имеенно)

Попробую пояснить ситуацию:
Вариант №1.
Допустим я соединяюсь по внешнему сетевому интерфейсу, у которого, предположим, IP 5.5.5.5. Я вешаю клиент примерно на 7-м делении прогресс-бара, клиент остаётся в это время висеть в спектаторах (проверено).
Если я тут же по этому интерфейсу попробую присоединиться заново - клиент из спектаторов моментально испаряется, я уже вхожу по схеме [dproto], имею UserID#2 ID #1 и попадаю под влияние бага.

Вариант №2.
Допустим я соединяюсь по внешнему сетевому интерфейсу, у которого, предположим, IP 5.5.5.5. Я вешаю клиент примерно на 7-м делении прогресс-бара, клиент остаётся в это время висеть в спектаторах (проверено).
Затем, я пробую зайти на сервер по локальному сетевому интерфейсу, у которого допустим IP 192.168.137.1. При входе на сервер я авторизуюсь по [dproto] схеме и имею UserID#2 ID#2, при этом "старый" клиент висит в спектаторах эти самые 60 секунд. После того, как он сбросится, я могу перезайти на сервер по любому сетевому интерфейсу (внешнему или внутреннему) и уже вновь авторизоваться по [Native] схеме!

В обоих случая "зависший" клиент в status отображается только в счётчике игроков:
status
hostname: Test server! Kto zaidet, tot durak!
version : 48/1.1.2.6 5758 secure (10)
tcp/ip : 0.0.0.0:27020
map : awp_india at: 0 x, 0 y, 0 z
players : 1 active (12 max)

# name userid uniqueid frag time ping loss adr
1 users


Отредактировал: S0m3Th1nG_AwFul!, - 14.12.2012, 15:18
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 14.12.2012, 15:19
Сообщение #49


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

интересно когда он исчезнет оттуда. Потому что по идее чтобы исчезнуть нужен drop.
А с другого +clientport не пробовали? Может проканает? :)

По идее это dproto должен клиента лучше каждый раз как нового рассматривать. Интересно можно ли так =)


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 14.12.2012, 15:23
Сообщение #50
Стаж: 15 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Цитата(mazdan @ 14.12.2012, 17:19) *
А с другого +clientport не пробовали? Может проканает? :)

Другой clientport без смены IP прокатывает! Всё развивается по сценарию варианта №2.

В общем, я кажется начинаю понимать окончательную суть этого глюка - нельзя допускать подсоединение ранее заглючившего клиента по одному и тому же IP:Port до окончания таймаута. Если такое происходит, то уже ни смена IP, ни смена порта не вернёт стим-авторизацию к жизни, пока сервер не будет перезагружен.

Отредактировал: S0m3Th1nG_AwFul!, - 14.12.2012, 15:33
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 14.12.2012, 15:35
Сообщение #51


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

ну уже неплохо, хотя бы админов можно обучить правилам :D


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 14.12.2012, 15:48
Сообщение #52


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

мде, я конечно лопух, не посмотрел SV_DropClient - Steam_NotifyClientDisconnect из него и вызывается как раз.
Значит надо по идее как-то дропклиент вызывать


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 14.12.2012, 15:50
Сообщение #53
Стаж: 15 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

В принципе можно ещё поставить cid_NoSteam48 = 5, тогда, как ни странно, даже если непутёвый админ будет ломиться на сервер, то его хоть и поскидывает минуту с сообщением "Sorry, no-steam p48 clients are not allowed on this server" (которое можно на своё поменять), но впоследствии всё-таки впустит, так как сброс по таймауту произойдёт успешно O.o
DEPRECATED механизм, судя по всему, функционирует на ещё более раннем уровне.

Отредактировал: S0m3Th1nG_AwFul!, - 14.12.2012, 15:57
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 14.12.2012, 16:04
Сообщение #54


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

по сути (ну если я верно понимаю)
авторизация dproto это замена SV_ConnectClient и там и там "Sorry, no-steam p48 clients are not allowed on this server" при dproto и STEAM валидэйшен реджектет при стим сервере. Попробовать можно с другого конца зайти, наверное... Я подумаю =)
На всякий случай, можете сделать проверки is_user_connected, is_user_connecting, get_user_name, get_user_ip для такого игрока который в спектрах висит как бы?

UPD: Ну прикинул как сделать можно - типа свой проверки на таймаут с дропом клиента. Я тестирую на старом сервере. Даже если вызвать Steam_NotifyClientDisconnect при nosteam игроке на сервере - ничего не случается


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 14.12.2012, 16:36
Сообщение #55
Стаж: 15 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Такой плагин
pl
Код
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "ClientCheck"
#define VERSION "0.1"
#define AUTHOR "S0m3Th1nG_AwFul!"

new playerid

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_concmd("test", "test")
    playerid = register_cvar("player", "1")
}

public client_connect(id)
{
    server_print("Client %d connect!", id)
}

public client_authorized(id)
{
    server_print("Client %d authorized!", id)
}

public client_putinserver(id)
{
    server_print("Client %d putInServer (reached MOTD-window)!", id)
}

public test()
{
    if(is_user_connected(get_pcvar_num(playerid)))
    {
        server_print("Player ID %d is connected!", get_pcvar_num(playerid))
    }
    else
    {
        server_print("Player ID %d is NOT connected!", get_pcvar_num(playerid))
    }
    
    if(is_user_connecting(get_pcvar_num(playerid)))
    {
        server_print("Player ID %d is connecting!", get_pcvar_num(playerid))
    }
    else
    {
        server_print("Player ID %d is NOT connecting!", get_pcvar_num(playerid))
    }
    
    new name[32]
    get_user_name(get_pcvar_num(playerid), name, 31)
    
    new ip[23]
    get_user_ip(get_pcvar_num(playerid), ip, 22)
    
    new auth[32]
    get_user_authid(get_pcvar_num(playerid), auth, 31)
    
    server_print("Name is %s, IP is %s, AuthID is %s", name, ip, auth)
}

Выдал следующую информацию:
[DPROTO]: Client 0 - Set AuthIdType 1 [Native]; pClient = 080414A0
Client 1 connect!
Client 1 authorized!
test
Player ID 1 is NOT connected!
Player ID 1 is connecting!
Name is S0m3Th1nG_AwFul!, IP is <скрыто>:27005, AuthID is STEAM_0:0:10169463
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 14.12.2012, 16:51
Сообщение #56


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

т.е. висит в сonnecting, понятно, а это было для просто отключившегося, при входе нового статус не меняется? всё так же остается. Новый игрок заходит под id 2 пока id1 висит в conencting (до таймаута)
По какому принципу чекать? если статус сonneccong > чем sv_timeout что ли?

Вот для теста
Код
register_concmd("test2","test2")
OrpheuRegisterHook(OrpheuGetFunction("Steam_NotifyClientDisconnect"),"Steam_NotifyClientDisconnect", OrpheuHookPost)


Код
public test2()
{
    OrpheuCallSuper(OrpheuGetFunction("Steam_NotifyClientDisconnect"),103617696);
}
public OrpheuHookReturn:Steam_NotifyClientDisconnect(info)
{
    log_amx("Steam_NotifyClientDisconnect x=%d",info)
}


Вместо 103617696 подставьте вашу цифру для дисконнекта - разные версии - разные цифры
После первого нормального дисконнекта станет понятно.
Задача
1. чекнуть что будет если вызвать когда игрок на сервере
2. чекнуть что будет если вызвать когда игрок висит до дропа, а второй при этом зашел
3. чекнуть что будет если после дропа когда на сервере второй.

Если я верно понимаю то id 1 будет висеть, у второго игрока VALVE_ID_LAN id==2 будет.
4. чекнуть какой статус у id 1 когда на сервере уже есть id 2 и 1 уже давно должен был по таймауту вылететь.
т.е. при ситуации с багом выполнить команду test и test2 и снова test а потом перезайти попробовать.

И второй вариант в OrpheuCallSuper(OrpheuGetFunction("Steam_NotifyClientDisconnect"),103617696); поменять на OrpheuCallSuper(OrpheuGetFunction("SV_DropClient "),103617696,0,"Timed out :D"); и повторить.


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя S0m3Th1nG_AwFul!
сообщение 14.12.2012, 22:43
Сообщение #57
Стаж: 15 лет

Сообщений: 454
Благодарностей: 323
Полезность: 961

Думаю, тему можно прикрывать - Crock выпустил патченный движок, который исправляет данный косяк, а также последнюю уязвимость с конфигами, за что дружно говорим ему спасибо)
P.S. под вопросом остаются только пользователи некоторых хостингов, которые не имеют доступа к корневой директории сервера...

Отредактировал: S0m3Th1nG_AwFul!, - 14.12.2012, 22:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя admir
сообщение 17.12.2012, 20:29
Сообщение #58
Стаж: 13 лет

Сообщений: 192
Благодарностей: 31
Полезность: 138

S0m3Th1nG_AwFul!, когда выдается userid? возможно в этом баг?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
3 страниц V  « 2 3
 
Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: