Пропали квесты

Металлург1985

Знающий
Участник
Старожил I степени
Сообщения
61
Розыгрыши
0
Репутация
0
Реакции
6
Баллы
400
Запрещено публиковать исходный код без BB-кода — CODE
Хроники
  1. Grand Cursade
Исходники
Присутствуют
Сборка
Mobius
Всем привет. Помогите разобраться.
Редактировал скрипты нескольких квестов на предмет изменения наград за выполнение.
После редактирования запускаю сервер и в логах сборки геймсервера вижу:

org.l2jmobius.gameserver.GameServer <init>
WARNING: GameServer: Failed to execute script list!
java.lang.NullPointerException: Cannot invoke "javax.tools.JavaFileObject.getName()" because the return value of "javax.tools.Diagnostic.getSource()" is null
at org.l2jmobius.gameserver.scripting.java.JavaExecutionContext.executeScripts(JavaExecutionContext.java:166)
at org.l2jmobius.gameserver.scripting.ScriptEngineManager.executeScriptList(ScriptEngineManager.java:181)
at org.l2jmobius.gameserver.GameServer.<init>(GameServer.java:372)
at org.l2jmobius.gameserver.GameServer.main(GameServer.java:496)

Сам сервер собирается, клиент запускаю, захожу персонажем в игру - но ни у одного НПС не могу взять квест. Их просто нет.
Удаление из папки scripts/quests подпапок с отредактированными скриптами квестов не решает проблему.
Подскажите, где может быть проблема.
И есть ли какой-то способ включить расширенное логирование сборки сервера? Потому что формулировка ошибки весьма обтекаема и непонятно, где искать причину.
Спасибо.
 
Конечно можно включить логи, а точнее переписать код вывода логов - на понятный человеческий в указанием где проблема, но так как из коробки такого нету, вот инфа:

config file: General.ini
line: DebugIncomingPackets - и смотрите рядом возле этой строки, какие вам нужны логи.

П.с. нужно было показать что изменяли, банальный проеб скорее всего.

Мое имхо: чесно говоря - просто забей на Mobius, там очень трудный проект, там сама основа на столько "переписана" что ну ее нах.
 
Конечно можно включить логи, а точнее переписать код вывода логов - на понятный человеческий в указанием где проблема, но так как из коробки такого нету, вот инфа:

config file: General.ini
line: DebugIncomingPackets - и смотрите рядом возле этой строки, какие вам нужны логи.

П.с. нужно было показать что изменяли, банальный проеб скорее всего.

Мое имхо: чесно говоря - просто забей на Mobius, там очень трудный проект, там сама основа на столько "переписана" что ну ее нах.
В том файле General.ini. который был вместе со сборкой - нет параметра DebugIncomingPackets.
Нужно просто его добавить и выставить True? Или что-то еще сделать?

ПыСы: а есть ли в природе сборки других разработчиков? Интересует Grand Crusade или близкие хроники.
 
В том файле General.ini. который был вместе со сборкой - нет параметра DebugIncomingPackets.
Нужно просто его добавить и выставить True? Или что-то еще сделать?

ПыСы: а есть ли в природе сборки других разработчиков? Интересует Grand Crusade или близкие хроники.
Да, берите Скриптов (ищите тут, на форуме) - даже там не все так ужасно.
только есть но - без понимания что нужно "реализовать", любой исходник что вы возмете не будет "лучшим",
просто в Мобиусе очень много захардкоженого говнища, который всплывает только при "неудачных" ситуациях и все иде по одному месту.


Скрытый текст для пользователей: Металлург1985
 
Да, берите Скриптов (ищите тут, на форуме) - даже там не все так ужасно.
только есть но - без понимания что нужно "реализовать", любой исходник что вы возмете не будет "лучшим",
просто в Мобиусе очень много захардкоженого говнища, который всплывает только при "неудачных" ситуациях и все иде по одному месту.


*** Скрытый текст не может быть процитирован. ***
Юмор еще состоит в том, что сейчас взял папку с квестами с репы Мобиуса и заткнул вместо своей в папку сервера.
При перезагрузке сервера с этой папкой - все равно ошибка не уходит...
 
Юмор еще состоит в том, что сейчас взял папку с квестами с репы Мобиуса и заткнул вместо своей в папку сервера.
При перезагрузке сервера с этой папкой - все равно ошибка не уходит...
Если делался Компил - и после компила появилась ошибка, нужно с ровными файлами, повторно скомпилить (мого что то не верно скопилить).
А если вы изменяли в Компиле в сркиптах, то скорее всего где то нарушили реализацию, поставив или убрав символы/слова/код/ табуляции.
 
Не в пакетах и компиле проблема - а где-то в скриптах.
Ищите какой скрипт поломался.
 
