вот, закинул сразу пример с уровнями способности, всё что ты меняешь это естественно настройки, единственное что я на добавлял это деформацию ланда, но если оно тебе нужно будет, то думаю ты сам уже это сделаешь
ах да, там ты можешь заметить фишку, что вариковская волна силы агрит на себя пехотинцев, а кастомная нет - я хз с чем это связано, мб заскриптовано, ибо урон идёт не от лица дамми, а от лица кастера, а по поводу вджасса - он не сложен, максимум для чего он мне нужен был ради библиотеки со структурой и возможностью объявлять глобальные переменные непосредственно в коде
Player number - как следует из названия - номер игрока, на гуи оно вроде от единички нумеруется, а на джассе с нуля, номер красного игрока 1, номер синего 2. Trigger execution count - количество срабатываний триггера.
Насчёт перебора правильно мыслишь, нужно брать одного игрока и сравнивать его очки с остальными игроками
Гуванч, а, понял. Я не страдал такими проблемами ибо все скиллы делаю на джассе и это даёт мне возможность полностью контролировать всё что происходит касательно урона. В твоём случае, если делать триггерные аналоги не подходит, нужно использовать мемхак. Он позволяет понять с руки урон или нет, а так же тип урона
Нужно зарегистрировать на всех юнитов на карте событие "получает урон", а в другом триггере, где юнит получил урон - делать действия. Если ты имел ввиду именно после замаха, когда вылетает снаряд - то тут только костылить с таймингом либо воспользоваться мемхаком)
Ах да, ну можно и свою собственную атаку сделать)
Вот тут я пытался сделать собственную атаку, сейчас конечно мог бы сделать получше и немного по-другому, с очень классной либой, но что-то не интересует)
Вджасс это дополнение к обычному джассу, у себя ты можешь видеть строки объявления библиотеки, продвинутые комментарии и статические константные переменные
Nikolay36, я сказал практически)
всё что тебе нужно по факту это угол с координатами и насколько сдвинуть юнита, знать математику и думать тут вообще не надо, нужно лишь знать принцип работы)
library mylib initializer InitTrig_fd
globals
constant hashtable H = InitHashtable()
private group TempG
private group TempG1 = CreateGroup()
private real TempX
private real TempY
endglobals
native UnitAlive takes unit id returns boolean
private function DBC takes real x, real y, real x1, real y1 returns real
return SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1))
endfunction
private function mycond takes nothing returns boolean
set bj_lastReplacedUnit = GetFilterUnit()
return UnitAlive(bj_lastReplacedUnit) and IsUnitEnemy(bj_lastReplacedUnit,GetOwningPlayer(bj_lastCreatedUnit))
endfunction
private function move1 takes nothing returns nothing
local unit u = GetEnumUnit()
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local real a = Atan2(TempY-y,TempX-x)
set x = x+20.*Cos(a)
set y = y+20.*Sin(a)
call SetUnitX(u,x)
call SetUnitY(u,y)
if DBC(TempX,TempY,x,y) <= 100. then
call SetUnitPosition(u,x,y)
call UnitDamageTarget(bj_lastCreatedUnit,u,100.,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
call GroupRemoveUnit(TempG,u)
endif
set u = null
endfunction
private function move takes nothing returns nothing
local timer t = GetExpiredTimer()
set TempG = LoadGroupHandle(H,GetHandleId(t),1)
set bj_lastCreatedUnit = LoadUnitHandle(H,GetHandleId(t),0)
set TempX = GetUnitX(bj_lastCreatedUnit)
set TempY = GetUnitY(bj_lastCreatedUnit)
call ForGroup(TempG,function move1)
if FirstOfGroup(TempG) == null then
call DestroyGroup(TempG)
call FlushChildHashtable(H,GetHandleId(t))
call PauseTimer(t)
call DestroyTimer(t)
endif
set t = null
set TempG = null
set bj_lastCreatedUnit = null
endfunction
private function Trig_fd_Actions takes nothing returns nothing
local timer t = CreateTimer()
local boolexpr b = Condition(function mycond)
set TempG = CreateGroup()
set bj_lastCreatedUnit = GetTriggerUnit()
call GroupEnumUnitsInRange(TempG,GetUnitX(bj_lastCreatedUnit),GetUnitY(bj_lastCreatedUnit),1000.,b)
call SaveUnitHandle(H,GetHandleId(t),0,bj_lastCreatedUnit)
call SaveGroupHandle(H,GetHandleId(t),1,TempG)
call TimerStart(t,.02,true,function move)
set b = null
set t = null
set TempG = null
set bj_lastCreatedUnit = null
endfunction
//===========================================================================
private function cancel takes nothing returns nothing
local timer t = GetExpiredTimer()
call IssueImmediateOrder(LoadUnitHandle(H,GetHandleId(t),0),"stop")
call FlushChildHashtable(H,GetHandleId(t))
call DestroyTimer(t)
set t = null
call BJDebugMsg("Рядом никого нет")
endfunction
private function Trig_fd_Conditions takes nothing returns boolean
if GetSpellAbilityId() == 'A000' then
call Trig_fd_Actions()
endif
return false
endfunction
private function Trig_fd_Conditions1 takes nothing returns boolean
local timer t
if GetSpellAbilityId() == 'A000' then
set bj_lastCreatedUnit = GetTriggerUnit()
call GroupEnumUnitsInRange(TempG1,GetUnitX(bj_lastCreatedUnit),GetUnitY(bj_lastCreatedUnit),1000.,Condition(function mycond))
if FirstOfGroup(TempG1) == null then
set t = CreateTimer()
call SaveUnitHandle(H,GetHandleId(t),0,bj_lastCreatedUnit)
call TimerStart(t,0.,false,function cancel)
set t = null
else
call GroupClear(TempG1)
endif
set bj_lastCreatedUnit = null
endif
return false
endfunction
private function InitTrig_fd takes nothing returns nothing
local trigger t = CreateTrigger()
local integer i = 0
set gg_trg_fd = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_fd, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_CAST, null)
set i = i+1
exitwhen i == 16
endloop
call TriggerAddCondition( gg_trg_fd, Condition( function Trig_fd_Conditions ) )
call TriggerAddCondition( t, Condition( function Trig_fd_Conditions1 ) )
set t = null
endfunction
endlibrary
Komkozavr, не, ланд очень трудоёмкая и кропотливая работа, позабрасывал такие крутые идеи из-за лени делать ланд, карты ведь не маленькие и те же деревья нужно аккуратно и разумно тыкать, ведь это игровое поле
mistwood, арифметикой)
Если отнять 200 от текущего здоровья меньше 1, то 200 отнять текущее здоровье и от текущего здоровья отнять полученный результат-1
Pasha115, контроль над процессом полностью принадлежит тебе, меняй что хочешь и как хочешь. Максимум что я изменил бы там, чтобы они в рандомную сторону начали кружиться, а не только по часовой, а если ответить на вопрос, то да, добавь туда тип юнита который кружится на месте
» WarCraft 3 / Триггерный урон на ровне с атакой
Ред. rsfghd
» WarCraft 3 / Триггерная волна силы
Ред. rsfghd
» WarCraft 3 / Систему сравнения по очкам
Насчёт перебора правильно мыслишь, нужно брать одного игрока и сравнивать его очки с остальными игроками
» WarCraft 3 / Триггерная волна силы
» WarCraft 3 / Триггерный урон на ровне с атакой
извиняюсь, из головы вылетела эта фишечка)
» WarCraft 3 / Триггерный урон на ровне с атакой
Ред. rsfghd
» WarCraft 3 / Триггерный урон на ровне с атакой
Ах да, ну можно и свою собственную атаку сделать)
» WarCraft 3 / Триггерная волна силы
Ред. rsfghd
» WarCraft 3 / Ошибки при запуске WE и нерабочий JASS
» WarCraft 3 / Эффект выстрела остаётся
Ред. rsfghd
» WarCraft 3 / Двигать юнита(ов) к юниту?
всё что тебе нужно по факту это угол с координатами и насколько сдвинуть юнита, знать математику и думать тут вообще не надо, нужно лишь знать принцип работы)
» WarCraft 3 / Двигать юнита(ов) к юниту?
Но тут уже дело не в математике, на самом деле она даже практически не нужна тут))
» WarCraft 3 / Двигать юнита(ов) к юниту?
» WarCraft 3 / Двигать юнита(ов) к юниту?
» WarCraft 3 / Путь эффекта невидимости
» WarCraft 3 / Двигать юнита(ов) к юниту?
Такое можно и на гуи спокойно сделать
» Блог Keparis9 / Ввод в блог Keparis9
» WarCraft 3 / Полезная информация
» WarCraft 3 / Полезная информация
» WarCraft 3 / Предмет меняющий здоровье на ману. проблема самоубийства им
Если отнять 200 от текущего здоровья меньше 1, то 200 отнять текущее здоровье и от текущего здоровья отнять полученный результат-1
Ред. rsfghd
» WarCraft 3 / Предмет меняющий здоровье на ману. проблема самоубийства им
Ред. rsfghd
» WarCraft 3 / Как сделать фильтр для разных игроков?
Ред. rsfghd
» WarCraft 3 / Бездействие самолётов как в генералах
Ред. rsfghd
» WarCraft 3 / Бездействие самолётов как в генералах
» WarCraft 3 / Бездействие самолётов как в генералах