Перейти к содержанию
Авторизация  
Вітьок_Беребелюх

Как заставить моба атаковать другого моба?

Рекомендуемые сообщения

Доброго времени суток!

 

Подскажите пожалуйста как сделать чтоб при встрече 2 мобов они атаковали друг друга?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго времени суток!

 

Подскажите пожалуйста как сделать чтоб при встрече 2 мобов они атаковали друг друга?

а для чего вам это?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а для чего вам это?

Есть в продаже эвент типа доты,где мобы идут и рубят друг друга. И игрок выбирая сторону идет на их стороне.

Я думаю он что то похожее хочет сделать,чтобы бесплатно как всегда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть в продаже эвент типа доты,где мобы идут и рубят друг друга. И игрок выбирая сторону идет на их стороне.

Я думаю он что то похожее хочет сделать,чтобы бесплатно как всегда.

ссылку на продажу, или вы как всегда балаболите а толку "0", чисто посты понабивать так создайте себе тему и работайте там, а если нету знаний так нечего тут свои "5" копеек тыкать...

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ссылку на продажу, или вы как всегда балаболите а толку "0", чисто посты понабивать так создайте себе тему и работайте там, а если нету знаний так нечего тут свои "5" копеек тыкать...

http://forummaxi.ru/topic/39347-%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%B5%D1%82%D1%81%D1%8F-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0-%D1%81-%D0%BC%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%BA%D0%BE%D0%B9-%D0%B8%D0%B3%D1%80%D1%8B-dota/?hl=%D0%B4%D0%BE%D1%82%D0%B0

 

Вот вам ссылка,а если вы несете ху**ю. То будьте добры адекватней,толку 0? Вы же сами не знаете банальных вещей как видно по вашим вопросам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго времени суток!

 

Подскажите пожалуйста как сделать чтоб при встрече 2 мобов они атаковали друг друга?

Написать ai самое первое что в голову пришло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Написать ai самое первое что в голову пришло.

ну я вот тоже думал но знаний мало 

public class Team1 extends AbstractNpcAI {

    private static final int mobs1 = 18003;

    private static final int mobs2 = 18004;

    public Team1() {
        super("ai/group");
        registerMob(mobs1, EventType.ON_AGGRO, EventType.ON_ATTACK);
        addAggroRangeEnterId(mobs2);
    }

    @[member='override']
    public String onAggro(L2Npc npc, L2PcInstance player, boolean isPet)
    {
        
        System.out.println(npc.getName());
        System.out.println(player.getName());// виводит ник перса когда вхожу в радиус агра моба

        return super.onAggro(npc, player, isPet);
    }

    @[member='override']
    public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
    {
        //System.out.println("asdfasdfasdfsdf");
        return super.onAttack(npc, attacker, damage, isPet);
    }

}

тут делал тетст с выводом в консоль но моб видит только персонажа, другого моба не видно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну я вот тоже думал но знаний мало 

public class Team1 extends AbstractNpcAI {

    private static final int mobs1 = 18003;

    private static final int mobs2 = 18004;

    public Team1() {
        super("ai/group");
        registerMob(mobs1, EventType.ON_AGGRO, EventType.ON_ATTACK);
        addAggroRangeEnterId(mobs2);
    }

    @[member='override']
    public String onAggro(L2Npc npc, L2PcInstance player, boolean isPet)
    {
        
        System.out.println(npc.getName());
        System.out.println(player.getName());// виводит ник перса когда вхожу в радиус агра моба

        return super.onAggro(npc, player, isPet);
    }

    @[member='override']
    public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
    {
        //System.out.println("asdfasdfasdfsdf");
        return super.onAttack(npc, attacker, damage, isPet);
    }

}

тут делал тетст с выводом в консоль но моб видит только персонажа, другого моба не видно

незнаю как передать в таргет ид моба и заставить атаковать

Изменено пользователем Вітьок_Беребелюх

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

