alex5773 1 332 Опубликовано 19 Октября 2012 Как сделать чтоб торговцы покупали оружие и броню в любом состоянии, но хоть на половину целым? А то сейчас покупают только почти целое оружие и броню, если на 2-3 полоски сломано, уже не берут. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 7 Сентября 2013 А можно ли сделать всем нпс диалоговое окно с торговлей, вместо этого: "Вон старший, к нему обращайся".? Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 16 Марта 2014 (изменено) Ребят, кто может точно сказать что означает k-ap? k_dist = коэффициент дальности k_disp = кучностьk_hit = убойностьk_impulse = Импульсk_pierce = пробивная способность пули(хотя многие и пишут в справочниках что это коэффициент насколько испортиться броня при попадании), хотя может и портиться, но у дроби в оригинале стоит 0, и это значить с дроби что-ли хоть за стреляйся, всё равно не испортишь броню. Но вот что это пробивная способность это точно на все сто процентов, ставишь больше 1.15 и пробивает забор, ещё больше то деревянные стены, ещё больше то деревья толстые.(В ТЧ, в ЗП пока не знаю точно, не пробовал)k_ap = А что это такое? В ТЧ такого нет.impair = коэффициент износа ствола от пулиbuck_shot = кол-во составляющих в пулеtracer = является ли патрон трассирующимwm_size = визуальный размер дырки на стене от пулиk_air_resistance = сопротивление воздуха Я так думаю что это тоже самое что и k_pierce, т.е больше склоняюсь к этому варианту В ЗП по другому всё что-ли, сделал патронам k_pierce = 1.5 как в тч обычно делаю, так теперь забор бетонный пробивает насквозь. Бетонный то не должен пробивать вообще, по крайней мере в ТЧ не пробивает бетонное, кирпичное, вроде как. Изменено 16 Марта 2014 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 16 Апреля 2014 Мясник мод Мясник 1.0 http://rghost.ru/private/54232345/5a135e77a704a9c6d02fd1683f98994d Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 28 Мая 2014 Хотя вписывал как положено! Если бы ты вписывал как положено, то с проблемой бы этой не столкнулся. Вот тебе script Syntax Checker(для проверки скриптов, запускаешь и указываешь на папку scripts, и программка проверяет правильность написания скриптов, ну и указывает на ошибку) http://rghost.ru/private/55911083/903850d1e1ce6ed1742bc31610c64e2b И удачи в освоении модинга 1 Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 28 Мая 2014 для чего нужны такие скрипты: bind_stalker.script.bak, bind_monster.script.bak Чтоб удалить их, они тебе явно не нужны, и игре тоже. Это просто кто-то их так сохранял оригинальными(до изменений). Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 27 Февраля 2015 Ребят, а как отключить автоподбор оружия при обыске нпс? Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 30 Июня 2016 Кто в курсе как в ЧН и ЗП можно правильно настроить пробиваемость преград? Есть ли у кого точные цифры пробития преград? Вот допустим в ТЧ k_pierce = коэффициент бронебойности. ; 1.1 - не пробивается забор и жесть. ; 1.12 - пробивается забор и застревает в первой стенке халупы. ; 1.15 - пробивается забор и застревает в первой стенке халупы. ; 1.2 - пробивается забор и застревает в первой стенке халупы. ; 1.25 - ствол толстого дерева не пробивается. пробивается забор и первая стенка, застревает во второй стенке халупы. ; 1.35 - ствол толстого дерева не пробивается. ; 1.4 - ствол толстого дерева не пробивается. ; 1.45 - ствол толстого дерева пробивается ; 1.5 - ствол толстого дерева пробивается ; бетон не пробивается никогда А какие циферки ставить в ЗП? Т.к если такие цифры поставить в ЗП, то даже ПМ будет пробивать бетонный забор. Хотя в ТЧ бетонный забор не пробивается вообще, а вот в ЗП прошивается насквозь, за бетонным забором уже не спрячешься. Просто охота настроить по реалистичней как-то. Но не могу поймать цифру, чтоб была такая же реалистичность по пробитию как в ТЧ. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 22 Июля 2016 (изменено) А respawn_idle = 60000, это сколько игрового времени? И какое можно ставить максимальное число, которое будет работать? А можно ли в ЗП как в ТЧ, сразу всем одной строчкой изменить время респавна? Изменено 22 Июля 2016 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 22 Июля 2016 (изменено) А local RESPAWN_RADIUS = 150 -- радиус респауна(если актер ближе, то не спаунить), это в метрах, или в сантиметрах? Т.к они чуть ли не перед носом ГГ спавнятся. Изменено 22 Июля 2016 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 3 Ноября 2017 Не нашёл подходящей темы где задать этот вопрос, так что задам его тут. Как отключить reports? С\Пользователи\Имя компа\AppData\Roaming\XRay Engine\reports А то засирает диск С, иногда забываешь чистит этот reports, и там прилично накапливается мб. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 17 Февраля 2018 (изменено) А по какой причине может не спавнится Доктор на болоте Доктора, а спавнится лишь его стул на котором он должен сидеть, и стул спавнится не в доме, а рядом с домом вися в воздухе. Может на это влиять просто распаковка и запаковка алспавна? Потому как вообще не трогал локацию ту в алспавне, а всего лишь удалил с тайников новое оружие и патроны на других локациях. Извиняюсь, не в ту тему. Но по моему это без разницы для этого вопроса. Правда внимания не обратил, что это CоP тема Изменено 17 Февраля 2018 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 23 Февраля 2018 (изменено) 33 минуты назад, Шиш сказал: СоС 6.03 Что это? Вроде последняя версия 1.4.22, ну и бетка есть 1.5, а у тебя вон аж 6.03. Ты из будущего? А жажду настраивай в drink.script. Удалите тот мой пост, он неактуален давно. Изменено 23 Февраля 2018 пользователем alex5773 1 Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 10 Августа 2018 В 07.08.2018 в 15:45, Space.Marine сказал: как изменить ситуацию с бесконечными патронами у неписей. Очень просто. Забрать у всех неписей патроны, выстрелят магазин, и всё, перезаряжать нечем будет. И знаешь, разницы абсолютно никакой не будет, что допустим два-три раза перезарядка будет и кончатся патроны, или вообще её не будет, сразу кончатся. Т.к результат будет один, - отсутствие патронов. Для игры заканчивающие патроны у неписей, это глупость. Тебе нравится когда они бегают по Зоне без оружия? А так, никак. Если у их есть полная пачка патронов, то это уже всё, они никогда не кончатся. А если им дать допустим 29 патронов для автомата, то они перезарядят, выстрелят их, и всё, нет больше патронов. 1 Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 27 Октября 2018 А как запретить апгрейд уникальным стволам(уникам)? Вроде как в inventory_upgrades.script надо это делать, а как, фиг его знает. Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 27 Октября 2018 Да сработало уже Думаю иконки при ремонте тоже так убрать можно? Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 27 Октября 2018 (изменено) -- Изменено 28 Октября 2018 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 27 Октября 2018 (изменено) -- Изменено 28 Октября 2018 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 16 Ноября 2018 А можно как-нибудь это переписать под ЗП? --fx_snd = xr_sound.get_safe_sound_object(fx_snd) --fx_snd:play_no_feedback(act_item, sound_object.s3d, 0, act_item:position(), 1) Это строчки с ogse_wpn_explode_fx.script из за этих строк в ЗП вылет при выстреле со сломанного оружия, а без этих строк звука взрыва оружия нет. Вот интересно, в СоС 1.4.22 работает нормально этот скрипт, а в ЗП не хочет. Просто с ТЧ на СоС его ставлю, и всё норм работает. Вот сам скрипт Скрытый текст function on_npc_hit(victim,amount,local_direction,who,bone_index) local active_slot = db.actor:active_slot() local active_item = db.actor:active_item() local pistol_in_slot = db.actor:item_in_slot(1) local rifle_in_slot = db.actor:item_in_slot(2) if victim ~= nil and active_item and who:clsid() == clsid.script_actor then local active_sect = active_item:section() param_point = math.random(1,3)/10 if param_info ~= nil and param_point ~= nil and has_alife_info(active_sect.."_info") then local point_s = hit() point_s.draftsman = victim point_s.type = hit.fire_wound point_s.power = param_point point_s.impulse = 0.1 victim:hit(point_s) end end end --/ wpn_explode_fx.script /-- --/ Weapon explode module /-- --/ OGS Evolution Team 2010 /-- --/ version 1.1 /-- --/ Модуль подрыва патрона в стволе при значительном износе оружия /-- -- Параметры local fx_is_enable = true -- "true"-обработка подрыва патрона включена, "false"-выключена local critical_condition = 0.2 -- кондиция оружия, ниже которой может случиться разрыв патрона в стволе -- Малый калибр (пистолеты, пистолеты-пулемёты) local fx_snd_1 = "weapons\\explosions\\grenade_f1_explosion" -- звук, воспроизводимый как разрыв патрона в стволе local fx_particle_1 = "anomaly2\\heat_01" -- партикл, воспроизводимый как разрыв патрона в стволе local explode_impulse_1 = 0.1 -- импульс хита, наносимого при разрыве local explode_power_1 = 0.4 -- сила хита, наносимого при разрыве -- Средний калибр (автоматы, пулемёты, винтовки) local fx_snd_2 = "weapons\\explosions\\grenade_f1_explosion" local fx_particle_2 = "anomaly2\\heat_01" local explode_impulse_2 = 0.2 local explode_power_2 = 0.6 -- Большой калибр (дробовики, крупнокалиберные винтовки) local fx_snd_3 = "weapons\\explosions\\grenade_f1_explosion" local fx_particle_3 = "anomaly2\\heat_01" local explode_impulse_3 = 0.3 local explode_power_3 = 0.8 -- Спецбоеприпас (огнемёт) local fx_snd_4 = "weapons\\explosions\\grenade_f1_explosion" local fx_particle_4 = "anomaly2\\heat_01" local explode_impulse_4 = 0.7 local explode_power_4 = 1.1 -- Аномальный боеприпас (гауссовка) local fx_snd_5 = "weapons\\explosions\\grenade_f1_explosion" local fx_particle_5 = "anomaly2\\heat_01" local explode_impulse_5 = 0.5 local explode_power_5 = 1.2 -- Параметры local stored_ammo_num = nil local stored_it_id = nil function update() if fx_is_enable and db.actor:alive() then local act_it = db.actor:active_item() if act_it == nil then stored_it_id = nil return end local act_it_sect = act_it:section() if act_it and string.find(act_it_sect, "wpn_") and act_it_sect ~= "wpn_binoc" then local it_id = act_it:id() local ammo_num = act_it:get_ammo_in_magazine() if stored_it_id ~= nil and stored_ammo_num ~= nil then if stored_it_id == it_id and ammo_num < stored_ammo_num then proceed(act_it) end end stored_ammo_num = ammo_num stored_it_id = it_id end end end function proceed(act_item) -- amk.logf("Выстрел!") if act_item:condition() < critical_condition then -- amk.logf("Авария!") if math.random()*0.5 > act_item:condition() then -- amk.logf("БУМ!") local fx_snd -- объявляем переменные. можно не присваивать значения, так как они присвоятся обязательно local fx_particle local explode_impulse local explode_power -- определяем тип визуализации local act_item_sect = act_item:section() local type_of_visual = identy_type_of_visual(act_item_sect) if type_of_visual == 1 then fx_snd = fx_snd_1 fx_particle = fx_particle_1 explode_impulse = explode_impulse_1 explode_power = explode_power_1 -- amk.logf("Тип визуализации 1") elseif type_of_visual == 2 then fx_snd = fx_snd_2 fx_particle = fx_particle_2 explode_impulse = explode_impulse_2 explode_power = explode_power_2 -- amk.logf("Тип визуализации 2") elseif type_of_visual == 3 then fx_snd = fx_snd_3 fx_particle = fx_particle_3 explode_impulse = explode_impulse_3 explode_power = explode_power_3 -- amk.logf("Тип визуализации 3") elseif type_of_visual == 4 then fx_snd = fx_snd_4 fx_particle = fx_particle_4 explode_impulse = explode_impulse_4 explode_power = explode_power_4 -- amk.logf("Тип визуализации 4") elseif type_of_visual == 5 then fx_snd = fx_snd_5 fx_particle = fx_particle_5 explode_impulse = explode_impulse_5 explode_power = explode_power_5 -- amk.logf("Тип визуализации 5") end -- визуализация fx_snd = xr_sound.get_safe_sound_object(fx_snd) fx_snd:play_no_feedback(act_item, sound_object.s3d, 0, act_item:position(), 1) fx_particle = particles_object(fx_particle) fx_particle:play_at_pos(act_item:position()) -- нанесение хита local explode_vec = vector():set(db.actor:position()):sub(act_item:position()) local explode = hit() explode.direction = explode_vec explode.draftsman = db.actor explode.impulse = explode_impulse explode.power = explode_power explode.type = hit.explosion db.actor:hit(explode) -- удаление предмета alife():release(alife():object(act_item:id()), true) if fx_particle and fx_particle:playing() then fx_particle:stop() end end end end function identy_type_of_visual(act_item_section) local type_of_visualise = 2 -- определяем тип визуализации по умолчанию на тот случай, когда тип боеприпаса не определится if system_ini():line_exist(act_item_section, "ammo_class") then local ammo_list = system_ini():r_string(act_item_section, "ammo_class") if string.find(ammo_list, "ammo_9x18") or string.find(ammo_list, "ammo_9x19") then type_of_visualise = 1 elseif string.find(ammo_list, "ammo_5.45x39") or string.find(ammo_list, "ammo_5.56x45") or string.find(ammo_list, "ammo_7.62x25") or string.find(ammo_list, "ammo_7.62x39") or string.find(ammo_list, "ammo_7.62x54") or string.find(ammo_list, "ammo_9x39") then type_of_visualise = 2 elseif string.find(ammo_list, "ammo_11.43x23") or string.find(ammo_list, "ammo_5.7x28") or string.find(ammo_list, "ammo_10.9x32.5") or string.find(ammo_list, "ammo_12x70") or string.find(ammo_list, "ammo_12x76") then type_of_visualise = 3 elseif string.find(ammo_list, "ammo_og-7b") then type_of_visualise = 4 elseif string.find(ammo_list, "ammo_gauss") then type_of_visualise = 5 end end return type_of_visualise end Поделиться этим сообщением Ссылка на сообщение
alex5773 1 332 Опубликовано 16 Ноября 2018 Пришлось ещё задействовать xr_sound.script. Вставил в конец скрипта вот это всё Скрытый текст --------------------------------------------------------------------------------------------------------------------- -- Схема озвучки -- автор: Диденко Руслан (Stohe) -- update: Чугай Александр (Chugai) ---------------------------------------------------------------------------------------------------------------------- key_by_id = {} group_idle = {} --function printf() --end function get_sound(path, tt, npc) if path == nil then return nil end if path.exec == nil then -- чтение настроек темы tt.into_id = path.into_id tt.into_max = path.max_ids[npc:id()].into_max tt.into_last = nil tt.rnd_id = path.rnd_id tt.rnd_max = path.max_ids[npc:id()].rnd_max tt.rnd_last = nil tt.min_snd = path.min_snd tt.max_snd = path.max_snd tt.rnd_snd = path.rnd_snd else get_sound(path.types[path.exec(path.types, npc)], tt, npc) end end -- Формирование ключа персонажа function get_key(npc) local key -- формирование ключа local overrides = xr_logic.generic_scheme_overrides(npc) if overrides and overrides.soundgroup then key = overrides.soundgroup else key = utils.to_str(npc:id()) end -- апдейт таблиц :) не менять! if xr_sound.key_by_id[npc:id()] ~= key then if xr_sound.group_idle[xr_sound.key_by_id[npc:id()]] ~= nil then xr_sound.group_idle[xr_sound.key_by_id[npc:id()]].num_in_group = xr_sound.group_idle[xr_sound.key_by_id[npc:id()]].num_in_group - 1 end xr_sound.key_by_id[npc:id()] = key if xr_sound.group_idle[key] == nil then xr_sound.group_idle[key] = {num_in_group = 1} else xr_sound.group_idle[key].num_in_group = xr_sound.group_idle[key].num_in_group + 1 end end return key end ----------------------------------------------------------------------------------------------------------------------------------- -- Установка и распарсивание тем в файлы. ----------------------------------------------------------------------------------------------------------------------------------- function set_sound(npc, sound, now, into_timeout) -- printf("*SND* [%s] try to change SND to [%s]", npc:name(), tostring(sound)) local npc_id = npc:id() if (db.sound[npc_id] == nil or db.sound[npc_id].theme ~= sound) or now == true then -- if db.sound[npc_id] == nil then -- printf("*SND* change SND [_] to [%s] for [%s]", tostring(sound), npc:name()) -- else -- printf("*SND* change SND [%s] to [%s] for [%s]", tostring(db.sound[npc_id].theme), tostring(sound), npc:name()) -- end -- Туточки надобно распарсить имена тем в их id if sound == nil then sound = "" end if db.sound[npc_id] == nil then db.sound[npc_id] = {} end db.sound[npc_id].theme = sound db.sound[npc_id].snd = parse_names(sound) if db.sound[npc_id].last_snd == nil then db.sound[npc_id].last_snd = {} else local snd_table = {} local t = 0 for k,v in pairs(db.sound[npc_id].snd) do snd_table[t] = {} get_sound(sound_theme.theme[v], snd_table[t], npc) t = t + 1 end for k,v in pairs(snd_table) do if v.into_id then db.sound[npc_id].last_snd[v.into_id] = nil end if v.rnd_id then db.sound[npc_id].last_snd[v.rnd_id] = nil end end end -- Устанавливаем входную паузу local key = get_key(npc) xr_sound.group_idle[key].begin = time_global() if into_timeout then xr_sound.group_idle[key].idle = into_timeout else xr_sound.group_idle[key].idle = 0 end if now == true then stop_play_sound(npc) end end end function play_sound(npc, themes, timeout) --alun_utils.debug_write(strformat("xr_sound:play_sound %s",npc and npc:name())) -- нужно составить список тем local snd_table = {} local t = 0 for k,v in pairs(themes) do snd_table[t] = {} if sound_theme.theme[v] ~= nil then snd_table[t].theme = v get_sound(sound_theme.theme[v], snd_table[t], npc) else printf("ERROR: ILLEGAL PLAY SOUND!!! %s for %s", v, npc:name()) end t = t + 1 end --printf("*") --print_table(snd_table) if t == 0 then return end -- из списка тем выбираем одну. local snd = snd_table[math.random(0, t-1)] if snd ~= nil then --printf("!") --print_table(snd) if snd.min_snd == nil then return end local npc_id = npc:id() local group_table = xr_sound.group_idle[get_key(npc)] group_table.idle = math.random(snd.min_snd, snd.max_snd)*1000 if group_table.last_snd == nil then group_table.last_snd = {} end -- необходимо ли нам играть into или rnd звуки if snd.into_max ~= nil and snd.into_max > 0 then if db.sound[npc_id].last_snd[snd.into_id] == snd.into_max - 1 then if snd.into_cycled == true then db.sound[npc_id].last_snd[snd.into_id] = nil else return end end -- играем входные if db.sound[npc_id].last_snd[snd.into_id] == nil then db.sound[npc_id].last_snd[snd.into_id] = -1 end --printf("*SND* play seq [%s] for [%s]", db.sound[npc_id].last_snd[snd.into_id]+1, npc:name()) process_tutor_on_sound(snd.theme) npc:play_sound(snd.into_id, 1, 0, 1, 0, db.sound[npc_id].last_snd[snd.into_id]+1) db.sound[npc_id].last_snd[snd.into_id] = db.sound[npc_id].last_snd[snd.into_id] + 1 --printf("*SND* play seq [%s] for [%s]", db.sound[npc_id].last_snd[snd.into_id], npc:name()) return end if snd.rnd_max ~= nil and snd.rnd_max > 0 then -- играем рандомные local s = 0 if snd.rnd_max == 1 then s = 0 else -- Если прошлый раз проигрывался такой же набор тем -- то учитывать последний звук для группы. -- if db.sound[npc_id].last_snd[snd.rnd_id] ~= nil then if group_table.last_snd[snd.rnd_id] ~= nil then s = math.random(0, snd.rnd_max-2) if s >= group_table.last_snd[snd.rnd_id] then s = s + 1 end else s = math.random(0, snd.rnd_max-1) end end if timeout == nil then timeout = 0 end --printf("*SND* play rnd [%s] for [%s]", s, npc:name()) process_tutor_on_sound(snd.theme) npc:play_sound(snd.rnd_id, timeout+1, timeout, 1, 0, s) --db.sound[npc_id].last_snd[snd.rnd_id] = s group_table.last_snd[snd.rnd_id] = s end end end function get_last_IDS(npc, theme) local last_table = db.sound[npc:id()].last_snd local snd_table = {} if sound_theme.theme[theme] ~= nil then get_sound(sound_theme.theme[theme], snd_table, npc) end --printf("LAST INTO ID for [%s] = [%s], max [%s]", theme, last_table[snd_table.into_id], snd_table.into_max) return last_table[snd_table.into_id], snd_table.into_max end function process_tutor_on_sound(theme) end --' Actor sound player local actor_sound = {} function set_actor_sound(sound) --printf("*ACTOR SND* try to change SND to [%s]", tostring(sound)) if actor_sound.theme ~= sound then --' Туточки надобно распарсить имена тем в их id if sound == nil then sound = "" end actor_sound.theme = sound actor_sound.begin = nil this.set_actor_sound_factor(1) end end function set_actor_sound_factor(factor) local theme = sound_theme.actor_theme[actor_sound.theme] if theme ~= nil then actor_sound.min_snd = theme.min_snd * factor actor_sound.max_snd = theme.max_snd * factor end end function update_actor() local theme = sound_theme.actor_theme[actor_sound.theme] if theme == nil then return end if table.getn(theme.sounds) == 0 then return end if actor_sound.begin == nil or time_global() - actor_sound.begin >= actor_sound.idle then actor_sound.begin = time_global() --' Тут надо отыграть звук local sound = theme.sounds[math.random(table.getn(theme.sounds))] if sound ~= nil then sound:play(db.actor, 0, sound_object.s2d) end actor_sound.idle = math.random(actor_sound.min_snd, actor_sound.max_snd) end end -- modified by Alundaio (original: ????) --' Таблица для хранения созданных саунд обжектов. --' type = [random|seq|looped] local ltx = ini_file("plugins\\xr_sound.ltx") function get_sound_object(theme, t_type) if not (ph_snd_themes) then ph_snd_themes = {} ph_snd_themes[theme] = alun_utils.collect_section(ltx,theme) --printf("collect theme=%s",theme) end if (not ph_snd_themes or not ph_snd_themes[theme]) then --printf("no ph_snd_themes theme=%s",theme) return end if not (sound_object_by_theme) then sound_object_by_theme = {} end if (not sound_object_by_theme[theme])then sound_object_by_theme[theme] = {} end if t_type == nil then t_type = "random" end --' Выбор следующего айдишника local play_id = -1 local table_size = #ph_snd_themes[theme] if (table_size == 0) then return end --printf("tablesize = %s theme=%s",table_size,theme) if sound_object_by_theme[theme].last_id == nil then if t_type == "random" then if table_size >= 2 then play_id = math.random(1, table_size) else play_id = 1 end else play_id = 1 end else if t_type == "random" then if table_size >= 2 then play_id = math.random(1, table_size - 1) if play_id >= sound_object_by_theme[theme].last_id then play_id = play_id + 1 end else play_id = 1 end else if sound_object_by_theme[theme].last_id < table_size then play_id = sound_object_by_theme[theme].last_id + 1 else if type == "looped" then play_id = 1 end end end end --printf("SOUND_OBJECT: selected id [%s] for theme [%s], type [%s], size [%s]", tostring(play_id), tostring(theme), tostring(type), table_size) if play_id == -1 then return end --' Проверяем создан ли у нас соответствующий саунд обжект или его надо создать if sound_object_by_theme[theme][play_id] == nil then if type(ph_snd_themes[theme][play_id]) == "table" then sound_object_by_theme[theme][play_id.."_r"] = get_safe_sound_object(ph_snd_themes[theme][play_id][1].."_r") sound_object_by_theme[theme][play_id.."_l"] = get_safe_sound_object(ph_snd_themes[theme][play_id][1].."_l") else sound_object_by_theme[theme][play_id] = get_safe_sound_object(ph_snd_themes[theme][play_id]) end end sound_object_by_theme[theme].last_id = play_id --' Возвращаем саунд обжект if type(ph_snd_themes[theme][play_id]) == "table" then return sound_object_by_theme[theme][play_id.."_r"], sound_object_by_theme[theme][play_id.."_l"] else return sound_object_by_theme[theme][play_id] end end local sound_object_by_path = {} --' Обертка вокруг функции, возвращающий звуковой объект. function get_safe_sound_object(path) if sound_object_by_path[path] == nil then sound_object_by_path[path] = sound_object(path) end return sound_object_by_path[path] end function stop_all_sound_object() for k,v in pairs(sound_object_by_path) do if v:playing() then v:stop() end end end function clear_all_sound_object() sound_object_by_theme = {} end и теперь всё работает, звук взрыва есть. Что это, и для чего, и как повлияет на игру, не знаю. Но пока всё работает))) Поделиться этим сообщением Ссылка на сообщение