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

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

Закрытая тема
 
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Нанести урон группе юнитов, если в событии нет тригеринг юнита
Давно делал заклинание Ад у магички из Диабло2, и вот спустя пол года решил доделать спелл, память уже не та, и сейчас в своем коде разобрался с трудом.
Заклинание включается(Приказ ЖарПреисподнии) создает даммиков которые движутся от лица заклинателя образую бесконечный поток даммиков. В это время заклинатель не может ходить но может поворачиваться. Хочу сделать урон юнитам попавшим в радиус даммиков, но блин мозги не варят как... Функция Damage незаконченная, нужно загрузить юнита dummy использую Хеш, но вот как непомню =/
function Trig_FireOfThePit_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function WWW_Conditions takes nothing returns boolean
    return GetIssuedOrderId() == OrderId("unimmolation")
endfunction

function XXX takes nothing returns nothing
local integer hr = GetHandleId(GetTriggeringTrigger())
local trigger tr1 = LoadTriggerHandle(ht,hr,'A000'+4)
call DestroyTrigger(tr1)
set tr1 = null
endfunction

function Cond takes nothing returns boolean
return(IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false)and GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>0 and(IsUnitType(GetFilterUnit(),UNIT_TYPE_ANCIENT)==false)
endfunction

function Damage takes nothing returns nothing
local unit dummy = ???
if IsUnitEnemy(GetEnumUnit(),GetOwningPlayer(dummy))==true then
call UnitDamage(
endif
endfunction

function EEE takes nothing returns nothing
local integer he = GetHandleId(GetTriggeringTrigger())
local unit dummy = LoadUnitHandle(ht,he+1,'A000'+3)
local group g = CreateGroup()
if GetUnitState(dummy, UNIT_STATE_LIFE)<= 0 then
call RemoveSavedHandle(ht,he+1,'A000'+3)
call DestroyTrigger(GetTriggeringTrigger())
else
call GroupEnumUnitsInRange(g,GetUnitX(dummy),GetUnitY(dummy),50,Condition(Cond))
call ForGroup(g,function Damage)
call SetUnitX(dummy,(GetUnitX(dummy) + Cos(Deg2Rad(GetUnitFacing(dummy))) * 20 ) )//Скорость снаряда:600 <<формула:Х=Желаемая скорость снаряда/(100/(время в милисекундах(тут 2)))>>
call SetUnitY(dummy,(GetUnitY(dummy) + Sin(Deg2Rad(GetUnitFacing(dummy))) * 20 ) )
endif
set dummy = null
endfunction

function OOO takes nothing returns nothing
local integer hf = GetHandleId(GetTriggeringTrigger())
local unit u = LoadUnitHandle(ht,hf+1,'A000'+1)
local unit dummy = CreateUnit(GetOwningPlayer(u),'h000',GetUnitX(u),GetUnitY(u),GetUnitFacing(u))
local real X = LoadReal(ht,hf,'A000'+5)
local real Y = LoadReal(ht,hf,'A000'+6)
local trigger tr2 = CreateTrigger()
local integer he = GetHandleId(tr2)
call IssueImmediateOrder(u,"stop")
call SaveUnitHandle(ht,he+1,'A000'+3,dummy)
call TriggerRegisterTimerEventPeriodic(tr2,0.02)
call TriggerAddAction(tr2,function EEE)
call UnitApplyTimedLife(dummy,'BTLF',1)
set u = null
set dummy = null
set tr2 = null
endfunction


function Trig_FireOfThePit_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local trigger tr1 = CreateTrigger()
local integer hf = GetHandleId(tr1)
local trigger tr3 = CreateTrigger()
local integer hr = GetHandleId(tr3)
local real X = GetUnitX(u)
local real Y = GetUnitY(u)
call TriggerRegisterTimerEventPeriodic(tr1,0.05)
call TriggerAddAction(tr1,function OOO)
call SaveUnitHandle(ht,hf+1,'A000'+1,u)
call SaveReal(ht,hf,'A000'+5,X)
call SaveReal(ht,hf,'A000'+6,Y)
call TriggerRegisterUnitEvent(tr3,u, EVENT_UNIT_ISSUED_ORDER)
call TriggerAddCondition(tr3,Condition(function WWW_Conditions))
call SaveTriggerHandle(ht,hr,'A000'+4,tr1)
call TriggerAddAction(tr3,function XXX)
set u = null
set tr1 = null
set tr3 = null
endfunction

//===========================================================================
function InitTrig_FireOfThePit takes nothing returns nothing
    set gg_trg_FireOfThePit = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_FireOfThePit, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_FireOfThePit, Condition( function Trig_FireOfThePit_Conditions ) )
    call TriggerAddAction( gg_trg_FireOfThePit, function Trig_FireOfThePit_Actions )
