Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Архивировано

Эта тема находится в архиве и закрыта для публикации сообщений.

iKrivetko

Тест на знание механики DotA за ключ к DOTA 2

Рекомендованные сообщения

а точно циклон не снимает рут? Вроде ж снимает, т.к. дает неуязвимость, а рут диспелится, значит инвул его точно должен снять.

0 ms

 

А с тоссом мимо меня проскочило "=1"

Старый я стал, видимо. :nate:


Поделиться сообщением


Ссылка на сообщение

Колличество итераций в тоссе, правильный ответ - 51, но почему? Ведь подсчет идет от 1 до 51, причем этот 51ый шаг обнуляет переменные и снимает паузу. Т.е. 50 итераций. Я прав.

 

 

// Objects used:

// 'A0BZ' = Toss (Stone Giant : Tiny)

// 'n00I' = Chicken

// 'e01H' = Crow

// 'n00L' = Roshan

// 'A04R' = Marker (Nether Ward 4,Lightning Bolter,Nether Ward 3,Nether Ward 2,Vengeance Death caster,...)

// 'H00F' = Dragon Knight

// 'H00E' = Dragon Knight

// 'H00G' = Dragon Knight

// 'A0CY' = Grow (Stone Giant : Tiny)

// 'AEme' = Metamorphosis (Demon Hunter : Shadowsong,Shadowfury,Shadowstalker,Flameseeker,Darkweaver,...)

 

 

 

function Trig_Toss_Conditions takes nothing returns boolean

if(GetSpellAbilityId()!='A0BZ')then

return false

endif

if GetUnitTypeId(GetSpellTargetUnit())=='n00I'or GetUnitTypeId(GetSpellTargetUnit())=='e01H'then

return false

endif

if(GetOwningPlayer(GetSpellTargetUnit())==GetOwningPlayer(GetTriggerUnit()))then

return false

endif

return true

endfunction

 

 

 

function TossFilter takes nothing returns boolean

if(IsUnitType(GetFilterUnit(),UNIT_TYPE_ANCIENT))then

return false

endif

if IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) then

return false

elseif IsUnitType(GetFilterUnit(),UNIT_TYPE_FLYING) then

return false

elseif GetFilterUnit()==GetSpellAbilityUnit()then

return false

elseif IsUnitDeadBJ(GetFilterUnit())then

return false

elseif IsUnitType(GetTriggerUnit(),UNIT_TYPE_ANCIENT) then

return false

elseif GetUnitTypeId(GetFilterUnit())=='n00L'then

return false

elseif IsUnitType(GetTriggerUnit(),UNIT_TYPE_GIANT) then

return false

elseif IsUnitVisible(GetFilterUnit(),GetOwningPlayer(GetSpellAbilityUnit()))==false then

return false

elseif GetUnitAbilityLevelSwapped('A04R',GetFilterUnit())!=0 then

return false

elseif(GetUnitTypeId(GetFilterUnit())=='H00F'or GetUnitTypeId(GetFilterUnit())=='H00E'or GetUnitTypeId(GetFilterUnit())=='H00G')then

return false

endif

return true

endfunction

 

 

 

function TossDamage takes unit pWho,real pxx,real pyy,real pAOE,real pDamage,integer pSpellId returns nothing

local group lVictims=CreateGroup()

local unit lFirst

local location lTMP

call GroupEnumUnitsInRange(lVictims,pxx,pyy,pAOE,null)

loop

set lFirst=FirstOfGroup(lVictims)

exitwhen lFirst==null

if IsUnitEnemy(lFirst,GetOwningPlayer(pWho))and IsUnitDeadBJ(lFirst)==false and GetUnitAbilityLevel(lFirst,'A04R')==0 then

if(IsUnitType(lFirst,UNIT_TYPE_STRUCTURE)==false)then

call UnitDamageTargetBJ(pWho,lFirst,pDamage,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION)

else

call UnitDamageTargetBJ(pWho,lFirst,pDamage/3,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION)

endif

set lTMP=GetUnitLoc(lFirst)

call DestroyEffect(AddSpellEffectByIdLoc(pSpellId,EFFECT_TYPE_CASTER,lTMP))

call DestroyEffect(AddSpellEffectByIdLoc(pSpellId,EFFECT_TYPE_CASTER,lTMP))

