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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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
Вот здесь можно почитать, как создавать каты (там же ниже есть блоки кода). Больше так не делайте.
2
21
7 лет назад
2
////
В общем, буду сюда выкладывать результаты тест-игр и делать выводы. Как минимум себе от себя.
ТАК!
Игра за Психопомпу 1. Без прокачки W. 15 минут. Фатала после выхода из игры не было.
Игра за Психопомпу 2. Без прокачки W. 16 минут. Фатала после выхода из игры не было.
...
Не припомню, чтобы его 2 раза подряд после выхода из игры при игре за Психопомпу не было. Уже звоночек. Но всё-таки 2 игры мало.
Посмотрим позже дальше.
Так, бтв, если дело в W-шке, мб сделаю там просто повышения кулдаунов не на проценты, а на фиксированное значение без сотых долей.
Потому что шмотка, понижающая кулдауны на фиксированные значения без сотых долей, давно есть и используется, проблем с ней выявлено не было.
Хотя туповато получается, вынудит всех лоу кдшников, стоящих против Психопомпы, эту шмотку именно и брать и как можно меньше рядом с ней стоять, потому что спеллы с перезарядкой 2 сек и меньше вообще сильно будут портиться, а всякие ульты со 100 к/д вообще еле почешутся.
Ну да ладно. Хрен с ним. Зато везде Cooldown'ы снижаются процентно, а в BFS на фиксированные значения. Оригинально, с**а.
Ну или там че-нить мб заморочу, типа что если перезарядка от 10 сек. до 100, то эффект ауры усиливается в 10 раз по сравнению со способностями, где К/Д от 1 до 10, и так далее. Формально те же проценты получатся, но по коду - фиксированные повышения без сотых долей.
Почему без сотых - потому что сотые близко к тысячным, а тысячных долей на значения перезарядок в РО уже фактически вписать невозможно, подозреваю, что и мемхак в ячейку памяти впихнуть их не может, и хотя формально вроде как в BendingEffect округления прописаны... см. ниже про погрешности вычислений...
ЕСЛИ ЧТО!!! Код выше, код W-шки, на которую продолжают подозреваться проблемы всех фаталов - функция BendingEffect. Если кому есть что сказать - пишите. Хотя про погрешности вычислений в мемхаке мной уже было услышано в соотв. теме...
/
Игра за Психопомпу 3. Без прокачки W. 16 минут. Фатала после выхода из игры не было.
/
/////////////////////
/////////////////////////
ТЬФУ!!!
Вот ппц. И никто до сих пор ничего не видит, только мной в конце концов и увидено.
Какого *** в BendingEffect два loop и два endloop в конце?!
Там же куски кода необрубленные.
Мне, кажется, теперь все понятно, втч причина фатала прямо ингейм - кто-то попал под ауру Психопомпы и кастанул абилу, у которой максимальный лвл - чётное число...
Ладно, всё.
Пока получается так - 95% уверенности, что фатал из-за Wшки (код в шапке), 80%, что если убрать лишние лупы, фатала не будет.
Посмотрим.
0
16
7 лет назад
0
обычно код не читают, я в тч, смотрю чисто по красоте использования мх, в обычном жассе любой может шарить
2
21
7 лет назад
2
Ну, в общем, ща еще просто была включена игра и поставлена ботская Психопомпа и своя, обе с прокачанной Bending, то есть W-шкой, и другие герои для тестов. Немного уменьшилась уверенность, что собственный код понимается, потому что все-таки фатал при применении под Bending 4-уровневой абилки словлен ингейм не был; и еще кое-что, чего по идее быть не должно было, все-таки было (ну не могу по-другому объяснить), хотя, с другой стороны, даже немного хорошо, что оно все-таки было - иначе был бы критичный баг. Но после выхода-то из игры в этот раз, уже с прокачанной W-шкой, фатал благополучно произошел.
Короче, тему считать неактуальной до удаления лишних loop'ов (только ради этого заморачиваться всеми переоптимизациями вряд ли буду, хотя хз).
Если и после этого будут фаталы (оцениваю вероятность в 40%), следующими шагами будут:
  • еще пара тест-игр без W (чтоб уж сто процентов убедиться, что причина в ней);
  • переписывание W под повышение перезарядки на фиксированные значения, а не проценты.
Если и после этого фаталы останутся (хотя уж вероятность этого считаю не более 20%, цифры интуитивные), придется W ампутировать и че-то еще связанное с перезарядкой придумывать.
0
21
7 лет назад
0
/////////
Нет, лишние loop и endloop в коде были удалены, ничего не изменилось, фатал после первой же игры с прокачкой Искривления (15 минут). Ну попробую поменять на фиксированное приплюсовывание перезарядок, там посмотрим.
0
21
7 лет назад
Отредактирован ClotPh
0
/////////////////////////////////
Только что новая версия кода.
Первая игра с ПП 17 минут - фатала нет.
Вторая игра 16 минут 52 секунды - фатала нет.
Третья около 17 минут - фатала нет.
КОРОЧЕ, ВСЕ.
ФАТАЛ БЫЛ ИЗ-ЗА ЗАПИСИ В SetAbilityCD ЗНАЧЕНИЙ С ТЫСЯЧНЫМИ ДОЛЯМИ.
Уф.
Мб будет залито завтра или даже сегодня, просто для себя как минимум.
А себе на заметку - пока не влезать в лишнее тут, имеющегося хватает для многого.
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.