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

Правила темы

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

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

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

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

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

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

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

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

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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
5
7 лет назад
0
datar1231, ClotPh:
^ Заказ выше это вот из вопроса xgm.guru/p/wc3/191810#lastpost .
Ятп, что нужно было, чтобы после смерти цели стандартной печати преисподней бафф перекидывался на применившего ее, но после внимательного перепрочтения вопроса и того, что написано уже появились некоторые сомнения. Короче, лучше уточнить у заказчика.
Мне только нужно чтобы юнит давался не тому, кто применил скилл, а тому на кого. Например: Пит лорд кинул на рабочего печать, он умирает и дается демон игроку этого рабочего)
0
21
7 лет назад
0
datar1231, да-да, все, вот см. выше. Нужно просто вместо геройской печати сделать пустышку, а при ее применении создавать даммика под контролем того игрока с печатью цель-союзники и кастить им в цель способности.
0
28
7 лет назад
Отредактирован Roy Mustang
0
datar1231:
Название: Печать преисподни
Метод: Любой, главное чтобы можно было изменять.
Mui: Нет
Цель: Существо
Описание: Как и обычная печать, только не тому кто применил заклинание дается существо, а тому на кого. Внизу написано как мне ответили.
Ответ на вопрос
Триггер реагирует на каст печати не от даммика.
Заносишь кастанувшего (юнит А) и цель (юнит Б) в переменные.
Запускаешь таймер.
В таймере периодически проверяешь, жива ли цель, а потом есть ли на ней бафф.
Если цель мертва - создать даммика от игрока-контроллера юнита Б в позиции юнита А, дать ему печать и приказать закастить.
Если цель жива, а баффа на ней уже нет - то сразу рушим таймер нахрен. (Мне так на вопрос ответили) )
просто тригерно меняй владельца после смерти юнита под баффом Печати.
datar1231:
Вот я сделал по быстрому пример
(иногда может глючить - если рядом с целью - находится еще один такой же тип юнита который вызывается )
Загруженные файлы
0
23
7 лет назад
Отредактирован Araders
0

Заказ

Название: Система камеры от первого лица
Метод: GUI/ если Jass то с коментариями.
MUI: Не обязательно
Цель: Нет цели
Количество уровней: Не требуетса
Описание: Настроить камеру так, чтобы она была встроена ровно в голову какого юнита (на ваше усмотрение) и чтобы в системе была настройка высоты камеры в случае использования модели большей высоты; я прикреплю карту там есть похожая система можете использовать.
Вот карта xgm.guru/files/100/123666/comments/351627/nano_tc_sc_sc_destruct...
Загруженные файлы
0
21
7 лет назад
Отредактирован ClotPh
0
Добрый день.
Сможет ли кто-либо выполнить заклинания отсюда?
Если вы НЕ знаете, что такое локальные переменные и хэш-таблица, дальше не читайте!!!
  1. Просто спелл наносит урон в области по врагам, скейлящийся от уровня спелла. Цифры вписывайте какие хотите, просто чтобы была формула фиксированный урон + урон от уровня спелла. Я потом самостоятельно нужные цифры впишу.
  2. Тут, короче, спелл должен реагировать на смерть каждого героя, ЗАПОМИНАТЬ ЕГО В ПЕРЕМЕННУЮ, создавать в его позиции даммика, этот даммик должен взлетать в воздух, подлетать к обладателю пассивки и дальше... фактически исчезать, а на нём крутиться эффект периодического урона врагам вокруг, урон тем больше, чем больше лвл пассивки; а мы помним, что мы погибшего запомнили?... Так вот там таймер должен проверять, не реснулся ли он уже, если реснулся - сбрасываем этот наш триггерный иммолэйшен-эффект сразу и кончаем спелл.
  3. Пассивка должна периодически через таймер считать кол-во всех мертвых героев на карте и регать ману обладателю пассивки по их числу. Опять же, главное, чтобы формула учитывала лвл спелла, а дальше я ее подстрою.
  4. Спелл должен в течение 10 секунд после применения ждать и ежесекундно сиять эффектами на вражеских героях, а потом, если кастер не получил урон > 0, все враждебные ему герои умирают (событие Kill, никакого дамага). Если кастер в течение 10 секунд после каста получит урон > 0, сразу прерывать всё (сияние прекращается, никто не умрёт).
Исполнять только на Jass/vJass!!! GUI даром не надо. Никаких вейтов, только таймеры, хороший MUI код.
Равкоды абил, даммиков, пути моделей ставьте любые!!! Я это все потом поправлю.
МНЕ СДАТЬ ТОЛЬКО КОД, ВСЕ СПЕЛЛЫ РАЗОМ!!! Карту качать не буду. Куда какие куски вставить, чтобы все действовало, поверьте, разберусь :D Мне все равно это под свою систему еще менять. Вам надо просто сделать эти 4 MUI способности, дальше моя забота.
Вообще эффекты для абил эти: xgm.guru/p/heavens-gallery/effect-case?postid=351626#comment24 , но в коде можете прописывать любые call DestroyEffect.
ЗАДАНИЕ НЕ ПРОСТОЕ, но если раньше 16-го не будет в готовом виде - уже и не надо. Займусь, значит, с нуля самостоятельно.
ЕЩЕ РАЗ: МНЕ СДАВАТЬ ВСЕ В ЭТОЙ ТЕМЕ КАК КОД НА JASS, ЕСЛИ БЕРЕТЕСЬ. ИМЕННО В ФОРМАТЕ ТЕКСТОВОГО КОДА. ЛЮБОЙ ДРУГОЙ ФОРМАТ ЖУТКО ВЫБЕСИТ.
Спасибо за внимание.
************************************
Так... Слабаки, богохульники! )))
Короче я, наверное, тогда прямо тут буду выкладывать себе же куски кода и инфу. Почему-то именно так хочется. Другие варианты сильно бесят. Создаю себе фабрику самостоятельно.
*************************************
Прим. - потом просто изи аддить и редактить.
Я покажу, как надо )))
*************************************
Крч, так: равкоды ожидаемых абил получаются такие-то:
A296, A297, A298, A299 базовые
A29A маркер для ульты
A29B маркер для озвучки
Равкод самого U0FV
Эффекты будут названы так: SingerOfDeath1, SingerOfDeath2, SingerOfDeath3, SingerOfDeath4
Коды конкретно спеллов (с использованием мемхака и тады уже нужными равкодами) будут под катами:
ОБЩИЕ КУСКИ КОДА В СИСТЕМУ
****************************************
ПЕРВАЯ ГЕРОЙСКАЯ СПОСОБНОСТЬ - РАВКОД ДОЛЖЕН ВЕЗДЕ СОВПАДАТЬ
function Trig_SingerOfDeathAll_Func002Func001C takes nothing returns boolean
if ( not ( GetLearnedSkillBJ() == 'A296' ) ) then
return false
endif
if ( not ( GetUnitAbilityLevelSwapped('A296', GetTriggerUnit()) == 1 ) ) then
return false
endif
return true
endfunction
ПЕРВАЯ ГЕРОЙСКАЯ СПОСОБНОСТЬ - РАВКОД ДОЛЖЕН ВЕЗДЕ СОВПАДАТЬ - ЗАКРЫТО
ВТОРАЯ ГЕРОЙСКАЯ СПОСОБНОСТЬ - РАВКОД ДОЛЖЕН ВЕЗДЕ СОВПАДАТЬ
function Trig_SingerOfDeathAll_Func002Func002C takes nothing returns boolean
if ( not ( GetLearnedSkillBJ() == 'A297' ) ) then
return false
endif
if ( not ( GetUnitAbilityLevelSwapped('A297', GetTriggerUnit()) == 1 ) ) then
return false
endif
return true
endfunction
ВТОРАЯ ГЕРОЙСКАЯ СПОСОБНОСТЬ - РАВКОД ДОЛЖЕН ВЕЗДЕ СОВПАДАТЬ - ЗАКРЫТО
ТРЕТЬЯ ГЕРОЙСКАЯ СПОСОБНОСТЬ - РАВКОД ДОЛЖЕН ВЕЗДЕ СОВПАДАТЬ
function Trig_SingerOfDeathAll_Func002Func003C takes nothing returns boolean
if ( not ( GetLearnedSkillBJ() == 'A298' ) ) then
return false
endif
if ( not ( GetUnitAbilityLevelSwapped('A298', GetTriggerUnit()) == 1 ) ) then
return false
endif
return true
endfunction
ТРЕТЬЯ ГЕРОЙСКАЯ СПОСОБНОСТЬ - РАВКОД ДОЛЖЕН ВЕЗДЕ СОВПАДАТЬ - ЗАКРЫТО
ЧЕТВЁРТАЯ ГЕРОЙСКАЯ СПОСОБНОСТЬ - РАВКОД ДОЛЖЕН ВЕЗДЕ СОВПАДАТЬ
function Trig_SingerOfDeathAll_Func002Func004C takes nothing returns boolean
if ( not ( GetLearnedSkillBJ() == 'A299' ) ) then
return false
endif
if ( not ( GetUnitAbilityLevelSwapped('A299', GetTriggerUnit()) == 1 ) ) then
return false
endif
return true
endfunction
ЧЕТВЁРТАЯ ГЕРОЙСКАЯ СПОСОБНОСТЬ - РАВКОД ДОЛЖЕН ВЕЗДЕ СОВПАДАТЬ - ЗАКРЫТО
****************************************
if ( Trig_SingerOfDeathAll_Func002Func001C() ) then
return true
endif
if ( Trig_SingerOfDeathAll_Func002Func002C() ) then
return true
endif
if ( Trig_SingerOfDeathAll_Func002Func003C() ) then
return true
endif
if ( Trig_SingerOfDeathAll_Func002Func004C() ) then
return true
endif
****************************************
local timer t18 = CreateTimer()
*****************************************
ДВА РАЗА СВЕРХУ И СНИЗУ, ПРОВЕРИТЬ:
t18,
*****************************************
set t18 = null
*****************************************
Если первый спелл, то заносим функцию для него
if ( GetLearnedSkillBJ() == 'A296' ) then
call TriggerRegisterUnitEvent(hero,GetTriggerUnit(), EVENT_UNIT_SPELL_EFFECT)
call TriggerAddAction(hero,function DevastatingMagic)
else
endif
Если второй спелл, то регаем все юниты на смерть
if ( GetLearnedSkillBJ() == 'A297' ) then
if (IsUnitInGroup(u5, udg_AnimusCopies) == false) then
call TriggerRegisterAnyUnitEventBJ(hero, EVENT_PLAYER_UNIT_DEATH)
call TriggerAddAction(hero, function DeathScreams)
endif
endif
Если третий спелл, то рушим триггер, а если не третий, то рушим таймер t18
if ( GetLearnedSkillBJ() == 'A298' ) then
call DestroyTrigger(hero)
call SaveUnitHandle(udg_Hash,GetHandleId(t18),2,u5)
call TimerStart(t,1,true,function DeadMana)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
endif
Если четвертый спелл, то заносим функцию для него
if ( GetLearnedSkillBJ() == 'A299' ) then
call TriggerRegisterUnitEvent(hero,GetTriggerUnit(), EVENT_UNIT_SPELL_EFFECT)
call TriggerAddAction(hero,function Requiem)
else
endif
*****************************************
Devastating Magic
НИЧЕГО НЕТУ ЕЩЕ!
Death Screams
НИЧЕГО НЕТУ ЕЩЕ!
Dead Mana
НИЧЕГО НЕТУ ЕЩЕ!
Requiem
НИЧЕГО НЕТУ ЕЩЕ!
0
21
7 лет назад
0
Проверка
Ну вот, уже не редактируется, безобразие, ладно, фиг с ним, уже просто коды готовятся...
2
17
7 лет назад
Отредактирован ledoed
2
ClotPh:
вот тебе сразу 4 скила без хэш таблицы, а на массивах
все настройки для всех спелов находятся в триггере SpellClotch
все 4 спела и системы для них используют 1 поток(1 таймер периуд 0.025) если хочешь подключить к своему потоку то посмотри в тригере Global
папку инициализации можно удалить но всеровно нужно инициализировать Global_init()
Мемхака нету 1 скил перезаряжается как сказано в описании
Скилы МУИ
могу дать модельку полностью анимированную она немного похожа только подкрасить
Загруженные файлы
0
21
7 лет назад
0
ledoed, лайк за старания, но мной уже выполнено 60% дела самостоятельно + включена новая глобалка, короче, так по коду пока не сработаемся, вот я доделаю, выложу демонстрационные образцы сюда мб, чтобы было всем понятно, как в моей системе код пишется, и тогда посмотрим... хотя мб посмотрю, мб куски твоего кода пригодятся
0
21
7 лет назад
0
Вот, короче, образцы
Мне так и с таким оформлением надо
Буду или самостоятельно постепенно втч тут, или как получится
Devastating Magic
function DevastatingMagic takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: p, u5, u6, enemies
local location p
local unit u5 = GetTriggerUnit()
local unit u6
local group enemies = CreateGroup()
local real damage = 0
local real cdreduct = 0
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetSpellAbilityId() == 'A296' ) then
set p = GetSpellTargetLoc()
call DestroyEffect(AddSpecialEffectLoc("SingerOfDeath1.mdx",p))
if udg_deadheroes > 7 then
set cdreduct = 7
else
set cdreduct = udg_deadheroes
endif
ЗАДАЁМ КД
call SetAbilityCD ('A296', 1, 8 - cdreduct)
call SetAbilityCD ('A296', 2, 8 - cdreduct)
call SetAbilityCD ('A296', 3, 8 - cdreduct)
call SetAbilityCD ('A296', 4, 8 - cdreduct)
call SetAbilityCD ('A296', 5, 8 - cdreduct)
ЗАДАЁМ КД - ЗАКРЫТО.
set enemies = GetUnitsInRangeOfLocAll(250.00,p)
loop
УРОН
set u6=FirstOfGroup(enemies)
exitwhen u6==null
call GroupRemoveUnit(enemies,u6)
if ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitEnemy(u6,GetOwningPlayer(u5))==true ) then
set damage = 70 + 80 * (GetUnitAbilityLevelSwapped ('A296', u5))
call UnitDamageTargetBJ( u5, u6, damage, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endif
endloop
call RemoveLocation (p)
УРОН - ЗАКРЫТО.

else
endif
call DestroyGroup (enemies)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: p, u5, u6, enemies
set p = null
set u5 = null
set u6 = null
set enemies = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
Death Screams
function DeathScreams2 takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, u7, p, p2, p3, enemies
local timer t = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t),2)
local unit u6=LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local unit u7=LoadUnitHandle(udg_Hash,GetHandleId(t),4)
local location p = GetUnitLoc (u6)
local location p2
local location p3
local group enemies = CreateGroup()
local integer i = LoadInteger(udg_Hash,GetHandleId(t),3)
local real damage = LoadReal(udg_Hash,GetHandleId(t),5)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
set i = i+1
call SaveInteger (udg_Hash, GetHandleId(t),3,i)
ПЕРЕМЕЩЕНИЕ ВВЕРХ-ВНИЗ
if (i>0) and (i<13) and (u6!= null) then
call SetUnitFlyHeightBJ( u6, ( GetUnitFlyHeight(u6) + 50.00 ), 10000.00 )
else
call SetUnitFlyHeightBJ( u6, ( GetUnitFlyHeight(u6) - 50.00 ), 10000.00 )
endif
ПЕРЕМЕЩЕНИЕ ВВЕРХ-ВНИЗ - ЗАКРЫТО.
ПРОЛЁТ КРИКОВ ОТ ПОГИБШЕГО К ПЕВЦУ
if (u6!=null) then
set p2 = GetUnitLoc(u5)
set p3 = PolarProjectionBJ(p, ( DistanceBetweenPoints (p, p2) / 12.50 ), AngleBetweenPoints(p, p2))
call SetUnitPositionLoc (u6, p3)
call RemoveLocation (p2)
call RemoveLocation (p3)
endif
ПРОЛЁТ КРИКОВ ОТ ПОГИБШЕГО К ПЕВЦУ - ЗАКРЫТО.
if (i>24) then
set i = 0
call SaveInteger (udg_Hash, GetHandleId(t),3,i)
call RemoveUnit(u6)
ЕСЛИ ТОТ ОЖИЛ, ТО ВСЁ
if IsUnitAliveBJ(u7) == true or IsUnitDeadBJ(u7) == false or GetUnitState(u7,UNIT_STATE_LIFE)>0 then
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
else
endif
ЕСЛИ ТОТ ОЖИЛ, ТО ВСЁ - ЗАКРЫТО.
ЭФФЕКТЫ НА ПЕВЦЕ И УРОН ВРАГАМ
set p2 = GetUnitLoc(u5)
if udg_deadheroes >= GetRandomInt(1,11) then
else
call AddSpecialEffectTargetUnitBJ( "chest", u5, "SingerOfDeath2.mdl" )
call ConditionalTriggerExecute( gg_trg_destroyspeceffect )

