Доброго времени суток всем.
Создаю карты в свое удовольствие и столкнулся с тем что во время проверки карты (с ботами) - получаю фатальную ошибку, которую пытаюсь разобрать.
Читал много статей, подобные этим:
Где рассказывают что можно установить Debug который может помочь отследить ошибку, при фатальности.
Но я не могу его установить, ибо при установке кода - редактор выдает много уведомлений об отсутствии строк и после отключает триггер полностью.
Я понимаю что неправильно его устанавливаю, поэтому это дополнительный мой вопрос к Вам.
Мои 2 вопроса, которые я бы хотел уточнить у профессиональных картоделов:
  1. Помогите расшифровать лог ошибки, которая у меня возникла на моей карте.
  2. Как устанавливать Debug, из ресурсов выше. Дабы после можно было отслеживать логи. (Инструкцию для чайника можно :с)
3(дополнительный вопрос). Как можно (или где можно научиться) расшифровать лог ошибки Варкрафта.
Сам лог с ошибкой: disk.yandex.com/d/4M0BC8EMcVdiLw
Сама фатальная ошибка: disk.yandex.com/i/sSjNgQ-OHfwe8w
Заранее спасибо Вам большое, за уделенное время и адекватные ответы. <3

я думал что в комьюнити нашем есть ребята, которые знают как отследить логи
ну не знаю комьюнити как комьюнити, половина толковых ребят бустанулись по карьерной ветке, а другая половина (или меньше) остались в варе, но они не особо горят желанием сидеть и отвечать на вопросы новичков, да и смотивировать их нормально только деньгами можно, это я тут лошок на энтузиазме (за лайки) пытаюсь тебе как-то помочь решить проблему, с горем пополам)
отследить то отследишь, даже просто те что варик тебе кидает, вот только ошибки могут быть абсолютно по разным причинам, вообще, что-то можно понять, как например утечки памяти, а что-то тупо рандом, тут тебе вряд ли какой либо профи уже поможет
системы я разобрал, нужное нашёл и перенёс на джасс, соответственно тебе тупо после каждой функции, после каждого действия нужно добавлять инфу в лог
в карте есть пример с крашем, когда юниту выдаёшь геройский инвентарь и даёшь книжку на статы
сам лог сохраняется на диск С в папке дебага (ты можешь поменять путь), в нём ты увидишь примерно это на тестовой карте
оно по факту вообще тебе может не помочь, реально, потому что, к примеру, геройский инвентарь ты можешь дать со старта игры, а крашнет из-за него спустя 10 минут игры, когда будут куча совсем других действий которые могли и не повлиять на краш вообще
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
в утечках вероятно дело, счётчик хэндлов закинь в карту посмотри что показывает, либо нагрузку вара чекни когда краш выпадет
2
в утечках вероятно дело, счётчик хэндлов закинь в карту посмотри что показывает, либо нагрузку вара чекни когда краш выпадет
Добрый, единственное что я понял - это то что мне что-то нужно закинуть.
Но я не понимаю что такое хэндлы. (нашел вопрос где ты ответил кому-то и помог реализовать код в карту. Но я слабо понимаю цель этого счетчика)
Варка вообще не нагружена была. Но иногда бывают на карте мини фризы, которые сложно заметить, но легко прочувствовать.
Данная проблема была 1 раз, за все случаи, восооздать ситуацию не могу.
28
zpxo, утечка памяти это когда ты создаёшь какой-то объект и не обнуляешь его в последствии, например двигаешь юнита по точкам, не уничтожая их, либо создаёшь эффекты/даммиков и тоже не уничтожаешь их, не обнуление локальных переменных так же влечёт за собой проблемы, оно остаётся висеть в памяти и нагружает вар, чем их больше тем сильнее начинает падать фпс, лагать, фризить и т.п.
счётчик хэндлов позволяет отследить есть ли какой-либо неконтроллируемый рост объектов в карте
2
zpxo, утечка памяти это когда ты создаёшь какой-то объект и не обнуляешь его в последствии, например двигаешь юнита по точкам, не уничтожая их, либо создаёшь эффекты/даммиков и тоже не уничтожаешь их, не обнуление локальных переменных так же влечёт за собой проблемы, оно остаётся висеть в памяти и нагружает вар, чем их больше тем сильнее начинает падать фпс, лагать, фризить и т.п.
счётчик хэндлов позволяет отследить есть ли какой-либо неконтроллируемый рост объектов в карте
А как мне счетчик подключить?
Касательно дами юнитов - у них хп 2 единицы с отрицательным регеном хп.
Выходит что они погибают сами, через 2 секунды.
Или это не решение?
Касательно локальных переменных слабо понял, переменные есть. Но что из них считается локальным?
Также есть глобальный триггер который берет каждого юнита на карте и создает спецэффект, каждые 2 секунды. Но его длительность равна 1-2 секунде, эффекта. (это длится 60 секунд) Обычно в этот момент микролаг есть, но после нормально все.
А именно найти способ записывать все эти спецэффекты и удалять их - не понимаю как. Ибо действие совершается на каждым юнитом, а как записывать в переменную каждый эффект (если их к примеру штук 100+ в секунду).
28
zpxo, эффект никуда не пропадает по окончании анимации, лол, ты же когда юниту задаёшь какую-то анимацию он же не исчезает из игры по окончании? его нужно удалить, отрицательный реген нормально, желательно ещё убрать разлагаемость/воскрешение если ты оставил
счётчик хэндлов это просто 50 строк кода, достаточно в шапку карты закинуть если вджассом пользуешься
в варе есть локальные и глобальные, вероятно локальными ты не пользовался так что можешь забить, их отличие в том, что используются в пределах своей функции, а глобалки везде, только вторые всё равно перезапишутся в последствии, а первые нужно обнулять

вероятно у тебя спецэффекты и текут, если ты не удаляешь их
2
zpxo, эффект никуда не пропадает по окончании анимации, лол, ты же когда юниту задаёшь какую-то анимацию он же не исчезает из игры по окончании? его нужно удалить, отрицательный реген нормально, желательно ещё убрать разлагаемость/воскрешение если ты оставил
счётчик хэндлов это просто 50 строк кода, достаточно в шапку карты закинуть если вджассом пользуешься
в варе есть локальные и глобальные, вероятно локальными ты не пользовался так что можешь забить, их отличие в том, что используются в пределах своей функции, а глобалки везде, только вторые всё равно перезапишутся в последствии, а первые нужно обнулять

вероятно у тебя спецэффекты и текут, если ты не удаляешь их
Я ели как нашел этот код, но мне кажется он неверный, либо я что-то не то делаю.
Он при инсталляции выдает кучу неверных строк и отключает триггер.
Касательно эффектов, а как его можно удалить/записать? Если эффект накладывается через функцию "Выбрать каждого юнита и совершить действие". Ибо я не могу взять и записать все эффекты в 1 переменную. А уничтожаю только последнюю созданную :( по логике варика последняя созданная - это именно последняя созданная
Спасибо за объяснения, уже стало более что-то понятное :)
Но я все же остался в тупике хд
28
zpxo, ну сек, для начала попробуй такую конструкцию, если эффект не исчезает с юнитов сразу же как накладывается (то есть что ты вообще его видишь), то всё норм, но бывает так, что уничтожение эффекта не даёт последнему проиграть анимку
если ты создаёшь эффект в позиции юнита, а не на самом юните, то позицию тоже нужно переменить, создавать в ней, а потом удалять кастомскриптом вместе с эффектом

Я ели как нашел этот код, но мне кажется он неверный, либо я что-то не то делаю.
Он при инсталляции выдает кучу неверных строк и отключает триггер.
ты в каком редакторе работаешь? если джнгп то нужно включить вджасс и сджасс
(либо просто вджасс, если обернёшь таблицу рекордов в globals endglobals)
Загруженные файлы
2
zpxo, ну сек, для начала попробуй такую конструкцию, если эффект не исчезает с юнитов сразу же как накладывается (то есть что ты вообще его видишь), то всё норм, но бывает так, что уничтожение эффекта не даёт последнему проиграть анимку
если ты создаёшь эффект в позиции юнита, а не на самом юните, то позицию тоже нужно переменить, создавать в ней, а потом удалять кастомскриптом вместе с эффектом

Я ели как нашел этот код, но мне кажется он неверный, либо я что-то не то делаю.
Он при инсталляции выдает кучу неверных строк и отключает триггер.
ты в каком редакторе работаешь? если джнгп то нужно включить вджасс и сджасс
(либо просто вджасс, если обернёшь таблицу рекордов в globals endglobals)
Спасибо, сегодня/завтра попробую.
Вопрос: А если я создам анимацию через способность (каст именно), вместо триггера. Будет ли засорять такая анимация память? Я думаю что эффекты из способностей самостоятельно удаляются по завершению? Или они привязаны к какой-то длительности? К примеру "Длительность воздействия на юнита".
Извините за мою наглость, но я овощ в коде(
А можно инструкцию как вджасс открыть? У меня просто редактор о.о
28
А если я создам анимацию через способность (каст именно), вместо триггера. Будет ли засорять такая анимация память? Я думаю что эффекты из способностей самостоятельно удаляются по завершению? Или они привязаны к какой-то длительности? К примеру "Длительность воздействия на юнита"
да, если через редактор объектов делать всё норм будет
zpxo:
А можно инструкцию как вджасс открыть?
ну тебе джнгп так-то нужен, это модифицированный редактор со снятыми лимитами и прочими ништячками, там с кодом намного удобнее работать и соответственно есть нужные диалекты, а вообще, я могу просто переписать тот код на обычный джасс, но тогда тебе нужно будет пару переменных создать и гуишный триггер
29
Предупреждение автору публикации

1 пункт: 10.1 Размещение нескольких вопросов в одном ресурсе.
2
1 пункт: 10.1 Размещение нескольких вопросов в одном ресурсе.
Извините заранее за нарушение пункта 10.1.
Но, вопрос по сути один, просто он разделен на 2 подпункта связанные между собой.
Лог + дебаг + счетчик хэндов = одна суть, в решении проблемы моей.

ну тебе джнгп так-то нужен, это модифицированный редактор со снятыми лимитами и прочими ништячками, там с кодом намного удобнее работать и соответственно есть нужные диалекты, а вообще, я могу просто переписать тот код на обычный джасс, но тогда тебе нужно будет пару переменных создать и гуишный триггер
По ссылке там 1.28 версии и 1.27 версии.
А я карту делаю на версию 1.26а - Редактор из раздела "1.27 и ниже экспериментальная сборка" будет работать с моей версией?
Если Вам не сложно я был бы рад получить от Вас тот код в джасс и краткую инструкцию по установке.

ну сек, для начала попробуй такую конструкцию, если эффект не исчезает с юнитов сразу же как накладывается (то есть что ты вообще его видишь), то всё норм, но бывает так, что уничтожение эффекта не даёт последнему проиграть анимку
Да, забыл написать. Я попробовал данный метод и вспомнил почему его не использовал. Ибо он сразу уничтожает анимацию, она только начинает воспроизведение и сразу удаляет ее из игры. Тем самым спецэффект не успевает толком воспроизвестись. А ожидание (wait) я туда не могу вставить, ибо через действие "Выбрать каждого..." ожидание не работает. 😰
28
zpxo, ты же сам заявил что у тебя 2 вопроса)
По ссылке там 1.28 версии и 1.27 версии.
А я карту делаю на версию 1.26а - Редактор из раздела "1.27 и ниже экспериментальная сборка" будет работать с моей версией?
по ссылке там всё нормально, я как бы сижу же на 1.26 и пользуюсь джнгп)
просто нажми на кнопку скачать
Если Вам не сложно я был бы рад получить от Вас тот код в джасс и краткую инструкцию по установке.
просто скопируй и закинь триггер к себе в карту

ладно, тот периодичный эффект что ты накладываешь на всех юнитов он одинаковый или для каких-то отличается? можно просто в массив все эффекты записать, запустить таймер и через время пройтись по ним и удалить, но если время разное, то вероятно придётся с периодиком запускать с указанием времени анимации

и ещё, микрофриз происходит прям в самом начале игры или спустя какое-то время?
2
ладно, тот периодичный эффект что ты накладываешь на всех юнитов он одинаковый или для каких-то отличается? можно просто в массив все эффекты записать, запустить таймер и через время пройтись по ним и удалить, но если время разное, то вероятно придётся с периодиком запускать с указанием времени анимации
Действие "Выбрать каждого юнита..." совершает действия в том количестве - сколько юнитов выбрано.
Я там просто логически не могу понять как их всех засунуть в массив переменной с типом "Спецэффект". Ибо он не меняет цифру массива, а просто перезаписывает каждый раз переменную с выбором каждого юнита. 😬
и ещё, микрофриз происходит прям в самом начале игры или спустя какое-то время?
Спустя некоторое время. Но я думаю это происходит из-за того что Вы писали выше.
Так как у меня много триггеров связано было с созданием спецэффекта на юните. Без удаления.
Поэтому я сейчас переиграл этот момент. Буду наблюдать.
просто скопируй и закинь триггер к себе в карту
Спасибо огроменное, добрый человек. сейчас попробую загрузить. ⭐️

Спасибо огроменное, добрый человек. сейчас попробую загрузить. ⭐️
А показатель, со старта запуска 4100 - это много? 😆
28
zpxo, вот тебе маленький пример, на его основе сделай удаление всех эффектов которые не удаляются сразу после создания, я сделал на примере хила (он тоже не проигрывает до конца анимку если удалить)
ты можешь отключить первые 2 триггера после коммента и включить последний чтобы наблюдать рост утечек
28
А показатель, со старта запуска 4100 - это много? 😆
нет, это мало, имей ввиду, хэндлы это юниты, разрушаемые декорации (деревья, баррикады), предметы, это всё не утечки само собой потому что используется всю игру, юниты и предметы удаляются при уничтожении спустя время (с рунами только беда может быть)

как бы по нормальному объяснить..
к тому, что утекает, ты не сможешь больше никогда обратиться если не сделаешь это прямо после использования или если не закинешь в глобалку, например к юниту ты можешь обратиться в любой момент игры просто выбрав его на карте или любыми другими событиями, а вот к эффекту, если ты не запеременишь его и не удалишь после анимации (как в примере выше), либо сразу же после создания не удалишь, если позволяет, обратиться больше никак не сможешь, нет такого действия допустим как "выбрать все эффекты на карте"

но повторюсь, утекают хэндлы, т.е. объекты. строки, реальные, целочисленные и подобное не течёт

вот тут подробнее
2
вот тебе маленький пример,
Спасибо, что-то не доперло сразу, что я могу внутри данного действия использовать арифметику с "+1".
Ведь это 100% дает возможность удалить эффекты которые были записаны ранее.
Это ведь правда круто!

нет, это мало, имей ввиду, хэндлы это юниты, разрушаемые декорации (деревья, баррикады), предметы, это всё не утечки само собой потому что используется всю игру, юниты и предметы удаляются при уничтожении спустя время (с рунами только беда может быть)
Спасибо большое Вам за помощь!
За уделенное время! Очень приятно что в наше время можно встретить хороших людей.
Спасибо, что помогли объяснить где может быть проблема и как её исключить методом оптимизации.
28
zpxo, успокойся, не спеши с благодарностями пока это реально не поможет решить проблему, если же всё окей то просто закрой вопрос
2
zpxo, успокойся, не спеши с благодарностями пока это реально не поможет решить проблему, если же всё окей то просто закрой вопрос
Сейчас карту тестил и произошел вновь фатал. Который сработал теперь в другом временном событии. (Который указал в шапке вопроса - там в другое время произошел сбой).
Счетчик показывал 7к+ и микролагов не было, после удаления спецэффектов.

Теперь сижу и ковыряю триггеры, ибо приблизительно понимаю в какой этап произошел фатал...
Думаю это из-за того что 1 триггер не отработал как следует свои действия в середине карты (микробаг, который я, наверное, совершил при написании триггера).
Сейчас буду смотреть, но если есть возможность разобрать лог и сказать где "пробел" - буду признателен.
2
Доброго времени суток. Попытался воссоздать ситуацию в момент Фатала - но вылета не было. Спокойно все отработало.
Если бы я знал как расшифровать лог ошибки - была бы новая информация о том что происходит.(((
Но не могу... Даже ДебагЛог не могу поставить, точнее не хватает мозгов это сделать.
В новом редакторе, который вы посоветовали - я его устанавливаю, но все равно получаю ошибки из самого кода дебага, при инициализации.
(Также заметил, при попытке оставить этот дебаглог в карте, при инициализации варка открывается в главном меню и все)
Пытался вставить этот код с доп триггерами: (Но он постоянно ругается на часть с сохранением: "private SavePath = Dir\\Debug"
//TESH.scrollpos=41
//TESH.alwaysfold=0
//@ Debug Log library by DoctorGester, 2011, v 1.0

#define{
    private SavePath = Dir\\Debug
    private SaveOnHardDrive = true
    private HardDriveLetter = C
    private AutoSaveLog = true
    private LogSavePeriod = 1.0
}

library DebugLog initializer DebugLogInit{

    #include "cj_types_priv.j"

    private string DebugLog[8192]
    private int CurrentString = 0
    private int Seconds = 0
    private int Minutes = 0
    private constant int StringLimit = 200
    
    void LogAdd(string s){
        string sec = I2S(Seconds)
        if (Seconds < 10){
            sec = "0" + sec
        }
        DebugLog[CurrentString] = DebugLog[CurrentString] + ("[" + I2S(Minutes) + ":" + sec + "] " + s + "\n") /* DebugLog[CurrentString] += (s + "\n") cJass bug ! */
        if (StringLength(DebugLog[CurrentString]) >= StringLimit){
            CurrentString++
        }
    }
    
    void LogClear(){
        int i = 0
        while (i <= CurrentString){
            DebugLog[i] = ""
            i++
        }
        CurrentString = 0
    }
    
    void LogUpdate(){
      PreloadGenClear()
      PreloadGenStart()
      int i = 0
        while (i <= CurrentString){
            Preload("\")\n" + DebugLog[i] + "\n(\"")
            i++
        }
      #if SaveOnHardDrive
            PreloadGenEnd(`HardDriveLetter` + ":\\" + `SavePath` + ".txt")
      #else
            PreloadGenEnd("\\" + `SavePath` + ".txt")
      #endif
    }
    
    private void DebugLogOnTimer(){
        Seconds++
        if (Seconds > 59){
            Seconds = 0
            Minutes++
        }
    }

    private void DebugLogInit(){
        #if AutoSaveLog
            TimerStart(CreateTimer(), LogSavePeriod, true, function LogUpdate)
        #endif
        TimerStart(CreateTimer(), 1., true, function DebugLogOnTimer)
        LogAdd("By DoctorGester. Last compilation: " + `DATE` + " " + `TIME`)
    }
    
}

На просторах интернета также нашел исходный код. Но не понимаю для чего он нужен и поможет ли он мне отследить фатальную ошибку с триггерами (когда там пишут про джас).
Загруженные файлы
28
(Также заметил, при попытке оставить этот дебаглог в карте, при инициализации варка открывается в главном меню и все)
вероятно потому что ты просто не включил вджасс с сджассом либо не дал скомпилироваться карте посредством сохранения (иногда нужно 2 раза) перед тестированием
2
вероятно потому что ты просто не включил вджасс с сджассом либо не дал скомпилироваться карте посредством сохранения (иногда нужно 2 раза) перед тестированием
Выходит код, который я выслал выше - он должен работать стабильно?
Вы можете мне помочь в установке дебага в карту? И объяснить работает он сам или нужно его активировать или как?
Господи, я уже готов заплатить, за знания, которые Вы можете мне дать и за Ваше потраченное время. При необходимости 😂
28
zpxo, я не знаю работает или нет, я мигом посмотрел код представленный из самого вопроса и понял принцип работы, всё

там собственно и код не нужно было смотреть, всё в описании расписано

я могу попробовать разобрать или даже перевести на обычный джасс чтобы ты мог пользоваться но честно говоря желания особо и нет

из-за того что там сджасс, ненавижу эту штуку
Загруженные файлы
2
zpxo, я не знаю работает или нет, я мигом посмотрел код представленный из самого вопроса и понял принцип работы, всё

там собственно и код не нужно было смотреть, всё в описании расписано

я могу попробовать разобрать или даже перевести на обычный джасс чтобы ты мог пользоваться но честно говоря желания особо и нет

из-за того что там сджасс, ненавижу эту штуку
Да, конечно, я понимаю. По этой причине пытаюсь только получить от Вас информацию и все)
А вот касательно момента связанного "все в описании расписано" - я как раз встал в ступор от фраз:
"ты вставляешь этот код ВЕЗДЕ во всех функциях" - Не могу понять, в каждый триггер мне вставлять этот код? Или о каких функциях идет речь?
"доводишь до рабочего состояния, чтобы ошибок не выходило" - Не могу понять в каких местах нужно "довести до рабочего". Ибо я ели как понимаю сам код, а тут еще его нужно адаптировать под меня :с
Я просто при всем своем желании сидел несколько часов и ковырялся, пробовал, тыкал, изучал. Но тщетно...
28
"ты вставляешь этот код ВЕЗДЕ во всех функциях" - Не могу понять, в каждый триггер мне вставлять этот код? Или о каких функциях идет речь?
угум, прям во все триггеры после каждой функции, я попробовал перевести это на нормальный джасс но это дичь какая-то, мне больно(
2
угум, прям во все триггеры после каждой функции, я попробовал перевести это на нормальный джасс но это дичь какая-то, мне больно(
Вот и я о том же, типа вставить этот код в 100 триггеров, но это слишком сильно.
Так или иначе спасибо большое за помощь.
Видимо мой вопрос так и не закроется :( я думал что в комьюнити нашем есть ребята, которые знают как отследить логи
Чтобы оставить комментарий, пожалуйста, войдите на сайт.