Если вы хотели бы использовать в своей карте нестандартное, оригинальное заклинание или наработку, но у вас не хватает знаний для реализации, то эта тема специально для вас. В данной теме вы можете, в определённом правилами формате, оставить заявку на создание необходимого вам заклинания или системы.
Если вы считаете, что у вас есть возможность выполнить какую-либо из имеющихся заявок, то вы можете оставить сообщение в определённом правилами формате, в котором указать какую из заявок собираетесь исполнить.

Правила темы

  • Запрещается дублирование заявок.
  • Любая заявка, написанная непонятным языком (обилие орфографических ошибок, орфоарт, отсутствие знаков препинания, использование рядов восклицательных и вопросительных знаков) будет удалена.
  • Обсуждение технических нюансов исполнения спелла или багов просьба вести через систему личных сообщений.
  • Для составления заявок используйте формы.
Заявки, не удовлетворяющие правилам, будут удалены !

Как составить заявку

Необходимо, используя форму составить сообщение в данной теме, где указать:
  • Желаемое название заказа
  • Желаемый метод исполнения (GUI/Jass/cJass/vJass)
  • Требуется ли возможность использовать спелл несколькими юнитами одновременно (MUI)
  • Цель применения способности
  • Количество уровней
  • Описание (Смысловое, а не художественное)
  • Технические характеристики (кол-во маны, параметры урона, перезарядки, время действия и т.п.) для каждого из уровней
Форма для составления заявки
# Заказ
**Название:** Название способности (или системы)
**Метод:** GUI/Jass/cJass/vJass/lua/angelscript
**MUI:** Обязательно/Не обязательно
**Цели:** Другой юнит / Сам юнит / Точка/ Область/Нет цели/Прочее (указать что именно)
**Количество уровней:** Целое число
**Описание:** Ваше описание. Можно слить со следующим.
**Технические характеристики:** Ваше описание. Можно слить с предыдущим.

Как принимать заказ

Необходимо, используя форму составить сообщение в данной теме, где указать:
  • Никнейм заказчика
  • Название выбранного вами заказа
  • Примерные сроки исполнения (конечно, их соблюдение не критично, но желательно)
Форма для принятия заявки
# Заказ принят
**Заказчик:** Никнейм заказчика
**Заказ:** Название способности/алгоритма
((центр
**Спелл будет завершен к [дата в формате дд.мм.гггг. без скобок]**
))
[ дата принятия заявки в формате дд.мм.гггг / дата, к которой спелл предположительно будет готов в формате дд.мм.гггг ]

Как сообщить о не/выполнении заказа

Необходимо, используя форму составить сообщение в данной теме, где указать:
  • Никнейм заказчика
  • Название выбранного вами заказа
  • Выполнен ли заказ
  • В случае, если заказ невыполним/не выполнен полностью, рекомендуется описать, что именно вам удалось/не удалось сделать.

  • Предоставить карту
Форма для не/выполненного заказа
Заклинание готово! [Если заказ выполнен успешно] / Не удалось выполнить заклинание [Если по каким-либо причинам вы не способны его выполнить] (1 из 2)
=
Заказчик: Никнейм заказчика
Заказ: Название способности
Выполнено: Да/Нет
-
[Сюда добавить инструкцию по импорту, или описать что у вас не/получилось, если не удалось выполнить заказ]
За качественно выполненный заказ вы получите дополнительно 200 единиц опыта.

Дополнительно: как приобрести спелл, не прибегая к этой теме

0. Пройдитесь по базе способностей xgm.guru/p/wc3/tag/ability или алгоритмов xgm.guru/p/wc3/tag/algorithm
A. Для начала загляните в Архив готовых спеллов. Возможно, спелл, аналогичный вашему, уже был сделан.
B. Проверьте, нет-ли нужного спелла в Библиотеке заклинаний. Проверенные спелл-мейкеры изготавливали заклинания специально для общественного использования.
C. Поищите общедоступные для открытия карты - там тоже бывают полезные вещи.
D. Если ничего не помогает, пройдитесь поиском по Академии - вероятно, что такие спеллы уже пытались делать и спрашивали как.
E. Если поиски не помогли, попробуй сделать его сам:
  • Осваиваем триггеры в Базе статей, F.A.Q., если не имеем понятия о них.
  • Существуют специальные статьи по созданию спеллов и баффов: 1, 2, 3, 4, 5
  • Поскольку ваши спеллы будут неоптимизированы, и более того, с кучей утечек - настоятельно рекомендуется читать статьи\темы про JASS. Тяжело читать? Легко делать!
  • Если ну никак не выходит сделать то что требуется, заходим в Академию и используем ее по основному назначению - задаем вопросы.