незнаю как передать в таргет ид моба и заставить атаковать

Потому-то таргет  возвращает L2PcInstance, а это игрок.

Изменено пользователем zGosu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример, для овера

package ai;

import org.apache.commons.lang3.ArrayUtils;

import l2p.commons.util.Rnd;
import l2p.gameserver.ai.CtrlEvent;
import l2p.gameserver.ai.Fighter;
import l2p.gameserver.config.NpcConfig;
import l2p.gameserver.model.Creature;
import l2p.gameserver.model.instances.NpcInstance;
import l2p.gameserver.utils.Location;

/**
 * @[member='Authority'] Gaikotsu
 */
public class MonsterAttacker extends Fighter
{
	private final int[] _targets;
	private final int _checkRange;
	private final int _aggroPoints;
	private final boolean _ignorePlayerAttacks;

	public MonsterAttacker(NpcInstance actor)
	{
		super(actor);

		_targets = actor.getParameter("targets", new int[0]);
		_checkRange = actor.getParameter("checkRange", 2000);
		_aggroPoints = actor.getParameter("aggroPoints", 100);
		_ignorePlayerAttacks = actor.getParameter("ignorePlayerAttacks", true);
	}

	@[member='override']
	protected boolean thinkActive()
	{
		NpcInstance actor = getActor();

		if (actor.isDead())
			return false;

		for (NpcInstance npc : actor.getAroundNpc(_checkRange, 500))
			if (ArrayUtils.contains(_targets, npc.getNpcId()))
			{
				if (actor.isImmobilized() && !actor.isInRange(npc, (long) (actor.getPhysicalAttackRange() + npc.getColRadius())))
					continue;

				actor.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, npc, Rnd.get(_aggroPoints, _aggroPoints * 2));
			}

		return super.thinkActive();
	}

	@[member='override']
	protected void onEvtAttacked(Creature attacker, int damage)
	{
		if (attacker == null || (attacker.isPlayable() && _ignorePlayerAttacks))
			return;

		super.onEvtAttacked(attacker, damage);
	}

	@[member='override']
	public int getMaxAttackTimeout()
	{
		return 0;
	}

	@[member='override']
	protected boolean maybeMoveToHome()
	{
		NpcInstance actor = getActor();

		Location pos = Location.findPointToStay(actor, actor.getSpawnedLoc(), 0, NpcConfig.MAX_DRIFT_RANGE);

		if (!actor.moveToLocation(pos.x, pos.y, pos.z, 0, true) || !actor.isInRangeZ(actor.getSpawnedLoc(), _checkRange))
			teleportHome();
		else
			actor.setWalking();

		return true;
	}

	@[member='override']
	protected boolean randomWalk()
	{
		return false;
	}
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример, для овера

package ai;

import org.apache.commons.lang3.ArrayUtils;

import l2p.commons.util.Rnd;
import l2p.gameserver.ai.CtrlEvent;
import l2p.gameserver.ai.Fighter;
import l2p.gameserver.config.NpcConfig;
import l2p.gameserver.model.Creature;
import l2p.gameserver.model.instances.NpcInstance;
import l2p.gameserver.utils.Location;

/**
 * @[member='Authority'] Gaikotsu
 */
public class MonsterAttacker extends Fighter
{
	private final int[] _targets;
	private final int _checkRange;
	private final int _aggroPoints;
	private final boolean _ignorePlayerAttacks;

	public MonsterAttacker(NpcInstance actor)
	{
		super(actor);

		_targets = actor.getParameter("targets", new int[0]);
		_checkRange = actor.getParameter("checkRange", 2000);
		_aggroPoints = actor.getParameter("aggroPoints", 100);
		_ignorePlayerAttacks = actor.getParameter("ignorePlayerAttacks", true);
	}

