XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Библиотека заклинаний

Если вы хотите поделиться своими триггерными и JASS-заклинаниями, то можете оставлять их здесь.
Желательно иметь, в карте, небольшое руководство для новичков, по установке вашего творения на другую карту.
» Шаблон выкладывания способностей:
Название: название заклинания
Метод исполнения: GUI, Jass (v*, c*)
Нужен ли JNGP: да или нет
Тип цели: юнит, точка, область, без цели
Результат применения: целое описание
Количество уровней: 0-255
Вызов заклинания на цель: buff, если есть
Наличие глобальных переменных: да или нет
Дополнительные аргументы(такие, как вызов новых юнитов, предметов, требования, и прочее)
**Название:**
**Метод исполнения:**
**Нужен ли JNGP:** 
**Тип цели:**
**Результат применения:**
**Количество уровней:**
**Вызов заклинания на цель:**
**Наличие глобальных переменных:** 
Шаблон можно просто скопировать здесь, вставить в свое сообщение, и заполнить
Выполняется для каждой способности, независимо от количества карт.

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

Ответ
 
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Название:Снизвержение големов
Тип исполнения:Jass
Муи: да
Для кого: для героя(можно легко настроить и для воина в РО)
Описание: С неба падают 1/2/3 огненных голема,сражающиеся на стороне героя.При падении голема все враги оглушаются на 0.5 секунд,также под големом образуется огненный столб,наносящий всем врагам 90/160/220 мгновенных повреждений,а также повреждения с течением времени.При падении големов,во все стороны от них разлетаются языки пламени,которые наносят 100/150/200 мгновенных повреждений и 10/20/30повреждений с течением 5 секунд.
Спелл делал на заказ теперь выкладываю здесь
Отдельное спасибо за помощь в создании спела Дартреку и Vadik29
Прикрепленные файлы
Тип файла: w3x Снизвержение големов.w3x (24.5 Кбайт, 24 просмотров )

Отредактировано Sladkoegka, 26.03.2012 в 10:09.
Старый 26.03.2012, 08:46
Ancient
Щпаовапа
offline
Опыт: 38,370
Активность:
Название: Полет
Метод исполнения: GUI
Нужен ли JNGP: нет
Тип цели: Без цели
Результат применения: Юнит передвигается вперед с огромной скоростью, но не далее чем на 1000. Не может опустатся и подниматся на резкие обрывы и возвышения. (+-128)
Количество уровней: Не ограничиное
MUI: Нет, но можно сделать.
Прикрепленные файлы
Тип файла: w3x Полет.w3x (19.7 Кбайт, 54 просмотров )

Отредактировано Ancient, 28.03.2012 в 09:56.
Старый 27.03.2012, 21:15
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Название:Огненный Шар+Яростный Удар
Метод исполнения:Gui
Нужен ли JNGP:нет
Тип цели:герой,воин
Результат применения:Яростный Удар который поражает всех врагов перед героем врагам наносится 90/115/140 ед чистого урона.Перезарядка 6/5/4 сек. Маны требуется 40/60/80
Количество уровней:3
MUI 1 нет,2 да.
Cosonic5 добавил:
Название:Святой Молот+2 Ледяных сферы
Метод исполнения:Gui
Нужен ли JNGP:нет
Тип цели:герой.враги
Результат применения:Герой кидает во врага две ледяных сфер, которые при столкновении замораживают врага и тех, кто рядом. Время действия замораживание - 5 секунд.
Количество уровней:3
MUi нет
Святое слово - Паладин призывает святое слово от чего за каждого убитого крипа он будет получать по 50/100/150 ед здоровья. Перезарядка 5 сек. Время действия 12 сек.
MUi да
Vadik29=)) жди от меня одни минусы)

Отредактировано Cosonic5, 02.04.2012 в 07:58.
Старый 02.04.2012, 06:32
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Вот делал на заказ:
Название:Обряд чар
Метод исполнения: Jass (легко переносится)
Mui: Да
Нужен ли JNGP: нет
Тип цели:Без цели, Channeling
Результат применения: пока герой кастует это заклинание каждую секунду 5 ед. здоровья конвертируются в 10 ед. маны
Количество уровней:сколько угодно
Наличие глобальных переменных:1 ХешТаблица
Ставьте плюсы кому пригодился спел!)
Прикрепленные файлы
Тип файла: w3x ManaRegenByVadik29.w3x (18.7 Кбайт, 30 просмотров )

Отредактировано Vadik29, 07.04.2012 в 07:45.
Старый 05.04.2012, 21:16
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Название:Ледяная глыба
Метод исполнения:Jass (легко переносится)
Mui: Да
Нужен ли JNGP: нет
Тип цели:без цели, Channeling
Результат применения:Замораживает себя на 7 (в ро поставите, "Следовать в течении времени") сек., тем самым делая себя неуязвимым каст заклинания или сдвиг с места делает уязвимым.... (как в wow)
Количество уровней:сколько хотите
Наличие глобальных переменных: 1 ХешТаблица
Ставьте плюсы кому пригодился спел!)
» Вот код: малясь изменил

function Trig_Spell_Conditions takes nothing returns boolean
        return GetSpellAbilityId() == 'A000'
endfunction

function Trig_Spell_Actions2 takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit u = LoadUnitHandle(udg_Hash,id,0)
local effect e1 = LoadEffectHandle(udg_Hash,id,4)
if (OrderId2String(GetUnitCurrentOrder(u)) != "channel") then
call DestroyEffect(e1) 
call DestroyTimer(t)
call SetUnitTimeScale(u,1)
call FlushChildHashtable(udg_Hash,id)
call SetUnitInvulnerable(u,false)
else
endif
set u = null
set e1 = null
set t = null
endfunction


function Trig_Spell_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local timer t = CreateTimer()
local integer id = GetHandleId(t)
local string s = "Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathTargetArt.mdl"
local effect e1 = AddSpecialEffectTarget(s,u,"origin")
call SaveUnitHandle(udg_Hash,id,0,u)
call SaveEffectHandle(udg_Hash,id,4,e1)
call SetUnitInvulnerable(u,true)
call SetUnitTimeScale(u,0)
call TimerStart(t,0.03,true,function Trig_Spell_Actions2)
set u = null
set s = null
set e1 = null
endfunction

//===========================================================================
function InitTrig_Spell takes nothing returns nothing
    set gg_trg_Spell = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Spell, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Spell, Condition( function Trig_Spell_Conditions ) )
    call TriggerAddAction( gg_trg_Spell, function Trig_Spell_Actions )
endfunction
Прикрепленные файлы
Тип файла: w3x frost.w3x (17.8 Кбайт, 44 просмотров )

Отредактировано Vadik29, 11.04.2012 в 21:38.
Старый 07.04.2012, 07:34
nomer231

offline
Опыт: 210
Активность:
Название: Гнев Деревьев
Метод исполнения:Gui
Mui: Да
Нужен ли JNGP: нет
Тип цели: Область
Результат применения:Масс корни во всех в указоной области.
Наличие глобальных переменных: 1 переменая типа Боевая еденица 1 переменая типа отряд.
P.S Это Мой первый спелл строго не судите.
Прикрепленные файлы
Тип файла: w3x Spell Druid.w3x (14.8 Кбайт, 47 просмотров )
Старый 08.04.2012, 02:19
Extremator

offline
Опыт: 39,428
Активность:
Название: Berserk Jump
Тип цели: Точка (но действует на врагов вокруг указанной точки)
Результат применения: Гром Задира принимает угрожающую стройку и срывается с места совершая удар в указанную точку и нанося по 75/125/175 ед. урона ближайшим врагам. Если у них окажется менее 20/30/40% здоровья то они получат 125 ед. дополнительного урона и в случаи смерти их тела будут разорваны.
Количество уровней: 3 уровня
**Вызов заклинания на цель(buff): Нету
Дополнительные аргументы: я выложил две карты, первая - это сам спелл, вторая - тот же спел, но во время прыжка герой переворачивается вокруг себя, и становится сзади указаной точки, т.е. как бы перепрыгивает её и ударяет по земле. Смотрится на порядок эффектнее на меньших расстояниях!
Extremator добавил:
Название: Anger of Depths / Гнев Стихии
Тип цели: Точка/Область (эффект расходится от центра области)
Результат применения: Извергает кольцо ледяной воды из центра указанной области, которая наносит по 60/100/160/240 ед. урона врагам и замораживает их на 2 секунды (оглушение с моделькой ледышки).
Количество уровней: 4 уровня
Дополнительные аргументы: пожалуй ничего не могу добавить...))
Extremator добавил:
добавил скрины к спеллам
Миниатюры
Кликните на картинку для увеличения
Название:  x_f8d7bd54.jpg
Просмотров: 150
Размер:  73.0 Кбайт  Кликните на картинку для увеличения
Название:  x_1d9f5139.jpg
Просмотров: 181
Размер:  81.9 Кбайт  Кликните на картинку для увеличения
Название:  x_454d3842.jpg
Просмотров: 141
Размер:  37.2 Кбайт  Кликните на картинку для увеличения
Название:  x_0d0ae080.jpg
Просмотров: 126
Размер:  49.7 Кбайт  Кликните на картинку для увеличения
Название:  x_6a00fed8.jpg
Просмотров: 151
Размер:  38.8 Кбайт  

Прикрепленные файлы
Тип файла: w3x Berserk Jump.w3x (18.5 Кбайт, 63 просмотров )
Тип файла: w3x Berserk Jump v2.w3x (15.5 Кбайт, 94 просмотров )
Тип файла: w3x Anger of Depths (spell).w3x (25.8 Кбайт, 79 просмотров )

Отредактировано Extremator, 07.12.2012 в 19:20.
Старый 08.04.2012, 03:43
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Вот еще спелл:
Название: Путь огня
Метод исполнения: Jass
Mui: да
Нужен ли JNGP: нет
Тип цели:боевая единица
Результат применения: Бысрое перемещение к в рагу и создание огня во время пути который лишает возможности произносить заклинания в течении 3 сек., огонь горит 7 сек и наносит 90 ед. урона каждую сек
Количество уровней: сколько хотите
Вызов заклинания на цель: нет
Наличие глобальных переменных: хеш
уговорил :D
» Вот код:
function Trig_Spell_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A000'
endfunction

function GetUnitZ takes unit u returns real
local location loc=GetUnitLoc(u)
local real r=GetLocationZ(loc)+GetUnitFlyHeight(u)
call RemoveLocation(loc)
set loc=null
return r
endfunction

function SR_Spell takes real xa, real ya, real xb, real yb returns real
return SquareRoot((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb))
endfunction

function Trig_Spell_Actions2 takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit u = LoadUnitHandle(udg_Hash,id,0)
local unit c = LoadUnitHandle(udg_Hash,id,1)
local real x1 = GetUnitX(c)
local real y1 = GetUnitY(c)
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local lightning l = LoadLightningHandle(udg_Hash,id,4)
local real a = Atan2(y1-y,x1-x)
local unit d
if SR_Spell(x,y,x1,y1) > 36. then
call SetUnitX(u,x+37.5*Cos(a))
call SetUnitY(u,y+37.5*Sin(a))
call MoveLightningEx(l,false,x,y,GetUnitZ(u)+50.,x1,y1,GetUnitZ(c)+50.)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl&q​uot;,u,"chest"))
call SetUnitFacing(u,a*bj_RADTODEG)
set d = CreateUnit(GetOwningPlayer(u),'h000',x,y,GetUnitFacing(u))
call UnitApplyTimedLife(d,'BTLF',7.)
call IssuePointOrder(d,"silence",x,y)
call SetUnitAbilityLevel(d,'A002',GetUnitAbilityLevel(u,'A000'))
else
call UnitRemoveAbility(u,'A001')
call DestroyEffect(LoadEffectHandle(udg_Hash,id,5))
call DestroyTimer(t)
call DestroyLightning(l)
call FlushChildHashtable(udg_Hash,id)
endif
set u = null
set t = null
set c = null
set d = null
set l = null
endfunction

function Trig_Spell_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local unit c = GetSpellTargetUnit()
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local real x1 = GetUnitX(c)
local real y1 = GetUnitY(c)
local timer t = CreateTimer()
local integer id = GetHandleId(t)
call SaveUnitHandle(udg_Hash,id,0,u)
call SaveUnitHandle(udg_Hash,id,1,c)
call SaveLightningHandle(udg_Hash,id,4,AddLightningEx("LEAS",false,x,y,GetUnitZ(u)+50,x1,y1,Get​UnitZ(c)+50))
call SaveEffectHandle(udg_Hash,id,5,AddSpecialEffectTarget("Abilities\\Spells\\Human\\AerialShackles​\\AerialShacklesTarget.mdl",c,"chest"))
call UnitAddAbility(u,'A001')
call TimerStart(t,0.025,true,function Trig_Spell_Actions2)
set u = null
set t = null
set c = null
endfunction

//===========================================================================
function InitTrig_Spell takes nothing returns nothing
set gg_trg_Spell = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_Spell,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(gg_trg_Spell,Condition(function Trig_Spell_Conditions))
call TriggerAddAction(gg_trg_Spell,function Trig_Spell_Actions)
endfunction
Ставьте плюсы кому пригодился спел!)
Прикрепленные файлы
Тип файла: w3x test.w3x (25.6 Кбайт, 27 просмотров )

Отредактировано Vadik29, 23.04.2012 в 21:22.
Старый 11.04.2012, 21:23
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Vadik29, эм как бы создавая молнию до высоты полета юнита+50 она скорее всего не попадет в него,т.к. надо еще прибавить высоту точки,в которой он находится
GetLocationZ(loc)
Эта фиговина
        call IssuePointOrderLoc(d,"silence",Location(x,y))
создает утечку(догадайся где)
лучше замени на это
call IssuePointOrder(d,"silence",x,y)
....................................................................................................​............................................
И вообще оно будет двигать не за целью,а к точке,в которой цель была во время каста,хотя молния движется за целью вне зависимости стоит цель на месте или убегает\улетает на другой конец карты
....................................................................................................​............................................
лол
исправил сообщение - показывай код^_^
мб еще чего найду
...................
нашел>_>
вот здесь
call MoveLightningEx(l,false,x,y,GetUnitFlyHeight(u)+50+GetLocationZ(Location(x,y)),x1,y1,GetUnitFlyHeigh​​t(c)+50+GetLocationZ(Location(x1,y1)))
2 точки утекают как бы
вообще для удобства можешь юзать функцию:
function GetUnitZ takes unit u returns real
local location loc=GetUnitLoc(u)
local real r=GetLocationZ(loc)+GetUnitFlyHeight(u)
call RemoveLocation(loc)
set loc=null
return r
endfunction
соответственно строка будет выглядеть:
call MoveLightningEx(l,false,x,y,GetUnitZ(u)+50.,x1,y1,GetUnitZ(c)+50.)
.........
ну еще поменяешь там тоже в создании молнии в нижней функции также

Отредактировано Nerevar, 11.04.2012 в 22:52.
Старый 11.04.2012, 21:48
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Вот герой Наруто, все скилы Jass Mui...
в объяснении и представлении не нуждается...
Расенган
Теневые клоны
Режим саннина
Расенган сюрикен
Ставьте плюсы кому пригодился спел!)
Думаю нубы будут счастливы...
Миниатюры
Кликните на картинку для увеличения
Название:  Точечный рисунок.JPG
Просмотров: 169
Размер:  229.6 Кбайт  
Прикрепленные файлы
Тип файла: w3x Naruto.w3x (562.4 Кбайт, 39 просмотров )

Отредактировано Vadik29, 24.04.2012 в 10:54.
Старый 23.04.2012, 20:56
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Название: X-Banner
Метод исполнения: Jass,MUI
Нужен ли JNGP: нет
Тип цели: точка ,Channel
Результат применения: на скрине
Количество уровней: неограниченно
Вызов заклинания на цель: да
Наличие глобальных переменных: Хеш
Ставьте плюсы кому пригодился спел!)
Миниатюры
Кликните на картинку для увеличения
Название:  1.JPG
Просмотров: 145
Размер:  221.1 Кбайт  
Прикрепленные файлы
Тип файла: w3x X-Banner.w3x (151.7 Кбайт, 25 просмотров )

Отредактировано Vadik29, 24.04.2012 в 12:04.
Старый 24.04.2012, 11:52
Extremator

offline
Опыт: 39,428
Активность:
Сделал два спелла взяв за основу 2-й спелл Тролля-ловкача из Доты
вышло не совсем то что в доте, но суть впринципе осталась та же...
Поскольку кроме урона больше воздействий нету,
то можно использовать как шаблон, или заготовку для другого спелла,
или же как ознакомительный материал, если есть такая потребность...
» 1. Whirling Axes (melee)
Тип применения: Мгновенный (без указания цели)
Цели заклинания: Ближайшие враги (в радиусе до 450 AoE)
Описание: Заставляет пару магический топоров вращаться вокруг героя.
Каждый топор однократно наносит по 30/60/90/120 ед. урона противникам которых заденет.
Результат применения: Раскручивает два топора вокруг героя, сначала постепенно отдаляя их, а потом возвращая обратно, затрачивая на это ~1.5 секунды. Оба топора наносят урон независимо друг от друга, т.е. противник может получить урон как от двух топоров, так и только от одного. Топоры имеют до 325 AoE радиуса вращения и 125 AoE радиус взаимодействия врагами.
Для героя: Да
Количество уровней: 4 уровня
Тип исполнения: GUI (MUI)
Вызов заклинания на цель (buff): Нет, только урон, но можно добавить и настроить!
» 2. Whirling Axes (range)
Тип применения: Указанная точка (выберается направление)
Цели заклинания: Задетые враги (в радиусе до 125 AoE от топора)
Описание: Метает в указанном направлении пять топоров, которые наносят по 50/100/150/200 ед. урона всем задетым противникам. Урон наносится единожды за всю волну по каждой задетой жертве.
Результат применения: Выпускает пять топоров которые летят в указанном направлении на дистанцию до 900 AoE, с небольшой разницей в углах полёта, которая составляет 10 градусов. Топоры задевают всех попавшихся на пути противников в радиусе 125 AoE от каждого топора. Скорость полёта топоров 1000 AoE/сек., таким образом топоры продалевают всю дистанцию за 0,9 секунды. Если применить под самого себя, то топоры автоматически полетят вперёд, так же как и у стандартных спеллов на подобии "Волны Силы" и "Тёмной Стаи".
Для героя: Да
Количество уровней: 4 уровня
Тип исполнения: GUI (MUI)
Вызов заклинания на цель (buff): Нет, только урон, но можно добавить и настроить!
Поскольку спеллы сделаны как MUI,
то на прикреплённых скриншотах я запечатлел
не однократную активацию спеллов, а многократную!
...ну т.е. несколько раз подряд использовал их...
Ещё нужно заметить, что для обоих способностей
я использую дамми-юнита одного и того же типа!
Миниатюры
Кликните на картинку для увеличения
Название:  1.PNG
Просмотров: 164
Размер:  613.5 Кбайт  Кликните на картинку для увеличения
Название:  1.PNG
Просмотров: 152
Размер:  485.9 Кбайт  
Прикрепленные файлы
Тип файла: w3x Whirling Axes (spell).w3x (15.9 Кбайт, 98 просмотров )

