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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Протестил call TriggerRegisterDeathEvent() на предметах. (Называется)
Протестил call TriggerRegisterDeathEvent() на предметах.
ВолчачкаДата: Четверг, 16 Апреля 2015, 17:26:52 | Сообщение # 1
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Я протестировал на предметах, но результат меня дико огорчил.
Код
native TriggerRegisterDeathEvent takes trigger whichTrigger, widget whichWidget returns event

Это функция вызвалась 4 раза, когда предмет сдыхал.
Теперь к делу: я использовал сравнение виджета с предметом. Путём получения объекта такого предмет через GetTriggerWidget(), оно работает. Но одно но!!!!!!!!!
Стоит одному предмету сдохнуть, сразу срабатывает другое.. Это как понимать?
Оказывается для этого События смерти - Удаление Предмета тоже считается как смерть.

Зачем я делаю такое, что убирать утечки от некоторых предметов типа книг, которые не убираются по донной воле метелей.
Для чего я это сделал такой тест? - ну конечно ради интереса :D
Код

//?Library NoItemLeaks
scope NoItemLeaks initializer InitFunc
         globals
             //Items Zone
             private constant integer ItemStock_A = 0
             private constant integer ItemStock_Max_A = 4045
             private constant integer ItemStock_B = 4045
             private constant integer ItemStock_Max_B = 8090
             private integer ItemStock_I = 0
             private item array ItemStock
             private item array ItemTempStock
             //Triggers Zone
             trigger TriggerZone = null
             private triggeraction TriggerAct = null
             private timer TriggerZoneTimer = null
         endglobals
          
         private function RefreshItem takes nothing returns nothing
             local integer i = ItemStock_A
             local integer max = ItemStock_Max_A
             local integer stock = 0
             if ItemStock_I != max then
                 set max = ItemStock_I
             endif
             loop  
             exitwhen i == max
              if ItemStock[i] != null then
                 set ItemTempStock[stock] = ItemStock[i]
                 set stock = stock + 1
              endif
              set i = i + 1
             endloop
             set ItemStock_I = stock
             loop  
             exitwhen i == ItemStock_I
              if ItemStock[i] != null then
                 set ItemStock[i] = ItemTempStock[i]
                 set stock = stock + 1
              endif
              set i = i + 1
             endloop
         endfunction
          
         function RegisterItem takes item whichItem returns nothing
             if ItemStock_I <= ItemStock_Max_B then
                 set ItemStock[ItemStock_I] = whichItem
                 set ItemStock_I = ItemStock_I + 1
             else
                 call RemoveItem(whichItem)
                 call BJDebugMsg("I don't registly greather items")
             endif
         endfunction
          
         private function SeekItem takes widget whichItem returns item
             local integer i = ItemStock_A
             local integer max = ItemStock_Max_A
             local boolean b = false
             if ItemStock_I < max then
                 set max = ItemStock_I
             endif
             loop
             exitwhen i == ItemStock_Max_A or b
                 if whichItem == ItemStock[i] then
                     set b = true
                 endif
                 set i = i + 1
             endloop
             if not b and ItemStock_I >= ItemStock_B then
                 set i = ItemStock_B
                 loop
                 exitwhen i == ItemStock_I or b
                 if whichItem == ItemStock[i] then
                     set b = true
                 endif
                 set i = i + 1
             endloop
             endif
             if not b then
                 return null
             endif
             return ItemStock[i]
         endfunction
          
         private function ItemDeathEvent takes nothing returns nothing
             local item t = SeekItem(GetTriggerWidget())
             call BJDebugMsg("What?")
             if t != null then
                 call RemoveItem(t)
             endif
             call RefreshItem()
             set t = null
         endfunction
          
         private function callduos takes nothing returns nothing
             local integer i = ItemStock_A
             local integer max = ItemStock_Max_A
             call TriggerRemoveAction(TriggerZone,TriggerAct)
             call DestroyTrigger(TriggerZone)
             set TriggerZone = CreateTrigger()
             set TriggerAct = TriggerAddAction(TriggerZone, function ItemDeathEvent)
             if ItemStock_I != max then
                 set max = ItemStock_I
             endif
             loop  
             exitwhen i == max
              if ItemStock[i] != null then
                 call TriggerRegisterDeathEvent( TriggerZone, ItemStock[i] )  
              endif
              set i = i + 1
             endloop
         endfunction
          
         private function InitFunc takes nothing returns nothing
             set TriggerZoneTimer = CreateTimer()
             set TriggerZone = CreateTrigger()
             set TriggerAct = TriggerAddAction(TriggerZone, function ItemDeathEvent)
             call TimerStart( TriggerZoneTimer, 300., true, function callduos )
         endfunction
endscope

function RegisterItemDeathEvent takes item whichItem returns nothing
         call RegisterItem(whichItem)
         call TriggerRegisterDeathEvent( TriggerZone, whichItem )  
endfunction


Код

scope Test initializer Vexbugallant  
     private function Vexbugallant takes nothing returns nothing
         call RegisterItemDeathEvent( gg_item_tint_0003 )
         call RegisterItemDeathEvent( gg_item_manh_0004 )
         call RegisterItemDeathEvent( gg_item_tint_0002 )
         call RegisterItemDeathEvent( gg_item_manh_0005 )
     endfunction
endscope
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Протестил call TriggerRegisterDeathEvent() на предметах. (Называется)
  • Страница 1 из 1
  • 1
Поиск:

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