Перейти к содержанию
Авторизация  
Hikari

Getallfirsteffects И Нпе

Рекомендуемые сообщения

[20:02:39] ERROR Exception: RunnableImpl.run(): java.lang.NullPointerException

java.lang.NullPointerException

at l2ft.gameserver.model.EffectList.getAllFirstEffects(EffectList.java:160)

at l2ft.gameserver.model.Player.updateEffectIconsImpl(Player.java:1761)

at l2ft.gameserver.model.Player$UpdateEffectIcons.runImpl(Player.java:1731)

at l2ft.commons.threading.RunnableImpl.run(RunnableImpl.java:21)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)

at java.util.concurrent.FutureTask.run(FutureTask.java:166)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

at java.lang.Thread.run(Thread.java:722)

 

 

/**

* Возвращает первые эффекты для всех скиллов. Нужно для отображения не

* более чем 1 иконки для каждого скилла.

*/

public Effect[] getAllFirstEffects()

{

if(isEmpty())

return Effect.EMPTY_L2EFFECT_ARRAY;

 

List list = new ArrayList();

int id2=0;

int id =0;

 

for(Effect e : _effects)

{

id = e.getSkill().getId();

if(id!=id2)

{

e = getEffectsBySkillId(id).get(0); //костыль, в приоритете 1ый эффект

list.add(e);

}

id2 = e.getSkill().getId();

 

}

return list.toArray(new Effect[list.size()]);

}

 

 

Сабж, кто может помочь ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

EffectList.java:160

Что конкретно на 160й строке?

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

EffectList.java:160

Что конкретно на 160й строке?

 

e = getEffectsBySkillId(id).get(0); //костыль, в приоритете 1ый эффект

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже показатель id не существует

ну НПЕ вылазит очень редко

 

логично добавить проверку

 

if(id != 0)

 

или нет ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну НПЕ вылазит очень редко

 

логично добавить проверку

 

if(id != 0)

 

или нет ?

 

нет.

 

List<Effects> effectsList = getEffectsBySkillId(id);
if (effectsList != null && !effectsList.isEmpty()) {
...
}

Изменено пользователем YuraAAA1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На всю эту часть замени.

public Effect[] getAllFirstEffects()
{
if(isEmpty())
return Effect.EMPTY_L2EFFECT_ARRAY;

TIntObjectHashMap map = new TIntObjectHashMap();

for(Effect e : _effects)
map.put(e.getSkill().getId(), e);

return map.values(new Effect[map.size()]);
}

private void checkSlotLimit(Effect newEffect)
{
if(_effects == null)
return;

int slotType = getSlotType(newEffect);
if(slotType == NONE_SLOT_TYPE)
return;

int size = 0;
TIntArrayList skillIds = new TIntArrayList();
for(Effect e : _effects)
if(e.isInUse())
{
if(e.getSkill().equals(newEffect.getSkill())) // мы уже имеем эффект от этого скилла
return;

if(!skillIds.contains(e.getSkill().getId()))
{
int subType = getSlotType(e);
if(subType == slotType)
{
size ++;
skillIds.add(e.getSkill().getId());
}
}
}

int limit = 0;

if(size < limit)
return;

int skillId = 0;
for(Effect e : _effects)
if(e.isInUse())
{
if(getSlotType(e) == slotType)
{
skillId = e.getSkill().getId();
break;
}
}

if(skillId != 0)
stopEffect(skillId);

}

 

Изменено пользователем genokk22

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

починил, убрав перебор эффектов, спасибо Dislike

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На всю эту часть замени.

public Effect[] getAllFirstEffects()
{
if(isEmpty())
return Effect.EMPTY_L2EFFECT_ARRAY;

TIntObjectHashMap map = new TIntObjectHashMap();

for(Effect e : _effects)
map.put(e.getSkill().getId(), e);

return map.values(new Effect[map.size()]);
}

private void checkSlotLimit(Effect newEffect)
{
if(_effects == null)
return;

int slotType = getSlotType(newEffect);
if(slotType == NONE_SLOT_TYPE)
return;

int size = 0;
TIntArrayList skillIds = new TIntArrayList();
for(Effect e : _effects)
if(e.isInUse())
{
if(e.getSkill().equals(newEffect.getSkill())) // мы уже имеем эффект от этого скилла
return;

if(!skillIds.contains(e.getSkill().getId()))
{
int subType = getSlotType(e);
if(subType == slotType)
{
size ++;
skillIds.add(e.getSkill().getId());
}
}
}

int limit = 0;

if(size < limit)
return;

int skillId = 0;
for(Effect e : _effects)
if(e.isInUse())
{
if(getSlotType(e) == slotType)
{
skillId = e.getSkill().getId();
break;
}
}

if(skillId != 0)
stopEffect(skillId);

}

 

многовато кода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...