Ulman 5 Опубликовано 29 Июля 2011 Поделиться Опубликовано 29 Июля 2011 Реюята, огромное спасибо за то что отозвались, с горем пополам вычислил корень зла. Но вот проблема со строкой 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) Ссылка на комментарий
*Shoker* 322 Опубликовано 30 Июля 2011 Поделиться Опубликовано 30 Июля 2011 (изменено) con:execute(string.gsub(string.format(fmt,...), " ", "_")) Вместо ... в функцию должен какой то параметр передаваться, который будет вставлен в строку. Вылет на ориг. ПЫСовских скриптов или ты сам куда то функцию primntf вставлял? Если да, то дай примеры того как ты это делал. Изменено 30 Июля 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
serega-gamer 0 Опубликовано 30 Июля 2011 Поделиться Опубликовано 30 Июля 2011 Всем Привет! Помогите пожалуйста что и куда прописать что бы включить (девайс авто доктор) аптечки у меня уже работают а вот авто доктор не пашет... -- ПОЛЕВАЯ МЕДИЦИНА -- -- Автоматическая система ввода антирада -- автор 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 Реклама любых модов бесплатно на моём сайте писать в личку Ссылка на комментарий
Ulman 5 Опубликовано 30 Июля 2011 Поделиться Опубликовано 30 Июля 2011 *Shoker*, лично я никуда такую строку не вставлял, но поискав такие строки, я их нашел почти во все скриптах, как у оригинальных, так и нет, а можно пример строки, как она должна выглядеть? Ссылка на комментарий
*Shoker* 322 Опубликовано 30 Июля 2011 Поделиться Опубликовано 30 Июля 2011 (изменено) Вместо этого 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) будет напечатана в лог. Изменено 30 Июля 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
RvP 1 Опубликовано 30 Июля 2011 Поделиться Опубликовано 30 Июля 2011 (изменено) 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 Изменено 30 Июля 2011 пользователем RvP Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
Ulman 5 Опубликовано 30 Июля 2011 Поделиться Опубликовано 30 Июля 2011 И ещё, люди, вот у меня такой вылет: [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 Ссылка на комментарий
*Shoker* 322 Опубликовано 30 Июля 2011 Поделиться Опубликовано 30 Июля 2011 (изменено) Походу в логике ошибка где то. Скрипт не может найти вызываемую функцию. Сама переменная func есть, иначе был бы вылет другой. Ты менял логику? Изменено 30 Июля 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Ulman 5 Опубликовано 31 Июля 2011 Поделиться Опубликовано 31 Июля 2011 *Shoker*, немного гулаг подпралял, сейчас сделал другую правку и всё нормально. Я думаю это от него зависит? Ссылка на комментарий
*Shoker* 322 Опубликовано 31 Июля 2011 Поделиться Опубликовано 31 Июля 2011 Да, т.к это как раз и есть логика. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Kirag 39 Опубликовано 1 Августа 2011 Поделиться Опубликовано 1 Августа 2011 serega-gamer Начнем с того, откуда ты это взял. Там ведь оно где-то, да прописано. Посмотри, что и где, и сделай так же... Ты выложил здесь текст какого-то файла, значит искать надо строку "имя_этого_файла" по всем другим файлам источника. Так ты увидишь где прописаны вызовы функций из этого файла. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
serega-gamer 0 Опубликовано 1 Августа 2011 Поделиться Опубликовано 1 Августа 2011 (изменено) Kirag На счёт того как искать где прописан скрипт я знаю а в том месте откуда я его взял работет только функция аптечек а функции автодоктора ни где не прописаны проверял 100 раз в огсе было такое я пытался сделать по аналогии но получал вылеты в огсе функция немного другая потом я решил выдрать из огсе как все наверно знают огсе использует функции амк естественно имеет скрипт amk дак вот скрипт в котором автодоктор называется healing он прописан в скрипте амк в моём моде тоже есть амк скрипт но в огсе этот скрипт просто за*ран различными функциями в моём таких просто нет я пытался скопировать ту функцию из амк в которой прописан автодоктор но получил вылет видимо там ещё какие то функции задействованы а полностью перебрать все функции амк + ещё и правленные огсешными скриптерами у меня мозгов не хватит а полностью использовать амк скрипт из огсе тоже не получится наверно понятно почему. Вот не знаю что делать качать ещё какие нибуть моды весом в несколько гигов ради того чтобы посмотреть как устрорена функция как то не очень интересно!!!! извиняюсь что сразу не описал всю суть своей проблемы Строгое предупреждение от модератора Cyclone Читать монолитные тексты радости мало кому доставит. Рецидив п. 2.5. 7 суток Р\О. Изменено 1 Августа 2011 пользователем Cyclone Реклама любых модов бесплатно на моём сайте писать в личку Ссылка на комментарий
Kirag 39 Опубликовано 1 Августа 2011 Поделиться Опубликовано 1 Августа 2011 serega-gamer Попробуй в апдейт актора вписать имя_файла.autohealing() Есть шансы, что хоть как-то заработает, без кучи проверок. НО вообще-то все тут адаптировано под ОГСЕ, чем все и сказано... Слишком много отсылок к функционалу ОГСЕ, чтобы это быстро сложилось. P.S. Целых пять знаков препинания, и четыре из них восклицательные. Ты сам-то пробовал прочесть и понять этот неформатированный поток сознания? Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
temakonkin 0 Опубликовано 2 Августа 2011 Поделиться Опубликовано 2 Августа 2011 огромный сори если уже есть такие вопросы, огромная просьба не банить,.. хочу заспавнить нового НПС на кордоне под мостом, кординаты я снял, и в скрипте их отметил, но он всёравно спавнится в лагере новичков... Вот моя функция спавна непися...... 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. Кто может помочь мне разобраться в логике НПС... т.к по урокам настройки логики, которые есть на форуме я ничего не понял... Сталкер в душе - сталкер по жизни! Ссылка на комментарий
Disord 1 Опубликовано 2 Августа 2011 Поделиться Опубликовано 2 Августа 2011 (изменено) 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. Изменено 2 Августа 2011 пользователем Disord Ссылка на комментарий
Ulman 5 Опубликовано 2 Августа 2011 Поделиться Опубликовано 2 Августа 2011 Люди, воспользовался вашим советом и решил искать вылет с помощью этих команд 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 или вообще не вылетит. Есть ли у кого хоть какие-то предположения? Помогите, очень надо. Ссылка на комментарий
RvP 1 Опубликовано 2 Августа 2011 Поделиться Опубликовано 2 Августа 2011 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 Ссылка на комментарий
_Призрак_ 11 Опубликовано 2 Августа 2011 Поделиться Опубликовано 2 Августа 2011 Посмотри где у тебя встречаются в скриптах строки: LAST_INTO_ID_for_[%s]_=_[%s],_max_[%s] Freedom Ссылка на комментарий
Ulman 5 Опубликовано 2 Августа 2011 Поделиться Опубликовано 2 Августа 2011 (изменено) RvP, спасибо, вроде помогло. _Призрак_, а разве в скриптах такие троки бывают, может быть искать надо хотя бы так: LAST_INTO_ID_for? И кстати ни у кого нет предположений на счёт вылета без лога? P.S. А может ли быть причиной вылета высокая температура ГП, а то у меня сейчас старая видеокарта стоит, так как нормальная в ремонте. Так эта что сейчас стоит, греется где то до 80 градусов, когда максимально рабочая температура 75-80?(Извините что это не в тему.) Изменено 2 Августа 2011 пользователем Ulman Ссылка на комментарий
*Shoker* 322 Опубликовано 2 Августа 2011 Поделиться Опубликовано 2 Августа 2011 Бывают, закарючки вида %s заменяются на какие либо параметры ( в данном случае - строковые ) но в какой то функции такого параметра не передаётся (3 по счёт, по ходу nil или ещё что то такое). Нужно вбить в поиск по папке scripts эту строку, и поправить её. Поиск по файлами может осуществлять стандартный Total Commander Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти