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

Скриптование


Svoboда

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

помогите кто нибуть нужен спальник на тч ну со всеми скриптами чтобы он спать хотел каждые примерно часов 10-12 в скриптах я полный ноль самому сделать не получается

 

Добавлено через 2 мин.:

hakim лучше всего через аллспавн по моему через скрипт такие обьекты ваще нельзя заспавеить

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Люди помогите столкнулся с такой проблемой скачал ai пак 3 в 1 с этого форума который содержит -АИ pack - xStream

-AI additions - Rulix (Bak) -AI modification - Monnoroch -Собирательство. - Red75 суть проблемы добавляю некоторые амкшные скрипты и идёт вылет я их не то что добавляю я их даже в bind_stalker.script не прописал но почемуто вылетает вот с таким логом

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: ... of chernobyl\gamedata\scripts\blowout_scheme.script:80: attempt to call field 'blowout_type' (a nil value)

в скриптах я :dash2: так что сам догнать не могу

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

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Доброго времени суток всем.Народ помогите пожалуйста вот такое у меня дело,я скачал и одаптировал к своему моду АИ вертолётов в нём есть такая штука как ПЗРК дак вот суть проблемы в том что в скрипте ПЗРК можно указать только одну секцию оружия а мне нужно несколько в общем около 20 я пытался зделать это сам вот посмотрите что я сделал не так

function get_dir_to_obj(self_pos,obj_pos)
    return obj_pos:sub(self_pos):normalize()
end

function get_dir_to_obj_2d(self_pos,obj_pos)
    self_pos.y = 0
    obj_pos.y = 0
    return obj_pos:sub(self_pos):normalize()
end

function get_sun_dir()
    --читаем погоду из конфига. 
    local h = level.get_time_hours() -- игровое вчеря, Ч
    local m = level.get_time_minutes() -- игровое время, М
    if h >= 22 or h < 5 then
        return vector():set(0,-1,0) -- если ночь, считаем, что солнце прямо внизу. Вертолетов там точно не летает, мешать наведению не будет.
    end
    local ini = system_ini()
    local weather = level.get_weather() -- тип погоды
    local weather_sect = ini:r_string("weathers", weather) -- секция погоды, соответствующая типу
    local h1 = h + 1
    if string.find(weather,"indoor") or weather == "sarkofag" or (weather == "yantar" and not ini:section_exist(yantar_06)) then
        h = 0
        h1 = 12
    end
    local weather_time, time_sect, sun_dir, split, sav, sah, sav1, sah1
    if h < 10 then weather_time = "0"..tostring(h)..":00:00" else weather_time = tostring(h)..":00:00" end -- какой час погоды в текущей секции
    if weather_time == "24:00:00" then weather_time = "00:00:00" end
    time_sect = ini:r_string(weather_sect, weather_time) -- секция текущей погоды на данный час
    sun_ang = ini:r_string(time_sect,"sun_dir")
    split = string.find(sun_ang,",")
    sav = tonumber(string.sub(sun_ang,1,split-1))
    sah = tonumber(string.sub(sun_ang,(split+1),string.len(sun_ang)))
    
    if h1 < 10 then weather_time = "0"..tostring(h1)..":00:00" else weather_time = tostring(h1)..":00:00" end
    if weather_time == "24:00:00" then weather_time = "00:00:00" end
    time_sect = ini:r_string(weather_sect, weather_time) -- секция текущей погоды на данный час
    sun_ang = ini:r_string(time_sect,"sun_dir")
    split = string.find(sun_ang,",")
    sav1 = tonumber(string.sub(sun_ang,1,split-1))
    sah1 = tonumber(string.sub(sun_ang,(split+1),string.len(sun_ang)))
    if sah1 > 180 and sah < 180 then
        sah1 = sah1 - 360
    end

    local sun_ang_v = sav + m*(sav1-sav)/60
    local sun_ang_h = sah + m*(sah1-sah)/60
    
    local s = vector():set(0,0,-1)
    local hdir = vector_rotate_y (s, sun_ang_h)
    local vdir = math.tan(sun_ang_v* -0.017453292519943295769236907684886)
    local sun_dir = vector():set(hdir.x,vdir,hdir.z) --:normalize()
    return sun_dir
end

function see_target(obj,target)
    return obj:see(target)
end


function lock_heli_actor()
    local sun_dir = get_sun_dir()
    local self_pos = db.actor:position()
    local self_dir = device().cam_dir
    local heli_pos, heli_actor_dir
    local heli_sun_angle, heli_actor_angle
    local actor_sun_angle = yaw_degree3d(sun_dir,self_dir)
    local lock_priority, lock_id = 0,nil
    if actor_sun_angle <= 20 then --захват солнца в любом случае
        return "sun"
    end
    for k,v in pairs(db.heli) do
        --if see_target(db.actor,v) then --если вертолет виден, разбираемся дальше, нет - и говорить не о чем.
        if v:get_helicopter():isVisible(db.actor) then --если вертолет виден, разбираемся дальше, нет - и говорить не о чем.
            local target_info = get_target_info(v:section())
            heli_pos = v:position()
            heli_pos.y = heli_pos.y + target_info.engine_h
            heli_actor_dir = get_dir_to_obj(self_pos,heli_pos)
            heli_actor_angle = yaw_degree3d(heli_actor_dir,self_dir)
            if heli_actor_angle <= 10/target_info.evu then -- если ПЗРК смотрит в сторону вертолета, иначе точно не захватится
                heli_sun_angle = yaw_degree3d(heli_actor_dir,sun_dir)
                local lp = 1000/(heli_pos:distance_to(self_pos))*(math.cos(heli_actor_angle*0.017453292519943295
769236907684886))^2/target_info.evu
                if heli_sun_angle > 20 then -- если вертолет не под солнцем, то его можно захватить,  иначе потеряется на фоне солнца
                    if lp > lock_priority then
                        lock_priority = lp
                        lock_id = v:id()
                    end
                end
            end
        end
    end
    return tostring(lock_id)
end

function check_lock(missile,self_pos,self_dir,sun_dir)
--    local sun_dir = get_sun_dir()
--    local self_pos = db.actor:position()
--    local self_dir = device().cam_dir
    local heli_pos, heli_missile_dir
    local heli_sun_angle, heli_missile_angle
    local missile_sun_angle = yaw_degree3d(sun_dir,self_dir)
    local lock_priority, lock_id = 0,nil
    if missile_sun_angle <= 20 then --захват солнца в любом случае
        return "sun"
    end
    for k,v in pairs(db.heli) do
        --if see_target(db.actor,v) then --если вертолет виден, разбираемся дальше, нет - и говорить не о чем.
        if missile:isVisible(v) then --если вертолет виден, разбираемся дальше, нет - и говорить не о чем.
            local target_info = get_target_info(v:section())
            heli_pos = v:position()
            heli_pos.y = heli_pos.y + target_info.engine_h
            heli_missile_dir = get_dir_to_obj(self_pos,heli_pos)
            heli_missile_angle = yaw_degree3d(heli_missile_dir,self_dir)
            if heli_missile_angle <= 20/target_info.evu then -- если вертолет в поле зрения ГСН, иначе точно не захватится. Угол обзора снижается при наличии ЭВУ
                heli_sun_angle = yaw_degree3d(heli_missile_dir,sun_dir)
                local lp = (heli_pos:distance_to_sqr(self_pos))*(math.cos(heli_missile_angle*0.017453292519
943295769236907684886))^2/target_info.evu
                if heli_sun_angle > 20 then -- если вертолет не под солнцем, то его можно захватить,  иначе потеряется на фоне солнца
                    if lp > lock_priority then
                        lock_priority = lp
                        lock_id = v:id()
                    end
                end
            end
        end
    end
    return tostring(lock_id)
