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

Скриптование


Svoboда

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

(изменено)

@strannik-rus , стандартный набор  логики ph_door. От части к части, в принципе, не сильно менялся. Пример ingame:

gamedata\configs\scripts\jupiter\jup_b1_door.ltx

Скрытый текст

 

[logic]
active = ph_door@locked

[ph_door@locked]
locked = true
closed = true
snd_open_start = trader_door_locked
tip_open = jup_b1_door_is_closed
on_info = {=actor_in_zone(jup_b1_open_door_zone)} ph_door@close

[ph_door@close]
locked = false
closed = true
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
on_use = {+jup_b1_give_task} ph_door@open %+jup_b1_already_visited%, ph_door@open
tip_open = tip_door_open
on_info = {!actor_in_zone(jup_b1_open_door_zone)} ph_door@locked

[ph_door@open]
locked = false
closed = false
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
tip_close = jup_b1_bar_door
on_info = {+jup_b1_give_task -jup_b1_already_visited} ph_door@locked %+jup_b1_already_visited%

 

Смотри, что мог упустить :pardon:

Изменено пользователем Купер

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


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

@strannik-rus , дык... более общий случай, "с наворотами". Для понимания принципа. :biggrin:

Впрочем, вопрос уже решён. :good:

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


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

@Colder , а "отсечку" сделать? :spiteful:

function take_item_from_box(box, box_story_id)
    local box_name = box:name()
    if (math.random() < 0.75) then --* вот туточки
--* Вариант 1: по имени
if not string.find(box_name, 'уникальная часть имени нашего рюкзака') 
and (math.random() < 0.75) then
--* Вариант 2: по секции
if box:section() ~= 'наименование секции нашего рюкзака'
and (math.random() < 0.75) then
    axr_sounds.play_sound([[weapons\generic_checkout]])
    mine_box = box
    mine_timer = time_global()+3000
end
end
end

 

  • Спасибо 1
  • Согласен 1
  • Полезно 2

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


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

К посту.

И ведь не поправит никто. Все сидят, ржут мило улыбаются.

Детский сад, штаны на лямках. Но... вот из принципа! :biggrin:

Вызвали мы функцию start_repair_out(cond,num) . Отлично. А дальше... А дальше пытаемся получить секцию и инвентарное наименование для объекта... 

local sect = itm:section()

local name = tostring(system_ini():r_string(sect,"inv_name_short"))

которого в слоте нет :biggrin:

Идеологически верное решение:

Скрытый текст

function start_repair_out(cond,num)
    local itm = db.actor:item_in_slot(num)
	local kit = kits[num]
    if itm ~= nil then
        local s = cond-2
        local sect = itm:section()
        local name = tostring(system_ini():r_string(sect,"inv_name_short"))
        ...
    else
        ...
    end
end

 

 

  • Нравится 1
  • Смешно 1

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


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

 

@Okichi, и ведь не поспоришь... теоретически. 

А практически: больше кода Богу кода? :biggrin: 

Передать сюда - 

local itm = db.actor:item_in_slot(num) (метод для клиентского объекта)

серверную сущность, а потом "грохнуться" гораздо позже с таким логом?

Это ещё надо постараться.

 

Хэх, а сколько по форуму таких зависших вопросов, где "...уже ёжики и догадаются"?

 

 

  • Сочувствую 1

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


Ссылка на сообщение
(изменено)

@Капрал Хикс, что-то наподобие такого. Не идеально, но должно сработать.

Скрытый текст

function using_items(obj)
   local sect = obj:section()
   local actor = db.actor
    if obj and tSound[sect] then
       local snd = xr_sound.get_safe_sound_object(tSound[sect]) --* раз уж выше кэшировали.
        if sect == "item" then --* отсекаем предмет по секции
            if has_alife_info("info1") and has_alife_info("info_2") then --* проверяем поршни 
                script.final_action() -- выполнить функцию из другого скрипта
                snd:play_no_feedback(actor, sound_object.s2d, 0, vector(), 2.0) --* раз уж выше кешировали
            else
                amk.spawn_item_in_inv("item") --* иначе спавн обратно в инвентарь
            end
        else --* отрабатываем остальные элементы таблицы
            snd:play_no_feedback(actor, sound_object.s2d, 0, vector(), 2.0) --* раз уж выше кэшировали.
        end
    end
