[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
Блокировки:
| Ошибка была юморная до невозможности - каждый каст нельзя инитить хеш. Клоз.
|
|
|
|