end

function get_target_info(section)
    local target_info = {}
    target_info.evu = read_string(section, "evu", 1) -- экранно-выхлопное устройство, цифра - во сколько раз снижается заметность
    target_info.lipa = read_string(section, "lipa", 0) -- станция помех "Липа", max расстояние, на к-рое исказится позиция.
    target_info.flares = read_string(section, "flares", 0) -- система выброса тепловых ловушек
    target_info.engine_h = read_string(section, "engine_h", 2.7) -- высота двигателя
    return target_info
end

function launch_actor()
    local target = lock_heli_actor()
    if target ~= "nil" then
        spawn.missile(db.actor:position().x,db.actor:position().y,db.actor:position().z,
db.actor:level_vertex_id(),db.actor:game_vertex_id(),target )
    end
end

local pzrk_status = 0
local pzrk_active_timer = nil
local beep = 0
--local snd_lock = xr_sound.get_safe_sound_object([[material\$500]])
local snd_lock = xr_sound.get_safe_sound_object([[detectors\contact_8]])
local snd_lock_length = snd_lock:length()
local snd_launch = xr_sound.get_safe_sound_object([[weapons\rpg7_shoot]])
local snd_power = xr_sound.get_safe_sound_object([[weapons\generic_close]])
local launch_time = nil
local empty = nil
local ammo_total = 0
                    --db.actor:object("hunters_toz")

function update()
    local wpn_tab = {"wpn_igla","wpn_nan2_igla"}
local wpn = weapon:section()

if string.find(wpn,wpn_tab[name]) then
        sect = wpn_tab[name]
--        break
--        end
--        end

    --    if device().fov < 35 then
            local pos = db.actor:position()
            local dir = db.actor:direction()
            pos.x = pos.x + 0.1*dir.z
            pos.z = pos.z - 0.1*dir.x
            pos.y = pos.y + 1.85
            local target = lock_heli_actor()
            if target ~= "nil" and pzrk_status == 2 then
                if time_global() > beep then
                    snd_lock:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                    beep = time_global() + snd_lock_length
                end
            else
            end
            if pzrk_status == 0 and wpn:get_ammo_in_magazine() == 1 then --до подготовки к пуску
                ammo_total = wpn:get_ammo_total() -- пока не пытались готовиться к пуску, смотрим, сколько было боеприпасов.
            elseif pzrk_status == 0 and wpn:get_ammo_in_magazine() == 0 then --первый выстрел - подготовка к пуску
                --запуск системы охлаждения ГСН и гироскопа происходит в ЛЮБОМ случае, независимо от наличия захвата цели. 
                wpn:set_ammo_elapsed(1) 
                pzrk_status = 1
                pzrk_active_timer = time_global() + 40000 -- время работы источника питания не менее 40 с.
                snd_power:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
            elseif pzrk_status == 1 then --ждем 5 с, пока ракета готовится к пуску
                if wpn:get_ammo_in_magazine() == 0 then --пуск невозможен
                    wpn:set_ammo_elapsed(1) 
                end
                if time_global() > (pzrk_active_timer - 35000) then --через 5 с ракета раскочегарилась, переходим в следующий режим
                    pzrk_status = 2
                end
                if wpn:get_ammo_total() == ammo_total + 1 then
                    --к-во боеприпасов увеличилось на 1, значит пытались разрядить, а не активировать.
                    --qqq("unloaded")
                    wpn:set_ammo_elapsed(0) 
                    pzrk_status = 5
                    launch_time = time_global()
                end
            elseif pzrk_status == 2 and wpn:get_ammo_in_magazine() == 0 then --второй выстрел - пуск
                if target ~= "nil" then -- если есть захват, блокировка пуска снимается
                --    local pos = device().cam_pos
                --    local dir = device().cam_dir
                    local sun_dir = get_sun_dir()
                    if target == "sun" then
                        target_pos = vector()
                        target_pos.x = pos.x + 5000*sun_dir.x
                        target_pos.y = pos.y + 5000*sun_dir.y
                        target_pos.z = pos.z + 5000*sun_dir.z
                    else
                        target_obj = level.object_by_id(tonumber(target))
                        target_pos = target_obj:position()
                    end
                    spawn.missile(pos,db.actor:level_vertex_id(),db.actor:game_vertex_id(),target,0,
target_pos,dir,sun_dir)
                    snd_launch:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                    pzrk_status = 3
                    launch_time = time_global()
                else
                    wpn:set_ammo_elapsed(1) 
                end
            elseif pzrk_status == 2 and wpn:get_ammo_in_magazine() == 1 then -- если источник питания сдох, а ракета так и не выпущена, она пропадает
                if time_global() > pzrk_active_timer then
                    --qqq("timer_up")
                    wpn:set_ammo_elapsed(0) 
                    pzrk_status = 3
                    launch_time = time_global()
                end
            elseif pzrk_status == 3 and time_global() > launch_time + 2100 then
                --empty = alife():create("igla_tube_empty",vector():set(db.actor:position().x,db.actor:position().y+2,db.actor:positi
on().z+2),db.actor:level_vertex_id(),db.actor:game_vertex_id())
                empty = alife():create("igla_tube_empty",pos,db.actor:level_vertex_id(),db.actor:game_vertex_id())
                snd_power:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                pzrk_status = 4
                pzrk_active_timer = nil
            elseif pzrk_status == 4 then
                local tube = level.object_by_id(empty.id)
                if tube then
                    tube:set_const_force(vector():set(dir.z,0,-dir.x), 300, 150)
                    pzrk_status = 5
                end
            elseif pzrk_status == 5 and wpn:get_ammo_in_magazine() == 1 then
                pzrk_status = 0
            end
    --    end
    --qqq("pzrk: status = "..pzrk_status.." active_timer = "..tostring(pzrk_active_timer).." time = "..time_global())
    end
end

function read_string(section, value, default)
    if system_ini():line_exist(section,value) then
        return system_ini():r_float(section,value)
    else
        return default
    end
end


function dir_front(dir)
    return dir:normalize()
end

function dir_right(dir)
    return vector():set(dir.z,0,-1*dir.x):normalize()
end

function dir_up(dir)
    local dir_xz = vector():set(dir.x,0,dir.z):magnitude() -- проекция вектора dir на горизонтальную плоскость
    local dir_xz1 = vector():set((-1*dir.x) ,0,(-1*dir.z)):set_length(dir.y)
    return vector():set(dir_xz1.x ,dir_xz,dir_xz1.z):normalize()
end

function offset_to_global(pos,dir,off)
    local dir_front = dir_front(dir)
    local dir_up = dir_up(dir)
    local dir_right = dir_right(dir)
    pos.x = pos.x + dir_right.x*off.x + dir_up.x*off.y + dir_front.x*off.z
    pos.y = pos.y + dir_right.y*off.x + dir_up.y*off.y + dir_front.y*off.z
    pos.z = pos.z + dir_right.z*off.x + dir_up.z*off.y + dir_front.z*off.z
    return pos