Отредактировано Extremator, 07.12.2012 в 19:27.
Старый 04.05.2012, 11:58
Msey
????
offline
Опыт: 67,346
Активность:
Название: Сохранение
Способ исполнения: vJass
Цель: Цель союзные герои, сам герой
MUI
Описание: При применении заклинания на цель, цель излечивается на определённое кол-во жизней, если кол-во лечения больше чем кол-во недостаточных жизней у цели, то лишнее лечение превращается в щит равный лишнему исцелению. ( ПРИМЕР: У цели МАКС.ХП = 100, на данный момент у цели 80 ХП, мы исцелили её на 150 ХП, в итоге у цели стало 100 хп,и наложился щит поглощающий 130 ед. урона)
У щита присутствует индикатор здоровья.
По уровням:
1 Уровень: Лечит цель на ( Интеллект кастера x 4) ед.
2 Уровень: Лечит цель на ( Интеллект кастера x 6) ед.
3 Уровень: Лечит цель на ( Интеллект кастера x 8) ед.
Прикрепленные файлы
Тип файла: w3x Example(2).w3x (35.5 Кбайт, 46 просмотров )
Старый 10.06.2012, 16:44
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
D_Konst:
Я вот посидел часов 6-7 и сделал некий спелл:
1.----------Название: Стрела Боли
2.----------Тип цели: без цели(Пасивка)
3.----------Нужен ли JNGP: нет
4.----------Результат применения: С каждой атакой герой уменьшает защиту атакованого врага на 1 ед. на 10 секунд, если за ето время герой выстрелит во врага второй раз, то уменьшение защиты Суммируется.
5.----------Количество уровней: 1(Пока нету времени разбивать его на уровни)
6.----------Вызов заклинания на цель: Бафф есть, но спелл сделан без дамми
7.----------Наличие глобальных переменных: а ето вообще что такое?, ну да - есть две переменные
Дополнительные аргументы: примеру вы атаковали одного врага 5 раз, а потом второго 4 раза и еще третего 7 раз; так вот если до истечения 10 секунд вы снова атакуете первого противника, то его защита будет -6, потом -7(Аналогично со вторым и третим противником.)
передавай привет утечке памяти в триггере Desolate 2
Старый 09.07.2012, 21:08
Arti

offline
Опыт: 11,196
Активность:
Leviathan the Tidehunter(из доты)
Не тяжелые спеллы выполненные на jass. Не забывайте ставить + или -. Всё на 95% повторяет оригинал, кроме 2 пассивки, я поленился её сделать.


Skills
Gush - Summons a spirit of the tides to damage an enemy unit. Reduces the movement speed by 40% and armor of the enemy unit. Lasts 4 seconds.

Kraken Shell - Creates a thick armor shell around Leviathan that protects him against attacks. Additionally, this ability removes negative buffs when he has taken significant damage.

Anchor Smash - Leviathan swings his mighty anchor with a vengeance. Gives a 20% chance to deal bonus damage to nearby enemies.

Ravage - Slams the ground, causing waves of spikes to ring the hero in all directions. Deals damage and stuns.
Прикрепленные файлы
Тип файла: w3x Tidehunter.w3x (22.8 Кбайт, 42 просмотров )
Старый 25.07.2012, 20:44
влад10011

offline
Опыт: 2,337
Активность:
Название: Землетрясение
Метод исполнения: Jass
Нужен ли JNGP: нет
Тип цели: юнит
Результат применения: Герой чертит линию по которой движется землетрясение(а линия идёт за целью пока землетрясение не дойдёт до цели). Землетрясение наносит урон вокруг себя 15 в сек и дойдя до цели наносит дополнительно 100 урона.
Спелл сделан полностью на локальных переменных. MUI
Количество уровней: 1
Вызов заклинания на цель: нету
Наличие глобальных переменных: нету
Прикрепленные файлы
Тип файла: w3x 2.w3x (16.6 Кбайт, 34 просмотров )

Отредактировано Fakov, 15.08.2012 в 15:25.
Старый 30.07.2012, 21:02
Raised
Rid-Aid-Ios
offline
Опыт: 20,792
Активность:

Пост обновлен от 17.08.2012

На этот раз MUI-Версия спелла (Событие - Юнит получает урон)

Название: Стрелы Боли.
Метод исполнения: GUI.
Нужен ли JNGP: нет.
Тип цели: без цели (Пассивка).
Результат применения: При каждой атаке герой повреждает защиту врага на 1 ед. на 10 секунд. Повреждения защиты суммируются определенное количество раз, в зависимости от уровня способности(1-10).
Количество уровней: 10
Вызов заклинания на цель: Бафф
Наличие глобальных переменных: да
Дополнительные аргументы: Должно быть я развиваюсь как и все: спелл сделал идеальным(то есть багов в его использовании НЕТ), насчет утечек - судите сами. Я вот почитал статьи по Jass'у - так вот попробую конвертнуть спелл в Jass и устранить упечки, как научился по статьям. Если я что то не учту - пишите в Л/С.

Спелл + система отлова урона на GUI + Система определения типа урона (Магический/Не Магический)

от 10.01.2013 просьба не качать, исправлю лаги - залью нормальную версию.
Прикрепленные файлы
Тип файла: w3x Desolate.w3x (85.7 Кбайт, 68 просмотров )

Отредактировано RiseD_Konst, 13.01.2013 в 04:24.
Старый 02.08.2012, 04:11
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Автор: Hate
Название: Иллюзорный захват
Метод исполнения: vJass/cJass
Нужен ли JNGP: Да
MUI: Да
Применение: цель и юниты вокруг цели
Описание:
Притягивает до 2-х юнитов вокруг цели, оглушает их на 3 секунды нанося урон от силы*2 и замедляет скорость передвижения на 50% в течении 10 секунд.
Уровень 1 - 1 цель
Уровень 2 - 2 цели
Уровень 3 - 3 цели
стигма-скилл стража из мморпг аион
upd - исправил обрыв потока который случался если использовать скилл на уже притягивающуюся цель.
» код
//    Chain Element model By Infrisios (hiveworkshop)
//    Chain Storm model by Judash (hiveworkshop)
//    code by Hate (XGM)
//    original idea of skill by NCSoft (some koreans guys)
//    landscape by Nikz (XGM)

scope IllusionChains
include "cj_types.j"

//globals
private hashtable hash = InitHashtable()
private group Pull_gr = CreateGroup(), FiltGroup = CreateGroup()
private int count
private unit for_filter = null, for_filter2 = null

define {
   private IC_CHAIN = 'h000' // chain element unit
   private IC_GLOW = 'h001' // glow unit
   private IC_DUMMY = 'h002' // dummy unit for stun
   private IC_DUMMY_DEBUFF = 'h003' // unit for debuff dummy
   private IC_SKILL = 'A000' // skill-activator
   private IC_DEBUFF = 'A001' // skill for debuff
   private IC_DEBUFF2 = 'B000' // debuff
   private saveS = SaveInteger(hash, GetHandleId(t1), 0,DB)
   private loadS = LoadInteger(hash, GetHandleId(t), 0)
   private CT = CreateTimer()
} 


real ABU (unit A, unit B) {
    return Atan2(GetUnitY(B)-GetUnitY(A), GetUnitX(B)-GetUnitX(A))*bj_RADTODEG
}

real DBU (unit A, unit B) {
return SquareRoot((GetUnitX(B) - GetUnitX(A)) * (GetUnitX(B) - GetUnitX(A)) + (GetUnitY(B) - GetUnitY(A)) * (GetUnitY(B) - GetUnitY(A)))
}

real DBP (unit A, real x_B, real y_B) {
return SquareRoot((x_B - GetUnitX(A)) * (x_B - GetUnitX(A)) + (y_B - GetUnitY(A)) * (y_B - GetUnitY(A)))
}

struct SomeRandomStruct
unit eff, target
real time
endstruct

struct Pull
    unit victim
    unit source
    real x, y, start_x, start_y, time, angle, mod
    
    
method ex takes void returns void
    this.mod = this.mod/1.3
    this.x = this.mod * Cos(this.angle * bj_DEGTORAD)
    this.y = this.mod * Sin(this.angle * bj_DEGTORAD)
    SetUnitPosition(this.victim, GetUnitX(this.victim)+this.x, GetUnitY(this.victim)+this.y)
endmethod 

endstruct


struct Chain

