Сейчас 00:58:13 Воскресенье, 5 мая, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Триггер на GUI работает, на Jass уже не работает
Триггер на GUI работает, на Jass уже не работает
Fox3Дата: Четверг, 24 Февраля 2011, 03:06:02 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 247
Награды: 0
Репутация: 10
Блокировки:
Почему вот этот триггер работает:

А вот этот уже не хочет:

Работать, конечно, он работает, но цикл, походу, срабатывает один раз или градусы вообще учитываться не хотят.
Ошибка явно во 2 функции, но я что-то не пойму какая. Помогите плиз понять

Сообщение отредактировал Fox3 - Четверг, 24 Февраля 2011, 04:01:50
 

Vova5009Дата: Четверг, 24 Февраля 2011, 09:51:16 | Сообщение # 2
8 уровень
Группа: Проверенные
Сообщений: 577
Награды: 0
Репутация: 125
Блокировки:
Fox3,
Code

function Trig_spell_jass_Conditions takes nothing returns boolean  
        if ( not ( GetSpellAbilityId() == 'AHds' ) ) then  
           return false  
        endif  
        return true  
endfunction  

function Trig_spell_jass_Actions takes nothing returns nothing  
        local location p1 = GetUnitLoc(GetSpellAbilityUnit())   
        local location p  
        local integer i = 1
        local timer t = CreateTimer()  
        loop  
           exitwhen i > 10  
           set p = PolarProjectionBJ( p1, 200.00, ( 18.00 * I2R(i) ))
           call TimerStart(t,2.00,false,null)   
           call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl",GetLocationX(p),GetLocationY(p)))
           call RemoveLocation(p)   
           set i = i + 1  
        endloop  
        call RemoveLocation(p1)  
        set t = null  
endfunction  

//===========================================================================  
function InitTrig_spell_jass takes nothing returns nothing  
        set gg_trg_spell_jass = CreateTrigger( )  
        call TriggerRegisterAnyUnitEventBJ( gg_trg_spell_jass, EVENT_PLAYER_UNIT_SPELL_EFFECT )  
        call TriggerAddCondition( gg_trg_spell_jass, Condition( function Trig_spell_jass_Conditions ) )  
        call TriggerAddAction( gg_trg_spell_jass, function Trig_spell_jass_Actions )  
endfunction
 

Fox3Дата: Четверг, 24 Февраля 2011, 11:51:53 | Сообщение # 3
6 уровень
Группа: Проверенные
Сообщений: 247
Награды: 0
Репутация: 10
Блокировки:
Большое спасибо, теперь разобрался.
 

lawsonДата: Четверг, 24 Февраля 2011, 14:04:58 | Сообщение # 4
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Vova5009)
call TimerStart(t,2.00,false,null)   

Можешь обяснить как это работает? Тоесть вызываеться триггер где создавался этот таймер?


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

SirNikolasДата: Четверг, 24 Февраля 2011, 14:10:34 | Сообщение # 5
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Запускается таймер, который истечет через 2. секунды.

 

lawsonДата: Четверг, 24 Февраля 2011, 14:16:47 | Сообщение # 6
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Да это я понял но там нет функции которую он делает по истечению времени.

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

Vova5009Дата: Четверг, 24 Февраля 2011, 14:48:01 | Сообщение # 7
8 уровень
Группа: Проверенные
Сообщений: 577
Награды: 0
Репутация: 125
Блокировки:
lawson, Может Fox3 ее создаст. В его коде не было, ну а я просто упростил код и исправил ошибку.
 

lawsonДата: Четверг, 24 Февраля 2011, 14:56:31 | Сообщение # 8
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Vova5009)
ну а я просто упростил код

Фуу я уже испугался что я чета не знаю про таймеры.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

FaionДата: Четверг, 24 Февраля 2011, 15:16:42 | Сообщение # 9
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Code
function jass_filter takes nothing returns boolean    
          return GetSpellAbilityId() == 'AHds'
endfunction    

function Trig_spell_jass_Actions takes nothing returns nothing    
          local real x = GetWidgetX(GetSpellAbilityUnit())
          local real y = GetWidgetY(GetSpellAbilityUnit())
          local integer i = 1
          local timer t = CreateTimer()    
          loop    
             exitwhen i > 10    
             call TimerStart(t,2.00,false,null)     
             call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl",x + 200 * Cos((18.00 * I2R(i)) * .0174532),y + 200 * Sin((18.00 * I2R(i)) * .0174532)))
             set i = i + 1    
          endloop    
          set t = null    
endfunction    

//===========================================================================    
function InitTrig_spell_jass takes nothing returns nothing    
          local trigger trig = CreateTrigger( )    
          local integer index
          set index = 0
          loop
              call TriggerRegisterPlayerUnitEvent(trig, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, function jass_filter)
              set index = index + 1
              exitwhen index == 11
          endloop
          trig = null
endfunction

По быстрому тут набросал оптимиз. Где то раз в 10 быстрее должно работать=)


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL


Сообщение отредактировал Faion - Четверг, 24 Февраля 2011, 15:16:52
 

SirNikolasДата: Пятница, 25 Февраля 2011, 15:15:39 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Faion)
Code
call TriggerRegisterPlayerUnitEvent(trig, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, function jass_filter)
Condition(function jass_filter). Но это будет вызываться 12 раз, так что, по-моему, лучше сделать TriggerAddCondition. А еще ты забыл добавить в триггер действия. =)
Quote (Faion)
Code
set index = index + 1
exitwhen index == 11
Событие не добавится для 11 игрока.
Quote (Faion)
Где-то раз в 10 быстрее должно работать =)
А как ты это считаешь?


 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Триггер на GUI работает, на Jass уже не работает
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz