Вы находитесь на сайте модмейкеров.
Четверг, 21.11.2024, 20:27
Участники · Правила форума · ПОИСК!
  • Страница 1 из 1
  • 1
Создание Jass способносте [Статья]
GlaberДата: Понедельник, 30.01.2012, 22:25 | Сообщение # 1



Сообщений: 1057

Показательно разберу создание спелла.
Сам спелл в прикреплении.
Создаем тригер с событием и условием.
Событие-Приводит способность
Условие-Способность=такаята(в моем случае пронзающая смерть)
Конвертируем:
Правка->Конвертировать в текст
Получаем вот такой код
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 и вы с легкостью поймете что к чему.
Прикрепления: 3370831.w3x (26.4 Kb)




Сообщение отредактировал F@lk - Понедельник, 30.01.2012, 22:26
--
  • Страница 1 из 1
  • 1
Поиск:

W3 - Всё для картостроения. 2024-2010 |