unit array chain[12]
unit array glow[12]
unit ef


    void replace(unit src, unit vct){
    int c = 0
    real distance = DBU(src,vct), m_u = distance/12., bonus = distance/12., ang = ABU(src,vct)
    real h_x = GetUnitX(src), h_y = GetUnitY(src)
    
        while (c++ < 12) {
        SetUnitX(this.chain[c], h_x + (m_u * Cos(ang*(bj_PI/180.))))
        SetUnitY(this.chain[c], h_y + (m_u * Sin(ang*(bj_PI/180.))))
    
        SetUnitX(this.glow[c], h_x + (m_u * Cos(ang*(bj_PI/180.))))
        SetUnitY(this.glow[c], h_y + (m_u * Sin(ang*(bj_PI/180.))))
        
       
        
        SetUnitFacingTimed(chain[c], ang, 0.)
        m_u += bonus
        }
        SetUnitX(this.ef,GetUnitX(vct))
        SetUnitY(this.ef,GetUnitY(vct))
    
    }

    void add(unit w, unit v){
    int c = 0
    real distance = DBU(v,w), m_u = distance/12., bonus = distance/12., ang = ABU(w,v)
    real h_x = GetUnitX(w), h_y = GetUnitY(w)
    
        this.ef = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), IC_DUMMY_DEBUFF,GetUnitX(v),GetUnitY(v), GetRandomReal(0.,360.))
        while (c++ < 12) {
        chain[c] = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), IC_CHAIN, GetUnitX(w)+(m_u * Cos(90.*(bj_PI/180.))),GetUnitY(w)+(m_u * Sin(90.*(bj_PI/180.))),ang)
        SetUnitPathing(this.chain[c],false)
        SetUnitX(this.chain[c], h_x + (m_u * Cos(ang*(bj_PI/180.))))
        SetUnitY(this.chain[c], h_y + (m_u * Sin(ang*(bj_PI/180.))))
        
        glow[c] = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), IC_GLOW, GetUnitX(w)+(m_u * Cos(90.*(bj_PI/180.))),GetUnitY(w)+(m_u * Sin(90.*(bj_PI/180.))),ang)
        SetUnitPathing(this.glow[c],false)
        SetUnitX(this.glow[c], h_x + (m_u * Cos(ang*(bj_PI/180.))))
        SetUnitY(this.glow[c], h_y + (m_u * Sin(ang*(bj_PI/180.))))
        m_u += bonus
        }
        SetUnitX(this.ef,GetUnitX(v))
        SetUnitY(this.ef,GetUnitY(v))
    }

    void remove() {
    int c = 0
    
        while (c++ < 12){
            RemoveUnit(this.chain[c])
            this.chain[c] = null
            RemoveUnit(this.glow[c])
            this.glow[c] = null
            RemoveUnit(this.ef)
            this.ef = null
        }
        
    this.destroy()
    }

endstruct


private void RemoveSlow() {
int h = GetHandleId(GetExpiredTimer())
SomeRandomStruct srs = LoadInteger(hash,h,0)
    if srs.time <= 0. or GetUnitAbilityLevel(srs.target,IC_DEBUFF2) != 1
        KillUnit(srs.eff)
        UnitRemoveAbility(srs.target, IC_DEBUFF) 
        UnitRemoveAbility(srs.target, IC_DEBUFF2) 
        srs.eff = null
        srs.target = null
        srs.destroy()
        FlushChildHashtable(hash,h)
        DestroyTimer(GetExpiredTimer())
    else
        srs.time -= 0.05
        IssuePointOrder(srs.eff, "move",GetUnitX(srs.target),GetUnitY(srs.target))
    endif
}


private function PeriodicPull takes nothing returns nothing
timer t = GetExpiredTimer(), RmvSlv
Pull DB = loadS
SomeRandomStruct srs
Chain DA = LoadInteger(hash, GetHandleId(t),1)
real distance = DBP(DB.victim, DB.start_x, DB.start_y)

    if GetUnitState(DB.victim, UNIT_STATE_LIFE) <= 0.045 or distance > 1200. then
        GroupRemoveUnit(Pull_gr, DB.victim)
        SetUnitPathing(DB.victim,true)
        DA.remove()
        DB.destroy()
        FlushChildHashtable(hash,GetHandleId(t))
        DestroyTimer(t)
    else
        if (distance < 245. and distance > 85.) then
            DB.ex()
            DA.replace(DB.source,DB.victim)
        elseif distance <= 85. then
            DA.remove()
            IssueTargetOrder(CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),IC_DUMMY,GetUnitX(DB.victim), GetUnitY(DB.victim), 90.),"thunderbolt",DB.victim)
            RmvSlv = CT
            
            bj_lastCreatedUnit = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), IC_DUMMY_DEBUFF,GetUnitX(DB.victim),GetUnitY(DB.victim), GetRandomReal(0.,360.))
            IssueTargetOrder(bj_lastCreatedUnit, "move",DB.victim)
            UnitAddAbility(DB.victim, IC_DEBUFF)
            srs = SomeRandomStruct.create()
            srs.eff = bj_lastCreatedUnit
            srs.target = DB.victim
            srs.time = 10.
            SaveInteger(hash,GetHandleId(RmvSlv), 0, srs)
            TimerStart(RmvSlv, 0.05, true, function RemoveSlow)
            
            SetUnitPathing(DB.victim,true)
            GroupRemoveUnit(Pull_gr, DB.victim)
            
            RmvSlv = null
            DB.destroy()
            FlushChildHashtable(hash,GetHandleId(t))
            DestroyTimer(t)
        else
            SetUnitPosition(DB.victim, GetUnitX(DB.victim)+DB.x, GetUnitY(DB.victim)+DB.y)
            DA.replace(DB.source,DB.victim)
        endif
    endif
t = null
endfunction


private bool enum_filt (){
unit en = GetFilterUnit()
bool b = false

    if (GetUnitState(en,UNIT_STATE_LIFE) > 0.045 and IsUnitEnemy(en, GetOwningPlayer(for_filter)) and not IsUnitType(en, UNIT_TYPE_STRUCTURE) and not IsUnitType(en, UNIT_TYPE_FLYING) and count != 0 and en != for_filter2)
        b = true
        count--
    endif

en = null
return b
}

void Trig_Illusion_Chains_Actions(unit caster, unit victim, timer t1) {
Pull DB = Pull.create()
Chain DA1 = Chain.create()

    DB.start_x = GetUnitX(caster)
    DB.start_y = GetUnitY(caster)
    DB.victim = victim
    DB.source = caster
    DB.angle = ABU(victim, caster)
    DB.mod = 48.
    DB.x = 20.1 * Cos(DB.angle * bj_DEGTORAD)
    DB.y = 20.1 * Sin(DB.angle * bj_DEGTORAD)
    UnitDamageTarget(caster, victim, GetHeroStr(caster, true)*2, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
    DA1.add(caster,victim)
        if IsUnitInGroup(victim,Pull_gr)
            DA1.remove()
            DB.destroy()
            DestroyTimer(t1)
            return
        else
            SetUnitPathing(victim,false)
            GroupAddUnit(Pull_gr, victim)
            saveS
            SaveInteger(hash, GetHandleId(t1),1, DA1)
            TimerStart(t1, 0.02, true, function PeriodicPull)
        endif
}

void TargetsCheck(unit s,unit v){
Trig_Illusion_Chains_Actions(s,v,CT)
if GetUnitAbilityLevel(s, IC_SKILL) > 1 then
    for_filter = s
    for_filter2 = v
    count = 2
    GroupClear(FiltGroup)
    GroupEnumUnitsInRange(FiltGroup, GetUnitX(v), GetUnitY(v), 250. ,Filter(function enum_filt))
    
    if GetUnitAbilityLevel(s, IC_SKILL) >= 2 then
    for_filter = FirstOfGroup(FiltGroup)
        if for_filter != null then
            GroupRemoveUnit(FiltGroup,for_filter)
            Trig_Illusion_Chains_Actions(s,for_filter,CT)
        endif
    endif
    
    if GetUnitAbilityLevel(s, IC_SKILL) == 3 then
    for_filter = FirstOfGroup(FiltGroup)
        if for_filter != null then
            GroupRemoveUnit(FiltGroup,for_filter)
            Trig_Illusion_Chains_Actions(s,for_filter,CT)
        endif
    endif
endif
}


function Trig_Illusion_Chains_Conditions takes nothing returns boolean
    if GetSpellAbilityId() == IC_SKILL then
        TargetsCheck(GetSpellAbilityUnit(), GetSpellTargetUnit())
    endif
return false
endfunction


//===========================================================================
function InitTrig_Illusion_Chains takes nothing returns nothing
    set gg_trg_Illusion_Chains = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Illusion_Chains, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Illusion_Chains, Condition( function Trig_Illusion_Chains_Conditions ) )
endfunction

endscope
Миниатюры
Кликните на картинку для увеличения
Название:  scr4.JPG
Просмотров: 152
Размер:  200.0 Кбайт  Кликните на картинку для увеличения
Название:  scr3.JPG
Просмотров: 189
Размер:  202.2 Кбайт  Кликните на картинку для увеличения
Название:  scr1.JPG
Просмотров: 192
Размер:  197.9 Кбайт  
Прикрепленные файлы
Тип файла: w3x IllusionChains.w3x (99.4 Кбайт, 61 просмотров )

Отредактировано Hate, 10.08.2012 в 06:06.
Старый 08.08.2012, 05:36
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Автор: Hate
Название: Веер мечей
Метод исполнения: vJass/cJass
Нужен ли JNGP: Да
MUI: Да
Применение: цель и юниты между вами
Описание:
Наносит противникам в радиусе 600 между целью и вами урон и оглушает их на 3 сек.
Время подготовки: 1 сек
Уровень 1 - Урон = сила героя * 2
Уровень 2 - Урон = сила героя * 3
Уровень 3 - Урон = сила героя * 4
скилл стража из мморпг аион
» код
// code by Hate (XGM)
// original idea of skill by NCSoft (some korean guys)

include "cj_types.j"
scope SwordStorm

