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

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

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

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

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

Ответ
 
weaver
ПочемусерверХГМ тормозит?
offline
Опыт: 4,000
Активность:
Название:РАсенган
Метод исполнения:Гуй
Нужен ли JNGP: да
Тип цели:враг
Результат применения: Кастер начиная кастовать заклинания замирает на несколько секунд и летит прямо в цель с огромной энергией в руке ,после того как кастер достиг цели он отталкивает цель на случайные градусы и наносит урон равные 150Хуровень абилити,в результате взрыва наносится урон всем юнитом рядом с целью равной 150.
Количество уровней:бесконечность.
в карте пристсвтует отличная модель наруто,якобы героя анимэ.
weaver добавил:
МегаДотер:
не срабатывает если юнит находится в оглушении.
что тут особенного?всего лишь проверка волшебства.
Прикрепленные файлы
Тип файла: w3x Rasengan.w3x (82.7 Кбайт, 74 просмотров )
Старый 08.06.2011, 18:33
DualShock

offline
Опыт: 5,023
Активность:
Вот сдал экзамены (на отлично), выкладываю свой спеллпак простых заклинаний. Простых потому что недавно перешел на vjass.
Метод исполнения: vjass
Нужен ли JNGP: Да
Тип цели: юнит / точка
Кол-во заклинаний: 12
Обновлено
Миниатюры
Кликните на картинку для увеличения
Название:  Screenshot.JPG
Просмотров: 379
Размер:  99.2 Кбайт  Кликните на картинку для увеличения
Название:  Screenshot0.JPG
Просмотров: 196
Размер:  137.3 Кбайт  Кликните на картинку для увеличения
Название:  ScreenShot2.JPG
Просмотров: 105
Размер:  175.2 Кбайт  
Прикрепленные файлы
Тип файла: w3x Simple SpellPack.w3x (114.3 Кбайт, 165 просмотров )

Отредактировано DualShock, 11.06.2011 в 17:30.
Старый 08.06.2011, 22:39
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
bee, открыл карту в jnpg нажал проверить и вылетает фатал эрор вара...
Старый 12.06.2011, 15:01
Doc

offline
Опыт: 63,163
Активность:
Srezik, пересохрани.
Старый 12.06.2011, 15:21
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
Doc, пересохранил, теперь сразу вылетает на главное меню варки )
Старый 12.06.2011, 15:25
Helpmeplz

offline
Опыт: 11,738
Активность:
Название: Blood Hurricane
Способ исполнения: vJass
MUI: да
Нужен JNPG: да

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

GUI вариант можете найти в архиве XGM Spell Contest 3.

Настройки:
  • Область воздействия
  • Урон в секунду
  • Высота полета
  • Скорость вращения
Прикрепленные файлы
Тип файла: w3x Blood Hurricane v0.4 vJass.w3x (45.1 Кбайт, 71 просмотров )
Старый 24.06.2011, 18:16
HappyDeath

offline
Опыт: 372
Активность:
Helpmeplz,
Красивый скил, в имба доте у джагернаута почти такой только без крави.
Старый 26.06.2011, 01:55
Hu_R_R_icane
ザバーニーヤ ~ 妄想心音
offline
Опыт: 6,092
Активность:
Спеллпак героя из аниме "To Aru Majutsu no Index" (Индекс Волшебства), Стайла Магнуса. Содержит четыре заклинания.
Делал я, все титры, лавры, тапки и критику мне.
» Первое:
Название: Огненный Шар
Способ исполнения: GUI
MUI: да
Описание: выпускает огненный шар, который наносит урон всем противникам в области. Шар взрывается, столкнувшись с вражеским юнитом.
Урон и радиус взрыва настраиваемые, изначально 3/6/9хИнтеллект и 300 АоЕ.
3 уровня
» Второе:
Название: Круг Рун
Способ исполнения: GUI
MUI: да
Описание: устанавливает круг рун в области, все противники оказавшиеся в круге, в момент его создания теряют возможность применять заклинания на 5/6/7 секунд, также получая 50 урона, пока находятся в круге. Если Огненный шар взорвется в круге, все противники в нем получат дополнительно 300/500/700 урона. Длительность круга: 5/6/7 секунд.
3 уровня
» Третий:
Название: Мастерство Мага
Способ исполнения: GUI
MUI: да
Описание: пассивная способность, увеличивающая скорость восстановления маны, добавляющая 10/20/30 интеллекта и увеличивающая урон, наносимый "Огненным Шаром" на 200/400/600.
3 уровня
» Четвертый:
Название: Иннокентий
Способ исполнения: GUI
MUI: да
Описание: призывает духа огня, следующего за героем, который наносит 130 урона за удар, обладает 2000 здоровья и 30 единицами защиты типа "герой". Также дух обладает заклинаниями: Огонь (100 урона в секунду, 400 АоЕ) и Пламя (волна, 900 урона, 50 урона в секунду, 5 секунд). Дух длится 30 секунд, при этом теряет 1% здоровья в секунду. Герой неуязвим, пока действует дух.
Если дух входит в "Круг Рун" его здоровье пополняется на 25% от максимального.
1 уровень
Просьба по поводу качества особо не лютовать, первые мои попытки сделать более-менее нормальные активные спеллы.
Прикрепленные файлы
Тип файла: w3x Стайл Магнус.w3x (437.6 Кбайт, 108 просмотров )
Старый 27.06.2011, 20:57
DualShock

offline
Опыт: 5,023
Активность:
Название: Shuriken
Метод исполнения: vjass
Нужен ли JNGP: Да
Тип цели: точка
Описание: Бросает в указанном направлении сирюкен, дамажит всех на пути и вызывает кровотечение, замедляет на 30%.
С виду очень простой спелл, но я сделал его как можно более настраиваемым.
обновлено до v1.01
И пожалуйста если вам понравился мой спелл, то не поленитесь поставить плюсик =P
Прикрепленные файлы
Тип файла: w3x Shuriken.w3x (32.2 Кбайт, 108 просмотров )

Отредактировано DualShock, 02.07.2011 в 22:12.
Старый 30.06.2011, 19:39
Zanozus
Уехал учиться
offline
Опыт: 8,512
Активность:
Название: Канал
Метод исполнения: vJass
Нужен ли JNGP: обязательно
Тип цели: точка
Количество уровней: 1
Описание:
Герой создает канал от героя в указанном направлени на расстояние 1000.
Союзник попавший в канал быстро перемещается к его концу. Во время движения по каналу юнит
находится в астрале.
(это не импорт)
» код
library Spiral initializer Init

struct rotation
real x1
real y1
real z1
real x2
real y2
real z2

method dist takes nothing returns real
return SquareRoot((.x2-.x1)*(.x2-.x1)+(.y2-.y1)*(.y2-.y1))
endmethod

method AxisX takes real a,real d returns nothing
if d==0.00 then
 set .y2=.y1+(.y2-.y1)*CosBJ(a)+(.z2-.z1)*SinBJ(a)
 set .z2=.z1+(.z2-.z1)*CosBJ(a)-(.y2-.y1)*SinBJ(a)
else
 set .x2=.x1
 set .y2=.y1+d*CosBJ(a)
 set .z2=.z1+d*SinBJ(a)
 endif
endmethod

method AxisY takes real a,real d returns nothing
if d==0.00 then
 set .x2=.x1+(.x2-.x1)*CosBJ(a)-(.z2-.z1)*SinBJ(a)
 set .z2=.z1+(.z2-.z1)*CosBJ(a)+(.x2-.x1)*SinBJ(a)
else
 set .x2=.x1+d*CosBJ(a)
 set .y2=.y1
 set .z2=.z1+d*SinBJ(a)
endif
endmethod

method AxisZ takes real a,real d returns nothing
if d==0.00 then
 set .x2=.x1+(.x2-.x1)*CosBJ(a)-(.y2-.y1)*SinBJ(a)
 set .y2=.y1+(.y2-.y1)*CosBJ(a)+(.x2-.x1)*SinBJ(a)
else
 set .x2=.x1+d*CosBJ(a)
 set .y2=.y1+d*SinBJ(a)
 set .z2=.z1
endif
endmethod

endstruct

globals
private constant integer SpellID='A000'
private constant integer Dummy1ID='u000'
private constant integer Dummy2ID='u001'
private constant integer Dummy3ID='u002'
private constant integer BuffID='B001'
private constant string SpellOrder="channel"
private constant real Ra=80.00
private group G=CreateGroup()
private group H=CreateGroup()
private hashtable HT=InitHashtable()
private real R=1.20
endglobals

private function Motion3 takes nothing returns nothing
local unit eu=GetEnumUnit()
local unit u=LoadUnitHandle(HT,GetHandleId(eu),1)
local rotation rotate=rotation.create()
set rotate.x1=GetUnitX(eu)
set rotate.y1=GetUnitY(eu)
set rotate.x2=GetUnitX(u)
set rotate.y2=GetUnitY(u)
if rotate.dist()<=150 and GetUnitState(u,UNIT_STATE_LIFE)!=0 and GetUnitState(eu,UNIT_STATE_LIFE)!=0 and GetUnitCurrentOrder(eu)!=OrderId(SpellOrder) then
 call rotate.AxisZ(GetUnitFacing(u),25)
 if not IsTerrainPathable(rotate.x2,rotate.y2,PATHING_TYPE_WALKABILITY) then
  call SetUnitX(eu,rotate.x2)
  call SetUnitY(eu,rotate.y2)
 endif
else
 call FlushChildHashtable(HT,GetHandleId(eu))
 call UnitRemoveAbility(eu,BuffID)
 call GroupRemoveUnit(H,eu)
endif
call rotate.destroy()
set eu=null
set u=null
endfunction

private function Motion2 takes nothing returns nothing
local unit eu=GetEnumUnit()
local integer h=LoadInteger(HT,GetHandleId(eu),1)
local real a=GetUnitFacing(eu)
local real b=LoadReal(HT,GetHandleId(eu),2)+7.00
local rotation rotate=LoadInteger(HT,h,2)
call rotate.AxisX(b,Ra)
call rotate.AxisZ(a,0.00)
if not IsTerrainPathable(rotate.x2,rotate.y2,PATHING_TYPE_FLYABILITY) then
 call SetUnitX(eu,rotate.x2)
 call SetUnitY(eu,rotate.y2)
endif
call SetUnitFlyHeight(eu,rotate.z2,0.00)
call SaveReal(HT,GetHandleId(eu),2,b)
set eu=null
endfunction

private function Motion1 takes nothing returns nothing
local unit eu=GetEnumUnit()
local group g=LoadGroupHandle(HT,GetHandleId(eu),1)
local real a=GetUnitFacing(eu)
local rotation rotate=LoadInteger(HT,GetHandleId(eu),2)
set rotate.x1=GetUnitX(eu)
set rotate.y1=GetUnitY(eu)
set rotate.z1=GetUnitFlyHeight(eu)
call rotate.AxisZ(a,8.00)
if not IsTerrainPathable(rotate.x2,rotate.y2,PATHING_TYPE_FLYABILITY) then
 call SetUnitX(eu,rotate.x2)
 call SetUnitY(eu,rotate.y2)
endif
set rotate.x1=rotate.x2
set rotate.y1=rotate.y2
call ForGroup(g,function Motion2)
set eu=null
set g=null
endfunction

private function CreateSpiral2 takes nothing returns nothing
local group g1=LoadGroupHandle(HT,GetHandleId(GetEnumUnit()),1)
call ForGroup(g1,function Motion1)
set g1=null
endfunction

private function Act5 takes nothing returns nothing
local unit u=LoadUnitHandle(HT,GetHandleId(GetTriggeringTrigger()),1)
local player p=GetOwningPlayer(u)
local unit tu=GetTriggerUnit()
local unit d
if GetUnitCurrentOrder(tu)!=OrderId(SpellOrder) and IsUnitAlly(tu,p) and GetUnitState(u,UNIT_STATE_LIFE)!=0 and GetUnitState(tu,UNIT_STATE_LIFE)!=0 then
call SaveUnitHandle(HT,GetHandleId(tu),1,u)
 if not IsUnitInGroup(tu,H) then
  call GroupAddUnit(H,tu)
  set d=CreateUnit(p,Dummy3ID,GetUnitX(tu),GetUnitY(tu),0.00)
  call IssueTargetOrder(d,"banish",tu)
  set d=null
 endif
endif
set u=null
set p=null
set tu=null
endfunction

private function CreateSpiral1 takes nothing returns nothing
local unit u1
local unit u2
local unit eu=GetEnumUnit()
local player p=GetOwningPlayer(eu)
local real a=LoadReal(HT,GetHandleId(eu),2)
local group g1=LoadGroupHandle(HT,GetHandleId(eu),1)
local group g2=CreateGroup()
local trigger tr=CreateTrigger()
local integer i=1
local rotation rotate=rotation.create()

set rotate.x1=GetUnitX(eu)
set rotate.y1=GetUnitY(eu)
set rotate.z1=GetUnitFlyHeight(eu)+Ra
set u1=CreateUnit(p,Dummy1ID,rotate.x1,rotate.y1,a)
call SetUnitFlyHeight(u1,rotate.z1,0.00)
loop
 call rotate.AxisX(i*120.00,Ra)
 call rotate.AxisZ(a,0.00)
 set u2=CreateUnit(p,Dummy2ID,rotate.x2,rotate.y2,a)
 call SetUnitFlyHeight(u2,rotate.z2,0.00)
 call SaveInteger(HT,GetHandleId(u2),1,GetHandleId(u1))
 call SaveReal(HT,GetHandleId(u2),2,i*120.00)
 call GroupAddUnit(g2,u2)
 set i=i+1
exitwhen i>3
endloop

call SaveGroupHandle(HT,GetHandleId(u1),1,g2)
call SaveInteger(HT,GetHandleId(u1),2,rotate)
call TriggerRegisterUnitInRange(tr,u1,Ra,null)
call TriggerAddAction(tr,function Act5)
call SaveTriggerHandle(HT,GetHandleId(u1),3,tr)
call SaveUnitHandle(HT,GetHandleId(tr),1,u1)
call GroupAddUnit(g1,u1)


set p=null
set g2=null
set u1=null
set u2=null
set g1=null
set eu=null
set tr=null
endfunction

private function Act4 takes nothing returns nothing
call ForGroup(G,function CreateSpiral2)
call ForGroup(H,function Motion3)
endfunction

private function Act3 takes nothing returns nothing
call ForGroup(G,function CreateSpiral1)
endfunction

private function Clear2 takes nothing returns nothing
call FlushChildHashtable(HT,GetHandleId(GetEnumUnit()))
call KillUnit(GetEnumUnit())
endfunction

private function Clear1 takes nothing returns nothing
local group g=LoadGroupHandle(HT,GetHandleId(GetEnumUnit()),1)
local rotation rotate=LoadInteger(HT,GetHandleId(GetEnumUnit()),2)
local trigger tr=LoadTriggerHandle(HT,GetHandleId(GetEnumUnit()),3)
call FlushChildHashtable(HT,GetHandleId(tr))
call DestroyTrigger(tr)
call rotate.destroy()
call FlushChildHashtable(HT,GetHandleId(GetEnumUnit()))
call ForGroup(g,function Clear2)
call GroupClear(g)
call DestroyGroup(g)
call KillUnit(GetEnumUnit())
set g=null
set tr=null
endfunction

private function Act2 takes nothing returns boolean
local group g
if GetSpellAbilityId()==SpellID then
 set g=LoadGroupHandle(HT,GetHandleId(GetTriggerUnit()),1)
 call FlushChildHashtable(HT,GetHandleId(GetTriggerUnit()))
 call ForGroup(g,function Clear1)
 call GroupClear(g)
 call DestroyGroup(g)
 call GroupRemoveUnit(G,GetTriggerUnit())
 set g=null
endif
return false
endfunction

private function Act1 takes nothing returns boolean
local group g
local unit tu
if GetSpellAbilityId()==SpellID then
 set tu=GetTriggerUnit()
 set g=CreateGroup()
 call SaveGroupHandle(HT,GetHandleId(tu),1,g)
 call SaveReal(HT,GetHandleId(tu),2,Atan2BJ(GetSpellTargetY()-GetUnitY(tu),GetSpellTargetX()-GetUnitX(tu))​)
 call GroupAddUnit(G,tu)
 set g=null
 set tu=null
 endif
return false
endfunction

private function Init takes nothing returns nothing
local trigger tr1=CreateTrigger()
local trigger tr2=CreateTrigger()
local timer tm1=CreateTimer()
local timer tm2=CreateTimer()
local player p
local integer i=0
loop
 set p=Player(i)
 call TriggerRegisterPlayerUnitEvent(tr1,p,EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
 call TriggerRegisterPlayerUnitEvent(tr2,p,EVENT_PLAYER_UNIT_SPELL_FINISH,null)
 call TriggerRegisterPlayerUnitEvent(tr2,p,EVENT_PLAYER_UNIT_SPELL_ENDCAST,null)
 set p=null
 set i=i+1
 exitwhen i>11
endloop

call TriggerAddCondition(tr1,Condition(function Act1))
call TriggerAddCondition(tr2,Condition(function Act2))
call TimerStart(tm1,0.45,true,function Act3)
call TimerStart(tm2,0.03,true,function Act4)

set tr1=null
set tm1=null
set tm2=null
endfunction
endlibrary
код открытый только надо папку создать в тригерах иначе код не появляется. хз почему. глюк редактора.
Миниатюры
Кликните на картинку для увеличения
Название:  chanel.JPG
Просмотров: 430
Размер:  27.2 Кбайт  
Прикрепленные файлы
Тип файла: w3x spiral.w3x (23.3 Кбайт, 138 просмотров )

Отредактировано Zanozus, 02.07.2011 в 21:17.
Старый 02.07.2011, 20:26
megasniper

offline
Опыт: 3,656
Активность:
Название: Сгусток Силы
Метод исполнения: GUI+Jass
Нужен ли JNGP: -
Тип цели: юнит
Результат применения: Маг пускает в сторону выбранного противника сгусток энергии, который наносит 500 урона любому противнику, оказавшемуся на его пути. Если на его пути не попадется ни одного врага, сгусток взрывается, нанося 200 урона всем юнитам в радиусе 500.
Количество уровней: 1
Наличие глобальных переменных: 1 глобалка (хэш)
Все параметры настраиваемые. Способность базовая, можно легко навесить любые баффы. Думаю новичкам пригодится.
Прикрепленные файлы
Тип файла: w3x sgustok.w3x (20.3 Кбайт, 90 просмотров )
Старый 06.07.2011, 18:12
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Название способности: что-то типо ярости молота
На каком языке писалось: vJass
Требования: JassHelper 0.9.I.2+
MUI ли? разумеется!
Описание: Чар поднимает вверх свой великий и ужасный молот, после он его около двух секунд разяжает с помощью частиц энергии и красивого shiva-эффекта. Потом прыгает и круто сотрясает землю. Типо ульт, дамажит 5x СИЛА +стан на 4с. Пользуйтесь, правда писал так, косточки размять, на съедение новым юзерам. Код ужас.

Игровое видео: Youtube Link
Прикрепленные файлы
Тип файла: w3x HammerWrath.w3x (29.4 Кбайт, 95 просмотров )

Отредактировано bee, 15.07.2011 в 06:59.
Старый 15.07.2011, 06:52
youtube
сктыщь
offline
Опыт: 8,025
Активность:
Название: Fire Laser
Метод исполнения: vJass,cJass
Нужен ли JNGP: yes
Тип цели: без цели
Количество уровней: 1
Описание: Герой запускает в верх 30 шаров, которые разлетаются во все стороны, и через некоторое время летят обратно с лазароми, разталкивая всех на своем пути.
» код
scope FireLaser initializer Init{
include "cj_types_priv.j"
    define{
        private SpellId='A777'
        //айди скила
        private DummyId='h000'
        //айди дамика
        private LightningId="AFOD"
        //айди молнии
        private Height_up=12.
        //скорость с которой поднимаются в воздух шары
        private num=30
        //кол-во шариков
        private speed_of_laser=2.5
        //скорость лазера
        private MoveSpeed_one=10.
        //скорость шариков, когда они разлетаються
        private MoveSpeed_of_target=(GetUnitMoveSpeed(u)*periodic)
        //сила, с которой двигаеи юнитов, попавших под лазер
        private MaxRange=500
        //максимальный радиус когда шарики разлетаются во все строны
        private MinRange=100
        //мин радиус шариков
        private MaxHeight=500
        //макс высота
        private range_of_group=80
        //радиус каждого лазера
        private periodic=.025
        //...
        private periodic_of_creating=.0
        //период появления шаров
        private effect_st="Abilities\\Spells\\Orc\\LiquidFire\\Liquidfire.mdl"
        //эффект во время спавна шаров
        private effect_nd="Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl"
        //эффект по окончанию спавна
    }
    
    define{
        private Unit(u,x,y,a)={ut=CreateUnit(GetOwningPlayer(u),DummyId,x,y,a)}
        private random=GetRandomReal(0,100)
    }
globals
    private unit dummy
endglobals

private struct Lightning
lightning l
unit u
real a,d,tm
    
    static method onRange takes nothing returns boolean
        unit u = GetFilterUnit()
        real x1 = GetUnitX(u) - GetUnitX(dummy)
        real y1 = GetUnitY(u) - GetUnitY(dummy)    
        real dist = SquareRoot(x1*x1 + y1*y1)
        real angle = Atan2(GetUnitY(dummy) - GetUnitY(u), GetUnitX(dummy) - GetUnitX(u))       
        if IsUnitEnemy(dummy, GetOwningPlayer(u)) and GetWidgetLife(u) > 0.405 and dist > 20 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MECHANICAL) then 
            SetUnitX(u, GetUnitX(u) - MoveSpeed_of_target * Cos(angle))
            SetUnitY(u, GetUnitY(u) - MoveSpeed_of_target * Sin(angle))
        endif
        u = null
        return false          
    endmethod
    static method onAction takes nothing returns nothing
        timer t = GetExpiredTimer()
        thistype c = GetTimerData(t)
        if c.d>MinRange
            if c.tm<3 then
                c.tm+=periodic
                SetUnitScalePercent(c.u,100+(c.tm*10),100+(c.tm*10),100+(c.tm*10))
                SetLightningColor(c.l,random,0,random,100)
                MoveLightningEx(c.l,true,GetUnitX(c.u),GetUnitY(c.u),GetUnitFlyHeight(c.u),GetUnitX(c.u),GetUnitY(c.​u),GetUnitFlyHeight(c.u)-c.tm*200)
            else
                SetUnitX(c.u,GetUnitX(c.u)-speed_of_laser*Cos(c.a))
                SetUnitY(c.u,GetUnitY(c.u)-speed_of_laser*Sin(c.a))
                MoveLightningEx(c.l,true,GetUnitX(c.u),GetUnitY(c.u),GetUnitFlyHeight(c.u),GetUnitX(c.u),GetUnitY(c.​u),0)
                SetLightningColor(c.l,100,0,100,100)
                dummy=c.u
                group g=CreateGroup()
                GroupEnumUnitsInRange(g, GetUnitX(c.u), GetUnitY(c.u), range_of_group, Filter(function thistype.onRange))
                DestroyGroup(g)
                g=null
                c.d-=speed_of_laser
            endif
        else
            DestroyLightning(c.l)
            KillUnit(c.u)
            ReleaseTimer(t)
        endif
        t=null
    endmethod
    static method onCreate takes unit caster,real a,real d returns thistype
        thistype c= thistype.create()
        timer t = NewTimer()
        c.u=caster
        c.a=a
        c.d=d
        c.tm=0
        c.l=AddLightningEx("AFOD",true,GetUnitX(c.u),GetUnitY(c.u),GetUnitFlyHeight(c.u),GetUnitX(​c.u),GetUnitY(c.u),GetUnitFlyHeight(c.u))
        SetTimerData(t, c)
        TimerStart(t, periodic, true, function thistype.onAction)
        t = null
        return c
    endmethod
endstruct

private struct Height
    unit u
    real x,y,a,d,h
    static method onAction takes nothing returns nothing
        timer t = GetExpiredTimer()
        thistype c = GetTimerData(t)
        c.d=SquareRoot((GetUnitX(c.u) - c.x) * (GetUnitX(c.u) - c.x) + (GetUnitY(c.u) - c.y) * (GetUnitY(c.u) - c.y))
        if c.h<MaxHeight then
            c.h+=Height_up
            SetUnitFlyHeight(c.u,c.h,0)
        elseif c.d>MoveSpeed_one
            UnitRemoveAbility(c.u,'Aloc')
            ShowUnit(c.u,true)
            UnitAddAbility(c.u,'Aloc')
            SetUnitX(c.u,GetUnitX(c.u)+MoveSpeed_one*Cos(c.a))
            SetUnitY(c.u,GetUnitY(c.u)+MoveSpeed_one*Sin(c.a))
        else
            Lightning.onCreate(c.u,c.a,MaxRange)
            ReleaseTimer(t)
        endif
        t=null
    endmethod
    static method onCreate takes unit caster,real a returns thistype
        thistype c= thistype.create()
        timer t = NewTimer()
        c.u=caster
        c.x = GetUnitX(c.u)+MaxRange*Cos(a)
        c.y = GetUnitY(c.u)+MaxRange*Sin(a)
        c.h=0
        c.a=a
        SetTimerData(t, c)
        TimerStart(t, periodic, true, function thistype.onAction)
        t = null
        return c
    endmethod
endstruct

private struct cold
    //+++++
    unit u
    real x,y,ts
    effect e
    //+++++
    static method onDamage takes nothing returns boolean
         return false
    endmethod
    
    static method onRange takes nothing returns boolean
        return false
    endmethod
    
    static method onAction takes nothing returns nothing
        timer t = GetExpiredTimer()
        thistype c = GetTimerData(t)
        unit ut
        if c.ts>0 then
            c.ts--
            Unit(c.u,c.x,c.y,0)
            if c.ts!=1 then
                ShowUnit(ut,false)
            endif
            Height.onCreate(ut,((360/num)*c.ts)*bj_DEGTORAD)
        else
            DestroyEffect(c.e)
            DestroyEffect(AddSpecialEffect(effect_nd,c.x,c.y ))
            ReleaseTimer(t)
        endif
        t=null
        ut=null
    endmethod
    
    static method onCreate takes unit caster returns thistype
        thistype Cold = thistype.create()
        timer t = NewTimer()
        Cold.u=caster
        Cold.x = GetUnitX(Cold.u)
        Cold.y = GetUnitY(Cold.u)
        Cold.ts = num
        Cold.e=AddSpecialEffect(effect_st,Cold.x,Cold.y )
        SetTimerData(t, Cold)
        TimerStart(t, periodic_of_creating, true, function thistype.onAction)
        t = null
        return Cold
    endmethod
    
endstruct 

    private bool COLD_CAST(){
        if GetSpellAbilityId()==SpellId then
            cold.onCreate(GetTriggerUnit())
        endif 
        return false
    }

    private void Init(){
        trigger t=CreateTrigger()   
        int index = 0
        debug BJDebugMsg("|c0000C5FFSpell Created By Jumper aka YouTube")
        whilenot(index == 13){
            TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
            index++
        }
        TriggerAddCondition(t, Condition(function COLD_CAST))
        t = null
    }
}
» скрины
Прикрепленные файлы
Тип файла: w3x Fire Laser.w3x (41.5 Кбайт, 73 просмотров )

Отредактировано youtube, 18.07.2011 в 11:26.
Старый 18.07.2011, 01:14
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Название способности: Fire Trap / Огненная ловушка
Язык написания способности: vJass (lastest jasshelper required)
Описание: Герой запускает огненный снаряд в воздух, по указанной директории на расстояние 900 ед. (настраивается). Снаряд летит по параболе и при приземлении возвращается к герою. По пути если встретит врага то зацепит и притащит к герою со половинной скоростью, нанося 150 ед. / сек.
Все это конешно же с эпичными спецэффектами, фапайте господа.

Прикрепленные файлы
Тип файла: w3x Shandris.w3x (20.6 Кбайт, 89 просмотров )
Старый 23.07.2011, 08:51
Zanozus
Уехал учиться
offline
Опыт: 8,512
Активность:
Название: Клетка
Метод исполнения: vJass
Нужен ли JNGP: да
MUI: да
Тип цели: без цели (наземные)
Количество уровней: 1
Описание:
Посмотрел я на спелл клока из доты и захотелось сделать свой, но лучше.
Герой создает вокруг себя непроницаемую квадратную клетку (дамми). Если к внешней стороне клетки подойдет вражеский юнит, его ударит током, застанит и отбросит на небольшое расстояние.
Миниатюры
Кликните на картинку для увеличения
Название:  cage.jpg
Просмотров: 254
Размер:  72.7 Кбайт  
Прикрепленные файлы
Тип файла: w3x cage.w3x (24.4 Кбайт, 96 просмотров )

Отредактировано Zanozus, 28.07.2011 в 17:30.
Старый 28.07.2011, 17:15
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Zanozus, красавец, как всегда, но есть пара советов по оптимизации в коде:

Первое - зачем объявлять локалку tm в функции Init
» раскрыть
Код:
private function Init takes nothing returns nothing
local trigger tr=CreateTrigger()
local timer tm=CreateTimer()
local integer i=0
call TimerStart(tm,0.03,true,function Act2)
loop
 call TriggerRegisterPlayerUnitEvent(tr,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)  
 set i=i+1
 exitwhen i>11
endloop
call TriggerAddCondition(tr,Condition(function Act1))
set tr = null
set tm = null
endfunction
когда можно написать вот так
» раскрыть
Код:
private function Init takes nothing returns nothing
local trigger tr=CreateTrigger()
local integer i=0
call TimerStart(CreateTimer(),0.03,true,function Act2)
loop
 call TriggerRegisterPlayerUnitEvent(tr,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)  
 set i=i+1
 exitwhen i>11
endloop
call TriggerAddCondition(tr,Condition(function Act1))
set tr = null
endfunction


» раскрыть
Код:
private function Act1 takes nothing returns boolean
        local cage c
        local unit tu
        local unit u
        local timer tm
        if GetSpellAbilityId( )=='A002' then
        
            set tu = GetTriggerUnit( )
            set c = cage.create( )
            set c.p = GetOwningPlayer( tu )
            set c.r = 140.00
            set c.b = 210.00
            set c.x = GetUnitX( tu )
            set c.y = GetUnitY( tu )
            set c.a = GetUnitFacing( tu ) * bj_DEGTORAD
            set u = CreateUnit( c.p, Dummy1ID, c.x, c.y, GetUnitFacing( tu ) )
            set c.g = CreateGroup( )
            call SaveInteger( HT, GetHandleId( u ), 1, c )
            set tm = CreateTimer( )
            call TimerStart( tm, 8.00, false, function Act5 )
            call SaveUnitHandle( HT, GetHandleId( tm ), 1, u )
            call GroupAddUnit( G1, u )
            set u = null
            set tu = null
            set tm = null
        endif
        return false
    endfunction
