Рейтинг темы:
  • 1 Голос(ов) - 1 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Хандлеры
#1
Собственно занимаюсь этим вопросом уже 5(?) день и никак не могу решить. Вообщем: имеется сборка шайтана, основанная на фениксах, при загрузке сервера не инициализируются правильно хандлеры итемов, админ команд и прочего. Рыл и сверял начиная с геймсервера и заканчивая самими хандлерами. Тишина. В гсе вот такое:
Код:
08:41:01.362 AdminCommandHandler: Loaded 3 handlers.
08:41:01.363 UserCommandHandler: Loaded 0 handlers.
08:41:01.364 VoicedCommandHandler: Loaded 3 handlers.
Удалял папку commands - все тоже самое. При запросе из ГСа getinstance сразу возвращает назад, а регистрации команд нет вообще...

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

Добавлено через 1 час 17 минут
:confused:

Добавлено через 13 часов 29 минут
Все еще актуально.

Добавлено через 22 часа 45 минут
ап
10символов
Ответ
#2
up
10 симв.
Ответ
#3
если я точно помню - на фене нужно вручную регать команды или нет я хз пример бы
consulo.io - Consulo - multi-language IDE
Ответ
#4
Может в ДП остались некоторые хандлеры, вы же не убирали сам механизм (само оно, удалите механизм и посмотрите на что будет ругаться сервер, если поиски ни к чему не привели)
Ответ
#5
Может это потому, что никто не регистрирует хандлеры?
VISTALL Написал:если я точно помню - на фене нужно вручную регать команды или нет я хз пример бы

Вот-вот, я именно об этом и говорю.
Ответ
#6
VISTALL Написал:если я точно помню - на фене нужно вручную регать команды или нет я хз пример бы
Рыл 3 исходника, нигде регистрации не было. Вообще.
У вас сделано так:
Код:
        public static AdminCommandHandler getInstance()
    {
        return _instance;
    }
                      private AdminCommandHandler()
    {
        registerAdminCommandHandler(new AdminAdmin());
        ....
        registerAdminCommandHandler(new AdminKill());

    }
У l2p:
Код:
    public static AdminCommandHandler getInstance()
    {
        if(_instance == null)
            _instance = new AdminCommandHandler();
        return _instance;
    }

    private AdminCommandHandler()
    {
        _datatable = new HashMap<String, IAdminCommandHandler>();
    }
iqman Написал:Может в ДП остались некоторые хандлеры, вы же не убирали сам механизм (само оно, удалите механизм и посмотрите на что будет ругаться сервер, если поиски ни к чему не привели)
Если честно не совсем понял смысл данного предложения.
Хандлеры в дп возможно остались. Я ради эксперемента делал:

Код:
if _instance != null
{
_instance == new AdminCommandHandler();
}

Тогда было 0 команд.
Я пытался понять принцип работы подобного:
запускается гс - далее getinstance и далее тишина, хотя должно что-то произойти.
Ro_0TT Написал:Может это потому, что никто не регистрирует хандлеры?
Возможно, по идее за это отвечает такой код:
Код:
    public void registerAdminCommandHandler(IAdminCommandHandler handler)
    {
        for(Enum<?> e : handler.getAdminCommandEnum())
        {
            _datatable.put(e.toString().toLowerCase(), handler);
        }
    }
А вот откуда берется Enum - я незнаю.
Ответ
#7
Цитата:А вот откуда берется Enum - я незнаю.

Enum берется из самого хендлера написано же в коде , в коде хендлера есть такие строчки

PHP код:
<?php 
private static enum Commands
{
admin_admin,
admin_play_sounds,
admin_play_sound,
admin_silence,
admin_tradeoff,
admin_cfg,
admin_config,
admin_show_html
}

public
Enum[] getAdminCommandEnum()
{
return
Commands.values();
}

e.toString().toLowerCase() , этот код берет у константы имя и приводит к нижнему регистру

для поиска нужного кода всегда можно сделать поиск по файлам массовый, в вашем случае на "registerAdminCommandHandler" и на "IAdminCommandHandler"

Могли бы добавить есть ли у вас исходники , может быть скрипты в отдельной скомпилированной джарке, если исходников нет обфусцировано ли ядро. Если необфусцировано тогда прогнать через DJ Decompiler или подобную программу джарки , и опять же сделать поиск по файлам , обычные вызовы методов с передачей переменных и создание новых объектов должны декомпилироватся хорошо, поэтому что где создается и вызывается посмотреть можно.
Ответ
#8
Ctudent Написал:Могли бы добавить есть ли у вас исходники , может быть скрипты в отдельной скомпилированной джарке, если исходников нет обфусцировано ли ядро. Если необфусцировано тогда прогнать через DJ Decompiler или подобную программу джарки , и опять же сделать поиск по файлам , обычные вызовы методов с передачей переменных и создание новых объектов должны декомпилироватся хорошо, поэтому что где создается и вызывается посмотреть можно.
Что я могу сказать, в точку. Сделал поиск по проекту. Нашлась 1(!) строчка, где были 3 команды. Рабочие команды. Далее дело техники, я нашел пример и восстановлю все команды. Дальше - больше.

Я искал только исходники, ибо мне хочется создать что-то свое, а не заниматься копипастом, идеи есть и думаю я их сделаю.

Раскидал репы и отспасибил посты :redlol:. Еще раз спасибо за внимание к моей теме и Ctudent, за то, что натолкнул на эту вещь.

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

Добавлено через 26 минут
Вообщем, что имеем:
команды, которые грузились найдены, но сервер никак на них не реагирует:
1) после ввода команды должна появиться системка, ее просто нет
2) в самом логе гса тишина, но команда обрабатывается.
Ответ
#9
нужно смотреть где запинается , код который ищет хендлеры и сам хендлер, ну и самое примитивное как нибуть убедится что вы всетаки дали права админа себе , ну и уровень прав ваш , можно ли вызывать команду с вашем уровнем гм доступа
Ответ
#10
Ctudent Написал:нужно смотреть где запинается , код который ищет хендлеры и сам хендлер, ну и самое примитивное как нибуть убедится что вы всетаки дали права админа себе , ну и уровень прав ваш , можно ли вызывать команду с вашем уровнем гм доступа
Тут все просто:
1) По умолчанию все админы заходят в инвизе ([I] над головой)
2) Уровень прав как бы максимальный, да и при загрузке количество хандлеров было бы выше 3-х
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)