define {
    private SS_SKILL = 'A000' // ability-activator
    private SS_STUN_DUMMY = 'h000' // unit-dummy
    private SS_DSTR_STR = 'B000' // destructable 1
    private SS_DSTR_UP = 'B001' // destructable 2
    private damage_lvl_1 = (GetHeroStr(s.caster, true)*2.)*GetRandomReal(0.85,1.25)
    private damage_lvl_2 = (GetHeroStr(s.caster, true)*3.)*GetRandomReal(0.85,1.25)
    private damage_lvl_3 = (GetHeroStr(s.caster, true)*4.)*GetRandomReal(0.85,1.25)
    // ^-------end-------^
    private CT = CreateTimer()
    private SetData(h,d) = SaveInteger(hash, GetHandleId(h), 0, d)
    private GetData(h) = LoadInteger(hash, GetHandleId(h), 0)
    private clear(h) = FlushChildHashtable(hash, GetHandleId(h))
    private SaveDest(h,num,d) = SaveDestructableHandle(hash, GetHandleId(h), num, d)
       
}

// globals
private hashtable hash = InitHashtable()
private group CastGroup = CreateGroup(), DmgGroup = CreateGroup()
private location loc = Location(0.,0.)
private trigger EndCastRunMain = CreateTrigger(), CastBreak = CreateTrigger()
private unit for_filt1 = null
private int g_power = 0
private force ShakeF = CreateForce(), CopyedForce = CreateForce()

private real ABU (unit A, unit B) {
    return Atan2(GetUnitY(B)-GetUnitY(A), GetUnitX(B)-GetUnitX(A))*bj_RADTODEG
}

private real ABP (real A_x,real A_y, real B_x,real B_y) {
    return Atan2(B_y-A_y, B_x-A_x)*bj_RADTODEG
}

void ForceAddForce (){
    call ForceAddPlayer(CopyedForce, GetEnumPlayer())
}

force CopyForce(force f){
CopyedForce = CreateForce()
    ForForce(f, function ForceAddForce)
return CopyedForce
}
//----------------=================-------------------
function f_end takes nothing returns nothing
    CameraClearNoiseForPlayer(GetEnumPlayer())
endfunction

function f_start_power takes nothing returns nothing
    CameraSetEQNoiseForPlayer( GetEnumPlayer(), g_power )
endfunction

void shake_time () {
force f = LoadForceHandle(hash, GetHandleId(GetExpiredTimer()), 0)
     ForForce(f, function f_end)
ForceClear(f)
clear(GetExpiredTimer())
DestroyTimer(GetExpiredTimer())
DestroyForce(f)
f = null
}

bool players_filter(){
ForceAddPlayer(ShakeF, GetOwningPlayer(GetFilterUnit()))
return false
}

void shake (unit u, real time, int power) {
group g = CreateGroup()
timer t = CreateTimer()
force f1
    GroupEnumUnitsInRange(g, GetUnitX(u),GetUnitY(u), 1050., Filter(function players_filter))
    f1 = CopyForce(ShakeF)
    SaveForceHandle(hash, GetHandleId(t), 0, f1)
    TimerStart(t, time, false, function shake_time)
    g_power = power
    ForForce(f1, function f_start_power)
DestroyGroup(g)
g = null
t = null
f1 = null
}

private texttag TextBar (string s, unit whichUnit, real size, real red, real green, real blue ) {
    bj_lastCreatedTextTag = CreateTextTag()
    SetTextTagText(bj_lastCreatedTextTag, s, (size * 0.023) / 10)
    SetTextTagPosUnit(bj_lastCreatedTextTag, whichUnit, 10)
    SetTextTagColor(bj_lastCreatedTextTag, PercentToInt(red, 255), PercentToInt(green, 255),PercentToInt(blue, 255), 0)
return bj_lastCreatedTextTag
}

private struct Cast
    unit caster = null
    texttag Bar = null
    real CastTime = 1. , One = 1./33
    int what = 0
    effect ef, ef2
    
endstruct

private struct SomeStr

    unit caster
    group FlagGroup = CreateGroup()
    real range = 0., angle
    int AbilLvl
    
    void remove (){
        this.caster = null
        GroupClear(this.FlagGroup)
        DestroyGroup(this.FlagGroup)
        this.FlagGroup = null
        this.destroy()
    }
endstruct

private void RemDestr() {
RemoveDestructable(LoadDestructableHandle(hash, GetHandleId(GetExpiredTimer()), 0))
clear(GetExpiredTimer())
DestroyTimer(GetExpiredTimer())
}

private void RemDestr2() {
int h = GetHandleId(GetExpiredTimer())
    RemoveDestructable(LoadDestructableHandle(hash, h, 0))
    RemoveDestructable(LoadDestructableHandle(hash, h, 1))
    RemoveDestructable(LoadDestructableHandle(hash, h, 2))
clear(GetExpiredTimer())
DestroyTimer(GetExpiredTimer())
}

bool GroupFilt(){ 
return (GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0.045 and IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(for_filt1)))
}

private void SS_main_loop_actions () {
SomeStr s = GetData(GetExpiredTimer())
real some, needx, needy
timer newT
    if s.range > 600.
        s.remove()
        clear(GetExpiredTimer())
        DestroyTimer(GetExpiredTimer())
    else
        
        s.range += 20.
        needx = GetUnitX(s.caster)+(s.range*Cos(s.angle*bj_DEGTORAD))
        needy = GetUnitY(s.caster)+(s.range*Sin(s.angle*bj_DEGTORAD))
        
        if s.range < 200. { bj_lastCreatedDestructable = CreateDestructable(SS_DSTR_UP,needx,needy,s.angle, 0.35, 0) }
        elseif s.range > 200. and s.range < 400. { bj_lastCreatedDestructable = CreateDestructable(SS_DSTR_UP,needx,needy,s.angle, 0.3, 0) }
        elseif s.range > 400. and s.range <= 600. { bj_lastCreatedDestructable = CreateDestructable(SS_DSTR_UP,needx,needy,s.angle, 0.25, 0) }
        SetDestructableAnimation(bj_lastCreatedDestructable,"stand")
        newT = CT
        SaveDest(newT,0,bj_lastCreatedDestructable)
        TimerStart(newT, 1.5, false, function RemDestr)
        newT = null
        
        GroupClear(DmgGroup)
        for_filt1 = s.caster
        GroupEnumUnitsInRange(DmgGroup, needx,needy, 95., Filter(function GroupFilt))
            // loop
            while (FirstOfGroup(DmgGroup) != null) {
                bj_lastCreatedUnit = FirstOfGroup(DmgGroup)
                GroupRemoveUnit(DmgGroup, bj_lastCreatedUnit)
                if not IsUnitInGroup(bj_lastCreatedUnit, s.FlagGroup)
                // ------>
                    GroupAddUnit(s.FlagGroup, bj_lastCreatedUnit)
                    if s.AbilLvl == 1 { UnitDamageTarget(s.caster,bj_lastCreatedUnit,damage_lvl_1,true,false,ATTACK_TYPE_MELEE ,DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) }
                    elseif s.AbilLvl == 2 { UnitDamageTarget(s.caster,bj_lastCreatedUnit,damage_lvl_2,true,false,ATTACK_TYPE_MELEE ,DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) }
                    elseif s.AbilLvl == 3 { UnitDamageTarget(s.caster,bj_lastCreatedUnit,damage_lvl_3,true,false,ATTACK_TYPE_MELEE ,DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) }
                    IssueTargetOrder( CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),SS_STUN_DUMMY, needx,needy,0.), "thunderbolt", bj_lastCreatedUnit )
                // <------
                endif
            }
            // end loop
    endif
}


private void CastBar(){
timer t = GetExpiredTimer()
Cast m = GetData(t)

    if m.what == 33 or not IsUnitInGroup(m.caster, CastGroup) then
        DestroyTextTag(m.Bar)
        m.caster = null
        m.destroy()
        clear(t)
        DestroyTimer(t)
    else
        SetTextTagText(m.Bar, udg_CastBar_Text[m.what], (10.5 * 0.023) / 10.)
        m.what++
    endif
    
t = null
}

private void CastProcessSimple(){
timer t = GetExpiredTimer(), t2
Cast n = GetData(t)

    if n.CastTime <= 0. then
        DestroyEffect(n.ef)
        DestroyEffect(n.ef2)
        GroupRemoveUnit(CastGroup, n.caster)
        n.caster = null
        n.destroy()
        clear(t)
        DestroyTimer(t)
        t2 = null
    elseif not IsUnitInGroup(n.caster, CastGroup) \
    or GetUnitState(n.caster, UNIT_STATE_LIFE) <= 0.045 \
    or not ((GetUnitAbilityLevel(n.caster, 'BSTN')==0) \
    and (GetUnitAbilityLevel(n.caster,'BPSE')==0) \
    and (GetUnitAbilityLevel(n.caster,'BUsl')==0) \
    and (GetUnitAbilityLevel(n.caster,'BUst')==0) \
    and (GetUnitAbilityLevel(n.caster,'BUim')==0) \
    and (GetUnitAbilityLevel(n.caster,'Bwea')==0) \
    and (GetUnitAbilityLevel(n.caster,'Bweb')==0) \
    and (GetUnitAbilityLevel(n.caster,'Bmlt')==0)) \
    then \
    // ------>
        DestroyEffect(n.ef)
        DestroyEffect(n.ef2)
        SetUnitAnimation(n.caster, "stand")
        IssueImmediateOrder(n.caster, "stop")
        n.destroy()
        clear(t)
        DestroyTimer(t)
    // <------
    else
        SetUnitAnimation(n.caster, "ready")
        n.CastTime -= 0.01
    endif
    
t = null
}