call DestroyEffect(AddSpellEffectByIdLoc(pSpellId,EFFECT_TYPE_CASTER,lTMP))

call RemoveLocation(lTMP)

call GroupRemoveUnit(lVictims,lFirst)

else

call GroupRemoveUnit(lVictims,lFirst)

endif

endloop

call GroupClear(lVictims)

call DestroyGroup(lVictims)

endfunction

 

 

 

function TossMain takes nothing returns nothing

local timer lMoveTimer=GetExpiredTimer()

local string lTable=H2Tx(lMoveTimer)

local integer lCount=GetInteger(lTable,"TossCounter")

local real lRange=GetReal(lTable,"TossDistance")

local real lAngle=GetReal(lTable,"TossAngle")

local location lTarget=GetLocation(lTable,"TossTargetLoc")

local location lStart=GetLocation(lTable,"TossSourceLoc")

local unit lCaster=GetUnit(lTable,"Tiny")

local unit lVictim=GetUnit(lTable,"TossSource")

local real lHeight=(lCount-25)*(lCount-25)

local real lSpeedMod=lRange*lCount/50-lRange

local location lDest=PolarProjectionBJ(lTarget,lSpeedMod,lAngle)

if(lCount<51)then

call SetUnitPositionLoc(lVictim,lDest)

call SetUnitFlyHeight(lVictim,775-lHeight,0)

set lCount=lCount+1

if(GetRandomInt(1,4)==2)then

call DestroyEffect(AddSpecialEffectTargetUnitBJ("origin",lVictim,"Abilities\\Spells\\Undead\\Cripple\\CrippleTarget.mdl"))

endif

endif

if(lCount>50)then

call SetUnitFlyHeight(lVictim,GetUnitDefaultFlyHeight(lVictim),0)

call PauseUnit(lVictim,false)

call SetUnitPathing(lVictim,true)

call TerrainDeformationRippleBJ(.2,true,lTarget,1.,300.,96.,1,64.)

if IsUnitAlly(lVictim,GetOwningPlayer(lCaster))then

call UnitDamageTargetBJ(lCaster,lVictim,.2*75*GetUnitAbilityLevel(lCaster,'A0BZ'),ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION)

else

call UnitDamageTargetBJ(lCaster,lVictim,(.2+.15*GetUnitAbilityLevel(lCaster,'A0CY'))*75*GetUnitAbilityLevel(lCaster,'A0BZ'),ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION)

endif

call TossDamage(lCaster,GetLocationX(lTarget),GetLocationY(lTarget),300,75.*I2R(GetUnitAbilityLevelSwapped('A0BZ',lCaster)),'A0BZ')

call EnumDestructablesInCircleBJ(300,lTarget,function KillDestructableEnum)

call PauseTimer(GetExpiredTimer())

call PolledWait(.01)

call FastFlush(lTable)

call DestroyTimer(GetExpiredTimer())

call RemoveLocation(lTarget)

call RemoveLocation(lStart)

endif

call SetInteger(lTable,"TossCounter",lCount)

call RemoveLocation(lDest)

endfunction

 

 

 

function Trig_Toss_Actions takes nothing returns nothing

local group lNearCaster=CreateGroup()

local timer lMoveTimer

local unit lCaster=GetTriggerUnit()

local unit lVictim

local location lTarget

local location lStart

local integer lCounter

local real lRange

local real lAngle

local string lf5

call GroupEnumUnitsInRange(lNearCaster,GetUnitX(lCaster),GetUnitY(lCaster),275,Condition(function TossFilter))

set lVictim=GroupPickRandomUnit(lNearCaster)

call DestroyGroup(lNearCaster)

set lTarget=GetUnitLoc(GetSpellTargetUnit())

set lStart=GetUnitLoc(lVictim)

set lCounter=1

set lRange=DistanceBetweenPoints(lStart,lTarget)

set lAngle=AngleBetweenPoints(lStart,lTarget)

if(lVictim!=null and GetUnitTypeId(lVictim)!='n00I'and GetUnitTypeId(lVictim)!='e01H'and GetOwningPlayer(GetSpellTargetUnit())!=GetOwningPlayer(lCaster))then

call SetUnitAnimationByIndex(lCaster,4)

call PauseUnit(lVictim,true)

call SetUnitPathing(lVictim,false)

call UnitAddAbility(lVictim,'AEme')

