Во время игры стали иногда появляться фаталы с вылетом.
Ситуация общая такая: в инвентаре эта шмотка
и пытаюсь юзнуть спеллбучную абилу предмета, чтобы автособрать его. Но фатал в такой ситуации происходит далеко не каждый раз.
Хочется узнать причины по логу. Пока перепишу там ифзенэлсы.
Лог прилагается.

Вылет произошел во время обращения к элементу jass массива с индексом 21.
Так как это был мемхакнутый массив, произошла попытка чтения памяти по адресу 0x54.
Крашнулся твой код, так что переписывай.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Слышал, что
Дед-Мороз
реально существует. Почему?
Как тебе намек?
ответ
Проблема была в самих магазинах, сделал как в старой версии, заработало.
ответ
проверь настройки A01P, возможно, там кривые данные выше 3-го уровня

21
Что такое, почему ничего не прикрепляется.
Ладно, вроде вот
Файл.
Пока переписываю самостоятельно, там все равно ифзенэлсы косые были под завершение кодинга на усталую голову. Короче, вынесу замер дистанции в верхний ифзенэлс и еще выше наличие предмета, если там будет меньше нужного, то все остальное просто не должно будет проверяться и делаться, а при юзании автосборки из спеллбука дистанция по определению 0... так что вроде должно все исправиться.
Но если у кого-то есть комменты, пишите, причина фатала конкретно интересует все равно.
Загруженные файлы
16
чтение памяти по кривому адресу. наверное, кто-то до сих пор не взял безопасный RMem и фигачит по Memory[] массиву, да?
Достаточно просто проверки, что адрес для чтения или записи больше хотя бы 0x500. Таких маленьких адресов быть в любом случае не может
21
То есть все функции с гитхаба неочень и нужно с нового мемхака в теме забирать? Там эти проверки уже встроенные и/или не нужные?
А то я тут что-то еще на точку грешу, что неправильно может определяться. Когда писался код, отталкивалось от того, что если спелл без указания цели, то GetSpellTargetLoc() - это точка кастера. Теперь уже сомневаюсь и кажется, что в таком случае точки вообще нет и начинается черт знает что...
В любом случае ведь все эти функции юзались уже в др. местах, а фаталов не вызывали, фатал был до этого только после игр, а не во время, уже новая вчера залитая версия удалена, ща вот Линзу мучаю.
Если что, тема вот прямо связанная
Это из-за Линзы 99.9%, т. к. все игры происходило практически одно и то же перед фаталом.
16
фатал случается при чтении из массива, внутренний код варкрафта эту функцию не юзхает, проблема где-то в мх
21
Но сами-то по себе все функции мной ранее юзались и фатала ВО ВРЕМЯ игры НЕ вызывали.
Вероятно, несуществующая память пытается считаться все-таки из-за неправильного их использования при несуществующей точке.
Короче, инфа не сотка, но три игры подряд с линзой в последнем варианте ее кода по ссылке - фатала во время игры не было (но в прошлой версии он вроде как раз на третьей игре и словился, так что еще не факт, но все-таки...) В общем, за***ло, уже сегодня отдыхать планировалось (так вот отдых и начался... вместо отдыха фатал и снова лезть фиксить), ща еще каточку в хотс сыграю и все, наверное, будет вечером-ночью перезаписано и залито, если что, апну и эту тему, как и тему с Психопомпой (но там-то не так страшно), если никто не сможет помочь - буду дальше экспериментировать самостоятельно.
Что лучше юзать новый мемхак - уже ясно.
19
Вылет произошел во время обращения к элементу jass массива с индексом 21.
Так как это был мемхакнутый массив, произошла попытка чтения памяти по адресу 0x54.
Крашнулся твой код, так что переписывай.
Принятый ответ
21
Дошло, в чем еще могла быть проблема в том варианте кода.
Автосборка вещей происходит следующим образом. Есть вещь, есть активка-спеллбук со списком вещей и их ценой в золоте за улучшение базовой вещи (типа шмотки на +X к силе) в любую покруче (типа тех же дотовских барабанов).
При юзании активки, если золота достаточно, оно тратится, вещь исчезает и появляется другая (кстати, эту систему практически все хвалили, в совокупности с перезакупом очень удобно).
Так вот прикол в следующем... когда юзается одна из способностей спеллбука в предмете (а именно тогда фаталило), Aether Lens пытается посчитать ее параметры, ориентируясь на применившего героя. Но у героя-то эта способность пропадает вместе с предметом - предмет превращается в другой. Может, тут что-то и глючило.
Ну ладно, новый вариант кода еще посмотрим.
///////////
Added: пофлужу немного - четвертая игра подряд с линзой с новым кодом, 20 минут (для катки с ботами в ускоренном режиме это много), фатала нет. Ну см. выше.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.