Добавлен , опубликован
Существует специальная тема Способности и алгоритмы на заказ, где любой желающий может помочь с вашими фантазиями и где я тоже иногда зависаю. Кроме того, есть платные заказы, например, можете обратиться к Hate - Заклинания на заказ для Warcraft 3 (Платные) или поискать ещё темы на сайте
Я хочу развивать своё резюме, поэтому можете оставлять заявки и там, и тут. Имейте ввиду, заказы я выполняю бесплатно, на чистом энтузиазме, трачу на это своё свободное время, поскольку воспринимаю это как хобби, всё выполняю при возможности и желании
раскрыть
Я не буду вливаться в ваши проекты и не принимаю деньги, для этого есть платные темы. Авторство или упоминания меня в карте делать не нужно, ибо я буду менять ник. Если появится желание отблагодарить - лайка достаточно
Могу сделать анонимно заклинание, для этого можно обратиться ко мне в личку, но меня расстроит невозможность поделиться им, если оно интересное
Отдаю приоритет именно способностям, алгоритмы/системы, вроде 3д камеры/физики, меня особо не интересуют, да и не всё умею, и не за все заказы возьмусь, не стоит ожидать от меня движущихся птиц и чайники на молниях, матрицу не изучал и с математикой не дру
Работаю на 1.26, могу воспользоваться UjAPI, при создании спелла для рефа
Для меня предпочтительнее пользоваться вджассом, но могу сделать заклинание на чистом джассе и даже гуи, однако имейте ввиду, гуи может многократно усложнить работу, ибо на нём может не хватать функционала для создания вашего спелла. Есть вариант скрестить джасс с гуи, пользуясь TriggerEvaluate

Форма составления заявки

При создании заявки не забудьте указать тип комментария Заказ на работу
# Заказ
**Название:** Название способности (опционально, если заказ один)
**Метод:** GUI/Jass/cJass/vJass/Zinc
**Версия Warcraft III:** Версия варкрафта для этого заказа
**Техническое описание:** Распишите механику способности в деталях
Заявки оставлять в комментариях под этим ресурсом
раскрыть
Название - можно любое указать, вплоть до символа, это поможет в навигации по мере сдачи работ. Не нужно указывать, если в заказе только одна способность, работа сдаётся в ответах под заказом
Метод - выберите для себя комфортный метод, на котором будет выполнена способность. При методе кодом, я укажу комментариями где нужно будет что-то отредактировать. Комфортные для меня методы в порядке убывания: vJass > Jass > cJass > Zinc > GUI
Версия Warcraft III - на определённых версиях не доступен мемхак и сджасс. Чтобы взять ориентир на рефорджед, могу воспользоваться UjAPI. Это необходимо для специфических заказов, к примеру, повышение бонусной силы атаки, где на старых версиях требуется мемхак/южапи/костыли/база данных, а на более новых для этого присутствуют нативки
Техническое описание - укажите что должна делать ваша способность, например:
1 уровень: выпускается волна в точку каста
2 уровень: 2 волны в точку каста с разницей в 20 градусов по бокам
3 уровень: 5 волн, одна посередине и по 2 по бокам с разницей в 10 градусов
Каждая волна движется со скоростью 2000 и дальностью 1000. Радиус поражения 200 и с каждым уровнем увеличивается на 50 вместе с размером волны. Я хочу наносить урон юнитам самостоятельно, на гуи, с помощью TriggerEvaluate, мне нужны будут переменные применяющего юнита и уровень его способности на момент каста абилки, оставь пример нанесения урона с использованием этих переменных
Красивое форматирование приветствуется

Примеры работ

Всё у меня в ресурсах: xgm.guru/u/rsfghd
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
15

Заказ

Название: Ярость Синдрагосы
Метод: Jass
Версия Warcraft III: 1.26a
Техническое описание: как на видео только что бы начинала лететь за спиной катера
Призывает Синдрагосу, которая дышит холодом на противников перед вами на расстоянии до 40 м, нанося 400 урона и (снижая скорость передвижения на 50%) на 10 сек.
Загруженные файлы
Ответы (2)
28
Выполнение заказа

Заклинание готово!

Ярость Синдрагосы