endfunction
Старый 16.11.2010, 01:19
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
глобалку используй, к примеру что нибудь в роде temp_unit
Старый 16.11.2010, 01:42
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Если использовать глобалки то придется юзать массивы, а я не дружу с массивами, они для меня слишком сложны :)
Есть другой варинат?

Отредактировано Ninbous, 16.11.2010 в 13:00.
Старый 16.11.2010, 11:46
JassMan
свободен
offline
Опыт: 4,193
Активность:
Функция ForGroup (то есть Damage) является продолжением той функции откуда этот ForGroup запустили. Ибо это всего лишь цикл, который просто находится снаружи от функции.
И поэтому все события и "функции по событию" (такие как GetTriggeringTrigger()  ), которые сработали функции EEE, сработают и внутри Damage функции.
Проще говоря, функция ForGroup является прямым продолжением функции откуда её вызвали.
Старый 16.11.2010, 15:50
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
О_о правда? Спасибо огромное, незнал, тогда совсем легко =)
Старый 16.11.2010, 17:08
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Цитата:
Сообщение от Ninbous
О_о правда? Спасибо огромное, незнал, тогда совсем легко =)


так давайте это докажем)))

Когда мы используем пик в триггерах,то создаётся новая функция в джаззе,но в триггерах мы этого не видим и используем того же триггеринг юнит,но в джаззе думаем новая функция параметры туда не передавались откуда там триггеринг юнит,знание триггеров иногда тоже помогает))
Старый 16.11.2010, 17:15
JassMan
свободен
offline
Опыт: 4,193
Активность:
А да, это еще также относиться к фильтрациям, тоесть эти функции тоже связанны напрямую
Старый 16.11.2010, 21:01
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Спасибо огромное сделал) Вот тока лагает при если врубить сразу у троих героев) Незнаю как оптимизировать, вроде все правильно, значит само по себе ресурсоёмкий триггер.
Посмотрите есть ли утечки? И как все это оптимизировать >_<
function Trig_FireOfThePit_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function WWW_Conditions takes nothing returns boolean
    return GetIssuedOrderId() == OrderId("unimmolation")
endfunction

function XXX takes nothing returns nothing
local integer hr = GetHandleId(GetTriggeringTrigger())
local trigger tr1 = LoadTriggerHandle(ht,hr,'A000'+4)
call DestroyTrigger(tr1)
set tr1 = null
endfunction

function Cond takes nothing returns boolean
return(IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false)and GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>0 and(IsUnitType(GetFilterUnit(),UNIT_TYPE_ANCIENT)==false)
endfunction

function Damage takes nothing returns nothing
local integer he = GetHandleId(GetTriggeringTrigger())
local unit dummy = LoadUnitHandle(ht,he+1,'A000'+3)
local unit u = LoadUnitHandle(ht,he+2,'A000'+4)
local real min = 1*GetUnitAbilityLevel(u,'A000')
local real max = 1.4*GetUnitAbilityLevel(u,'A000')
local integer int = GetHeroInt(u,true)
local real damage = GetRandomReal(min, max)*(1+(int*0.001))
if IsUnitAlly(GetEnumUnit(),GetOwningPlayer(dummy))==false then
call UnitDamageTarget(u,GetEnumUnit(),damage,false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)  
endif
set u = null
set dummy = null
endfunction

