Способ №1

1. Заходим в _g.script и ищем функцию printf(fmt,...)
2. Закоментируйте все что внутри ее
3. Дальше в самый конец добавляем:

amk_dbg.log2(fmt)
amk_dbg.log2(string.format(fmt,...))

Чтобы получилось:
function printf(fmt,...)
--[[
local is_g = 0
local result = fmt
if debug == nil then
log(string.format(fmt,...))
return
end
local info_table = debug.getinfo(2)
local script_name = string.gsub(info_table.short_src, "%.script", "")
script_name = string.gsub(script_name, "gamedata\\scripts\\", "")
if scripts_to_print[script_name] == false then return end
script_name,is_g = string.gsub(script_name, "_g", "")
if is_g == 0 then
result = script_name..": ("..info_table.currentline.."):"..fmt
else
result = fmt
end
log(string.format(result,...))
]]
amk_dbg.log2(fmt)
amk_dbg.log2(string.format(fmt,...))
end

4.Создаем файл amk_dbg.script и пишем в него:

function log(fmt, ...)
local msg = string.format(fmt, ...)
local msg_no_ws = string.gsub(msg, "%s", "_")
get_console():execute("load ~~~dbg:" .. msg_no_ws)
end

function log2(msg)
local msg_no_ws = string.gsub(msg, "%s", "_")
get_console():execute("load ~~~dbg:" .. msg_no_ws)
end

Все, функция восстановлена. Теперь можно смотреть что же там нам игра пишет.

Способ №2

1. Качаем эту дллку: дллку

Она уже содержит:
· можно кататься в ЗП на машинках
· добавлены консольные команды:

o fov - угол обзора игрока
o ph_timefactor - скорость течения времени при просчете физики

· в ПДА можно добавлять свои разделы. ГГ будет получать инфопорцию при выборе нового раздела.
· разблокировано выкидывание из ящиков с помощью функций drop_item и drop_item_and_teleport
· убран вылет "cannot find rank for ..." при выкидывании оружия, не прописанного в mp_ranks
· добавлены глобальные функции

log1(string) - нормальный вывод текста в консоль вместо нерабочей log
flush1() - запись выведенного в консоль текста на диск, вместо нерабочей flush
в пространство имён level добавлены функции:

level.get_target_dist() - возвращает float - расстояние до точки, на которую смотрит камера. Это то число, которое высвечивается под прицелом.
level.get_target_obj() - возвращает game_object - объект, на который смотрит камера. Если ни на кого, то возвращает nil.

в класс CUIStatic возвращена возможность вращать текстуру. Для этого добавлен метод:
SetHeading(Frect) - угол вращения в радианах передаётся в поле x объекта-аргумента.
для актора добавлена возможность устанавливать колбек на получение хита

Сделали ее Kolmogor и Malandrinus

2. Заходим в _g.script и находим function printf(fmt,...)
3. В этой функции меняем log на log1 чтобы получилось так:

function printf(fmt,...)
local is_g = 0
local result = fmt
if debug == nil then
log1(string.format(fmt,...))
return
end

local info_table = debug.getinfo(2)
local script_name = string.gsub(info_table.short_src, "%.script", "")
script_name = string.gsub(script_name, "gamedata\\scripts\\", "")
if scripts_to_print[script_name] == false then return end
script_name,is_g = string.gsub(script_name, "_g", "")
if is_g == 0 then
result = script_name..": ("..info_table.currentline.."):"..fmt
else
result = fmt
end
log1(string.format(result,...))
end