Сообщений: 320
Тем: 24
Зарегистрирован: Sep 2010
Репутация:
817
Aristocrat, ТС просит разобраться в элементарном коде, почему у него дроп не падает, а Вы ему говорите: "Пиши парсер"... Не логично ли предположить, что следующая его просьба будет написать ему парсер?
Для простого вопроса - простой ответ.
Сообщений: 22
Тем: 6
Зарегистрирован: Oct 2013
Репутация:
0
Aristocrat Написал:Почему не рационально? Я могу использовать правила дропа для НПС.
Код: <!-- Если npcid = ALL, то дроп будет прописан ВСЕМ NPC(ВООБЩЕ ВСЕМ! ВКЛЮЧАЯ ГВАРДОВ, ТОРГАШЕЙ И ПРОЧИХ). Если есть, то должен стоять первым! -->
<!-- Можно использовать либо параметр npcid="", либо параметр type="" и level="" -->
<!-- Если используется парметр npcid="", то можно указывать id мобов по-одному через запятую, либо используя интервал id1-id10, разделенный "-" -->
<!-- Пример: <droprule npcid="20000,20001,20002,20003-20010,20012"> -->
<!-- Если используется парметр type="", то можно указывать значения групп инстансов НПС через запятую. Значение как в NPCData! -->
<!-- Если используется парметр type="", то ОБЯЗАТЕЛЬНО должен быть параметр level="", где указываются нужные уровни мобов по-одному через запятую, либо используя интервал level1-level10, разделенный "-" -->
<!-- Если используется парметр type="", то ОПЦИОНАЛЬНО может быть параметр exception="", где указываются те id мобов, которые исключаются из правила, по-одному через запятую, либо используя интервал id1-id10, разделенный "-" -->
<!-- Пример: <droprule type="Monster,RaidBoss" level="10,15,30-80" exception="20000,20001,20002,20003-20010,20012"> -->
<!-- Чтобы перезаписать любую группу - указываем ее в типе ревардлиста -->
<!-- Чтобы сохранить старый дроп - указываем в типе ревардлиста ALT_GROUPED -->
Задача ТСа решается короткой вставкой.
Код: <droprule type="RaidBoss" level="60-85">
<rewardlist type="ALT_GROUPED">
<group chance="100.0">
<reward item_id="4037" min="1" max="3" chance="60.0000"/>
</group>
</rewardlist>
</droprule>
Преимущества:
Дроп видно в свойствах моба штатными средствами, через Шифт+Клик
Можно вписать его в любую из групп дропа и управлять количеством через рейтовку, что важно, если есть ПА на сервере.
Чтото я не понял) это куда вписывать нужно?)
Сообщений: 320
Тем: 24
Зарегистрирован: Sep 2010
Репутация:
817
Aristocrat, Я же говорил ^_^
Сообщений: 22
Тем: 6
Зарегистрирован: Oct 2013
Репутация:
0
WoWan-SM Написал:Aristocrat, ТС просит разобраться в элементарном коде, почему у него дроп не падает, а Вы ему говорите: "Пиши парсер"... Не логично ли предположить, что следующая его просьба будет написать ему парсер?
Мне тут посоветовали на другом форуме сделать так:
CoLDrop.java
Код: package events.CoLDrop;
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.CharListenerList;
import l2r.gameserver.model.instances.MonsterInstance;
import l2r.gameserver.model.instances.NpcInstance;
import l2r.gameserver.model.instances.RaidBossInstance;
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
{
public static boolean SimpleCheckDropWithMonster(Creature mob, Creature killer)
{
return mob != null && mob.isMonster() && killer != null && killer.getPlayer() != null && killer.getLevel() - mob.getLevel() < 9;
}
private static final Logger _log = LoggerFactory.getLogger(CoLDrop.class);
protected static int CoL = 6673;//Вписать ID CoL
protected static int min = 1;//Вписать минимум
protected static int max = 3;//Вписать максимум
@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 (SimpleCheckDropWithMonster(cha, killer))
{
if(cha.getLevel() >= 60)
{
if (Rnd.chance(100))//Шанс
{
((NpcInstance) cha).dropItem(killer.getPlayer(), CoL, count);
((RaidBossInstance) cha).dropItem(killer.getPlayer(), CoL, count);
}
}
}
}
}
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
02-22-2014, 02:33 PM
(Сообщение последний раз редактировалось: 02-22-2014, 02:36 PM n3k0nation.)
Зачем парсеры? Зачем вручную дропать айтемы? Вы совсем ебсошли с ума? Обычный обработчик, который добавит дроп всему существующему спауну при старте сервера:
Код: @Override public void onLoad() {
List<L2NpcTemplate> templates = new ArrayList<>();
for(L2Spawn spawn : SpawnTable.getInstance().getSpawnTable()) {
if(templates.contains(spawn.getTemplate()))
continue;
spawn.getTemplate().getDropData().addDrop(new L2DropData(5027, 1, 1, L2Drop.MAX_CHANCE, 60));
templates.add(spawn.getTemplate());
}
templates.clear();
}
В данном случае решена проблема шифт-клика.
Добавлено через 50 секунд
Xample Написал:Мне тут посоветовали на другом форуме сделать так:
CoLDrop.java
Код: package events.CoLDrop;
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.CharListenerList;
import l2r.gameserver.model.instances.MonsterInstance;
import l2r.gameserver.model.instances.NpcInstance;
import l2r.gameserver.model.instances.RaidBossInstance;
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
{
public static boolean SimpleCheckDropWithMonster(Creature mob, Creature killer)
{
return mob != null && mob.isMonster() && killer != null && killer.getPlayer() != null && killer.getLevel() - mob.getLevel() < 9;
}
private static final Logger _log = LoggerFactory.getLogger(CoLDrop.class);
protected static int CoL = 6673;//Вписать ID CoL
protected static int min = 1;//Вписать минимум
protected static int max = 3;//Вписать максимум
@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 (SimpleCheckDropWithMonster(cha, killer))
{
if(cha.getLevel() >= 60)
{
if (Rnd.chance(100))//Шанс
{
((NpcInstance) cha).dropItem(killer.getPlayer(), CoL, count);
((RaidBossInstance) cha).dropItem(killer.getPlayer(), CoL, count);
}
}
}
}
}
У Вас будет вылетать Class Cast Exception в таком коде
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 433
Тем: 35
Зарегистрирован: Jun 2009
Репутация:
1,392
В овероподобных сборках не все так просто.
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
Aristocrat Написал:В овероподобных сборках не все так просто.
У меня овероподобная Точнее феникс. Все должно замечательно работать.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 22
Тем: 6
Зарегистрирован: Oct 2013
Репутация:
0
Pointer*Rage Написал:У Вас будет вылетать Class Cast Exception в таком коде
ага была. убрал строку ((RaidBossInstance) cha).dropItem(killer.getPlayer(), CoL, count);
Но дроп также валится и с мобов и с миньонов
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
02-22-2014, 02:47 PM
(Сообщение последний раз редактировалось: 02-22-2014, 02:55 PM n3k0nation.)
Xample Написал:ага была. убрал строку ((RaidBossInstance) cha).dropItem(killer.getPlayer(), CoL, count);
Но дроп также валится и с мобов и с миньонов
Вам нужен дроп колов только с раид боссов?
Код: @Override public void onLoad() {
List<L2NpcTemplate> templates = new ArrayList<>();
for(L2Spawn spawn : SpawnTable.getInstance().getSpawnTable()) {
if(templates.contains(spawn.getTemplate()) || !spawn.getTemplate().isRaid)
continue;
spawn.getTemplate().getDropData().addDrop(new L2DropData(5027, 1, 1, L2Drop.MAX_CHANCE, 60, 78));
templates.add(spawn.getTemplate());
}
templates.clear();
}
Так же можно использовать getSpawnTable в RaidBossSpawnManager.
Добавлено через 2 минуты
Если не хотите юзать мой код, то делайте у себя проверку на instanceof L2RaidBossInstance перед дропом. Или же подправьте симпл чекер
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 22
Тем: 6
Зарегистрирован: Oct 2013
Репутация:
0
Вообщем помогли подправить скрипт, теперь всё работает как надо, вот что получилось:
CoLDrop.java
Код: package events.CoLDrop;
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.CharListenerList;
import l2r.gameserver.model.instances.MonsterInstance;
import l2r.gameserver.model.instances.NpcInstance;
import l2r.gameserver.model.instances.RaidBossInstance;
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
{
public static boolean SimpleCheckDropWithMonster(Creature mob, Creature killer)
{
return mob != null && mob.isRaid() && killer != null && killer.getPlayer() != null && killer.getLevel() - mob.getLevel() < 9;
}
private static final Logger _log = LoggerFactory.getLogger(CoLDrop.class);
protected static int CoL = 6673;//Вписать ID CoL
protected static int min = 1;//Вписать минимум
protected static int max = 3;//Вписать максимум
@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 (SimpleCheckDropWithMonster(cha, killer))
{
if(cha.getLevel() >= 60)
{
if (Rnd.chance(100))//Шанс
{
((NpcInstance) cha).dropItem(killer.getPlayer(), CoL, count);
}
}
}
}
}
|