call UnitRemoveAbility(lVictim,'AEme')

set lMoveTimer=CreateTimer()

set lf5=H2Tx(lMoveTimer)

call SetHandle(lf5,"Tiny",lCaster)

call SetHandle(lf5,"TossSource",lVictim)

call SetHandle(lf5,"TossTargetLoc",lTarget)

call SetHandle(lf5,"TossSourceLoc",lStart)

call SetInteger(lf5,"TossCounter",lCounter)

call SetReal(lf5,"TossDistance",lRange)

call SetReal(lf5,"TossAngle",lAngle)

call TimerStart(lMoveTimer,.02,true,function TossMain)

endif

endfunction

 

 

 

function StartTrigger_Toss takes nothing returns nothing

set gg_trg_Toss=CreateTrigger()

call TriggerRegisterAnyUnitEventBJ(gg_trg_Toss,EVENT_PLAYER_UNIT_SPELL_EFFECT)

call TriggerAddCondition(gg_trg_Toss,Condition(function Trig_Toss_Conditions))

call TriggerAddAction(gg_trg_Toss,function Trig_Toss_Actions)

endfunction

 

function InitTrig_Toss takes nothing returns nothing

endfunction

 

 

^выделил жирным доказательства

 

50+1 итерация, зависит от того - что называть итерациями

Поделиться сообщением


Ссылка на сообщение

а точно циклон не снимает рут? Вроде ж снимает, т.к. дает неуязвимость, а рут диспелится, значит инвул его точно должен снять.

0 ms

115 as  :avtorklif: При чем тут ms? Тип бафа рута - магический (если требуемый уровень рута ниже 6 офк), значит диспелится циклоном.


Nite's Dungeon Arena beta 0.8 - экшн-арена, напоминает BLC. Ждите 1.0 релиза, вдруг скоро сделаю

Поделиться сообщением


Ссылка на сообщение

а точно циклон не снимает рут? Вроде ж снимает, т.к. дает неуязвимость, а рут диспелится, значит инвул его точно должен снять.

0 ms

115 as  :avtorklif: При чем тут ms? Тип бафа рута - магический (если требуемый уровень рута ниже 6 офк), значит диспелится циклоном.

Нельзя циклоном таргетить юнитов с 0 ms

Поделиться сообщением


Ссылка на сообщение

планируются ли ещё тесты и когда, если не секрет?

Поделиться сообщением


Ссылка на сообщение

планируются ли ещё тесты и когда если не секрет?

В соло такое составлять, как видишь, удовольствия мало. Мелкие мб буду составлять.

Поделиться сообщением


Ссылка на сообщение

планируются ли ещё тесты и когда если не секрет?

В соло такое составлять, как видишь, удовольствия мало. Мелкие мб буду составлять.

 

мб драколич поможет))?, у вас по всем проблемным вопросам ответы отличаются))

 

//кроме триггер хилов, где неуказан достоверный источник в статье драколича

 

вообщем, все равно спасибо)

Поделиться сообщением


Ссылка на сообщение

Пиздец тут пот походу. :avtorklif:

Поделиться сообщением


Ссылка на сообщение

и че я только ленился гугл открыть  :avtorklif:


если бы ты постил свои посты на спец форумах по исследованию дегенератов, где за каждый дегенеративный пост платят 1 цент, ты бы уже был в десятке форбс

Поделиться сообщением


Ссылка на сообщение

а точно циклон не снимает рут? Вроде ж снимает, т.к. дает неуязвимость, а рут диспелится, значит инвул его точно должен снять.

0 ms

115 as  :avtorklif: При чем тут ms? Тип бафа рута - магический (если требуемый уровень рута ниже 6 офк), значит диспелится циклоном.

Нельзя циклоном таргетить юнитов с 0 ms

Хммм, это интересно. Что насчет 50 итераций в тоссе?

 

БТВ, "пост лечение" это то же самое триггерное лечение, только не сразу, а с таймером на 0.0 сек, что бы было помещено в очередь выполняемых условий, но после уже выполняемой функции на "unit takes damage". А то, что вы тут обозвали его "пост лечением" и "динамическим" - в открытом коде функция называется "DelayedDamage" (а так же DelayedDamageCheck и DelayedDamageTimer).


Nite's Dungeon Arena beta 0.8 - экшн-арена, напоминает BLC. Ждите 1.0 релиза, вдруг скоро сделаю

