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

[CoP] Ковыряемся в файлах


Halford

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

Как сделать чтоб торговцы покупали оружие и броню в любом состоянии, но хоть на половину целым? А то сейчас покупают только почти целое оружие и броню, если на 2-3 полоски сломано, уже не берут.

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


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

А можно ли сделать всем нпс диалоговое окно с торговлей, вместо этого: "Вон старший, к нему обращайся".?

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


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

Ребят, кто может точно сказать что означает 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, т.е больше склоняюсь к этому варианту :russian_ru:



В ЗП по другому всё что-ли, сделал патронам k_pierce = 1.5 как в тч обычно делаю, так теперь забор бетонный пробивает насквозь.

Бетонный то не должен пробивать вообще, по крайней мере в ТЧ не пробивает бетонное, кирпичное, вроде как.

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

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


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

 

 


Хотя вписывал как положено!

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

Вот тебе script Syntax Checker(для проверки скриптов, запускаешь и указываешь на папку scripts, и программка проверяет правильность написания скриптов, ну и указывает на ошибку)

 http://rghost.ru/private/55911083/903850d1e1ce6ed1742bc31610c64e2b

И удачи в освоении модинга ;)

  • Нравится 1

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


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

 

 


для чего нужны такие скрипты: bind_stalker.script.bak, bind_monster.script.bak

Чтоб удалить их, они тебе явно не нужны, и игре тоже. Это просто кто-то их так сохранял оригинальными(до изменений).

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


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

Кто в курсе как в ЧН и ЗП можно правильно настроить пробиваемость преград? Есть ли у кого точные цифры пробития преград?

Вот допустим в ТЧ

k_pierce = коэффициент бронебойности.
; 1.1 - не пробивается забор и жесть.
; 1.12 - пробивается забор и застревает в первой стенке халупы.
; 1.15 - пробивается забор и застревает в первой стенке халупы.
; 1.2 - пробивается забор и застревает в первой стенке халупы.
; 1.25 - ствол толстого дерева не пробивается. пробивается забор и первая стенка, застревает во второй стенке халупы.
; 1.35 - ствол толстого дерева не пробивается.
; 1.4 - ствол толстого дерева не пробивается.
; 1.45 - ствол толстого дерева пробивается
; 1.5 - ствол толстого дерева пробивается
; бетон не пробивается никогда

А какие циферки ставить в ЗП?

Т.к если такие цифры поставить в ЗП, то даже ПМ будет пробивать бетонный забор.

Хотя в ТЧ бетонный забор не пробивается вообще, а вот в ЗП прошивается насквозь, за бетонным забором уже не спрячешься. 

Просто охота настроить по реалистичней как-то. Но не могу поймать цифру, чтоб была такая же реалистичность по пробитию как в ТЧ. 

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


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

А respawn_idle = 60000, это сколько игрового времени?

И какое можно ставить максимальное число, которое будет работать?

А можно ли в ЗП как в ТЧ, сразу всем одной строчкой изменить время респавна?

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

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


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

А local RESPAWN_RADIUS = 150 -- радиус респауна(если актер ближе, то не спаунить), это в метрах, или в сантиметрах?

Т.к они чуть ли не перед носом ГГ спавнятся.

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

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


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

Не нашёл подходящей темы где задать этот вопрос, так что задам его тут.

Как отключить reports? С\Пользователи\Имя компа\AppData\Roaming\XRay Engine\reports

А то засирает диск С, иногда забываешь чистит этот reports, и там прилично накапливается мб.

 

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


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

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

Может на это влиять просто распаковка и запаковка алспавна?

Потому как вообще не трогал локацию ту в алспавне, а всего лишь удалил с тайников новое оружие и патроны на других локациях.

Извиняюсь, не в ту тему. Но по моему это без разницы для этого вопроса.

Правда внимания не обратил, что это CоP тема:)

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

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


Ссылка на сообщение
33 минуты назад, Шиш сказал:

СоС 6.03

Что это? Вроде последняя версия 1.4.22, ну и бетка есть 1.5, а у тебя вон аж 6.03. Ты из будущего?

А жажду настраивай в drink.script.

 

Удалите тот мой пост, он неактуален давно.

Изменено пользователем alex5773
  • Спасибо 1

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


Ссылка на сообщение
В 07.08.2018 в 15:45, Space.Marine сказал:

как изменить ситуацию с бесконечными патронами у неписей.

Очень просто. Забрать у всех неписей патроны, выстрелят магазин, и всё, перезаряжать нечем будет.

И знаешь, разницы абсолютно никакой не будет, что допустим два-три раза перезарядка будет и кончатся патроны, или вообще её не будет, сразу кончатся.

Т.к результат будет один, - отсутствие патронов.

Для игры заканчивающие патроны у неписей, это глупость. Тебе нравится когда они бегают по Зоне без оружия?

А так, никак. Если у их есть полная пачка патронов, то это уже всё, они никогда не кончатся. А если им дать допустим 29 патронов для автомата, то они перезарядят, выстрелят их, и всё, нет больше патронов.

  • Нравится 1

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


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

А как запретить апгрейд уникальным стволам(уникам)?

Вроде как в inventory_upgrades.script надо это делать, а как, фиг его знает.

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


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

Да сработало уже:grin2:

Думаю иконки при ремонте тоже так убрать можно?

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


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

А можно как-нибудь это переписать под ЗП?

            --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

 

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


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

Пришлось ещё задействовать 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

и теперь всё работает, звук взрыва есть. Что это, и для чего, и как повлияет на игру, не знаю. Но пока всё работает)))

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


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

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