->
» раскрыть
Код:
private function Act1 takes nothing returns boolean
        local cage c
        local unit tu
        local unit u
        local timer tm
        if GetSpellAbilityId( )=='A002' then
        
            set tu = GetTriggerUnit( )
            set c = cage.create( )
            set c.p = GetOwningPlayer( tu )
            set c.r = 140.00
            set c.b = 210.00
            set c.x = GetUnitX( tu )
            set c.y = GetUnitY( tu )
            set c.a = GetUnitFacing( tu ) * bj_DEGTORAD
            set u = CreateUnit( c.p, Dummy1ID, c.x, c.y, GetUnitFacing( tu ) )
            set c.g = CreateGroup( )
            call SaveInteger( HT, GetHandleId( u ), 1, c )
            set tm = CreateTimer( )
            call TimerStart( tm, 8.00, false, function Act5 )
            call SaveUnitHandle( HT, GetHandleId( tm ), 1, u )
            call GroupAddUnit( G1, u )

        endif
            set u = null
            set tu = null
            set tm = null
        return false
    endfunction


я чето там еще видел но мне стало лень и я случайно закрыл WE D:
Старый 01.08.2011, 05:59
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Название способности: Omnislash
Способ исполнения: vJass
JNGP: нужен
Цель: боевая единица, противник
Описание: Blademaster поочередно атакует нескольких противников. Во время применения способности Blademaster абсолютно неуязвим.
Атаки героя учитывают все ваши пассивные и авто-способности.
Прикрепленные файлы
Тип файла: w3x Omnislash.w3x (23.0 Кбайт, 78 просмотров )
Старый 04.08.2011, 12:47
Sarispa

offline
Опыт: 30
Активность:
Название: Скилы наездницы
Количество: 2
Тип: 1 Skill - цель
2 Skill - точка
Тип исполнения: триггеры
PS: кто понимает в утечках просьба посмотреть 2 скилл возможно там утечка, просьба объяснить в чем суть этой утечки.
Прикрепленные файлы
Тип файла: w3x Наездница.w3x (42.0 Кбайт, 31 просмотров )
Старый 10.08.2011, 21:44
Zanozus
Уехал учиться
offline
Опыт: 8,512
Активность:
Название: RoboHands
Метод исполнения: vJass
Нужен ли JNGP: да
MUI: как обычно
Тип цели: область,200 радиус, для героя (активно-пассивный)
Количество уровней: много (4)
Описание: сделал свой RoboHands по описанию спелла из Hive по просьбе Madhead
Спелл действет в двух режимах: активный и пассивный
Пассивный режим:
После изучения спелла "руки" начинают искать врагов в 800 радиусе от героя, обездвиживают их (спелл "Очищение"), наносят 1.5*лвл ед. магического урона и похищают 1.5*лвл единиц маны каждые 0.33 секунды в течение 1*лвл секунд. Урон, полученный врагом, также передается герою.
Активный режим:
После применения спелла "руки" тянутся к врагам в указанной области, обездвиживают их и тянут обратно к герою, также нанося урон и похищая ману, в течение 1*лвл секунд.
» Системные требования =)
3 руки на карте:
Intel Atom N455 1.66 GHz
128 mb Video
2GB ROM
15 рук на карте
Intel Core 2 Duo 2.50 GHz
256 mb Video
2GB ROM
30 рук на карте
AMD Phenom X4 3.2 GHz
1024 mb Video
2GB ROM
Тестирование проводилось примерно на таких компах на самых высоких настройках графики.
p.s модель сегмента "руки" с анимациями тангажа позаимствована с Hive
Миниатюры
Кликните на картинку для увеличения
Название:  RoboHands.jpg
Просмотров: 479
Размер:  72.1 Кбайт  
Прикрепленные файлы
Тип файла: w3x RoboHandsv1.w3x (40.3 Кбайт, 103 просмотров )

Отредактировано Zanozus, 17.09.2011 в 17:28.
Старый 20.08.2011, 15:42
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Название: Каменьщик
Метод исполнения: GUI
Количество: 2
Количество уровней: много (4)
Каменные плиты:
Создает две каменные плиты, которые сдвигаются на встречу, друг другу зацепляют и тащат каждого воина у них на пути. Когда 2 плиты сталкиваются, происходит колоссальный взрыв и противники получают огромный урон.
Удар земли:
Под каждым противником в радиусе 500 создает либо шпиль из земли либо гигантскую яму тем самым оглушая противника на 2 секунды.
Прикрепленные файлы
Тип файла: w3x skill by Vadik29.w3x (22.8 Кбайт, 85 просмотров )
Старый 25.08.2011, 18:31
youtube
сктыщь
offline
Опыт: 8,025
Активность:
Название: Stones
Метод исполнения: vJass (+cjass)
Нужен ли JNGP: да
MUI: агась
Тип цели: Вражеские юниты в радиусе 150
Описание: переделал чуток скил Zanozus'a по просьбе Msey
При применении заклинания даммики начинаются крутится вокруг героя и дается дополнительный скилл, все вражеские юниты которые касаются даммика, отлетают на небольшое расстояние и получет небольшой урон. При применения дополнительного скила, все даммики разлетаются во все стороны и при попадании в противника наносят урон от 1 до 100 * лвл абилы.
Прикрепленные файлы
Тип файла: w3x For Msey.w3x (21.4 Кбайт, 68 просмотров )
Старый 26.08.2011, 19:25
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Название: Ярость клинка
Метод исполнения: GUI
Тип цели:Указанный юнит
Описание:Мастер клинка впадает в ярость и начинает атаковать указаного юнита, причем каждая атака отталкивает противника и наносит по х2 ловкость урона.
Довольно красивая способность, в добавок когда происходит атака может сработать любая пассивная способность работающая от физической атаки героя.
Кому понравилось плюсоните плиз).
Прикрепленные файлы
Тип файла: w3x skill by Vadik29(2).w3x (22.0 Кбайт, 64 просмотров )
Старый 27.08.2011, 15:22
weaver
ПочемусерверХГМ тормозит?
offline
Опыт: 4,000
Активность:
Достали одни и те же заказы ,и чтоб не мучиться вот эта способность.
смотреть
weaver добавил:
Название:Frothen fair
Метод исполнения:Gui
Тип цели:враг или местность
Результат применения:описание в карте.
Количество уровней:3
Прикрепленные файлы
Тип файла: w3x Wave.w3x (16.7 Кбайт, 75 просмотров )
Тип файла: w3x Frothen fair.w3x (28.8 Кбайт, 60 просмотров )
Старый 29.08.2011, 01:41
asantepler

offline
Опыт: 235
Активность:
Название: tool tip missing!
Метод исполнения: Приспичило делать в GUI
Нужен ли JNGP: нет
Тип цели: без цели
Результат применения: Эффект огненной новы медленно расползающейся от кастера, сжигающей террэин, декорации и юнитов. Кастеру наносится 2 ед урона в секунду. При повторном касте в рандомных точках получившейся окружности падают 10-12 метеоритов, поджигающих и станящих, попавших под них противников. Затем они разлетаются на куски и летят по параболе. При приземлении, взрываются(станят, обжигают, ломают детракшн), снова ломаются на две половины и летят(по параболе, обжигая противников). Снова падают, эффект взрыва, стан\урон\разрушение деревьев. Все красиво эпично и не утечно.
Количество уровней: один
Наличие глобальных переменных: три штучки
Nanopro что-то мне подсказывает, что ты чуть-чуть ошибся темой. Отпишись с академке, быстрее помогут
Прикрепленные файлы
Тип файла: w3x Effects.w3x (31.7 Кбайт, 61 просмотров )
Старый 10.09.2011, 14:36
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Название: Молнии
Метод Исполнения: GUI
MUI: Нету
Тип Цели: Без цели
Результат применения: не знаю, как описать)
Dummy: много(5)((( ,зато нет утечек...
Кол-во глобальных переменных: 3-4...
Vadik29 добавил:
А вот спел который я холел выложить ,но выложил случайно не тот и удалил...
Название: Сфера защиты
Метод Исполнения: GUI
MUI: Нету
Тип Цели: на область
Результат применения: в указоной области создается сфера которая не пускает врагов внутрь
Dummy:1
Кол-во глобальных переменных: 2-3...
З.Ы. Прошу ставить оценки)
Миниатюры
Кликните на картинку для увеличения
Название:  Копия WVMH8wItczi0D.jpg
Просмотров: 203
Размер:  299.4 Кбайт  Кликните на картинку для увеличения
Название:  1234.jpg
Просмотров: 262
Размер:  280.7 Кбайт  
Прикрепленные файлы
Тип файла: w3x Lightning by vadik 29.w3x (23.0 Кбайт, 50 просмотров )
Тип файла: w3x spell by Vadik29 2.w3x (19.1 Кбайт, 98 просмотров )

Отредактировано Vadik29, 16.10.2011 в 18:00.
Старый 13.10.2011, 16:37
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Название: Хватка смерти
Метод исполнения: Gui + CS
Нужен ли JNGP: нет
Тип цели: юнит
Результат применения: Поднимает и тащит к себе противника (использую молнию фиолетового цвета... З.Ы. как в вов)
Количество уровней: 1
Вызов заклинания на цель: нет
Наличие глобальных переменных: 2
З.Ы. Прошу ставить оценки)
Прикрепленные файлы
Тип файла: w3x DeathGrip.w3x (1.79 Мбайт, 104 просмотров )

Отредактировано Vadik29, 16.10.2011 в 18:00.
Старый 16.10.2011, 16:51
Arti

offline
Опыт: 11,196
Активность:
Сделал простенького героя за вечер, возможно кому то будет интересно. Все спелы GUI/MUI.
Извините за ошибки и лишний ипорт:\
1 способность: Death Mirror
Заклинание вызывает из-под земли кристаллические зеркала, насыщенные магией земли, после чего вверх подлетает один осколок кристалла и множество раз отражается в зеркалах. Затем же все клоны-отражения бомбардируют одну точку перед зеркалами.
2 способность: Body Control
Накладывает на противника заклятие, которое парализирует противника на 4 сек., если тот начнёт двигаться, атаковать или произносить заклинание.
3 способность: Absorption
За каждое произнесённое врагом заклинание обладатель этой ауры получает здоровье.
4 способность: Distortion
Чародей налаживает на всех врагов искажение, которое делает их очень маленькими, уменьшая их скорость передвижения или очень большими замедляя скорость атаки.
Если кому то надо могу запилить героя если мне будет интересна его биография :)
Прикрепленные файлы
Тип файла: w3x Wizard.w3x (222.2 Кбайт, 97 просмотров )
Старый 30.10.2011, 13:09
weaver
ПочемусерверХГМ тормозит?
offline
Опыт: 4,000
Активность:
Название:Союз
Способ исполнения: Гуй
Описание: Кастер Объединяет всех крипов в области и создает одного огромного ,атака которого равна кол-ву крипов ,через 25 секунд огромный крип исчезает и появляются прежние крипы,не действуют на врагов ,героев и зданий.
Прикрепленные файлы
Тип файла: w3x Союз.w3x (20.1 Кбайт, 61 просмотров )

Отредактировано weaver, 03.11.2011 в 11:13.
Старый 02.11.2011, 22:10
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Вот 2 героя:
I. Имя: Лорд Ребрад
Происхождение: Стражник цитадели "Ледяной Короны".
Способности:
1)Название: Костяная буря
Метод исполнения: GUI
Цель: Без цели
Результат применения: (вихрь клинков с триггерным уроном) 0.25\0.50\0.75\1.00\1.25*сила каждые 0.25 сек.
2)Название: Кости и Лед
Метод исполнения: GUI
Цель: Враждебный юнит
Результат применения: Атакует противника холодом если противник находиться на расстоянии 15 метров и больше то замораживает его на 2\3\4\5\6 сек., если ближе то замедляет на 25%\30%\35%\40%\45% на 4\5\6\7\8 сек.
3)Название: Ледяные кости
Метод исполнения: GUI
Пассивная способность
Результат применения: Увеличивает защиту героя на 5\10\15\20\25, также когда героя атакуют есть шанс замедлить скорость передвижения противника на 25%\30%\35%\40%\45% с шансом 10%\15%\20%\25%\30%
4)Название: Ледяной удар (ульта)
Метод исполнения: GUI
Цель: Враждебный юнит
Результат применения: Ребрад ударяет противника и за ним появляется лед по которому начинает скользить противник, в конце вути противник врезается в ледяные иглы и получает огромный урон.
Урон: 500\1000\1500\2000\2500
II.Имя: Тесак
Происхождение: Бывший капитан демонических орков запределья....
Способности:
1)Название: Неистовство Героя
Метод исполнения: GUI
Цель: без цели
Результат применения: Тесак освобождает себя от эффектов замедления и увеличивает свою скорость бега 30%\60%\90%\120%\150%
2)Название:Командный Крик
Метод исполнения: GUI
Цель: без цели
Результат применения: Тесак повышает свою защиту 5\10\15\20\25 ед., регенерацию 10\20\30\40\50 ед. и атаку 25%\50%\75%\100%\125% на 10 сек.
3)Название: Яросный удар
Метод исполнения: GUI
Цель: Враждебный юнит
Результат применения: Наносит противнику урон и оставляет метку, тем самым следующие 3 обычных удара востановят герою здоровье, также оглушает на 1 сек.
Здоровья восстановлено: 1%\2%\3%\4%\5% (от макс)
Урон:10% от макс хп Тесака + его сила
Время действия:10 сек.
Перезарядка: 15\12\10\7\4 сек.
4)Название: Кровь и Гром (ульта)
Метод исполнения: GUI
Цель: без цели
Результат применения: Тесак атакует всех противников вокруг себя в радиусе 250, тем самым замедляя их на 10 сек. на 100% и нанося им урон = 10%\15%\20%\25%\30% от их макс хп.
З.Ы:
Фух 30 минут писал), ставим оценочки, если есть баги или утечки говорим, Сори за импорт, просто я поклонник красоты))
Прикрепленные файлы
Тип файла: w3x GladiatorWars.w3x (1.89 Мбайт, 634 просмотров )