Поделиться сообщением


Ссылка на сообщение

а точно циклон не снимает рут? Вроде ж снимает, т.к. дает неуязвимость, а рут диспелится, значит инвул его точно должен снять.

0 ms

115 as  :avtorklif: При чем тут ms? Тип бафа рута - магический (если требуемый уровень рута ниже 6 офк), значит диспелится циклоном.

Нельзя циклоном таргетить юнитов с 0 ms

Хммм, это интересно. Что насчет 50 итераций в тоссе?

Выше написал :\

 

Надо было про DAMAGE_TYPE_DEMOLITION какой-нибудь вопрос сделать. Уж больно грозно звучит.


Поделиться сообщением


Ссылка на сообщение
интересно. Что насчет 50 итераций в тоссе?

Выше написал :\

ну так 50 итераций, т.к. функция вызывается 50 раз. Использование другой функции не считается, т.к. она не повторяется.

 

Для тех кто не понял: в течении 49 вызовов функции счетчик возрастает с 1 до 50, в 50ый вызов счетчик накидывает до 51 и проходит условие в следующем ветвлении - завершется.


Nite's Dungeon Arena beta 0.8 - экшн-арена, напоминает BLC. Ждите 1.0 релиза, вдруг скоро сделаю

Поделиться сообщением


Ссылка на сообщение

Кстати, откуда код?o_O


Поделиться сообщением


Ссылка на сообщение

Кстати, откуда код?o_O

у меня есть открытая 6.41 версия с кодом, рассортированным по папочкам  я же меп-мейкер с xgm.ru, у меня такое должно быть

 

Еще вопросы:

пурж убивает вызванных существ мгновенно. Правильный ответ - нет. Почему?

Подразумевается дефолтный Purge в Diffusual Blade или любой пурж вообще?

Под убийством "мгновенно" подразумевается то, что урон будет нанесен мгновенно заклинанием или то, что пурж пробивает все резисты у самонов?

Считается ли медведь сулабира самоном? Считаются ли варды самонами?

 

И про винд-волки я уже спрашивал - я насчитал 19 абилок с родителем AOwk (тот самый WW блейда)


Nite's Dungeon Arena beta 0.8 - экшн-арена, напоминает BLC. Ждите 1.0 релиза, вдруг скоро сделаю

Поделиться сообщением


Ссылка на сообщение

То-то я смотрю. Вроде и то, а вроде и хуйня какая-то. ты ведь в курсе, что в .54 (вроде) он переделке подвергался?

 

 

function Func2210 takes unit loc_unit01 returns unit

    local unit loc_unit02=null

    local group loc_group01=Func0030()

    call GroupEnumUnitsInRange(loc_group01,GetUnitX(loc_unit01),GetUnitY(loc_unit01),275,Condition(function Func2209))

    call GroupRemoveUnit(loc_group01,loc_unit01)

    set loc_unit02=GroupPickRandomUnit(loc_group01)

    call Func0029(loc_group01)

    set unit124=loc_unit02

    set loc_unit02=null

    set loc_group01=null

    return unit124

endfunction

 

function Func2211 takes nothing returns boolean

    local trigger loc_trigger01=GetTriggeringTrigger()

    local integer loc_integer01=GetHandleId(loc_trigger01)

    local integer loc_integer02=GetTriggerEvalCount(loc_trigger01)

    local unit loc_unit01=(LoadUnitHandle(hashtable001,(loc_integer01),(14)))

    local unit loc_unit02=(LoadUnitHandle(hashtable001,(loc_integer01),(2)))

    local integer loc_integer03=(LoadInteger(hashtable001,(loc_integer01),(30)))

    local unit loc_unit03=Func0022(loc_integer03)

    local real loc_real01=(LoadReal(hashtable001,(loc_integer01),(282)))

    local real loc_real02=(LoadReal(hashtable001,(loc_integer01),(283)))

    local real loc_real03=GetUnitX(loc_unit02)

    local real loc_real04=GetUnitY(loc_unit02)

    local real loc_real05=GetUnitX(loc_unit03)

    local real loc_real06=GetUnitY(loc_unit03)

    local real loc_real07

    local real loc_real08

    local real loc_real09

    local real loc_real10

    local real loc_real11

    local real loc_real12

    local location loc_location01

    if Func0139(loc_real01,loc_real02,loc_real05,loc_real06)>1000 then

        set loc_real05=loc_real01

        set loc_real06=loc_real02

    endif

    set loc_real07=Func0157(loc_real03,loc_real04,loc_real05,loc_real06)

    set loc_real08=Func0139(loc_real03,loc_real04,loc_real05,loc_real06)

    set loc_real09=loc_real08/IMaxBJ((51-loc_integer02),1)

    set loc_real10=(loc_integer02-25)*(loc_integer02-25)

    set loc_real11=loc_real03+loc_real09*Cos(loc_real07*bj_DEGTORAD)

    set loc_real12=loc_real04+loc_real09*Sin(loc_real07*bj_DEGTORAD)

    if loc_integer02<51 then

        if Func0096(loc_unit02)==false then

            call SetUnitFlyHeight(loc_unit02,775-loc_real10,0)

        endif

        call SetUnitPosition(loc_unit02,loc_real11,loc_real12)

    else

        if Func0096(loc_unit02)==false then

            call SetUnitFlyHeight(loc_unit02,GetUnitDefaultFlyHeight(loc_unit02),0)

        endif

        call PauseUnit(loc_unit02,false)

        call SetUnitPathing(loc_unit02,true)

        call SetUnitPosition(loc_unit02,loc_real05,loc_real06)

        call SaveInteger(hashtable001,(GetHandleId((loc_unit02))),((4268)),(2))

        set loc_location01=Location(loc_real05,loc_real06)

        call TerrainDeformationRippleBJ(0.2,true,loc_location01,1.00,300.00,96.00,1,64.00)

        call RemoveLocation(loc_location01)

        call DestroyEffect((LoadEffectHandle(hashtable001,(loc_integer01),(32))))

        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl",GetUnitX(loc_unit02),GetUnitY(loc_unit02)))

        if IsUnitAlly(loc_unit02,GetOwningPlayer(loc_unit01))then

        else

            if(Func0348((loc_unit01),integers083[integer335])!=null)then

                call Func0107(loc_unit01,loc_unit02,1,(0.2+0.15*(GetUnitAbilityLevel(loc_unit01,'A0CY')+1))*75*GetUnitAbilityLevel(loc_unit01,'A0BZ'))

            else

                call Func0107(loc_unit01,loc_unit02,1,(0.2+0.15*GetUnitAbilityLevel(loc_unit01,'A0CY'))*75*GetUnitAbilityLevel(loc_unit01,'A0BZ'))

            endif

        endif

        call Func0168(loc_real05,loc_real06,300)

        call Func2208(loc_unit01,loc_real05,loc_real06,300,75*GetUnitAbilityLevel(loc_unit01,'A0BZ'))

        call Func0021(loc_integer03)

        call FlushChildHashtable(hashtable001,(loc_integer01))

        call Func0035(loc_trigger01)

    endif

    set loc_trigger01=null

    set loc_unit01=null

    set loc_unit02=null

    set loc_unit03=null

    set loc_location01=null

    return false

endfunction

 

function Func2212 takes nothing returns nothing

    local unit loc_unit01=GetTriggerUnit()

    local unit loc_unit02=unit292

    local unit loc_unit03=GetSpellTargetUnit()

    local trigger loc_trigger01=CreateTrigger()

    local integer loc_integer01=GetHandleId(loc_trigger01)

    call SetUnitAnimationByIndex(loc_unit01,4)

    call PauseUnit(loc_unit02,true)

    call SetUnitPathing(loc_unit02,false)

    if Func0096(loc_unit02)==false then

        call Func0179(loc_unit02,'Amrf')

        call UnitRemoveAbility(loc_unit02,'Amrf')

    endif

    call SaveInteger(hashtable001,(GetHandleId((loc_unit02))),((4268)),(1))

    call SaveUnitHandle(hashtable001,(loc_integer01),(14),(loc_unit01))

    call SaveUnitHandle(hashtable001,(loc_integer01),(2),(loc_unit02))

    call SaveInteger(hashtable001,(loc_integer01),(30),(Func0024(loc_unit03)))

    call SaveEffectHandle(hashtable001,(loc_integer01),(32),(AddSpecialEffectTarget("Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl",loc_unit02,"origin")))

    call SaveReal(hashtable001,(loc_integer01),(282),((GetUnitX(loc_unit03))*1.0))

    call SaveReal(hashtable001,(loc_integer01),(283),((GetUnitY(loc_unit03))*1.0))

    call TriggerRegisterTimerEvent(loc_trigger01,0.02,true)

    call TriggerAddCondition(loc_trigger01,Condition(function Func2211))

    set loc_unit01=null

    set loc_unit02=null

    set loc_unit03=null

    set loc_trigger01=null

