"Кот забрал новую партию сапог с чересседельником, но опять вернулся и уже не ворчит, а рычит - в первый же день сапоги расползлись".
Были надежды, что и Психопомпа наконец кроме других фиксов работает идеально, но нет.
Перезарядка-то теперь нормально вроде увеличивается (раньше она тоже увеличивалась, но неправильно, а еще раньше еще более неправильно), но после первой же игры благополучно после выхода из вара опять фатал.
ВСЕ.
ФАТАЛ БЫЛ ИЗ-ЗА ЗАПИСИ В SetAbilityCD ЗНАЧЕНИЙ С ТЫСЯЧНЫМИ ДОЛЯМИ.

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

/////////////////////////////////
Только что новая версия кода.
Первая игра с ПП 17 минут - фатала нет.
Вторая игра 16 минут 52 секунды - фатала нет.
Третья около 17 минут - фатала нет.
КОРОЧЕ, ВСЕ.
ФАТАЛ БЫЛ ИЗ-ЗА ЗАПИСИ В SetAbilityCD ЗНАЧЕНИЙ С ТЫСЯЧНЫМИ ДОЛЯМИ.
Уф.
Мб будет залито завтра или даже сегодня, просто для себя как минимум.
А себе на заметку - пока не влезать в лишнее тут, имеющегося хватает для многого.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
7 лет назад
0
quq_CCCP, конечно, были. Четыре случайных союзных героя и пять вражеских за AI из всего сета 200+ героев. Т. е. никакой зацепки.
Предметы - ну Сфера обновления (рефрешер), Скипетр Террора (радик + дагон), Сапоги для Прыжков (тапок с прыжком потмы без ауры потом), иногда всякие щиты, возвратки, Череподробитель (при атаке снимает с вражеских героев Силу на время и бьет маг уроном в % от их макс. хп). Это все сотни раз игралось и фаталов не вызывало.
Да нет, что это Психопомпа главная причина, у меня уверенность на 200% практически. Может быть, конечно, что-то в связи с ней нормальное ненормально действует, но на 98% уверенность, что собственные способности...
0
16
7 лет назад
0
вылетает при попытке очистить несуществующую память из данных способности. у тебя там используются ООЧЕНь многоуровневые абилки? или прямые переносы кулдаунов? или вписывание SetAbilityX , где ты слабо разбираешься? либо где-то был скопирован блок памяти, чего делать не стоит, либо вписан где-то некорректный парамет оказался
0
21
7 лет назад
0
DracoL1ch, ну посмотри в war3map.j, если хочешь, все функции, в названиях которых есть слова:
-MadBreath
-Bending
-Delicacy
-Perception
Это заклинания Психопомпы.
Скорее всего что-то там.
ВОТ ВНИМАНИЕ!!! О несуществующей памяти. Снова к второй абиле.
function BendingEffect takes nothing returns nothing
local real percent= 1.00
local real percent2= 0.00
local integer i= 11
local integer percentchange= 0
if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and ( GetAbilityCD(GetSpellAbilityId() , GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1 ) then
УВЕЛИЧЕНИЕ НА 1
if UnitHasBuffBJ(GetTriggerUnit(), 'B0H8') == true then
set percent=1.01
endif
НА 1ЗАКРЫТО.
УВЕЛИЧЕНИЕ НА 2
if UnitHasBuffBJ(GetTriggerUnit(), 'B0H9') == true then
set percent=1.02
endif
НА 2ЗАКРЫТО.
УВЕЛИЧЕНИЕ НА 3
if UnitHasBuffBJ(GetTriggerUnit(), 'B0HA') == true then
set percent=1.03
endif
НА 3ЗАКРЫТО.
УВЕЛИЧЕНИЕ НА 4
if UnitHasBuffBJ(GetTriggerUnit(), 'B0HB') == true then
set percent=1.04
endif
НА 4ЗАКРЫТО.
УВЕЛИЧЕНИЕ НА 5
if UnitHasBuffBJ(GetTriggerUnit(), 'B0HC') == true then
set percent=1.05
endif
НА 5ЗАКРЫТО.
ТАЛАНТ СИЛЬНОЕ ИСКРИВЛЕНИЕ
set i=0
set percent=percent - 1
loop
set i=i + 1
exitwhen i > 12
if ( GetUnitAbilityLevelSwapped('A281', udg_Circle[i]) == 2 ) then
set percent=percent * 2
set i=12
endif
endloop
set percent=percent + 1
ТАЛАНТ СИЛЬНОЕ ИСКРИВЛЕНИЕ - ЗАКРЫТО.
if ( percent > 1.00 ) then
call AddSpecialEffectTargetUnitBJ("chest", GetTriggerUnit(), "Psychopomp2.mdl")
call ConditionalTriggerExecute(gg_trg_destroyspeceffect)
loop
exitwhen i < 1
set i=i - 1
ОКРУГЛЕНИЕ ДО СОТЫХ (ИНАЧЕ МОГУТ ЗАПИСАТЬСЯ ДОП. ЦИФРЫ НЕ В ТЕ ЯЧЕЙКИ)
loop
exitwhen i < 1
set i=i - 1
set percent2=GetAbilityCD(GetSpellAbilityId() , i) * percent
set percent2=percent2 * 100
set percentchange=R2I(percent2)
set percent2=I2R(percentchange)
set percent2=percent2 * 0.01
call SetAbilityCD(GetSpellAbilityId() , i , percent2)
endloop
ОКРУГЛЕНИЕ ДО СОТЫХ - ЗАКРЫТО.
endloop
else
endif
else
endif
endfunction
Тут функция всегда пытается изменить кулдаун абилке на 10 (!!!) уровнях (i-1 = 10).
Так было сделано "предусмотрительно", дело в том, что активных абилок с уровнем больше 10 в игре нет.
Но у большинства-то абилок всего по 5 лвлов.
А у некоторых и вовсе 1.
Может, именно там и пишется несуществующая память?
Тогда i должно в начале приравниваться к макс. уровню скастованной абилки +1.
Есть такая функция - считать уровень макс. абилки - в мемхаке?
0
16
7 лет назад
0
ну да, убирай эту ерунду
maxlevel = Memory[GetAbilityDataDefAddr(GetSpellAbilityId())/4+0x3C/4]+1
0 == 1, 1 == 2, 3== 4, etc
пробуй
0
21
7 лет назад
Отредактирован ClotPh
0
Вот вроде с гитхаба, мне с такими проще
function GetAbilityMaxLevel takes integer abil returns integer
local integer a
if abil==0 then
return 0
endif
set a=GetObjectDataCaching(pAbilityData, abil)
if a>0 then
return Memory[a+20]
endif
return 0
endfunction
Заберу ее и буду в начале BendingEffect
local integer i = GetAbilityMaxLevel(GetSpellAbilityId()) + 1
(Плюс один потому, что у меня там так считает)
Нормально?
Попробую сделать только это, если тема вновь продолжит развитие, пересоздам =)
0
16
7 лет назад
0
проверь для начала, что там рили уроень лежит, а там посмотрим
0
21
7 лет назад
0
DracoL1ch, короче, когда перепишу и если опять будут фаталы, в следующий раз буду сразу с .j и файлами из Errors кидать.
Но это уже, наверное, после крупного апдейта после конца апреля - обновлять только из-за этого и проверять не хочется (затрахало), а других серьезных ошибок я сейчас вообще не знаю. Благодарю за помощь.
О СТООООПППП!!!
"прямые переносы кулдаунов"
это ж MadBreath так и делает (вроде, сейчас уже не полезу в .j, т. к. бесит).
Короче, лвл исправлю, а в MadBreath сделаю промежуточную реалку.
0
21
7 лет назад
Отредактирован Uber
0
Все равно продолжает фаталить, причина та же?
Одно радует, что Психопомпа все равно все улучшается, хотя еще ни с одним героем за всю историю существования игры столько мороки не было, ну, пока фатал будет фирменной фичей =), пост-игры он не так уж мешает, но все же лучше бы без него... war3map.j-шка почти та же самая в плане интересующих функций, выкладываю только все последние связанные с Психопомпой функции, ульт вообще переделан.
Сорри, что без ката, все никак не войдет в автокаст, как тут этот кат делать.
раскрыть
function PerceptionEffect takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
local unit u5
local group herounits = GetUnitsInRectAll(GetPlayableMapRect())
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then

//ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ АТАКУ С ШАНСОМ

loop 
set u5=FirstOfGroup(herounits)
exitwhen u5==null
call GroupRemoveUnit(herounits,u5)
if ( GetUnitAbilityLevelSwapped('A27T', u5) >= 1 ) then
if (GetRandomInt(1,5) == 1) then

call DestroyEffect(AddSpecialEffectTarget("Psychopomp4.mdx", u5, "origin"))

call SetUnitBaseDamage ( u5, ( GetUnitBaseDamage(u5) + GetUnitAbilityLevelSwapped('A27T',u5) ) )

else
endif

else
endif
endloop


//ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ АТАКУ С ШАНСОМ - ЗАКРЫТО.

else

endif

call DestroyGroup (herounits)

//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
set u5 = null
set herounits = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction


function DelicacyEffect takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
local unit u5
local group herounits = GetUnitsInRectAll(GetPlayableMapRect())
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then

//ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ МАНУ

loop 
set u5=FirstOfGroup(herounits)
exitwhen u5==null
call GroupRemoveUnit(herounits,u5)
if ( GetUnitAbilityLevelSwapped('A27S', u5) >= 1 ) then



call SetUnitState(u5, UNIT_STATE_MANA, GetUnitState(u5, UNIT_STATE_MANA) + 4 * GetUnitAbilityLevelSwapped('A27S',u5))

