Glaber | Дата: Понедельник, 30.01.2012, 22:25 | Сообщение # 1 |
| Показательно разберу создание спелла. Сам спелл в прикреплении. Создаем тригер с событием и условием. Событие-Приводит способность Условие-Способность=такаята(в моем случае пронзающая смерть) Конвертируем: Правка->Конвертировать в текст Получаем вот такой код Code function Trig_test_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'AUim' ) ) then return false endif return true endfunction
function Trig_test_Actions takes nothing returns nothing endfunction
//=========================================================================== function InitTrig_test takes nothing returns nothing set gg_trg_test = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_test, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_test, Condition( function Trig_test_Conditions ) ) call TriggerAddAction( gg_trg_test, function Trig_test_Actions ) endfunction ну для начала уберем из условие лишние функции. (условие самый верхний блок) Выйдет так Code function Trig_test_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'AUim' endfunction
function Trig_test_Actions takes nothing returns nothing endfunction
//=========================================================================== function InitTrig_test takes nothing returns nothing set gg_trg_test = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_test, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_test, Condition( function Trig_test_Conditions ) ) call TriggerAddAction( gg_trg_test, function Trig_test_Actions ) endfunction Далее создадим локальные переменные,о них можно будет прочитать в другой статье. Code local integer i=0 local unit u=GetTriggerUnit() local unit array d local real f=GetUnitFacing(u) local integer di=0 local integer r=50 local real n1=90 local real n2=180 local real n3=270 local real n4=0 local real x = GetWidgetX(u) + r * Cos(f * .017) local real y = GetWidgetY(u) + r * Sin(f * .017) local unit t=CreateUnit(GetOwningPlayer(u),'h000',x,y,0) local real x1 = GetWidgetX(t) + 50 * Cos(n1 * .017) local real y1 = GetWidgetY(t) + 50 * Sin(n1 * .017) local real x2 = GetWidgetX(t) + 50 * Cos(n2 * .017) local real y2 = GetWidgetY(t) + 50 * Sin(n2 * .017) local real x3 = GetWidgetX(t) + 50 * Cos(n3 * .017) local real y3 = GetWidgetY(t) + 50 * Sin(n3 * .017) local real x4 = GetWidgetX(t) + 50 * Cos(n4 * .017) local real y4 = GetWidgetY(t) + 50 * Sin(n4* .017) local real s1 = GetWidgetX(t) + 100 * Cos(n1 * .017) local real d1 = GetWidgetY(t) + 100 * Sin(n1 * .017) local real s2 = GetWidgetX(t) + 100 * Cos(n2 * .017) local real d2 = GetWidgetY(t) + 100 * Sin(n2 * .017) local real s3 = GetWidgetX(t) + 100 * Cos(n3 * .017) local real d3 = GetWidgetY(t) + 100 * Sin(n3 * .017) local real s4 = GetWidgetX(t) + 100 * Cos(n4 * .017) local real d4 = GetWidgetY(t) + 100 * Sin(n4 * .017) Это все что понадобится в способности. Далее создаем цикл где и будет все происходить(О циклах в другой статье) Code loop exitwhen i>5*GetUnitAbilityLevel(u,'A000') //Тут разные действия endloop И в этом цикле создаем действия,а точнее дамми юнитов,и заставляем их использовать спелл в нужную нам точку. А так же двигаем дамми-основу(дамми от которого создаются другии и точки в которые полетят дамми-спеллы) готовый цикл будет таким Code loop exitwhen i>5*GetUnitAbilityLevel(u,'A000') set di=di+1 set d[di]=CreateUnit(GetOwningPlayer(u),'h000',x1,y1,90) call SetUnitAbilityLevel(d[di],'A002',GetUnitAbilityLevel(u,'A000')) call IssuePointOrder(d[di],"shockwave",s1,d1) set di=di+1 set d[di]=CreateUnit(GetOwningPlayer(u),'h000',x2,y2,180) call SetUnitAbilityLevel(d[di],'A002',GetUnitAbilityLevel(u,'A000')) call IssuePointOrder(d[di],"shockwave",s2,d2) set di=di+1 set d[di]=CreateUnit(GetOwningPlayer(u),'h000',x3,y3,270) call SetUnitAbilityLevel(d[di],'A002',GetUnitAbilityLevel(u,'A000')) call IssuePointOrder(d[di],"shockwave",s3,d3) set di=di+1 set d[di]=CreateUnit(GetOwningPlayer(u),'h000',x4,y4,0) call SetUnitAbilityLevel(d[di],'A002',GetUnitAbilityLevel(u,'A000')) call IssuePointOrder(d[di],"shockwave",s4,d4) set r=r+75 set x = GetWidgetX(u) + r * Cos(f * .017) set y = GetWidgetY(u) + r * Sin(f * .017) call SetUnitPosition(t,x,y) set n1=n1+25 set n2=n2+25 set n3=n3+25 set n4=n4+25 set x1 = GetWidgetX(t) + 50 * Cos(n1 * .017) set y1 = GetWidgetY(t) + 50 * Sin(n1 * .017) set x2 = GetWidgetX(t) + 50 * Cos(n2 * .017) set y2 = GetWidgetY(t) + 50 * Sin(n2 * .017) set x3 = GetWidgetX(t) + 50 * Cos(n3 * .017) set y3 = GetWidgetY(t) + 50 * Sin(n3 * .017) set x4 = GetWidgetX(t) + 50 * Cos(n4 * .017) set y4 = GetWidgetY(t) + 50 * Sin(n4 * .017) set s1 = GetWidgetX(t) + 100 * Cos(n1 * .017) set d1 = GetWidgetY(t) + 100 * Sin(n1 * .017) set s2 = GetWidgetX(t) + 100 * Cos(n2 * .017) set d2 = GetWidgetY(t) + 100 * Sin(n2 * .017) set s3 = GetWidgetX(t) + 100 * Cos(n3 * .017) set d3 = GetWidgetY(t) + 100 * Sin(n3 * .017) set s4 = GetWidgetX(t) + 100 * Cos(n4 * .017) set d4 = GetWidgetY(t) + 100 * Sin(n4 * .017) call TriggerSleepAction(0.01) set i=i+1 endloop основу сделали,теперь сделаем цикл чтобы убить все утечки и обнулить переменные Code call TriggerSleepAction(1) loop exitwhen i==0 call RemoveUnit(d[di]) set d[di]=null set di=di-1 set i=i-1 endloop call RemoveUnit(t) set t=null set u=null
Весь код: Code function Trig_Ship_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A000' endfunction
function Trig_Ship_Actions takes nothing returns nothing local integer i=0 local unit u=GetTriggerUnit() local unit array d local real f=GetUnitFacing(u) local integer di=0 local integer r=50 local real n1=90 local real n2=180 local real n3=270 local real n4=0 local real x = GetWidgetX(u) + r * Cos(f * .017) local real y = GetWidgetY(u) + r * Sin(f * .017) local unit t=CreateUnit(GetOwningPlayer(u),'h000',x,y,0) local real x1 = GetWidgetX(t) + 50 * Cos(n1 * .017) local real y1 = GetWidgetY(t) + 50 * Sin(n1 * .017) local real x2 = GetWidgetX(t) + 50 * Cos(n2 * .017) local real y2 = GetWidgetY(t) + 50 * Sin(n2 * .017) local real x3 = GetWidgetX(t) + 50 * Cos(n3 * .017) local real y3 = GetWidgetY(t) + 50 * Sin(n3 * .017) local real x4 = GetWidgetX(t) + 50 * Cos(n4 * .017) local real y4 = GetWidgetY(t) + 50 * Sin(n4* .017) local real s1 = GetWidgetX(t) + 100 * Cos(n1 * .017) local real d1 = GetWidgetY(t) + 100 * Sin(n1 * .017) local real s2 = GetWidgetX(t) + 100 * Cos(n2 * .017) local real d2 = GetWidgetY(t) + 100 * Sin(n2 * .017) local real s3 = GetWidgetX(t) + 100 * Cos(n3 * .017) local real d3 = GetWidgetY(t) + 100 * Sin(n3 * .017) local real s4 = GetWidgetX(t) + 100 * Cos(n4 * .017) local real d4 = GetWidgetY(t) + 100 * Sin(n4 * .017) loop exitwhen i>5*GetUnitAbilityLevel(u,'A000') set di=di+1 set d[di]=CreateUnit(GetOwningPlayer(u),'h000',x1,y1,90) call SetUnitAbilityLevel(d[di],'A002',GetUnitAbilityLevel(u,'A000')) call IssuePointOrder(d[di],"shockwave",s1,d1) set di=di+1 set d[di]=CreateUnit(GetOwningPlayer(u),'h000',x2,y2,180) call SetUnitAbilityLevel(d[di],'A002',GetUnitAbilityLevel(u,'A000')) call IssuePointOrder(d[di],"shockwave",s2,d2) set di=di+1 set d[di]=CreateUnit(GetOwningPlayer(u),'h000',x3,y3,270) call SetUnitAbilityLevel(d[di],'A002',GetUnitAbilityLevel(u,'A000')) call IssuePointOrder(d[di],"shockwave",s3,d3) set di=di+1 set d[di]=CreateUnit(GetOwningPlayer(u),'h000',x4,y4,0) call SetUnitAbilityLevel(d[di],'A002',GetUnitAbilityLevel(u,'A000')) call IssuePointOrder(d[di],"shockwave",s4,d4) set r=r+75 set x = GetWidgetX(u) + r * Cos(f * .017) set y = GetWidgetY(u) + r * Sin(f * .017) call SetUnitPosition(t,x,y) set n1=n1+25 set n2=n2+25 set n3=n3+25 set n4=n4+25 set x1 = GetWidgetX(t) + 50 * Cos(n1 * .017) set y1 = GetWidgetY(t) + 50 * Sin(n1 * .017) set x2 = GetWidgetX(t) + 50 * Cos(n2 * .017) set y2 = GetWidgetY(t) + 50 * Sin(n2 * .017) set x3 = GetWidgetX(t) + 50 * Cos(n3 * .017) set y3 = GetWidgetY(t) + 50 * Sin(n3 * .017) set x4 = GetWidgetX(t) + 50 * Cos(n4 * .017) set y4 = GetWidgetY(t) + 50 * Sin(n4 * .017) set s1 = GetWidgetX(t) + 100 * Cos(n1 * .017) set d1 = GetWidgetY(t) + 100 * Sin(n1 * .017) set s2 = GetWidgetX(t) + 100 * Cos(n2 * .017) set d2 = GetWidgetY(t) + 100 * Sin(n2 * .017) set s3 = GetWidgetX(t) + 100 * Cos(n3 * .017) set d3 = GetWidgetY(t) + 100 * Sin(n3 * .017) set s4 = GetWidgetX(t) + 100 * Cos(n4 * .017) set d4 = GetWidgetY(t) + 100 * Sin(n4 * .017) call TriggerSleepAction(0.01) set i=i+1 endloop call TriggerSleepAction(1) loop exitwhen i==0 call RemoveUnit(d[di]) set d[di]=null set di=di-1 set i=i-1 endloop call RemoveUnit(t) set t=null set u=null endfunction
//=========================================================================== function InitTrig_Ship takes nothing returns nothing set gg_trg_Ship = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Ship, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Ship, Condition( function Trig_Ship_Conditions ) ) call TriggerAddAction( gg_trg_Ship, function Trig_Ship_Actions ) endfunction
П.с это предстатья,пока ничего не поймете,в течении некоторого времени напишу основу по jass и вы с легкостью поймете что к чему.
Сообщение отредактировал F@lk - Понедельник, 30.01.2012, 22:26 |
|
| |