Всем доброго времени суток.
Версия Warcraft 3 1.26a. После загрузки сохранённой игры пропадают эффекты молний. А при попытке их удалить/переместить игра вылетает с Fatall Error. Как обычно обходится эта проблема?
В тестовой карте через 1 сек создаётся молния. Напечатав '1' она удаляется.

Принятый ответ

После загрузки сохранённой игры пропадают эффекты молний.
Может быть молнии не сохраняются в игре, а при загрузке их уже нет? Проверил вашу карту. Информация в переменных не сохраняется, даже в хэше. Если это так, то нужно сохранять их как-то по-другому. Там координаты, цвет

По существу переменная сохраняет молнию, даже, если она удалена или уже не существует. В ней остается информация хэндла. Если двигать или удалять несуществующую, то приводит к фаталу. А проверить существует ли молния или нет - никак. Даже просто достать информацию цвета молнии ARGB приводит к этому.
Я в своей карте после удаления обнуляю переменную
call DestroyLightning(udg_lightning_1[i])
set udg_lightning_1[i] = null

if GetHandleId(udg_lightning_1[i]) > 0 then
    call DestroyLightning(udg_lightning_1[i])
	set udg_lightning_1[i] = null
 endif
если только по хэндлу проверять или молния!=null, то тогда нужно всегда нулить переменную. Тк переменная сохраняет хэндл, даже, если она удалена или не существует. При сохранении игры удаляешь все, а при загрузке пересоздаешь

Драколич говорил, что каждая молния создается для игрока локально.
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
27
4 года назад
Отредактирован MpW
2
После загрузки сохранённой игры пропадают эффекты молний.
Может быть молнии не сохраняются в игре, а при загрузке их уже нет? Проверил вашу карту. Информация в переменных не сохраняется, даже в хэше. Если это так, то нужно сохранять их как-то по-другому. Там координаты, цвет

По существу переменная сохраняет молнию, даже, если она удалена или уже не существует. В ней остается информация хэндла. Если двигать или удалять несуществующую, то приводит к фаталу. А проверить существует ли молния или нет - никак. Даже просто достать информацию цвета молнии ARGB приводит к этому.
Я в своей карте после удаления обнуляю переменную
call DestroyLightning(udg_lightning_1[i])
set udg_lightning_1[i] = null

if GetHandleId(udg_lightning_1[i]) > 0 then
    call DestroyLightning(udg_lightning_1[i])
	set udg_lightning_1[i] = null
 endif
если только по хэндлу проверять или молния!=null, то тогда нужно всегда нулить переменную. Тк переменная сохраняет хэндл, даже, если она удалена или не существует. При сохранении игры удаляешь все, а при загрузке пересоздаешь

Драколич говорил, что каждая молния создается для игрока локально.
Принятый ответ
0
16
4 года назад
0
Нулевой хендл - это когда сохранен ноль в переменной. При загрузке там, возможно, число, поэтому проверить невозможно. Но есть событие "игра загружена", когда можно все молнии перерисовать, например.
0
22
4 года назад
0
Steal nerves
Спасибо. Попробовал сделать почти как ты сказал. Только не стал отслеживать событие загрузка игры.
Сделал систему, которая создаёт молнии функцией
function NewLightning takes string codeName, boolean checkVisibility, real x1, real y1, real z1, real x2, real y2, real z2 , real red, real green, real blue, real alpha , integer hid, integer j returns lightning
и записывает их в стек. При сохранении игры, все молнии в стеке удаляются. Запускается таймер на 0.0 секунд. После этого, все молнии воссоздаются вновь.
В тестовой карте аналогично 1 - удаляет молнию. 2 - перемещает.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.