endfunction

 

function Func2213 takes nothing returns nothing

    local unit loc_unit01=GetTriggerUnit()

    local unit loc_unit02=Func2210(loc_unit01)

    local unit loc_unit03=GetSpellTargetUnit()

    set unit292=loc_unit02

    if loc_unit02==null then

        call Func0115(loc_unit01)

        call Func0112(GetOwningPlayer(loc_unit01),GetObjectName('n0DA'))

    elseif GetOwningPlayer(loc_unit03)==GetOwningPlayer(loc_unit01)then

        call Func0115(loc_unit01)

        call Func0112(GetOwningPlayer(loc_unit01),GetObjectName('n0CY'))

    endif

    set loc_unit01=null

    set loc_unit02=null

    set loc_unit03=null

endfunction

 

function Func2214 takes nothing returns boolean

    if GetSpellAbilityId()=='A0BZ' then

        if GetTriggerEventId()==EVENT_PLAYER_UNIT_SPELL_CAST then

            call Func2213()

        else

            call Func2212()

        endif

    endif

    return false

endfunction

 

function Func2215 takes nothing returns nothing

    local trigger loc_trigger01=CreateTrigger()

    call Func0164(loc_trigger01,EVENT_PLAYER_UNIT_SPELL_CAST)

    call Func0164(loc_trigger01,EVENT_PLAYER_UNIT_SPELL_EFFECT)

    call TriggerAddCondition(loc_trigger01,Condition(function Func2214))

    set loc_trigger01=null

endfunction

 

 

 

Любой пурж. Они все не убивают мгновенно, собственно, просто наносят урон.

Насчет ww - подразумевались те, которые используются. В случаях, когда вопрос был о устаревших и проч. - это указывалось.


Поделиться сообщением


Ссылка на сообщение

Вот триггер Berserker's Call Акса - 5 локальных переменных в функциях заклинания.

 

 

 

Objects used

 

// Objects used:

// 'A0C7' = Berserker's Call (Axe : Mogul Kahn)

// 'BHwe' = Berserker's Call

// 'B008' = Shackles

// 'Bcyc' = Cyclone

// 'e00E' = Spellcaster

// 'A0E1' = Berserker's Call effect

 

 

 

Trig_Berserker_Call_Conditions

 

function Trig_Berserker_Call_Conditions takes nothing returns boolean

if(not(GetSpellAbilityId()=='A0C7'))then

return false

endif

return true

endfunction

 

 

 

Berserker_Call_Buff

 

function Berserker_Call_Buff takes nothing returns boolean

return GetUnitAbilityLevel(GetTriggerUnit(),'BHwe')>0

endfunction

 

 

 

Berserker_Call_Aim

 

function Berserker_Call_Aim takes nothing returns nothing

local unit lMy=GetUnit(H2Tx(GetTriggeringTrigger()),"Axe")

if GetUnitState(lMy,UNIT_STATE_LIFE)>0 then

call DisableTrigger(GetTriggeringTrigger())

call IssueTargetOrderById(GetTriggerUnit(),OrderId("attack"),lMy)

call EnableTrigger(GetTriggeringTrigger())

endif

endfunction

 

 

 

 

Berserker_Call_OrderFilter

 

 

function Berserker_Call_OrderFilter takes nothing returns boolean

if(UnitHasBuffBJ(GetFilterUnit(),'BHwe'))then

if((UnitHasBuffBJ(GetFilterUnit(),'B008')==false)or(UnitHasBuffBJ(GetFilterUnit(),'Bcyc')==false))then

if IsUnitPaused(GetFilterUnit())==false then

return true

endif

endif

endif

return false

endfunction

 

 

 

 

Berserker_Call_Caster

 

function Berserker_Call_Caster takes nothing returns nothing

call IssueTargetOrderById(GetEnumUnit(),OrderId("attack"),udg_u_DTAX_temp)

endfunction

 

 

 

 

Berserker_Call_CreepVictim

 