function EEE takes nothing returns nothing
local integer he = GetHandleId(GetTriggeringTrigger())
local unit dummy = LoadUnitHandle(ht,he+1,'A000'+3)
local group g = CreateGroup()
if GetUnitState(dummy, UNIT_STATE_LIFE)<= 0 then
call RemoveSavedHandle(ht,he+1,'A000'+3)
call DestroyTrigger(GetTriggeringTrigger())
else
call GroupEnumUnitsInRange(g,GetUnitX(dummy),GetUnitY(dummy),150,Condition(function Cond))
call ForGroup(g,function Damage)
call SetUnitX(dummy,(GetUnitX(dummy) + Cos(Deg2Rad(GetUnitFacing(dummy))) * 50 ) )//Скорость снаряда:600 <<формула:Х=Желаемая скорость снаряда/(100/(время в милисекундах(тут 2)))>>
call SetUnitY(dummy,(GetUnitY(dummy) + Sin(Deg2Rad(GetUnitFacing(dummy))) * 50 ) )
endif
call DestroyGroup(g)
set dummy = null
set g = null
endfunction

function OOO takes nothing returns nothing
local integer hf = GetHandleId(GetTriggeringTrigger())
local trigger tr3
local unit u = LoadUnitHandle(ht,hf+1,'A000'+1)
local unit dummy = CreateUnit(GetOwningPlayer(u),'h000',GetUnitX(u),GetUnitY(u),GetUnitFacing(u))
local real X = LoadReal(ht,hf,'A000'+5)
local real Y = LoadReal(ht,hf,'A000'+6)
local trigger tr2 = CreateTrigger()
local integer he = GetHandleId(tr2)
call IssueImmediateOrder(u,"stop")
call SaveUnitHandle(ht,he+2,'A000'+4,u)
call SaveUnitHandle(ht,he+1,'A000'+3,dummy)
call TriggerRegisterTimerEventPeriodic(tr2,0.05)
call TriggerAddAction(tr2,function EEE)
call UnitApplyTimedLife(dummy,'BTLF',1)
if GetUnitState(u,UNIT_STATE_MANA)<=100 then
call DestroyTrigger(GetTriggeringTrigger())
endif
set u = null
set dummy = null
set tr2 = null
endfunction


function Trig_FireOfThePit_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local trigger tr1 = CreateTrigger()
local integer hf = GetHandleId(tr1)
local trigger tr3 = CreateTrigger()
local integer hr = GetHandleId(tr3)
local real X = GetUnitX(u)
local real Y = GetUnitY(u)
call TriggerRegisterTimerEventPeriodic(tr1,0.05)
call TriggerAddAction(tr1,function OOO)
call SaveUnitHandle(ht,hf+1,'A000'+1,u)
call SaveReal(ht,hf,'A000'+5,X)
call SaveReal(ht,hf,'A000'+6,Y)
call TriggerRegisterUnitEvent(tr3,u, EVENT_UNIT_ISSUED_ORDER)
call TriggerAddCondition(tr3,Condition(function WWW_Conditions))
call SaveTriggerHandle(ht,hr,'A000'+4,tr1)
call TriggerAddAction(tr3,function XXX)
set u = null
set tr1 = null
set tr3 = null
endfunction

//===========================================================================
function InitTrig_FireOfThePit takes nothing returns nothing
    set gg_trg_FireOfThePit = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_FireOfThePit, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_FireOfThePit, Condition( function Trig_FireOfThePit_Conditions ) )
    call TriggerAddAction( gg_trg_FireOfThePit, function Trig_FireOfThePit_Actions )
