Варкрафт с ума меня сведёт!
Что за чертовщина?
call InitTrig_UbiquitousAll()
call InitTrig_ElementalistAll()
call InitTrig_FavoriteAll()
call InitTrig_GodofTwilightAll()
call InitTrig_NeedlessAll()
call InitTrig_CursedChitAll()
call InitTrig_ArbiterAll()
call InitTrig_ArchdruidAll()
call InitTrig_SkyHeraldAll()
call InitTrig_PastmasterAll()
call InitTrig_ManipulatorAll()
call InitTrig_SoulCarrierAll()
Есть поток, это только часть функций, инициализирующихся в нём - есть выше и ниже, не суть важно.
Для проверки мной постоянно проверяется на работоспособность последняя функция потока, с ней всё есть и было ок.
Но внезапно выяснилось, что единственная выделенная жирным функция НЕ инициализируется! Функция В ЦЕНТРЕ потока. При выучивании спеллов (а это базовое регистрирующее там на триггер событие, в соседних ф-ях так же) герой НИЧЕГО не делает, спеллы остаются пустышками.
Со страху я кидаюсь проверять все остальные - вроде всё ок.
Перемещаю функцию в другой поток - нихрена, при этом остальные функции в потоках (в частности нижние!!!) исправно работают.
Тут еще самое веселое, что нет 100% уверенности, что раньше функция работала, по идее должна была, но уже не помню, мб просто наспех была пропущена для проверки...
Все функции рядом работают по тому же принципу и успешно инициализируются!
Ошибки в названии функции быть не может, да и не скомпилировался бы тогда код по идее.
Отладка на начало действия функции (сразу после объявления локальных переменных) сразу же была сделана для проверки - ремув объекта с карты. Объект оставался на месте.
Т. е. call InitTrig_GodofTwilightAll() по идее просто НЕ срабатывало!
Там сразу же после задания локальных переменных была отладка поставлена и не действовала.
Ифзенэлсы все дальнейшие проверять в функции не было смысла.
Решено было так: вообще-то все новые герои инициализируются уже через одну общую функцию, поэтому куски кода из того, что запускает эта, благополучно были перенесены в неё.
Всё действует.
Но всё-таки остаётся непонимание - что это было???
Может разве быть такое, что В СЕРЕДИНЕ потока функция не запускается, а ниже ( и выше) все исправно действует?

Принятый ответ

скачай этот файл и закинь его в папку AdicHelper\lib\ в папке с jngp
после в шапке карты напиши include "ifdebug.j"
и создай триггер с событием
игрок написал в чат ifdebug как точное совпадение
действие
кастом скрипт log()
после чего запусти карту и напиши в чат ifdebug
он выведет на экран все if/else/elseif через которые он прошёл (true в скобках в конце строки означает что значение в ифе истина)
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
21
6 лет назад
0
Просто не понятна причина
call InitTrig_GodofTwilightAll
функция называлась именно так (да иначе бы и не засейвилось) = тут ошибки нет
поток виноват? нет, перемещалось в другой и не действовало = тут ошибки нет
в функции неправильные if then else? - но там с самого начала после объявления единственной локалки (триггера) стояла отладка - удалить имеющееся с начала игры здание, а оно оставалось на месте = функция просто не вызывалась.
Получается так call InitTrig_GodofTwilightAll() не вызывает function InitTrig_GodofTwilightAll.
При этом функции ниже (и выше) в потоке успешно вызываются.
Перемещение в другой поток ничего не меняет.
На каком-то другом этапе вроде бы ошибка - см. выше - исключена.
Что за бред?
1
16
6 лет назад
1
Предполагаю, что без наличия кода/карты, тебе помочь не смогут.
2
21
6 лет назад
2
мб юзать вывод текста как дебаг?
если удаляемое здание было сделано через гуишную глобалку типа gg_unit_hfoo_001 которая при этом нигде не использовалась в гуи-триггерах, то эта переменная не инициализировалась и поэтому здание не удалялось
0
32
6 лет назад
0
Код в студию, судя по всему в коде функции ошибка, проверяй код.
0
28
6 лет назад
Отредактирован nvc123
0
  • вариант 1 (наиболее вероятно)
