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

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

Реюята, огромное спасибо за то что отозвались, с горем пополам вычислил корень зла. Но вот проблема со строкой

con:execute(string.gsub(string.format(fmt,...), " ", "_"))

Такой вылет происходит:

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:\my game$\s.t.a.l.k.e.r\gamedata\scripts\_g.script:21: bad argument #2 to 'format' (string expected, got no value)

 

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

con:execute(string.gsub(string.format(fmt,...), " ", "_"))

 

Вместо ... в функцию должен какой то параметр передаваться, который будет вставлен в строку. Вылет на ориг. ПЫСовских скриптов или ты сам куда то функцию primntf вставлял? Если да, то дай примеры того как ты это делал.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

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

-- ПОЛЕВАЯ МЕДИЦИНА --
-- Автоматическая система ввода антирада
-- автор 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

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

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

Ссылка на комментарий
*Shoker*, лично я никуда такую строку не вставлял, но поискав такие строки, я их нашел почти во все скриптах, как у оригинальных, так и нет, а можно пример строки, как она должна выглядеть?
Ссылка на комментарий

Вместо этого con:execute(string.gsub(string.format(fmt,...), " ", "_"))

Попробуй так:

 

con:execute(string.gsub(fmt, " ", "_")) -- Это "плохой" вариант, вылета не будет, но инфа будет не полная, впрочем тебе её вполне может хватить для отлова

 

или такой вариант-извращение, и я не уверен что lua его переварит:

 

if ... then

con:execute(string.gsub(string.format(fmt,...), " ", "_"))

else

con:execute(string.gsub(fmt, " ", "_"))

end

 

А вообще ж по идее должна какая то проверка стоят в самом луа на случаи если в ... ничего нет, наверно в каком то скрипте неправильно вызов составлен или что то упустили тут.

 

 

_______________

А вообще чтобы корень ошибки отловить, можно так сделать:

 

con:execute(string.gsub(fmt, " ", "_"))

con:execute(string.gsub(string.format(fmt,...), " ", "_"))

 

В таком случае та строка, которая вызывает здесь вылет (не твой, а с bad argument) будет напечатана в лог.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий
function prt(fmt, ...)
   local t = {...}
   local s = tostring(fmt) ..  "    "
   for k,v in ipairs(t) do
       s = s .. tostring(v) .. "   "
   end
   s =s:gsub(" ", "_")
   get_console():execute(s)
end

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

Vita sine libertate, nihil

Vita sine litteris - mors est

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

И ещё, люди, вот у меня такой вылет:

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ...game$\s.t.a.l.k.e.r\gamedata\scripts\xr_logic.script:632: attempt to call local 'func' (a nil value)

 

Вот кусок скрипта:

if infop_conditions_met then

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

-- infoportions:

for inum, infop in pairs(cond.infop_set) do

if db.actor == nil then

abort("TRYING TO SET INFOS THEN ACTOR IS NIL")

end

if infop.func then

local func=nil

local module,fname=string.match(infop.func,"(.+)[.](.+)")

if not fname then

func=xr_effects[infop.func]

else

if _G[module] and _G[module][fname] then

func=_G[module][fname]

end

end

if not func then

abort("object '%s': pick_section_from_condlist: function '%s' is " ..

"not defined in xr_effects.script", if_then_else(npc, npc:name(), "nil"), infop.func)

end

if infop.params then

func(actor, npc, infop.params)

else

func(actor, npc)--632 строка

end

 

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

Походу в логике ошибка где то. Скрипт не может найти вызываемую функцию.

Сама переменная func есть, иначе был бы вылет другой. Ты менял логику?

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Да, т.к это как раз и есть логика.

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

serega-gamer

 

Начнем с того, откуда ты это взял. Там ведь оно где-то, да прописано. Посмотри, что и где, и сделай так же...

Ты выложил здесь текст какого-то файла, значит искать надо строку "имя_этого_файла" по всем другим файлам источника. Так ты увидишь где прописаны вызовы функций из этого файла.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

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

 

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

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

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

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

serega-gamer

 

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

 

P.S. Целых пять знаков препинания, и четыре из них восклицательные. Ты сам-то пробовал прочесть и понять этот неформатированный поток сознания?

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

огромный сори если уже есть такие вопросы, огромная просьба не банить,..

