Сообщений: 5,862
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
07-07-2012, 02:41 PM
(Сообщение последний раз редактировалось: 07-08-2012, 01:27 PM Zubastic.)
Собственно занимаюсь этим вопросом уже 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символов
Сообщений: 267
Тем: 10
Зарегистрирован: Feb 2012
Репутация:
219
Сообщений: 1,912
Тем: 56
Зарегистрирован: Jan 2009
Репутация:
12,921
если я точно помню - на фене нужно вручную регать команды или нет я хз пример бы
Сообщений: 1,883
Тем: 53
Зарегистрирован: Feb 2011
Может в ДП остались некоторые хандлеры, вы же не убирали сам механизм (само оно, удалите механизм и посмотрите на что будет ругаться сервер, если поиски ни к чему не привели)
Сообщений: 3,967
Тем: 90
Зарегистрирован: Nov 2010
Репутация:
15,337
Может это потому, что никто не регистрирует хандлеры?
VISTALL Написал:если я точно помню - на фене нужно вручную регать команды или нет я хз пример бы
Вот-вот, я именно об этом и говорю.
Сообщений: 5,862
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
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 - я незнаю.
Сообщений: 18
Тем: 3
Зарегистрирован: Dec 2009
Репутация:
446
07-09-2012, 08:23 AM
(Сообщение последний раз редактировалось: 07-09-2012, 08:53 AM Ctudent.)
Цитата:А вот откуда берется 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 или подобную программу джарки , и опять же сделать поиск по файлам , обычные вызовы методов с передачей переменных и создание новых объектов должны декомпилироватся хорошо, поэтому что где создается и вызывается посмотреть можно.
Сообщений: 5,862
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
07-09-2012, 08:57 AM
(Сообщение последний раз редактировалось: 07-09-2012, 09:24 AM Zubastic.)
Ctudent Написал:Могли бы добавить есть ли у вас исходники , может быть скрипты в отдельной скомпилированной джарке, если исходников нет обфусцировано ли ядро. Если необфусцировано тогда прогнать через DJ Decompiler или подобную программу джарки , и опять же сделать поиск по файлам , обычные вызовы методов с передачей переменных и создание новых объектов должны декомпилироватся хорошо, поэтому что где создается и вызывается посмотреть можно. Что я могу сказать, в точку. Сделал поиск по проекту. Нашлась 1(!) строчка, где были 3 команды. Рабочие команды. Далее дело техники, я нашел пример и восстановлю все команды. Дальше - больше.
Я искал только исходники, ибо мне хочется создать что-то свое, а не заниматься копипастом, идеи есть и думаю я их сделаю.
Раскидал репы и отспасибил посты :redlol:. Еще раз спасибо за внимание к моей теме и Ctudent, за то, что натолкнул на эту вещь.
Добавлено через 14 минут
Немножко поторопился я, но правильное направление найдено.
Добавлено через 26 минут
Вообщем, что имеем:
команды, которые грузились найдены, но сервер никак на них не реагирует:
1) после ввода команды должна появиться системка, ее просто нет
2) в самом логе гса тишина, но команда обрабатывается.
Сообщений: 18
Тем: 3
Зарегистрирован: Dec 2009
Репутация:
446
нужно смотреть где запинается , код который ищет хендлеры и сам хендлер, ну и самое примитивное как нибуть убедится что вы всетаки дали права админа себе , ну и уровень прав ваш , можно ли вызывать команду с вашем уровнем гм доступа
Сообщений: 5,862
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
Ctudent Написал:нужно смотреть где запинается , код который ищет хендлеры и сам хендлер, ну и самое примитивное как нибуть убедится что вы всетаки дали права админа себе , ну и уровень прав ваш , можно ли вызывать команду с вашем уровнем гм доступа Тут все просто:
1) По умолчанию все админы заходят в инвизе ([I] над головой)
2) Уровень прав как бы максимальный, да и при загрузке количество хандлеров было бы выше 3-х
|