5

» WarCraft 3 / "Как отловить пассивную способность"

ну или база данных по атаке а там уже сравниваешь если наносимый урон больше чем положенно и у этого юнита есть крита значит он сработал
5

» WarCraft 3 / Как отследить баф (GUI)

Каждую секунду пикаешь юнитов по всей карте,если есть бафф то дать способность если нету баффа и есть способность (крита) то удалить способность
5

» WarCraft 3 / Цвет фиолетовой молнии.

создаешь молнию,и там же есть изменить цвет молнии и прозрачность там даже есть проги где ты можешь подобрать цвет
5

» WarCraft 3 / Атака нескольких целей одновременно

это способность ракеты у альянса способности войска
там вроде даже можно отследить какие именно цели получили урон,при событии юнит получает урон.
5

» WarCraft 3 / Как сделать вампирик из л2?

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

» WarCraft 3 / Как сделать вампирик из л2?

вообще сделай это заклинание триггерным и наноси урон затем добавляй хп юниту от которого идет урон
ну или система урона и тогда будешь знать от руки или от магии урон
5

» WarCraft 3 / Дистанция

собыиие:Юнит атакован
условия:Атакущий имеет способность или тип атакующего равно твой юнит и расстояние между атакованный и атакующий меньше или равно 150
действия: отдать приказ без цели стор
5

» WarCraft 3 / Удаление массива точек

или еще проще это
local integer i=0
loop
exitwhen l[i]==null
call RemoveLocation(l[i])
set i=i+1
endloop
5

» WarCraft 3 / Почему резко перестали работать все триггеры на карте?

Возможно что в каком то триггере не объявил глобальную переменную. Т.е. group g, когда правильно будет group g=null or group g=CreateGroup() если же real or integer то =0
P.S.Сам с этим не раз сталкивался
5

» WarCraft 3 / Пехотинец и магическая защита

quq_CCCP:
Чем не угодил Веер ножей смотрящей в ночь? Не сбивет приказ идти куда либо, кастуется мгновенно, но сбивает чаннелинги.
Похожим эффектом обладает Рев друидов медведей и Леденящий крик разрушителя.
А так абилок не сбивающих никакие приказы очень мало, безумия, стремительность, божественный щит, жар преисподней и остальные абилки щиты которые включаются и выключаются, так же скилл сфинксов 'Aave' но это морф, поэтому не очень подходит для основы в качестве кнопки.
До этого в качестве 3 кнопки использовал Божественный щит. Просто когда тебя атакуют враги, а ты стоишь и нажимаешь без конца Божественный щит, то враги не могу тебя атаковать. В итоге со стороны смотрится, как будто они собираются сделать ласт хит))
Ладно всем спасибо, пока что буду юзать Магический щит, просто покрою бафф черной иконкой.
5

» WarCraft 3 / Пехотинец и магическая защита

Extremator:
. . . вместо безумия/виндволка/жара преисподни/дефенда/маг.дефенда/дивейва/мана-щилда ты можешь использовать любой другой скилл с тем же эффектом...
например активки свитков исцеления.... маны... ускорения... защиты...
клик - и они юзаются, даже лучше чем канала, т.к. тот заставляет героя остановиться (нарочно)
А эти разве нет?
5

» WarCraft 3 / Пехотинец и магическая защита

Extremator:
у инвока каст тайм 0.00 (а сейчас уже сделали 0.01)
там любой скилл будет применяться мгновенно
зачем тогда мучиться с поиском абилок, работающих мгновенно?
по факту самого вопроса - либо триггерно снять таг, если получится... либо использовать другой скилл
Даже если каст тайм 0.01, один хер там используются способности такого типа (сферы)
5

» WarCraft 3 / Способность "Иллюзии" - (Мастер Клинка)

quq_CCCP:
Ну у мастера клинка способность то посложнее...
Вот пример:
Для начала нам нужно создать иллюзии героя, а потом скрыть всех их, так же сделав визуальный эффект (если что то зеленые тени, это снаряды).
Так же как и у Лансера сделано в доте. Просто вот вопрос почему так?)
Ладно, придется все таки делать эту способность триггерно)
5

» WarCraft 3 / Как бороться с утечкой Handle при волнах

"если скопировать юнита в редакторе, он будет иметь одинаков handle"
Серьезно?
5

» WarCraft 3 / Способности иллюзии, анимация иллюзии