endif
set enemies = GetUnitsInRangeOfLocAll(225.00,p2)
УРОН
loop
set u6=FirstOfGroup(enemies)
exitwhen u6==null
call GroupRemoveUnit(enemies,u6)
if ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitEnemy(u6,GetOwningPlayer(u5))==true ) then
call UnitDamageTargetBJ( u5, u6, damage, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endif
endloop
УРОН - ЗАКРЫТО.
ЭФФЕКТЫ НА ПЕВЦЕ И УРОН ВРАГАМ - ЗАКРЫТО.
call RemoveLocation (p2)
else
endif
call RemoveLocation (p)
call DestroyGroup(enemies)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, u7, p, p2, p3, enemies
set t = null
set u5 = null
set u6 = null
set u7 = null
set p = null
set p2 = null
set p3 = null
set enemies = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function DeathScreamsDamage takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, u7, p
local timer t = CreateTimer()
local unit u5=GetTriggerUnit()
local unit u6
local unit u7=GetEventDamageSource()
local location p = GetUnitLoc(u7)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
local real damage = 20 + 10 * ( GetUnitAbilityLevelSwapped('A297', u5))
local integer i = 0
call DisableTrigger(GetTriggeringTrigger())
call CreateNUnitsAtLocFacingLocBJ( 1, 'n393', GetOwningPlayer(u5), p, p)
set u6 = GetLastCreatedUnit()
call PlaySoundOnUnitBJ( gg_snd_SingerOfDeathDeathScreams, 100, u7 )
call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u6)
call SaveUnitHandle(udg_Hash,GetHandleId(t),2,u5)
call SaveInteger(udg_Hash,GetHandleId(t),3,i)
call SaveUnitHandle(udg_Hash,GetHandleId(t),4,u7)
call SaveReal(udg_Hash,GetHandleId(t),5,damage)
call TimerStart(t,0.04,true,function DeathScreams2)
call RemoveLocation (p)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, u7, p
set t = null
set u5 = null
set u6 = null
set u7 = null
set p = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function DeathScreams takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6, heroes, heroadded, heroaction
local unit u5 = GetTriggerUnit()
local unit u6
local group heroes = GetUnitsInRectAll(GetPlayableMapRect())
local trigger heroadded
local triggeraction heroaction
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( IsUnitType(u5, UNIT_TYPE_HERO) == true ) then
set heroadded=CreateTrigger()
set heroaction=TriggerAddAction(heroadded,function DeathScreamsDamage)
loop
set u6=FirstOfGroup(heroes)
exitwhen u6==null
call GroupRemoveUnit(heroes,u6)
if ( IsUnitType(u6, UNIT_TYPE_HERO) == true ) and ( GetUnitAbilityLevelSwapped('A297', u6) >= 1 ) then
call TriggerRegisterUnitEvent(heroadded, u6, EVENT_UNIT_DAMAGED)
call UnitDamageTargetBJ(u5,u6,0.00,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL)
else
endif
endloop
else
endif
call DestroyGroup (heroes)
call TriggerRemoveAction (heroadded, heroaction)
call DestroyTrigger (heroadded)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6, heroes, heroadded, heroaction
set u5 = null
set u6 = null
set heroes = null
set heroadded = null
set heroaction = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
Dead Mana
function DeadMana takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5
local timer t=GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t),2)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
Если героя нет, то разрушить таймер, чтобы не крутился и не жрал ресурсы.
if (u5 == null) then
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
else
ДОБАВЛЯЕМ МАНУ + ЗА МЁРТВЫХ
call DestroyEffect(AddSpecialEffectTarget("SingerOfDeath3.mdx",u5,"chest"))
call SetUnitState(u5, UNIT_STATE_MANA, GetUnitState(u5, UNIT_STATE_MANA) + GetUnitAbilityLevelSwapped('A298',u5) + GetUnitAbilityLevelSwapped('A298',u5) * udg_deadheroes )
ДОБАВЛЯЕМ МАНУ + ЗА МЁРТВЫХ - ЗАКРЫТО
endif
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5
set t=null
set u5=null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
Requiem
function Requiem takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6, enemyheroes, alliedheroes
local unit u5 = GetTriggerUnit()
local unit u6
local group enemyheroes = GetUnitsInRectAll(GetPlayableMapRect())
local group alliedheroes = GetUnitsInRectAll(GetPlayableMapRect())
local real enemiesfordeath = 0
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetSpellAbilityId() == 'A299' ) then
СПЕРВА ВСЕ С СОЮЗАМИ И СЧИТАЕМ ИХ
loop
set u6=FirstOfGroup(enemyheroes)
exitwhen u6==null
call GroupRemoveUnit(enemyheroes,u6)
if IsUnitType(u6, UNIT_TYPE_HERO) == true and IsUnitAliveBJ(u6) == true and IsUnitAlly(u6,GetOwningPlayer(u5)) == true and GetUnitStateSwap(UNIT_STATE_LIFE, u6) > 0.00 then
call DestroyEffect(AddSpecialEffectTarget("SingerOfDeath4.mdx",u6,"origin"))
set enemiesfordeath = enemiesfordeath + 1
if (u5 != u6) then
call KillUnit (u6)
else
endif
endif
endloop
СПЕРВА ВСЕ С СОЮЗАМИ И СЧИТАЕМ ИХ - ЗАКРЫТО.
ТЕПЕРЬ ВСЕ С ВРАГАМИ, ПРЕРВАТЬ РАНЬШЕ, ЕСЛИ СОЮЗОВ МАЛО
loop
set u6=FirstOfGroup(alliedheroes)
exitwhen u6==null or enemiesfordeath==0
call GroupRemoveUnit(alliedheroes,u6)
if IsUnitType(u6, UNIT_TYPE_HERO) == true and IsUnitAliveBJ(u6) == true and IsUnitEnemy(u6,GetOwningPlayer(u5)) == true and GetUnitStateSwap(UNIT_STATE_LIFE, u6) > 0.00 then
call DestroyEffect(AddSpecialEffectTarget("SingerOfDeath4.mdx",u6,"origin"))
set enemiesfordeath = enemiesfordeath - 1
call KillUnit (u6)
else
endif
endloop
ТЕПЕРЬ ВСЁ С ВРАГАМИ - ЗАКРЫТО.
else
endif
call DestroyGroup (enemyheroes)
call DestroyGroup (alliedheroes)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6, enemyheroes, alliedheroes
set u5 = null
set u6 = null
set enemyheroes = null
set alliedheroes = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
0
1
7 лет назад
0

