Перейти к контенту

[SoC] Ковыряемся в файлах


Рекомендуемые сообщения

malandrinus

как сделать проверку на то что объект попадает в заданный конус взгляда я толком не знаю.

в общем попробовал для начала получить угол между линией до объекта и линией взгляда эктора(точнее камеры)

сделал так:

 

--вычитаем из конечной точки начальную - получаем луч вектора  от камеры до объекта
local ray =obj:position():sub(device().cam_pos)  

согласно теоремам математики скалярное произведение векторов равно произведению их длин на косинус угла между ними
Т.о. чтобы вычислить угол нужно иметь в наличие скалярное произведение векторов
     --получаем  его
     local dp=ray:dotproduct(device().cam_dir)

    --получаем  произведение  длин векторов
    local len = ray:magnitude()* device().cam_dir:magnitude()
    
     --получаем косинус угла   --делим  скаляр векторов на  произведение их  длин 
   local cosinus = dp/len

--инвертируем косинус угла  в реальный угол через аркосинус  -  и сразу переводим радианы в градусы 
                local angle = math.acos(cosinus)*57

 

Результат - вроде выдается угол. Но только не совсем точный (+-5-7 градусов). Я подозреваю, что надо позицию камеры заменить на позицию эктора.

В общем если где ошибся то поправь пожалуйста - я с математикой не очень :ny_unsure:

Или все проще можно сделать?

 

Понятно. Я значит велосипед изобретал - столько раз вроде заглядывал в G скрипт а этих функций не приметил. :ny_smile:

Ну что ж попробуем их использовать.

Изменено пользователем Garry_Galler
Ссылка на комментарий

Garry_Galler,

для всего описанного ещё со времён ТЧ в модуле _G есть готовые функции (примерно тоже самое, что ты написал):

yaw_degree3d(v1, v2) - выдаёт угод в градусах между двумя векторами (чистый конус)

yaw_degree(v1, v2) - выдаёт угод в градусах между проекциями двух векторов на горизонтальную плоскость (полагаю в данном случае даже более полезно)

yaw(v1, v2) - аналогично предыдущей, но в радианах

Кстати, эти функции наглядно показывают, что авторы оригинальных скриптов на момент их написания не знали, как пользоваться классом vector. С использованием методов класса vector эти функции можно переписать короче и работать будут раза в три быстрее.

 

device().cam_dir:magnitude()
длина этого вектора и так единица. magnitude можно не использовать

 

 

Направление камеры по любому точнее, чем направление актора.

Изменено пользователем malandrinus
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

всем привет! Народ, вот я так и не нашел урок по добавлению нового видео в сталкера. Ну то есть чтоб все подробно описывалось, как правильно конвертировать, как добавлять и т.д.

Есть у кого ссылка на такой урок?

Thank you for your honesty.

Now fuck off and die.

Ссылка на комментарий
SCRIPT Создание Видеофайлов для игры S.T.A.L.K.E.R.. Но у меня не получилось. Не нашёл в конверторе Theora FOURCC – THEO, хотя кодеки все свежие и конвертор VirtualDubMod. Может у тебя выйдет. Изменено пользователем Starter

ЯДиск папка с крутым схроном!

Ссылка на комментарий

malandrinus

посмотрел я функции из G - да действительно разрабы использовали обычные методы математики. Скалярное произведение считается по обычной формуле. И модуль(длина) каждого вектора вычисляется по стандартной формуле как квадратный корень из сумм квадратов соответствующих координат. Причем ось y для угла проекции двух векторов на плоскость земли не учитывается – (вот из за нее то и неточность видимо у меня - так как при смещении камеры к ногам объекта - значение выравнивается почти к нулю - как и должно).

Значит при моем способе - использующем методы класса вектор все быстрее работает? :ny_wink:

 

Кстати сегодня пока рылся в инете (поднимая свои школьные знания по математике в области векторов) наткнулся на одну интересную статью по

алгоритму отслеживания столкновений с препятствиями в игровых движках. Там упоминался метод основанный на октодереве - интересно а в сталкере какой алгоритм реализован...

Изменено пользователем Garry_Galler
Ссылка на комментарий

Garry_Galler,

здесь вопрос не неточности, а скорее что хотим получить. Если измерять угол от точки взгляда, то это истинный конус взгляда выходит. Но при этом в него могут не попасть объекты рядом с ГГ и в упор не будет виден кто-либо, стоящий прямо перед ГГ (поскольку его координаты - это положение на земле). Поэтому более осмысленной будет функция yaw_degree, которая игнорирует координату y.

Между прочим, всё равно будет проблема с объектами слева и справа от "полупространства взгляда", поскольку ближе к ГГ оно сужается. Поэтому имеет смысл ближе определённого расстояния проверять на больший угол видимости. Или вообще-то стоит просто использовать угол обзора, полученный из разрешения монитора и fov камеры.

 

Значит при моем способе - использующем методы класса вектор все быстрее работает? :ny_wink:

А ты проверь. Возьми класс profile_timer и замеряй время.

 

Там упоминался метод основанный на октодереве - интересно а в сталкере какой алгоритм реализован...

Для физики не знаю, а при движении по AI сетке - никакой. Ну может только проверяется, что узел сетки кем-то занят и то не всегда. Известно же, что неписи ГГ зачастую игнорируют и сквозь стенки ходят и по воздуху гуляют.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

Увидел в статье по созданию видео насчёт кодека (что нужен не свежий, а старый) всё пошло смог увидить эти Theora FOURCC – THEO, настроил, сконвертировал, открываю файл, пишет не может воспроизвести. Сунул в игру вылет сразу же с таким логом

Expression    : fatal error
Function      : CTexture::Load
File          : E:\stalker\sources\trunk\xr_3da\SH_Texture.cpp
Line          : 181
Description   : <no expression>
Arguments     : Can't open video stream

 

Подскажите что делать? В чём ошибка?

Изменено пользователем Starter

ЯДиск папка с крутым схроном!

Ссылка на комментарий
Подскажите, а чем может быть вызвана вот такая ошибка?

 

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...ль желанийguygu\gamedata\scripts\bind_stalker.script:244: attempt to index global 'srs' (a nil value)

 

Неужели никто не знает, что это за ошибка?

 

Starter У тебя настройки кажись неправильные

 

Изменено пользователем STARTS

 

Ссылка на комментарий

всем привет. вот пытался рандомно выводить сообщения (через 5 минут)

 

и в начале игры вылет:

 

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...g\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:211: attempt to perform arithmetic on global 'last_time' (a nil value)

 

function actor_binder:update(delta)

object_binder.update(self, delta)

local time = game.time()

 

if (time - last_time) > 5*60*1000 then

