Стал замечать что у некоторых игроков вылетает варкрафт на полосе загрузки в моей карте
У меня и у тех с кем я обычно играю ни разу не было вылета

Смог узнать побольше инфы у одного игрока:
При первой загрузке карты у него карта догрузилась до "Ожидание игроков" и через несколько секунд просто вылетел варкрафт с сообщением вроде "Приложение перестало отвечать"
При второй загрузке было тоже самое, но уже айкап отреагировал и айкап выдал фатал (а варкрафт просто вылетел без единой ошибки)
При третьей загрузке вылет был уже прямо в самом начале полосы загрузки карты вместе с черным экраном
И повторюсь, во всех случаях варкрафт не фаталил, он либо зависал, либо вылетал без ошибок

Возможно полезная информация:
В карте ~520 trackable, около двадцати триггеров и огромная туча константных массивов (на самом деле в карте не больше 50 глобальных переменных, триггеры через локалку создаются)
Всё это создается/инициализируется в main потоке, в некоторых местах ExecuteFunc
Ещё в начале игры с 0.00 секунды инициализируется мультиборд
И ещё стоит обратить внимание на этот участок кода который вызывается в main потоке через ExecuteFunc:
    void Lag()
    {
        int i = 1
        unit u = CreateUnit(Player(0), 'hfoo', 0., 0., 0.)
        RemoveUnit(CreateUnit(Player(0), 'h007', 0., 0., 0.))
        RemoveUnit(CreateUnit(Player(0), 'o006', 0., 0., 0.))
        RemoveUnit(CreateUnit(Player(0), 'o001', 0., 0., 0.))
        RemoveUnit(CreateUnit(Player(0), 'H00A', 0., 0., 0.))
        whilenot( i > 41 )
        {
            RemoveDestructable(CreateDestructable(udg_decorationID[i], 0., 0., 0., 1., 1))
            RemoveUnit(CreateUnit(Player(0), udg_units[i], 0., 0., 0.))
            UnitAddAbility(u, udg_abilityQ[i])
            UnitRemoveAbility(u, udg_abilityQ[i])
            UnitAddAbility(u, udg_abilityW[i])
            UnitRemoveAbility(u, udg_abilityW[i])
            UnitAddAbility(u, udg_abilityE[i])
            UnitRemoveAbility(u, udg_abilityE[i])
            UnitAddAbility(u, udg_abilityR[i])
            UnitRemoveAbility(u, udg_abilityR[i])
            UnitAddAbility(u, udg_cardNext[i])
            UnitRemoveAbility(u, udg_cardNext[i])
            i++
        }
        RemoveUnit(u)
        u = null
    }

UrsaBoss:
Всё из за настройки "Качество текстур"
А что делать, я не совсем понял)
Наверное, какая-то текстура имеет размеры не кратные степени двойки.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
Ещё в начале игры с 0.00 секунды инициализируется мультиборд
Поставь 0.01 хотя бы, это и может крашить, как писалось в некоторых туториалах.

В коде, что показан, всё чисто, но я бы вынес 41 как константную глобалку)

inject на config есть?
Какие глобалки у тебя сразу имеют значение? например constant integer A = 1
18
В коде, что показан, всё чисто, но я бы вынес 41 как константную глобалку)
там define стоял, я просто для поставил туда число)
inject на config есть?
нету
Какие глобалки у тебя сразу имеют значение?
я почти всем глобалкам ставлю при объявлении null или 0 или ""
28
я почти всем глобалкам ставлю при объявлении null или 0 или ""
ну это ты зря

Тогда остаётся только инициализацию мультибоарда передвинуть, а также проверить вызовы ExecuteFunc (что имя вызываемой функции точно есть в карте) на всякий случай.
18
PT153:
Тогда остаётся только инициализацию мультибоарда передвинуть, а также проверить вызовы ExecuteFunc (что имя вызываемой функции точно было) на всякий случай.
но ещё надо учитывать что у меня и у 80% игроков всё нормально, Execute сразу можно вычеркнуть)
А насчет мультиборда я попробую
Но затестить я смогу не раньше чем завтра, поэтому можно ещё варианты предположить)
И опять повторюсь, варкрафт не крашил, просто вылет без ничего
26
UrsaBoss, у него всегда вылетает при загрузке твоей карты? Грешить только на код, который у тебя и других игроков всегда исправно работает, как-то мелко.
18
PT153:
ну это ты зря
можно подробнее?)

8gabriel8:
UrsaBoss, у него всегда вылетает при загрузке твоей карты? Грешить только на код, который у тебя и других игроков всегда исправно работает, как-то мелко.
да, при этом на других картах которые намного тяжелее моей - всё нормально
И ещё у некоторых игроков такие же вылеты

Ещё однажды заметил ситуацию, игрок со второго раза смог прогрузить карту, но его выкинуло через 5-10 сек после старта игры (он даже успел выбрать несколько карт)
26
Запускал свою карту на минимальных настройках графики?
18
8gabriel8:
Запускал свою карту на минимальных настройках графики?
хм, ща попробую
Да, вылетел варкрафт с черным экраном. Нифига себе)))
Сейчас научным методом выясню какая настройка делает такое
18
Вот блин
Всё из за настройки "Качество текстур"

А что делать, я не совсем понял)
28
можно подробнее?)
А зачем инициализировать null, "" или 0? Все глобалки, что имеют присвоение в своём определении, выполняются в то время, как игрок кликнул на карту в списке карт. Потому лучше либо вообще ничего не прописывать, либо прописать нормальные значения, например:
globals
    constant trigger TestBuildMase = CreateTrigger()
    constant trigger TestLevelUp = CreateTrigger()
    constant trigger TestPauseTime = CreateTrigger()
    constant trigger TestResumeTime = CreateTrigger()
    constant trigger TestKillMinion = CreateTrigger()
    constant trigger TestCreateHero = CreateTrigger()
endglobals
Однако не для всех это работает. GetLocalPlayer(), CreateRegion(), CreateLeaderboard, CreateMultiboard() нельзя использовать в определении глобалок, они крашнут игру, как только игрок кликнет на карту. А, вот например, InitHashtable(), CreateTimer(), CreateTrigger() карту не крашат, потому можно сделать так:
globals
    constant hashtable Hash  =InitHashtable()
    constant timer Timer = CreateTimer()
endglobals
А ещё присвоение во время определения экономит место и, при использовании с constant, защищает переменную от случайного переназначения.

А что делать, я не совсем понял)
Найти проблемную модель и выяснить, почему она крашит.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.