Нужно запилить гит или свн чтоб контролировать себя, сейчас вы не помните даже что изменили в скриптах и дело даже может быть и не в квестах а в каком то скрипте, после чего уже не загружаются остальные скрипты. не могут же одновременно все квесты сломатся.

Мой совет верните всю папку скриптов обратно с коробки, и проверьте так ...
 
Не в пакетах и компиле проблема - а где-то в скриптах.
Ищите какой скрипт поломался.
В general.ini поставил параметр AltDevNoQuest = true и ошибка при поднятии сервера пропала.
Из чего делаю вывод, что процесс сборки сервера некорректно бежит по скриптам квестов.
Вернул в измененных квестах (там просто java-листинги в папках) все взад - отключил конфигу - ошибка снова лезет.
Похоже теперь придется играть без квестов, только хардкорным мободрочем)
 
Саму яву случаем не апал?
У меня помнится вроде было тоже чет подобное когда апал свою сборку до более новой явы и полезли похожие проблемы при компиле скриптов дп на этапе загрузки сервера. я тогда не стал уж углубленно копать и просто докинул проверок в нужные места чтобы решить проблему.

у меня конечно не мобиус, но и у него где-то в классах компилирующих скрипты при запуске сервера должен быть код типа такого
Java:
    private class DefaultDiagnosticListener implements DiagnosticListener<JavaFileObject>
    {
        @Override
        public void report(Diagnostic<? extends JavaFileObject> diagnostic)
        {
            if (diagnostic.getKind() != Diagnostic.Kind.ERROR)
                _log.debug(diagnostic.getSource().getName() + (diagnostic.getPosition() == Diagnostic.NOPOS ? "" : ":" + diagnostic.getLineNumber() + "," + diagnostic.getColumnNumber()) + ": " + diagnostic.getMessage(Locale.getDefault()));
            else
                _log.error(diagnostic.getSource().getName() + (diagnostic.getPosition() == Diagnostic.NOPOS ? "" : ":" + diagnostic.getLineNumber() + "," + diagnostic.getColumnNumber()) + ": " + diagnostic.getMessage(Locale.getDefault()));
        }
    }
и тут вобщем в некоторых случаях на более новой версии явы стало возвращать null для diagnostic.getSource().

так что просто починить как-то так и все
Java:
    private class DefaultDiagnosticListener implements DiagnosticListener<JavaFileObject>
    {
        @Override
        public void report(Diagnostic<? extends JavaFileObject> diagnostic)
        {
            String sourceName = diagnostic.getSource() != null ? diagnostic.getSource().getName() : "Unknown Source";

            if (diagnostic.getKind() != Diagnostic.Kind.ERROR)
                _log.debug(sourceName + (diagnostic.getPosition() == Diagnostic.NOPOS ? "" : ":" + diagnostic.getLineNumber() + "," + diagnostic.getColumnNumber()) + ": " + diagnostic.getMessage(Locale.getDefault()));
            else
                _log.error(sourceName + (diagnostic.getPosition() == Diagnostic.NOPOS ? "" : ":" + diagnostic.getLineNumber() + "," + diagnostic.getColumnNumber()) + ": " + diagnostic.getMessage(Locale.getDefault()));
        }
    }
 
Саму яву случаем не апал?
У меня помнится вроде было тоже чет подобное когда апал свою сборку до более новой явы и полезли похожие проблемы при компиле скриптов дп на этапе загрузки сервера. я тогда не стал уж углубленно копать и просто докинул проверок в нужные места чтобы решить проблему.

у меня конечно не мобиус, но и у него где-то в классах компилирующих скрипты при запуске сервера должен быть код типа такого
Java:
    private class DefaultDiagnosticListener implements DiagnosticListener<JavaFileObject>
    {
        @Override
        public void report(Diagnostic<? extends JavaFileObject> diagnostic)
        {
            if (diagnostic.getKind() != Diagnostic.Kind.ERROR)
                _log.debug(diagnostic.getSource().getName() + (diagnostic.getPosition() == Diagnostic.NOPOS ? "" : ":" + diagnostic.getLineNumber() + "," + diagnostic.getColumnNumber()) + ": " + diagnostic.getMessage(Locale.getDefault()));
            else
                _log.error(diagnostic.getSource().getName() + (diagnostic.getPosition() == Diagnostic.NOPOS ? "" : ":" + diagnostic.getLineNumber() + "," + diagnostic.getColumnNumber()) + ": " + diagnostic.getMessage(Locale.getDefault()));
        }
    }
и тут вобщем в некоторых случаях на более новой версии явы стало возвращать null для diagnostic.getSource().