Разумные поиски и тщательное изучение помогут вам добиться результата.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
2
Desgul:
Sexua1:

Готово

Название: Астральный Удар
Метод: GUI/Jass
MUI: Да, эту способность будут юзать еще 5 игроков
Цель: Область
Количество уровней: 3
Версия 1.26-1.27
Технические характеристики: Выбирая область 250\300\350, и используя способность по ней, все вражеские (только вражеские) войска помещаются в астрал на 10\20\30 сек. Грубо говоря стандартный астрал, только по области и только на врагов. Желательно без утечек...
Спасибо! Скажи, а почему на основе канала?
Мне нужно чтоб ИИ мог кастовать этот спелл. Могу ли я поменять канал, скажем на огненный дождь, что измениться? Почему именно канал?
15
Sexua1, Можешь поменять, только эффекты огня убрать
10

Заказ

Название: Небесная звезда
Метод: GUI или Jass, главное как можно меньше утечек
MUI: Не обязательно
Цель: Точка
Количество уровней: 1
Версия игры для 1.26, хотя если там никак такое нельзя, а на 1.32 можно, то лучше на нем(на самом последнем лицушном)
Описание: При касте в точке "цель способности" создается даммик, он начинает каждые 0.01секунды подниматься в высоте(+5 постоянно) и в области вокруг себя(300+постоянное увеличение на 10) создавать рандомно огромные глыбы размером примерно с мост(рандомный размер), по которым можно ходить и текстура пути такая, что юниты которые ниже глыбы не могут на нее взобраться, а те что выше, могут на нее упасть, и притягивает эти глыбы к себе(скорость +5 в сторону даммика) и соответственно глыбы поднимаются в высоте к нему. И вот тут интересно, как это сделать получится, постоянное создание декорации и удаление прошлой путем GetLocationXYZ, а также как юниты будут ходить по ним, сделав им высоту как у глыбы? Продолжительность спелла 20 секунд.
Технические характеристики: Прочие нюансы сам сделаю
32
Lotus101, ты хождение как не крути не сделаешь, варкравт этажи не поддерживает, кстати я как то видел этот аниме спелл, если юзать невидимые платформы, ты сможешь ходить по ним туда\сюда, как по обычным мостам или подьемам.
Это типа из земли вырываются куски и летят в небо, склеиваясь в шар?
Ну максимум что можно - это поднимать невидимые платформы под глыбами, чтоюы юниты на них могли сидеть, но запретить им ходить ты не сможешь, плоскость по которой можно ходить в игре одна. Можно заморочится и сделать кастомную систему передвижения - но это слишком сложно и ресурсоемко.
22
quq_CCCP, но есть же платформа который поднимается и отпускаетсся через анимацией
23

Заказ

Название: Истощение маны
Метод: GUI/Lua
MUI: Обязательно
Цель: Все юниты на карте
Количество уровней: 1
Описание: Любой юнит размещенный на карте получает определенный дебаф если его количество маны достигает отметки в 20% от максимума, в тоже время юниты имеющие определенную пасивку не подвержены этому эффекту.
Технические характеристики: Возможность изменить дебаф/пасивку в коде. Комментарии конечно не помешают, и желательно ко всему коду(самому интересно как это работает).
33
Araders, могу помочь, так как увидел Lua, но пока не могу понять реализацию до конца. Событие "мана становиться меньше", не хочется как-то использовать по причине того что, аналогиченое событие на отслеживание хп у меня весьма часто крашило, а перебирать всех юнитов на карте раз в секунду, это тоже тяжело, если юнитов будет слишком много, вот я и хз как это реализовать то...
23
Bergi_Bear, через наличие пасиной способности или чего-то подобного будет проще?

