Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
thinkActive
#1
Подскажите как в AI наследывать наследовать thinkActive
Незнаю как объяснить...
Тоесть есть допустим АИ:

package ai.group_template;

import com.l2js.gameserver.ai.CtrlIntention;
import com.l2js.gameserver.model.actor.L2Attackable;
import com.l2js.gameserver.model.actor.L2Npc;
import com.l2js.gameserver.model.actor.instance.L2PcInstance;

public class SearchingMaster extends L2AttackableAIScript
{
private static final int[] mobs =
{
20965,20966,20967,20968,20969,20970,20971,20972,20973
};

public SearchingMaster(int questId, String name, String descr)
{
super(questId, name, descr);
for (int id : mobs)
addAttackId(id);
}

@Override
public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isPet)
{
if (player == null)
return null;

npc.setIsRunning(true);
((L2Attackable) npc).addDamageHate(player, 0, 999);
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);

return super.onAttack(npc, player, damage, isPet);
}

public static void main(String[] args)
{
new SearchingMaster(-1, "SearchingMaster", "ai");
}
}

в етом АИ допустим мне надо делать некоторые действия, которые происходят в состоянии не активности, тоесть когда он просто стоит
как ето сделать?
L2j
Ответ
#2
В этом - никак. Это не АИ-скрипт, а АИ-квест.
Ответ
#3
Azagthtot Написал:Это не АИ-скрипт, а АИ-скрипт.

Всмысле?..
Ответ
#4
Упс... ошибся... АИ-квест
Ответ
#5
Ну а как тогда сделать?

Добавлено через 4 минуты
Мне нужно нпц задать действия в thinkActive, как ето сделать?
Ответ
#6
Нужно переписать AI-класс (тот, который возвращается методом getAI() )
Это ядро
Ответ
#7
что именно там менять?
Ответ
#8
Написать класс-наследник AttackableAI, в нем перекрыть thinkActive() и в инстансе своего NPC вернуть экземпляр нового класса
Ответ
#9
создать в gameserver.ai

Код:
package com.l2js.gameserver.ai;

import static com.l2js.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
import com.l2js.gameserver.model.actor.L2Character;

public abstract class DefaultAI extends L2AttackableAI
{
    private boolean _isThinking;
    
    public DefaultAI(L2Character.AIAccessor accessor)
    {
        super(accessor);
    }
    
    @Override
    protected void onEvtThink()
    {
        if (isThinking())
            return;
        
        setThinking(true);
        
        try
        {
            if (getIntention() == AI_INTENTION_ACTIVE)
                thinkActive();
        }
        finally
        {
            setThinking(false);
        }

    }
    
    public boolean isThinking()
    {
        return _isThinking;
    }
    
    public void setThinking(boolean isThinking)
    {
        _isThinking = isThinking;
    }
    
    protected void thinkActive()
    {
    }
    

}

?
Ответ
#10
Зачем вам наследоваться от абстрактного класса? Если только вы кардинально собрались менять поведение...
Ответ


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


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