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

Проверка Па И Нпе

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

Попытался сделать проверку на ПА (130 строка)

 

package events.CustomDropItems;

 

import l2ft.commons.util.Rnd;

import l2ft.gameserver.Config;

import l2ft.gameserver.listener.actor.OnDeathListener;

import l2ft.gameserver.model.Creature;

import l2ft.gameserver.model.actor.listener.CharListenerList;

import l2ft.gameserver.model.instances.MonsterInstance;

import l2ft.gameserver.model.instances.NpcInstance;

import l2ft.gameserver.model.instances.RaidBossInstance;

import l2ft.gameserver.scripts.Functions;

import l2ft.gameserver.scripts.ScriptFile;

 

import org.apache.commons.lang3.ArrayUtils;

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

public class CustomDropItems extends Functions implements ScriptFile, OnDeathListener

{

private static final Logger _log = LoggerFactory.getLogger(CustomDropItems.class);

 

private static final int[] DROP = Config.CDItemsId; //айдишники итемов

private static final int[] CDItemsCountDropMin = Config.CDItemsCountDropMin;// мин кол-во

private static final int[] CDItemsCountDropMax = Config.CDItemsCountDropMax;// макс кол-во

private static final double[] CustomDropItemsChance = Config.CustomDropItemsChance;// шанс дропа

private static boolean ALLOW_MIN_MAX_PLAYER_LVL = Config.CDItemsAllowMinMaxPlayerLvl;// проверка на лвл чара

private static final int MIN_PLAYER_LVL = Config.CDItemsMinPlayerLvl;// мин уровень чара

private static final int MAX_PLAYER_LVL = Config.CDItemsMaxPlayerLvl;// макс уровень чара

private static boolean ALLOW_MIN_MAX_MOB_LVL = Config.CDItemsAllowMinMaxMobLvl;// проверка на лвл моба

private static final int MIN_MOB_LVL = Config.CDItemsMinMobLvl;// мин уровень моба

private static final int MAX_MOB_LVL = Config.CDItemsMaxMobLvl;// макс уровень моба

private static boolean ALLOW_ONLY_RB_DROPS = Config.CDItemsAllowOnlyRbDrops;// дроп только с рб

private static final int[] FORBID_MOBS_ID = { 22829 };

 

private static boolean _active = false;

 

@Override

public void onLoad()// загрузка

{

CharListenerList.addGlobal(this);

if(Config.AllowCustomDropItems)

{

_active = true;

_log.info("Loaded CustomDropItems: CustomDropItems [state: activated]");

}

else

_log.info("Loaded CustomDropItems: CustomDropItems [state: deactivated]");

}

 

@Override

public void onReload()

{

 

}

 

@Override

public void onShutdown()

{

 

}

 

@Override

public void onDeath(Creature cha, Creature killer)//проверки при сметри моба

{

if(!ALLOW_ONLY_RB_DROPS)//если дроп не с РБ

{

if((ALLOW_MIN_MAX_PLAYER_LVL && checkValidate(killer, cha, true, false)) && (ALLOW_MIN_MAX_MOB_LVL && checkValidate(killer, cha, false, true)))

{

dropItemMob(cha, killer);

}

else if((ALLOW_MIN_MAX_PLAYER_LVL && checkValidate(killer, cha, true, false)) && !ALLOW_MIN_MAX_MOB_LVL)

{

dropItemMob(cha, killer);

}

else if(!ALLOW_MIN_MAX_PLAYER_LVL && (ALLOW_MIN_MAX_MOB_LVL && checkValidate(killer, cha, false, true)))

{

dropItemMob(cha, killer);

}

else if(!ALLOW_MIN_MAX_PLAYER_LVL && !ALLOW_MIN_MAX_MOB_LVL)

{

dropItemMob(cha, killer);

}

else

return;

}

else if(ALLOW_ONLY_RB_DROPS && (cha.isRaid() || cha.isBoss()))//если дроп с рб

{

if((ALLOW_MIN_MAX_PLAYER_LVL && checkValidate(killer, cha, true, false)) && (ALLOW_MIN_MAX_MOB_LVL && checkValidate(killer, cha, false, true)))

{

dropItemRb(cha, killer);

}

else if((ALLOW_MIN_MAX_PLAYER_LVL && checkValidate(killer, cha, true, false)) && !ALLOW_MIN_MAX_MOB_LVL)

{

dropItemRb(cha, killer);

}

else if(!ALLOW_MIN_MAX_PLAYER_LVL && (ALLOW_MIN_MAX_MOB_LVL && checkValidate(killer, cha, false, true)))

{

dropItemRb(cha, killer);

}

else if(!ALLOW_MIN_MAX_PLAYER_LVL && !ALLOW_MIN_MAX_MOB_LVL)

{

dropItemRb(cha, killer);

}

else

return;

}

else

return;

}

 

private boolean checkValidate(Creature killer, Creature mob, boolean lvlPlayer, boolean lvlMob)//проверки

{

if(mob == null || killer == null)

return false;

 

if(lvlPlayer && (killer.getLevel() >= MIN_PLAYER_LVL && killer.getLevel() <= MAX_PLAYER_LVL))

return true;

 

if(lvlMob && (mob.getLevel() >= MIN_MOB_LVL && mob.getLevel() <= MAX_MOB_LVL))

return true;

 

 

return false;

}

 

private void dropItemMob(Creature cha, Creature killer)//добавляем дроп в моба

{

long pa_bonus = 0;

if(killer.getPlayer().hasBonus())

{

pa_bonus = 4L;

}

if(_active && SimpleCheckDrop(cha, killer) && !ArrayUtils.contains(FORBID_MOBS_ID, cha.getNpcId()))

{

for(int i = 0; i < DROP.length; i++){

if(Rnd.chance(CustomDropItemsChance * killer.getPlayer().getRateItems() * ((MonsterInstance) cha).getTemplate().rateHp)){

((MonsterInstance) cha).dropItem(killer.getPlayer(), DROP, Rnd.get(CDItemsCountDropMin+pa_bonus, CDItemsCountDropMax+pa_bonus));

}

}

}

else

{

return;

}

 

}

 

private void dropItemRb(Creature cha, Creature killer)// добавляем дроп в рб

{

if(_active && ALLOW_ONLY_RB_DROPS)

for(int i = 0; i < DROP.length; i++)

if(Rnd.chance(CustomDropItemsChance * killer.getPlayer().getRateItems() * ((NpcInstance) cha).getTemplate().rateHp))

((NpcInstance) cha).dropItem(killer.getPlayer(), DROP, Rnd.get(CDItemsCountDropMin, CDItemsCountDropMax));

else

return;

}

}

 

 