function Berserker_Call_CreepVictim takes nothing returns boolean

return GetBooleanAnd((UnitHasBuffBJ(GetFilterUnit(),'BHwe')),GetOwningPlayer(GetFilterUnit())==udg_pA_DTAX_SEPlayers[0]or GetOwningPlayer(GetFilterUnit())==udg_pA_DTAX_SCPlayers[0])

endfunction

 

 

 

 

Berserker_Call_CreepAttack

 

function Berserker_Call_CreepAttack takes nothing returns nothing

if(GetOwningPlayer(GetEnumUnit())==udg_pA_DTAX_SEPlayers[0])then

call UnitRemoveAbility(GetEnumUnit(),'BHwe')

call IssuePointOrderByIdLoc(GetEnumUnit(),OrderId("attack"),GetRectCenter(gg_rct_TheFrozenThroneRect))

endif

if(GetOwningPlayer(GetEnumUnit())==udg_pA_DTAX_SCPlayers[0])then

call UnitRemoveAbility(GetEnumUnit(),'BHwe')

call IssuePointOrderByIdLoc(GetEnumUnit(),OrderId("attack"),GetRectCenter(gg_rct_TheWorldTreeRect))

endif

endfunction

 

 

 

 

Trig_Berserker_Call_Actions

 

function Trig_Berserker_Call_Actions takes nothing returns nothing

local location liD=GetUnitLoc(GetTriggerUnit())

local group lEw

local trigger ltt=CreateTrigger()

local unit lrs=GetSpellAbilityUnit()

call SetHandle(H2Tx(ltt),"Axe",GetTriggerUnit())

call TriggerRegisterAnyUnitEventBJ(ltt,EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER)

call TriggerRegisterAnyUnitEventBJ(ltt,EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER)

call TriggerRegisterAnyUnitEventBJ(ltt,EVENT_PLAYER_UNIT_ISSUED_ORDER)

call TriggerAddCondition(ltt,Condition(function Berserker_Call_Buff))

call TriggerAddAction(ltt,function Berserker_Call_Aim)

call PolledWait(.2)

call CreateNUnitsAtLocFacingLocBJ(1,'e00E',GetOwningPlayer(GetTriggerUnit()),liD,liD)

call RemoveLocation(liD)

call UnitAddAbility(bj_lastCreatedUnit,'A0E1')

call SetUnitAbilityLevelSwapped('A0E1',bj_lastCreatedUnit,GetUnitAbilityLevel(lrs,'A0C7'))

call IssueTargetOrderById(bj_lastCreatedUnit,OrderId("innerfire"),GetTriggerUnit())

set liD=GetUnitLoc(lrs)

set lEw=GetUnitsInRangeOfLocMatching(550.,liD,Condition(function Berserker_Call_OrderFilter))

set udg_u_DTAX_temp=lrs

call ForGroupBJ(lEw,function Berserker_Call_Caster)

call RemoveLocation(liD)

call DestroyGroup(lEw)

call PolledWait(1+.5*GetUnitAbilityLevel(lrs,'A0C7'))

set lEw=GetUnitsInRectMatching(bj_mapInitialPlayableArea,Condition(function Berserker_Call_CreepVictim))

call ForGroupBJ(lEw,function Berserker_Call_CreepAttack)

call DestroyGroup(lEw)

call FastFlush(H2Tx(ltt))

call TriggerClearActions(ltt)

call DestroyTriggerEx(ltt)

endfunction

 

 

 

 

создает триггер из функций

 

function StartTrigger_Berserker_Call takes nothing returns nothing

set gg_trg_Berserker_Call=CreateTrigger()

call TriggerRegisterAnyUnitEventBJ(gg_trg_Berserker_Call,EVENT_PLAYER_UNIT_SPELL_EFFECT)

call TriggerAddCondition(gg_trg_Berserker_Call,Condition(function Trig_Berserker_Call_Conditions))

call TriggerAddAction(gg_trg_Berserker_Call,function Trig_Berserker_Call_Actions)

endfunction

 

 

function InitTrig_Berserker_Call takes nothing returns nothing

endfunction

 


Nite's Dungeon Arena beta 0.8 - экшн-арена, напоминает BLC. Ждите 1.0 релиза, вдруг скоро сделаю

Поделиться сообщением


Ссылка на сообщение