local txt = msg[math.random(#msg)]

last_time = time

end

 

 

что не так?

Thank you for your honesty.

Now fuck off and die.

Ссылка на комментарий

Подскажите чем может быть вызван вылет:

Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: c:\s.t.a.l.k.e.r\gamedata\scripts\dialogs.script:34: attempt to index field '?' (a nil value)

Freedom

Ссылка на комментарий

Прошу помощи в адаптации мода артефакт для воскрешения любого НПСа к моду OGSE.

Первичную интеграцию (system.ltx и bind_stalker.script) я провел сам.

При попытке воскресить непись (помещении арта в инвентарь трупа) получаю такой вылет:

Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: g:\stalker\soc\gamedata\scripts\ressurect.script:31: attempt to index field 'convert_npc' (a nil value)

Мод точно работает с АМК (и НС то же).

ressurect.script

 

Заранее спасибо :)

Ссылка на комментарий

8push5 Да не, файл есть, и то что в нём находится, тоже кажись без ошибок

 

function create_level_changer(
    p_story_id,    -- STORY_ID нового level_changer (понадобится нам позже)
    p_position,    -- вектор, координаты точки, в которой будет располагаться центр нового level_changer
    p_lvertex_id,    -- level_vertext_id  - идентифицируют уровень, на котором будет создан level_changer
    p_gvertex_id,    -- game_vertext_id       

    p_dest_lv,    -- level_vertex_id   - идентифицируют уровень, на который level_changer будет перебрасывать игрока 
    p_dest_gv,    -- game_vertex_id
    p_dest_pos,    -- координаты точки, в которой на новом уровне окажется игрок
    p_dest_dir,    -- направрение взгляда игрока
    p_dest_level,    -- название уровня, например "L11_Pripyat"
    p_silent    -- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход)

    local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id)

    level.map_add_object_spot(obj.id, "level_changer", "")

    local packet = net_packet()
    obj:STATE_Write(packet)

    -- свойства cse_alife_object
    local game_vertex_id             = packet:r_u16()
    local cse_alife_object__unk1_f32     = packet:r_float()
    local cse_alife_object__unk2_u32     = packet:r_u32()
    local level_vertex_id             = packet:r_u32()
    local object_flags             = packet:r_u32()
    local custom_data             = packet:r_stringZ()
    local story_id                 = packet:r_u32()
    local spawn_story_id            = packet:r_u32()

    -- свойства cse_shape
    local shape_count             = packet:r_u8()
    for i=1,shape_count do
        local shape_type         = packet:r_u8()
        if shape_type == 0 then
            -- sphere
            local center         = packet:r_vec3()
            local radius         = packet:r_float()
        else
            -- box
            local axis_x_x = packet:r_float()
            local axis_x_y = packet:r_float()
            local axis_x_z = packet:r_float()
            local axis_y_x = packet:r_float()
            local axis_y_y = packet:r_float()
            local axis_y_z = packet:r_float()
            local axis_z_x = packet:r_float()
            local axis_z_y = packet:r_float()
            local axis_z_z = packet:r_float()
            local offset_x = packet:r_float()
            local offset_y = packet:r_float()
            local offset_z = packet:r_float()
        end
    end

    -- свойства cse_alife_space_restrictor
    local restrictor_type             = packet:r_u8()

    -- свойства cse_level_changer
    local dest_game_vertex_id        = packet:r_u16()  
    local dest_level_vertex_id         = packet:r_u32()  
    local dest_position             = packet:r_vec3()
    local dest_direction             = packet:r_vec3()
    local dest_level_name             = packet:r_stringZ()
    local dest_graph_point             = packet:r_stringZ()
    local silent_mode             = packet:r_u8()


    packet:w_begin(game_vertex_id)            -- game_vertex_id
    packet:w_float(cse_alife_object__unk1_f32)
    packet:w_u32(cse_alife_object__unk2_u32) 
    packet:w_u32(level_vertex_id)            -- level_vertex_id
    packet:w_u32( bit_not(193) )            -- object_flags = -193 = 0xFFFFFF3E
    packet:w_stringZ(custom_data)
    packet:w_u32(p_story_id)            -- story_id
    packet:w_u32(spawn_story_id)

    packet:w_u8(1)            -- количество фигур
--        packet:w_u8(0)            -- тип фигуры: сфера
--        packet:w_vec3(vector():set(0, 0, 0))  -- sphere_center
--        packet:w_float(3.0)
    packet:w_u8(1)            -- тип фигуры: box
    packet:w_float(2)       -- axis_x_x
    packet:w_float(0)       -- axis_x_y
    packet:w_float(0)       -- axis_x_z
    packet:w_float(0)       -- axis_y_x
    packet:w_float(4)       -- axis_y_y
    packet:w_float(0)       -- axis_y_z
    packet:w_float(0)       -- axis_z_x
    packet:w_float(0)       -- axis_z_y
    packet:w_float(4)       -- axis_z_z
    packet:w_float(0)       -- offset_x
    packet:w_float(0)       -- offset_y
    packet:w_float(0)          -- offset_z

    packet:w_u8(3)            -- restrictor_type

    packet:w_u16(p_dest_gv)            -- destination game_vertex_id
    packet:w_s32(p_dest_lv)            -- destination level_vertex_id
    packet:w_vec3(p_dest_pos)        -- destination position
    packet:w_vec3(p_dest_dir)        -- destination direction (направление взгляда)
    packet:w_stringZ(p_dest_level)        -- destination level name
    packet:w_stringZ("start_actor_02")    -- some string, always const
    packet:w_u8(p_silent)            -- 1 for silent level changing

    packet:r_seek(0)
    obj:STATE_Read(packet, packet:w_tell())