Отредактировано Vadik29, 03.11.2011 в 16:10.
Старый 03.11.2011, 15:41
youtube
сктыщь
offline
Опыт: 8,025
Активность:
делал для карты скилы, но к сожалению не пригодились, и по этому выкладываю, мб кому и пригодятся...
Название: Ex
Метод исполнения: vjass+cjass
Нужен ли JNGP: +
Тип цели: область
Описание: герой насылает в указанную область небольшое кол-во огненный шаров летящих по параболе, и наносящих урон в области. Каждый шар наносит по ~15ед урона в радиусе 150
» code
scope Fire initializer Init{
    include "cj_types_priv.j"
    define{
        private SpellId                   ='Z003'//айди скила
        private DummyId                   ='h003'//айди даммика
        private Min                       =25//не важно
        private NUM                       =30//кол-во даммиков
        private periodic                  =0.05//периодпоявления
        private AoE                       =150//радиус нанесения урона
        private DmG                       =15//урон
        private EFFECT                    ="Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl"//"Abilities\\Weapons\\Demo​lisherFireMissile\\DemolisherFireMissile.mdl"
        //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
        private clear = flush locals
        private Dist(x1,y1,x2,y2)={SquareRoot((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))}
    }
    private unit CAST
    private unit DUMMY
    private struct Spell{
    unit cast,dummy
    real x,y,d,m_d,a
        static method onDamage takes nothing returns boolean
            unit u = GetFilterUnit()
            if IsUnitEnemy(CAST, GetOwningPlayer(u)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MECHANICAL) then 
                UnitDamageTarget(CAST, u, DmG , false, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_FIRE, null)  
            endif
            clear
            return false          
        endmethod
        static method onAction takes void returns void
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            if r.d>Min
                r.d-=15
                SetUnitX(r.dummy,GetUnitX(r.dummy)+15*Cos(r.a))
                SetUnitY(r.dummy,GetUnitY(r.dummy)+15*Sin(r.a))
                SetUnitFlyHeight(r.dummy,(4.*350/r.m_d)*(r.m_d-r.d)*(r.d/r.m_d),0)
            else
                CAST=r.cast
                DestroyEffect(AddSpecialEffect(EFFECT,GetUnitX(r.dummy), GetUnitY(r.dummy)))
                GroupEnumUnitsInRange(bj_lastCreatedGroup, GetUnitX(r.dummy), GetUnitY(r.dummy), AoE, Filter(function thistype.onDamage))
                RemoveUnit(r.dummy)
                ReleaseTimer(t)
            endif
            clear
        endmethod
        
        static method onCreate takes unit dummy,location p,unit caster returns thistype
            thistype r = thistype.create()
            timer t = NewTimer()
            r.cast=caster
            r.x=GetLocationX(p)+GetRandomReal(-300,300)*Cos(GetRandomReal(0,360))
            r.y=GetLocationY(p)+GetRandomReal(-300,300)*Sin(GetRandomReal(0,360))
            r.d=Dist(r.x,r.y,GetUnitX(r.cast),GetUnitY(r.cast))
            r.m_d=r.d
            r.a=Atan2(r.y-GetUnitY(r.cast),r.x-GetUnitX(r.cast))
            r.dummy=dummy
            SetTimerData(t,r)
            TimerStart(t, 0.03125, true, function thistype.onAction)
            clear
            return r
        endmethod
    }
    private struct CreateUnits{
    unit cast,dummy
    int num
    location p
        static method onAction takes void returns void
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            if r.num>0
                r.num--
                r.dummy=CreateUnit(GetOwningPlayer(r.cast),DummyId,GetUnitX(r.cast),GetUnitY(r.cast),GetUnitFacing(r​.cast))
                Spell.onCreate(r.dummy,r.p,r.cast)   
            else
                ReleaseTimer(t)
            endif
            clear
        endmethod
        static method onCreate takes unit caster,location p returns thistype
            thistype r = thistype.create()
            timer t = NewTimer()
            r.cast=caster
            r.p=p
            r.num=NUM
            SetTimerData(t,r)
            TimerStart(t, periodic, true, function thistype.onAction)
            clear
            return r
        endmethod
    }
    
    private bool Cond(){
        if GetSpellAbilityId()==SpellId then
            location p=GetSpellTargetLoc()
            unit u=GetTriggerUnit()
            DestroyEffect(AddSpecialEffectTarget(EFFECT,u,"weapon"))
            CreateUnits.onCreate(u,p)
            clear
        endif 
        return false
    }
    
    private void Init(){
        trigger t=CreateTrigger()
        TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        TriggerAddCondition(t, Condition(function Cond))
        clear
    }
}
Название: Qu
Метод исполнения: vjass+cjass
Нужен ли JNGP: +
Тип цели: все враги, вокруг героя
Описание: герой создает ледяной круг вокруг себя, тем самым нанося всем врагам урон и замедляя их на небольшой промежуток времени
» code
scope Cold initializer Init{
    include "cj_types_priv.j"
    define{
        private SpellId                   ='Z001'
        private DummySpellId              ='Z006'
        private EFFECT                    ="Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl"
        //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
        private clear = flush locals
        private Dist(x1,y1,x2,y2)={SquareRoot((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))}
    }
    private unit CAST
    private struct AddEffect{
        unit u
        static method onAction takes void returns void
            timer t=GetExpiredTimer()
            thistype r = GetTimerData(t)
            UnitRemoveAbility(r.u,DummySpellId)
            ReleaseTimer(t)
            clear
        endmethod
        static method onCreate takes unit u returns void
            thistype r = thistype.create()
            timer t = NewTimer()
            r.u=u
            UnitAddAbility(r.u,DummySpellId)
            SetTimerData(t,r)
            TimerStart(t, 3, true, function thistype.onAction)
            clear
        endmethod
    }
    private struct Spell{
    unit cast
    real x,y,a,face,s,d,dis,sx,sy,power
        static method onDamage takes nothing returns boolean
            unit u = GetFilterUnit()
            if IsUnitEnemy(CAST, GetOwningPlayer(u)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MECHANICAL) then 
                UnitDamageTarget(CAST, u, 100+50*GetUnitAbilityLevel(CAST,SpellId) , false, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_COLD, null)  
                DestroyEffect(AddSpecialEffect(EFFECT,GetUnitX(u), GetUnitY(u)))
                AddEffect.onCreate(u)
            endif
            clear
            return false          
        endmethod
        static method onAction takes void returns void
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            if r.d>0
                if r.s>0
                    r.d-=r.s
                    r.a=r.face
                else
                    r.d+=r.s
                    r.a=r.face-180*bj_DEGTORAD
                endif
                r.x+=r.s*Cos(r.face)
                r.y+=r.s*Sin(r.face)
                DestroyEffect(AddSpecialEffect(EFFECT,r.x,r.y))
            else
                if r.power<650
                    r.x=r.sx+r.dis*Cos(r.a)
                    r.y=r.sy+r.dis*Sin(r.a)
                    if r.s>0
                        r.a+=r.s
                        r.power+=r.s
                    else
                        r.a-=r.s
                        r.power-=r.s
                    endif
                    DestroyEffect(AddSpecialEffect(EFFECT,r.x,r.y))
                else
                    CAST=r.cast
                    GroupEnumUnitsInRange(bj_lastCreatedGroup, r.sx, r.sy, r.dis, Filter(function thistype.onDamage))
                    ReleaseTimer(t)
                endif
            endif
            clear
        endmethod
        
        static method onCreate takes unit cast,real s,real face,real x,real y returns thistype
            thistype r = thistype.create()
            timer t = NewTimer()
            r.cast=cast
            r.x=x
            r.y=y
            r.sx=x
            r.sy=y
            r.d=500
            r.dis=r.d
            r.s=s
            r.power=0
            r.face=face
            /*if s>0
                r.a=face-90*bj_DEGTORAD
            else
                r.a=face+90*bj_DEGTORAD
            endif*/
            SetTimerData(t,r)
            TimerStart(t, 0.07, true, function thistype.onAction)
            clear
            return r
        endmethod
    }
    private struct CreateUnits{
    unit cast
    real x,y,a
    int i
        static method onAction takes void returns void
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            if r.i>0
                if r.i==2
                    Spell.onCreate(r.cast,50,r.a,r.x,r.y)  
                elseif r.i==1
                    Spell.onCreate(r.cast,-50,r.a,r.x,r.y) 
                endif
                r.i--
            else
                ReleaseTimer(t)
            endif
            clear
        endmethod
        static method onCreate takes unit caster returns thistype
            thistype r = thistype.create()
            timer t = NewTimer()
            r.cast=caster
            r.x=GetUnitX(caster)
            r.y=GetUnitY(caster)
            r.a=GetUnitFacing(caster)*bj_DEGTORAD
            r.i=2
            SetTimerData(t,r)
            TimerStart(t, 0.01, true, function thistype.onAction)
            clear
            return r
        endmethod
    }
    
    private bool Cond(){
        if GetSpellAbilityId()==SpellId then
            location p=GetSpellTargetLoc()
            unit u=GetTriggerUnit()
            CreateUnits.onCreate(u)
            clear
        endif 
        return false
    }
    
    private void Init(){
        trigger t=CreateTrigger()
        TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        TriggerAddCondition(t, Condition(function Cond))
        clear
    }
}
Название: We
Метод исполнения: vjass+cjass
Нужен ли JNGP: +
Тип цели: область
Описание: герой пускает цепную молнию в указанного юнита, которая связывает 5 юнитов в месте (т.е они не могут уйти дальше чем были в момент связки)
» code
scope Staff /* 
            Spell 
                Created
                        By
                            Jumper
                                */ initializer Init{
    include "cj_types_priv.j"
    define{
        private SpellId                   ='Z002'//айди скила
        private LightId                   ="CLPB"
        private LightId2                  ="CHIM"
        private Periodic                  =.55
        //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
        private clear = flush locals
        private Dist(x1,y1,x2,y2)={SquareRoot((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))}
    }
    private unit CAST
    private unit TARG
    private unit array unit_array
    private group G
    private struct Move{
        unit cast,targ
        real d,dis
        lightning l
        static method onAction takes void returns void
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            if r.d>0 and GetWidgetLife(r.cast)>0.145 and GetWidgetLife(r.targ)>0.145
                r.d-=0.03125
                real x1=GetUnitX(r.cast),y1=GetUnitY(r.cast),x2=GetUnitX(r.targ),y2=GetUnitY(r.targ),d=Dist(x1,y1,x2,y2)
                if d>r.dis
                    real a=Atan2(y1-y2, x1-x2)
                    SetUnitX(r.cast,x1-(GetUnitMoveSpeed(r.cast)*0.03125)*Cos(a))
                    SetUnitY(r.cast,y1-(GetUnitMoveSpeed(r.cast)*0.03125)*Sin(a))
                    a=Atan2(y2-y1, x2-x1)
                    SetUnitX(r.targ,x2-(GetUnitMoveSpeed(r.targ)*0.03125)*Cos(a))
                    SetUnitY(r.targ,y2-(GetUnitMoveSpeed(r.targ)*0.03125)*Sin(a))
                endif
                MoveLightningEx(r.l,true,x1,y1,GetUnitFlyHeight(r.cast),x2,y2,GetUnitFlyHeight(r.targ))
            else
                DestroyLightning(r.l)
                ReleaseTimer(t)
            endif
            clear
        endmethod
    
        static method onCreate takes unit cast,unit targ returns thistype
            thistype r = thistype.create()
            timer t = NewTimer()
            r.cast=cast
            r.targ=targ
            real x1=GetUnitX(r.cast),y1=GetUnitY(r.cast),x2=GetUnitX(r.targ),y2=GetUnitY(r.targ),d=Dist(x1,y1,x2,y2)
            r.dis=d
            r.d=10
            r.l=AddLightningEx(LightId2,true,GetUnitX(cast),GetUnitY(cast),GetUnitFlyHeight(cast),GetUnitX(targ)​,GetUnitY(targ),GetUnitFlyHeight(targ))
            SetTimerData(t,r)
            TimerStart(t, 0.03125, true, function thistype.onAction)
            clear
            return r
        endmethod
    }
    private struct AL{
    unit u1,u2,cast
    lightning l
        static method onAction takes void returns void
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            DestroyLightning(r.l)
            if r.u1!=r.cast and r.u2!=r.cast
                Move.onCreate(r.u1,r.u2)
            endif
            ReleaseTimer(t)
            clear
        endmethod
    
        static method onCreate takes unit cast,unit targ,unit CASTER returns thistype
            thistype r = thistype.create()
            timer t = NewTimer()
            r.u1=cast
            r.u2=targ
            r.cast=CASTER
            DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\ChimaeraLightningMissile\\ChimaeraLig​htningMissile.mdl",cast,"origin"))
            DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\ChimaeraLightningMissile\\ChimaeraLig​htningMissile.mdl",targ,"origin"))
            r.l=AddLightningEx(LightId,true,GetUnitX(cast),GetUnitY(cast),GetUnitFlyHeight(cast),GetUnitX(targ),​GetUnitY(targ),GetUnitFlyHeight(targ))
            SetTimerData(t,r)
            TimerStart(t, 0.45, true, function thistype.onAction)
            clear
            return r
        endmethod
    }
    private struct Spell{
    unit cast,targ
    int ts
    group GROUP
        static method onDamage takes nothing returns boolean
            unit u = GetFilterUnit()
            return IsUnitEnemy(CAST, GetOwningPlayer(u)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MECHANICAL) and GetHandleId(u)!=GetHandleId(TARG) and IsUnitInGroup(u,G)!=true
        endmethod
        static method onAction takes void returns void
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            if r.targ!=null and r.ts>0
                r.ts--
                group g=CreateGroup()
                CAST=r.cast
                TARG=r.targ
                G=r.GROUP
                GroupEnumUnitsInRange(g, GetUnitX(r.targ), GetUnitY(r.targ), 500, Filter(function thistype.onDamage)) 
                unit T=GroupPickRandomUnit(g)//GetRndUnit(g)
                r.GROUP=G
                if T!=null and T!=r.targ
                    AL.onCreate(r.targ,T,r.cast)
                    r.targ=T
                    UnitDamageTarget(r.cast,r.targ,70+50*GetUnitAbilityLevel(r.cast,SpellId),true,true,null,null,null)
                    GroupAddUnit(r.GROUP,r.targ)
                elseif T==null
                    DestroyGroup(r.GROUP)
                    ReleaseTimer(t)
                elseif T==r.targ
                    DestroyGroup(r.GROUP)
                    ReleaseTimer(t)
                endif
                G=null
            else
                DestroyGroup(r.GROUP)
                ReleaseTimer(t)
            endif
            clear
        endmethod
        
        static method onCreate takes unit caster,unit target returns thistype
            thistype r = thistype.create()
            timer t = NewTimer()
            r.cast=caster
            r.targ=target
            r.ts=3+2*GetUnitAbilityLevel(caster,SpellId)
            r.GROUP=CreateGroup()
            GroupAddUnit(r.GROUP,target)
            UnitDamageTarget(r.cast,r.targ,70+50*GetUnitAbilityLevel(r.cast,SpellId),true,true,null,null,null)
            SetTimerData(t,r)
            TimerStart(t, 0.4, true, function thistype.onAction)
            clear
            return r
        endmethod
    }
    
    private bool Cond(){
        if GetSpellAbilityId()==SpellId then
            unit u=GetTriggerUnit(),t=GetSpellTargetUnit()
            Spell.onCreate(u,t)   
            AL.onCreate(u,t,u)
            clear
        endif 
        return false
    }
    
    private void Init(){
        trigger t=CreateTrigger()
        TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        TriggerAddCondition(t, Condition(function Cond))
        clear
    }
}
Название: Ul
Метод исполнения: vjass+cjass
Нужен ли JNGP: +
Тип цели: область
Описание: Кастер насылает на врага 3 сферы, который в течении небольшого периода начинают летать вокруг цели, нанося урон, замедляя, и снижая защиту
» code
scope Ultimate initializer Init{
    include "cj_types_priv.j"
    define{
        private SpellId='Z004'
        private DummySpellId1='Z005'
        private DummySpellId2='Z006'
        private DummyId1='h000'
        private DummyId2='h001'
        private DummyId3='h002'
        private LIGHTId1="DRAM"
        private LIGHTId2="DRAM"
        private LIGHTId3="DRAM"
        private clear=flush locals
    }
    //private hashtable h=InitHashtable()
    private struct AddEffect{
    unit u,d,cast
    real Angle,AX,AY,AZ,r,s,c,dmg
    int i
    lightning array l[3]
        static method onAction takes void returns void
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            real xu,yu,xc,yc,a,ax,ay,az,zu,zc
            if GetWidgetLife(r.u)>0.145
                if r.d==null
                    UnitRemoveAbility(r.u,'Basl')
                    UnitRemoveAbility(r.u,DummySpellId1)
                    UnitRemoveAbility(r.u,DummySpellId2)
                    ReleaseTimer(t)
                else
                    xu = GetUnitX(r.d)
                    yu = GetUnitY(r.d)
                    xc = GetUnitX(r.u)
                    yc = GetUnitY(r.u)
                    zu = GetUnitFlyHeight(r.d)
                    zc = GetUnitFlyHeight(r.u)+50
                    a = r.Angle
                    ax = r.AX
                    ay = r.AY
                    az = r.AZ
                    xu = xc + r.r*SinBJ(a+r.s)*CosBJ(ax)
                    if az > 0
                        yu = yc + r.r*CosBJ(a+r.s)*SinBJ(ay)
                    else
                        yu = yc + r.r*SinBJ(a+r.s)*CosBJ(ay)
                    endif
                    zu = zc + r.r*CosBJ(a+r.s)*CosBJ(az)
                    SetUnitX(r.d,xu)
                    SetUnitY(r.d,yu)
                    SetUnitFlyHeight(r.d,zu,0.00)
                    UnitAddAbility(r.u,DummySpellId1)
                    UnitAddAbility(r.u,DummySpellId2)
                    r.Angle = r.Angle + r.s
                    if r.Angle >= 360
                        r.Angle = 0
                    endif
                    if r.c<0.7
                        r.s+=0.05
                        r.r+=.3
                        r.c+=0.004
                        SetUnitScale(r.d,r.c,r.c,r.c)
                        UnitDamageTarget(r.d,r.u,r.dmg,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_MAGIC,null)
                    else
                        UnitRemoveAbility(r.u,'Basl')
                        UnitRemoveAbility(r.u,DummySpellId1)
                        UnitRemoveAbility(r.u,DummySpellId2)
                        RemoveUnit(r.d)
                        r.d=null
                        ReleaseTimer(t)
                    endif
                endif
                    //unit asd=LoadUnitHandle(h,GetHandleId(r.u),r.i)
                    //MoveLightningEx(r.l[r.i],true,xu,yu,zu,GetUnitX(asd),GetUnitY(asd),GetUnitFlyHeight(asd))
            else
                if r.d!=null
                    RemoveUnit(r.d)
                    r.d=null
                endif
            endif
            clear
        endmethod
        static method onCreate takes unit u,int i,unit tt returns thistype
            thistype r = thistype.create()
            timer t = NewTimer()
            r.u=tt
            r.cast=u
            if i==2
                r.d=CreateUnit(GetOwningPlayer(u),DummyId1,GetUnitX(tt),GetUnitY(tt),0)
                r.Angle=180
                r.AX=0
                r.AY=90
                r.AZ=0
                //r.l[i]=AddLightningEx(LIGHTId1,true,GetUnitX(tt),GetUnitY(tt),0,GetUnitX(tt),GetUnitY(tt),0)
                //SaveUnitHandle(h,GetHandleId(tt),1,r.d)
            elseif i==1
                r.d=CreateUnit(GetOwningPlayer(u),DummyId2,GetUnitX(tt),GetUnitY(tt),0)
                r.Angle=0
                r.AX=90
                r.AY=0
                r.AZ=0
                //r.l[i]=AddLightningEx(LIGHTId2,true,GetUnitX(tt),GetUnitY(tt),0,GetUnitX(tt),GetUnitY(tt),0)
                //SaveUnitHandle(h,GetHandleId(tt),0,r.d)
            elseif i==0
                r.d=CreateUnit(GetOwningPlayer(u),DummyId3,GetUnitX(tt),GetUnitY(tt),0)
                r.Angle=90
                r.AX=0
                r.AY=90
                r.AZ=90
                //r.l[i]=AddLightningEx(LIGHTId3,true,GetUnitX(tt),GetUnitY(tt),0,GetUnitX(tt),GetUnitY(tt),0)
                //SaveUnitHandle(h,GetHandleId(tt),2,r.d)
            endif
            r.dmg=(30+10*GetUnitAbilityLevel(r.u,SpellId))*0.03125
            r.r=50
            r.s=5
            //SetLightningColor(r.l[i],1,1,1,0)
            r.i=i
            SetTimerData(t, r)
            TimerStart(t, 0.03125, true, function thistype.onAction)
            clear
            return r
        endmethod
    }
    private struct Creating{
    unit u,t
    int i
        static method onAction takes void returns void
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            if r.i>=0
                r.i-=1
                AddEffect.onCreate(r.u,r.i,r.t)
            else
                ReleaseTimer(t)
            endif
            clear
        endmethod
        static method onCreate takes unit u,unit tt returns thistype
            thistype r = thistype.create()
            timer t = NewTimer()
            r.u=u
            r.t=tt
            r.i=3
            SetTimerData(t, r)
            TimerStart(t, 0., true, function thistype.onAction)
            clear 
            return r
        endmethod
    }
    private bool Con(){
        if GetSpellAbilityId()==SpellId
            unit u=GetTriggerUnit(),t=GetSpellTargetUnit()
            Creating.onCreate(u,t)
        endif
        clear
        return false
    }
    private void Init(){
        trigger t=CreateTrigger()
        TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_CAST )
        TriggerAddCondition( t, Condition( function Con ) )
        clear
    }
}
Дополнительно: при изучении заклинаний, появляется определенная сфера, которая начинает кружить вокруг героя (просто визуальный эффект)
» code
scope LearnSkill initializer Init{
    include "cj_types_priv.j"
    define{
        private SpellId1='Z001'
        private SpellId2='Z002'
        private SpellId3='Z003'
        private DummyId1='h000'
        private DummyId2='h001'
        private DummyId3='h002'
        private clear=flush locals
    }
    private struct AddEffect{
    unit u,d
    real Angle,AX,AY,AZ
    int i
        static method onAction takes void returns void
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            real xu,yu,xc,yc,a,ax,ay,az,zu,zc
            if GetWidgetLife(r.u)>0.145
                if r.d==null
                    r.d=CreateUnit(GetOwningPlayer(r.u),r.i,GetUnitX(r.u),GetUnitY(r.u),0)
                else
                    xu = GetUnitX(r.d)
                    yu = GetUnitY(r.d)
                    xc = GetUnitX(r.u)
                    yc = GetUnitY(r.u)
                    zu = GetUnitFlyHeight(r.d)
                    zc = GetUnitFlyHeight(r.u)+50
                    a = r.Angle
                    ax = r.AX
                    ay = r.AY
                    az = r.AZ
                    xu = xc + 50*SinBJ(a+8)*CosBJ(ax)
                    if az > 0
                        yu = yc + 50*CosBJ(a+8)*SinBJ(ay)
                    else
                        yu = yc + 50*SinBJ(a+8)*CosBJ(ay)
                    endif
                    zu = zc + 50*CosBJ(a+8)*CosBJ(az)
                    SetUnitX(r.d,xu)
                    SetUnitY(r.d,yu)
                    SetUnitFlyHeight(r.d,zu,0.00)
                    r.Angle = r.Angle + 8
                    if r.Angle >= 360
                        r.Angle = 0
                    endif
                endif
            else
                if r.d!=null
                    r.i=GetUnitTypeId(r.d)
                    RemoveUnit(r.d)
                    r.d=null
                endif
            endif
            clear
        endmethod
        
        static method onCreate takes unit u,int i returns thistype
            thistype r = thistype.create()
            timer t = NewTimer()
            r.u=u
            if i==SpellId1
                r.d=CreateUnit(GetOwningPlayer(u),DummyId1,GetUnitX(u),GetUnitY(u),0)
                r.Angle=180
                r.AX=0
                r.AY=90
                r.AZ=0
            elseif i==SpellId2
                r.d=CreateUnit(GetOwningPlayer(u),DummyId2,GetUnitX(u),GetUnitY(u),0)
                r.Angle=0
                r.AX=90
                r.AY=0
                r.AZ=0
            elseif i==SpellId3
                r.d=CreateUnit(GetOwningPlayer(u),DummyId3,GetUnitX(u),GetUnitY(u),0)
                r.Angle=90
                r.AX=0
                r.AY=90
                r.AZ=90
            endif
            SetTimerData(t, r)
            TimerStart(t, 0.03125, true, function thistype.onAction)
            clear
            return r
        endmethod
    }
    private bool Con(){
        unit u=GetTriggerUnit()
        if GetLearnedSkill()==SpellId1 and GetUnitAbilityLevel(u,SpellId1)==1
            AddEffect.onCreate(u,SpellId1)
        elseif GetLearnedSkill()==SpellId2 and GetUnitAbilityLevel(u,SpellId2)==1
            AddEffect.onCreate(u,SpellId2)
        elseif GetLearnedSkill()==SpellId3 and GetUnitAbilityLevel(u,SpellId3)==1
            AddEffect.onCreate(u,SpellId3)
        endif
        clear
        return false
    }
    
    private void Init(){
        trigger t=CreateTrigger()
        TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_HERO_SKILL )
        TriggerAddCondition( t, Condition( function Con ) )
        clear
    }
}
Прикрепленные файлы
Тип файла: w3x Random Skills.w3x (32.8 Кбайт, 116 просмотров )
Старый 13.11.2011, 17:29
Критик
Нету времени(
offline
Опыт: 3,375
Активность:

Мой герой - Бордо


Имеет 4 способности:
  • Злость медведя;
    Медведь впадает в ярость и наносит увеличеный урон, так же увеличивается скорость боя и перемещения на протяжении 6 секунд.
    Уровень 1 - 2-х кратное увеличение урона, увеличение скорости боя на 30%, а скорости перемещения на 20%.
    Уровень 2 - 2.5-х кратное увеличение урона, увеличение скорости боя на 40%, а скорости перемещения на 25%.
    Уровень 3 - 3-х кратное увеличение урона, увеличение скорости боя на 50%, а скорости перемещения на 30%.
  • Сила холода;
    Бордо силен в магии холода. Он способен заморозить противников в радиусе 400 AOE вокруг него и при этом нанести им урон.
    Уровень 1 - Заморозка на 1.5 секунд, помимо этого нанесение 50 ед. урона.
    Уровень 2 - Заморозка на 2 секунд, помимо этого нанесение 75 ед. урона.
    Уровень 3 - Заморозка на 2.5 секунд, помимо этого нанесение 100 ед. урона.
  • Размах лап;
    Часть урона, наносимого медведем Бордо, передается воинам, которые находятся рядом с целью его атаки.
    Уровень 1 - 25% урона.
    Уровень 2 - 45% урона.
    Уровень 3 - 70% урона.
  • Бешенство;
    Бордо теряет голову и впадает в бешенство, его цель просто обречена. Если у нее меньше чем 350 ед. здоровья Бордо ее разрывает на части, в противном случае Бордо наносит 250 ед. урона. После этого медведь теряет 3 ед. брони на 10 секунд.
Все способности сделаны на GUI + CS (но по ошибке были переведены в JASS)
Пришлось уже плясать с того, что было)
Все способности можно использовать в мультиплеере, то-есть MUI.

