Скрипт PartyDrop

Nova-Design

Бывалый
Местный
Сообщения
272
Розыгрыши
0
Решения
1
Репутация
291
Реакции
1 696
Баллы
698
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
Pain
Подскажите пожалуйста как добавить NPCID для этого скрипта

package ai;

import l2p.gameserver.Config;
import l2p.gameserver.ai.Fighter;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Party;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.instances.L2NpcInstance;
import l2p.gameserver.serverpackets.SocialAction;

public class PartyDrop extends Fighter
{

public PartyDrop(L2NpcInstance actor)
{
super(actor);
}

@Override
protected void onEvtDead(L2Character killer)
{
{
L2Player player = killer.getPlayer();
if(player != null)
{
{
player.getInventory().addItem(9702, 1, "Boss Coin");
player.sendMessage("Поздравляем, Вы умудрились завалить рейд босса!");
player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
}
L2Party party = player.getParty();
if(party != null)
{
L2NpcInstance actor = getActor();
for(L2Player pm : party.getPartyMembers())
{
pm.getInventory().addItem(9702, 1, "Boss Coin");
player.sendMessage("Поздравляем, Вы умудрились завалить рейд босса!");
pm.broadcastPacket(new SocialAction(pm.getObjectId(), 16));
}
}
}
}
super.onEvtDead(killer);
}
}
 
Не понимаю суть вопроса...
Скрипт вроде как используется в НПСах? То-есть там есть какая-то строка "Дроп=ПатиДроп", в котором идет перечисление предметов ?
Или этот скрипт никак с таким не связан и активируется при убийстве любого РБ и Вы хотите ограничить ИД РБ к которым он применим...?
 
Не понимаю суть вопроса...
Скрипт вроде как используется в НПСах? То-есть там есть какая-то строка "Дроп=ПатиДроп", в котором идет перечисление предметов ?
Или этот скрипт никак с таким не связан и активируется при убийстве любого РБ и Вы хотите ограничить ИД РБ к которым он применим...?
я хочу ограничить ид РБ к которым он применим
 
Может так ? А может не так...
Не знаю откуда взяты были сурсы, в 24 реве ничего такого не увидел...
Java:
package ai;

import l2p.gameserver.Config;
import l2p.gameserver.ai.Fighter;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Party;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.instances.L2NpcInstance;
import l2p.gameserver.serverpackets.SocialAction;

public class PartyDrop extends Fighter
{
    private final static int[] EXCLUDED_ID = {1, 2, 3};
    private final static HashSet<Integer> ID_CHECK = new HashSet(Arrays.asList(EXCLUDED_ID));
    
    public PartyDrop(L2NpcInstance actor)
    {
        if (ID_CHECK.contains(actor.getTemplate().getID()))
        {
            return;
        }
        super(actor);
    }

    @Override
    protected void onEvtDead(L2Character killer)
    {
        {   
            L2Player player = killer.getPlayer();
            if(player != null)
            {
                {
                    player.getInventory().addItem(9702, 1, "Boss Coin");
                    player.sendMessage("Поздравляем, Вы умудрились завалить рейд босса!");
                    player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
                }
                L2Party party = player.getParty();
                if(party != null)
                {
                    L2NpcInstance actor = getActor();
                    for(L2Player pm : party.getPartyMembers())
                    {
                        pm.getInventory().addItem(9702, 1, "Boss Coin");
                        player.sendMessage("Поздравляем, Вы умудрились завалить рейд босса!");
                        pm.broadcastPacket(new SocialAction(pm.getObjectId(), 16));
                    }
                }
            }
        }
        super.onEvtDead(killer);
    }
}
 
Может так ? А может не так...
Не знаю откуда взяты были сурсы, в 24 реве ничего такого не увидел...
Java:
package ai;

import l2p.gameserver.Config;
import l2p.gameserver.ai.Fighter;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Party;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.instances.L2NpcInstance;
import l2p.gameserver.serverpackets.SocialAction;

public class PartyDrop extends Fighter
{
    private final static int[] EXCLUDED_ID = {1, 2, 3};
    private final static HashSet<Integer> ID_CHECK = new HashSet(Arrays.asList(EXCLUDED_ID));
   