end

 

я сменил это

local wpn = db.actor:item_in_slot(db.actor:active_slot())

if wpn and wpn:section() == "wpn_igla" then

 

на это

local wpn_tab = {"wpn_igla","wpn_nan2_igla"}

local wpn = weapon:section()

 

if string.find(wpn,wpn_tab[name]) then

sect = wpn_tab[name]

кто что знает помогите плиззззз!!!!!

 

Строгое предупреждение от модератора Куфзук
Пишем грамотно, без запятых читать это - весьма проблематично!!!

И про спойлеры не забываем!

Кстате, суть проблемы друдно улавима! Ты лишь написал, что ты криво адаптировал АИ вертолетов, ну, а что не вышло или вышло ты же упустил.

Ко всему, есть тема: AI вертолетов, где ты уже бывал, т.е. о ней знаешь.

 

Ты чего - издеваешься!?

Нарушение пунктов правил: 2.1.2 и 2.5

 

Добавлено через 14 мин.:

Я написал что адапртировал я нормально просто мне секций несколько прописать надо и всё!!!!!!!

Изменено пользователем Куфзук

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Ага STARTS спасибо

Строгое предупреждение от модератора Куфзук
За нежелание придерживаться ОБЩИХ правил форума - рид на трое суток.
Изменено пользователем Куфзук

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Доброго времени суток всем.Народ помогите пожалуйста такая проблема все наверно слышали про Interactive Music Mod дак вот я хочу сделать так что бы его можно было отключить в опциях меню игры в графе звуки такой же кнопкой как eax вот здесь

XR_3DA_2011_04_02_04_17_03_00.jpg

файл xml отвечающий за кнопку и скрипт где прописана функция кнопки я нашёл но не могу понять какую функцию и где нужно прописать чтобы моя кнопка отключения звука Interactive Music Modа работала помогите пожалуйста как мне это осуществить а то всю голову уже сломал

Изменено пользователем serega-gamer

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Привет всем народ пытаюсь совместить 2 мода Helicopter AI+PZRK и Stories revival mod v0.6 подскажите пожалуйста ка бы мне совместить эти функции в _g скрипте

function printf(fmt,...)
    log(string.format(fmt,...))
end

function qqq(n)
    local scr = true
    local con = true
    local k = "debug data QQQ "..tostring(n)
    if scr then
        news_manager.send_tip(db.actor, k, nil, nil, 5000) 
    end
    if con then
        get_console():execute    ("load "..k)    
        get_console():execute    ("flush")    
    end
end

function parse_data(str)
    local string_parts = {}
    if str == nil then
        string_parts[1] = nil
        return string_parts
    end
    local str_beg,str_end
    str_end = str
    local split_pos = find_split_pos(str_end)
    while split_pos ~= nil do
        str_beg, str_end = split_string(str_end,split_pos)
        table.insert(string_parts,str_beg)
        split_pos = find_split_pos(str_end)
    end
    table.insert(string_parts,str_end)
    return string_parts
end

function find_split_pos(str)
    local split_pos = string.find(str,",")
    if split_pos == nil then
        return nil
    end
    local br1_pos = string.find(str,"(",1,true)
    local br2_pos = string.find(str,")",1,true)
    if br1_pos ~= nil and br2_pos ~= nil and br1_pos < br2_pos and split_pos > br1_pos then
        local str_end1 = string.sub(str,(br2_pos +1),string.len(str))
        if string.find(str_end1,",") ~= nil then
            split_pos = br2_pos + string.find(str_end1,",")
        else
            split_pos = nil
        end
    end
    return split_pos
end

function split_string(str,split_pos)
    local str_beg = (string.sub(str,1,split_pos-1))
    local str_end = string.sub(str,(split_pos+1),string.len(str))
    return str_beg,str_end
end

и

function printf(fmt,...)
--    local arg={...}
--    if arg==nil or arg[0]==nil then
--        mylog(fmt)
--    else
--        mylog(string.format(fmt,...))
--    end
end

local bufferedmessages={}

function mylog(msg)
--    if db and db.actor then
--        if bufferedmessages then
--            for k,v in ipairs(bufferedmessages) do
--            db.actor:give_game_news(v, "ui\\ui_iconsTotal", Frect():set(0,0,100,100), 0, 15000)
--            end
--            bufferedmessages=nil
--        end
--   db.actor:give_game_news(msg, "ui\\ui_iconsTotal", Frect():set(0,0,100,100), 0, 15000)
--    else
--        table.insert(bufferedmessages,msg)
--    end
end

 

 

Добавлено через 2 мин.:

Забыл сказать первый код из Helicopter AI+PZRK ну а второй я думаю понятно откуда

Строгое предупреждение от модератора kokkai
Большие массивы прячем под спойлер

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Всем Привет! Помогите пожалуйста что и куда прописать что бы включить (девайс авто доктор) аптечки у меня уже работают а вот авто доктор не пашет...

-- ПОЛЕВАЯ МЕДИЦИНА --
-- Автоматическая система ввода антирада
-- автор Atrocious 2008 , отладка ошибок KamikaZze 2009 

local autoinjector = system_ini():r_s32("options","autoinjector")

local max_rad_percentage = 90
--[[radiation level, at which the system kicks in        ]]--

local monitor_long_exposure = true
--[[the system will also activate, if the user was exposed to radiation over a longer time        ]]--

local min_rad_percentage = 10
--[[minmum radiation dose, before the system counts the time (unused if monitor_long_exposure is 'false')        ]]--

local max_radiated_seconds = 20
--[[maximum time of low radiation, before anti-rads are administered (unused if monitor_long_exposure is 'false')        ]]--

local reminder = true
--[[get reminding messages, if you are out of anti-rad supplies        ]]--

local mins_till_next_remind = 60
--[[time in minutes until you get the next reminder message (unused if reminder is 'false')        ]]--

local use_text = true
--[[show text if the system has something to tell?        ]]--

local use_sounds = true
--[[play sounds if the system has something to tell?        ]]--

local use_custom_sounds = true
--[[use Half Life 1 HEV sounds? (unused if use_sounds is 'false')        ]]--

local use_scientific_kit = true
--[[disassemble scientific medkits for anti-rad usage?        ]]--

local suit_radiation = 70
local suit_bullet_proof = 50
--[[selection parameters: suits with radiation protection or bullet protection equal to 
    or higher than those two percentage values, will provide the injection system.         ]]--