из-за проверки if(killer.getPlayer().hasBonus()) появляется НПЕ

 

[17.05.14 10:34:05:705] ERROR threading.RunnableImpl: Exception: RunnableImpl.run(): java.lang.NullPointerException

java.lang.NullPointerException

at events.CustomDropItems.CustomDropItems.dropItemMob(CustomDropItems.java:132)

at events.CustomDropItems.CustomDropItems.onDeath(CustomDropItems.java:80)

at l2ft.gameserver.model.actor.listener.CharListenerList.onDeath(CharListenerList.java:118)

at l2ft.gameserver.model.Creature.onDeath(Creature.java:1667)

at l2ft.gameserver.model.instances.NpcInstance.onDeath(NpcInstance.java:319)

at l2ft.gameserver.model.instances.MonsterInstance.onDeath(MonsterInstance.java:388)

at l2ft.gameserver.model.Creature.doDie(Creature.java:1618)

at l2ft.gameserver.model.Creature.onReduceCurrentHp(Creature.java:3226)

at l2ft.gameserver.model.instances.NpcInstance.onReduceCurrentHp(NpcInstance.java:293)

at l2ft.gameserver.model.instances.MonsterInstance.onReduceCurrentHp(MonsterInstance.java:411)

at l2ft.gameserver.model.Creature.reduceCurrentHp(Creature.java:3195)

at l2ft.gameserver.model.instances.MonsterInstance.reduceCurrentHp(MonsterInstance.java:924)

at l2ft.gameserver.model.Creature.onHitTimer(Creature.java:2987)

at l2ft.gameserver.model.GameObjectTasks$HitTask.runImpl(GameObjectTasks.java:318)

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

at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)

at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

at java.util.concurrent.FutureTask.run(Unknown Source)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

 

 

Как убрать НПЕ - не знаю.

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


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

По логике, не видя кода, нпе из за отсутствия киллера, либо киллер не плеер.

  • Upvote 1

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


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

По логике, не видя кода, нпе из за отсутствия киллера, либо киллер не плеер.

спасибо за наводку, проблему решил

 

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

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

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


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

Автоматически сформированное сообщение

Тема закрыта модератором.

 

Причина: Решно

 

Если вы не согласны с закрытием темы, то можете обратиться к администратору.

 

С наилучшими пожеланиями

ForumMaxi - Сообщество администраторов онлайн игр

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


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

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

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

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