Я имею в виду что в самом крайнем случаи можно обойтись только определенным видом войск. Я конечно предполагал что возможно это будет большая нагрузка на систему, но не мне говорить на что сейчас способен модмейкинг варкрафта.
33
через наличие пасиной способности или чего-то подобного будет проще?
и фиг нужно 2 события получить: мана стала меньше и мана стала больше, а на это ничего нового не завозили, всё так же, хоть на 126 делай, или тебе принципиально увидеть как это на луа?
23
Bergi_Bear, если не сложно можешь скинуть. Общую проблему я понял.
33
Araders, Может конечно чего-то забыл, но вроде работает
---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by Bergi.
--- DateTime: 26.07.2020 11:40
---
do
	--Инициализация
	TimerStart(CreateTimer(), 0.1, false, function()
		perebor = CreateGroup() --глобальная группа для перебора всех юнитов 1 единственная на всю игру, больше групп не надо
		InitManaLoosing()-- чтобы не подгрёб сбощик мусора и + у меня дебаггер прикручен к таймерам и + можно делать отложенный старт системы
	end)
end

ManaLoosingTable = {} --глобальная таблица, аналог хеша, сделана отдельной для изолированности наработки
DeBuffID = FourCC("A000") -- можно сделать на основе ауры замедления торнадо
DeBuffID2 = FourCC("B000") -- бафф иконки ауры торнадо
ImmuneID = FourCC("A001") -- Бафф иммунитет
Porog=0.2 -- пороговое значение для срабатывания дебафа - 20%%


function InitManaLoosing()
	-- Для юнитов изначально стоящих на карте
	TrigLESSEQUAL = CreateTrigger() -- триггер для потери маны меньше 20%%
	TrigGREATERTHAN = CreateTrigger() -- возврата маны

	local NewEntireOnMap = CreateTrigger() -- триггер проверки новых юнитов, созданных триггерно или суммом, ну или просто любых, которых не захватила инициализация карты
	TriggerRegisterEnterRectSimple(NewEntireOnMap, bj_mapInitialPlayableArea)
	TriggerAddAction(NewEntireOnMap, function()
		local EntireUnit = GetTriggerUnit()
		ChkUnitForManaDeBuffSystem(EntireUnit) -- ChkUnitForManaDeBuffSystem проверка и добавление юнита
	end)

	local e = nil
	GroupEnumUnitsInRect(perebor, bj_mapInitialPlayableArea, nil) -- перебор всех юнитов стоящих на карте заранее
	while true do
		e = FirstOfGroup(perebor)
		if e == nil then
			break
		end
		ChkUnitForManaDeBuffSystem(e) -- и добавление им события для проверки маны
		GroupRemoveUnit(perebor, e)
	end
	-- Триггеры проверки маны
	TriggerAddAction(TrigLESSEQUAL, function()
		local hero = GetTriggerUnit()
		UnitAddAbility(hero, DeBuffID)
		print(GetUnitName(hero) .. " значение маны упало ниже 20%%, добавляем наш дебафф")
	end)

	TriggerAddAction(TrigGREATERTHAN, function()
		local hero = GetTriggerUnit()
		if GetUnitAbilityLevel(hero, DeBuffID) > 0 then
			print(GetUnitName(hero) .. " значение маны восстановилось, удаляем дебафы")
			UnitRemoveAbility(hero, DeBuffID)
			UnitRemoveAbility(hero, DeBuffID2)
		else
			print(" Система дебафа еще не настроена, но событие удаления дебафа отработало корректно")
		end
	end)
end

function ChkUnitForManaDeBuffSystem(e) -- а вот и событие наше
	if UnitAlive(e) and not IsUnitType(e, UNIT_TYPE_STRUCTURE) and BlzGetUnitMaxMana(e) > 1 and GetUnitAbilityLevel(e, ImmuneID) == 0 then
		-- условия кому давать или не давать дебафф
		local percent = BlzGetUnitMaxMana(e) * Porog
		print("добавление событий для отлова падения или восстановления маны юнита " .. GetUnitName(e) .. " пороговое значение " .. percent)
		TriggerRegisterUnitManaEvent(TrigLESSEQUAL, e, LESS_THAN_OR_EQUAL, percent)
		TriggerRegisterUnitManaEvent(TrigGREATERTHAN, e, GREATER_THAN_OR_EQUAL, percent) --лучше написать просто  GREATER_THAN, надо проверять
	end
end

Карты нет, так как я не пользуюсь WE, но на дебагах отработало корректно

Вот это всё копируешь в отдельный блок себе, настраиваешь ID баффов, для первого теста даже не обязательно и работает вместе с ГУИ

Есть нюанс, пока не придумал как решить, плохо будет работать для героев, у которых будет расти мана с уровнем, ибо значение задаётся 1 раз в самом начале игры, кароче я уже пожалел, что так сделал, придётся всё заменить на периодическую проверку процента маны, а это уже попробуй сам =)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.