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

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

Доброго времени суток. Задался тут вопросом: а что в сталкере происходит после смерти актора? Чисто теоретически, ничего не изменяется, можно даже сделать сделать проверку на смерть и какие-то действия 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

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

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

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

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

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

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

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 с соответствующим обработчиком прерывания не разумнее ли использовать?

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

Вопрос к знатокам. Как очистить определенный инвентарный ящик по 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 час назад, Купер сказал(а):

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

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

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

Добрый день! 

Есть ли простой метод определить 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
Ссылка на комментарий

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
К сожалению, ваш пост содержит слова, запрещенные в нашем сообществе. Пожалуйста, измените ваш текст так, чтобы в нем не оставалось слов, указанных ниже. Помните, что публикация вами даже видоизмененного запрещенного слова может нарушать законодательство РФ и Правила форума.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

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

AMK-Team.ru

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