Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Перерождение ошибка
#1
Когда пытаюсь взять 4 профу через нпц 33404 Powerful Magic Healer, выдает ошибку. Дает статы от нужного класса но в статусе персонажа выдает старое название професии. После перезахода название отображается нормально. В чем может быть проблема? Исходы Rebellion апнутые до Lindvior

PHP код:
<?php 
[16.07.13 16:32:54:671] ERROR clientpackets.L2GameClientPacket: Client: IN_GAME IP: 127.0.0.1 Account: admin Player : mag[268488814] - Failed running: [C] RequestChangeToAwakenedClass - Server Version: ${build.revision}
java.lang.NullPointerException
at org
.mmocore.gameserver.model.Player.rewardSkills(Player.java:2220)
at org.mmocore.gameserver.model.Player.setClassId(Player.java:1959)
at org.mmocore.gameserver.instancemanager.AwakingManager.SetAwakingId(AwakingManager.java:230)
at org.mmocore.gameserver.network.clientpackets.RequestChangeToAwakenedClass.runImpl(RequestChangeToAwakenedClass.java:59)
at org.mmocore.gameserver.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:49)
at org.mmocore.commons.net.nio.impl.MMOExecutableQueue.run(MMOExecutableQueue.java:39)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Помог не забудь "Спасибо" Smile
Ответ
#2
(Player.java:2220)
Ответ
#3
Вот метод в которой находится строчка
PHP код:
<?php 
public void rewardSkills(boolean send) {
boolean update = false;
if (
Config.AUTO_LEARN_SKILLS) {
int unLearnable = 0;
Collection<SkillLearn> skills = SkillAcquireHolder.getInstance().getAvailableSkills(this,
AcquireType.NORMAL);
while (
skills.size() > unLearnable) {
unLearnable = 0;
for (
SkillLearn s : skills) {
Skill sk = SkillTable.getInstance().getInfo(s.getId(), s.getLevel());
if (
sk == null || !sk.getCanLearn(getClassId()) || !Config.AUTO_LEARN_FORGOTTEN_SKILLS
&& s.isClicked()) {
unLearnable++;
continue;
}
addSkill(sk, true);
}
skills = SkillAcquireHolder.getInstance().getAvailableSkills(this, AcquireType.NORMAL);
}
update = true;
} else {
Collection<SkillLearn> availableSkills = SkillAcquireHolder.getInstance().getAvailableSkills(this,
AcquireType.NORMAL);
// Скиллы дающиеся бесплатно не требуют изучения
for (SkillLearn skill : availableSkills)
if (
skill.getCost() == 0 && skill.getItemId() == 0) {
Skill sk = SkillTable.getInstance().getInfo(skill.getId(), skill.getLevel());
addSkill(sk, true);
if (
getAllShortCuts().size() > 0 && sk.getLevel() > 1)
for (
ShortCut sc : getAllShortCuts())
if (
sc.getId() == sk.getId() && sc.getType() == ShortCut.TYPE_SKILL) {
ShortCut newsc = new ShortCut(sc.getSlot(), sc.getPage(), sc.getType(), sc.getId(),
sk.getLevel(), 1);
sendPacket(new ShortCutRegister(this, newsc));
registerShortCut(newsc);
}
update = true;
}
if (
availableSkills.size() > 0)
sendPacket(new ExNewSkillToLearnByLevelUp());
}
if (
send && update)
sendSkillList();

updateStats();
}

Вот сама строчка

PHP код:
<?php 
if (getAllShortCuts().size() > 0 && sk.getLevel() > 1)

А что не так хз
Помог не забудь "Спасибо" Smile
Ответ
#4
kloni1 Написал:Вот метод в которой находится строчка
PHP код:
<?php 
public void rewardSkills(boolean send) {
boolean update = false;
if (
Config.AUTO_LEARN_SKILLS) {
int unLearnable = 0;
Collection<SkillLearn> skills = SkillAcquireHolder.getInstance().getAvailableSkills(this,
AcquireType.NORMAL);
while (
skills.size() > unLearnable) {
unLearnable = 0;
for (
SkillLearn s : skills) {
Skill sk = SkillTable.getInstance().getInfo(s.getId(), s.getLevel());
if (
sk == null || !sk.getCanLearn(getClassId()) || !Config.AUTO_LEARN_FORGOTTEN_SKILLS
&& s.isClicked()) {
unLearnable++;
continue;
}
addSkill(sk, true);
}
skills = SkillAcquireHolder.getInstance().getAvailableSkills(this, AcquireType.NORMAL);
}
update = true;
} else {
Collection<SkillLearn> availableSkills = SkillAcquireHolder.getInstance().getAvailableSkills(this,
AcquireType.NORMAL);
// Скиллы дающиеся бесплатно не требуют изучения
for (SkillLearn skill : availableSkills)
if (
skill.getCost() == 0 && skill.getItemId() == 0) {
Skill sk = SkillTable.getInstance().getInfo(skill.getId(), skill.getLevel());
addSkill(sk, true);
if (
getAllShortCuts().size() > 0 && sk.getLevel() > 1)
for (
ShortCut sc : getAllShortCuts())
if (
sc.getId() == sk.getId() && sc.getType() == ShortCut.TYPE_SKILL) {
ShortCut newsc = new ShortCut(sc.getSlot(), sc.getPage(), sc.getType(), sc.getId(),
sk.getLevel(), 1);
sendPacket(new ShortCutRegister(this, newsc));
registerShortCut(newsc);
}
update = true;
}
if (
availableSkills.size() > 0)
sendPacket(new ExNewSkillToLearnByLevelUp());
}
if (
send && update)
sendSkillList();

updateStats();
}