private void SS_CastStartSimple(unit caster){
Cast n = Cast.create()
Cast m = Cast.create()
timer t1 = CT, t2 = CT
    
    m.caster = caster
    n.ef = AddSpecialEffectTarget("Abilities\\Spells\\Orc\\Bloodlust\\BloodlustTarget.mdl",caster,&qu​ot;hand right")
    n.ef2 = AddSpecialEffectTarget("Abilities\\Spells\\Orc\\Bloodlust\\BloodlustTarget.mdl",caster,&qu​ot;weapon")
    n.caster = caster
    m.Bar = TextBar(udg_CastBar_Text[0], caster, 10.5, 100., 100., 100.)
    GroupAddUnit(CastGroup, caster)
    
    SetData(t1, n)
    SetData(t2, m)
    
    TimerStart(t1, 0.01,true, function CastProcessSimple)
    TimerStart(t2, 1./33. ,true, function CastBar)
    
t1 = null
t2 = null
}

void EndCastRunMain_Act(unit caster,unit target, timer t) {
SomeStr s = SomeStr.create()
real x = GetUnitX(caster), y = GetUnitY(caster), ang = ABU (caster, target), needx, needy
timer t_destr = CT
    
    needx = x+(90.*Cos((ang-50.)*bj_DEGTORAD))
    needy = y+(90.*Sin((ang-50.)*bj_DEGTORAD))
    bj_lastCreatedDestructable = \
CreateDestructableZ(SS_DSTR_STR,needx, needy,50.,ABP(needx,needy,x+(600.*Cos(ang*bj_DEGTORAD)),y+(600.*Sin(ang*bj_DEGTORAD))), 2., 0)
    SetDestructableAnimation(bj_lastCreatedDestructable,"stand")   
    SaveDest(t_destr,0, bj_lastCreatedDestructable)
    
    
    needx = x+(90.*Cos((ang+50.)*bj_DEGTORAD))
    needy = y+(90.*Sin((ang+50.)*bj_DEGTORAD))
    bj_lastCreatedDestructable = \
CreateDestructableZ(SS_DSTR_STR,needx,needy,50.,ABP(needx,needy,x+(600.*Cos(ang*bj_DEGTORAD)),y+(600​.*Sin(ang*bj_DEGTORAD))), 2., 0)
    SetDestructableAnimation(bj_lastCreatedDestructable,"stand")
    SaveDest(t_destr,1, bj_lastCreatedDestructable)
    
    
    needx = x+(120.*Cos((ang)*bj_DEGTORAD))
    needy = y+(120.*Sin((ang)*bj_DEGTORAD))
    bj_lastCreatedDestructable = \
CreateDestructableZ(SS_DSTR_STR,needx, needy,50.,ABU(caster,target), 2.1, 0)
    SetDestructableAnimation(bj_lastCreatedDestructable,"stand")
    SaveDest(t_destr,2, bj_lastCreatedDestructable)
    
    TimerStart(t_destr, 2., false, function RemDestr2)
    shake(caster, 0.95, 3)
    
    DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",need​x,needy))
    GroupAddUnit(s.FlagGroup, caster)
    s.caster = caster
    s.AbilLvl = GetUnitAbilityLevel(caster, SS_SKILL)
    s.angle = ABU(caster,target)
    SetData(t,s)
    TimerStart(t,0.005, true, function SS_main_loop_actions )
    
t_destr = null
}

bool EndCastRunMain_Conds () { 
    if GetSpellAbilityId() == SS_SKILL  { EndCastRunMain_Act(GetSpellAbilityUnit(),GetSpellTargetUnit(),CT) }
return false
}


function Trig_Sword_Storm_Actions takes nothing returns bool
if GetSpellAbilityId() == SS_SKILL { SS_CastStartSimple(GetSpellAbilityUnit()) }
return false
endfunction

function CastBreak_Conditions takes nothing returns bool
    if IsUnitInGroup(GetTriggerUnit(), CastGroup) { GroupRemoveUnit( CastGroup, GetTriggerUnit() ) }
return false
endfunction


//===========================================================================
function InitTrig_Sword_Storm takes nothing returns nothing
    gg_trg_Sword_Storm = CreateTrigger(  )
    TriggerRegisterAnyUnitEventBJ( gg_trg_Sword_Storm, EVENT_PLAYER_UNIT_SPELL_CHANNEL )
    TriggerAddCondition( gg_trg_Sword_Storm, Condition(function Trig_Sword_Storm_Actions ))
    
    TriggerRegisterAnyUnitEventBJ(EndCastRunMain, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    TriggerAddCondition(EndCastRunMain, Condition(function EndCastRunMain_Conds))
    
    TriggerRegisterAnyUnitEventBJ( CastBreak, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
     TriggerRegisterAnyUnitEventBJ( CastBreak, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
      TriggerRegisterAnyUnitEventBJ( CastBreak, EVENT_PLAYER_UNIT_ISSUED_ORDER )
    TriggerAddCondition( CastBreak, Condition( function CastBreak_Conditions ) )
endfunction

endscope

library CastBar initializer barInit
string array udg_CastBar_Text[34]

private void barInit() {
set udg_CastBar_Text[0] = "|cff333333'''''''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[1] = "|cffffae00'|r|cff333333''''''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[2] = "|cffffae00'|r|cff333333''''''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[3] = "|cffffae00''|r|cff333333'''''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[4] = "|cffffae00'''|r|cff333333''''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[5] = "|cffffae00''''|r|cff333333'''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[6] = "|cffffae00'''''|r|cff333333''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[7] = "|cffffae00''''''|r|cff333333'''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[8] = "|cffffae00'''''''|r|cff333333''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[9] = "|cffffae00''''''''|r|cff333333'''''''''''''''''''''''''|r"
 set udg_CastBar_Text[10] = "|cffffae00'''''''''|r|cff333333''''''''''''''''''''''''|r"
 set udg_CastBar_Text[11] = "|cffffae00''''''''''|r|cff333333'''''''''''''''''''''''|r"
 set udg_CastBar_Text[12] = "|cffffae00''''''''''''|r|cff333333'''''''''''''''''''''|r"
 set udg_CastBar_Text[13] = "|cffffae00'''''''''''''|r|cff333333''''''''''''''''''''|r"
 set udg_CastBar_Text[14] = "|cffffae00''''''''''''''|r|cff333333'''''''''''''''''''|r"
 set udg_CastBar_Text[15] = "|cffffae00'''''''''''''''|r|cff333333''''''''''''''''''|r"
 set udg_CastBar_Text[16] = "|cffffae00''''''''''''''''|r|cff333333'''''''''''''''''|r"
 set udg_CastBar_Text[17] = "|cffffae00'''''''''''''''''|r|cff333333''''''''''''''''|r"
 set udg_CastBar_Text[18] = "|cffffae00''''''''''''''''''|r|cff333333'''''''''''''''|r"
 set udg_CastBar_Text[19] = "|cffffae00'''''''''''''''''''|r|cff333333''''''''''''''|r"
 set udg_CastBar_Text[20] = "|cffffae00''''''''''''''''''''|r|cff333333'''''''''''''|r"
 set udg_CastBar_Text[21] = "|cffffae00'''''''''''''''''''''|r|cff333333''''''''''''|r"
 set udg_CastBar_Text[22] = "|cffffae00''''''''''''''''''''''|r|cff333333'''''''''''|r"
 set udg_CastBar_Text[23] = "|cffffae00'''''''''''''''''''''''|r|cff333333''''''''''|r"
 set udg_CastBar_Text[24] = "|cffffae00''''''''''''''''''''''''|r|cff333333'''''''''|r"
 set udg_CastBar_Text[25] = "|cffffae00'''''''''''''''''''''''''|r|cff333333''''''''|r"
 set udg_CastBar_Text[26] = "|cffffae00''''''''''''''''''''''''''|r|cff333333'''''''|r"
 set udg_CastBar_Text[27] = "|cffffae00'''''''''''''''''''''''''''|r|cff333333''''''|r"
 set udg_CastBar_Text[28] = "|cffffae00''''''''''''''''''''''''''''|r|cff333333'''''|r"
 set udg_CastBar_Text[29] = "|cffffae00'''''''''''''''''''''''''''''|r|cff333333''''|r"
 set udg_CastBar_Text[30] = "|cffffae00''''''''''''''''''''''''''''''|r|cff333333'''|r"
 set udg_CastBar_Text[31] = "|cffffae00'''''''''''''''''''''''''''''''|r|cff333333''|r"
 set udg_CastBar_Text[32] = "|cffffae00''''''''''''''''''''''''''''''''|r|cff333333'|r"
 set udg_CastBar_Text[33] = "|cffffae00'''''''''''''''''''''''''''''''''|r|cff333333|r"
}
endlibrary
Автор: Hate
Название: Хранитель
Метод исполнения: vJass/cJass
Нужен ли JNGP: Да
MUI: Да
Применение: союзная цель
Описание:
Создает защитный барьер который поглощает входящий урон. Действует 10 сек или до того как поглотит максимум урона.
Уровень 1 - 1000 урона
Уровень 2 - 2000 урона
Уровень 3 - 3000 урона
скилл стража из мморпг аион
» код
// code by Hate (XGM)
// original idea of skill by NCSoft (some korean guys)
// shield model by Judash (hiveworkshop)

include "cj_types.j"
scope PanoplyOfProtection

define {
    private POP_SKILL = 'A002' // ability-activator
    private POP_BUFF_SKILL = 'A003' // ability for buff
    private POP_BUFF = 'B000' // buff
    private POP_DUMMY = 'h001' // for special effect
    private BuffTime_lvl1 = 10. // time of buff
    private BuffTime_lvl2 = 10.
    private BuffTime_lvl3 = 10.
    private Absorb_lvl1 = 1000 // absorb amount
    private Absorb_lvl2 = 2000
    private Absorb_lvl3 = 3000
    // ^-------end-------^
    private SetData(h,d) = SaveInteger(hash, GetHandleId(h), 0, d)
    private GetData(h) = LoadInteger(hash, GetHandleId(h), 0)
    private clear(h) = FlushChildHashtable(hash, GetHandleId(h))
    private msg(s) = DisplayTextToForce(bj_FORCE_ALL_PLAYERS, "|c000099FFDebug Skill (Panoply Of Protection): "+s+"|r")
}

// globals
private trigger TakeDamage = CreateTrigger(), UselessUnits = CreateTrigger()
private group MainGroup = CreateGroup()
private real dmg, absorb, residue
private timer tm = CreateTimer(), someTimer
private hashtable hash = InitHashtable()
private unit need = null


struct BuffTimeStruct
    unit target
    real time
    
   static thistype new(unit A, real abil_lvl){
        thistype NewStruct = thistype.create()
        NewStruct.target = A
        
            if abil_lvl == 1 { 
                NewStruct.time = BuffTime_lvl1 
                SetData(A, Absorb_lvl1)
                }
            elseif abil_lvl == 2 { 
                NewStruct.time = BuffTime_lvl2 
                SetData(A, Absorb_lvl2)
                }
            elseif abil_lvl == 3 { 
                NewStruct.time = BuffTime_lvl3 
                SetData(A, Absorb_lvl3)
            }
        
        return NewStruct
    }
    
endstruct

struct FullStruct
    unit target
    real abs, dm
    
   static thistype new(unit A, real ab, real dg){
        thistype NewStruct = thistype.create()
        NewStruct.target = A
        NewStruct.abs = ab
        NewStruct.dm = dg
        return NewStruct
    }
    
endstruct

void AddSound(string s, real x, real y) {
sound snd = CreateSound(s, false, true, true, 10, 10, "CombatSoundsEAX")
    SetSoundChannel(snd, 40)
    SetSoundVolume(snd, 127)
    SetSoundPitch(snd, 1)
    SetSoundDistances(snd, 600, 10000)
    SetSoundDistanceCutoff(snd, 2100)
    SetSoundConeAngles(snd, 0.0, 0.0, 127)
    SetSoundConeOrientation(snd, 0.0, 0.0, 0.0)
    SetSoundPosition(snd, x, y, 50)
    StartSound(snd)
    KillSoundWhenDone(snd)
snd = null
}

private real ABU (unit A, unit B) {
    return Atan2(GetUnitY(B)-GetUnitY(A), GetUnitX(B)-GetUnitX(A))*bj_RADTODEG
}

void BuffTick (){
BuffTimeStruct bts = GetData(GetExpiredTimer())
real AbsorbAmount = GetData(bts.target)

    if (bts.time <= 0. or GetUnitAbilityLevel(bts.target,POP_BUFF ) == 0 or AbsorbAmount <= 0)
        UnitRemoveAbility(bts.target,POP_BUFF_SKILL)
        UnitRemoveAbility(bts.target,POP_BUFF)
        clear(bts.target)
        bts.target = null
        bts.destroy()
        clear(GetExpiredTimer())
        DestroyTimer(GetExpiredTimer())
    else
        bts.time -= 0.1
    endif
    
}

void UselessUnits_Actions(){
    if IsUnitInGroup(GetTriggerUnit(),MainGroup) { GroupRemoveUnit(MainGroup,GetTriggerUnit()) }
}

void ReversVulnerable(){
    SetUnitInvulnerable(need, false)
}

// this runned if unit have full life
void PanoplyOfProtection_FullLifeCheck () {
FullStruct fs = GetData(GetExpiredTimer())

    if fs.abs > fs.dm
        SetUnitState(fs.target, UNIT_STATE_LIFE, GetUnitState(fs.target, UNIT_STATE_LIFE)+fs.dm)
        SetData(fs.target, GetData(fs.target)-R2I(fs.dm))
    elseif fs.abs < fs.dm
        //dmg = dmg - (dmg - absorb)
        SetUnitState(fs.target, UNIT_STATE_LIFE, GetUnitState(fs.target, UNIT_STATE_LIFE)+(fs.dm - (fs.dm - fs.abs)))
        SetData(fs.target, 0)
    endif
    
fs.target = null
fs.destroy()
clear(GetExpiredTimer())
DestroyTimer(GetExpiredTimer())
}

// main func
void PanoplyOfProtection_MainActions(){
FullStruct fs
real angle, HP

    if (GetEventDamage() > 0 and GetUnitAbilityLevel(GetTriggerUnit(), POP_BUFF) > 0)
        need = GetTriggerUnit()
        
        angle = ABU(need,GetEventDamageSource())
        bj_lastCreatedUnit = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), POP_DUMMY, GetUnitX(need)+(17.*Cos(angle*bj_DEGTORAD)), GetUnitY(need)+(17.*Sin(angle*bj_DEGTORAD)), angle)
        SetUnitPathing(bj_lastCreatedUnit, false)
        SetUnitX(bj_lastCreatedUnit,GetUnitX(need)+(16.*Cos(angle*bj_DEGTORAD)))
        SetUnitY(bj_lastCreatedUnit,GetUnitY(need)+(16.*Sin(angle*bj_DEGTORAD)))
        UnitAddAbility(bj_lastCreatedUnit, 'Arav')
        SetUnitFlyHeight(bj_lastCreatedUnit, GetUnitFlyHeight(need)+3.,0.)
        AddSound("Abilities\\Spells\\Orc\\MirrorImage\\MirrorImage.wav",GetUnitX(need), GetUnitY(need))
        
        absorb = GetData(need)
        HP = GetUnitState(need, UNIT_STATE_LIFE)
        dmg = GetEventDamage()
        
        // =========================
        debug msg("absorb = "+R2S(absorb))
        // =========================
        
        if HP == GetUnitState(need, UNIT_STATE_MAX_LIFE)
            // =========================
            debug msg("victim has full hp")
            debug msg("damage is = "+R2S(dmg))
            debug msg("absorb+hp = "+R2S(HP + absorb))
            // =========================
            if dmg > HP
            debug msg("damage can't be normal absorbed because damage higer than hp")
                residue = (dmg - absorb)
                if residue > HP
                    // =========================
                    debug msg("residue bigger than hp (damage higest than absorb amount and hp). Unit must die =(")
                    // =========================
                else
                    // =========================
                    debug msg("residue lower than hp. No need to die, but absorb shield is broken!")
                    // =========================    
                    SetUnitState(need, UNIT_STATE_LIFE, (HP-residue))
                    SetData(need, 0)
                    SetUnitInvulnerable(need, true)
                    TimerStart(tm, 0.000, false, function ReversVulnerable)
                endif
            else
                someTimer = CreateTimer()
                fs = FullStruct.new(need,absorb,dmg)
                SetData(someTimer, fs)
                TimerStart(someTimer, 0.0, false, function PanoplyOfProtection_FullLifeCheck)
            endif
        else
            if dmg > HP
                residue = (absorb+HP)-dmg
                // =========================
                debug msg("damage can't be normal absorbed because damage higer than hp")
                debug msg("victim not have full hp")
                debug msg("damage is = "+R2S(dmg))
                debug msg("absorb+hp = "+R2S(HP + absorb))
                debug msg("residue is "+R2S(residue))
                // =========================
                if residue < 0.
                    debug msg("residue lower than 0. Unit must die =(")
                elseif residue > 0.
                    debug msg("residue higer than 0. Absorb shield may be broken!")
                    // =========================
                    SetUnitInvulnerable(need, true)
                    TimerStart(tm, 0.000, false, function ReversVulnerable)
                    SetData(need, GetData(need)-R2I(dmg))
                    if GetData(need) < 0 { SetUnitState(need, UNIT_STATE_LIFE, HP-(dmg - absorb)) }
                endif
            elseif absorb > dmg
                // =========================
                debug msg("damage is = "+R2S(dmg))
                debug msg("absorb is = "+R2S(absorb))
                // =========================
                SetUnitState(need, UNIT_STATE_LIFE, HP+dmg)
                SetData(need, GetData(need)-R2I(dmg))
            elseif absorb < dmg
                SetUnitState(need, UNIT_STATE_LIFE, HP+(dmg - (dmg - absorb)))
                SetData(need, 0)
            endif
        endif
    endif
    
}

// extend true conditions func
void Trig_PanoplyOfProtection_Actions_extend (unit target, int a_lvl){
BuffTimeStruct bts = BuffTimeStruct.new(target, a_lvl)

UnitAddAbility(target,POP_BUFF_SKILL)
someTimer = CreateTimer()
SetData(someTimer, bts)
TimerStart(someTimer, 0.1, true, function BuffTick)
    
    
    if IsUnitInGroup(target, MainGroup)
    else
        GroupAddUnit(MainGroup, target)
        TriggerRegisterUnitEvent(TakeDamage,target,EVENT_UNIT_DAMAGED)
    endif
}

// condition func
function Trig_PanoplyOfProtection_Actions takes nothing returns bool
    if GetSpellAbilityId() == POP_SKILL { Trig_PanoplyOfProtection_Actions_extend (GetSpellTargetUnit(),GetUnitAbilityLevel(GetSpellAbilityUnit(),POP_SKILL)) }
return false
endfunction

//===========================================================================
function InitTrig_PanoplyOfProtection takes nothing returns nothing
    gg_trg_PanoplyOfProtection = CreateTrigger()
    TriggerRegisterAnyUnitEventBJ(gg_trg_PanoplyOfProtection, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    TriggerAddCondition(gg_trg_PanoplyOfProtection, Condition(function Trig_PanoplyOfProtection_Actions))
    
    TriggerAddAction( TakeDamage, function PanoplyOfProtection_MainActions )
    
    TriggerRegisterAnyUnitEventBJ(UselessUnits, EVENT_PLAYER_UNIT_DEATH)
    TriggerAddAction( UselessUnits, function UselessUnits_Actions )
endfunction

endscope
Миниатюры
Кликните на картинку для увеличения
Название:  POP_scr1.jpg
Просмотров: 92
Размер:  447.4 Кбайт  Кликните на картинку для увеличения
Название:  ss_scr3.JPG
Просмотров: 127
Размер:  180.7 Кбайт  Кликните на картинку для увеличения
Название:  ss_scr2.JPG
Просмотров: 68
Размер:  164.5 Кбайт  Кликните на картинку для увеличения
Название:  ss_scr1.JPG
Просмотров: 99
Размер:  166.5 Кбайт  Кликните на картинку для увеличения
Название:  POP_scr2.JPG
Просмотров: 82
Размер:  180.5 Кбайт  

Прикрепленные файлы
Тип файла: w3x Sword Storm and Panoply of Protection.w3x (73.9 Кбайт, 58 просмотров )
Старый 14.08.2012, 22:54
влад10011

offline
Опыт: 2,337
Активность:
Название: Omnislash
Метод исполнения: Jass
Нужен ли JNGP: Да
Применение: Без цели
MUI: Конечно
Описание: Ну наверняка на этом сайте куча задротов в доту и знают описание ну если в краце:Кастер становится неуязвимым и прыгает от врага к врагу нанося урон после 8 ударов снова становится уязвим.
Количество уровней(1)
Вызов заклинания на цель(buff), нет
Дополнительные аргументы: нет(только настройка в разделе globals)
Перезалил спелл баги удалены!
Как запихивать в спойлер текст?

  1. Код:
    globals
    constant string S="Attack Slam" //Анимация аттаки в кавычках
    //Путь к эффекту который крепится на Аттач Weapon
    constant string Weapon="Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl"
    //Путь к эффекту который крепится на Аттач Hand Left
    constant string HandLeft="Abilities\\Spells\\NightElf\\Barkskin\\BarkSkinTarget.mdl"
    constant string Blink="Abilities\\Spells\\NightElf\\Blink\\BlinkCaster.mdl"
    constant integer Spell='Spel' //Рав-код спелла(смотреть в редакторе объектов Ctrl+D)
    constant integer KK=8 //Максимум прыжков или лимит
    integer array Bulka[1000]
    //integer array TimeOff
    integer Inits=0 //Нужно для инициализации таймера
    integer Count=0 //Это и то что ниже с array Нужно для того чтобы он был MUI
    integer array K[1000]
    timer T=CreateTimer() //Создаём таймер
    //timer Remove=CreateTimer()
    unit array Caster[1000]
    effect array E[1000]
    effect array E2[1000]
    effect array E3[1000]
    real array X[1000]
    real array Y[1000] //Делаю через x y чтобы не засорять место в памяти через "GetUnitLoc"
    //constant real Sek=10.00 //Время действия спелла(если вы ещё не исчерпали лимит прыжков)
    constant real JumpSek=0.30 //Каждые "JumpSek" кастеры будут прыгать в данном случае 0.30
    constant real Dammag=30 //Урон за прыжог
    constant real Range=450 //Радиус прыжка
    //------------------------------------------
    //====================Настройка Цвета кастера при касте==========
    //Поставте всё на 100 и прозрачность на 0 чтобы не менять цвет
    constant real ColorRed=25.00 //Оттенок Красного
    constant real ColorGreen=25.00 //Оттенок Зелёного
    constant real ColorBlue=100.00 //Оттенок Синего
    constant real ColorTransparent=18.00 //Прозрачность
    endglobals
    
    function AddCaster takes unit u returns nothing
    set K[Count]=0
    set Caster[Count]=u
    call SetUnitVertexColorBJ( Caster[Count], ColorRed, ColorGreen, ColorBlue, ColorTransparent )
    //set TimeOff[Count]=0
    call SetUnitInvulnerable( u, true )
    set E[Count]=AddSpecialEffectTargetUnitBJ( "weapon", u, Weapon )
    set E2[Count]=AddSpecialEffectTargetUnitBJ( "hand left", u, HandLeft )
    set Count=Count+1
    endfunction
    
    function RemoveCaster takes integer i returns nothing
    call DestroyEffect(E[i])
    call DestroyEffect(E2[i])
    call DestroyEffect(E3[i])
    call SetUnitInvulnerable( Caster[i], false )
    call SetUnitVertexColorBJ( Caster[i], 100.00, 100.00, 100, 0.00 )
    //set TimeOff[i]=0
    set Count=Count-1
    set Caster[i]=Caster[Count]
    //set TimeOff[i]=TimeOff[Count]
    set K[i]=K[Count]
    set E[i]=E[Count]
    set E2[i]=E2[Count]
    set E3[i]=E3[Count]
    endfunction
    
    function CallRemoveBlink takes nothing returns nothing
    local integer i=0
    local timer t=GetExpiredTimer()
    loop
    exitwhen i == Count
    if Bulka[i] == 1
    set Bulka[i]=2
    endif
    if Bulka[i] == 2
    set Bulka[i]=0
    call DestroyEffect(E3[i])
    endif
    set i=i+1
    endloop
    call DestroyTimer(t)
    set t=null
    endfunction
    
    //function CallRemoveSpell takes nothing returns nothing
    //local integer i=0
    //loop
    //exitwhen i == Count
    //set TimeOff[i]=TimeOff[i]+1
    //set i=i+1
    //endloop
    //endfunction
    
    function Kaka2 takes nothing returns boolean
    return GetBooleanAnd( ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(Caster[0])) == true ), ( IsUnitDeadBJ(GetFilterUnit()) == false ) )
    endfunction
    
    function Kaka takes nothing returns boolean
        return GetBooleanAnd( ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false ), Kaka2() )
    endfunction
    
    function Jump takes nothing returns nothing
    local timer t
    local integer i=0
    local unit u
    local real x
    local real y
    local group g
    local location loc
    loop
    exitwhen i == Count
    if K[i] != KK
    //if TimeOff != Sek 
    set X[i]=GetUnitX(Caster[i])
    set Y[i]=GetUnitY(Caster[i])
    set loc=Location(X[i],Y[i])
    set g=GetUnitsInRangeOfLocMatching(Range,loc, Condition(function Kaka))
    call RemoveLocation(loc)
    set u=GroupPickRandomUnit(g)
    call DestroyGroup(g)
    if u != null 
    set t=CreateTimer()
    set Bulka[i]=1
    set E3[i]=AddSpecialEffectTarget(Blink,Caster[i],"chest")
    set x=GetUnitX(u)
    set y=GetUnitY(u)
    call SetUnitPosition(Caster[i],x,y)
    call SetUnitFacing(Caster[i],bj_RADTODEG * Atan2(GetUnitY(u) - GetUnitY(Caster[i]), GetUnitX(u) - GetUnitX(Caster[i])))
    call SetUnitAnimation( Caster[i], S )
    call UnitDamageTargetBJ( Caster[i], u, Dammag, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
    call TimerStart(t, 0.25, false, function CallRemoveBlink)
    set K[i]=K[i]+1
    else
    call RemoveCaster(i) //Удаление кастера из массива
    set i=i-1
    endif
    //else
    //call RemoveCaster(i) 
    //set i=i-1
    //endif
    else
    call RemoveCaster(i) //Удаление кастера из массива
    set i=i-1
    endif
    set u=null
    set i=i+1
    endloop
    set t=null
    set loc=null
    set g=null
    endfunction
    
    function Trig_SpellJigirnaut_Conditions takes nothing returns boolean
        if ( not ( GetSpellAbilityId() == Spell ) ) then
            return false
        endif
        return true
    endfunction
    
    function Trig_SpellJigirnaut_Actions takes nothing returns nothing
    local unit u=GetSpellAbilityUnit()
    //Инициализация таймера
    //---------------------------------------------------
    if Inits == 0
    call TimerStart(T, JumpSek, true, function Jump)
    //call TimerStart(Remove, 1.00, true, function CallRemoveSpell)
    set Inits=Inits+1 
    endif
    //----------------------------------------------------
    //Добавляем юнита в массив чтобы он прыгал 
    call AddCaster(u)
    set u=null
    endfunction
    
    //===========================================================================
    function InitTrig_SpellJigirnaut takes nothing returns nothing
        set gg_trg_SpellJigirnaut = CreateTrigger(  )
        call TriggerRegisterAnyUnitEventBJ( gg_trg_SpellJigirnaut, EVENT_PLAYER_UNIT_SPELL_EFFECT )
        call TriggerAddCondition( gg_trg_SpellJigirnaut, Condition( function Trig_SpellJigirnaut_Conditions ) )
        call TriggerAddAction( gg_trg_SpellJigirnaut, function Trig_SpellJigirnaut_Actions )
    endfunction
Прикрепленные файлы
Тип файла: w3x SpellJigirnauta.w3x (19.2 Кбайт, 23 просмотров )

Отредактировано влад10011, 22.08.2012 в 22:15.
Старый 22.08.2012, 16:29
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 10:47.