IsUnitIllusion
значит событие юнит входит в игровую зону карты или как там на гуи
входящий юнит == иллюзия
способности добавить не получится, разве что пассивные
если хочешь создавать иллюзии использующие способности, то придется тебе создавать их триггерно
Т.е. юнит применяет способность
способность == иллюзия
действия
создать юнит по типу приминяющего юнита, покрасить последнего юнита и добавлять способности/предметы как у кастера, по идее долгая история, но бд в помощь
5

» WarCraft 3 / Триггеры с музыкой

вроде и на гуи можно, заносишь всю музыку которая тебе нужна в массив, потом рандом число выбираешь и производишь
Пример:
Sound[1]=звук №1
Sound[2]=Звук №2
Проиграть звук Sound[RandomInt[1,2]]
5

» WarCraft 3 / Плавное увеличение высоты юнита

да нет с этим проблем как бы нет, просто хотел узнать как правильно устанавливать высоту
Melissa:
Хочу сделать более универсальной
Что бы это значило? Ловчий применяется и на наземных и на воздушных и даже на невосприимчивых к магии
Допустим, урон наноситься в то время когда тот в сетке, после спадания сетки нужно чтобы юнит был замедлен некоторое время и прочие штуки
5

» WarCraft 3 / Плавное увеличение высоты юнита

Mrachny:
Вопрос, зачем ты делаешь ловчий триггерно?
Хочу сделать более универсальной
5

» WarCraft 3 / Замедление с малым периодом

Я бы посоветовал как сказали вышел, т.е. использовать замедление торнадо. Чем ближе юнит к центру тем выше уровень замедления. Задержка баффа тоже исправляется. Сперва удаляем способность замедления (ауру), затем удаляем бафф у этого юнита, и получается бафф будет исчезать сразу после завершения таймера а не висеть еще пару секунд.
5

» WarCraft 3 / Наработка луча

quq_CCCP:
Там луч основан на кастом молнии (точнее на эффекте молннии под названием "mana drain"), созданную кодом молнию можно красить в любой цвет и масштабировать, ну остальное думаю и так понятно.
Там вроде даже несколько молний создаются, с этим разобрались, вопрос будет в следующем :)
Как это реализовано, ведь идет пик юнитов вдоль этого луча, но не думаю что сделано через цикл создающий группы и перебор юнитов, накладно для железа.
В общем вот тебе скрипт, достал из доты, разбирайся
Script
function NKA takes nothing returns boolean
local trigger t=GetTriggeringTrigger()
local integer h=GetHandleId(t)
local integer c=(LoadInteger(HY,(h),(34)))
local unit IGO=(LoadUnitHandle(HY,(h),(2)))
local real LLR=GetUnitFacing(IGO)
local real NLA=LLR*bj_DEGTORAD
local location NMA=GetUnitLoc(IGO)
local real T4E=GetLocationZ(NMA)
local location NPA=Location(GetUnitX(IGO)+DME*Cos(NLA),GetUnitY(IGO)+DME*Sin(NLA))
local real NQA=GetLocationZ(NPA)
local lightning l1=(LoadLightningHandle(HY,(h),(676)))
local lightning l2=(LoadLightningHandle(HY,(h),(677)))
local lightning l3=(LoadLightningHandle(HY,(h),(678)))
local lightning l4=(LoadLightningHandle(HY,(h),(679)))
local lightning l5=(LoadLightningHandle(HY,(h),(680)))
local real NSA=1
local real x
local real y
local real r1
local real NTA
local real NUA
local real NWA
local real NYA
local real NZA
local real N_A
local real N0A
local real N1A
local real N2A
local real N3A
local real N4A
local real N5A
local real N6A
local real N7A
local real N8A
local real N9A
local real BVA
local real BEA
local real BXA
local real BOA
local real BRA
local real BIA
local real BAA
local real BNA
local real BBA
local real BCA
local real BDA
local real BFA
local real BGA
local real BHA
local group g
local real BJA
local real BKA
local integer L0E
local real BLA
local real BMA
local real BPA
local boolean MIE=false
local boolean MAE=false
local unit Q9E=(LoadUnitHandle(HY,(h),(17)))
local unit UIE=null
local unit R3X=null
local real BQA
local real BSA
local real BTA
local real BUA=(LoadReal(HY,(h),(688)))
local boolean QMX=(LoadBoolean(HY,(h),(689)))
local boolean QTX=(LoadBoolean(HY,(h),(672)))
local real BWA
local ubersplat YEE
local real loc_real49=(LoadReal(HY,(h),(23)))
local real loc_real50=(LoadReal(HY,(h),(24)))
local real loc_real51
local real loc_real52
local real BYA
local real BZA=5
if GetUnitCurrentOrder(IGO)==$D0021 then
call DisableTrigger(t)
call SBE(IGO)
call EnableTrigger(t)
endif
call RemoveLocation(NMA)
call RemoveLocation(NPA)
if IsUnitPaused(IGO)==false and(GetTriggerEventId()==EVENT_UNIT_ISSUED_POINT_ORDER or GetTriggerEventId()==EVENT_UNIT_ISSUED_TARGET_ORDER)then
set x=GetUnitX(IGO)
set y=GetUnitY(IGO)
if GetIssuedOrderId()!=$D020A and GetIssuedOrderId()!=$D00D9 and GetIssuedOrderId()!=$D0278 then
call DisableTrigger(t)
call SBE(IGO)
call EnableTrigger(t)
endif
if GetIssuedOrderId()==$D0003 then
if GetTriggerEventId()==EVENT_UNIT_ISSUED_TARGET_ORDER then
set BJA=GetUnitX(GetOrderTargetUnit())
set BKA=GetUnitY(GetOrderTargetUnit())
else
set BJA=GetOrderPointX()
set BKA=GetOrderPointY()
endif
set BLA=TSE(BJA,BKA,x,y)
if BLA<0 then
set BLA=BLA+360
endif
set BPA=LLR-BLA
if BPA<0 then
set BPA=BPA+360
endif
if BPA<$B4 then
set MIE=true
set BMA=LLR+6
else
set MAE=true
set BMA=LLR-6
endif
set BUA=TSE(BJA,BKA,x,y)+$B4
call SaveReal(HY,(h),(688),((BUA)*1.))
endif
elseif GetTriggerEventId()==EVENT_UNIT_SPELL_EFFECT or GetTriggerEventId()==EVENT_WIDGET_DEATH or(LoadInteger(HY,(GetHandleId(IGO)),(704)))==-1 or c>=6./.02 or YSE(IGO)or P2E(IGO)then
if GetTriggerEventId()!=EVENT_UNIT_SPELL_EFFECT or(GetTriggerEventId()==EVENT_UNIT_SPELL_EFFECT and(GetSpellAbilityId()=='A1Z3' or GetSpellAbilityId()=='A1RK' or GetSpellAbilityId()=='A315' or GetSpellAbilityId()=='A27H'))then
call SaveInteger(HY,(GetHandleId((IGO))),((4312)),(2))
call Y5E(IGO)
call SetUnitPathing(IGO,true)
call RemoveUnit(LoadUnitHandle(HY,h,0))
call FlushChildHashtable(HY,(h))
call MWE(t)
call UnitRemoveAbility(IGO,'A205')
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A1Z3',false)
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A205',false)
if(LoadInteger(HY,(GetHandleId(IGO)),(704)))==0 or(LoadInteger(HY,(GetHandleId(IGO)),(704)))=='A1YY' then
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A1YY',true)
endif
call DestroyLightning(l1)
call DestroyLightning(l2)
call DestroyLightning(l3)
call DestroyLightning(l4)
call DestroyLightning(l5)
call StopSound(RQ,false,true)
endif
elseif GetTriggerEventId()==EVENT_UNIT_ISSUED_ORDER then
if GetIssuedOrderId()==852177then
set QMX=true
endif
if GetIssuedOrderId()==852178then
set QMX=false
endif
call SaveBoolean(HY,(h),(689),(QMX))
else
set BLA=LLR-BUA
if BLA<-$B4 then
set BLA=BLA+360
elseif BLA>$B4 then
set BLA=BLA-360
endif
set BWA=1
if c<35 and QTX then
set BWA=7
endif
if BLA<(-1*BWA)then
set LLR=LLR+BWA
elseif BLA>BWA then
set LLR=LLR-BWA
else
set QTX=false
call SaveBoolean(HY,(h),(672),(QTX))
set LLR=BUA
endif
if((LoadInteger(HY,(GetHandleId((IGO))),((4301))))==1)==false then
call SetUnitFacing(IGO,LLR)
endif
set NLA=LLR*bj_DEGTORAD
set c=c+1
call SaveInteger(HY,(h),(34),(c))
set r1=DME
set x=GetUnitX(IGO)+50*Cos(NLA)
set y=GetUnitY(IGO)+50*Sin(NLA)
if QMX and YPE(IGO)==false and YSE(IGO)==false then
if((LoadInteger(HY,(GetHandleId((IGO))),((4331))))==1) then
set BZA=BZA*2
endif
set BTA=NLA
set BQA=SFE(GetUnitX(IGO)+BZA*Cos(BTA))
set BSA=SJE(GetUnitY(IGO)+BZA*Sin(BTA))
call UEE(BQA,BSA,$C8)
call SetUnitX(IGO,BQA)
call SetUnitY(IGO,BSA)
endif
call SetUnitState(IGO,UNIT_STATE_LIFE,GetUnitState(IGO,UNIT_STATE_LIFE)-GetUnitState(IGO,UNIT_STATE_LIFE)*.06*.02)
call UEE(x,y,$C8)
if ModuloInteger(c,$A)==0 then
set DWE=MSE()
set J1=IGO
set L0E=0
loop
exitwhen L0E*50>DME
set BJA=x+L0E*50*Cos(NLA)
set BKA=y+L0E*50*Sin(NLA)
set g=MSE()
call GroupEnumUnitsInRange(g,BJA,BKA,$9B,Condition(function ZBE))
call GroupAddGroup(g,DWE)
call GroupEnumUnitsInRange(g,BJA,BKA,$9B,Condition(function Z_E))
call GroupAddGroup(g,DWE)
call MQE(g)
if ModuloInteger(L0E,3)==0 then
call UDE(GetOwningPlayer(IGO),2,BJA,BKA,$E1)
endif
set L0E=L0E+1
endloop
set DUE=IGO
set DTE=GetUnitAbilityLevel(IGO,'A1YY')
set BYA=(I2R(c)/50.)/6
set DYE=(5*DTE+$A)+(5*DTE+$A)*BYA
set DZE=(DTE+BYA*(DTE))/'d'
call GroupRemoveUnit(DWE,IGO)
call ForGroup(DWE,function NJA)
call MQE(DWE)
set g=null
set DWE=null
endif
if ULE(IGO)==false then
if Q9E!=null then
set r1=S6E(IGO,Q9E)
endif
set NTA=x
set NUA=y
set NWA=T4E+$C8
set NYA=NTA+r1*Cos(NLA)
set NZA=NUA+r1*Sin(NLA)
set N_A=NQA
set N0A=x+DPE*Cos((LLR-90)*bj_DEGTORAD)
set N1A=y+DQE*Cos((LLR-90)*bj_DEGTORAD)
set N2A=T4E+$C8
set N3A=N0A+r1*Cos(NLA)
set N4A=N1A+r1*Sin(NLA)
set N5A=NQA
set N6A=x+DPE*Cos((LLR+90)*bj_DEGTORAD)
set N7A=y+DQE*Cos((LLR+90)*bj_DEGTORAD)
set N8A=T4E+$C8
set N9A=N6A+r1*Cos(NLA)
set BVA=N7A+r1*Sin(NLA)
set BEA=NQA
set BXA=x
set BOA=y
set BRA=T4E+$C8+DSE
set BIA=BXA+r1*Cos(NLA)
set BAA=BOA+r1*Sin(NLA)
set BNA=NQA
set BBA=x
set BCA=y
set BDA=T4E+$C8-DSE
set BFA=BBA+r1*Cos(NLA)
set BGA=BCA+r1*Sin(NLA)
set BHA=NQA
if ModuloInteger(c,$A)==0 and r1==DME then
set BJA=GetUnitX(IGO)+(DME)*Cos(NLA)
set BKA=GetUnitY(IGO)+(DME)*Sin(NLA)
call DestroyEffect(AddSpecialEffect("war3mapImported\\FireRayTarget.mdx",BJA,BKA))
endif
if ModuloInteger(c,$A)==0 then
call SetSoundPosition(RQ,GetUnitX(IGO),GetUnitY(IGO),'d')
set BJA=GetUnitX(IGO)+(r1)*Cos(NLA)
set BKA=GetUnitY(IGO)+(r1)*Sin(NLA)
set YEE=CreateUbersplat(BJA,BKA,"SRAY",$FF,$FF,$FF,$FF,false,false)
call SetUbersplatRenderAlways(YEE,true)
call YXE(YEE,$A)
set YEE=null
endif
call MoveLightningEx(l1,false,NTA,NUA,NWA,NYA,NZA,N_A)
call MoveLightningEx(l2,false,N0A,N1A,N2A,N3A,N4A,N5A)
call MoveLightningEx(l3,false,N6A,N7A,N8A,N9A,BVA,BEA)
call MoveLightningEx(l4,false,BXA,BOA,BRA,BIA,BAA,BNA)
call MoveLightningEx(l5,false,BBA,BCA,BDA,BFA,BGA,BHA)
call SetLightningColor(l1,1.,1.,1.,NSA)
call SetLightningColor(l2,1.,1.,1.,NSA)
call SetLightningColor(l3,1.,1.,1.,NSA)
call SetLightningColor(l4,1.,1.,1.,NSA)
call SetLightningColor(l5,1.,1.,1.,NSA)
endif
endif
set t=null
set IGO=null
set l1=null
set l2=null
set l3=null
set l4=null
set l5=null
set NMA=null
set NPA=null
return false
endfunction
function B_A takes nothing returns nothing
local trigger t=CreateTrigger()
local integer h=GetHandleId(t)
local unit IGO=GetTriggerUnit()
local real x=GetUnitX(IGO)
local real y=GetUnitY(IGO)
local real OLX=TSE(x,y,GetSpellTargetX(),GetSpellTargetY())*bj_DEGTORAD
local real dx=SFE(x+DME*Cos(OLX))
local real dy=SJE(y+DME*Sin(OLX))
local lightning l1=AddLightning("SRAY",false,x,y,dx,dy)
local lightning l2=AddLightning("SRAY",false,x,y,dx,dy)
local lightning l3=AddLightning("SRAY",false,x,y,dx,dy)
local lightning l4=AddLightning("SRAY",false,x,y,dx,dy)
local lightning l5=AddLightning("SRAY",false,x,y,dx,dy)
local unit V0X
if GetUnitAbilityLevel(IGO,'A14K')>0 then
set V0X=CreateUnit(GetOwningPlayer(IGO),'e00E',x,y,0)
call KZE(V0X,'A14K')
call SaveUnitHandle(HY,h,0,V0X)
set V0X=null
endif
call SetUnitFacing(IGO,OLX*bj_RADTODEG)
call StartSound(RQ)
call SetSoundPosition(RQ,x,y,'d')
call TriggerRegisterTimerEvent(t,.02,true)
call TriggerRegisterDeathEvent(t,IGO)
call TriggerRegisterUnitEvent(t,IGO,EVENT_UNIT_ISSUED_TARGET_ORDER)
call TriggerRegisterUnitEvent(t,IGO,EVENT_UNIT_ISSUED_POINT_ORDER)
call TriggerRegisterUnitEvent(t,IGO,EVENT_UNIT_ISSUED_ORDER)
call TriggerRegisterUnitEvent(t,IGO,EVENT_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t,Condition(function NKA))
call SaveUnitHandle(HY,(h),(2),(IGO))
call SaveReal(HY,(h),($D),((OLX)*1.))
call SaveReal(HY,(h),(688),((OLX*bj_RADTODEG)*1.))
call SaveLightningHandle(HY,(h),(676),(l1))
call SaveLightningHandle(HY,(h),(677),(l2))
call SaveLightningHandle(HY,(h),(678),(l3))
call SaveLightningHandle(HY,(h),(679),(l4))
call SaveLightningHandle(HY,(h),(680),(l5))
call SaveBoolean(HY,(h),(689),(false))
call SaveBoolean(HY,(h),(672),(true))
call SaveReal(HY,(h),(688),((OLX*bj_RADTODEG)*1.))
call SaveReal(HY,(h),(23),((x)*1.))
call SaveReal(HY,(h),(24),((y)*1.))
call Y4E(IGO)
call SaveInteger(HY,(GetHandleId((IGO))),((4312)),(1))
call SetUnitPathing(IGO,false)
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A1Z3',true)
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A205',true)
call SetPlayerAbilityAvailable(GetOwningPlayer(IGO),'A1YY',false)
call KZE(IGO,'A1Z3')
call KZE(IGO,'A205')
call TriggerEvaluate(t)
set t=null
set IGO=null
set IGO=null
set l1=null
set l2=null
set l3=null
set l4=null
set l5=null
endfunction
для удобства копирни в редактор триггеров, так проще читается
5

» WarCraft 3 / wait утечна?

На счет утечна или нет не в курсе. Но вот то что багнутая - да. Если игра будет стоять на паузе - то эта функция продолжит отсчет времени. В то время как таймер, как положено тоже встанет на паузу.