Вот сама строчка

PHP код:
<?php 
if (getAllShortCuts().size() > 0 && sk.getLevel() > 1)

А что не так хз
Вариантов у тебя не много, либо getAllShortCuts null либо sk, но т.к. скиллы судя по всему у тебя корректно добавляются в addSkill(sk, true) и не взывает тут ошибки, то попробуй сделать

getAllShortCuts() != null 0 && sk.getLevel() > 1

Если проверяться размер должен, то заранее до проверки сделай проверку на нулл для шоткатов.
[Изображение: 61b684.png]
Ответ
#5
Таже ошибка
Помог не забудь "Спасибо" Smile
Ответ
#6
kloni1 Написал:Ок ща попробую, а не подскажите что за метод getAllShortCuts

С овер сборками не дружу, но судя по названию метод возвращает то что выставлено на панели скиллов, т.е. шоткатов по факту, смотри по коду дальше там даже идет sc.getId == sk.getId т.е. сравнивает скил в шоткате со скиллами у игрока.

Добавлено через 56 секунд
kloni1 Написал:Таже ошибка

getAllShortCuts() != null 0 && sk.getLevel() > 1

Надеюсь 0 не добавил, очепятался, если тоже написал удали :redlol:
[Изображение: 61b684.png]
Ответ
#7
0 я сразу убрал :redlol: Теперь 2220 строчка получается вот эта
PHP код:
<?php 
getAllShortCuts
() != null && sk.getLevel() > 1

но ошибка все таже
Помог не забудь "Спасибо" Smile
Ответ
#8
kloni1 Написал:0 я сразу убрал :redlol: Теперь 2220 строчка получается вот эта
PHP код:
<?php 
getAllShortCuts
() != null && sk.getLevel() > 1

но ошибка все таже
Дебаж старым дедовским способом через вывод инфы в консоль добавь вывод шоткатов и скиллов, должно получиться что-то вроде
[SRC="java"]
System.out.println("shotcuts: " + getAllShortCuts());
System.out.println("sk level: " + sk.getLevel());
[/SRC]


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

Чтобы получилось что-то вроде

[SRC="java"]if(getAllShortCuts() != null)
{
if(sk.getLevel() > 1)
{
.....[/SRC]

Как-то так, ощем импровизируем, думаю станет понятно сразу после дедовского способа дебага Big Grin
[Изображение: 61b684.png]
Ответ
#9
Шоткатов пишет 0 скилов 4
Помог не забудь "Спасибо" Smile
Ответ
#10
kloni1 Написал:Шоткатов пишет 0 скилов 4

2й вариант мой пробовал?

Если в консоли выводит прямо так 0 и 4 то я не понимаю откуда у тебя там нпе :redlol:
[Изображение: 61b684.png]
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Что за ошибка? serg5777 22 9,153 07-11-2023, 09:49 PM
Последний пост: ntking
  Ошибка Cannot read field "race" valdemart123 0 1,069 12-04-2021, 04:44 AM
Последний пост: valdemart123
  При запуске game server на сайте (sw13) ошибка mysql 0 AndreDeiu 1 1,351 09-27-2020, 11:32 PM
Последний пост: Lord_Gothic
  Ошибка геймсервера zane 9 2,582 04-27-2018, 12:28 PM
Последний пост: DmnC
  Ошибка загрузки гейм сервера zane 5 2,045 04-17-2018, 08:03 PM
Последний пост: zane
  Ошибка телепорта Rork 1 1,279 03-02-2018, 03:05 PM
Последний пост: Gaikotsu
  Ошибка с ГМ шопом silok 1 1,322 01-11-2018, 07:36 AM
Последний пост: Narsell
  Ошибка PWSOFT Ananim 0 1,380 07-07-2017, 11:42 AM
Последний пост: Ananim
  Ошибка _aveList; knaif 1 1,412 06-22-2017, 03:07 PM
Последний пост: Trimius
  Ошибка KastaMeN 1 1,826 06-16-2017, 11:32 PM
Последний пост: Mangol

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


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