	@[member='override']
	protected boolean thinkActive()
	{
		NpcInstance actor = getActor();

		if (actor.isDead())
			return false;

		for (NpcInstance npc : actor.getAroundNpc(_checkRange, 500))
			if (ArrayUtils.contains(_targets, npc.getNpcId()))
			{
				if (actor.isImmobilized() && !actor.isInRange(npc, (long) (actor.getPhysicalAttackRange() + npc.getColRadius())))
					continue;

				actor.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, npc, Rnd.get(_aggroPoints, _aggroPoints * 2));
			}

		return super.thinkActive();
	}

	@[member='override']
	protected void onEvtAttacked(Creature attacker, int damage)
	{
		if (attacker == null || (attacker.isPlayable() && _ignorePlayerAttacks))
			return;

		super.onEvtAttacked(attacker, damage);
	}

	@[member='override']
	public int getMaxAttackTimeout()
	{
		return 0;
	}

	@[member='override']
	protected boolean maybeMoveToHome()
	{
		NpcInstance actor = getActor();

		Location pos = Location.findPointToStay(actor, actor.getSpawnedLoc(), 0, NpcConfig.MAX_DRIFT_RANGE);

		if (!actor.moveToLocation(pos.x, pos.y, pos.z, 0, true) || !actor.isInRangeZ(actor.getSpawnedLoc(), _checkRange))
			teleportHome();
		else
			actor.setWalking();

		return true;
	}

	@[member='override']
	protected boolean randomWalk()
	{
		return false;
	}
}

в acis нету такого класса как fighter, и соответственно методов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в acis нету такого класса как fighter, и соответственно методов.

А в чем проблема адаптировать скрипт под другую сборку? Алгоритмы те же. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в чем проблема адаптировать скрипт под другую сборку? Алгоритмы те же. 

проблема в том что я выше написал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проблема в том что я выше написал.

На другой поменять можно, либо создать новый.

Сам скрипт по сути не сложный. Проблем с 0 даже написать его - нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На другой поменять можно, либо создать новый.

Сам скрипт по сути не сложный. Проблем с 0 даже написать его - нет.

ты смотрел вообше как в акисах или нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ты смотрел вообше как в акисах или нет?

Там какая-то уникальная ява стоит? 

Разницы нету что за сборка, этот скрипт можно адаптировать под любую сборку, если есть хотя бы базовые знания в яве. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там какая-то уникальная ява стоит? 

Разницы нету что за сборка, этот скрипт можно адаптировать под любую сборку, если есть хотя бы базовые знания в яве. 

там работает по событиях. вот какое событие происходит когда моб к мобу подходит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

там работает по событиях. вот какое событие происходит когда моб к мобу подходит?

Не думаю что чтобы внедрить этот скрипт нужно править события.

Есть методы doAttack (thinkAttack), которые обычно находятся у АИ мобов.

Их и надо использовать для реализации этой фикчи. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не думаю что чтобы внедрить этот скрипт нужно править события.

Есть методы doAttack (thinkAttack), которые обычно находятся у АИ мобов.

Их и надо использовать для реализации этой фикчи. 

L2AttacableAI вот класс который наследуется. там нету такого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

L2AttacableAI вот класс который наследуется. там нету такого.

Где там?

Нужно адаптировать этот скрипт под другую сборку!

Алгоритм тот же остается, просто нужно переименовать названия методов\классов и всё. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где там?

Нужно адаптировать этот скрипт под другую сборку!

Алгоритм тот же остается, просто нужно переименовать названия методов\классов и всё. 

кароч все с тобой понятно. "говорить не мешки воротить".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кароч все с тобой понятно. "говорить не мешки воротить".

Я адаптировал кб, ботов и другие скрипты, не думаю, что тут уникальный случай. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я адаптировал кб, ботов и другие скрипты, не думаю, что тут уникальный случай. 

я тоже много чего делал. но тут не так все просто.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я тоже много чего делал. но тут не так все просто.

Все крайне легко и банально. При наличии серого вещества в голове. Не можете сделать сами? В чем вопрос, платите бабки вам сделают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...