local additional_suits={
    "nonos_kostum",
    "outfit_stalker_m1"
}    
--[[List of suits that use the injection system, even though they don't meet the radiation or bullet protection requirements. 
Currently on the list are Ghost's suit and a Stalker suit that can be found in the Dark Valley. 
Put new suits on top of the list. Don't forget to put " " and ,
HINT: DON'T put a comma behind the last suit name!                            ]]--

    
----------------------------------------------------------------------------
-------------------------     End of options     ---------------------------
----------------------------------------------------------------------------

function system_enabled()
    if autoinjector == 1 then return true else return false end
end

function get_max_percentage()
    if max_rad_percentage > 100 then
        max_rad_percentage = 100
    elseif max_rad_percentage < 10 then
        max_rad_percentage = 10
    end
    return max_rad_percentage/100
end

function get_min_percentage()
    if min_rad_percentage > 90 then
        min_rad_percentage = 90
    elseif min_rad_percentage < 1 then
        min_rad_percentage = 1
    end
    return min_rad_percentage/100
end

function get_suit_rad()
    if suit_radiation > 100 then
        suit_radiation = 100
    elseif suit_radiation < 0 then
        suit_radiation = 0
    end
    return suit_radiation/100
end

function get_suit_bproof()
    if suit_bullet_proof > 100 then
        suit_bullet_proof = 100
    elseif suit_bullet_proof < 0 then
        suit_bullet_proof = 0
    end
    return suit_bullet_proof/100
end

function get_rad_time()
    if max_radiated_seconds > 300 then
        max_radiated_seconds = 300
    elseif max_radiated_seconds < 0 then
        max_radiated_seconds = 0
    end
    return math.floor(max_radiated_seconds/3)
end

local last_section = " "
local last_result = false

function is_auto_injection_suit()
    local checker = 0
    local rini = system_ini()
    local suit = db.actor:item_in_slot(6)
    local section = nil
    local injection_suit_found = false
    if suit then 
        section = suit:section()
    end
    
    --
    if section and last_section == section then
        return last_result
    elseif section and rini:section_exist(section) then
        local radiation_protection = rini:r_float(section, "radiation_protection" )
        local fire_wound_protection = rini:r_float(section, "fire_wound_protection" )
        if radiation_protection >= get_suit_rad() or fire_wound_protection >= get_suit_bproof() then
               injection_suit_found = true
        else
            for k,v in pairs(additional_suits) do
                  if section == v then
                    checker = 1
                    break
--                    injection_suit_found = true
--                    Так как это происходит тут, делать нельзя. Автор скрипта неверно обращается с локальной переменной
--                    Чтобы избежать вылета, я вынес переменную ниже, а тут воткнул промежуточную переменную
                  end
              end
            --  а вот тут оно уже и отрабатывает как надо
            if checker == 1 then
                injection_suit_found = true
            end
            -- 14/02/2009 KamikaZze
        end
        last_section = section
        last_result = injection_suit_found
    end
    --
    return injection_suit_found
end

local auto_injection_active = is_auto_injection_suit()
local radiation_warning = true
local reminder_count = 0 --инициализировал по умолчанию на 0 чтобы избежать вылета функции check_antirad_supplies() при загрузке сохранения
local exposure_count = 0

function check_radiation()
    if auto_injection_active and radiation_warning and (db.actor.radiation >= get_max_percentage() or long_time_exposure) then
        if medication_delay == nil or medication_delay < time_global() then
            if db.actor:object("antirad") and not antirad_spawned then
                db.actor:eat(db.actor:object("antirad"))
                if use_text then
                    local news_text
                    if long_time_exposure then
                        news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default]Долгое нахождение в зоне повышенной радиации! %c[255,0,230,0]Применяется противорадиационный препарат."
                    else
                        news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default]Получена высокая доза радиации! %c[255,0,230,0]Применяется противорадиационный препарат."
                    end
                      db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
                  end
                if use_sounds then
                     local snd_obj
                    if use_custom_sounds then 
                        snd_obj = xr_sound.get_safe_sound_object( [[HEV\administering-anti-rad]] )
                    else
                            snd_obj = xr_sound.get_safe_sound_object( [[device\pda\pda_tip]] )
                    end
                    if snd_obj then
                        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                    end
                end
            elseif use_scientific_kit and db.actor:object("medkit_scientic") and not antirad_spawned then
                alife():release(alife():object(db.actor:object("medkit_scientic"):id()), true)
                alife():create("antirad", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
                alife():create("medkit", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
                antirad_spawned = true
                return
            elseif antirad_spawned then
                db.actor:eat(db.actor:object("antirad"))
                antirad_spawned = false
                if use_text then
                    local news_text
                    if long_time_exposure then
                        news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default]Долгое нахождение в зоне повышенной радиации! \\nПротиворадиационый препарат отсутствует! %c[255,230,230,0]Использеутся препарат из научной аптечки!"
                    else
                        news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default]Получена высокая доза радиации! \\nПротивоадиационый препарат отсутствует! %c[255,230,230,0]Использеутся препарат из научной аптечки!"
                    end
                      db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 5000)
                end
                if use_sounds then
                     local snd_obj
                    if use_custom_sounds then 
                        snd_obj = xr_sound.get_safe_sound_object( [[HEV\administering-anti-rad]] )
                    else
                            snd_obj = xr_sound.get_safe_sound_object( [[device\pda\pda_tip]] )
                    end
                    if snd_obj then
                        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                    end
                end
            else
                if use_text then
                    local news_text
                    if long_time_exposure then
                        news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[255,230,0,0]ОПАСНОСТЬ! Долгое нахождение в зоне повышенной радиации! Противорадиационные препараты отстутствуют!"
                    else
                        news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[255,230,0,0]ОПАСНОСТЬ! Получена высокая доза радиации! Противорадиационные препараты отстутствуют!"
                    end
                      db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 5000)
                end
                if use_sounds then
                     local snd_obj
                    if use_custom_sounds then 
                        snd_obj = xr_sound.get_safe_sound_object( [[HEV\hi-rad-no-anti-rad]] )
                    else
                            snd_obj = xr_sound.get_safe_sound_object( [[device\pda\pda_tip]] )
                    end
                    if snd_obj then
                        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                    end
                end
                radiation_warning = false
            end
            exposure_count = 0
            long_time_exposure = false
            medication_delay = time_global() + 3000
        end
    elseif auto_injection_active and radiation_warning and monitor_long_exposure and (medication_delay == nil or medication_delay < time_global()) then
        if db.actor.radiation >= get_min_percentage() then
            exposure_count = exposure_count + 1
            if exposure_count > get_rad_time() then
                long_time_exposure = true
            else
                medication_delay = time_global() + 3000
            end
        else
            exposure_count = 0
            long_time_exposure = false
            medication_delay = time_global() + 3000
        end
    end
end


function check_antirad_supplies()

    if auto_injection_active then
    
        if antirad_check_delay == nil or game.get_game_time():diffSec(antirad_check_delay) > 60 then
        
            if not db.actor:object("antirad") and not (use_scientific_kit and db.actor:object("medkit_scientic")) then
            
            --ошибка срабатывает в этой проверке, если reminder_count не инициализирована
                if reminder and reminder_count and reminder_count == 0 or reminder_count >= mins_till_next_remind then
            --ошибка срабатывает в этой проверке, если reminder_count не инициализирована
                    if use_text 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    
                      if use_sounds then
                         local snd_obj
                        if use_custom_sounds then 
                            snd_obj = xr_sound.get_safe_sound_object( [[HEV\no-anti-rad]] )
                        else
                              snd_obj = xr_sound.get_safe_sound_object( [[device\pda\pda_tip]] )
                        end
                        if snd_obj then
                            snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                        end
                    end
                    reminder_count = 1
                elseif reminder then
                    reminder_count = reminder_count + 1
                end

            else
                radiation_warning = true
                reminder_count = 0
            end
            antirad_check_delay = game.get_game_time() 
        end
    end
end