Не пинать ногами) После этого примера как раз начал читать Оптимизацию от J и сразу увидел ошибки)
Прикрепленные файлы
Тип файла: w3x Бордо.w3x (60.1 Кбайт, 59 просмотров )

Отредактировано Критик, 16.11.2011 в 01:40.
Старый 16.11.2011, 01:28
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Яростный таурен
Всплеск Ярости
Таурен бьет врага с такой силой что враг отлетает и получает урон равный набранной ярости.
1 уровень - Увеличение ярости на 10%
2 уровень - Увеличение ярости на 20%
3 уровень - Увеличение ярости на 30%
Зверийный топот
С каждым ударом в землю таурен начинает набирать все больше и больше ярости из за чего последущий удар будет сильней на 20%. ярость спадает после 5 применений. при этом если враг напуган ему нанесется доп урон в размере 50/100/150 ед.
1 Уровень 100 ед урона (основной урон)
2 Уровень 200 ед урона (основной урон)
3 Уровень 300 ед урона (основной урон)
Аура сокрушения
Таурен пугает ближайших к нему врагов из за чего у них немного уменьшается скорость передвижения и атаки
1 уровень снижение скорости боя и атаки на 10%
2 уровень снижение скорости боя и атаки на 20%
3 уровень снижение скорости боя и атаки на 30%
Ярость
Таурен вспоминает свою ярость которую он проявлял в бою,из за чего таурен накапливает свою ярость - (ярость накапливается быстрей с каждым уровнем всплеска ярости). При всплеске вся ярость спадает.При этом таурен получает шанс в 12% получить 1/2/3 ед силы при атаке навсегда.
1 уровень шанс 10% нанести доп 40 ед урона,12%
Шанс получить 1 доп ед силы навсегда.
2 уровень шанс 10% нанести доп 60 ед урона,а также совершить 2х смертельный удар по врагу12%
Шанс получить 2 доп ед силы навсегда.
3 уровень шанс 10% нанести доп 80 ед урона а также совершить 3х смертельный удар по врагу 12% Шанс получить 3 доп ед силы навсегда.
Способ исполнения Gui
Прикрепленные файлы
Тип файла: w3x Яростный Таурен.w3x (70.6 Кбайт, 72 просмотров )
Старый 19.11.2011, 10:04
Arti

offline
Опыт: 11,196
Активность:
делал на хайв на конкурс) с англ слабовато, та и спелы не ахти)

Gloin, Techno dwarf



Electric charge
An electric bolt that deals damage any unit it encounters. The damage is reduced 10% with each affected unit.


Force field
Techno-dwarf creates force field around himself. All covered allied units get less damage from range and magic attacks. And every 3 seconds it purges all positive buffs from enemies, pause them for 1 second and deals damage to summoned units.

Overload
Dwarf's suit stores energy charges after 6/5/4 his attacks or after using "Electric charge" or "Mechanical dispersal", that dealing damage to every ground unit and slow them, on small area with his next attack.


Mechanical dispersal
Dwarf overheats his suit and chases enemy target, ignoring any obstacles on his way. When dwarf reaches his target, he uses energy from overheating, to gain ultra fast attack speed for next 5 hits. Buff dispel if hero change target.
Прикрепленные файлы
Тип файла: w3x Techno dwarf.w3x (197.0 Кбайт, 85 просмотров )
Старый 05.12.2011, 20:32
Atideva

offline
Опыт: 1,361
Активность:
Портал
  • ГУИ -
Красивый портал.
Можно использовать как способность.
Когда юнит входит в портал, портал сжимается и телепортирует юнита в пункт назначения. И снова открывается.
В карте есть примеры.
Советую: посмотреть в игре, а не на скриншоте.
обновил:
-в точке назначения тоже создается портал (можно перемещатся в двух направлениях, если не запретить при создании портала)
-добавил всякие мелочи, чтобы можно было настроить по своему заклинание
Миниатюры
Кликните на картинку для увеличения
Название:  PortalTP.jpg
Просмотров: 296
Размер:  147.1 Кбайт  
Прикрепленные файлы
Тип файла: w3x Portal_nice.w3x (33.4 Кбайт, 80 просмотров )

Отредактировано Atideva, 18.12.2011 в 22:52.
Старый 13.12.2011, 00:15
DualShock

offline
Опыт: 5,023
Активность:
Название: Fade Bolt
Метод исполнения: vjass/cjass (только define-ы) + можно выбрать cjass или vjass
Нужен ли JNGP: Конечно
Тип цели: Unit
MUI: Конечно
Для героя? Да
Кол-во уровней: 4
Оригинальное описание:
Ceates a powerful stream of arcane energy that travels between enemy units, dealing damage and reducing their attack damage for 10 seconds.
Комментарии: От нечего делать, решил сделать Fade Bolt из доты (Rubick), без импорта. Давно ничего не выкладывал т. к. подзабил на модмокинг. В общей сложности у меня ушло на него не так уж много времени (2 часа). Настроить можно практически всё.
Cтавим плюсики <3
Happy New Year! =)
Миниатюры
Кликните на картинку для увеличения
Название:  Безымянный.jpg
Просмотров: 349
Размер:  388.9 Кбайт  Кликните на картинку для увеличения
Название:  2.jpg
Просмотров: 205
Размер:  439.5 Кбайт  
Прикрепленные файлы
Тип файла: w3x Fade Bolt.w3x (39.0 Кбайт, 87 просмотров )

Отредактировано DualShock, 07.07.2012 в 22:23.
Старый 31.12.2011, 21:35
Arti

offline
Опыт: 11,196
Активность:
Название: Росток(Sprout)
Метод исполнения: GUI
Тип цели: Точка
Результат применения: Вокруг врага вырастают деревья, не давая ему двигаться 3/4/5 сек.
Наличие глобальных переменных: 1
Название: Стена из деревьев
Метод исполнения: GUI
Тип цели: Точка
Результат применения: Создание непроходимой стены из деревьев между указаной точкой и героем на 3/4/5 секунд, через которую может проходить только герой.
Наличие глобальных переменных: 7
Прикрепленные файлы
Тип файла: w3x Tree Spells.w3x (19.0 Кбайт, 85 просмотров )
Старый 15.01.2012, 16:03
Arti

