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

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


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

Очередной вопрос.
Имеем стандартную функцию оригинала ТЧ по нанесению хита по обжекту

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



function hit_obj(actor, npc, p)
    local h = hit()
    local obj = level_object_by_sid(p[1])
    local sid = nil

    if not obj then
--        abort("HIT_OBJ [%s]. Target object does not exist", npc:name())
        return
    end

    h:bone(p[2])
    h.power = p[3]
    h.impulse = p[4]

    if p[5] then
        sid = tonumber(p[5])
        if sid then
            sid = level_object_by_sid(sid)
            if sid then
                h.direction = vector():sub(sid:position(), obj:position())
            end
        end
        if not sid then
            h.direction = vector():sub(patrol(p[5]):point(0), obj:position())
        end
    else
        h.direction = vector():sub(npc:position(), obj:position())
    end

    h.draftsman = sid or npc
    h.type = hit.wound
    obj:hit(h)
end

 

В оригинале параметры в неё передаются через рестр, например по бочкам на дороге к Выжигателю, которые падают с горы на ГГ.

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

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



function hit_mon()
  local h = hit()
  local obj = level_object_by_sid(14200)
  local sid = nil

  if not obj then
--    abort("HIT_OBJ [%s]. Target object does not exist", npc:name())
    return
  end

  h:bone("link")
  h.power = 1
  h.impulse = 1500

  if p[5] then
      sid = tonumber(p[5])
      if sid then
          sid = level_object_by_sid(14200)
          if sid then
              h.direction = vector():sub(sid:position(), obj:position())
          end
      end
      if not sid then
          h.direction = vector():sub(patrol(p[5]):point(0), obj:position())
      end
  else
      h.direction = vector():sub(npc:position(), obj:position())
  end

  h.draftsman = sid or npc
  h.type = hit.wound
  obj:hit(h)
end

 

Но ничего не происходит и лог ругается на строку

h.direction = vector():sub(npc:position(), obj:position())

пишет что  - _attempt_to_index_global_'npc'_(a_nil_value)

Может быть есть иные функции с прямыми параметрами, чтобы разрушить итем с СИДом ? Или чего-то не хватает в стандартной функции ?

Спасибо.

"Кругом зомби.....у меня кончаются патроны...."

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

@BFG , npc в этой строчке - это объект, из логики которого вызывается функция - его позиция используется для задания направления хита. Еще в функции для этого может быть использован любой другой объект со story_id, либо путь - параметр p[5]. Если направление не важно, то тут можно поставить пустой вектор.

function hit_mon()

  local h = hit()

  local obj = level_object_by_sid(14200)

 

  if not obj then return end

 

  h:bone("link")

  h.power = 1

  h.impulse = 1500

  h.direction = vector():set(0,0,0)

  h.draftsman = obj  -- тут объект, от которого прилетело, можно поставить актера или, лучше, самого себя, если не имеет значения

  h.type = hit.wound

  obj:hit(h)

end



  • Спасибо 1

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

naxac.gif

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

@naxac Попробовал. Вроде и сработала функция, но итем не разрушился. Возможно маловаты значения мощности и импульса, тогда какие цифры ставить.

Хочу разрушить стандартный монолитовский генератор, в которые мы стреляем в бункере где О-Сознанец. Такие цилиндры с синими партиклами.

a7b395a5468cb4fe2362076022be8a96b2cda929

У него в модели путь к разрушению config\models\objects\monolith_generator.ltx

Там прописано fire_wound_immunity      = 0.15

Может у меня цифирьки маловаты выставлены для такой пулестойкости ? Не взрывается он...собака такая..

"Кругом зомби.....у меня кончаются патроны...."

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

@BFG , надо силу хита увеличить, единицы, видимо, мало.

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

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

naxac.gif

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

@naxac Нет, увы не разрушается зараза. Поставил уже

h.power = 10000 и ничего не происходит.

А 4 пульки из ПКМа спокойно грохают его. Может что не так с функцией ?

"Кругом зомби.....у меня кончаются патроны...."

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

h.type = hit.wound

Может тип хита поменять на:

h.type = hit.fire_wound

?

Изменено пользователем abramcumner
  • Спасибо 1
  • Согласен 3
Ссылка на комментарий

@abramcumner Да, так и есть. Андрей (Charsi) уже в скайпе подсказал такой же тип хита. Щас всё работает прекрасно. Монолитовский генератор взорвался.

Текущая функция если кому пригодится по нанесению хита на итем с СИДом:

function hit_mon()
  local h = hit()
  local obj = level_object_by_sid(14200)
  if not obj then return end
  h:bone("link")
  h.power = 10
  h.impulse = 1500
  h.direction = vector():set(0,0,0)
  h.draftsman = obj
  h.type = hit.fire_wound
  obj:hit(h)
end

Всем спасибо кто помогал.

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

