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

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

Доброго времени суток. Задался тут вопросом: а что в сталкере происходит после смерти актора? Чисто теоретически, ничего не изменяется, можно даже сделать сделать проверку на смерть и какие-то действия NPC, если проверка вернула true. Из этого вытекает вопрос: а можно ли сделать респавн актора без загрузки сохранений? Покопавшись в скриптах, я выяснил, что за создание актора отвечают функции add_actor в файле db.script, a также скрипт actor_proxy.script. Кроме того, в мультиплеере респавн актора возможен. Как он там реализован? Применим ли этот механизм к синглу? Команды alife():release по отношению к актору, даже метвому, не работает. Что произойдет ,если скриптово удалить актора, а затем заспавнит по координатам?

Ссылка на комментарий
22 часа назад, STALKER_Dragon сказал(а):

Что произойдет ,если скриптово удалить актора, а затем заспавнит по координатам?

А что мешает проверить?

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif


Подарки

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

Помогите разобраться, а то я забуксовал на ровном месте. Дано: скрипт использования предметов со звуками. Мне нужно следующее: при использовании определённого предмета и наличии двух инфопоршней проигрывать звук и выполнять функцию из другого скрипта, если поршней нет - не играть звук и спавнить предмет обратно в инвентарь (он съедобный, на классе антирада). Вот скрипт в упрощённом виде:

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

 

local tSound ={
cocacola            = "scripts\\inv_drinking",
item              = "scripts\\inv_item" - предмет и звук для него
}

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

Сейчас без наличия инфопоршней предмет просто "съедается" и звук всё равно проигрывается....

 

 