так что просто починить как-то так и все
Java:
    private class DefaultDiagnosticListener implements DiagnosticListener<JavaFileObject>
    {
        @Override
        public void report(Diagnostic<? extends JavaFileObject> diagnostic)
        {
            String sourceName = diagnostic.getSource() != null ? diagnostic.getSource().getName() : "Unknown Source";

            if (diagnostic.getKind() != Diagnostic.Kind.ERROR)
                _log.debug(sourceName + (diagnostic.getPosition() == Diagnostic.NOPOS ? "" : ":" + diagnostic.getLineNumber() + "," + diagnostic.getColumnNumber()) + ": " + diagnostic.getMessage(Locale.getDefault()));
            else
                _log.error(sourceName + (diagnostic.getPosition() == Diagnostic.NOPOS ? "" : ":" + diagnostic.getLineNumber() + "," + diagnostic.getColumnNumber()) + ": " + diagnostic.getMessage(Locale.getDefault()));
        }
    }
Ну вчера изменил два скрипта квестов. И сегодня с утра еще играл. А потом решил заменить награду еще в нескольких квестах того же типа. И процесс сборки сервера рухнул...
 
ну вот для начала устрани вобще причину того что у тебя компиляция скриптов обрывается из-за ошибки вылезаемой.
В логе же у тебя написано в каком классе и на какой строке проблема - докинь там проверок на null для getSource() того же, чтобы все с NPE не вываливалось.
 
Оверпостинг
ну вот для начала устрани вобще причину того что у тебя компиляция скриптов обрывается из-за ошибки вылезаемой.
В логе же у тебя написано в каком классе и на какой строке проблема - докинь там проверок на null для getSource() того же, чтобы все с NPE не вываливалось.
Ну по логам понятно, что возникает ошибка в коде какого-то из classpath-ов, зашитых в jar-файле, который собирает сервер.
Но я использую готовую сборку и этот джарник не перекомпилировал.
Есть ли вариант как-то понять, где он в ходе сборке находит этот null, который ему не нравится?
Правке подвергались только java-файлы, лежащие в scripts.

Раскрыл содержание jar-файла. Нашел тот класс, в котором идет первая ругань:

org.l2jmobius.gameserver.scripting.java.JavaExecutionContext.executeScripts(JavaExecutionContext.java:166)

В этой строке вот так:

out.println("\t" + diagnostic.getKind() + ": " + ((JavaFileObject)diagnostic.getSource()).getName() + ", Line " + diagnostic.getLineNumber() + ", Column " + diagnostic.getColumnNumber());

Далее моих знаний джавы уже не хватает :) А в текущих сурсах Мобиуса этот исходник выглядит уже совсем иначе.

ну вот для начала устрани вобще причину того что у тебя компиляция скриптов обрывается из-за ошибки вылезаемой.
В логе же у тебя написано в каком классе и на какой строке проблема - докинь там проверок на null для getSource() того же, чтобы все с NPE не вываливалось.
Решено следующим образом:

1. Откатился с 25-й JDK обратно на 15.0.2 (под которую и был исходно собран сервер)
2. При сборке сервера вместо абстрактной формулировки - вылезла целая простыня ошибок импорта скриптов. Проблема была вовсе не в правке скриптов отдельных квестов, а в том, что я из папки quests удалил папку not_done c недоделанными квестами. А скрипт QuestMasterHandler.java пытался их затянуть и не находил.
3. Закомментировал строки с этими квестами - и все заработало.

Осталось только понять, почему 15-я джава выдала такую красивую простыню в лог, а 25-я не стала этого делать.
 
Последнее редактирование модератором:
Решено следующим образом:

1. Откатился с 25-й JDK обратно на 15.0.2 (под которую и был исходно собран сервер)
2. При сборке сервера вместо абстрактной формулировки - вылезла целая простыня ошибок импорта скриптов. Проблема была вовсе не в правке скриптов отдельных квестов, а в том, что я из папки quests удалил папку not_done c недоделанными квестами. А скрипт QuestMasterHandler.java пытался их затянуть и не находил.
3. Закомментировал строки с этими квестами - и все заработало.

Осталось только понять, почему 15-я джава выдала такую красивую простыню в лог, а 25-я не стала этого делать.
тебе писали почему, в проверках, в более новых версиях идет ответ null, а в старых = вывод инфы.
 
тебе писали почему, в проверках, в более новых версиях идет ответ null, а в старых = вывод инфы.
Ну то есть получается это особенность именно версии JDK и на уровне скриптов, которые поднимаются на бэкэнд сервера это не решается?
 
Так же я писал, хочешь получать: логи с описаниями, нужно изменить код для вывода логов.
Из коробки, там очень техническую инфу выдает (хотя проблем сделать нормальные логи - не было, проХрамиСтЫ, они такие).
 
Назад
Сверху Снизу