Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
L2Npcwalkerinstance, Проблемы(
#1
Доброго дня. Класс L2NpcWalkerInstance extends L2NpcInstance, не хочет понимать всяческих проверок на зоны, и нпц этого типа отказываются умирать, я уже не знаю какую можно написать проверку((. Перепробовал очень многое.

А зделать нужно, всего лишь, что бы нпц этого типа могли умирать от аттак простых игроков, при условии проверки на зону (если не в городе то можно атаковать\убить). Очень вас прошу, помогите наконец то разобраться с этим..

Вот код класса и всего что я наворотил в нем:

Код:
package com.l2jfrozen.gameserver.model.actor.instance;

import java.util.Map;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.ai.CtrlIntention;
import com.l2jfrozen.gameserver.ai.L2AttackableAI;
import com.l2jfrozen.gameserver.model.L2Attackable;
import com.l2jfrozen.gameserver.ai.L2CharacterAI;
import com.l2jfrozen.gameserver.ai.L2NpcWalkerAI;
import com.l2jfrozen.gameserver.model.L2Character;
import com.l2jfrozen.gameserver.model.L2Object;
import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jfrozen.gameserver.model.zone.type.L2TownZone;
import com.l2jfrozen.gameserver.managers.TownManager;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected;
import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
import static com.l2jfrozen.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;

public class L2NpcWalkerInstance extends L2NpcInstance
{
    public L2NpcWalkerInstance(int objectId, L2NpcTemplate template)
    {
        super(objectId, template);
        setAI(new L2NpcWalkerAI(new L2NpcWalkerAIAccessor()));
    }

    @Override
    public void setAI(L2CharacterAI newAI)
    {
        if(_ai == null)
        {
            super.setAI(newAI);
        }
    }

    @Override
    public void onSpawn()
    {
        ((L2NpcWalkerAI) getAI()).setHomeX(getX());
        ((L2NpcWalkerAI) getAI()).setHomeY(getY());
        ((L2NpcWalkerAI) getAI()).setHomeZ(getZ());
    }

    public void broadcastChat(String chat)
    {
        Map<Integer, L2PcInstance> _knownPlayers = getKnownList().getKnownPlayers();

        if(_knownPlayers == null)
        {
            if(Config.DEVELOPER)
            {
                _log.info("broadcastChat _players == null");
            }
            return;
        }

        //we send message to known players only!
        if(_knownPlayers.size() > 0)
        {
            CreatureSay cs = new CreatureSay(getObjectId(), 0, getName(), chat);

            //we interact and list players here
            for(L2PcInstance players : _knownPlayers.values())
            {
                //finally send packet :D
                players.sendPacket(cs);
            }

            cs = null;
        }
    }

    /**
     * NPCs are immortal
     *
     * @param i ignore it
     * @param attacker ignore it
     * @param awake ignore it
     */
    @Override
    public void reduceCurrentHp(double i, L2Character attacker, boolean awake)
    {
        super.reduceCurrentHp(i, attacker, awake);
    }
    /**
     * NPCs are immortal
     *
     * @param killer ignore it
     * @return false
    **/
    /*@Override
    public boolean doDie(L2Character killer)
    {
        if(!super.doDie(killer))
            return false;
        return true;
    }*/
    
    @Override
    public L2CharacterAI getAI()
    {
        return super.getAI();
    }

    protected class L2NpcWalkerAIAccessor extends L2Character.AIAccessor
    {
        /**
         * AI can't be deattached.
         */
        @Override
        public void detachAI()
        {}
    }
    
    public static boolean isInsidePeaceZone(L2Object attacker, L2Object target)
    {
    if(target == null)
            return false;
            
    if(attacker instanceof L2Character && target instanceof L2NpcWalkerInstance)
            return ((L2Character) target).isInsideZone(ZONE_PEACE) || ((L2Character) attacker).isInsideZone(ZONE_PEACE);

    if(attacker instanceof L2Character)
        return TownManager.getInstance().getTown(target.getX(), target.getY(), target.getZ()) != null || ((L2Character) attacker).isInsideZone(ZONE_PEACE);

    return TownManager.getInstance().getTown(target.getX(), target.getY(), target.getZ()) != null || TownManager.getInstance().getTown(attacker.getX(), attacker.getY(), attacker.getZ()) != null;
    }
    
    public void onAction(L2PcInstance player)
    {
        if(getObjectId() != player.getTargetId())
        {
            player.setTarget(this);
            MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
            player.sendPacket(my);
            //player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, null);
        }
        else
        {
            player.sendPacket(ActionFailed.STATIC_PACKET);
            //player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, null);
        }
    }
}
[Изображение: ck.gif]
Ответ
#2
Вообще-то любой NPC не умеет умирать Smile и мозгов (AI) у него обычно нет.
Не хотите наследовать свой класс от L2Attackable?
Ответ
#3
Azagthtot;169345 Написал:Вообще-то любой NPC не умеет умирать
Ну на фрозенах возможно и не умеют Smile На ребопободных - убираем 1н блок-проперку с выводом мессаджа и ретурном, и все НПСы падают Smile
Ответ
#4
спасибо, попробую)

у меня еще маленький вопрос - как можно изменить цвет Announcements? (по стандарту он голубого цвета), предполагаю что в клиенте, но вот не знаю где копать(
[Изображение: ck.gif]
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Проблемы с полосками HP и MP у саммонеров. Magican 0 851 09-19-2022, 05:03 AM
Последний пост: Magican
  В поиске редкой проблемы ivashk 9 1,431 01-18-2021, 10:49 AM
Последний пост: ivashk
  Проблемы с импортом в квестах на сборке Open-Team devset 2 2,726 02-02-2020, 06:26 PM
Последний пост: Bonabo
  Проблемы с заливкой таблиц в бд l2jserver HF dbinst_gs a6y 3 1,892 10-08-2017, 11:01 PM
Последний пост: a6y
  Проблемы с работоспособностью города Deaspara 22 5,345 08-24-2016, 07:11 PM
Последний пост: Kensiro
  Проблемы с установкой баффера michail_ST 15 3,236 04-17-2016, 09:51 AM
Последний пост: michail_ST
  Проблемы с Гео при запуске GameServer Scream 17 4,434 04-04-2016, 08:19 AM
Последний пост: HiredKiller
  Проблемы импорта исходников в Eclipse Alsander 5 1,605 10-14-2015, 05:17 PM
Последний пост: Kampina
  Проблемы с выпуском в интернет jimi 2 1,294 11-05-2014, 05:55 AM
Последний пост: jimi
  Acis 315, проблемы с запуском. senqthx 5 2,221 05-04-2014, 09:13 PM
Последний пост: senqthx

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)