Подарки

  • Ссылка на комментарий

    @Капрал Хикс убери end перед else, странно, что вылета нет, ибо их тут больше, чем надо, да и для else нет подходящего if. Если ты делаешь цепочку "если-иначе", то нужно писать так:

    if condition then
    	action1
    else
    	action2
    end

    Конечно у тебя предмет съедаться будет и не будет спавниться:)

    А на счёт проигрываемого звука:

    тебе его тоже нужно засунуть под проверку с инфопоршнями, ибо у тебя это выглядит так: если есть звук, то устанавливаем переменную и проигрываем этот звук. Тут же ожидать другого и невозможно)

    • Полезно 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
    Ссылка на комментарий

    Вопрос к знатокам. Как очистить определенный инвентарный ящик по ID? То-есть, как, к примеру, определенным скриптом удалить все предметы из ящика в деревне новичков?

    Ссылка на комментарий
    2 часа назад, hArdplAyer22_22 сказал(а):

    Как очистить определенный инвентарный ящик по ID?

    Вот так можно -

    Скрытый текст
    
    function clear_box( box_id )  -- ID ящика, который нужно очистить
      for a = 1, 65535, 1 do
        local sobj = alife():object( a )
        if sobj and sobj.parent_id == box_id then
          alife():release( sobj, true )
        end
      end
    end

     

    Причём, неважно, в онлайне ящик или нет.

    Изменено пользователем Manool
    Ссылка на комментарий

    Нужно сделать проверку на наличие детектора "Отклик" в руках.

    Это возможно?

     

    active_item:section() == "detector_simple" не работает,

    хотя active_item:section() == "wpn_pm" - вполне себе

     

    Игра: ЧН (с OGSM)

     

    UPD:

    active_item:clsid() == clsid.device_detector_simple и active_item:clsid() == clsid.detector_simple_s тоже не работают.

    Хотя например active_item:clsid() == clsid.wpn_pm_s проверку проходит

    Все эти device_detector_simple, detector_simple_s и wpn_pm_s взяты из m_netpk.ltx

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

    @hetrikWHY В ЗП есть метод active_detector. Используется аналогично методу active_item. Думаю он есть и в ЧН.@Norman Eisenherz Давным - давно, (может пол года назад) Когда я переносил сортировку инвентаря из DMX мода на ЗП (Используя только оригинальный движкок, аля челенж такой). Я делал так. Окно на рендер отправлял в текущем вызове. В основном XML инвентаря убирал фон, и рендерил его из фейкового окна. 

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

    6 ГБ ОЗУ DDR3 1098 мГц (Разносорт)

    Процессор Intel Xeon E5420 4/4 2.5 ГГц

    Видеокарта Gigabyte GeForce GT 240 512 МБ GDDR5 (Samsung) DirectX v10.1

     

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

    Привет! 

    Задаю анимацию в path_look, проигрывается. Берём анимацию сидения на стуле. А как по высоте анимку подогнать под стул? 

    Выходит что силячий нпс парит над стулом. Как ни ковырял координаты - все никак не выходит. Или высота строго задана в самой анимки и идёт отчёт высоты строго от вертекса на полу? 


    Подарки

  • Ссылка на комментарий

    @_Sk8_AsTeR_ 

    Видимо проще подобрать стул под высоту анимации.

     

    26.05.2021 в 05:21, Купер сказал(а):

    Потенциальную "дыру"

    А где ты ее увидел, эту дыру? Внутри play_no_feedback использует все то-же, что и play_at_pos, просто назначение ф-ций разное.

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

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

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

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

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

     

    Изменено пользователем Купер
    Ссылка на комментарий

    @Купер 

    Ну так используй каждую ф-цию по назначению - и все будет как надо. Ведь play_no_feedback  для того и создана, чтоб запустить воспроизведение и забыть. И еще раз - загляни в исходники, в реализацию обоих ф-ций, сразу поймешь что и как...

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

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

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

     

    • Полезно 1
    Ссылка на комментарий
    1 час назад, Купер сказал(а):

    на предмет обдумывания о целесообразности использования.

    Пока вполне подходит при употреблении многих предметов за раз.


    Подарки

  • Ссылка на комментарий

    Добрый день! 

    Есть ли простой метод определить condition оружия для серверного объекта?

    Что-то аналогичное клиентскому методу obj:condition()

    Движок - ОП 2.1

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

    @AndreySol Теоретически да. Делаю так:

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

     

    
    
    function ph_test_netpk()
    	local item, cl_sid, sect, pk, data
    	for i = 1, 65534 do	-- Ищем вообще все существующие объекты в игре			
    		item = alife():object(i) --получаем серверный объект			
    		if item then				
    			cls_id = item:clsid()
    			sect=item:section_name()				
    			if iAmWeapon[cls_id] and config:line_exist(sect, "ammo_class") then
    					
    					--НЕТ-ПАКЕТЫ					
    					pk = get_netpk( item, 1 )
    					if pk and pk:isOk() then
    						data = pk:get()
    						log("К="..data.condition)
    					end	
    					
    			end			
    		end	
    	end --for	
    	log("It's OK!")
    end

     

     

     

    Однако получаю вылет вот такой:

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

    [06.06.21 16:42:30.497]  [LUA] SCRIPT RUNTIME ERROR
    [06.06.21 16:42:30.497]  [LUA] z:\op21-repack\gamedata\scripts\m_netpk.script:1231: attempt to index local 'uppk' (a nil value)
    [06.06.21 16:42:30.497]  
    [06.06.21 16:42:30.497] FATAL ERROR
    [06.06.21 16:42:30.497]  
    [06.06.21 16:42:30.497] [error]Expression    : fatal error
    [06.06.21 16:42:30.497] [error]Function      : CScriptEngine::lua_error
    [06.06.21 16:42:30.497] [error]File          : script_engine.cpp
    [06.06.21 16:42:30.497] [error]Line          : 79
    [06.06.21 16:42:30.497] [error]Description   : <no expression>
    [06.06.21 16:42:30.497] [error]Arguments     : LUA error: z:\op21-repack\gamedata\scripts\m_netpk.script:1231: attempt to index local 'uppk' (a nil value) 

     

    Изменено пользователем phalcor
    Ссылка на комментарий

    Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

    Комментарии могут оставлять только зарегистрированные пользователи

    Создать аккаунт

    Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

    Зарегистрировать новый аккаунт

    Войти

    Есть аккаунт? Войти.

    Войти
    • Недавно просматривали   0 пользователей

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

    AMK-Team.ru

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