function check_auto_injection_suit()

    if antirad_suit_delay == nil or antirad_suit_delay < time_global() then
        
        auto_injection_active = is_auto_injection_suit()
        
        if db.actor and auto_injection_active and db.actor:dont_has_info("auto_injection_system_startup") then
            if db.actor:object("antirad") then
                if use_text then
                    local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default]Запуск системы. %c[255,0,230,0]Противорадиационные препараты доступны."
                      db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 5000)
                  end
                 if use_sounds then
                     local snd_obj
                    if use_custom_sounds then 
                        snd_obj = xr_sound.get_safe_sound_object( [[HEV\automedic-on]] )
                    else
                            snd_obj = xr_sound.get_safe_sound_object( [[device\pda\pda_tip]] )
                    end
                    if snd_obj then
                        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                    end
                end
                reminder_count = 0
            elseif not db.actor:object("antirad") and use_scientific_kit and db.actor:object("medkit_scientic") then
                if use_text then
                    local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default]Запуск системы. \\n".."%c[255,230,230,0]Противорадиационные препараты отстутствуют! Используются препараты из научной аптечки."
                      db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 5000)
                  end
                 if use_sounds then
                     local snd_obj
                    if use_custom_sounds then 
                        snd_obj = xr_sound.get_safe_sound_object( [[HEV\automedic-on]] )
                    else
                            snd_obj = xr_sound.get_safe_sound_object( [[device\pda\pda_tip]] )
                    end
                    if snd_obj then
                        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                    end
                end
                reminder_count = 0
            else
                if use_text then
                    local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default]Запуск системы. %c[255,230,0,0]Противорадиационные препараты отстутствуют!"
                      db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 5000)
                  end
                if use_sounds then
                     local snd_obj
                    if use_custom_sounds then 
                        snd_obj = xr_sound.get_safe_sound_object( [[HEV\automedic-on-no-anti-rad]] )
                    else
                            snd_obj = xr_sound.get_safe_sound_object( [[device\pda\pda_tip]] )
                    end
                    if snd_obj then
                        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                    end
                end
                reminder_count = 1
            end
            antirad_check_delay =  game.get_game_time() 
            db.actor:give_info_portion("auto_injection_system_startup")
        elseif not auto_injection_active then
            db.actor:disable_info_portion("auto_injection_system_startup")
        end
        antirad_suit_delay = time_global() + 3000
    end
end

-- Ухудшение аптечек
-- Автор - Mixser
-- Спасибо за помощь Kamikazze & Fear93

med_cnt = 0    --счётчик для аптечек
text_h5 = "%c[255,225,225,0]Эффективность аптечек понизилась..."
text_h10 = "%c[255,225,225,0]Эффективность аптечек понизилась до среднего уровня..."
text_h15 = "%c[255,225,225,0]Эффективность аптечек упала до критического уровня..."
text_too_much = "%c[255,255,0,0]Крайне высока вероятность умереть от передозировки лекартств!"

  function med_count()
    --news_manager.send_tip(db.actor,"Вызвана функция med_count()", nil, nil, 2000)
    med_cnt = med_cnt+1
    --news_manager.send_tip(db.actor,db.actor.health, nil, nil, 10000)
    -- Можно не выводить количество использованных аптечек... Надо просто закомментировать (--) строчку: news_manager.send_tip(db.actor,"Количество использованных аптечек - "..med_cnt, nil, nil, 2000). 
    --news_manager.send_tip(db.actor,"Количество использованных аптечек - "..med_cnt, nil, nil, 2000)
    if med_cnt == 3 then 
    news_manager.send_tip(db.actor,text_h5, nil, nil, 10000) 
    end
    if med_cnt == 7 then  
    news_manager.send_tip(db.actor,text_h10, nil, nil, 10000)
    end
    if med_cnt == 11 then 
    news_manager.send_tip(db.actor,text_h15, nil, nil, 10000)
    end
    if med_cnt == 15 then 
    news_manager.send_tip(db.actor,text_too_much, nil, nil, 10000)
    end
    return med_cnt
  end
     
function use_medkit(pid)
--news_manager.send_tip(db.actor,"Вызвана функция use_medkit(pid)", nil, nil, 10000) 
if alife():object(pid)==nil then
--news_manager.send_tip(db.actor,pid, nil, nil, 10000)
local cur_med_cnt = med_count()
  if cur_med_cnt>=3 and cur_med_cnt<7 then
db.actor.health=-0.05
end 
  if cur_med_cnt>=7 and cur_med_cnt<11   then
  db.actor.health=-0.1
end
  if cur_med_cnt>=11 and cur_med_cnt<15 then
  db.actor.health=-0.2
end
  if cur_med_cnt>=15 then
  db.actor.health=-0.35
end

end
end
function use_medkit_army(pid)
if alife():object(pid)==nil then
local cur_med_cnt = med_count()
   if cur_med_cnt>=3 and cur_med_cnt<7 then
db.actor.health=-0.2
  end 
  if cur_med_cnt>=7 and cur_med_cnt<11   then
  db.actor.health=-0.3
  end
  if cur_med_cnt>=11 and cur_med_cnt<15 then
  db.actor.health=-0.5
  end
  if cur_med_cnt>=15 then
  db.actor.health=-0.7
  end

end
end

function use_medkit_scientic(pid)
if alife():object(pid)==nil  then                --medkit_scientic
local cur_med_cnt = med_count()
if cur_med_cnt>=3 and cur_med_cnt<7 then
db.actor.health=-0.4
end 
  if cur_med_cnt>=7 and cur_med_cnt<11   then
  db.actor.health=-0.6
end
  if cur_med_cnt>=11 and cur_med_cnt<15 then
  db.actor.health=-0.8
end
if cur_med_cnt>15 then
db.actor.health=-1.1
end
end
end

function use_medkit_red(pid)
if alife():object(pid)==nil  then                --medkit_red
local cur_med_cnt = med_count()
if cur_med_cnt>=3 and cur_med_cnt<7 then
db.actor.health=-0.5
end 
  if cur_med_cnt>=7 and cur_med_cnt<11   then
  db.actor.health=-0.7
end
  if cur_med_cnt>=11 and cur_med_cnt<15 then
  db.actor.health=-0.9
end
if cur_med_cnt>15 then
db.actor.health=-1.3
end
end
end

function use_voda(pid)
if alife():object(pid)==nil then
news_manager.send_tip(db.actor,"%c[255,0,230,0]Эффективность аптечки восстановлена...", nil, nil, 10000) 
-- soundtrack.to_drink()
med_cnt = 0
end
end

function check_medkit(p_obj) 
--news_manager.send_tip(db.actor,"Вызвана функция - check_medkit(p_obj)", nil, nil, 10000) 
  if p_obj and p_obj:section() == "medkit" then
   amk.start_timer("mdk", 0.01, p_obj:id())
  end
if p_obj and p_obj:section() == "medkit_army" then
amk.start_timer("mdk_a", 0.01, p_obj:id())
end
if p_obj and p_obj:section() == "medkit_scientic" then
amk.start_timer("mdk_c", 0.01, p_obj:id())
end
if p_obj and p_obj:section() == "medkit_red" then
amk.start_timer("mdk_r", 0.01, p_obj:id())
end
if p_obj and p_obj:section() == "voda" then
amk.start_timer("voda", 0.01, p_obj:id())
end
end

-- Девайс "Автодоктор"
-- Автор - Mixser
-- Спасибо за помощь Kamikazze & Fear93

