alex5773 1332 Опубликовано 19 Октября 2012 Как сделать чтоб торговцы покупали оружие и броню в любом состоянии, но хоть на половину целым? А то сейчас покупают только почти целое оружие и броню, если на 2-3 полоски сломано, уже не берут. Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 7 Сентября 2013 А можно ли сделать всем нпс диалоговое окно с торговлей, вместо этого: "Вон старший, к нему обращайся".? Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 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 1332 Опубликовано 16 Апреля 2014 Мясник мод Мясник 1.0 http://rghost.ru/private/54232345/5a135e77a704a9c6d02fd1683f98994d Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 28 Мая 2014 Хотя вписывал как положено! Если бы ты вписывал как положено, то с проблемой бы этой не столкнулся. Вот тебе script Syntax Checker(для проверки скриптов, запускаешь и указываешь на папку scripts, и программка проверяет правильность написания скриптов, ну и указывает на ошибку) http://rghost.ru/private/55911083/903850d1e1ce6ed1742bc31610c64e2b И удачи в освоении модинга 1 Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 28 Мая 2014 для чего нужны такие скрипты: bind_stalker.script.bak, bind_monster.script.bak Чтоб удалить их, они тебе явно не нужны, и игре тоже. Это просто кто-то их так сохранял оригинальными(до изменений). Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 27 Февраля 2015 Ребят, а как отключить автоподбор оружия при обыске нпс? Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 30 Июня 2016 Кто в курсе как в ЧН и ЗП можно правильно настроить пробиваемость преград? Есть ли у кого точные цифры пробития преград? Вот допустим в ТЧ k_pierce = коэффициент бронебойности. ; 1.1 - не пробивается забор и жесть. ; 1.12 - пробивается забор и застревает в первой стенке халупы. ; 1.15 - пробивается забор и застревает в первой стенке халупы. ; 1.2 - пробивается забор и застревает в первой стенке халупы. ; 1.25 - ствол толстого дерева не пробивается. пробивается забор и первая стенка, застревает во второй стенке халупы. ; 1.35 - ствол толстого дерева не пробивается. ; 1.4 - ствол толстого дерева не пробивается. ; 1.45 - ствол толстого дерева пробивается ; 1.5 - ствол толстого дерева пробивается ; бетон не пробивается никогда А какие циферки ставить в ЗП? Т.к если такие цифры поставить в ЗП, то даже ПМ будет пробивать бетонный забор. Хотя в ТЧ бетонный забор не пробивается вообще, а вот в ЗП прошивается насквозь, за бетонным забором уже не спрячешься. Просто охота настроить по реалистичней как-то. Но не могу поймать цифру, чтоб была такая же реалистичность по пробитию как в ТЧ. Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 22 Июля 2016 (изменено) А respawn_idle = 60000, это сколько игрового времени? И какое можно ставить максимальное число, которое будет работать? А можно ли в ЗП как в ТЧ, сразу всем одной строчкой изменить время респавна? Изменено 22 Июля 2016 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 22 Июля 2016 (изменено) А local RESPAWN_RADIUS = 150 -- радиус респауна(если актер ближе, то не спаунить), это в метрах, или в сантиметрах? Т.к они чуть ли не перед носом ГГ спавнятся. Изменено 22 Июля 2016 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 3 Ноября 2017 Не нашёл подходящей темы где задать этот вопрос, так что задам его тут. Как отключить reports? С\Пользователи\Имя компа\AppData\Roaming\XRay Engine\reports А то засирает диск С, иногда забываешь чистит этот reports, и там прилично накапливается мб. Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 17 Февраля 2018 (изменено) А по какой причине может не спавнится Доктор на болоте Доктора, а спавнится лишь его стул на котором он должен сидеть, и стул спавнится не в доме, а рядом с домом вися в воздухе. Может на это влиять просто распаковка и запаковка алспавна? Потому как вообще не трогал локацию ту в алспавне, а всего лишь удалил с тайников новое оружие и патроны на других локациях. Извиняюсь, не в ту тему. Но по моему это без разницы для этого вопроса. Правда внимания не обратил, что это CоP тема Изменено 17 Февраля 2018 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 23 Февраля 2018 (изменено) 33 минуты назад, Шиш сказал: СоС 6.03 Что это? Вроде последняя версия 1.4.22, ну и бетка есть 1.5, а у тебя вон аж 6.03. Ты из будущего? А жажду настраивай в drink.script. Удалите тот мой пост, он неактуален давно. Изменено 23 Февраля 2018 пользователем alex5773 1 Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 10 Августа 2018 В 07.08.2018 в 15:45, Space.Marine сказал: как изменить ситуацию с бесконечными патронами у неписей. Очень просто. Забрать у всех неписей патроны, выстрелят магазин, и всё, перезаряжать нечем будет. И знаешь, разницы абсолютно никакой не будет, что допустим два-три раза перезарядка будет и кончатся патроны, или вообще её не будет, сразу кончатся. Т.к результат будет один, - отсутствие патронов. Для игры заканчивающие патроны у неписей, это глупость. Тебе нравится когда они бегают по Зоне без оружия? А так, никак. Если у их есть полная пачка патронов, то это уже всё, они никогда не кончатся. А если им дать допустим 29 патронов для автомата, то они перезарядят, выстрелят их, и всё, нет больше патронов. 1 Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 27 Октября 2018 А как запретить апгрейд уникальным стволам(уникам)? Вроде как в inventory_upgrades.script надо это делать, а как, фиг его знает. Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 27 Октября 2018 Да сработало уже Думаю иконки при ремонте тоже так убрать можно? Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 27 Октября 2018 (изменено) -- Изменено 28 Октября 2018 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 27 Октября 2018 (изменено) -- Изменено 28 Октября 2018 пользователем alex5773 Поделиться этим сообщением Ссылка на сообщение
alex5773 1332 Опубликовано 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 1332 Опубликовано 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 и теперь всё работает, звук взрыва есть. Что это, и для чего, и как повлияет на игру, не знаю. Но пока всё работает))) Поделиться этим сообщением Ссылка на сообщение