хочу заспавнить нового НПС на кордоне под мостом, кординаты я снял, и в скрипте их отметил, но он всёравно спавнится в лагере новичков...

Вот моя функция спавна непися......

function esc_unik_lost ()
alife():create("esc_unik_lost",vector():set(-47.79,-8.51,-62.10),35362,47)
end

и ешо, просьба пояснить....

1. как же всётаки его поставить под мост?

2. как можно узнать level_vertex и game_vertex...?

3. есть ли огранечения на колличество заспавненных НПС на отдельный участок карты -на пример: можно ли в подвале на кордоне заспавнить рядом пятерых неписей?

4. Кто может помочь мне разобраться в логике НПС... т.к по урокам настройки логики, которые есть на форуме я ничего не понял... :mellow:

 

Сталкер в душе - сталкер по жизни!

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

temakonkin,

1. Как раз по снятым тобой координатам. Формат такой:

alife():create("esc_unik_lost",vector():set(x,y,z),level_vertex,game_vertex)

2. game_vertex и level_vertex тоже можно узнать, снимая координаты. Есть много скриптов, которые тебе могут показать эти вертексы и координаты. К примеру, смотри Mobile Manager от singapur22. Там этот мобильник не только координаты снимает :)

3. Ограничений нет, но всё-таки не рекомендуется спавнить очень много НПС (пять - это немного) - потому что может случится вылет, связанный со стеком - движок просто не сможет справиться.

4. Про логику НПС есть целых 5 статей на Wiki. Вот ссылка на первую, она тебя приведет к остальным. На этом сайте, кстати, есть очень много полезных статей по моддингу S.T.A.L.K.E.R.'a.

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

Люди, воспользовался вашим советом и решил искать вылет с помощью этих команд

con:execute(string.gsub(fmt, " ", "_"))
con:execute(string.gsub(string.format(fmt,...), " ", "_"))
con:execute("flush")

как и ожидалось получил вылет типа:

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: c:\my game$\s.t.a.l.k.e.r\gamedata\scripts\_g.script:22: bad argument #3 to 'format' (string expected, got nil)

 

Но предыдущие строки были такие:

* Log file has been saved successfully!

! Unknown command: Selected_[%s]

! Unknown command: Selected_[story]

* Log file has been saved successfully!

! Unknown command: *SND*_play_SND_to_[%s]_for_[%s]

! Unknown command: *SND*_play_SND_to_[legend_01]_for_[bar_visitor_4]

* Log file has been saved successfully!

! Unknown command: LAST_INTO_ID_for_[%s]_=_[%s],_max_[%s]

 

Вот в каком скрипте есть строка, вызывающая такой вылет?

 

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

И ещё, вот у меня рандомный безлоговый вылет, один и тот же сейв могу загружать бывает загружается нормально а бывает загрузился и сразу вылет. И в игре так же бывает если игру оставить на длинное время, ничего не делая, по крайней мере на кордоне, то ничего не вылетит. То есть в основном вылет или сразу случается через минут 2-3 или вообще не вылетит. Есть ли у кого хоть какие-то предположения? Помогите, очень надо.

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

Ulman,

 

con:execute(string.gsub(fmt, " ", "_"))
local t = {...}
for k,v in ipairs(t) do
   t[k] = tostring(v)
end
local s = string.format(fmt,unpack(t))
con:execute(string.gsub(s, " ", "_"))
con:execute("flush")

Vita sine libertate, nihil

Vita sine litteris - mors est

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

RvP, спасибо, вроде помогло.

_Призрак_, а разве в скриптах такие троки бывают, может быть искать надо хотя бы так: LAST_INTO_ID_for?

И кстати ни у кого нет предположений на счёт вылета без лога?

P.S. А может ли быть причиной вылета высокая температура ГП, а то у меня сейчас старая видеокарта стоит, так как нормальная в ремонте. Так эта что сейчас стоит, греется где то до 80 градусов, когда максимально рабочая температура 75-80?(Извините что это не в тему.)

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

Бывают, закарючки вида %s заменяются на какие либо параметры ( в данном случае - строковые ) но в какой то функции такого параметра не передаётся (3 по счёт, по ходу nil или ещё что то такое).

 

Нужно вбить в поиск по папке scripts эту строку, и поправить её. Поиск по файлами может осуществлять стандартный Total Commander

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...