endfunction
Оцените, помоему клево получилось =)
Ninbous добавил:
Хеш намного проще)
Массивы это пипец, как там люди находят нужную ячейку я непонимаю, а когда ячейка не нужна еще надо все остальные сдвигать и ограничение в 8192 мну неустраивает, было бы бесконечно то загружал бы в ячейку соответствующюю номеру хендла и тогда поиск ячейки был бы намного проще, а тут уууу...
Прикрепленные файлы
Тип файла: w3x Spell_Ad.w3x (35.2 Кбайт, 12 просмотров )
Старый 17.11.2010, 00:38
JassMan
свободен
offline
Опыт: 4,193
Активность:
В общем исправлять долго, это твоя задача. Я только прочитаю мини лекцию про использование локалок:
Если локальная переменная используется 1 раз (и не используется в циклах), то её лучше не создавать, а сразу писать её значение в нужное место, ибо на инициализацию переменной тоже тратятся ресурсы оперативки. К примеру, GetUnitX() и Y() можно было писать сразу в то место, где они нужны, не создавая для них локалок, так код работает быстрее.
Еще хотелось бы сказать пару слов о таймерах.
Ты создаёшь лишние триггеры, лишние эвенты (события), когда можно было использовать по проще алгоритм.
local timer t=CreateTimer()
//тут происходят сохранения в хеш таблице . . .
call TimerStart(t,0.05,true,function 000) //таймер запуститься как многократный (т.к. стоит true) и указываешь функцию на действия.
В общем всё как у тебя, только проще — без создания лишних объектов (триггеров) и забивания памяти.
И сохранять данные в хеш таблице лучше на хендл таймера (указываем в категории).
call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u) ячейку берём произвольно, — я поставил единицу
следующее данное можно сохранять во второй ячейке и т.д.
А в функции таймера (в нашем случае в функции 000) :
local timer t=GetExpiredTimer() //Истёкший таймер.
Через этот таймер выгружать данные
Это куда удобнее и менее запутанно.
При этом сохраняется MUI, так как таймер локальный и при новом срабатывании способности будет генерироваться новый таймер. И уже тогда на него будут сохраняться данные. То есть не будет коллизий (совпадений, наложений).
 

Отредактировано JassMan, 18.11.2010 в 04:05.
Старый 17.11.2010, 01:05
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Оптимизирую...
JassMan, перехожу на таймеры вместо тригерров (как я сам недодумался) и вот незнаю как загрузить сохраненный таймер =/ Знаю что можно глобалками, но блин хочу через хеш, как мне связать созданные таймер и триггер в функции Trig_FireOfThePit_Actions?
...
function XXX takes nothing returns nothing
local integer hf = GetHandleId(GetTriggeringTrigger())
local timer t = LoadTimerHandle(ht,hf,'A000'+4) //Нужно загрузить таймер сюда...
call DestroyTimer(t)
call DestroyTrigger(GetTriggeringTrigger())
set t = null
endfunction
...

function Trig_FireOfThePit_Actions takes nothing returns nothing
local timer t = CreateTimer()
local integer hf = GetHandleId(t)
local trigger tr3 = CreateTrigger()
local integer hr = GetHandleId(tr3)
...
call TimerStart(t,0.05,true,function OOO)
call TriggerRegisterUnitEvent(tr3,u, EVENT_UNIT_ISSUED_ORDER)
call TriggerAddCondition(tr3,Condition(function WWW_Conditions))
call SaveTimerHandle(ht,hf,'A000'+4,t) //Сохраненный таймер, который нужно будет удалить
call TriggerAddAction(tr3,function XXX)
set t = null
set tr3 = null
endfunction
Старый 18.11.2010, 01:28
JassMan
свободен
offline
Опыт: 4,193
Активность:
Я же всё тебе написал — читать надо внимательно и, желательно, не один раз.
Связываешь через функцию GetExpiredTimer() — это тот самый таймер который запустили внизу, а в этой функции он ка бы истекает и мы через GetExpiredTimer() можем к нему обратиться.
Образец:
function TimerActions takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit u=LoadUnitHandle(udg_Hash,GetHandleId(t),1)
call SetUnitX(u,LoadReal(udg_Hash,GetHandleId(t),2)+200.) //Не важно какие действия — на бум придумал.
call SetUnitY(u,LoadReal(udg_Hash,GetHandleId(t),3)+350.)
call FlushChildHashtable(udg_Hash,GetHandleId(t)) //Чистим всё что находилось в категории GetHandleId(t) (то есть всё, что было во всех ячейках). Это действие !!не должно!! стоять ниже DestroyTimer(t)
call DestroyTimer(t) //После того как таймер не нужен, его удаляем.
set u=null
set t=null //Ну и, как всегда, не забываем переменные почистить.
endfunction