count = false
flag_start = true
--start
start_bad = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] Старт. Проверка... %c[255,225,0,0]Внимание! Выявлено отстуствие необходимых препаратов!"
--start_army = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] Старт. Проверка... %c[255,0,230,0] Отсуствуют армейские аптечки!"
--start_scientic = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] Старт. Проверка... %c[255,0,230,0]Отсуствуют научные аптечки!"
--start_dix = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] Старт. Проверка... %c[255,0,230,0]Отсуствуют стимуляторы!"
start_normal = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] Старт. Проверка... %c[255,0,230,0]Все компоненты присуствуют!"
--use items
scientic_use = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] %c[255,0,230,0]Применяется научная аптечка."
army_use = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] %c[255,0,230,0]Применяется армейская аптечка."
red_use = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] %c[255,0,230,0]Применяется универсальный мед. набор."
--antirad_use = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] %c[255,0,230,0]Высокий уровень радиации! Применяется антирад."
dix_use = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] %c[255,0,230,0] Снижение выносливости! Применяется стимулятор."
--rad_scientic = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default]Получена высокая доза радиации! \\nПротивоадиационый препарат отсутствует! %c[255,230,230,0]Использеутся препарат из научной аптечки!"
power_army = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] Снижение выносливости! \\n Стимулятор отсутствует! %c[255,230,230,0]Используется препарат из армейской аптечки!"
power_red = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] Снижение выносливости! \\n Стимулятор отсутствует! %c[255,230,230,0]Используется препарат из универсального мед.набора!"
test = "hflbfwbb"

function check_autodoctor()
-- news_manager.send_tip(db.actor,"Вызвана функция check_autodoctor()", nil, nil, 2000)
local bio_belt=inventory.belt["autodoctor"] 