offline
Опыт: 11,196
Активность:
Название: Рывок
Метод исполнения: GUI
Тип цели: Враг
Результат применения: Герой мчиться к указаной целе, по достижении атакуя её и нанеся в 1.5/2.5/3.5 раз больше урона, не учитывая дополнительную атаку от предметов. Прерываемо.
Исправил баг.
Прикрепленные файлы
Тип файла: w3x Jerk.w3x (16.3 Кбайт, 86 просмотров )

Отредактировано Arti, 26.01.2012 в 00:46.
Старый 15.01.2012, 22:35
Arti

offline
Опыт: 11,196
Активность:
Название: Рывок(действует с иллюзиями героя)
Метод исполнения: GUI
Результат применения: Герой и все его иллюзии мчаться к указаной целе, по достижении атакуя её и нанеся в 1.5/2.5/3.5 раз больше урона, не учитывая дополнительную атаку от предметов. Прерываемо.
Количество уровней: 4
Название: Стремительный меч(Omnislash)
Метод исполнения: GUI
Результат применения: Герой врывается на врагов и становится на время атаки неуязвимым, поражая их один за другим не учитывая дополнительную атаку от предметов. Максимальное количество атак - 10/20/30.
Количество уровней: 3
Прикрепленные файлы
Тип файла: w3x Jerk.w3x (21.8 Кбайт, 78 просмотров )
Старый 26.01.2012, 01:30
Msey
????
offline
Опыт: 67,346
Активность:
Название:Extra speed 522+
Тип исполнения: cJass [custom script] (требуются AdicHelper и JNGP последних версий)
Муи: да
Для кого: для любой боевой единицы с инвентарем
Описание: При поднятии предмета, у юнита становится скорость передвижения выше 522мс
Легко настраивается
Также, к системе можно прикрутить дамаг (на подобии Rupture бладсикера из доты итд) или манаберн
решил запилить спелл сюда, хоть он и был заказан приватно)
Прикрепленные файлы
Тип файла: w3x boots_cJass.w3x (34.6 Кбайт, 79 просмотров )
Старый 13.02.2012, 03:06
Msey
????
offline
Опыт: 67,346
Активность:
Vadik29, вот тебе пример с хеш-таблицей
Название: сold snap
Метод исполнения: cJass requires adic helper (last ver)
Муи: как всегДА
Для героя: для кого хочешь
Уровни: да сколько захочется, столько и выставишь
Описуха:Спелл простенький. При касте заклинания все вражеские юниты возле героя временно замораживаются и замирают в той позиции, в которой они были.
Прикрепленные файлы
Тип файла: w3x Cold Snap_cJass.w3x (34.9 Кбайт, 42 просмотров )

Отредактировано Msey, 03.03.2012 в 09:43.
Старый 02.03.2012, 22:31
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,403
Активность:
Название: 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​&#8203;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,403
Активность:
Сделал два спелла взяв за основу 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,030
Активность:
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,030
Активность:
Автор: 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
Миниатюры
Кликните на картинку для увеличения
Название:  scr1.JPG
Просмотров: 192
Размер:  197.9 Кбайт  Кликните на картинку для увеличения
Название:  scr3.JPG
Просмотров: 189
Размер:  202.2 Кбайт  Кликните на картинку для увеличения
Название:  scr4.JPG
Просмотров: 152
Размер:  200.0 Кбайт  
Прикрепленные файлы
Тип файла: w3x IllusionChains.w3x (99.4 Кбайт, 61 просмотров )

Отредактировано Hate, 10.08.2012 в 06:06.
Старый 08.08.2012, 05:36
Hate
конь вакуумный
offline
Опыт: 43,030
Активность:
Автор: 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
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
влад, баян, но для начинающего неплохо, вполне. (не тестил, по коду рассуждаю)
лучше используй струкруты
парочку советов:

1: в функции Trig_SpellJigirnaut_Actions

убери Inits, можно проще:


» раскрыть
Код:
if(Count==0)then
    call TimerStart(tim,0.025,true,cb) // при начале
endif

и
» раскрыть
Код:
if(Count==0)then
    call PauseTimer(tim) // при конце
endif



2: это все можно заменить .destroy() в структурах (но в конечном итоге одно и тоже)
» раскрыть
Код:
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]


3: с эффектами там тоже мутное удаление
нужно call DestroyEffect(AddSpecialEffectTarget(аргументы функции))

+1, дерзай
Старый 31.08.2012, 23:48
влад10011

offline
Опыт: 2,337
Активность:
я знаю я просто когда выкладывал спелл не знал про структуры Хеш и ну и что можно просто написать
TimerStart(CreateTimer(),0.025,true,function ------)
и какой смысл останавливать его если он работает всю игру?
Старый 12.09.2012, 16:18
youtube
сктыщь
offline
Опыт: 8,025
Активность:
влад10011,
Как запихивать в спойлер текст?
не?
Старый 12.09.2012, 17:03
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
влад10011, в инете таких полно=)
Старый 12.09.2012, 17:22
влад10011

offline
Опыт: 2,337
Активность:
youtube, я читал(ещё до того как ты мне показал) там нету =_=
Старый 12.09.2012, 18:33
Redykt
<(◕_^)>Няя!\\<(-_-")>
offline
Опыт: 7,026
Активность:
Vadik29:
Название: X-Banner
Метод исполнения: Jass,MUI
Нужен ли JNGP: нет
Тип цели: точка ,Channel
Результат применения: на скрине
Количество уровней: неограниченно
Вызов заклинания на цель: да
Наличие глобальных переменных: Хеш
Ставьте плюсы кому пригодился спел!)
я так и не пойму, кармадрочер, за что ты хочешь плюсы? За то что ты украл чужой спелл и выложил сюда?
Старый 12.09.2012, 21:26
youtube
сктыщь
offline
Опыт: 8,025
Активность:
влад10011,
я читал(ещё до того как ты мне показал) там нету =_=
я даже не побоюсь этого слова и скажу, что ты рак...
это что тогда по твоему?
Старый 12.09.2012, 21:37
Extremator

offline
Опыт: 39,403
Активность:
влад10011:
Название: Землетрясение
Метод исполнения: Jass
Нужен ли JNGP: нет
Тип цели: юнит
Результат применения: Герой чертит линию по которой движется землетрясение(а линия идёт за целью пока землетрясение не дойдёт до цели). Землетрясение наносит урон вокруг себя 15 в сек и дойдя до цели наносит дополнительно 100 урона.
Спелл сделан полностью на локальных переменных. MUI
Количество уровней: 1
Вызов заклинания на цель: нету
Наличие глобальных переменных: нету
выглядит как-то стрёмно =/
Старый 14.09.2012, 09:17
влад10011

offline
Опыт: 2,337
Активность:
мой 1 спелл на Jass.... =_=
там ещё и вайт в loop был О_о
Старый 14.09.2012, 11:41
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Redykt, Лол?Откуда?
Если че то это я выложил... -_-
X-Banner
Created by Vadik29
3 Comments.
Download X-Banner.w3x
Старый 15.09.2012, 07:57
youtube
сктыщь
offline
Опыт: 8,025
Активность:
Немного вечерней наркомании, давненько ничего не делал и решал вот освежить память
Название: Кривой хук
Метод исполнения: Vjass+cjass
Нужен ли JNGP: ofc
Как? Что? Куда наводить? Как врубить?: просто тыкай на скилл да
Описание: После применения скила, вокруг героя начинает летать хук, которой тащит всех врагов, которые попадутся ему на пути. После того как хук достигнет максимальных размеров, он летит
обратно в точку отправления, и так же может зацепить новых врагов. Урон - 100ед
» Криво-код
include "cj_types.j"
include "cj_typesEX.j"
define{
    msg(g)=BJDebugMsg(g)
}
scope WeirdHook initializer Init{
    ///////////////////////////
    define{
        private SpellId='A000' //айди скила
        private HookId='h001' //айди хука
        private Periodic=0.025 //период
        private Damage=100 //урон офк
        private max_size=300 //кол-во хуковинок) хз как еще назвать их
        private EFFECT="Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodFootman.mdl"
    }
    ///////////////////////////
    private unit CAST,DUMMY
    private group GROUP
    ///////////////////////////
    private struct Con
        unit cast,hk[max_size],illusion
        real x,y,a,range
        int num
        bool up
        group g
        player p
        static method onMove takes nothing returns boolean
            unit u = GetFilterUnit()
            if IsUnitEnemy(CAST, GetOwningPlayer(u)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MECHANICAL) and IsUnitInGroup(u,GROUP) then 
                real x,y,a,x1,y1,d
                x=GetUnitX(u)
                y=GetUnitY(u)
                x1=GetUnitX(DUMMY)
                y1=GetUnitY(DUMMY)
                a=Atan2(y1-y, x1-x)
                d=SquareRoot((x1-x)*(x1-x)+(y1-y)*(y1-y))
                SetUnitX(u,x+d*0.7*Cos(a))
                SetUnitY(u,y+d*0.7*Sin(a))
                DestroyEffect(new effect(EFFECT,GetUnitX(u),GetUnitY(u)))
            endif
            u = null
            return false          
        endmethod
        
        static method onRange takes nothing returns boolean
            unit u = GetFilterUnit()
            if IsUnitEnemy(CAST, GetOwningPlayer(u)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MECHANICAL) and not IsUnitInGroup(u,GROUP) then 
                UnitDamageTarget(CAST, u, Damage , false, false, null, null, null) 
                GroupAddUnit(GROUP,u)
            endif
            u = null
            return false          
        endmethod
        
        static method onAction takes nothing returns nothing
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            GROUP=r.g
            CAST=r.cast
            if r.up
                if r.num<=max_size
                    r.num++
                    r.range+=0.8
                    r.a+=0.1
                    real x,y
                    x=r.x+r.range*Cos(r.a)
                    y=r.y+r.range*Sin(r.a)
                    real newface=Atan2(y-GetUnitY(r.hk[r.num-1]),x-GetUnitX(r.hk[r.num-1]))
                    r.hk[r.num]=new unit(r.p,HookId,x,y,Rad2Deg(newface))
                    DUMMY=r.hk[r.num]
                    GroupEnumUnitsInRange(bj_lastCreatedGroup, GetUnitX(r.hk[r.num]), GetUnitY(r.hk[r.num]), 150., Filter(function thistype.onMove))
                    GroupEnumUnitsInRange(bj_lastCreatedGroup, GetUnitX(r.hk[r.num]), GetUnitY(r.hk[r.num]), 50., Filter(function thistype.onRange))
                else
                    SetUnitAnimation(r.illusion,"attack")
                    r.up=false
                endif
            else
                if r.num>0
                    RemoveUnit(r.hk[r.num])
                    r.num--
                    DUMMY=r.hk[r.num]
                    GroupEnumUnitsInRange(bj_lastCreatedGroup, GetUnitX(r.hk[r.num]), GetUnitY(r.hk[r.num]), 150., Filter(function thistype.onMove))
                    GroupEnumUnitsInRange(bj_lastCreatedGroup, GetUnitX(r.hk[r.num]), GetUnitY(r.hk[r.num]), 50., Filter(function thistype.onRange))
                else
                    GroupClear(r.g)
                    DestroyGroup(r.g)
                    RemoveUnit(r.illusion)
                    ReleaseTimer(t)
                    t=null
                    return
                endif
            endif
            t = null
        endmethod
        
        static method onCreate takes unit caster returns thistype
            thistype r= thistype.create()
            timer t = NewTimer()
            r.cast=caster
            r.a=Deg2Rad(GetUnitFacing(caster))
            r.range=150.
            r.num=0
            r.up=true
            r.g=new group
            r.p=GetOwningPlayer(caster)
            r.x=GetUnitX(caster)
            r.y=GetUnitY(caster)
            r.illusion=new unit(Player(12),GetUnitTypeId(r.cast),r.x,r.y,GetUnitFacing(caster))
            UnitAddAbility(r.illusion,'Aloc')
            SetUnitX(r.illusion,r.x)
            SetUnitY(r.illusion,r.y)
            SetUnitVertexColor(r.illusion, 255, 255, 255, 150)
            SetUnitColor(r.illusion, GetPlayerColor(r.p) )
            SetUnitAnimation(r.illusion,"attack")
            //SetUnitTimeScale(r.illusion, 0)
            SetTimerData(t, r)
            TimerStart(t, Periodic, true, function thistype.onAction)
            t = null
            return r
        endmethod
    
    endstruct 
    private bool Cond(){
        if GetSpellAbilityId()==SpellId
            unit cast=GetTriggerUnit()
            Con.onCreate(cast)
            cast=null
        endif
        return false
    }
    private void Init(){
        trigger t=new trigger
        int i = 0
        do {
            TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        } whilenot(i++==12)
        TriggerAddCondition(t,Condition(function Cond))
        t=null
    }
}
Ставьте минусы на здоровье!
Прикрепленные файлы
Тип файла: w3x Weird hook.w3x (21.2 Кбайт, 52 просмотров )
Старый 18.09.2012, 18:11
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Развеял скуку.
Название: Sleep Wave
Способ исполнения: как всегда структуры, не меняюсь
Описание: Обычная темная стая, только вместо простого урона усыпляет врагов. Во сне они получают двадцать пять ед. урона в секунду. Действует пять секунд.
»
Код:
library sw initializer in
    globals
        private group tmpgrp=CreateGroup()
        private location tmploc
        private integer indx
        private real nx
        private real xx
        private real ny
        private real xy
    endglobals
    private struct se
        unit m
        unit u
        real t
        real d
        effect fx
        static method cb takes nothing returns nothing
            local integer i=0
            loop
                exitwhen(i>=.c)
                set .dt[i].t=.dt[i].t-.025
                if(.dt[i].t>0.)then
                    call UnitDamageTarget(.dt[i].m,.dt[i].u,.dt[i].d,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
                else
                    call PauseUnit(.dt[i].u,false)
                    call DestroyEffect(.dt[i].fx)
                    call .dt[i].destroy()
                    set .c=.c-1
                    set .dt[i]=.dt[.c]
                    set i=i-1
                    if(.c==0)then
                        call PauseTimer(.tm)
                    endif
                endif
                set i=i+1
            endloop
        endmethod
        static method register takes unit m,unit u returns nothing
            local integer i=0
            loop
                exitwhen(i>=.c)
                if(u==.dt[i].u)then
                    return
                endif
                set i=i+1
            endloop
            set .dt[.c]=se.create()
            set .dt[.c].u=u
            set .dt[.c].t=5.
            set .dt[.c].d=25.*.025
            set .dt[.c].m=m
            set .dt[.c].fx=AddSpecialEffectTarget("Abilities\\Spells\\Undead\\Sleep\\SleepTarget.mdl",u,"overhead")
            call PauseUnit(u,true)
            call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\Sleep\\SleepSpecialArt.mdl",u,"origin"))
            if(.c==0)then
                call TimerStart(.tm,.025,true,function se.cb)
            endif
            set .c=.c+1
        endmethod
        static se array dt
        static integer c=0
        static timer tm=CreateTimer()
    endstruct
    private struct sw
        unit u
        unit d
        effect fx
        real x
        real y
        group e
        real a
        real r
        real m
        real s
        player o
        static method ff takes nothing returns boolean
            local unit u=GetFilterUnit()
            if(GetWidgetLife(u)>.405)then
                if(IsUnitEnemy(u,.dt[indx].o))then
                    if(not(IsUnitInGroup(u,.dt[indx].e)))then
                        call GroupAddUnit(.dt[indx].e,u)
                        call se.register(.dt[indx].u,u)
                    endif
                endif
            endif
            set u=null
            return(false)
        endmethod
        static method cb takes nothing returns nothing
            local integer i=0
            loop
                exitwhen(i>=.c)
                if(.dt[i].r<.dt[i].m)then
                    set .dt[i].r=.dt[i].r+.dt[i].s
                    set .dt[i].x=.dt[i].x+.dt[i].s*Cos(.dt[i].a)
                    set .dt[i].y=.dt[i].y+.dt[i].s*Sin(.dt[i].a)
                    if(.dt[i].x>xx)then
                        set .dt[i].x=xx
                    elseif(.dt[i].x<nx)then
                        set .dt[i].x=nx
                    elseif(.dt[i].y>xy)then
                        set .dt[i].y=xy
                    elseif(.dt[i].y<ny)then
                        set .dt[i].y=ny
                    endif
                    call SetUnitX(.dt[i].d,.dt[i].x)
                    call SetUnitY(.dt[i].d,.dt[i].y)
                    set indx=i
                    call GroupEnumUnitsInRange(tmpgrp,.dt[i].x,.dt[i].y,225.,Condition(function sw.ff))
                else
                    call DestroyEffect(.dt[i].fx)
                    call DestroyGroup(.dt[i].e)
                    call KillUnit(.dt[i].d)
                    call .dt[i].destroy()
                    set .c=.c-1
                    set .dt[i]=.dt[.c]
                    set i=i-1
                    if(.c==0)then
                        call PauseTimer(.tm)
                    endif
                endif
                set i=i+1
            endloop
        endmethod
        static method cst takes nothing returns boolean
            if(GetSpellAbilityId()=='A000')then
                set .dt[.c]=sw.create()
                set .dt[.c].u=GetTriggerUnit()
                set .dt[.c].x=GetUnitX(.dt[.c].u)
                set .dt[.c].y=GetUnitY(.dt[.c].u)
                set .dt[.c].o=GetOwningPlayer(.dt[.c].u)
                set .dt[.c].s=1200.*.025
                set tmploc=GetSpellTargetLoc()
                set .dt[.c].e=CreateGroup()
                set .dt[.c].a=Atan2(GetLocationY(tmploc)-.dt[.c].y,GetLocationX(tmploc)-.dt[.c].x)
                call RemoveLocation(tmploc)
                set .dt[.c].r=0.
                set .dt[.c].m=800.
                set .dt[.c].d=CreateUnit(.dt[.c].o,'du00',.dt[.c].x,.dt[.c].y,.dt[.c].a*bj_RADTODEG)
                set .dt[.c].fx=AddSpecialEffectTarget("Abilities\\Spells\\Undead\\CarrionSwarm\\CarrionSwarmMissile.mdl",.dt[.c].d,"chest")
                if(.c==0)then
                    call TimerStart(.tm,.025,true,function sw.cb)
                endif
                set .c=.c+1
            endif
            return(false)
        endmethod
        static sw array dt
        static integer c=0
        static timer tm=CreateTimer()
    endstruct
    private function dff takes nothing returns boolean
        return(true)
    endfunction
    private function in takes nothing returns nothing
        local trigger t=CreateTrigger()
        local boolexpr b=Condition(function dff)
        local integer i=0
        loop
            call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,b)
            set i=i+1
            exitwhen(i>11)
        endloop
        call TriggerAddCondition(t,Condition(function sw.cst))
        set nx=GetCameraBoundMinX()-512.
        set xx=GetCameraBoundMaxX()+512.
        set ny=GetCameraBoundMinY()-256.
        set xy=GetCameraBoundMaxY()+256.
        call Preload("Abilities\\Spells\\Undead\\CarrionSwarm\\CarrionSwarmMissile.mdl")
        call Preload("Abilities\\Spells\\Undead\\Sleep\\SleepSpecialArt.mdl")
        call Preload("Abilities\\Spells\\Undead\\Sleep\\SleepTarget.mdl")
        call DestroyBoolExpr(b)
        set b=null
        set t=null
    endfunction