"Кругом зомби.....у меня кончаются патроны...."

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

Всем привет. Очень нужна ваша помощь. Подскажите пожалуйста, как прописать звуки дыхания в одетых противогазах(мод Dynamic Hud для ТЧ)? Буду признателен если поможете. Спасибо.

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

@DJ.Orb.Warpal у меня так сделано:

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




local suitfirstrun = "yes"
local breathing_sound
function set_my_suit_hud(hudtype)

	if hudtype == nil then
		local wchud = get_hud():GetCustomStatic(mycurrent_suithud)
		if wchud ~= nil then get_hud():RemoveCustomStatic(mycurrent_suithud) end

--================= звук дыхания ====================
if breathing_sound and breathing_sound:playing() then
		breathing_sound:stop() breathing_sound = nil
end
--================= звук дыхания ====================

		mycurrent_suithud = nil
		suitfirstrun = "yes"
		return
	end
	if hudtype ~= mycurrent_suithud then
		if mycurrent_suithud then
			get_hud():RemoveCustomStatic(mycurrent_suithud)
		end
		if hudtype then
			get_hud():AddCustomStatic(hudtype)
			my.hidden_static()

--================= звук дыхания ====================
if db.actor.power > 0.18 then
		if not (breathing_sound and breathing_sound:playing()) then
			breathing_sound = xr_sound.get_safe_sound_object([[actor\gasmask_idle_]]..math.random(2))
			breathing_sound:play_at_pos(db.actor, vector(), 0, sound_object.s2d + sound_object.looped)
		end
end
--================= звук дыхания ====================

			if string.find(hudtype, wotsuittype) then
				if suitfirstrun == "no" and suit_condition ~= "green" and suit_condition ~= "blue" then
					local snd_obj = sound_object("actor\\gasmask_on_fast")
					if snd_obj then
						snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 9.0)
					end
				end
				if suitfirstrun == "yes" then suitfirstrun = "no" end
			end
		end

	end
	mycurrent_suithud = hudtype
end


 

 

Ссылка на комментарий
22 минуты назад, Купер сказал:

Подскажите неофиту, кому не лень, или носом ткните, на ходу без НИ можно менять _way, _look  в all.spawn?

Можно. Пути читаются при загрузке игры. НИ не нужна.

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

Сталкер - наше всё!

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

Други, напомните. вроде как-то обсуждали, почему например, бандит в куртке держит очередь из АК в живот и не умирает, а солдатик в комбезе с одной пули труп. В каком направлении копать? И если в damages.ltx, то за что отвечают эти коэффициенты:

[body_kurtka_damage]
bip01_pelvis                 = 1.0, 0.15
bip01_spine                  = 1.0, 0.15
bip01_spine1                  = 1.0, 0.15
bip01_spine2                  = 1.0, 0.15

 

Еще бы неплохо знать, какая косточка как называется. Может, есть где такая инфа?

 

upd: названия косточек нашел. И вроде чем выше второй коэффициент, тем сложнее убить НПС. Так ли это и каково его максимальное значение? Единица?

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

Сталкер - наше всё!

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

@AndrewMor я все время забываю подробности, но попробую вспомнить. Второй параметр - это не коэффициент. Это величина хита, от которого защищена эта кость. Моб получит наибольший хит из следующих вариантов: hit_fraction * хит или хит минус эта величина. Что окажется больше. И не нужно забывать о иммунитетах в секции моба. Как иммунитетах по костям, так и по типу хита. А ещё health_ hit_part или как там его. А ещё скорость восстановления здоровья.

  • Спасибо 1
Ссылка на комментарий
2 часа назад, dsh сказал:

Второй параметр - это не коэффициент.

Но в общем и целом увеличение второго параметра делает конкретную кость менее чувствительнее к хиту, так?

 

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

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

Сталкер - наше всё!

Ссылка на комментарий
2 hours ago, AndrewMor said:

увеличение второго параметра делает конкретную кость менее чувствительнее к хиту, так?

Да, увеличение этого параметра увеличивает защиту этой кости.

 

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

Господа, ковырялся я тут в файлах звуковых

Очень много интересных вещей. Есть много звуков, которые в игре не используется. Например, в soc я заставил НПС здороваться со мной при встрече. Но так и не смог заставить их как в ЧН произносить фразы типа "язык проглотил, че молчишь" и тд, когда с нами поздоровались, а мы бездействуем. Так же есть звуки прощания НПС с нами и тд. Никто подобным не занимался? Не пробовали вырезанную озвучку подключать?

Ссылка на комментарий
2 минуты назад, _Val_ сказал:

Если есть звуки, то чего бы их и не подключить..Ну если надо конечно)))

никак не пойму как это сделать. Они вроде и включены, и пути верно прописаны до звуковых файлов. А не проигрываются

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

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

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

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

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

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

Войти

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

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

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