level.add_pp_effector ("teleport.ppe", 2006, false)

end


function spawn_tele_bar(obj)
   -- local art_section = "af_electra_moonlight" 
    if obj:section() == "tele_bar" then --and db.actor:object(art_section) then
        local rnd = math.random(7)
        if rnd == 1 then
            bar()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 2 then
            bar2()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 3 then
            bar3()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 4 then
            bar4()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 5 then
            bar5()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 6 then
            bar6()
            alife():release(alife():object(obj:id()))    
        else
            bar7()
            alife():release(alife():object(obj:id()))    
        end
    end
end


function bar()    
        create_level_changer(9821, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), 45474, 1188, vector():set(193.61143493652,0.097166806459427,71.526657104492), vector():set(0.0, 0.0, 0.0), "l05_bar", 1)
end    
function bar2()    
        create_level_changer(9843, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), 47206, 1270, vector():set(198.24176025391,3.271665096283,-77.252685546875), vector():set(0.0, 0.0, 0.0),    "l05_bar",1)
end
function bar3()    
        create_level_changer(9844, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),59366,   1277,  vector():set(232.64491271973,5.1447978019714,-113.61502838135), vector():set(0.0, 0.0, 0.0),    "l05_bar", 1)
end
function bar5()    
        create_level_changer(9845, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),68763, 1274, vector():set(276.64755249023,0.055086404085159,-66.742523193359), vector():set(0.0, 0.0, 0.0),    "l05_bar", 1)
end
function bar6()    
        create_level_changer(9846, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),35860, 1238,vector():set(128.80438232422,-4.8249382972717,16.76756477356),    vector():set(0.0, 0.0, 0.0),"l05_bar",  1)
end
function bar7()    
        create_level_changer(9847, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),33903,   1239, vector():set(116.09830474854,-5.3052234649658,12.649393081665), vector():set(0.0, 0.0, 0.0),    "l05_bar",  1)
end
--################################################################################
####################

function spawn_stasok()
local obj = amk.spawn_item("stasok",vector():set(-234.90,-19.67,-156.88),47,20038) 
local tbl = amk.read_stalker_params(obj) 
tbl.health = 0 
tbl.updhealth = 0 
amk.write_stalker_params(tbl, obj) 
end

function flash(first_speaker, second_speaker)
   dialogs.relocate_item_section(first_speaker, "ogg_flash_1", "in")
end

function xna(stalker, player)
return stalker:object ("pda") ~= nil
end 

function pda(first_speaker, second_speaker)
   dialogs.relocate_item_section(second_speaker, "pda", "out")
end

function af_rak(first_speaker, second_speaker)
   dialogs.relocate_item_section(second_speaker, "af_wind", "out")
end




function proverka_antirad()
            if not db.actor:object("antirad") then 
            local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Напоминаю: %c[255,230,0,0]Противорадиационные препараты отстутствуют!%c[default]Автоматический ввод препаратов невозможен " 
            db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 3000)
end

 

 

 

 

