Ru-MaNGOS

Вернуться   Ru-MaNGOS > Дополнения > Скрипты

Важная информация

Скрипты ScriptDev2

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.10.2011, 15:46   #1
ExDragon
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
ExDragon На верном пути
По умолчанию ВойдЗона

Как создать войд(АОЕ) зону...
пс расскажите полный цикл создания..
Например зона которая имеет определённые координаты и определённый ид типа огонь например..
ExDragon вне форума   Ответить с цитированием
Старый 13.10.2011, 19:37   #2
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

войдзоны - это просто мобы со спец. аурой. что вы хотели о них узнать?
rsa вне форума   Ответить с цитированием
Старый 14.10.2011, 07:37   #3
ExDragon
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
ExDragon На верном пути
По умолчанию

Предположим boss_lord_marrowgarAI вызывает doSummon(NPC_COLD_FLAME, X, Y, Z);

То каким должен быть класс mob_coldflameAI
чтобы он создал огонь и держал его некоторое время.. а потом уничтожался.. и при этом у него была аура этой самой войдзоны...
ExDragon вне форума   Ответить с цитированием
Старый 14.10.2011, 09:51   #4
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от ExDragon Посмотреть сообщение
Предположим boss_lord_marrowgarAI вызывает doSummon(NPC_COLD_FLAME, X, Y, Z);

То каким должен быть класс mob_coldflameAI
чтобы он создал огонь и держал его некоторое время.. а потом уничтожался.. и при этом у него была аура этой самой войдзоны...
вообще-то мой код ICC опубликован полтора года назад и там именно это есть. из него уже только ленивый свою версию не сделал... TC вон довольно неплохо допилили. скоро некоторые мангосдевы перебьют с BSW на тупые SD2 таймеры и объявят результат великой победой SD2 team ))
Однако лучший пример войдзон - это именно войдзоны из моего же кода RS, тоже полуторагодичной давности (спеллы 74562 и 74792 со всей обвеской). coldflame - довольно специфический моб, он кроме стандартных фич войдзоны еще много чего должен уметь.
rsa вне форума   Ответить с цитированием
Старый 14.10.2011, 14:33   #5
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от rsa Посмотреть сообщение
вообще-то мой код ICC опубликован полтора года назад и там именно это есть. из него уже только ленивый свою версию не сделал... TC вон довольно неплохо допилили. скоро некоторые мангосдевы перебьют с BSW на тупые SD2 таймеры и объявят результат великой победой SD2 team ))
Однако лучший пример войдзон - это именно войдзоны из моего же кода RS, тоже полуторагодичной давности (спеллы 74562 и 74792 со всей обвеской). coldflame - довольно специфический моб, он кроме стандартных фич войдзоны еще много чего должен уметь.
Как смешно... Там помимо таймеров, можно все скрипты на помойку целиком выкинуть. Если кто то реализовывает не думайте, что он берет все от вас.

По теме:
Все очень просто. Берем создает скрипт на невидимого нпц и в Reset() прописываем ему каст ауры, с определенным радиусом действия и дамагом.
Код:
struct MANGOS_DLL_DECL npc_void_stalkerAI : public ScriptedAI
{
    npc_void_stalkerAI(Creature* pCreature) : ScriptedAI(pCreature)
    {
        Reset();
    }

    void Reset()
    {
        m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
        m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
        m_creature->SetRespawnDelay(DAY);
        DoCastSpellIfCan(m_creature, SPELL_VOID_AURA);
    }

    void AttackStart(Unit* pVictim) {}

    void EnterEvadeMode() {}

    void UpdateAI(const uint32 uiDiff) {}
};
MaxXx2021 вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
ExDragon (14.10.2011)
Старый 14.10.2011, 15:37   #6
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

MaxXx2021, то, что вы описали, тоже можно сделать через EventAI.
Vinolentus вне форума   Ответить с цитированием
Старый 14.10.2011, 16:03   #7
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от Vinolentus Посмотреть сообщение
MaxXx2021, то, что вы описали, тоже можно сделать через EventAI.
Можно, я просто уже не помню как делать эвент аи скрипты
MaxXx2021 вне форума   Ответить с цитированием
Старый 14.10.2011, 16:34   #8
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

Зря. Их практически не надо поддерживать. А еще они более-менее верифицируемы. Хотя мы не можем гарантировать, что они работают так, как задумывал автор, мы можем быть уверены в том, что в процессе выполнения скрипта не возникнет нештатной ситуации.
Vinolentus вне форума   Ответить с цитированием
Старый 14.10.2011, 18:50   #9
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Vinolentus Посмотреть сообщение
Зря. Их практически не надо поддерживать. А еще они более-менее верифицируемы.
Кстати да. Одна из наиболее серьезных причин, по которой я бросил писать скрипты, именно в этом - написание скриптов в SD2 уже атавизм. Все можно (и нужно) делать через EventAI. Спеллы правда придется не хакать скриптом, а чинить в яде, но это правильный путь... Последняя мешавшая полному перегону скриптов в EventAI проблема - отсутствие поддержки энкаунтеров в чистом ядре - недавно решена Laise (пусть и не полностью, но для такого - вполне достаточно).
rsa вне форума   Ответить с цитированием
Старый 14.10.2011, 19:35   #10
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от rsa Посмотреть сообщение
Кстати да. Одна из наиболее серьезных причин, по которой я бросил писать скрипты, именно в этом - написание скриптов в SD2 уже атавизм. Все можно (и нужно) делать через EventAI. Спеллы правда придется не хакать скриптом, а чинить в яде, но это правильный путь... Последняя мешавшая полному перегону скриптов в EventAI проблема - отсутствие поддержки энкаунтеров в чистом ядре - недавно решена Laise (пусть и не полностью, но для такого - вполне достаточно).
Это какой функционал ЭвентАИ нужен что бы реализовать Сияние Рассвета, Залы Отражений, Воздушный Бой и тд? Молчу про Катаклизм...
MaxXx2021 вне форума   Ответить с цитированием
Старый 15.10.2011, 08:16   #11
ExDragon
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
ExDragon На верном пути
По умолчанию