    public PartyDrop(L2NpcInstance actor)
    {
        if (ID_CHECK.contains(actor.getTemplate().getID()))
        {
            return;
        }
        super(actor);
    }

    @Override
    protected void onEvtDead(L2Character killer)
    {
        {  
            L2Player player = killer.getPlayer();
            if(player != null)
            {
                {
                    player.getInventory().addItem(9702, 1, "Boss Coin");
                    player.sendMessage("Поздравляем, Вы умудрились завалить рейд босса!");
                    player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
                }
                L2Party party = player.getParty();
                if(party != null)
                {
                    L2NpcInstance actor = getActor();
                    for(L2Player pm : party.getPartyMembers())
                    {
                        pm.getInventory().addItem(9702, 1, "Boss Coin");
                        player.sendMessage("Поздравляем, Вы умудрились завалить рейд босса!");
                        pm.broadcastPacket(new SocialAction(pm.getObjectId(), 16));
                    }
                }
            }
        }
        super.onEvtDead(killer);
    }
}
не работает
 
Как я могу адаптировать его к Lucera 3?
 
Очень странный подход к реализации доп дропа с рб. В вашем случае, чтобы этот дроп работал - нужно в датапаке прописать эту АИшку каждому рб, с которого хотите иметь дроп, указанный в вашем коде. Но АИшка наследуется от Fighter - то есть, предполагается самое стандартное АИ. А если у РБ какая-то особенная АИ? Тогда, прописав ему данное АИ пати дропа, похерятся все особенности поведения конкретного рб.

Я бы посоветовал в базовом классе АИ мобов(от которого наследуется Fighter, в моей сборке оно называется DefaultAI, как в вашей - хз) реализовать метод, исполняющий код той АИ, что вы показали, исполняющийся при смерти, с условием, что ид npc будет в списке, а список вывести в конфиг. Выглядеть это будет примерно так.

Java:
// код класса

@Override
protected void onEvtDead(L2Character killer)
{
    //код метода
    if(Config.PARTY_DROP_RB_LIST.contains(actor.getNpcId()))
        checkAndGiveAdditionalRbDrop(killer);
}

private void checkAndGiveAdditionalRbDrop(L2Character killer)
{
    L2Player player = killer.getPlayer();
    if(player != null)
    {
        {
            player.getInventory().addItem(9702, 1, "Boss Coin");
            player.sendMessage("Поздравляем, Вы умудрились завалить рейд босса!");
            player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
        }
        L2Party party = player.getParty();
        if(party != null)
        {
            L2NpcInstance actor = getActor();
            for(L2Player pm : party.getPartyMembers())
            {
                pm.getInventory().addItem(9702, 1, "Boss Coin");
                player.sendMessage("Поздравляем, Вы умудрились завалить рейд босса!");
                pm.broadcastPacket(new SocialAction(pm.getObjectId(), 16));
            }
        }
    }
}

// код класса

И еще, в самом коде, похоже, допущена логическая ошибка. Здесь предмет дважды выдастся игроку - сначала просто ему, а потом - всем пати-мемберам, включая его. Исправленный код:

Java:
// код класса

@Override
protected void onEvtDead(L2Character killer)
{
    //код метода
    if(Config.PARTY_DROP_RB_LIST.contains(actor.getNpcId()))
        checkAndGiveAdditionalRbDrop(killer);
}

private void checkAndGiveAdditionalRbDrop(L2Character killer)
{
    L2Player player = killer.getPlayer();
    if(player != null)
    { 
        L2Party party = player.getParty();
        if(party != null)
            for(L2Player pm : party.getPartyMembers())
            {
                pm.getInventory().addItem(9702, 1, "Boss Coin");
                player.sendMessage("Поздравляем, Вы умудрились завалить рейд босса!");
                pm.broadcastPacket(new SocialAction(pm.getObjectId(), 16));
            }
        else
        {
            player.getInventory().addItem(9702, 1, "Boss Coin");
            player.sendMessage("Поздравляем, Вы умудрились завалить рейд босса!");
            player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
        }
    }
}

// код класса

P.S. Модераторы, сорри за дабл-постинг, но просто не успел за 5 минут отредактировать свое сообщение.
 
Назад
Сверху Снизу