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

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

Возможно полезная информация:
В карте ~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:
Всё из за настройки "Качество текстур"
А что делать, я не совсем понял)
Наверное, какая-то текстура имеет размеры не кратные степени двойки.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
18
5 лет назад
0
Вот блин
Всё из за настройки "Качество текстур"

А что делать, я не совсем понял)
0
28
5 лет назад
Отредактирован PT153
0
можно подробнее?)
А зачем инициализировать 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, защищает переменную от случайного переназначения.

А что делать, я не совсем понял)
Найти проблемную модель и выяснить, почему она крашит.
3
26
5 лет назад
3
UrsaBoss:
Всё из за настройки "Качество текстур"
А что делать, я не совсем понял)
Наверное, какая-то текстура имеет размеры не кратные степени двойки.
Принятый ответ
0
18
5 лет назад
0
8gabriel8, благодарю
0
26
5 лет назад
0
Экспортируй все файлы в папку и начинай просмотр текстур
0
32
5 лет назад
0
8gabriel8, Про степень двойки интересное заключение, а как вы дошли до этого? я никогда не слышал за такое, охотно верю, это же поможет решить многие проблемы с вылетами
0
26
5 лет назад
Отредактирован 8gabriel8
0
Запамятовал уже, где-то читал, что размеры текстур должны быть степенью двойки. В свежем вопросе Obelick'а, на который выше оставил ссылку, просто решил проверить, будет ли у меня вылет, скачал его архив, увидел текстуру нестандартного размера, по привычке исправил, и всё нормально запустилось) Так с ним и открыли для себя и для вас причину многих вылетов.
0
18
5 лет назад
0
8gabriel8, бесконечно благодарю)))
удалил две текстуры, одна 1x1 и другая 70x70 - всё стало работать)))
Сейчас сделаю 2x2 и 64x64 и будет всё шикарно)
0
26
5 лет назад
0
Рад за тебя) Ну ты знаешь, как меня отблагодарить (плюсами)
0
18
5 лет назад
0
8gabriel8:
Рад за тебя) Ну ты знаешь, как меня отблагодарить (плюсами)
никогда не ставил плюсы/минусы, но сейчас уже поставил)
0
32
5 лет назад
0
Жаль, у меня ни одной текстуры не кратной 2 не нашлось =(
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.