Заказ

Название: Ещё нету
Метод: Всё равно
MUI: Не обязательно
Цель: Нету цели
Количество уровней: 3
Описание: Подчинение крипа(монстра) на определённое время который убил вашего героя.
Технические характеристики: 1 уровень:10 секунд
2 уровень:15 секунд
3 уровень:20 секунд
0
29
7 лет назад
Отредактирован Волчачка
0
GADees15:

Заказ

Название: Ещё нету
Метод: Всё равно
MUI: Не обязательно
Цель: Нету цели
Количество уровней: 3
Описание: Подчинение крипа(монстра) на определённое время который убил вашего героя.
Технические характеристики: 1 уровень:10 секунд
2 уровень:15 секунд
3 уровень:20 секунд
globals
    hashtable yourhash      = InitHashtable()
    trigger   YourTrigger   = null 
endglobals



scope COD initializer TriggerHeroCharmOfDeath

function IF_ofcbsh takes nothing returns boolean
    return GetUnitAbilityLevel( GetTriggerUnit(), 'your' ) > 0 
endfunction

function cofcbsh takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local integer timeleft = LoadInteger( yourhash, id, StringHash("CharmTime") )
    if timeleft > 0 then
        if IsUnitType(LoadUnitHandle(yourhash, id, StringHash("CharmedCreep")), UNIT_TYPE_DEAD ) then
            call DestroyTimer(t)
            if LoadUnitHandle(yourhash, id, StringHash("CharmedCreep")) != null then
                call SetUnitOwner( LoadUnitHandle(yourhash, id, StringHash("CharmedCreep")), LoadPlayerHandle(yourhash, id, StringHash("CreepPlayer")), true )
            endif
            call FlushChildHashtable( yourhash, id)
        else
            call SaveInteger( yourhash, id, StringHash("CharmTime"), timeleft - 1 )
        endif
    else
        call DestroyTimer(t)
        if LoadUnitHandle(yourhash, id, StringHash("CharmedCreep")) != null then
            call SetUnitOwner( LoadUnitHandle(yourhash, id, StringHash("CharmedCreep")), LoadPlayerHandle(yourhash, id, StringHash("CreepPlayer")), true )
        endif
        call FlushChildHashtable( yourhash, id)
    endif
    set t = null