end

 

 

Вопрос к знатокам:

1. Насколько здесь необходимо вот это вот:

local snd =...
if snd then --* проверка на наличие звука???
	snd:play_no_feedback()
end

2. Потенциальную "дыру" при массовом использовании предметов и методе play_no_feedback только я вижу? play_at_pos с соответствующим обработчиком прерывания не разумнее ли использовать?

Изменено пользователем Купер
  • Полезно 1

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


Ссылка на сообщение
(изменено)

@AndreySol, отчасти гипотетическая, однако, вполне возможная ситуация: последовательное использование нескольких разно озвученных предметов + достаточная продолжительность самой озвучки. Что будет происходить со звуками?

 play_no_feedback  работает же по принципу "выстрелил - забыл": если звук запущен, он будет в любом случае проигран до конца.

Тот же play_at_pos, в свою очередь, позволяет проконтролировать наличие звука в игре. Т.е. что-то наподобие этого:

--* если старый звук играл, прерываем его воспроизведение.
if snd and snd:playing() then
	snd:stop()
end
--* далее по тексту: запускаем новый.

 

Изменено пользователем Купер

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


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

@AndreySol, и я там увижу вполне очевидные вещи :biggrin:. Это больше к @Капрал Хикс-у на предмет обдумывания о целесообразности использования.

@_ХоЗаР_active_detector - нема такого в ЧН.

 

  • Полезно 1

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


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

А вот здесь, субъективно, таймфактор всё-таки надёжнее из конфигов вычитывать.

local t = system_ini():r_u32('alife', 'time_factor')

Это - как минимум. Впрочем, так, к слову.

  • Согласен 2

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


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

Гы... С самых что ни на есть релизных:

Скрытый текст

[remark@esc_corps_wounded]
snd = esc_tolik_to_wolf
target = 006 - возможные значения SID, actor, nil
anim = guard
on_signal = sound_end| walker@to_gulag_esc_corps_wounded
danger = danger_condition@tolik
meet = no_meet
abuse = false

 

 

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


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

Оффтоп:

Скрытый текст

Да ладно, чего зря оффтопить, всё равно без предоставленной проблемной логики гадать можно до морковкиного заговенья :biggrin:

 

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


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

@Norman Eisenherz , ну так либа-то OGSE-шная собрана из расчёта добавления новых худовых слотов. (нож, бинокль, etc).

 

вар1:  добавить эти слоты (config + ui)

вар2: пересобрать либу под собственные нужды. Емнип, нужные методы уже добавлены в "стандартный" X-Ray Ext. Недостающее для сборки с репо можно взять со второй ссылки. Ну и батники для сборки при этом поправить.

 

  • Согласен 1

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


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

@Norman Eisenherz , честно? Вот шут его знает, что у кого год назад стояло. Сейчас любопытства ради попробовал оригинал - Макрон - обр. 14г. Везде ожидаемый вылет. Впрочем, это уже явно не "скриптовые" вопросы.

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


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

@ARTLantist , попробуй тут и тут почитать. Возможно, что-то покажется полезным. (для 2-ой ссылки прокси/vpn с российских ip)

  • Полезно 1

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


Ссылка на сообщение
(изменено)

@EGER.OVERKILL WF ,

31 минуту назад, EGER.OVERKILL WF сказал:

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = nil %+kura%

 

И вот здесь всё-таки так, по моему:

31 минуту назад, EGER.OVERKILL WF сказал:

; cse_shape properties
shapes = 1
shape0:type = box

...

 

Изменено пользователем Купер
  • Согласен 1

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


Ссылка на сообщение
(изменено)

@mole venomous , db.actor:get_inventory_weight(). По идееПример использования.

Скрытый текст

Кто-нибудь многострадальный R1 к OGSR всё-таки прикручивал/ет? Никто не в курсе?

 

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

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


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

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

AMK-Team.ru

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