Код:
void ColdFlamePath(Unit* pTarget)
	{
		int Ply;
		float StartX, StartY, EndX, EndY, AllZ, vStart, vEnd, uX, uY;
		
		// Координаты босса
		StartX = m_creature->GetPositionX();
		StartY = m_creature->GetPositionY();
		// Координаты цели
		EndX = pTarget->GetPositionX();
		EndY = pTarget->GetPositionY();
		// Общая поаерхность
		AllZ = m_creature->GetPositionZ();
		// Вектор
		vStart = StartX - EndX;
		vEnd = StartY - EndY;

		// Число витков
		Ply = sqrt(pow(vStart, 2) + pow(vEnd, 2)) / 8;

		for (int i = 0; i < Ply; i++)
		{
			uX = StartX - vStart / Ply * i;
			uY = StartY - vEnd / Ply * i;

			doSummon(NPC_COLD_FLAME, uX, uY, AllZ);
		}
	}
Я сделал такою вот функцию.. она вообщем прокладывает путь для огня (если кто играл на оффе то видел что там огонь идёт до игрока) но это функция очень быстрая она мгновенна прокладывает.. а мне хочется чтобы она постепенна вызывала как бы с задержкой.. подскажите как это можно сделать..

Последний раз редактировалось ExDragon; 15.10.2011 в 08:19.
ExDragon вне форума   Ответить с цитированием
Старый 15.10.2011, 11:32   #12
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от ExDragon Посмотреть сообщение
Код:
void ColdFlamePath(Unit* pTarget)
	{
		int Ply;
		float StartX, StartY, EndX, EndY, AllZ, vStart, vEnd, uX, uY;
		
		// Координаты босса
		StartX = m_creature->GetPositionX();
		StartY = m_creature->GetPositionY();
		// Координаты цели
		EndX = pTarget->GetPositionX();
		EndY = pTarget->GetPositionY();
		// Общая поаерхность
		AllZ = m_creature->GetPositionZ();
		// Вектор
		vStart = StartX - EndX;
		vEnd = StartY - EndY;

		// Число витков
		Ply = sqrt(pow(vStart, 2) + pow(vEnd, 2)) / 8;

		for (int i = 0; i < Ply; i++)
		{
			uX = StartX - vStart / Ply * i;
			uY = StartY - vEnd / Ply * i;

			doSummon(NPC_COLD_FLAME, uX, uY, AllZ);
		}
	}
Я сделал такою вот функцию.. она вообщем прокладывает путь для огня (если кто играл на оффе то видел что там огонь идёт до игрока) но это функция очень быстрая она мгновенна прокладывает.. а мне хочется чтобы она постепенна вызывала как бы с задержкой.. подскажите как это можно сделать..
Это садомазахисткий хак... Берем суммоним одного нпц NPC_COLD_FLAME и заставляем двигаться его под углом к игроку на определенное расстояние. Там PersistentAura.
MaxXx2021 вне форума   Ответить с цитированием
Старый 15.10.2011, 11:51   #13
ExDragon
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
ExDragon На верном пути
По умолчанию

и получится что огонёк бежит к игроку.. а мне нужна полоса огня..
ExDragon вне форума   Ответить с цитированием
Старый 15.10.2011, 11:54   #14
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от ExDragon Посмотреть сообщение
и получится что огонёк бежит к игроку.. а мне нужна полоса огня..
Там персистент аура . Аура оставляющая динамический обьект и дамаг с огнем вокруг него. У огня лорда марровгара нет визульной формы он просто бежит и оставляет каждые 0.2с на своем месте динамический обьект.
Код:
void Reset()
{
    m_creature->CastSpell(m_creature, SPELL_COLD_FLAME_AURA, false);
    m_creature->GetMotionMaster()->MovePoint(0, X, Y, Z);
}
Код:
    SPELL_COLD_FLAME_AURA                   = 69145,
этого достаточно чтобы были постепенно нарастающие полосы. Только вам как минимум придется два спелла в ядре починить.

Последний раз редактировалось MaxXx2021; 15.10.2011 в 12:02.
MaxXx2021 вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
ExDragon (15.10.2011), Vladimir (18.10.2011)
Старый 15.10.2011, 12:10   #15
ExDragon
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
ExDragon На верном пути
По умолчанию

А где спеллы в ядре?..
ExDragon вне форума   Ответить с цитированием
Старый 15.10.2011, 12:24   #16
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от ExDragon Посмотреть сообщение
А где спеллы в ядре?..
да, http://github.com/bwsrv/mangos/commits/master можете тут поискать эти спеллы, я их уже правил.
MaxXx2021 вне форума   Ответить с цитированием
Старый 15.10.2011, 12:31   #17
ExDragon
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
ExDragon На верном пути
По умолчанию

ExDragon вне форума   Ответить с цитированием
Ответ


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

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



Текущее время: 12:43. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot