Очень прошу помочь советом или знаниями. Если кто-то поможет решить проблему, буду очень-очень благодарен (о вознаграждении спросите в ЛС).
Версия Warcraft 1.26. Через 10-60 секунд после загрузки сохранённой игры карта вылетает с критической ошибкой. UnrealJassSpy не показывает ничего криминального в Jass функциях. Единственная странность, он пишет что вызывались функции (такие как GetRandomLocInRect, GetRandomDirectionDeg и другие) которых в коде карты нет.
Знаю, что после загрузки сохранённой игры перестаёт работать функция OrderId2String . Есть ли ещё функции 1.26 которые перестают работать после загрузки?
Может ли быть эта ошибкой стандартной, в стиле попытка обратится к некорректным ячейкам массива [-1]?
Ошибка проявляется только после загрузки сохранений.
Сохранение (мультиплеер) и карта:

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

Нашёл причину вылета.
У героя был Спеллбук, в спеллбуке была пассивная способность аура "Боевой марш". В процессе игры герой умирал и воскрешался. Если после воскрешения сохраниться и загрузиться вновь, то вылетает с ошибкой.
Исправил следующим образом. Отследил сохранения и в этом триггере отключал все пассивки в Спелбуке (SetPlayerAbilityAvaible() на false). Через малое время после сохранения вновь их активирую.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
4 года назад
0
Ну само собой при сломанном массиве тут же упадет... Это кстати одна из причин почему в картах с антихаками или мемхаком отключено сохранение.
2
16
4 года назад
2
у абилки потерялся хозяин и игра не поняла прикола
0
22
4 года назад
0
quq_CCCP:
Ну само собой при сломанном массиве тут же упадет... Это кстати одна из причин почему в картах с антихаками или мемхаком отключено сохранение.
Мемхаков и антихаков в карте нет. То что сломан массив просто предположение.

DracoL1ch:
у абилки потерялся хозяин и игра не поняла прикола
Всмысле сломался GetUnitAbilityLevel()? Или событие SPELL_EFFECT?
2
16
4 года назад
2
Не в скриптах дело, а в битом объекте, это вряд ли проблема карты, скорее игры или неправильного сохранения
0
12
4 года назад
0
Тоже замечал что при загрузке сохранной игры бывают критические ошибки , а как отключить сохранение не знаю.
1
32
4 года назад
1
Daro, есть одна либа на жассе, а есть на мемхаке.
код
globals
		timer SaveBlockTimer = CreateTimer( )
		dialog PreventSave___Dialog = DialogCreate()
	endglobals
		
	function PreventSave___Exit takes nothing returns nothing
		call DialogDisplay(GetLocalPlayer(), PreventSave___Dialog, false)
	endfunction

	function PreventSave___StopSave takes nothing returns boolean
		local boolean GameAllowSave = false

		if GameAllowSave == false then
			call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Save Game is Disabled")
			call DialogDisplay(GetLocalPlayer(), PreventSave___Dialog, true)
		endif

		call TimerStart( SaveBlockTimer, 0.00, false, function PreventSave___Exit)

		return false
	endfunction

	function AntiSaveSystemInit takes nothing returns nothing
		local trigger AntiSaveLocalTrigger = CreateTrigger()
		call TriggerRegisterGameEvent( AntiSaveLocalTrigger, EVENT_GAME_SAVE )
		call TriggerAddCondition( AntiSaveLocalTrigger, Filter(function PreventSave___StopSave ) )
		set AntiSaveLocalTrigger = null
	endfunction
Подробнее тут
0
22
4 года назад
Отредактирован makkad
0
Нашёл причину вылета.
У героя был Спеллбук, в спеллбуке была пассивная способность аура "Боевой марш". В процессе игры герой умирал и воскрешался. Если после воскрешения сохраниться и загрузиться вновь, то вылетает с ошибкой.
Исправил следующим образом. Отследил сохранения и в этом триггере отключал все пассивки в Спелбуке (SetPlayerAbilityAvaible() на false). Через малое время после сохранения вновь их активирую.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.