Баф, и гнев шиид - Страница 2 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 08.03.2011, 16:43   #11
Аватар для Gaikotsu
Герой

По умолчанию Re: Баф, и гнев шиид

немного топорно, но вполне работающе:
Код:
package ai;

import l2p.gameserver.ai.Fighter;
import l2p.gameserver.instancemanager.RaidBossSpawnManager;
import l2p.gameserver.instancemanager.RaidBossSpawnManager.Status;
import l2p.gameserver.instancemanager.ZoneManager;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Zone;
import l2p.gameserver.model.L2Zone.ZoneType;
import l2p.gameserver.model.instances.L2NpcInstance;

public class StakatoQueen extends Fighter
{
	private final static int _playerDebuffZone = 708008;
	private final static int _npcBuffZone = 708009;
	private final static int _playerBuffZone = 708010;
	private static boolean _zoneDisabled = false;

	public StakatoQueen(L2Character actor)
	{
		super(actor);
	}

	@Override
	public boolean isGlobalAI()
	{
		return true;
	}

	@Override
	protected boolean thinkActive()
	{
		L2NpcInstance actor = getActor();

		if(actor == null || actor.isDead())
			return true;

		if (!_zoneDisabled && RaidBossSpawnManager.getInstance().getRaidBossStatusId(actor.getNpcId()) == Status.ALIVE)
		{
			switchZone(false, _playerBuffZone);
			switchZone(true, _playerDebuffZone);
			switchZone(true, _npcBuffZone);
		}
		return super.thinkActive();
	}
	
	@Override
	protected void onEvtDead(L2Character killer)
	{
		switchZone(true, _playerBuffZone);
		switchZone(false, _playerDebuffZone);
		switchZone(false, _npcBuffZone);
		super.onEvtDead(killer);
	}
	
	private void switchZone(boolean zoneMode, int zoneId)
	{
		L2Zone _zone = ZoneManager.getInstance().getZoneById(ZoneType.buff_skill, zoneId, false);
		if(_zone != null && _zone.isActive() != zoneMode)
		{
			_zone.setActive(zoneMode);
			if (zoneId == _playerBuffZone)
				_zoneDisabled = !zoneMode;
		}
	}
}
З.Ы. описания зон и скиллов в них не привожу - это сделать самому раз плюнуть.
Gaikotsu вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 09.03.2011, 00:10   #12
Аватар для ANZO
Разработчик BDO Emu

По умолчанию Re: Баф, и гнев шиид

Цитата:
Сообщение от Gaikotsu Посмотреть сообщение
немного топорно, но вполне работающе:
З.Ы. описания зон и скиллов в них не привожу - это сделать самому раз плюнуть.
Не мешало бы событие onSpawn Королевы добавить на свитч зоны
А все вижу, по другому малость у вас) Но тоже вариант
ANZO вне форума Отправить сообщение для ANZO с помощью ICQ Отправить сообщение для ANZO с помощью Skype™ Ответить с цитированием
Непрочитано 09.03.2011, 06:36   #13
Аватар для bloodshed
Герой

По умолчанию Re: Баф, и гнев шиид

зачем плодить кучу AI? есть ведь RaidBossSpawnManager, там и переключать зоны
__________________
bloodshed вне форума Отправить сообщение для bloodshed с помощью ICQ Отправить сообщение для bloodshed с помощью Skype™ Ответить с цитированием
Непрочитано 09.03.2011, 13:36   #14
Аватар для Gaikotsu
Герой

По умолчанию Re: Баф, и гнев шиид

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

а после работы с PTS сотня-другая отдельных AI меня не пугает - в PTS для каждого моба было персональное AI, не считая еще и родительских - вот там то была та еще жуть.
Gaikotsu вне форума Ответить с цитированием
Непрочитано 09.03.2011, 14:04   #15
Аватар для ANZO
Разработчик BDO Emu

По умолчанию Re: Баф, и гнев шиид

Вот про аи птс верно заметил) тем паче - какая разница сколько аи? главная задача не сожрать больше памяти,чем реально для реализации нужно.
ANZO вне форума Отправить сообщение для ANZO с помощью ICQ Отправить сообщение для ANZO с помощью Skype™ Ответить с цитированием
Непрочитано 09.03.2011, 14:34   #16
Аватар для bloodshed
Герой

По умолчанию Re: Баф, и гнев шиид

Цитата:
Сообщение от Gaikotsu Посмотреть сообщение
PTS для каждого моба было персональное AI
к этому и стремишься?)
__________________
bloodshed вне форума Отправить сообщение для bloodshed с помощью ICQ Отправить сообщение для bloodshed с помощью Skype™ Ответить с цитированием
Непрочитано 09.03.2011, 14:36   #17
Аватар для Gaikotsu
Герой

