Вообщем задача такая- нужно добавить всем Рейд боссам выше 60лвла в дроплист колы от 1 до 3 с шансом 50% (или просто по 1 с шансом 50%)
В xml прописывать каждому рб нехочу (ибо нужно будет иногда выключать)
Значит выход написать java скрипт. на другом форуме дали вот такой:
Консоль на него не ругается, но он почемуто не работает...
нашёл в сборке такой вот скрипт:
и настройки к нему:
Этот скрипт работает, НО он заменивает весь основной дроп на "только CoL"
Помогите по этому скрипту поправить скрипт CoLDrop.java (указан выше), чтобы он просто добавлял дроп (а не заменивал) к рб выше 60лвл Колы...
В xml прописывать каждому рб нехочу (ибо нужно будет иногда выключать)
Значит выход написать java скрипт. на другом форуме дали вот такой:
CoLDrop.java
Код:
package events.CoLDrop;
import l2r.commons.util.Rnd;
import l2r.gameserver.listener.actor.OnDeathListener;
import l2r.gameserver.model.Creature;
import l2r.gameserver.model.Player;
import l2r.gameserver.model.actor.listener.CharListenerLi st;
import l2r.gameserver.model.instances.NpcInstance;
import l2r.gameserver.model.reward.RewardData;
import l2r.gameserver.scripts.Functions;
import l2r.gameserver.scripts.ScriptFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CoLDrop extends Functions implements ScriptFile, OnDeathListener
{
private static final Logger _log = LoggerFactory.getLogger(CoLDrop.class);
protected static int CoL = 4037;//Вписать ID CoL
protected static int min = 1;//Вписать минимум
protected static int max = 2;//Вписать максимум
@Override
public void onLoad()
{
CharListenerList.addGlobal(this);
_log.info("Loaded Event: CoLDrop [state: activated]");
}
@Override
public void onReload()
{
//dummy
}
@Override
public void onShutdown()
{
//dummy
}
@Override
public void onDeath(Creature cha, Creature killer)
{
int count = Rnd.get(min,max);
if (SimpleCheckDrop(cha, killer))
{
if(cha.getLevel() >= 60)
{
if (Rnd.chance(100))//Шанс
{
((NpcInstance) cha).dropItem(killer.getPlayer(), CoL, count);
}
}
}
}
}
Консоль на него не ругается, но он почемуто не работает...
нашёл в сборке такой вот скрипт:
CustomDropItems.java
Код:
package events.CustomDropItems;
import l2r.commons.util.Rnd;
import l2r.gameserver.Config;
import l2r.gameserver.listener.actor.OnDeathListener;
import l2r.gameserver.model.Creature;
import l2r.gameserver.model.actor.listener.CharListenerLi st;
import l2r.gameserver.model.instances.MonsterInstance;
import l2r.gameserver.model.instances.NpcInstance;
import l2r.gameserver.scripts.Functions;
import l2r.gameserver.scripts.ScriptFile;
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 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)
{
if(_active && SimpleCheckDrop(cha, killer))
for(int i = 0; i < DROP.length; i++)
if(Rnd.chance(CustomDropItemsChance[i] * killer.getPlayer().getRateItems() * ((MonsterInstance) cha).getTemplate().rateHp))
((MonsterInstance) cha).dropItem(killer.getPlayer(), DROP[i], Rnd.get(CDItemsCountDropMin[i], CDItemsCountDropMax[i]));
else
return;
}
private void dropItemRb(Creature cha, Creature killer)
{
if(_active)
for(int i = 0; i < DROP.length; i++)
if(Rnd.chance(CustomDropItemsChance[i] * killer.getPlayer().getRateItems() * ((NpcInstance) cha).getTemplate().rateHp))
((NpcInstance) cha).dropItem(killer.getPlayer(), DROP[i], Rnd.get(CDItemsCountDropMin[i], CDItemsCountDropMax[i]));
else
return;
}
}
и настройки к нему:
events.properties
Код:
# Конфигурация скрипта CustomDropItems
AllowCustomDropItems = True
# ID итемов добавляемых в дроп лист мобам
# в формате 1234;5678 и т.д.
CDItemsId = 4037
CDItemsCountDropMin = 1
CDItemsCountDropMax = 3
# Шанс дропа итемов
CustomDropItemsChance = 100;
# Задействовать уровни играков?
CDItemsAllowMinMaxPlayerLvl = False
# Минимальный уровень которым будет дропать итемы(работает только при CDItemsAllowMinMaxPlayerLvl = True)
CDItemsMinPlayerLvl = 1
# Максимальный уровень которым будет дропать итемы(работает только при CDItemsAllowMinMaxPlayerLvl = True)
CDItemsMaxPlayerLvl = 85
# Задействовать уровни мобов?
CDItemsAllowMinMaxMobLvl = False
# Минимальный уровень с которых будет дропать итемы(работает только при CDItemsAllowMinMaxMobLvl = True)
CDItemsMinMobLvl = 70
# Максимальный уровень с которых будет дропать итемы(работает только при CDItemsAllowMinMaxMobLvl = True)
CDItemsMaxMobLvl = 86
# Включить дроп только РБ?(При CDItemsAllowOnlyRbDrops = True, с обычных мобов падать не будет)
CDItemsAllowOnlyRbDrops = True
Этот скрипт работает, НО он заменивает весь основной дроп на "только CoL"
Помогите по этому скрипту поправить скрипт CoLDrop.java (указан выше), чтобы он просто добавлял дроп (а не заменивал) к рб выше 60лвл Колы...