function My_function takes nothing returns nothing
local timer t = CreateTimer()
local unit u=GetTriggerUnit()
call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u)
call SaveReal(udg_Hash,GetHandleId(t),2,GetUnitX(u))
call SaveReal(udg_Hash,GetHandleId(t),3,GetUnitY(u))
call TimerStart(t,0.001,false,function TimerActions)
set u=null
set t=null  //Не забываем обнулять
endfunction
И еще раз прочти мою мини лекцию про локалки

Отредактировано JassMan, 18.11.2010 в 04:04.
Старый 18.11.2010, 03:43
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
JassMan, это я зделал, видмо я неправильно сформулировал вопрос, мне нужнен и тригер и таймер. Таймер нужен для действия и для проверки, есть ли мана у кастера и живой ли он, а тригер нужен для того чтобы отловить приказ "unimmolation" и чтобы вырубить таймер. (это прервет заклинание)
Мне нужен и ТАЙМЕР и ТРИГГЕР создавать.
P.S. я не такой тупой как ты думаеш))
Старый 18.11.2010, 12:56
JassMan
свободен
offline
Опыт: 4,193
Активность:
Тогда расскажи вообще что этот код должен делать? — Какова была цель изначально?
Старый 18.11.2010, 15:20
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Юнит применяет способность, включается таймер1 (там каждую 0.05 сек создаются даммики) и создается триггер1 (там удаляется таймер1 при событии "Юнит выключает способность "unimmolation").
В таймере1 создается, для каждого созданного даммика, таймер2 (который каждуые 0.05 сек двигает даммика и наносит урон в радиусе даммика)
Вопрос как удалить нужный мне таймер1 в триггере1 с помощью хеша? Глобалками нехочу...
Старый 18.11.2010, 15:35
JassMan
свободен
offline
Опыт: 4,193
Активность:
function FireOfThePit_Condition takes nothing returns boolean
return GetSpellAbilityId()=='A000'
endfunction

function Order_Condition takes nothing returns boolean
return GetIssuedOrderId()==OrderId("unimmolation")
endfunction

function MoveDummy takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit u=LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local unit d=GetEnumUnit()
local real L=LoadReal(udg_Hash,GetHandleId(d),1)+25.
local real a
if(L>600.)then //Тут устанавливаем длину потока, и при пересечении указанного тут расстояния, юнит будет удаляться и будет чиститься всё, что сохраненно под его категорией.
    call GroupRemoveUnit(LoadGroupHandle(udg_Hash,GetHandleId(t),2),d)
    call FlushChildHashtable(udg_Hash,GetHandleId(d))
    call RemoveUnit(d)
else
    set a=GetUnitFacing(u)*57.29577951
    call SetUnitX(d,GetUnitX(u)+L*Cos(a))
    call SetUnitY(d,GetUnitY(u)+L*Sin(a))
    call SaveReal(udg_Hash,GetHandleId(d),1,L)
endif
set t=null
set u=null
set d=null
endfunction

function GroupDummy_Actions takes nothing returns nothing
call ForGroup(LoadGroupHandle(udg_Hash,GetHandleId(GetExpiredTimer()),2),function MoveDummy)
endfunction

function CreateDummy takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit u=LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local group g=LoadGroupHandle(udg_Hash,GetHandleId(t),2)
local unit d=CreateUnit(GetOwningPlayer(u),'h000',GetUnitX(u),GetUnitY(u),0.)
local real a=GetUnitFacing(u)*57.29577951
call SetUnitX(d,GetUnitX(u)+25.*Cos(a))
call SetUnitY(d,GetUnitY(u)+25.*Sin(a))
call SaveReal(udg_Hash,GetHandleId(d),1,25.)
call GroupAddUnit(g,d)
set t=null
set u=null
set d=null
set g=null
endfunction

function MemoryClear takes nothing returns nothing
local unit d=GetEnumUnit()
call FlushChildHashtable(udg_Hash,GetHandleId(d))
call RemoveUnit(d)
set d=null
endfunction

function StopTimer takes nothing returns nothing
local trigget trig=GetTriggeringTrigger()
local timer t=LoadTimerHandle(udg_Hash,GetHandleId(trig),1)
local group g=LoadGroupHandle(udg_Hash,GetHandleId(t),2)
call PauseTimer(t)
call ForGroup(g,function MemoryClear)
call DestroyGroup(g)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call DestroyTimer(t)
set t=LoadTimerHandle(udg_Hash,GetHandleId(trig),2)
call PauseTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(trig))
call DestroyTrigger(trig)
set trig=null
set t=null
set g=null
endfunction

function FireOfThePit_Action takes nothing returns nothing
local unit u=GetSpellAbilityUnit()
local trigger trig=CreateTrigger()
local group g=CreateGroup()
local timer t=CreateTimer() //Таймер для создания юнитов
call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u)
call SaveGroupHandle(udg_Hash,GetHandleId(t),2,g)
call SaveTimerHandle(udg_Hash,GetHandleId(trig),1,t)
call TriggerRegisterUnitEvent(trig,u,EVENT_UNIT_ISSUED_ORDER)
call TriggerAddCondition(trig,Condition(function Order_Condition))
call TriggerAddAction(trig,function StopTimer)
call TimerStart(t,0.05,true,function CreateDummy)
set t=CreateTimer() //Таймер для движения юнитов
call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u)
call SaveGroupHandle(udg_Hash,GetHandleId(t),2,g)
call TimerStart(t,0.04,true,function GroupDummy_Actions)
call SaveTimerHandle(udg_Hash,GetHandleId(trig),2,t)
set u=null
set g=null
set t=null
set trig=null
endfunction

function InitTrig_FireOfThePit takes nothing returns nothing
local trigger trg=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(trg,Condition(function FireOfThePit_Condition))
call TriggerAddAction(trg,function FireOfThePit_Actions)
set trg=null
endfunction
А урон лучше наносить, дав каждому дамми юниту способность "жар преисподней (постоянный)" пассивная
 
 
 

Отредактировано JassMan, 22.11.2010 в 01:46.
Старый 18.11.2010, 16:59
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Спасибо, дома посмотрю)
Урон мне нужен триггерный, потому что у абилки 20 уровней и урон должен скалирвоаться от интеллекта (на 0.01% за 1 еденицу интеллекта)
Насчет абилки Жара Преисподней (пасиивный) я тоже думал))
Старый 18.11.2010, 17:09
JassMan
свободен
offline
Опыт: 4,193
Активность:
Тогда придётся генерировать каждый раз группу и выбирать вокруг каждого даммика и наносить урон — это примерно еще 2-3 функции добавить надо.
Кстати я писал прямо здесь, поэтому не могу гарантировать, что тут нету опечаток. . .
Старый 18.11.2010, 17:13
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Разберемся спасибо))
Старый 18.11.2010, 17:23
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
GetEnumUnit(), для callback-функции;
GetFilterUnit(), для фильтра-функции.
Старый 18.11.2010, 18:18
Banzay89

offline
Опыт: 11,155
Активность:
омг.. даешь юниту невидимую ауру, которая действует только на противников в определенном радиусе. потом триггерно дэмажешь всех у кого есть бафф этой ауры.. Оо
зачем вообще дамми юниты то?
Старый 23.11.2010, 03:51
Закрытая тема

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

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

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

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



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