ERROR Could not restore active skills data

KOltin

Знаменитый
Местный
Сообщения
151
Розыгрыши
0
Решения
1
Репутация
0
Реакции
7
Баллы
1 280
Хроники
  1. Interlude
Исходники
Отсутствуют
Сборка
Lucera
Персонаж заходит на выборе сервера в лобби и затем в мир дольше обычного, ну прям заметно что задержка по сравнению с другими персонажами, релогается тоже заметно дольше.
В итоге когда зашел у него 0 цп, 1 хп и мп, происходит анимация лвл апа, затем крит:
Код:
General protection fault! History: UNetworkHandler::Tick <- Function Name=UIPacket <- UGameEngine::Tick <- UpdateWorld <- MainLoop
И ошибка в ГС:
Java:
ERROR Could not restore active skills data!
java.lang.NullPointerException: Cannot invoke "l2.gameserver.model.SubClass.getClassId()" because the return value of "l2.gameserver.model.Player.getActiveClass()" is null
        at l2.gameserver.model.Player.getActiveClassId(Unknown Source)
        at l2.gameserver.model.Player.restoreDisableSkills(Unknown Source)
        at l2.gameserver.network.l2.c2s.EnterWorld.runImpl(Unknown Source)
        at l2.gameserver.network.l2.c2s.L2GameClientPacket.run(Unknown Source)
        at l2.commons.net.nio.impl.MMOExecutableQueue.run(Unknown Source)
        at l2.commons.threading.RunnableStatsWrapper.execute(Unknown Source)
        at l2.commons.threading.RunnableStatsWrapper.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:842)

Только определенные персы и у одного человека, сам заходил, т.е. это не со слов игрока.
.repair не помогает.
Может подскажет кто что.
 
Код:
+-------------+----------+-------+------------+------------+-------+-----------+-----------+-------+-------+-------+--------+--------+---------------+
| char_obj_id | class_id | level | exp        | sp         | curHp | curMp     | curCp     | maxHp | maxMp | maxCp | active | isBase | death_penalty |
+-------------+----------+-------+------------+------------+-------+-----------+-----------+-------+-------+-------+--------+--------+---------------+
|   283683484 |       89 |    80 | 6299999999 | 2147483647 | 5304  | 1727      | 3853      |  5304 |  1727 |  3853 |      0 |      0 |             0 |
|   283683484 |       92 |    79 | 3108530671 |  347897396 | 3812  | 1692      | 2537      |  3812 |  1692 |  2537 |      1 |      0 |             0 |
|   283683484 |      113 |    79 | 3056344287 |  349544154 | 6078  | 1646,9072 | 2746,7413 | 12344 |  1612 |  3105 |      0 |      0 |             0 |
|   283683484 |      114 |    80 | 6299999999 | 2147483647 | 5456  | 1767      | 2724      |  5456 |  1767 |  2724 |      0 |      0 |             0 |
|   283683484 |      117 |    80 | 6299999999 | 2147483647 | 6191  | 1767      | 3992      |  6191 |  1767 |  3992 |      0 |      1 |             0 |
+-------------+----------+-------+------------+------------+-------+-----------+-----------+-------+-------+-------+--------+--------+---------------+
5 rows in set
 
Ну нужно понять, по какой причине у тебя l2.gameserver.model.Player.getActiveClass() вообще может быть нуллом. Такое может произойти или при ошибке инициализации экземпляра SubClass, или при каком-то занулении старой валидной ссылки.
1) Обмажь логами создание саб класса
2) Найди причину, по которой метод getActiveClass может отдать нулл и от нее распутывай клубок


Upd: Спросонья провтыкал что у тебя нет исходников. Тогда совет выше отпадает.
 
посмотри таблицы скиллов/макросов еще.
И сделай вот так. Только про бекапы не забудь.

Код:
UPDATE character_subclasses
SET active = 0
WHERE char_obj_id = [ID_игрока];


UPDATE character_subclasses
SET active = 1
WHERE char_obj_id = [ID_игрока]
AND class_id IS NOT NULL
ORDER BY class_index
LIMIT 1;
 

Похожие темы

Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…