RvP, lekzd - СПС вам, жаль + немогу поставить(((((

Изменено пользователем STARTS

 

Ссылка на комментарий

STARTS,

function create_level_changer(
    p_story_id,    -- STORY_ID нового level_changer (понадобится нам позже)
    p_position,    -- вектор, координаты точки, в которой будет располагаться центр нового level_changer
    p_lvertex_id,    -- level_vertext_id  - идентифицируют уровень, на котором будет создан level_changer
    p_gvertex_id,    -- game_vertext_id       

    p_dest_lv,    -- level_vertex_id   - идентифицируют уровень, на который level_changer будет перебрасывать игрока 
    p_dest_gv,    -- game_vertex_id
    p_dest_pos,    -- координаты точки, в которой на новом уровне окажется игрок
    p_dest_dir,    -- направрение взгляда игрока
    p_dest_level,    -- название уровня, например "L11_Pripyat"
    p_silent    -- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход)
)
    local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id)

    level.map_add_object_spot(obj.id, "level_changer", "")

    local packet = net_packet()
    obj:STATE_Write(packet)

    -- свойства cse_alife_object
    local game_vertex_id             = packet:r_u16()
    local cse_alife_object__unk1_f32     = packet:r_float()
    local cse_alife_object__unk2_u32     = packet:r_u32()
    local level_vertex_id             = packet:r_u32()
    local object_flags             = packet:r_u32()
    local custom_data             = packet:r_stringZ()
    local story_id                 = packet:r_u32()
    local spawn_story_id            = packet:r_u32()

    -- свойства cse_shape
    local shape_count             = packet:r_u8()
    for i=1,shape_count do
        local shape_type         = packet:r_u8()
        if shape_type == 0 then
            -- sphere
            local center         = packet:r_vec3()
            local radius         = packet:r_float()
        else
            -- box
            local axis_x_x = packet:r_float()
            local axis_x_y = packet:r_float()
            local axis_x_z = packet:r_float()
            local axis_y_x = packet:r_float()
            local axis_y_y = packet:r_float()
            local axis_y_z = packet:r_float()
            local axis_z_x = packet:r_float()
            local axis_z_y = packet:r_float()
            local axis_z_z = packet:r_float()
            local offset_x = packet:r_float()
            local offset_y = packet:r_float()
            local offset_z = packet:r_float()
        end
    end

    -- свойства cse_alife_space_restrictor
    local restrictor_type             = packet:r_u8()

    -- свойства cse_level_changer
    local dest_game_vertex_id        = packet:r_u16()  
    local dest_level_vertex_id         = packet:r_u32()  
    local dest_position             = packet:r_vec3()
    local dest_direction             = packet:r_vec3()
    local dest_level_name             = packet:r_stringZ()
    local dest_graph_point             = packet:r_stringZ()
    local silent_mode             = packet:r_u8()


    packet:w_begin(game_vertex_id)            -- game_vertex_id
    packet:w_float(cse_alife_object__unk1_f32)
    packet:w_u32(cse_alife_object__unk2_u32) 
    packet:w_u32(level_vertex_id)            -- level_vertex_id
    packet:w_u32( bit_not(193) )            -- object_flags = -193 = 0xFFFFFF3E
    packet:w_stringZ(custom_data)
    packet:w_u32(p_story_id)            -- story_id
    packet:w_u32(spawn_story_id)

    packet:w_u8(1)            -- количество фигур
--        packet:w_u8(0)            -- тип фигуры: сфера
--        packet:w_vec3(vector():set(0, 0, 0))  -- sphere_center
--        packet:w_float(3.0)
    packet:w_u8(1)            -- тип фигуры: box
    packet:w_float(2)       -- axis_x_x
    packet:w_float(0)       -- axis_x_y
    packet:w_float(0)       -- axis_x_z
    packet:w_float(0)       -- axis_y_x
    packet:w_float(4)       -- axis_y_y
    packet:w_float(0)       -- axis_y_z
    packet:w_float(0)       -- axis_z_x
    packet:w_float(0)       -- axis_z_y
    packet:w_float(4)       -- axis_z_z
    packet:w_float(0)       -- offset_x
    packet:w_float(0)       -- offset_y
    packet:w_float(0)          -- offset_z

    packet:w_u8(3)            -- restrictor_type

    packet:w_u16(p_dest_gv)            -- destination game_vertex_id
    packet:w_s32(p_dest_lv)            -- destination level_vertex_id
    packet:w_vec3(p_dest_pos)        -- destination position
    packet:w_vec3(p_dest_dir)        -- destination direction (направление взгляда)
    packet:w_stringZ(p_dest_level)        -- destination level name
    packet:w_stringZ("start_actor_02")    -- some string, always const
    packet:w_u8(p_silent)            -- 1 for silent level changing

    packet:r_seek(0)
    obj:STATE_Read(packet, packet:w_tell())
level.add_pp_effector ("teleport.ppe", 2006, false)

end


function spawn_tele_bar(obj)
   -- local art_section = "af_electra_moonlight" 
    if obj:section() == "tele_bar" then --and db.actor:object(art_section) then
        local rnd = math.random(7)
        if rnd == 1 then
            bar()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 2 then
            bar2()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 3 then
            bar3()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 4 then
            bar4()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 5 then
            bar5()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 6 then
            bar6()
            alife():release(alife():object(obj:id()))    
        else
            bar7()
            alife():release(alife():object(obj:id()))    
        end
    end
end


function bar()    
        create_level_changer(9821, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), 45474, 1188, vector():set(193.61143493652,0.097166806459427,71.526657104492), vector():set(0.0, 0.0, 0.0), "l05_bar", 1)
end    
function bar2()    
        create_level_changer(9843, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), 47206, 1270, vector():set(198.24176025391,3.271665096283,-77.252685546875), vector():set(0.0, 0.0, 0.0),    "l05_bar",1)
end
function bar3()    
        create_level_changer(9844, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),59366,   1277,  vector():set(232.64491271973,5.1447978019714,-113.61502838135), vector():set(0.0, 0.0, 0.0),    "l05_bar", 1)