endfunction

function CharmOfCritterBySlainHero takes nothing returns nothing
    local unit k = GetKillingUnit()
    local unit u = GetTriggerUnit()
    local integer id
    local timer t
    if GetWidgetLife(k)>.405 and  not IsUnitType( k, UNIT_TYPE_DEAD ) and k != null then
        set t = CreateTimer()
        set id = GetHandleId(t)
        call SavePlayerHandle(yourhash, id, StringHash("CreepPlayer"), GetOwningPlayer(k))
        call SaveInteger( yourhash, id, StringHash("CharmTime"), (GetUnitAbilityLevel(u, 'your') * 50) + 49 )
        call SaveUnitHandle(yourhash, id, StringHash("CharmedCreep"), k )
        call SetUnitOwner( k, GetOwningPlayer(u), true )
        call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Charm\\CharmTarget.mdl", k, "origin"))
        call TimerStart(t, .1, true, function cofcbsh )
    endif
    set t = null
endfunction

function TriggerHeroCharmOfDeath takes nothing returns nothing
    set YourTrigger = CreateTrigger()
    call TriggerAddAction( YourTrigger, function CharmOfCritterBySlainHero )
    call TriggerAddCondition( YourTrigger, Condition(function IF_ofcbsh) )
    //call TriggerRegisterDeathEvent( YourTrigger, YourUnit )
endfunction 

endscope
Вместо 'your' - rave код вашей способности
Вместо YourTrigger код вашего триггера
Вместо yourhash - ваша хеш-таблица, хоть udg_;
Героя сами добавите в триггер //call TriggerRegisterDeathEvent( YourTrigger, YourUnit ) или своим методом, где YourTrigger - ваш триггер, YourUnit - ваш герой...
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.