инструкция по импорту
скопировать папку Initialization и вставить в свою карту
перекопировать редактор объектов и вставить в свою карту
в триггере Spell на строках:
272 - указать равкод даммика который кастует замедление
261 - указать абилку призыва дракона
235-236 - смещение проявления дракона за спину кастера
238 - равкод дракона
244 - стартовая высота дракона (400)
245 - высота дракона во время полёта (300 - какую высоту установить, 100 - с какой скоростью установить эту высоту, т.е. с учётом стартовой высоты, дракон достигнет этой высоты за одну секунду)
246 - раскрас дракона (последний аргумент должен быть на 0)
251 - максимальное расстояние всего полёта с учётом проявления и исчезновения
140 - скорость полёта дракона
154 - при какой оставшейся дистанции начать выпускать ледяные волны
156 - индекс анимки полёта дракона
160 - при какой оставшейся дистанции начать исчезновение дракона
161 - формула исчезновения дракона ( 255.00 / ( указать параметр на 160 строке / speed ) )
162 - раскрас дракона, последний параметр не нужно трогать
164 - формула взлёта дракона ( скорость взлёта * ( 1.00 - d / указать параметр на 160 строке ) )
167 - другой индекс анимки полёта дракона (взмах крыльями)
170 - указать параметр на 160 строке + параметр на 173 строке
173 - периодичность спавна ледяных волн в зависимости от пройденной дистанции (т.е. каждые 35 единиц)
177-178 - смещение начала волны поближе к морде дракона
180 - равкод ледяной волны
186 - стартовая высота волны (на 75 единиц ниже высоты дракона)
192 - указать параметр на 170 строке
204 - дистанция до которой дракон должен проявиться
205 - формула проявления дракона ( 255.00 / ( ( максимальная дистанция - параметр на 204 строке ) / speed ) )
206 - то же самое, что и 162
32-33 - скорость полёта волны
37 - скорость полёта волны по Z
43 - радиус урона (300 + макс коллизия)
53 - радиус урона
57 - приказ замедления
58 - урон
64-110 - визуальные кPаКаЗяБрЫ

Код

Spell
function GetCorX takes real x returns real
if x > udg_MapRectXY[0] then
return udg_MapRectXY[0]
elseif x < udg_MapRectXY[1] then
return udg_MapRectXY[1]
endif

return x
endfunction
function GetCorY takes real y returns real
if y > udg_MapRectXY[2] then
return udg_MapRectXY[2]
elseif y < udg_MapRectXY[3] then
return udg_MapRectXY[3]
endif

return y
endfunction
function MoveEffect takes nothing returns nothing
local timer t = GetExpiredTimer( )
local integer i = GetHandleId( t )
local unit u
local unit caster
local unit dummy = LoadUnitHandle( udg_H, i, 0 )
local real x = GetUnitX( dummy )
local real y = GetUnitY( dummy )
local real a = GetUnitFacing( dummy ) * bj_DEGTORAD
local group g

set x = GetCorX( x + 10.00 * Cos( a ) )
set y = GetCorY( y + 10.00 * Sin( a ) )

call SetUnitX( dummy, x )
call SetUnitY( dummy, y )
call SetUnitFlyHeight( dummy, GetUnitFlyHeight( dummy ) - 5.00, 0.00 )

if GetUnitFlyHeight( dummy ) <= 0.11 then
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 1.00 )

call GroupEnumUnitsInRange( udg_TempGroup, x, y, 500.00, null )
set caster = LoadUnitHandle( udg_H, i, 1 )
set g = LoadGroupHandle( udg_H, i, 2 )
set bj_groupEnumOwningPlayer = GetOwningPlayer( caster )

loop
set u = FirstOfGroup( udg_TempGroup )
exitwhen u == null
call GroupRemoveUnit( udg_TempGroup, u )

if IsUnitInRangeXY( u, x, y, 300.00 ) then
if not IsUnitInGroup( u, g ) then
if IsUnitEnemy( u, bj_groupEnumOwningPlayer ) and not IsUnitType( u, UNIT_TYPE_DEAD ) then
call GroupAddUnit( g, u )
call IssueTargetOrder( udg_TempUnit, "frostnova", u )
call UnitDamageTarget( caster, u, 100.00, false, false, null, null, null )
endif
endif
endif
endloop

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u003', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u004', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u005', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u006', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u007', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u008', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

if LoadInteger( udg_H, i, 3 ) == 1 then
call DestroyGroup( g )
endif

call PauseTimer( t )
call FlushChildHashtable( udg_H, i )
call DestroyTimer( t )

set g = null
set caster = null
endif

set t = null
set dummy = null
endfunction
function Move takes nothing returns nothing
local timer t = GetExpiredTimer( )
local timer n
local integer i = GetHandleId( t )
local integer j
local unit caster = LoadUnitHandle( udg_H, i, 0 )
local unit dummy = LoadUnitHandle( udg_H, i, 1 )
local real x = GetUnitX( dummy )
local real y = GetUnitY( dummy )
local real a = GetUnitFacing( dummy ) * bj_DEGTORAD
local real d = LoadReal( udg_H, i, 3 )
local real r
local real speed = 5.00

if speed > d then
set speed = d
endif

set x = GetCorX( x + speed * Cos( a ) )
set y = GetCorY( y + speed * Sin( a ) )

call SetUnitX( dummy, x )
call SetUnitY( dummy, y )

set d = d - speed

if d <= 2300 then
if LoadInteger( udg_H, i, 4 ) == 0 then
call SetUnitAnimationByIndex( dummy, 4 )
call SaveInteger( udg_H, i, 4, 1 )
endif

if d <= 400.00 then
set r = LoadReal( udg_H, i, 5 ) - 255.00 / ( 400.00 / speed )
call SetUnitVertexColor( dummy, 175, 175, 175, R2I( r ) )
call SaveReal( udg_H, i, 5, r )
call SetUnitFlyHeight( dummy, GetUnitFlyHeight( dummy ) + 5.00 * ( 1.00 - d / 400.00 ), 0.00 )

if LoadInteger( udg_H, i, 4 ) == 1 then
call SetUnitAnimationByIndex( dummy, 3 )
call SaveInteger( udg_H, i, 4, 2 )
endif
elseif d > 435.00 then
set r = LoadReal( udg_H, i, 6 ) + speed

if r >= 35.00 then
set r = 0.00
set n = CreateTimer( )
set j = GetHandleId( n )
set x = GetCorX( x + 275.00 * Cos( a ) )
set y = GetCorY( y + 275.00 * Sin( a ) )

set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( caster ), 'u002', x, y, a * bj_RADTODEG )
call SetUnitAnimation( bj_lastCreatedUnit, "birth" )
call QueueUnitAnimation( bj_lastCreatedUnit, "stand" )
call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
call SetUnitX( bj_lastCreatedUnit, x )
call SetUnitY( bj_lastCreatedUnit, y )
call SetUnitFlyHeight( bj_lastCreatedUnit, GetUnitFlyHeight( dummy ) - 75.00, 0.00 )

call SaveUnitHandle( udg_H, j, 0, bj_lastCreatedUnit )
call SaveUnitHandle( udg_H, j, 1, caster )
call SaveGroupHandle( udg_H, j, 2, LoadGroupHandle( udg_H, i, 2 ) )

if d - speed <= 435.00 then
call SaveInteger( udg_H, j, 3, 1 )
endif

call TimerStart( n, 0.01, true, function MoveEffect )
set n = null
endif

call SaveReal( udg_H, i, 6, r )
endif
endif

if d > 2000.00 then
set r = LoadReal( udg_H, i, 5 ) + 255.00 / ( ( 2500.00 - 2000.00 ) / speed )
call SetUnitVertexColor( dummy, 175, 175, 175, R2I( r ) )
call SaveReal( udg_H, i, 5, r )
endif

if d <= 0.00 then
call PauseTimer( t )
call FlushChildHashtable( udg_H, i )
call DestroyTimer( t )

call SetUnitVertexColor( dummy, 0, 0, 0, 0 )
call KillUnit( dummy )
else
call SaveReal( udg_H, i, 3, d )
endif

set t = null
set dummy = null
set caster = null
endfunction
function Trig_Spell_Actions takes nothing returns nothing
local timer t = CreateTimer( )
local integer i = GetHandleId( t )
local unit caster = GetTriggerUnit( )
local real x = GetUnitX( caster )
local real y = GetUnitY( caster )
local real a = Atan2( GetSpellTargetY( ) - y, GetSpellTargetX( ) - x )

set x = GetCorX( x - 800.00 * Cos( a ) )
set y = GetCorY( y - 800.00 * Sin( a ) )

set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( caster ), 'u001', x, y, a * bj_RADTODEG )
call SetUnitAnimation( bj_lastCreatedUnit, "birth" )
call QueueUnitAnimation( bj_lastCreatedUnit, "stand" )
call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
call SetUnitX( bj_lastCreatedUnit, x )
call SetUnitY( bj_lastCreatedUnit, y )
call SetUnitFlyHeight( bj_lastCreatedUnit, 400.00, 0.00 )
call SetUnitFlyHeight( bj_lastCreatedUnit, 300.00, 100.00 )
call SetUnitVertexColor( bj_lastCreatedUnit, 175, 175, 175, 0 )

call SaveUnitHandle( udg_H, i, 0, caster )
call SaveUnitHandle( udg_H, i, 1, bj_lastCreatedUnit )
call SaveGroupHandle( udg_H, i, 2, CreateGroup( ) )
call SaveReal( udg_H, i, 3, 2500.00 )

call TimerStart( t, 0.01, true, function Move )

set t = null
set caster = null
endfunction
===========================================================================
function Trig_Spell_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A000'
endfunction
function InitTrig_Spell takes nothing returns nothing
local rect r = GetWorldBounds( )

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 )

set udg_TempUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u009', 0.00, 0.00, 0.00 )