юнит которого ты удаляешь создаётся после вызова этой функции
советую сделать нормальный дебаг (есть куча готовых систем для дебага)
  • вариант 2 (маловероятно)
при объявлении локалок допущены ошибки которые прерывают выполнение функции
  • вариант 3
любая возможная причина

ну а вообще подобные вещи лучше делать через vjass библиотеки
0
21
6 лет назад
Отредактирован nvc123
0
biridius, а, ну вот так хоть менее невероятно кажется
значит, ошибка всё-таки могла быть где-то в ифзенэлсах
да, именно в такой гуи глобалке именно это здание и было и именно через нее ремувилось и ни один триг не использовал
А текст успел бы появиться? Дело в том, что событие, где был этот поток - по-моему, map initialization
А так-то вообще же не может быть такого, чтобы в потоке в середине одна функция внезапно не вызывалась, а ниже нее вызывались?
Поток же всегда если принудительно завершается на какой-то функции, то ниже нее функции уже тоже должны не работать? А тут работали
вот крч код если интересно
код потока ничего не даст там просто перечень айнитов как в стартпосте и другие айниты айнитятся
только там древний гуи конверт но кто соображает разберется что проверять в первую очередь
ни один спелл не действовал так что где if then else смотреть - понятно
смотреть сюда
БОГ СУМРАКА
function Trig_GodofTwilightAll_Func001Func002Func001C takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A1N9' ) ) then
        return false
    endif
    if ( not ( GetUnitAbilityLevelSwapped('A1N9', GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_GodofTwilightAll_Func001Func002Func002C takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A1NB' ) ) then
        return false
    endif
    if ( not ( GetUnitAbilityLevelSwapped('A1NB', GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_GodofTwilightAll_Func001Func002Func003C takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A1NA' ) ) then
        return false
    endif
    if ( not ( GetUnitAbilityLevelSwapped('A1NA', GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_GodofTwilightAll_Func001Func002Func004C takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A1N8' ) ) then
        return false
    endif
    if ( not ( GetUnitAbilityLevelSwapped('A1N8', GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_GodofTwilightAll_Func001Func002C takes nothing returns boolean
    if ( Trig_GodofTwilightAll_Func001Func002Func001C() ) then
        return true
    endif
    if ( Trig_GodofTwilightAll_Func001Func002Func002C() ) then
        return true
    endif
    if ( Trig_GodofTwilightAll_Func001Func002Func003C() ) then
        return true
    endif
    if ( Trig_GodofTwilightAll_Func001Func002Func004C() ) then
        return true
    endif
    return false
endfunction

function Trig_GodofTwilightAll_Func001C takes nothing returns boolean
    if ( not ( IsUnitIllusionBJ(GetTriggerUnit()) == false ) ) then
        return false
    endif
    if ( not Trig_GodofTwilightAll_Func001Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_GodofTwilightAll_Conditions takes nothing returns boolean
    if ( not Trig_GodofTwilightAll_Func001C() ) then
        return false
    endif
    return true
endfunction

function ClutchingHandsMove takes nothing returns nothing
local timer t2= GetExpiredTimer()
local unit u6= LoadUnitHandle(udg_Hash, GetHandleId(t2), 1)
local unit u7= LoadUnitHandle(udg_Hash, GetHandleId(t2), 2)
local integer i= LoadInteger(udg_Hash, GetHandleId(t2), 3)
local location p= GetUnitLoc(u6)
local location p2= GetUnitLoc(u7)
local location p3

set i=i + 1
call SaveInteger(udg_Hash, GetHandleId(t2), 3, i)

if ( i < 25 ) then
call SetUnitFlyHeightBJ(u6, ( GetUnitFlyHeight(u6) + 3 ), 0.00)
call SetUnitFlyHeightBJ(u7, ( GetUnitFlyHeight(u7) + 3 ), 0.00)
else
call SetUnitFlyHeightBJ(u6, ( GetUnitFlyHeight(u6) - 3 ), 0.00)
call SetUnitFlyHeightBJ(u7, ( GetUnitFlyHeight(u7) - 3 ), 0.00)
endif

if ( i < 50 ) then

set p3=PolarProjectionBJ(p, ( DistanceBetweenPoints(p, p2) / 100.00 ), AngleBetweenPoints(p, p2))
if ( DistanceBetweenPoints(p, p2) < 800 ) then
call SetUnitPositionLoc(u6, p3)
endif
call RemoveLocation(p3)

set p3=PolarProjectionBJ(p2, ( DistanceBetweenPoints(p2, p) / 100.00 ), AngleBetweenPoints(p2, p))
if ( DistanceBetweenPoints(p2, p) < 800 ) then
call SetUnitPositionLoc(u7, p3)
endif
call RemoveLocation(p3)

else
call SetUnitFlyHeightBJ(u6, ( GetUnitDefaultFlyHeight(u6) ), 0.00)
call SetUnitFlyHeightBJ(u7, ( GetUnitDefaultFlyHeight(u7) ), 0.00)
call SetUnitPathing(u6, true)
call SetUnitPathing(u7, true)
call PauseTimer(t2)
call DestroyTimer(t2)
call FlushChildHashtable(udg_Hash, GetHandleId(t2))
endif

call RemoveLocation(p)
call RemoveLocation(p2)
call RemoveLocation(p3)

set t2=null
set u6=null
set u7=null
set p=null
set p2=null
set p3=null
endfunction

function ClutchingHandsTicks takes nothing returns nothing
local timer t= GetExpiredTimer()
local timer t2= CreateTimer()
local unit u5=LoadUnitHandle(udg_Hash, GetHandleId(t), 2)
local unit u6
local unit u7
local location p= GetUnitLoc(u5)
local group preaffected= CreateGroup()
local group affected= CreateGroup()
local integer i= 0

set preaffected=GetUnitsInRangeOfLocAll(350.00, p)

loop
set u6=FirstOfGroup(preaffected)
exitwhen u6 == null
call GroupRemoveUnit(preaffected, u6)
if ( ( IsUnitType(( u6 ), UNIT_TYPE_ANCIENT) != true ) and ( IsUnitDeadBJ(u6) == false ) and ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitEnemy(u6, GetOwningPlayer(u5)) == true ) ) then
call GroupAddUnit(affected, u6)
else
endif
endloop

loop
set u6=GroupPickRandomUnit(affected)
call GroupRemoveUnit(affected, u6)
exitwhen u6 != null or CountUnitsInGroup(affected) == 0
endloop

loop
set u7=GroupPickRandomUnit(affected)
call GroupRemoveUnit(affected, u7)
exitwhen u7 != null or CountUnitsInGroup(affected) == 0
endloop

if ( u6 == null ) then
set u6=u5
endif

if ( u7 == null ) then
set u7=u5
endif


//В зависимости от количества найденных врагов делаем те или иные замуты

if ( u5 == u6 ) then

//Мы не нашли ни одного врага? Мы просто рушим таймер, ок.

call PauseTimer(t2)
call DestroyTimer(t2)
call FlushChildHashtable(udg_Hash, GetHandleId(t2))

else

//Тогда первый враг у нас точно есть, вот ему и ловить люлей:

call UnitAddAbilityBJ('A1N3', u6)
call UnitRemoveAbilityBJ('A1N3', u6)
call AddSpecialEffectTargetUnitBJ("origin", u6, "SoulAegis.mdx")
call ConditionalTriggerExecute(gg_trg_destroyspeceffect)
call UnitDamageTargetBJ(u5, u6, 40 * GetUnitAbilityLevelSwapped('A1NA', u5), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DIVINE)


if ( u5 == u7 ) then

//Если мы нашли только одного врага, суб-таймер на броски нам тоже не нужен.

call PauseTimer(t2)
call DestroyTimer(t2)
call FlushChildHashtable(udg_Hash, GetHandleId(t2))


else

//Раздаём и второму врагу плюшку

call UnitAddAbilityBJ('A1N3', u7)
call UnitRemoveAbilityBJ('A1N3', u7)
call AddSpecialEffectTargetUnitBJ("origin", u7, "SoulAegis.mdx")
call ConditionalTriggerExecute(gg_trg_destroyspeceffect)
call UnitDamageTargetBJ(u5, u7, 40 * GetUnitAbilityLevelSwapped('A1NA', u5), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DIVINE)

//Дарим голубчикам возможность летать
call UnitAddAbilityBJ('A1N5', u6)
call SetPlayerAbilityAvailableBJ(false, 'A1N5', GetOwningPlayer(u6))
call UnitAddAbilityBJ('A1N5', u7)
call SetPlayerAbilityAvailableBJ(false, 'A1N5', GetOwningPlayer(u7))
call SetUnitPathing(u6, false)
call SetUnitPathing(u7, false)

//А потом запускаем второй таймер

call SaveUnitHandle(udg_Hash, GetHandleId(t2), 1, u6)
call SaveUnitHandle(udg_Hash, GetHandleId(t2), 2, u7)
call SaveInteger(udg_Hash, GetHandleId(t2), 3, i)
call TimerStart(t2, 0.01, true, function ClutchingHandsMove)

endif


endif

//Действия с врагами закрыты


call RemoveLocation(p)
call DestroyGroup(preaffected)
call DestroyGroup(affected)

set t=null
set t2=null
set u5=null
set u6=null
set u7=null
set p=null
set preaffected=null
set affected=null
endfunction

function DiveInvisibilityEnd takes nothing returns nothing
local timer t2= GetExpiredTimer()
local unit u6= LoadUnitHandle(udg_Hash, GetHandleId(t2), 1)
local effect e2= LoadEffectHandle(udg_Hash, GetHandleId(t2), 9)
call UnitRemoveAbilityBJ('A1N4', u6)
call PauseTimer(t2)
call DestroyTimer(t2)
call FlushChildHashtable(udg_Hash, GetHandleId(t2))
call DestroyEffect(e2)
set t2=null
set e2=null
set u6=null
endfunction

function DiveDamage takes nothing returns nothing
call DisableTrigger(GetTriggeringTrigger())
if ( GetUnitAbilityLevelSwapped('A1N7', GetTriggerUnit()) == 0 ) and ( GetUnitAbilityLevelSwapped('A1N4', GetTriggerUnit()) == 0 ) and ( GetEventDamage() > 0 ) then
call UnitAddAbilityBJ('A1N7', GetTriggerUnit())
endif
call EnableTrigger(GetTriggeringTrigger())
endfunction

function DiveIntoTwilight2 takes nothing returns nothing
local timer t=GetExpiredTimer()
local timer t2= CreateTimer()
local unit u5=LoadUnitHandle(udg_Hash, GetHandleId(t), 2)
local unit u6=LoadUnitHandle(udg_Hash, GetHandleId(t), 1)
local effect e= LoadEffectHandle(udg_Hash, GetHandleId(t), 9)
local effect e2
local integer i=LoadInteger(udg_Hash, GetHandleId(t), 3)
local trigger divedamage= LoadTriggerHandle(udg_Hash, GetHandleId(t), 20)
local triggeraction divedamageaction= LoadTriggerActionHandle(udg_Hash, GetHandleId(t), 21)

set i=i + 1
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)

//На ману.
if ( i < 600 ) then

//Вот тут-то всё, связанное с маркером. И, наверное, второй "дымный" эффект пусть на его время крепится.

if ( GetUnitAbilityLevelSwapped('A1N7', u6) == 1 ) then
call UnitRemoveAbilityBJ('A1N7', u6)
call UnitAddAbilityBJ('A1N4', u6)
call UnitMakeAbilityPermanent(u6, true, 'A1N4')
call UnitDamageTargetBJ(u5, u6, 50.00 * GetUnitAbilityLevelSwapped('A1N8', u5), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DIVINE)
call SetUnitState(u5, UNIT_STATE_LIFE, GetUnitState(u5, UNIT_STATE_LIFE) + 50.00 * GetUnitAbilityLevelSwapped('A1N8', u5))
call AddSpecialEffectTargetUnitBJ("origin", u6, "war3mapImported\\BlackCloudOfFog.mdx")
set e2=GetLastCreatedEffectBJ()
call SaveUnitHandle(udg_Hash, GetHandleId(t2), 1, u6)
call SaveEffectHandle(udg_Hash, GetHandleId(t2), 9, e2)
call TimerStart(t2, 2, false, function DiveInvisibilityEnd)
else
call PauseTimer(t2)
call DestroyTimer(t2)
call FlushChildHashtable(udg_Hash, GetHandleId(t2))
call DestroyEffect(e2)
endif

//Конец всего, связанного с маркером.

else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
call DestroyEffect(e)
call TriggerRemoveAction(divedamage, divedamageaction)
call DestroyTrigger(divedamage)
endif

set t=null
set t2=null
set u5=null
set u6=null
set e=null
set e2=null
set divedamage=null
set divedamageaction=null
endfunction

function DiveIntoTwilight takes nothing returns nothing
local timer t= CreateTimer()
local unit u5= GetTriggerUnit()
local unit u6= GetSpellTargetUnit()
local trigger divedamage= CreateTrigger()
local triggeraction divedamageaction
local effect e
local integer i= 0
if ( GetSpellAbilityId() == 'A1N8' ) then
call AddSpecialEffectTargetUnitBJ("origin", u6, "war3mapImported\\BlackCloudOfFog.mdx")
set e=GetLastCreatedEffectBJ()
set divedamageaction=TriggerAddAction(divedamage, function DiveDamage)
call TriggerRegisterUnitEvent(divedamage, u6, EVENT_UNIT_DAMAGED)
call SaveUnitHandle(udg_Hash, GetHandleId(t), 2, u5)
call SaveUnitHandle(udg_Hash, GetHandleId(t), 1, u6)
call SaveEffectHandle(udg_Hash, GetHandleId(t), 9, e)
call SaveTriggerHandle(udg_Hash, GetHandleId(t), 20, divedamage)
call SaveTriggerActionHandle(udg_Hash, GetHandleId(t), 21, divedamageaction)
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)
call TimerStart(t, 0.01, true, function DiveIntoTwilight2)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
call DestroyEffect(e)
call TriggerRemoveAction(divedamage, divedamageaction)
call DestroyTrigger(divedamage)
endif
set t=null
set u5=null
set u6=null
set e=null
set divedamage=null
set divedamageaction=null
endfunction

function MentalNecrosis2 takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash, GetHandleId(t), 2)
local unit u6=LoadUnitHandle(udg_Hash, GetHandleId(t), 1)
local unit u7
local location p=GetUnitLoc(u6)
local group stgroup=GetUnitsInRangeOfLocAll(300.00, p)
local effect e= LoadEffectHandle(udg_Hash, GetHandleId(t), 9)
local integer i=LoadInteger(udg_Hash, GetHandleId(t), 3)
local real r=LoadReal(udg_Hash, GetHandleId(t), 7)
//r2 здесь - разница. Если она положительная, добавляем половину от разницы.
local real r2= r - GetUnitStateSwap(UNIT_STATE_MANA, u6)



set i=i + 1
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)

//На дамаг.
if ( i > 99 ) and ( i < 101 ) or ( i > 199 ) and ( i < 201 ) or ( i > 299 ) and ( i < 301 ) or ( i > 399 ) and ( i < 401 ) or ( i > 499 ) and ( i < 501 ) then

loop
set u7=FirstOfGroup(stgroup)
exitwhen u7 == null
call GroupRemoveUnit(stgroup, u7)
if ( ( IsUnitType(( u7 ), UNIT_TYPE_ANCIENT) != true ) and ( GetUnitAbilityLevelSwapped('Avul', u7) != 1 ) and ( IsUnitAliveBJ(u7) == true ) ) then
call UnitDamageTargetBJ(u5, u7, 20.00 + 10.00 * GetUnitAbilityLevelSwapped('A1N9', u5), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC)
else
endif
endloop

endif

//На ману.
if ( i < 500 ) then
if ( R2I(GetUnitStateSwap(UNIT_STATE_MANA, u6)) < R2I(r) ) then
call SetUnitManaBJ(u6, ( GetUnitStateSwap(UNIT_STATE_MANA, u6) ) + ( r2 * 0.50 ))
set r=GetUnitStateSwap(UNIT_STATE_MANA, u6)
call SaveReal(udg_Hash, GetHandleId(t), 7, r)
endif
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
call DestroyEffect(e)
endif

call RemoveLocation(p)
call DestroyGroup(stgroup)
set t=null
set u5=null
set u6=null
set u7=null
set p=null
set stgroup=null
set e=null
endfunction

function MentalNecrosis takes nothing returns nothing
local timer t= CreateTimer()
local unit u5= GetTriggerUnit()
local unit u6= GetSpellTargetUnit()
local effect e
local real r= GetUnitStateSwap(UNIT_STATE_MANA, u6)
local integer i= 0
if ( GetSpellAbilityId() == 'A1N9' ) then
call AddSpecialEffectTargetUnitBJ("origin", u6, "war3mapImported\\DarkHarvest.mdx")
set e=GetLastCreatedEffectBJ()
call SaveUnitHandle(udg_Hash, GetHandleId(t), 2, u5)
call SaveUnitHandle(udg_Hash, GetHandleId(t), 1, u6)
call SaveEffectHandle(udg_Hash, GetHandleId(t), 9, e)
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)
call SaveReal(udg_Hash, GetHandleId(t), 7, r)
call TimerStart(t, 0.01, true, function MentalNecrosis2)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
call DestroyEffect(e)
endif
set t=null
set u5=null
set u6=null
set e=null
endfunction

function Woe takes nothing returns nothing
if ( GetSpellAbilityId() == 'A1NB' ) then
    call AddSpecialEffectTargetUnitBJ("origin", GetTriggerUnit(), "war3mapImported\\ShadowAssault.mdx")
    call ConditionalTriggerExecute(gg_trg_destroyspeceffect)
    call AddSpecialEffectTargetUnitBJ("origin", GetSpellTargetUnit(), "war3mapImported\\ShadowAssault.mdx")
    call ConditionalTriggerExecute(gg_trg_destroyspeceffect)
    call SetUnitLifeBJ(GetTriggerUnit(), ( GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit()) + ( GetUnitStateSwap(UNIT_STATE_MANA, GetSpellTargetUnit()) * ( 0.20 * I2R(GetUnitAbilityLevelSwapped('A1NB', GetTriggerUnit())) ) ) ))
    call SetUnitManaBJ(GetSpellTargetUnit(), 0)
endif
endfunction

function AnubisSounds2 takes nothing returns nothing
local timer t= GetExpiredTimer()
local trigger sounds= LoadTriggerHandle(udg_Hash, GetHandleId(t), 10)
call EnableTrigger(sounds)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
set sounds=null
set t=null
endfunction

function AnubisSounds takes nothing returns nothing
local timer t= CreateTimer()
local trigger sounds= GetTriggeringTrigger()
local integer i
if ( GetPlayerController(GetOwningPlayer(GetTriggerUnit())) == MAP_CONTROL_USER ) then
set i=GetRandomInt(1, 3)
if ( i == 1 ) then
call PlaySoundOnUnitBJ(gg_snd_Anubis1, 100, GetTriggerUnit())
endif
if ( i == 2 ) then
call PlaySoundOnUnitBJ(gg_snd_Anubis2, 100, GetTriggerUnit())
endif
if ( i == 3 ) then
call PlaySoundOnUnitBJ(gg_snd_Anubis3, 100, GetTriggerUnit())
endif
endif
call DisableTrigger(GetTriggeringTrigger())
call SaveTriggerHandle(udg_Hash, GetHandleId(t), 10, sounds)
call TimerStart(t, 2, false, function AnubisSounds2)
set sounds=null
set t=null
endfunction

function Trig_GodofTwilightAll_Actions takes nothing returns nothing
local timer t= CreateTimer()
local unit u5= GetTriggerUnit()
local trigger anubis
local trigger soundset
    set anubis=CreateTrigger()
    set soundset=CreateTrigger()
    //Озвучка
    if ( GetUnitAbilityLevelSwapped('A1N6', GetTriggerUnit()) == 1 ) then
    call UnitRemoveAbilityBJ('A1N6', GetTriggerUnit())
    call TriggerRegisterUnitEvent(soundset, GetTriggerUnit(), EVENT_UNIT_SELECTED)
    call TriggerAddAction(soundset, function AnubisSounds)
    else
    call DestroyTrigger(soundset)
    endif
    //Всё, закрыто про озвучку
    //Если первый спелл, то заносим функцию для него
    if ( GetLearnedSkillBJ() == 'A1N9' ) then
    call TriggerRegisterUnitEvent(anubis, GetTriggerUnit(), EVENT_UNIT_SPELL_EFFECT)
    call TriggerAddAction(anubis, function MentalNecrosis)
    endif
    //Если второй спелл, то заносим функцию для него
    if ( GetLearnedSkillBJ() == 'A1NB' ) then
    call TriggerRegisterUnitEvent(anubis, GetTriggerUnit(), EVENT_UNIT_SPELL_EFFECT)
    call TriggerAddAction(anubis, function Woe)
    endif
    //Если третий спелл, то триггер рушим, а если не третий, то рушим таймер t
    if ( GetLearnedSkillBJ() == 'A1NA' ) then
    call UnitAddAbilityBJ('A1N5', GetTriggerUnit())
    call SetPlayerAbilityAvailableBJ(false, 'A1N5', GetOwningPlayer(GetTriggerUnit()))
    call SaveUnitHandle(udg_Hash, GetHandleId(t), 2, u5)
    call TimerStart(t, 4, true, function ClutchingHandsTicks)
    call DestroyTrigger(anubis)
    else
    call PauseTimer(t)
    call DestroyTimer(t)
    call FlushChildHashtable(udg_Hash, GetHandleId(t))
    endif
    //Если четвёртый спелл, то заносим функцию для него
    if ( GetLearnedSkillBJ() == 'A1N8' ) then
    call TriggerRegisterUnitEvent(anubis, GetTriggerUnit(), EVENT_UNIT_SPELL_EFFECT)
    call TriggerAddAction(anubis, function DiveIntoTwilight)
    endif
//В любом случае переменную триггера офк потом обнуляем, а триггер, если остался, оставляем. 
//И обнуляем все прочие переменные.
set anubis=null
set soundset=null
set t=null
set u5=null
endfunction

//===========================================================================
function InitTrig_GodofTwilightAll takes nothing returns nothing
    local trigger GodofTwilightAll= CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(GodofTwilightAll, EVENT_PLAYER_HERO_SKILL)
    call TriggerAddCondition(GodofTwilightAll, Condition(function Trig_GodofTwilightAll_Conditions))
    call TriggerAddAction(GodofTwilightAll, function Trig_GodofTwilightAll_Actions)
    set GodofTwilightAll=null
endfunction
БОГ СУМРАКА - ЗАКРЫТО.
0
28
6 лет назад
0
ClotPh, используй форматирование код
0
21
6 лет назад
0
И да, в кодах спеллов точно ошибок нет, они все уже успешно действуют после переноса их кусков в др. функцию
Дело вот где-то в том, что ни один спелл не регается после изучения и озвучка не появляется
то есть или в кондишенах или где-то в начале все обрывается
0
28
6 лет назад
0
ClotPh, редактор какой у тебя?
0
21
6 лет назад
0
после того как куски были перенесены в др. функцию все действует - это из mpq бэкапа
UMSWE
2
28
6 лет назад
Отредактирован nvc123
2
скачай этот файл и закинь его в папку AdicHelper\lib\ в папке с jngp
после в шапке карты напиши include "ifdebug.j"
и создай триггер с событием
игрок написал в чат ifdebug как точное совпадение
действие
кастом скрипт log()
после чего запусти карту и напиши в чат ifdebug
он выведет на экран все if/else/elseif через которые он прошёл (true в скобках в конце строки означает что значение в ифе истина)
Загруженные файлы
Принятый ответ
0
21
6 лет назад
0
nvc123, ок, спасибо большое
но уже нврн в след. раз
пока меня больше интересовало, может ли в потоке в СЕРЕДИНЕ что-то не выполниться, а дальше выполняться, если функция сама по себе исправна
ятп - нет и слава Богу
твой ответ жму как лучший
Чтобы оставить комментарий, пожалуйста, войдите на сайт.