То-то я смотрю. Вроде и то, а вроде и хуйня какая-то. ты ведь в курсе, что в .54 (вроде) он переделке подвергался?

Это все фигня, до 1.24б (вроде) в варике была дыра и был в какой-то момент был найден баг, названный Return Bag (позволял возвращать любые объекты как число), на основе которого была создана система SCV - Super Custom Value, на ней держалось 90% карт, созданных в варике (в том числе дота). Но потом близы запатчили дыру, но взамен создали систему хэш-таблиц. Механика такая же, разве что пришлось код слегка видоизменить.

 

Если интересно - Return Bag функции:

 

hidden

function H2Ix takes handle pTarg returns integer

return pTarg

return 0

endfunction

 

function H2Tx takes handle pTarg returns string

return I2S(H2Ix(pTarg))

endfunction

 

function FastFlush takes string pTable returns nothing

call FlushStoredMission(udg_gc_DTAX_Core,pTable)

endfunction

 

function SetHandle takes string pTable,string pKey,handle pData returns nothing

call StoreInteger(udg_gc_DTAX_Core,pTable,pKey,H2Ix(pData))

endfunction

 

function SetInteger takes string pTable,string pKey,integer pData returns nothing

call StoreInteger(udg_gc_DTAX_Core,pTable,pKey,pData)

endfunction

 

function SetReal takes string pTable,string pKey,real pData returns nothing

call StoreReal(udg_gc_DTAX_Core,pTable,pKey,pData)

endfunction

 

function SetBoolean takes string pTable,string pKey,boolean pData returns nothing

call StoreBoolean(udg_gc_DTAX_Core,pTable,pKey,pData)

endfunction

 

function GetUnit takes string pTable,string pKey returns unit

return GetStoredInteger(udg_gc_DTAX_Core,pTable,pKey)

return null

endfunction

 

function GetPlayer takes string pTable,string pKey returns player

return GetStoredInteger(udg_gc_DTAX_Core,pTable,pKey)

return null

endfunction

 

function GetTimer takes string pTable,string pKey returns timer

return GetStoredInteger(udg_gc_DTAX_Core,pTable,pKey)

return null

endfunction

 

function GetTrigger takes string pTable,string pKey returns trigger

return GetStoredInteger(udg_gc_DTAX_Core,pTable,pKey)

return null

endfunction

 

function GetGroup takes string pTable,string pKey returns group

return GetStoredInteger(udg_gc_DTAX_Core,pTable,pKey)

return null

endfunction

 

function GetFX takes string pTable,string pKey returns effect

return GetStoredInteger(udg_gc_DTAX_Core,pTable,pKey)

return null

endfunction

 

function GetLocation takes string pTable,string pKey returns location

return GetStoredInteger(udg_gc_DTAX_Core,pTable,pKey)

return null

endfunction

 

function GetInteger takes string pTable,string pKey returns integer

return GetStoredInteger(udg_gc_DTAX_Core,pTable,pKey)

endfunction

 

function GetReal takes string pTable,string pKey returns real

return GetStoredReal(udg_gc_DTAX_Core,pTable,pKey)

endfunction

 

function GetBoolean takes string pTable,string pKey returns boolean

return GetStoredBoolean(udg_gc_DTAX_Core,pTable,pKey)

endfunction

 

 

Насчет ww - подразумевались те, которые используются. В случаях, когда вопрос был о устаревших и проч. - это указывалось.

Блин, это плохо, на пальцах считать долго D:

 

Вообще что я так всполошился? Тест хороший и интересный, но я не попал в топ 5 :avtorklif: и кровь просто кипит :avtorklif:


Nite's Dungeon Arena beta 0.8 - экшн-арена, напоминает BLC. Ждите 1.0 релиза, вдруг скоро сделаю

Поделиться сообщением


Ссылка на сообщение

Выложите кто-то тест или пришлите в пм....Интересно ведь...(Не успел зарегиться) :avtorklif:


Nitinur in vetitum semper, cupimusque negata

--------------------------------------------

Dream

Send me a sign

Turn back the сlock

Give me some time

I need to break out

And make a new name

Let's open our eyes

To the brand new day

It's a brand new day

-------------------------------------------

Поделиться сообщением


Ссылка на сообщение

Какой ещё нахуй драколич :avtorklif: :avtorklif:


pidorasy.gifpidorasy.gifpidorasy.gif

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...