По умолчанию Re: Баф, и гнев шиид

упаси боже

но зачем усложнять базовые классы, пихая туда частные случаи, нужные для одного моба, если проще и быстрее просто сделать отдельный маленький класс именно для этого моба.
Gaikotsu вне форума Ответить с цитированием
Непрочитано 09.03.2011, 15:17   #18
Аватар для bloodshed
Герой

По умолчанию Re: Баф, и гнев шиид

Цитата:
Сообщение от Gaikotsu Посмотреть сообщение
упаси боже

но зачем усложнять базовые классы, пихая туда частные случаи, нужные для одного моба, если проще и быстрее просто сделать отдельный маленький класс именно для этого моба.
всё относительно.
мне было проще написать пару строк именно там.
__________________
bloodshed вне форума Отправить сообщение для bloodshed с помощью ICQ Отправить сообщение для bloodshed с помощью Skype™ Ответить с цитированием
Непрочитано 10.03.2011, 10:31   #19
Аватар для krisadr
Пользователь

Автор темы (Топик Стартер) Re: Баф, и гнев шиид

а что разве нету что-то вроде
if player.inzone.zoneid == 15(допустим) в лыже?

Добавлено через 1 час 5 минут
Код:
	private static final int Center_Nest_X = 85396;
	private static final int Center_Nest_Y = -50068;
	private static final int Center_Nest_Z = -5133;
	private static final int Radius = 20000;
константы

Код:
	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
	{
		int x = player.getX();
		int y = player.getY();
		int z = player.getZ();
		if (((x > Center_Nest_X - Radius ) && (x < Center_Nest_X + Radius )) 
			&& ((y > Center_Nest_Y - Radius ) && (y < Center_Nest_Y + Radius ))
			&& ((z > Center_Nest_Z - Radius ) && (z < Center_Nest_Z + Radius )))
		{
			if (RaidBossSpawnManager.getInstance().getRaidBossStatusId(_stakato_mobs[25]) == StatusEnum.ALIVE)
			{
				player.getFirstEffect(6169);
			}
			else
				player.getFirstEffect(6171);
		}
		return super.onAdvEvent(event, npc, player);
	}
Собственно часть кода, пахать не пашет, может мне это вставить нада в другой класс а не в onAdvEvent() просто незнаю куда его вставить и по логике квестов решил именно сюда...)

Последний раз редактировалось krisadr; 10.03.2011 в 11:38. Причина: Добавлено сообщение
krisadr вне форума Ответить с цитированием
Непрочитано 10.03.2011, 14:07   #20
Аватар для Gaikotsu
Герой

По умолчанию Re: Баф, и гнев шиид

не знаю реализуемо ли в лыже, но еще можно повесить listener'ы входа/выхода на зону stakato nest и в них обрабатывать все.

Добавлено через 2 минуты
Цитата:
Сообщение от krisadr Посмотреть сообщение
а что разве нету что-то вроде
if player.inzone.zoneid == 15(допустим) в лыже?

Добавлено через 1 час 5 минут
Код:
	private static final int Center_Nest_X = 85396;
	private static final int Center_Nest_Y = -50068;
	private static final int Center_Nest_Z = -5133;
	private static final int Radius = 20000;
константы

Код:
	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
	{
		int x = player.getX();
		int y = player.getY();
		int z = player.getZ();
		if (((x > Center_Nest_X - Radius ) && (x < Center_Nest_X + Radius )) 
			&& ((y > Center_Nest_Y - Radius ) && (y < Center_Nest_Y + Radius ))
			&& ((z > Center_Nest_Z - Radius ) && (z < Center_Nest_Z + Radius )))
		{
			if (RaidBossSpawnManager.getInstance().getRaidBossStatusId(_stakato_mobs[25]) == StatusEnum.ALIVE)
			{
				player.getFirstEffect(6169);
			}
			else
				player.getFirstEffect(6171);
		}
		return super.onAdvEvent(event, npc, player);
	}
Собственно часть кода, пахать не пашет, может мне это вставить нада в другой класс а не в onAdvEvent() просто незнаю куда его вставить и по логике квестов решил именно сюда...)
один вопрос, зачем ты и 6169 и 6171 вешаешь на игроков - это одинаковые баффы вобще-то. просто 6169 вешается на мобов, когда босс жив, а на игроков в это время вешается 6170, который ничего не делает, а просто является индикатором.

Последний раз редактировалось Gaikotsu; 10.03.2011 в 14:10. Причина: Добавлено сообщение
Gaikotsu вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 04:55. Часовой пояс GMT +3.

Вверх