if bio_belt then
    count = true
     
    if count == true then
    --db.actor:give_game_news(start, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
    autohealing()
    end
  return count
else 
--news_manager.send_tip(db.actor,"flag_start - "..flag_start, nil, nil, 2000)
    flag_start = false
    count = false
  return count,flag_start
end
end


function start_up()
local bio_belt=inventory.belt["autodoctor"] 
if flag_start == false then
if count == true then
  if not db.actor:object("medkit_army" ) or not db.actor:object("medkit_scientic" ) or not db.actor:object("medkit_red" ) or not db.actor:object("dix" ) then
   snd_obj = xr_sound.get_safe_sound_object( [[HEV\automedic-on-no-anti-rad]] )
   snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
   flag_start = true
   db.actor:give_game_news(start_bad, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
  else
   snd_obj = xr_sound.get_safe_sound_object( [[HEV\automedic-on]] )
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
flag_start = true
--news_manager.send_tip(db.actor,"flag_start - "..flag_start, nil, nil, 2000)
db.actor:give_game_news(start_normal, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
--return flag_start
end
return flag_start
end
end
end


-----------------

-----------------




function autohealing()
--db.actor:inventory_for_each(item)
--check_inv()
--db.actor.health=db.actor.health
--news_manager.send_tip(db.actor,"flag_start - "..flag_start, nil, nil, 2000)

local obt = nil
local snd_obj = nil
--news_manager.send_tip(db.actor,"Вызвана функция autohealing()", nil, nil, 2000)
--local have_medkit_army=db.actor:object("medkit_army") -- переменная под армейскую аптечку. Есть ли она?
--local have_medkit_scientic=db.actor:object("medkit_scientic") -- переменная под научную аптечку. Есть ли она?
--local have_antirad=db.actor:object("antirad") -- переменная под антирад. Есть ли она?
--local have_dix=db.actor:object("dix") -- переменная под стимулятор. Есть ли она?



----------------------------
----------------------------


    if db.actor.health<=0.5 and db.actor.health>=0.25     then 
        if db.actor:object("medkit_army") then
                obt = db.actor:object("medkit_army")
                snd_obj = xr_sound.get_safe_sound_object( [[HEV\administering-anti-rad]] )
                snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                db.actor:give_game_news(army_use, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
                db.actor:eat(obt)
        end       
    end
    
    if db.actor.health<0.25 then
        if db.actor:object("medkit_scientic") then
                obt = db.actor:object("medkit_scientic") 
                snd_obj = xr_sound.get_safe_sound_object( [[HEV\administering-anti-rad]] )
                snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                db.actor:give_game_news(scientic_use, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
                db.actor:eat(obt)
        end
    end
    
    if db.actor.health<0.30 then
        if db.actor:object("medkit_red") then
                obt = db.actor:object("medkit_red") 
                snd_obj = xr_sound.get_safe_sound_object( [[HEV\administering-anti-rad]] )
                snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                db.actor:give_game_news(red_use, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
                db.actor:eat(obt)
        end
    end    

    if db.actor.power<=0.15  then
        if db.actor:object("dix") then
               obt = db.actor:object("dix") 
               snd_obj = xr_sound.get_safe_sound_object( [[HEV\administering-anti-rad]] )
               snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
               db.actor:give_game_news(dix_use, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
               db.actor:eat(obt)
        elseif not db.actor:object("dix") and db.actor:object("medkit_army") then
                obt = db.actor:object("medkit_army") 
                snd_obj = xr_sound.get_safe_sound_object( [[HEV\administering-anti-rad]] )
                snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                db.actor:give_game_news(power_army, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
                db.actor:eat(obt)
        elseif not db.actor:object("dix") and db.actor:object("medkit_red") then
                obt = db.actor:object("medkit_red") 
                snd_obj = xr_sound.get_safe_sound_object( [[HEV\administering-anti-rad]] )
                snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                db.actor:give_game_news(power_red, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
                db.actor:eat(obt)                
                                amk.spawn_item_in_inv("medkit",nil)
        
        end
              
    end
    
    
    
    
end

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Kirag На счёт того как искать где прописан скрипт я знаю а в том месте откуда я его взял работет только функция аптечек а функции автодоктора ни где не прописаны проверял 100 раз в огсе было такое я пытался сделать по аналогии но получал вылеты в огсе функция немного другая потом я решил выдрать из огсе как все наверно знают огсе использует функции амк естественно имеет скрипт amk дак вот скрипт в котором автодоктор называется healing он прописан в скрипте амк в моём моде тоже есть амк скрипт но в огсе этот скрипт просто за*ран различными функциями в моём таких просто нет я пытался скопировать ту функцию из амк в которой прописан автодоктор но получил вылет видимо там ещё какие то функции задействованы а полностью перебрать все функции амк + ещё и правленные огсешными скриптерами у меня мозгов не хватит а полностью использовать амк скрипт из огсе тоже не получится наверно понятно почему. Вот не знаю что делать качать ещё какие нибуть моды весом в несколько гигов ради того чтобы посмотреть как устрорена функция как то не очень интересно!!!! :unsure: извиняюсь что сразу не описал всю суть своей проблемы

 

Строгое предупреждение от модератора Cyclone
Читать монолитные тексты радости мало кому доставит. Рецидив п. 2.5. 7 суток Р\О.
Изменено пользователем Cyclone

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Всем привет народ! Помогите правильно построить следующую функцию для ТЧ

 

hev_crash = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] %c[255,230,0,0]Общий сбой системы система отключается!"

local snd_obj = nil
local act_suit = db.actor:item_in_slot(6)
local hev_min_cond_active = 0.01


----------------------------
----------------------------

    if act_suit and act_suit:section() == "nano_kostum" then
            if act_suit:condition() < hev_min_cond_active then
                snd_obj = xr_sound.get_safe_sound_object( [[HEV\hev_crash]] )
                snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
                db.actor:give_game_news(hev_crash, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
                end
        end

 

В общем я хочу сделать так что бы когда состояние костюма нулевое то гг получал сообщение о том что система жизнеобеспечения отключается но проблема в том что когда костюм достигает нулевой кондиции эти сообщения появлются одно за другим эквивалент появления примерно доля сотой секунды в общем они не перестают приходить.Помогите сосатвить функцию так что бы сообщение приходило только один раз!

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Gun12 Спасибо большое! Я как раз так и хотел что бы сообщение о ре-активации системы тоже приходило :ny_z_2:

Теперь такая проблема скажите пожалуйста кто в курсе можно ли через db.actor кровотечение отследить?? А то я что то только пси здоровье, радиацию, мораль и выносливость нашёл!

Изменено пользователем serega-gamer

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Всем привет народ! Помогите пожалуйста построить следующую функцию, в общем мне нужно сделать функцию на проверку патронов в инвентаре и в магазине активного оружия то есть если я к примеру стрелляю из АК-74 и у меня кончились патроны в инвентаре и в магазине автомата тогда должен воспроизвестись звуковой файл! Проблема в том что я не знаю как составить проверку на количество оставшихся патронов! Помогите пожалуйста кому не трудно...

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение
Artos ты не прав мне не лень мне очень интересно просто я не знаю как сделать проверку на патроны в инвентаре! Проверку на патроны в магазине я сделал пока только на 1 слот Изменено пользователем Artos

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Всем спасибо за помощ! Artos ты прав в том что я не совсем правильно изложил свой ход мыслей точнее не правильно обяснил что именно я хочу! А хочу я как раз сделать глобальную проверку патронов к обсолютно всем стволам а не к некоторым.Дело то в том что у меня действительно очень мало опыта для написания кодов в lua я даже не знаю как использовать флаги точнее как построить функцию проверки на то что, выполнилось ли уже какое либо действие или нет а код что я выложил это только так набросок проверки.Вот если бы кто нибудь хоть разок подробно обяснил как использовать все функции и классы в луа и какой класс или функция что значит либо за что отвечает. Конечно я понимаю что не кто не станет станет тратить на меня своё время и обьяснять мне все нюансы языка луа я так же понимаю что большинство людей ни кто ни чему не учил что они сами научились так сказать методом тыка но хоть кто то бы подумал о том что бы создать тему по языку луа так сказать для чайников или что то подобное. Но я всё таки буду пытаться писать коды набирать опыт и тогда я думаю всё получится тут веть главно сильно захотеть и всё будет :ny_ph34r_1:

 

И всё же тебе лень! Лень просто "прогуляться" по форуму и глянуть то, что уже в нём есть. Неужели ты думаешь, что до тебя до этого никто не додумался? Ты правда веришь, что все, кто может использовать скрипты для своих потребностей, программисты? Вряд ли.

Например, в шапке темы, есть ссылка на "Справочное руководство по языку Lua 5.1". На той же Wiki есть ссылки на различные ресурсы, как на русском, так и на английском языках по языку Lua, именно по языку, не по скриптовой части STALKERa.

Про Lua также есть тема и здесь, на форуме, называется она: "Язык Lua. Общие вопросы программирования".

По поводу функций и классов, также есть хорошая, я бы даже сказал - отличная тема: "Справочник по функциям и классам", на нашем форуме, там расписано много основных классов и их методов, которые используют модостроители.

Ну и наконец, есть еще один ресурс, который есть у каждого, у кого установлен STALKER - это оригинальные скрипты GSC!!! Почему многие ими пренебрегают - лично мне не понятно.

Проблема в том, что многие просто-напросто не хотят читать уже написанное, причин много, но основная всё же - это лень! Всем подавай готовенькое! Это не правильно хотя бы по отношению к другим пользователям - почему одни должны читать и познавать, а другие требуют чтобы им сделали!?

Не хочу тебя, да и не кого, обидеть, но попробуй потрать неделю на прочтение темы "Справочник по функциям и классам", а затем ещё неделю на практические опыты при помощи этих статей и ты узнаешь для себя мнооого нового и, поверь, плюсов от этого ты извлечешь гораздо больше, нежели из готового варианта.

Нужно не просто хотеть, нужно для этого ещё и что-то делать! Иначе твоё хотение больше будет похоже на мечты, а не на цели ...

P.S. И не забывай про уважение к языку на котором ты пишешь - пиши грамотнее!

Спасибо за понимание.

ColR_iT

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

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Всем ещё раз спасибо за помощ! Вот почему так - обьясните народ, не могу додуматься как построить функцию, пишу на форуме так мол и так, помогите, а через некоторое время сам додумываюсь как её построить! Всё таки, когда что то не получается - нужно пробовать ещё, теперь я это уяснил.

local flag_wpn_1
local flag_wpn_2

function ammo_controls()

local snd_obj = nil
local s1 = db.actor:item_in_slot(1)
local s2 = db.actor:item_in_slot(2)

  if not flag_wpn_1 then
  if s1 and s1:get_ammo_total() < 1 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\ammo_0]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        flag_wpn_1 = true
    end
    elseif s1 and s1:get_ammo_in_magazine() >= 1 then    
           flag_wpn_1 = nil   
    end

  if not flag_wpn_2 then
  if s2 and s2:get_ammo_total() < 1 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\ammo_0]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        flag_wpn_2 = true
    end
    elseif s2 and s2:get_ammo_in_magazine() >= 1 then    
           flag_wpn_2 = nil   
    end        
end

 

Не смейтесь, если функция построена банально - делаю как умею, что с меня взять)))) Большое спасибо abramcumner и Artos за то, что подсказали мне 2 этих параметра: get_ammo_in_magazine() и get_ammo_total() - без них я бы врятли справился!

 

Добавлено через 113 мин.:

Поправка я слегка изменил

local flag_wpn_1
local flag_wpn_2

function ammo_controls()

local snd_obj = nil
local s1 = db.actor:item_in_slot(1)
local s2 = db.actor:item_in_slot(2)
local act_slot = db.actor:active_slot()

  if not flag_wpn_1 then
  if s1 and s1:get_ammo_total() < 1 and act_slot == 1 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\ammo_0]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        flag_wpn_1 = true
    end
    elseif s1 and s1:get_ammo_in_magazine() >= 1 then    
           flag_wpn_1 = nil   
    end

  if not flag_wpn_2 then
  if s2 and s2:get_ammo_total() < 1 and act_slot == 2 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\ammo_0]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        flag_wpn_2 = true
    end
    elseif s2 and s2:get_ammo_in_magazine() >= 1 then    
           flag_wpn_2 = nil   
    end

хотелось бы сделать то же самое и с гранатами, но к сожелению я не знаю как их щитать; методы с get_ammo_in_magazine() и get_ammo_total() к ним не подходят. Подскажите пожалуйста что-нибудь!

 

Строгое предупреждение от модератора ColR_iT
Это последний раз!

Не знаешь где расставлять знаки препинания - используй проверку пунктуации, хотя бы, из того же Wordа.

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

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение
Строгое предупреждение от модератора ColR_iT
Потрясающе! Ты пишешь:
но всё же пиши как то понятнее почему люди должны напрягать свой мозг читая твои посты
когда к тебе самому уже неоднократно была точно такая же просьба. Читать твои посты неудобно - отсутствие пунктуации. Итого: 3 дня Read Only.
Изменено пользователем ColR_iT

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Всем привет народ! Есть проблемка мне нужно построить таймер на амк функциях но к сожалению с таймерами ещё не разу не сталкивался другим словом вообще не понимаю что к чему. Помогите, пожалуйста, мне нужен таймер реального времени примерно на 6-7 секунд. Если кому не трудно опишите, пожалуйста, подробно, что к чему какая функция или переменная где и как фигурирует заранее спасибо!

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Всем привет народ! Недавно построил следующую функцию

local cond_1
local cond_2
local cond_3
local cond_4

function suit_condition()

local suit_active = nil
local act_suit = db.actor:item_in_slot(6)
  if (act_suit and act_suit:section() == "nonos_kostum") or (act_suit and act_suit:section() == "nano_outfit") then
     suit_active = true
end

    if suit_active then 
       db.actor:give_info_portion("suit_v1_or_v2_active")
elseif not suit_active then
       db.actor:disable_info_portion("suit_v1_or_v2_active")
    end

if suit_active and act_suit:condition() == 1.00 and has_alife_info("hev_energy_0") then
        db.actor:give_info_portion("hev_restore")
elseif not suit_active then
        db.actor:disable_info_portion("hev_energy_0")
        db.actor:disable_info_portion("hev_restore")
  end


if suit_active and act_suit:condition() <= 0.80 then
        db.actor:give_info_portion("hev_batery_repair")
elseif (suit_active and act_suit:condition() > 0.80) or (not suit_active) then
        db.actor:disable_info_portion("hev_batery_repair")
  end

if has_alife_info("hev_batery_repair") and act_suit:condition() >= 0.01 then
        db.actor:give_info_portion("hev_energy_less_than_100")
elseif suit_active and act_suit:condition() < 0.01 then
        db.actor:disable_info_portion("hev_energy_less_than_100")
       end

if suit_active and has_alife_info("hev_energy_less_than_100") and act_suit:condition() == 1.00 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\hev_energy_100]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
    db.actor:give_game_news(hev_cond_100, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
        db.actor:disable_info_portion("hev_energy_less_than_100")
        end

  if has_alife_info("hev_batery_repair") and act_suit:condition() >= 0.61 then
     if not cond_1 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\hev_energy_80]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
    db.actor:give_game_news(hev_cond_80, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
        cond_1 = true
    end
    elseif suit_active and act_suit:condition() > 0.80 then    
           cond_1 = nil   
    end

  if suit_active and act_suit:condition() <= 0.60 and act_suit:condition() >= 0.41 then
     if not cond_2 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\hev_energy_60]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
    db.actor:give_game_news(hev_cond_60, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
        cond_2 = true
    end
    elseif suit_active and act_suit:condition() > 0.60 then    
           cond_2 = nil   
    end

  if suit_active and act_suit:condition() <= 0.40 and act_suit:condition() >= 0.21 then
     if not cond_3 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\hev_energy_40]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
    db.actor:give_game_news(hev_cond_40, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
        cond_3 = true
    end
    elseif suit_active and act_suit:condition() > 0.40 then    
           cond_3 = nil   
    end

  if suit_active and act_suit:condition() <= 0.20 and act_suit:condition() >= 0.01 then
     if not cond_4 then
    snd_obj = xr_sound.get_safe_sound_object( [[HEV\hev_energy_20]] )
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
    db.actor:give_game_news(hev_cond_20, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
        cond_4 = true
    end
    elseif suit_active and act_suit:condition() > 0.20 then    
           cond_4 = nil   
    end
end

и у меня при стопроцентной кондиции костюма перестали работать диалоги тупо не нажимается на текст, а когда кондиция меньше 80 % то всё ок всё работает, посмотрите, кому не сложно, может найдёте ошибку заранее спасибо!

 

Строгое предупреждение от модератора ColR_iT
Раз тебе ответили, то содержимое поста оставлю, но чтобы подобное желание не повторялось, вот тебе выписка из правил форума:

2.1.2. Запрещено оставлять повторные сообщения (или дублировать их) в одной или нескольких темах.

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

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Всем привет! Подскажите, пожалуйста, можно ли как то отследить открытие инвентаря мёртвого npc главным героем? ЗП

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Artos В ЗП эти поршни не работают, их даже нет в xrGame.dll и так же нету скрипта xr_use :( . Извеняюсь что не туда написал.

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение

Всем здрасте! На днях написал скрипт для рем.комплекта и толком не протестировал, а сегодня заметил баг, проявляется он в том что функция будто зашкаливает делая одно и тоже (хотя вызывается один раз из интерфейса), в общем задумка была такая, функция сравнивает то что в слоте и в инвентаре по имени секции, если есть несколько одинаковых предметов то починка идёт если не то нет.А теперь о проблеме, когда в инвентаре не больше 2 одинаковых предметов и в слоте стоит идентичный им по секции предмет то всё идёт нормально а если предметов в инвентаре много, больше 2 тогда функция как будто зашкаливает, удаляет все идентичные предметы и так же проигрывает звуки починки (естественно наслаивая их друг на друга) подскажите пожалуйста, что здесь не правильно?


function repair_wpn_1()
local item_in_slot = db.actor:item_in_slot(2)
local act_rank = ranks.get_obj_rank_name(db.actor)
local cond_novice = item_in_slot:condition() + (math.random(20)+20)/100
local cond_experienced = item_in_slot:condition() + (math.random(20)+30)/100
local cond_veteran = item_in_slot:condition() + (math.random(20)+40)/100
local cond_master = item_in_slot:condition() + (math.random(30)+50)/100
for i= 0, db.actor:object_count() - 1 do
local item = db.actor:object(i)
if item:section() == item_in_slot:section() and item:id() ~= item_in_slot:id() and 0.20 <= item:condition() then
if act_rank == "novice" and 1.00 > item_in_slot:condition() and 0.20 <= item_in_slot:condition() then
item_in_slot:set_condition(cond_novice)
this.repair_wpn_sound()
alife():release(alife():object(item:id()), true)
elseif act_rank == "experienced" and 1.00 > item_in_slot:condition() and 0.20 <= item_in_slot:condition() then
item_in_slot:set_condition(cond_experienced)
this.repair_wpn_sound()
alife():release(alife():object(item:id()), true)
elseif act_rank == "veteran" and 1.00 > item_in_slot:condition() and 0.20 <= item_in_slot:condition() then
item_in_slot:set_condition(cond_veteran)
this.repair_wpn_sound()
alife():release(alife():object(item:id()), true)
elseif act_rank == "master" and 1.00 > item_in_slot:condition() and 0.20 <= item_in_slot:condition() then
item_in_slot:set_condition(cond_master)
this.repair_wpn_sound()
alife():release(alife():object(item:id()), true)
end
end
end
end

 

Изменено пользователем serega-gamer

Реклама любых модов бесплатно на моём

сайте писать в личку

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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