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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
21
Bubsy, с Психопомпой иногда фаталит.
Пока все фаталы объединяет то, что в процессе игры за нее она доходила до прокачки ульты.
Но и тогда фатал может быть, а может и не быть. Вот в чем прикол.
Но обговоренных с тобой изменений еще не вносилось, если речь об этом. Потому что ради этого опять часами колупать все карты и оптимизаторы - гемор. Да и лич сказал, что он и в текущем коде криминала не видит...
32
ClotPh, не может же просто так фаталить, лог чтоли сделай, мб было что то общее во всех играх с фаталом, что не такое уж и очивидное...
Ну пока с ли чем открыли новый флаг криттера = ), не знаю когда он будет свободен.
21
quq_CCCP, "лог чтоли сделай"
А в архиве для лича, по-твоему, что?!
Общее следующее:
  • В играх участвовала Психопомпа и успевала прокачать ульту;
  • Игры длились не менее 15-16 минут (но тут другая очевидная связь опять же с ультой: если игра идет мало времени, она иногда ее просто прокачать не успевает).
Бывало, что и при том, и другом фатала не было. Но если фатал был, то было и то, и другое.
32
Мб были какие то еще герои\юниты, предметы?
21
quq_CCCP, конечно, были. Четыре случайных союзных героя и пять вражеских за AI из всего сета 200+ героев. Т. е. никакой зацепки.
Предметы - ну Сфера обновления (рефрешер), Скипетр Террора (радик + дагон), Сапоги для Прыжков (тапок с прыжком потмы без ауры потом), иногда всякие щиты, возвратки, Череподробитель (при атаке снимает с вражеских героев Силу на время и бьет маг уроном в % от их макс. хп). Это все сотни раз игралось и фаталов не вызывало.
Да нет, что это Психопомпа главная причина, у меня уверенность на 200% практически. Может быть, конечно, что-то в связи с ней нормальное ненормально действует, но на 98% уверенность, что собственные способности...
16
вылетает при попытке очистить несуществующую память из данных способности. у тебя там используются ООЧЕНь многоуровневые абилки? или прямые переносы кулдаунов? или вписывание SetAbilityX , где ты слабо разбираешься? либо где-то был скопирован блок памяти, чего делать не стоит, либо вписан где-то некорректный парамет оказался
21
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.
Есть такая функция - считать уровень макс. абилки - в мемхаке?
16
ну да, убирай эту ерунду
maxlevel = Memory[GetAbilityDataDefAddr(GetSpellAbilityId())/4+0x3C/4]+1
0 == 1, 1 == 2, 3== 4, etc
пробуй
21
Вот вроде с гитхаба, мне с такими проще
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
(Плюс один потому, что у меня там так считает)
Нормально?
Попробую сделать только это, если тема вновь продолжит развитие, пересоздам =)
16
проверь для начала, что там рили уроень лежит, а там посмотрим
21
DracoL1ch, короче, когда перепишу и если опять будут фаталы, в следующий раз буду сразу с .j и файлами из Errors кидать.
Но это уже, наверное, после крупного апдейта после конца апреля - обновлять только из-за этого и проверять не хочется (затрахало), а других серьезных ошибок я сейчас вообще не знаю. Благодарю за помощь.
О СТООООПППП!!!
"прямые переносы кулдаунов"
это ж MadBreath так и делает (вроде, сейчас уже не полезу в .j, т. к. бесит).
Короче, лвл исправлю, а в MadBreath сделаю промежуточную реалку.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.