Этот метод может помогать выявить некоторые стабильные или нестабильные (если у вас терпения хватит) безлоговые вылеты. Сам пользуюсь методом, часто помогает. Скажу сразу, этот метод только для скриптеров, остальные не поймут, что в логе написано. Итак, будем изменять функцию printf() в файле _g.script. Смотрим ее и приводим к следующему виду:
function printf(fmt,...) local con = get_console() con:execute(string.gsub(string.format(fmt,...), " ", "_")) con:execute("flush") end
Таким образом, в лог принудительно пишется вся информация, идущая в консоль в процессе игры.
Запускаем игру и играем/загружаем сейв. Игра будет тормозить, потому что в лог идет очень много информации. Делаем наше черное дело, при котором вылетаем, ну и ловим вылет. Смотрим лог и видим, что в нем осталось последнее действие.
После выявления вылета нам нужно все вернуть обратно, чтобы игра не тормозила и не засоряла лог. Просто закомментируем строки с execute, чтобы было так:
function printf(fmt,...) --local con = get_console() --con:execute(string.gsub(string.format(fmt,...), " ", "_")) --con:execute("flush") end
Вот, в принципе, и все.
Кстати, таким образом можно узнавать причины вылетов с логом, ругающимся на _g.script.
ColR_iT, спасибо, попробую. Хызыр, тебе тоже спасибо. Про эффект пробуждения - он есть в ЗП, когда просыпается(выход из темноты, крутит головой), только я не знаю как это сделать.
Novellus, чтобы не мучится со скриптами, я бы сделал через рестриктор. Заспавнил бы его под ГГ и воспользовался схемой sr_cutscene. ИМХО, это идеальный вариант. Подробнее о схеме, смотри вот здесь: >>Схема sr_cutscene<<. Если что не получится - спрашивай.
Novellus, абсолютно верно. Пример логики есть в статье по ссылке. В качестве совета рекомендую "вытащить" логику в отдельный конфиг, дабы по триста раз не компилировать all.spawn.
Добавлено (10.06.2012, 19:10) --------------------------------------------- ColR_iT, блин не могу репутацию поменять, только через 20 часов
Добавлено (10.06.2012, 19:15) --------------------------------------------- ColR_iT, а можешь показать как спавнить спейс рестриктор?? Это вот так
:[133] ; cse_abstract properties section_name = space_restrictor name = свое имя?? position = 163.687866210938,1.79390203952789,100.284133911133 direction = 0.0043210000731051,9.99999997475243e-007,-0.000195000000530854
Novellus, да, за исключением нескольких ремарок: 1. В самом начале убери двоеточие оно там лишнее, может не скомпилится all.spawn; 2. В поле name пишешь удобное тебе имя. Должно быть уникальным, т.е. не должно повторятся; 3. Вынося логику в отдельный файл посредством параметра cfg, имя файла необходимо писать с расширением .ltx; 4. Радиус рестриктора поставь чуть больше, хотя бы метра два, чтобы наверняка; 5. Для параметра restrictor_type укажи значение 0.