endlibrary
можете кстати проголосовать если кому-то понравилось или наоборот
Прикрепленные файлы
Тип файла: w3x sw.w3x (18.6 Кбайт, 37 просмотров )

Отредактировано bee, 20.09.2012 в 06:55.
Старый 18.09.2012, 23:12
влад10011

offline
Опыт: 2,337
Активность:
Название: Гром с небес
Метод исполнения: cJass
Нужен ли JNGP: угу
MUI: угу
Тип цели: без цели
Описание: Юнит применяет способность и с неба падают молнии в случайной точке вокруг героя нанося урон.
Количество уровней: хоть сколько
Наличие глобальных переменных: приватный Хеш
» КОД

Код:
library LibSpellMol initializer Init {

define private on=true
define private off=false

define {
private Per=1.50 //Когда периодически будут появляться молнии
private PerUp=0.25 //Минус сколько задешки за каждый лвл будут появляться молнии
private Mol=4 //Сколько будет появлений молний
private MolUp=1 //Плюс сколько молний за каждый лвл
private Area=400.00 //Радиус на котором рандомно появляються молнии
private Area2=150.00 //Радиус урона при ударе молнии
private Damage=35.00 //Начальный урон(за удар молнией)
private DamageUp=15.00 //Плюс сколько урона за каждый лвл(за удар молнией)
/* Чтобы не прибавлять нечего за каждый лвл просто ставте 0 */
private FS=on //Включить\выключить "вспышку молнии" после окончания спелла on\off
private Rad=50.00 //Радиус вспышки молнии(от гера)
private MYEFFECT="Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl" //Модель эффекта молнии
private Spell='A000' //Рав-Код Спелла(для каста)
//===========================================================
private Pr=Per-(PerUp*GetUnitAbilityLevel(u,Spell))
private DM=Damage+(DamageUp*GetUnitAbilityLevel(Caster,Spell))
private MAX=Mol+(MolUp*GetUnitAbilityLevel(u,Spell))
private H2I(h)=GetHandleId(h)
private end=return
private ifloop=exitwhen
private void=nothing
private XR=x=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
private YR=y=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
}

globals
private hashtable Hash=InitHashtable()
private unit Caster
private constant boolean BOOOOOOOO=FS
endglobals

private boolean DeathUnit(unit u) {
end GetUnitState(u,UNIT_STATE_LIFE)<0.405
}

private rect CreateRectArea(real x,real y,real area,boolean b) {
if b==true
return Rect(x-area,y-area,x+area,y+area)
else
return Rect(x-area,y+area,x+area,y-area)
endif
}

private boolean Filters() {
unit u=GetFilterUnit()
boolean b=IsUnitType(u,UNIT_TYPE_STRUCTURE)==false and IsUnitEnemy(u, GetOwningPlayer(Caster))==true
u=null
end b
}

private void EffectRect(string s,unit u,real r,boolean b) {
real x=GetUnitX(u)
real y=GetUnitY(u)
DestroyEffect(AddSpecialEffect(s,x,y))
if b==true {
DestroyEffect(AddSpecialEffect(s,x+r,y+r))
DestroyEffect(AddSpecialEffect(s,x-r,y+r))
DestroyEffect(AddSpecialEffect(s,x-r,y-r))
DestroyEffect(AddSpecialEffect(s,x+r,y-r))
elseif b==false
DestroyEffect(AddSpecialEffect(s,x+r,y))
DestroyEffect(AddSpecialEffect(s,x,y+r))
DestroyEffect(AddSpecialEffect(s,x-r,y))
DestroyEffect(AddSpecialEffect(s,x,y-r))
DestroyEffect(AddSpecialEffect(s,x+r,y+r))
DestroyEffect(AddSpecialEffect(s,x-r,y+r))
DestroyEffect(AddSpecialEffect(s,x-r,y-r))
DestroyEffect(AddSpecialEffect(s,x+r,y-r))
}
 }

private void Bred(unit u) {
if BOOOOOOOO==on { 
EffectRect(MYEFFECT,u,Rad+150.00,true)
EffectRect(MYEFFECT,u,Rad,false)
    }
}

private void Damag() {
unit u=GetEnumUnit()
UnitDamageTarget(Caster,u,DM,true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,WEAP  ON_TYPE_WHOKNOWS)
u=null
}

private void Periodick() {
timer t=GetExpiredTimer()
unit u=LoadUnitHandle(Hash,H2I(t),H2I(t))
integer k=LoadInteger(Hash,H2I(u),H2I(u))
rect r=CreateRectArea(GetUnitX(u),GetUnitY(u),Area,true)
real XR
real YR
group g=CreateGroup()
boolexpr b
boolean bo=false
Caster=u

if k>=MAX or DeathUnit(u)==true
Bred(u)
RemoveSavedHandle(Hash,H2I(t),H2I(t))
RemoveSavedInteger(Hash,H2I(u),H2I(u))
FlushChildHashtable(Hash,H2I(t))
FlushChildHashtable(Hash,H2I(u))
DestroyTimer(t)
bo=true
endif

DestroyEffect(AddSpecialEffect(MYEFFECT,x,y))
RemoveRect(r)
r=CreateRectArea(x,y,Area2,true)
b=Condition(function Filters)
GroupEnumUnitsInRect(g,r,b)
DestroyBoolExpr(b)
ForGroup(g,function Damag)
k++

RemoveSavedInteger(Hash,H2I(u),H2I(u))
FlushChildHashtable(Hash,H2I(u))
if bo==false
SaveInteger(Hash,H2I(u),H2I(u),k)
endif
DestroyGroup(g)
RemoveRect(r)
b=null
g=null
r=null
t=null
u=null
}

private boolean Con() {
    if (not(GetSpellAbilityId()==Spell))
        end false
    endif
    end true
}

private void Cast() {
unit u=GetSpellAbilityUnit()
timer t=CreateTimer()
SaveUnitHandle(Hash,H2I(t),H2I(t),u)
SaveInteger(Hash,H2I(u),H2I(u),0)
TimerStart(t,Pr,true,function Periodick)
t=null
u=null
}

private void Init() {
trigger t=CreateTrigger()
    integer i=0
loop
TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
i++
ifloop i==bj_MAX_PLAYER_SLOTS
endloop
TriggerAddAction(t,function Cast)
TriggerAddCondition(t,Condition(function Con))

Preloader(MYEFFECT)
t=null
 }
}

Прикрепленные файлы
Тип файла: w3x MOOLN.w3x (19.5 Кбайт, 25 просмотров )
Старый 27.09.2012, 10:22
влад10011

offline
Опыт: 2,337
Активность:
аргументируйте минусы чтоле(
Старый 27.09.2012, 20:31
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
влад10011:
аргументируйте минусы чтоле(
ни выравнивания в коде,ни скринов,сжасс с хеш-таблицей
Старый 27.09.2012, 20:40
влад10011

offline
Опыт: 2,337
Активность:
Цитата:
Сообщение от Nerevar
ни выравнивания в коде

всм?
Цитата:
Сообщение от Nerevar
ни скринов

Щас добавлю
Цитата:
Сообщение от Nerevar
сжасс с хеш-таблицей

А что мне юзать? Структуры или массивы?(одно и тоже)
При структурах или массивах придётся делать таймер, который работает всю игру.
Таким образом не получиться сделать точную настройку отката "Удара Молнии", а с хешом намного проще.(Темболее сохраняю всего 2 значения, вместо того чтобы перебирать все значения из массива....)
Старый 27.09.2012, 20:52
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
влад10011:
всм?
СПЛОШНЯКОМ все написано,без отступов,табуляций
сравни с выравниванием хотя бы здесь
Старый 27.09.2012, 20:56
влад10011

offline
Опыт: 2,337
Активность:
Название: Гром с небес
Метод исполнения: cJass
Нужен ли JNGP: угу
MUI: угу
Тип цели: без цели
Описание: Юнит применяет способность и с неба падают молнии в случайной точке вокруг героя нанося урон.
Количество уровней: хоть сколько
Наличие глобальных переменных: приватный Хеш
» КОД

Код:
library LibSpellMol initializer Init {

define private on=true
define private off=false

define {
private Per=1.50 //Когда периодически будут появляться молнии
private PerUp=0.25 //Минус сколько задешки за каждый лвл будут появляться молнии
private Mol=4 //Сколько будет появлений молний
private MolUp=1 //Плюс сколько молний за каждый лвл
private Area=400.00 //Радиус на котором рандомно появляються молнии
private Area2=150.00 //Радиус урона при ударе молнии
private Damage=35.00 //Начальный урон(за удар молнией)
private DamageUp=15.00 //Плюс сколько урона за каждый лвл(за удар молнией)
/* Чтобы не прибавлять нечего за каждый лвл просто ставте 0 */
private FS=on //Включить\выключить "вспышку молнии" после окончания спелла on\off
private Rad=50.00 //Радиус вспышки молнии(от гера)
private MYEFFECT="Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl" //Модель эффекта молнии
private Spell='A000' //Рав-Код Спелла(для каста)
//===========================================================
private Pr=Per-(PerUp*GetUnitAbilityLevel(u,Spell))
private DM=Damage+(DamageUp*GetUnitAbilityLevel(Caster,Spell))
private MAX=Mol+(MolUp*GetUnitAbilityLevel(u,Spell))
private H2I(h)=GetHandleId(h)
private end=return
private ifloop=exitwhen
private void=nothing
private XR=x=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
private YR=y=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
}

globals
private hashtable Hash=InitHashtable()
private unit Caster
private constant boolean BOOOOOOOO=FS
endglobals

private boolean DeathUnit(unit u) {
end GetUnitState(u,UNIT_STATE_LIFE)<0.405
}

private rect CreateRectArea(real x,real y,real area,boolean b) {
if b==true
return Rect(x-area,y-area,x+area,y+area)
else
return Rect(x-area,y+area,x+area,y-area)
endif
}

private boolean Filters() {
unit u=GetFilterUnit()
boolean b=IsUnitType(u,UNIT_TYPE_STRUCTURE)==false and IsUnitEnemy(u, GetOwningPlayer(Caster))==true
u=null
end b
}

private void EffectRect(string s,unit u,real r,boolean b) {
real x=GetUnitX(u)
real y=GetUnitY(u)
DestroyEffect(AddSpecialEffect(s,x,y))
if b==true {
  DestroyEffect(AddSpecialEffect(s,x+r,y+r))
  DestroyEffect(AddSpecialEffect(s,x-r,y+r))
  DestroyEffect(AddSpecialEffect(s,x-r,y-r))
  DestroyEffect(AddSpecialEffect(s,x+r,y-r))
elseif b==false
  DestroyEffect(AddSpecialEffect(s,x+r,y))
  DestroyEffect(AddSpecialEffect(s,x,y+r))
  DestroyEffect(AddSpecialEffect(s,x-r,y))
  DestroyEffect(AddSpecialEffect(s,x,y-r))
  DestroyEffect(AddSpecialEffect(s,x+r,y+r))
  DestroyEffect(AddSpecialEffect(s,x-r,y+r))
  DestroyEffect(AddSpecialEffect(s,x-r,y-r))
  DestroyEffect(AddSpecialEffect(s,x+r,y-r))
}
 }

private void Bred(unit u) {
if BOOOOOOOO==on { 
EffectRect(MYEFFECT,u,Rad+150.00,true)
EffectRect(MYEFFECT,u,Rad,false)
    }
}

private void Damag() {
unit u=GetEnumUnit()
UnitDamageTarget(Caster,u,DM,true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,WEAP  ON_TYPE_WHOKNOWS)
u=null
}

private void Periodick() {
timer t=GetExpiredTimer()
unit u=LoadUnitHandle(Hash,H2I(t),H2I(t))
integer k=LoadInteger(Hash,H2I(u),H2I(u))
rect r=CreateRectArea(GetUnitX(u),GetUnitY(u),Area,true)
real XR
real YR
group g=CreateGroup()
boolexpr b
boolean bo=false
Caster=u

if k>=MAX or DeathUnit(u)==true
Bred(u)
    RemoveSavedHandle(Hash,H2I(t),H2I(t))
    RemoveSavedInteger(Hash,H2I(u),H2I(u))
    FlushChildHashtable(Hash,H2I(t))
    FlushChildHashtable(Hash,H2I(u))
    DestroyTimer(t)
bo=true
endif

   DestroyEffect(AddSpecialEffect(MYEFFECT,x,y))
   RemoveRect(r)
   r=CreateRectArea(x,y,Area2,true)
   b=Condition(function Filters)
   GroupEnumUnitsInRect(g,r,b)
   DestroyBoolExpr(b)
   ForGroup(g,function Damag)
k++

   RemoveSavedInteger(Hash,H2I(u),H2I(u))
   FlushChildHashtable(Hash,H2I(u))
if bo==false
   SaveInteger(Hash,H2I(u),H2I(u),k)
endif
   DestroyGroup(g)
   RemoveRect(r)
b=null
g=null
r=null
t=null
u=null
}

private boolean Con() {
    if (not(GetSpellAbilityId()==Spell))
        end false
    endif
    end true
}

private void Cast() {
unit u=GetSpellAbilityUnit()
timer t=CreateTimer()
   SaveUnitHandle(Hash,H2I(t),H2I(t),u)
   SaveInteger(Hash,H2I(u),H2I(u),0)
   TimerStart(t,Pr,true,function Periodick)
t=null
u=null
}

private void Init() {
trigger t=CreateTrigger()
    integer i=0
loop
TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
i++
ifloop i==bj_MAX_PLAYER_SLOTS
endloop
TriggerAddAction(t,function Cast)
TriggerAddCondition(t,Condition(function Con))

Preloader(MYEFFECT)
t=null
 }
}



влад10011 добавил:
Цитата:
Сообщение от Nerevar
СПЛОШНЯКОМ все написано,без отступов,

ну...
в следующий раз постараюсь нормально сделать...
Миниатюры
Кликните на картинку для увеличения
Название:  WC3ScrnShot_092712_225758_01.jpg
Просмотров: 62
Размер:  142.3 Кбайт  Кликните на картинку для увеличения
Название:  WC3ScrnShot_092712_225550_03.jpg
Просмотров: 110
Размер:  165.3 Кбайт  Кликните на картинку для увеличения
Название:  WC3ScrnShot_092712_225542_02.jpg
Просмотров: 89
Размер:  146.2 Кбайт  
Прикрепленные файлы
Тип файла: w3x MOOLN.w3x (19.5 Кбайт, 24 просмотров )
Старый 27.09.2012, 21:02
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
пишу тоже без отступов автору +
Старый 27.09.2012, 21:34
DualShock

offline
Опыт: 5,023
Активность:
можно прогнать код через это
Старый 27.09.2012, 22:52
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Знаю что спелы из аниме здесь не любят, но я всеже выложу его сюда
Название: LightFinger
Метод исполнения: cJass
Нужен ли JNGP: да
Тип цели:область
Результат применения: создание лазерного луча летящего в указанную область, долетая луч взрывается, наносит урон и замедляет на 70% на 5 сек. (используется новый способ замедления)
Количество уровней: сколько угодно
Вызов заклинания на цель: нет
Наличие глобальных переменных: 1 для удобства (думал будет больше 1 спела), можно поставить локалку.
» Вот код:
include "cj_types.j"
library LightFinger initializer init {

    define{
    private DMG = 250 //Урон
    private Speed = 70 //Скорость (от 40-70 выглядит нормально)
    private Area = 400 //Область урона (не забудьте поднять область у замедления на такую же, способность "Slow")
    private Spell = 'A000'
    private DamageUp = 50 //Сколько урона за уровень
    private Per = 0.03 // скорость таймера
    //>>>>>>>>>>>>>>>>>>>>>>>>&g​t;>>>>>>>>>>>>>>>>>>>>>>>
    private DMGUP = DMG+(GetUnitAbilityLevel(Caster,Spell)*50)
    }
    
    globals
    hashtable h = null
    unit e = null
    private unit Caster
    endglobals
    
    private function PreloadUnit takes int id returns nothing
        bj_lastCreatedUnit = CreateUnit(Player(12), id, 0, 0, 0)
        SetUnitVertexColor(bj_lastCreatedUnit, 255, 255, 255, 1)
        KillUnit(bj_lastCreatedUnit)
    endfunction

    private function SR takes real x1, real y1, real x2, real y2 returns real
        return SquareRoot((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
    endfunction

    private function ShakeCamera2 takes nothing returns nothing
        CameraSetSourceNoise(0, 0)
        CameraSetTargetNoise(0, 0)
        PauseTimer(GetExpiredTimer())
        DestroyTimer(GetExpiredTimer())
    endfunction

    private function ShakeCamera takes real dur, real potency returns nothing
        timer t = CreateTimer()
        CameraSetTargetNoiseEx(2 * potency, 2 * Pow(10, potency), true)
        CameraSetSourceNoiseEx(2 * potency, 2 * Pow(10, potency), true)
        TimerStart(t, dur, false, function ShakeCamera2)
        t = null
    endfunction

    private boolean CondFinger() {
    return GetSpellAbilityId() == Spell
    }

    function CastFinger2 takes nothing returns nothing
        timer t = GetExpiredTimer()
        int id = GetHandleId(t)
        unit u = LoadUnitHandle(h, id, 0)
        unit d = LoadUnitHandle(h, id, 1)
        real x = GetUnitX(d)
        real y = GetUnitY(d)
        real x1 = LoadReal(h, id, 2)
        real y1 = LoadReal(h, id, 3)
        real a = Atan2(y1 - y, x1 - x)
        group g = CreateGroup()
        player p = GetOwningPlayer(u)
        if SR(x, y, x1, y1) > 52 {
            x = x + Speed * Cos(a)
            y = y + Speed * Sin(a)
            SetUnitX(d, x)
            SetUnitY(d, y)
            SetUnitFacing(d, a * bj_RADTODEG)
            bj_lastCreatedUnit = CreateUnit(p, 'e000', x, y, a * bj_RADTODEG)
            UnitApplyTimedLife(bj_lastCreatedUnit, 0, 1)
            SetUnitTimeScale(bj_lastCreatedUnit, 0)
            UnitApplyTimedLife(CreateUnit(p, 'e004', x, y, a * bj_RADTODEG), 0, 1)
        else
            GroupEnumUnitsInRange(g, x1, y1, Area, null)
            Caster = u
            loop
                e = FirstOfGroup(g)
                exitwhen e == null
                if IsUnitEnemy(e, p) and IsUnitType(e, UNIT_TYPE_DEAD) == false and GetUnitAbilityLevel(e, 'Aloc') == 0{
                    UnitDamageTarget(u, e, DMGUP, false, false, null, null, null)
                    }
                    GroupRemoveUnit(g, e)
                endloop
                Caster = null
                bj_lastCreatedUnit = CreateUnit(p, 'e001', x, y, a * bj_RADTODEG)
                UnitApplyTimedLife(bj_lastCreatedUnit, 0, 1)
                IssueImmediateOrderById(bj_lastCreatedUnit, 852285)
                UnitApplyTimedLife(CreateUnit(p, 'e002', x, y, a * bj_RADTODEG), 0, 1)
                UnitApplyTimedLife(CreateUnit(p, 'e003', x, y, a * bj_RADTODEG), 0, 1)
                DestroyEffect(AddSpecialEffect("war3mapImported\\NUKE2.mdx", x1, y1))
                DestroyEffect(AddSpecialEffect("war3mapImported\\NewMassiveEX.mdx", x1, y1))
                DestroyEffect(AddSpecialEffect("war3mapImported\\a-bomb.mdx", x1, y1))
                DestroyEffect(AddSpecialEffect("war3mapImported\\NuclearExplosion.mdx", x1, y1))
                ShakeCamera(0.5, 20)
                RemoveUnit(d)
                PauseTimer(t)
                DestroyTimer(t)
                DestroyEffect(LoadEffectHandle(h, id, 5))
                FlushChildHashtable(h, id)
                }
                DestroyGroup(g)
                p = null
                u = null
                t = null
                g = null
                d = null
            endfunction

            private void CastFinger(){
            timer t = CreateTimer()
            int id = GetHandleId(t)
            unit u = GetTriggerUnit()
            real x = GetUnitX(u)
            real y = GetUnitY(u)
            player p = GetOwningPlayer(u)
            SaveUnitHandle(h, id, 0, u)
            UnitApplyTimedLife(CreateUnit(p, 'e005', x, y, 0), 0, 1)
            bj_lastCreatedUnit = CreateUnit(p, 'e000', x, y, GetUnitFacing(u))
            SaveUnitHandle(h, id, 1, bj_lastCreatedUnit)
            SetUnitTimeScale(bj_lastCreatedUnit, 0)
            SaveEffectHandle(h, id, 5, AddSpecialEffectTarget("war3mapImported\\!guang small.mdx", u, "foot right"))
            DestroyEffect(AddSpecialEffectTarget("war3mapImported\\WarpHolyCaster.mdx", u, "origin"))
            DestroyEffect(AddSpecialEffectTarget("war3mapImported\\Consecrate.mdx", u, "chest"))
            DestroyEffect(AddSpecialEffectTarget("war3mapImported\\HolyPhoenixMissle.mdx", u, "origin"))
            SaveReal(h, id, 2, GetSpellTargetX())
            SaveReal(h, id, 3, GetSpellTargetY())
            TimerStart(t, Per, true, function CastFinger2)
            t = null
            p = null
            u = null
            }

            private void init (){
            trigger t = CreateTrigger()
            integer i = 0
            loop
                TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
                i++ 
                exitwhen i == bj_MAX_PLAYER_SLOTS
            endloop
            TriggerAddAction(t, function CastFinger)
            TriggerAddCondition(t, Condition(function CondFinger))
            h = InitHashtable()
            PreloadUnit('e000')
            PreloadUnit('e001')
            PreloadUnit('e002')
            PreloadUnit('e003')
            PreloadUnit('e004')
            PreloadUnit('e005')
            Preload("war3mapImported\\WarpHolyCaster.mdx")
            Preload("war3mapImported\\Consecrate.mdx")
            Preload("war3mapImported\\HolyPhoenixMissle.mdx")
            Preload("war3mapImported\\!guang small.mdx")
            Preload("war3mapImported\\NUKE2.mdx")
            Preload("war3mapImported\\NewMassiveEX.mdx")
            Preload("war3mapImported\\a-bomb.mdx")
            Preload("war3mapImported\\NuclearExplosion.mdx")
            t = null
            }
            }
Миниатюры
Кликните на картинку для увеличения
Название:  Kizaru.jpg
Просмотров: 165
Размер:  488.2 Кбайт  
Прикрепленные файлы
Тип файла: w3x Kizaru.w3x (282.1 Кбайт, 52 просмотров )

Отредактировано Vadik29, 28.10.2012 в 10:13.
Старый 27.10.2012, 22:58
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
Vadik29:
используется новый способ замедления
скачал ради этого
разочаровался
Старый 06.11.2012, 00:07
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
почти тоже самое,что я уже выкладывал в свое время,если кто помнит(паладин прыгал и красиво станил,зарядив свой молот)

навалял по-быстрому загатовку спелла на тему молний,шторма,грома
модель героя паладин. подняв молот, в течении двух секунд(все настраивается)
заряжает молот,дальше не придумал еще что будет
ловите демо,писал на vJass'e.
первая карта спустя год. будут идеи, обещаю, я закончу.

приятного аппетита
Прикрепленные файлы
Тип файла: w3x finaldestruction.w3x (23.8 Кбайт, 34 просмотров )
Старый 29.12.2012, 09:02
DimanTOoBS

offline
Опыт: 5,791
Активность:
bee, можно сделать в виде ульты
типо гер заряжает молот нек время, потом бьёт в землю attack2 и высвобождает эти заряды, которые разлетаются в разные стороны, в месте падения вызывает удар грома и эффект молнии сверху
кол-во этих зарядов зависит от времени зарядки молота
Старый 29.12.2012, 10:47
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
я уже придумал,что замучу. нечто другое
посмотри, полистай мой старый спел
там я где-то даже видео заливал
Старый 29.12.2012, 10:53
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Заклинание, которое я выкладывал на одну из дуэлей. Какой-то [нехороший человек] не стал дуэлиться и схватку забыли.
Герой движется, мутит сальту и круто все взрывает. В общем инетесный спелл.
Сальта крутая.
идея новая, сальто выполнено очень круто.
Прикрепленные файлы
Тип файла: w3x Hellscream by Rampage 1.1.w3x (61.6 Кбайт, 103 просмотров )
[+] 3 пункта от ScorpioT1000: 1.1 (ненормативная лексика)

Отредактировано Nerevar, 23.06.2013 в 18:27.
Старый 05.01.2013, 07:47
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
Rampage, красиво конечно, но
36 даммиюнитов
на один спелл
не много ли О_О
Старый 05.01.2013, 08:13
Алексей Андреич
Криворукожоп 80 Lvl
offline
Опыт: 80,082
Активность:
HolyMoon, красота требует жертв... :3
Старый 05.01.2013, 08:32
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
Заклинание, которое я выкладывал на одну из дуэлей. Какой-то не стал дуэлиться и схватку забыли.
2%
Прикрепленные файлы
Тип файла: w3x [XGM] X-mas duel [HolyMoon].w3x (1.33 Мбайт, 128 просмотров )

Отредактировано Nerevar, 23.06.2013 в 18:27.
Старый 05.01.2013, 14:23
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
HolyMoon, там требуется меньше, 12 всего. Можно настроить и т.д.
Иначе ты никак не сделаешь нормально!
Старый 06.01.2013, 07:16
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
Rampage, ну почему же. Можно добавить анимацию ;D
Старый 06.01.2013, 09:58
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
По-моему ты не сечешь
[+] 3 пункта от Кет: 1.1 (ненормативная лексика)

Отредактировано Кет, 07.01.2013 в 10:32.
Старый 07.01.2013, 07:43
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
HolyMoon, Очень круто, твой спел можно смотреть вечно :D
Старый 07.01.2013, 11:01
Daro

offline
Опыт: 4,781
Активность:
HolyMoon, очень красивый интересный спелл,никогда не видел ничего подобного
Старый 12.01.2013, 14:33
youtube
сктыщь
offline
Опыт: 8,025
Активность:
HolyMoon, а скилл то нефиговый однако, респектуль)
Старый 12.01.2013, 16:10
Arti

offline
Опыт: 11,196
Активность:
HolyMoon, супер )
Старый 13.01.2013, 04:00
Raised
Rid-Aid-Ios
offline
Опыт: 20,792
Активность:

Система Бонусного Урона

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

Название: Система Бонусного Урона
Метод исполнения: GUI
Нужен ли JNGP: Неа
Тип цели: Зависит от фантазии
Результат применения: увеличение урона на N единиц, где N - любое число от 1 до 10000
Количество уровней: Нет
Вызов заклинания на цель: Зависит от фантазии
Наличие глобальных переменных: Одна/Нет(Зависит от фантазии)
HolyMoon, Спасибо.
Прикрепленные файлы
Тип файла: w3x BDS_By_RiseD_Konst.w3x (57.6 Кбайт, 74 просмотров )

Отредактировано GF RaiseD, 26.01.2017 в 18:56.
Старый 19.01.2013, 18:18
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
RiseD_Konst, а трехзначные, кратные 100, не делает
lol
и это проще делается :с
Старый 19.01.2013, 19:39
Raised
Rid-Aid-Ios
offline
Опыт: 20,792
Активность:
Млин, побежал исправлять, спс)
Старый 19.01.2013, 20:22
ScorpioT1000
Работаем
offline
Опыт: отключен
Есть предложение набрать добровольцев и разложить заклинания по полочкам на сайте.
Создать категории, к какому типа (урон, лечение итп) и стихии относится.
Должно получиться примерно как тут: xgm.ru/p/wc3/model-categories
Старый 24.01.2013, 17:50
Ответ

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

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

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

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



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