set udg_MapRectXY[0] = GetRectMaxX( r )
set udg_MapRectXY[1] = GetRectMinX( r )
set udg_MapRectXY[2] = GetRectMaxY( r )
set udg_MapRectXY[3] = GetRectMinY( r )

call RemoveRect( r )

set r = null
endfunction
""
Загруженные файлы
28
Desgul, бле, код в кавычки забыл обернуть и отредактировать уже нельзя, офигенно 👍
4
Заказ на работу
ДЫМОВАЯ ГРАНАТА
Герой бросает дымовую гранату, которая взрывается в указанной точке и окутывает область дымом на несколько сек (размер области и время действия зависит от лвл способности)!
В выбранной области у всех врагов: понижается броня, они получают % шанс на промах от каждой атаки, а также они не могут кастовать способности (безмолвие) всё это пока они стоят в этой области дыма!
А все союзники и юниты игрока в этой области получают: + к броне, а сам герой, который скастовал, получает невидимость стоя в это облаке (при атаке невидимость не спадает, или спадает, но на 1 сек)
P.S. Желательно что бы на рефоржете работало тоже, для всех версий
Загруженные файлы
3
Название: Несгибаемая ярость (F)
Метод: Jass
Версия Warcraft III: Главное что бы на рефе работала :)
Описание: Пассивно повышает силу героя на 3/6/9/12 ед. Каждая обычная атака героя восстанавливает ему 2/3/4/5 ед. маны за удар.
Когда здоровье героя падает до нуля, он не умирает а получает полную невосприимчивость к любому виду урона в течении следующих 3 сек., и получает бонусный вампиризм в размере 25%/50%/75%/100% от нанесенного урона (как от атак так и от способностей героя).
Перезарядка способности: 65/55/45/35 сек.
  1. Важно! что бы работала с сделанным спеллом "Молот Древних" (Rolling Slam). Что бы во время анимации атак он тоже становился невосприимчивым у урону а не погибал.
  2. Когда навык находиться на перезарядке после возможной смерти, бонус к силе не сбивается и атаки все так же накапливают ману за удары.
Название: Угрожающий клич (D)
"Не героическая способность" Будет с самого начала уже у варвара.
Метод: Jass
Версия Warcraft III: Главное что бы на рефе работала :)
Описание: Герой издает боевой крик (волна от героя во все стороны) радиусом 1000 АоЕ, который вгоняет противников с 1 по 24 уровень в состояние "Страха", от чего они теряют возможность атаковать, замедляются в скорости передвижения на 25% и бегут прочь в течении 6 сек.
Перезарядка: 50 сек.
"Зов битвы" Предмет усиления способности:
Снижает перезарядку способности "Угрожающий клич" до 35 сек. и когда герой использует её, он повышает свою силу на 5 ед. + 1 ед. за каждый уровень персонажа на 6 сек. Противники погибшие под действием эффекта способности взрываются, нанося по 25 ед. + 300% от силы магического урона всем врагам в радиусе 250 АоЕ.
4
Видимо это тема всё уже... А может и нет.
Но всё же: Спелл. Нужно что бы при атаке с 20% шанс герой (дальнего боя) выпускал 10 ракет (каждая из которых наносит 50 ед урона). Туда, куда он атакует (ну или приблизительно). И чтобы ракеты задевали все цели, на которые они попадут, кроме воздушных (т.е. если по пути стоит юнит и одна из ракет его заденет не долетев до точки, то взорвётся и нанесёт ему урон).
И что бы можно было настраивать, то 10 ракет вылетает, то 1 и тд.
Этот комментарий удален
15
Заказ на работу
Название: Chidori Eiso
Метод: Jass
Версия Warcraft III: 1.26
Техническое описание: При применении способности появляется лазер, если сталкивается с целью - останавливается, если цель покинула область соприкосновения так сказать - продолжает лететь, пока длина лазера на достигнет 1000. Длительность 4 секунды, полную длину должен набирать за 0.5 секунды, т.е. остальные 3.5 сек просто на месте висит, никуда не летит, дамажит если кто-то его касается, урон и прочая инфа - без разницы, всё равно потом менять.
Должен быть сделан не через эффект молнии, а через даммиков, тут кнш проблемка, нету даммика с анимкой расстяжение, по этому прикреплю обычный лазер.
Загруженные файлы
Ответы (7)
12
LastUchiha, автор больше не выполняет заказы, он ничего никому в последнее время не отвечает. Так что с лазером тебе придётся в другое место идти)
28
FIRERANGER, лол, у меня уведомления не приходили либо затерялись в куче остальных, ну и что грешить, я в лоле зависал с новым компом. Заскучал за этой игрой. Завтра начну потихоньку выполнять заказы
28
LastUchiha, список создавать и по индексу проводить манипуляции. Сегодня, возможно, уже доделаю
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.