else
endif
endloop

//ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ МАНУ - ЗАКРЫТО.

else

endif

call DestroyGroup (herounits)

//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
set u5 = null
set herounits = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction


function BendingEffect takes nothing returns nothing

local real percent = 1.00
local real percent2 = 0.00
local integer i = GetAbilityMaxLevel(GetSpellAbilityId()) + 1
local integer percentchange = 0

if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then


//УВЕЛИЧЕНИЕ НА 1%
if UnitHasBuffBJ(GetTriggerUnit(),'B0H8') == true  then
set percent = 1.01
endif
//НА 1% - ЗАКРЫТО.

//УВЕЛИЧЕНИЕ НА 2%
if UnitHasBuffBJ(GetTriggerUnit(),'B0H9') == true  then
set percent = 1.02
endif
//НА 2% - ЗАКРЫТО.

//УВЕЛИЧЕНИЕ НА 3%
if UnitHasBuffBJ(GetTriggerUnit(),'B0HA') == true  then
set percent = 1.03
endif
//НА 3% - ЗАКРЫТО.

//УВЕЛИЧЕНИЕ НА 4%
if UnitHasBuffBJ(GetTriggerUnit(),'B0HB') == true  then
set percent = 1.04
endif
//НА 4% - ЗАКРЫТО.

//УВЕЛИЧЕНИЕ НА 5%
if UnitHasBuffBJ(GetTriggerUnit(),'B0HC') == true  then
set percent = 1.05
endif
//НА 5% - ЗАКРЫТО.

//ТАЛАНТ СИЛЬНОЕ ИСКРИВЛЕНИЕ
set i = 0
set percent = percent - 1
loop
set i = i + 1
exitwhen i > 12
if ( GetUnitAbilityLevelSwapped('A281', udg_Circle[i]) == 2 ) then
set percent = percent * 2
set i = 12
endif
endloop
set percent = percent + 1
//ТАЛАНТ СИЛЬНОЕ ИСКРИВЛЕНИЕ - ЗАКРЫТО.

if (percent > 1.00) then

   call AddSpecialEffectTargetUnitBJ( "chest", GetTriggerUnit(), "Psychopomp2.mdl" )
   call ConditionalTriggerExecute( gg_trg_destroyspeceffect )


loop
exitwhen i < 1
set i = i-1



//ОКРУГЛЕНИЕ ДО СОТЫХ (ИНАЧЕ МОГУТ ЗАПИСАТЬСЯ ДОП. ЦИФРЫ НЕ В ТЕ ЯЧЕЙКИ)


loop
exitwhen i < 1
set i=i - 1
set percent2 = GetAbilityCD(GetSpellAbilityId(), i) * percent
set percent2 = percent2 * 100
set percentchange = R2I(percent2)
set percent2 = I2R(percentchange)
set percent2 = percent2 * 0.01
call SetAbilityCD(GetSpellAbilityId() , i , percent2)
endloop


//ОКРУГЛЕНИЕ ДО СОТЫХ - ЗАКРЫТО.


endloop

else
endif


else
endif



endfunction


function PerceptionRefresh takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t12, t13, t14, u5, u6, heroadded, heroaction, herounits
local timer t12 = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t12),2)
local unit u6
local trigger heroadded=LoadTriggerHandle(udg_Hash,GetHandleId(t12),20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash,GetHandleId(t12),21)
local group herounits
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

//Если героя нет, то разрушить таймер, чтобы не крутился и не жрал ресурсы.
if (u5 == null) then
call PauseTimer(t12)
call DestroyTimer(t12)
call FlushChildHashtable(udg_Hash,GetHandleId(t12))
call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
else

call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
set heroadded=CreateTrigger()
set heroaction = TriggerAddAction(heroadded,function PerceptionEffect)

set herounits  = GetUnitsInRectAll(GetPlayableMapRect())
  
loop 
set u6=FirstOfGroup(herounits)
exitwhen u6==null
call GroupRemoveUnit(herounits,u6)
if ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitType(u6, UNIT_TYPE_HERO) == true )  then
call TriggerRegisterUnitEvent(heroadded, u6, EVENT_UNIT_SPELL_EFFECT)
else
endif
endloop
call DestroyGroup (herounits)

call SaveTriggerHandle(udg_Hash,GetHandleId(t12),20,heroadded)
call SaveTriggerActionHandle(udg_Hash,GetHandleId(t12),21,heroaction)
endif
    
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t12, t13, t14, u5, u6, heroadded, heroaction, herounits
set t12 = null
set u5 = null
set u6 = null
set heroaction = null
set heroadded = null
set herounits = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction



function DelicacyRefresh takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t11, u5, u6, heroadded, heroaction, herounits
local timer t11 = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t11),2)
local unit u6
local trigger heroadded=LoadTriggerHandle(udg_Hash,GetHandleId(t11),20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash,GetHandleId(t11),21)
local group herounits
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

//Если героя нет, то разрушить таймер, чтобы не крутился и не жрал ресурсы.
if (u5 == null) then
call PauseTimer(t11)
call DestroyTimer(t11)
call FlushChildHashtable(udg_Hash,GetHandleId(t11))
call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
else

call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
set heroadded=CreateTrigger()
set heroaction = TriggerAddAction(heroadded,function DelicacyEffect)

set herounits  = GetUnitsInRectAll(GetPlayableMapRect())
  
loop 
set u6=FirstOfGroup(herounits)
exitwhen u6==null
call GroupRemoveUnit(herounits,u6)
if ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitType(u6, UNIT_TYPE_HERO) == true )  then
call TriggerRegisterUnitEvent(heroadded, u6, EVENT_UNIT_SPELL_EFFECT)
else
endif
endloop
call DestroyGroup (herounits)

call SaveTriggerHandle(udg_Hash,GetHandleId(t11),20,heroadded)
call SaveTriggerActionHandle(udg_Hash,GetHandleId(t11),21,heroaction)
endif
    
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t11, u5, u6, heroadded, heroaction, herounits
set t11 = null
set u5 = null
set u6 = null
set heroaction = null
set heroadded = null
set herounits = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction



function BendingRefresh takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t10, u5, u6, heroadded, heroaction, herounits
local timer t10 = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t10),2)
local unit u6
local trigger heroadded=LoadTriggerHandle(udg_Hash,GetHandleId(t10),20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash,GetHandleId(t10),21)
local group herounits
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

//Если героя нет, то разрушить таймер, чтобы не крутился и не жрал ресурсы.
if (u5 == null) then
call PauseTimer(t10)
call DestroyTimer(t10)
call FlushChildHashtable(udg_Hash,GetHandleId(t10))
call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
else

call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
set heroadded=CreateTrigger()
set heroaction = TriggerAddAction(heroadded,function BendingEffect)

set herounits  = GetUnitsInRectAll(GetPlayableMapRect())
  
loop 
set u6=FirstOfGroup(herounits)
exitwhen u6==null
call GroupRemoveUnit(herounits,u6)
if ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitType(u6, UNIT_TYPE_HERO) == true )  then
call TriggerRegisterUnitEvent(heroadded, u6, EVENT_UNIT_SPELL_EFFECT)
else
endif
endloop
call DestroyGroup (herounits)

call SaveTriggerHandle(udg_Hash,GetHandleId(t10),20,heroadded)
call SaveTriggerActionHandle(udg_Hash,GetHandleId(t10),21,heroaction)
endif
    
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t10, u5, u6, heroadded, heroaction, herounits
set t10 = null
set u5 = null
set u6 = null
set heroaction = null
set heroadded = null
set herounits = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction

function MadBreathParametersChange takes nothing returns nothing
local integer i = 6
local real newcd = GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()))
if (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
//ЗАДАЕМ ПЕРЕЗАРЯДКУ И МАНАКОСТ БЕЗУМНОГО ДЫХАНИЯ, УРОН УЖЕ ОТ НИХ ПОТОМ
loop
exitwhen i < 1
set i = i-1
call SetAbilityCD ('A27Q', i, newcd)
call SetAbilityManaCost('A27Q',i,R2I(newcd) * (2 + i))
endloop
//ЗАДАЕМ ПЕРЕЗАРЯДКУ И МАНАКОСТ БЕЗУМНОГО ДЫХАНИЯ, УРОН УЖЕ ОТ НИХ ПОТОМ - ЗАКРЫТО.
else
endif
endfunction

function MadBreath takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: p, p2, u5, u6, enemies
    local location p
    local location p2
    local unit u5 = GetTriggerUnit()
    local unit u6
    local group enemies = CreateGroup()
    local real damage = R2I( GetAbilityCD('A27Q',GetUnitAbilityLevelSwapped('A27Q',u5)) * (2 + GetUnitAbilityLevelSwapped('A27Q',u5)) )
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

if ( GetSpellAbilityId() == 'A27Q' ) then

set p = GetUnitLoc(u5)
set p2 = PolarProjectionBJ(p, 200.00, GetUnitFacing(GetTriggerUnit()))

    call AddSpecialEffectTargetUnitBJ( "overhead", u5, "Psychopomp1.mdl" )
    call ConditionalTriggerExecute( gg_trg_destroyspeceffect )
    call AddSpecialEffectTargetUnitBJ( "origin", u5, "Psychopomp1.mdl" )
    call ConditionalTriggerExecute( gg_trg_destroyspeceffect ) 

set enemies = GetUnitsInRangeOfLocAll(625.00,p2)

//ТАЛАНТ ГЛУБОКОДЫШАЩЕЕ
if ( GetUnitAbilityLevelSwapped('A280', udg_Circle[GetConvertedPlayerId(GetOwningPlayer(u5))]) == 2 ) and (damage < 100) then
set damage = 100
endif
//ТАЛАНТ ГЛУБОКОДЫШАЩЕЕ - ЗАКРЫТО.

//ЦВЕТОТЕГ РАЗМЕРА 14, ОКРАС СМ. ПЕЙНТ
call CreateTextTagUnitBJ( R2S(damage), u5, 0, 14.00, 80.00, 80.00, 80.00, 0 )
call ConditionalTriggerExecute( gg_trg_floatingtext )
//ЦВЕТОТЕГ РАЗМЕРА 14 - ЗАКРЫТО.


loop

//УРОН С ТЕКСТТАГОМ
set u6=FirstOfGroup(enemies)
exitwhen u6==null
call GroupRemoveUnit(enemies,u6)
if ( GetUnitAbilityLevelSwapped('Avul', u6) != 1 ) and ( IsUnitAliveBJ(u6) == true ) and ( IsUnitEnemy(u6,GetOwningPlayer(u5))==true ) then
call UnitDamageTargetBJ( u5, u6, damage, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endif
endloop

   call RemoveLocation (p)
   call RemoveLocation (p2)
//УРОН С ТЕКСТТАГОМ - ЗАКРЫТО.
   
else
endif


 call DestroyGroup (enemies)

//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: p, p2, u5, u6, enemies
   set p = null
   set p2 = null
   set u5 = null
   set u6 = null
   set enemies = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
Загруженные файлы
замечание от Uber: Учимся использовать каты
0
23
7 лет назад
0
Когда научиш оформлять бб код для джасс!
0
21
7 лет назад
0
JyHgle, когда ты по-русски писать научишься.
Вбрасываю в таком виде, в каком силы есть вбросить и желание после всего кодинга и тестов, см. выше. Если модеры вставят кат, не побив вложенный файл - спасибо.
2
26
7 лет назад
2
Вот здесь можно почитать, как создавать каты (там же ниже есть блоки кода). Больше так не делайте.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.