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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Ошибка с MUI-отловом эффекта
[DUОS]Дата: Среда, 17 Марта 2010, 18:28:59 | Сообщение # 1
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Снова здравствуйте. У меня теперь другая проблема.
Я несколькими юнитами сразу кастую спелл, код которого ниже.
Результат проверки хендлов на скрине.
В чём может быть проблема и как её исправить?

Code
function Trig_SandStorm_Conditions takes nothing returns boolean
     return GetSpellAbilityId() == 'A000'
endfunction

function SandStormEffectRemove takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local timer t2 = LoadTimerHandle(udg_SandHeroHashtable,GetHandleId(t),3)
     local effect e = LoadEffectHandle(udg_SandHeroHashtable,GetHandleId(t),1)
     local unit caster = LoadUnitHandle(udg_SandHeroHashtable,GetHandleId(t),2)
     call BJDebugMsg("Unit Name: " + GetUnitName(caster))
     call BJDebugMsg("Unit Owner ID: " + I2S(GetPlayerId(GetOwningPlayer(caster))))
     call BJDebugMsg("Expired Timer Handle: " + I2S(GetHandleId(t)))
     call UnitRemoveAbility(caster,'A001')
     call UnitAddAbility(caster,'A000')
     call DestroyEffect(e)
     call PauseTimer(t2)
     call DestroyTimer(t)
     call DestroyTimer(t2)
     set e = null
     set t = null
endfunction

function SandStormGroupFilter takes nothing returns boolean
     local unit u = LoadUnitHandle(udg_SandHeroHashtable,GetHandleId(GetExpiredTimer()),2)
     local unit e = GetFilterUnit()
     if IsUnitEnemy(e,GetOwningPlayer(u)) then
         call UnitDamageTarget(u,e,50,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
     endif
     set u = null
     set e = null
     return false
endfunction

function SandStormSpellRepeat takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local unit caster = LoadUnitHandle(udg_SandHeroHashtable,GetHandleId(t),2)
     local group g = CreateGroup()
     call GroupEnumUnitsInRange(g,GetUnitX(caster),GetUnitY(caster),200,Filter(function SandStormGroupFilter))
     set g = null
     set t = null
     set caster = null
endfunction

function Trig_SandStorm_Actions takes nothing returns nothing
     local unit caster = GetTriggerUnit()
     local effect e = AddSpecialEffectTarget("war3mapImported\\SandTornado.mdx",caster,"origin")
     local timer st = CreateTimer() // Spell Timer.
     local timer et = CreateTimer() // Effect Timer.
     set udg_SandHeroHashtable = InitHashtable()
     call SaveEffectHandle(udg_SandHeroHashtable,GetHandleId(et),1,e)
     call SaveUnitHandle(udg_SandHeroHashtable,GetHandleId(st),2,caster)
     call SaveUnitHandle(udg_SandHeroHashtable,GetHandleId(et),2,caster)
     call TimerStart(st,1,true,function SandStormSpellRepeat)
     call TimerStart(et,udg_SandStormDur[GetUnitAbilityLevel(caster,'A000')],false,function SandStormEffectRemove)
     call BJDebugMsg("Source Timer Handle: " + I2S(GetHandleId(et)))
     call BJDebugMsg("Started an Effect timer with duration: " + I2S(udg_SandStormDur[GetUnitAbilityLevel(caster,'A000')]))
     call SaveTimerHandle(udg_SandHeroHashtable,GetHandleId(et),3,st)
     call UnitRemoveAbility(caster,'A000')
     call UnitAddAbility(caster,'A001')
     set et = null
     set caster = null
     set st = null
     set e = null
endfunction

//===========================================================================
function InitTrig_SandStorm takes nothing returns nothing
     set gg_trg_SandStorm = CreateTrigger()
     call TriggerRegisterAnyUnitEventBJ(gg_trg_SandStorm,EVENT_PLAYER_UNIT_SPELL_EFFECT)
     call TriggerAddCondition(gg_trg_SandStorm,Condition(function Trig_SandStorm_Conditions))
     call TriggerAddAction(gg_trg_SandStorm,function Trig_SandStorm_Actions)
endfunction


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

DoctorGesterДата: Среда, 17 Марта 2010, 20:33:39 | Сообщение # 2
6 уровень
Группа: Проверенные
Сообщений: 209
Награды: 0
Репутация: 50
Блокировки:
А теперь внезапно используй gettriggerunit
 

[DUОS]Дата: Среда, 17 Марта 2010, 20:36:31 | Сообщение # 3
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
DoctorGester,
Как кастера?

Добавлено (17-03-2010, 20:36)
---------------------------------------------
Таймер не ловит реакцию на событие бтв. Поставил триггюнита, та же трабла.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

DoctorGesterДата: Среда, 17 Марта 2010, 20:42:33 | Сообщение # 4
6 уровень
Группа: Проверенные
Сообщений: 209
Награды: 0
Репутация: 50
Блокировки:
Хм тогда сейчас посмотрю внимательней. Жди.

Добавлено (17-03-2010, 20:40)
---------------------------------------------
Я вот не пойму. Ну нахрена тебе локальный массив таймеров? Тупость.

Добавлено (17-03-2010, 20:42)
---------------------------------------------
И вообще можно сделать намного проще и 1 таймером.

 

[DUОS]Дата: Среда, 17 Марта 2010, 20:47:29 | Сообщение # 5
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
DoctorGester,
Покажи мне как это на JASS2 сделать.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

DoctorGesterДата: Среда, 17 Марта 2010, 21:00:50 | Сообщение # 6
6 уровень
Группа: Проверенные
Сообщений: 209
Награды: 0
Репутация: 50
Блокировки:
Что за жасс2? Лол просто при каждом истечении 1 секундного таймера добавляем 1 к некому сохраненному значению. Когда значение например 10 делаем твои действия.
 

[DUОS]Дата: Среда, 17 Марта 2010, 22:47:12 | Сообщение # 7
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Ошибка была юморная до невозможности - каждый каст нельзя инитить хеш.
Клоз.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

  • Страница 1 из 1
  • 1
Поиск:

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