end
function bar5()    
        create_level_changer(9845, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),68763, 1274, vector():set(276.64755249023,0.055086404085159,-66.742523193359), vector():set(0.0, 0.0, 0.0),    "l05_bar", 1)
end
function bar6()    
        create_level_changer(9846, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),35860, 1238,vector():set(128.80438232422,-4.8249382972717,16.76756477356),    vector():set(0.0, 0.0, 0.0),"l05_bar",  1)
end
function bar7()    
        create_level_changer(9847, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),33903,   1239, vector():set(116.09830474854,-5.3052234649658,12.649393081665), vector():set(0.0, 0.0, 0.0),    "l05_bar",  1)
end
--################################################################################
####################

function spawn_stasok()
local obj = amk.spawn_item("stasok",vector():set(-234.90,-19.67,-156.88),47,20038) 
local tbl = amk.read_stalker_params(obj) 
tbl.health = 0 
tbl.updhealth = 0 
amk.write_stalker_params(tbl, obj) 
end

function flash(first_speaker, second_speaker)
   dialogs.relocate_item_section(first_speaker, "ogg_flash_1", "in")
end

function xna(stalker, player)
return stalker:object ("pda") ~= nil
end 

function pda(first_speaker, second_speaker)
   dialogs.relocate_item_section(second_speaker, "pda", "out")
end

function af_rak(first_speaker, second_speaker)
   dialogs.relocate_item_section(second_speaker, "af_wind", "out")
end




function proverka_antirad()
            if not db.actor:object("antirad") then 
                local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Напоминаю: %c[255,230,0,0]Противорадиационные препараты отстутствуют!%c[default]Автоматический ввод препаратов невозможен " 
                db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 3000)
            end
end

 

 

2 ошибки были:

случайно сделал перенос в комментарии "--########"

пропустил один end в конце

 

в следующий раз юзай lua checker

i-igroman.ru - Мой, принципиально новый сайт о компьютерных играх

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...