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

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

@losiara, после спавна сохрани ккда-нибудь id или имя объекта (в пстор), а в нужный момент - загрузи из пстора, получи объект и удали. И из пстора тоже, чтоб место не занимать. Изменено пользователем naxac
  • Спасибо 1

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

naxac.gif

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

Вечер добрый!!!

Никто не сталкивался с таким вылетом:

 

Expression : no_assert
Function : CALifeStoryRegistry::add
File : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_story_registry.cpp
Line : 30
Description : Specified story object is already in the Story registry!

 

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

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

Изменено пользователем losiara
Добавлено BFG,

На главной странице форума, прямо под логотипом "АМК", есть строка.
В этой строке есть три красных буквы FAQ. Жми на них и ты перейдёшь на "Справочник по вылетам". Там, внутри справочника, по тэгу "Line:30", ты найдёшь и свой вылет и способ его устранения.

Жизнь следует измерять поступками, а не временем...

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

взгляд скриптово на каждую кость можно отследить? Или только на "особенные"?

Список где увидеть можно?

Можно ли узнать направление кости, т.е. допустим сторона коленки спереди сзади, сбоку?

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

 

 

Но как можно в 3д вырисовать линию направления?

Линия есть набор точек. Получаете вектор из точки А в точку Б, меняя его длину с желаемым интервалом, получаете этот самый набор точек, функция проекции точки в 3д на экран у вас уже есть.

Кстати по секрету. Этот набор точек вообще необязательно рисовать в 3д. Вы же проекции точек на экране рисуете. А экран это 2д-плоскость. вот и рисуйте в той же 2д-плоскости линию, связывающую две известные точки в этом же 2д. Я так и делаю :)

 

 

Подскажите, с чем может быть связан вылет?

Если перевести, то можно прочитать - попытка сравнения nil c юзердатой.

@HellRatz, Если не ошибаюсь, все пожелания из вашего поста достигаются при помощи модулей нетпакетов Артоса. И без переспавна или двойного спавна.

  • Нравится 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Приветствую. А реально ли без правок движка на ТЧ (Ну максимум XE) штатными методами отлавливать определенное оружие в руках ГГ, и определенную анимацию отыгрываемую этим оружием в данный момент? Ну и повесить на все это дело выполнение функции, если условие оружие-анимация выполнено. Ну и конечно не одноразово бы, а постоянно проверять это. Пока оружие в руках - выполняем функцию.

 

достигаются при помощи модулей нетпакетов Артоса

Эх.. Если я это (И вообще скрипты) познаю когда-нибудь, может и да. А пока так :pardon:

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

@HellRatz, Привет)) Отловить можно так: 

local active_item = db.actor:active_item()
if active_item and active_item:section() == "твое_оружие"  then
...
end
Насчет анимаций, не знаю. Помню кто-то недавно уже задавал такой вопрос. Но можно еще с помощью ХЕ получить текущие состояние оружия:

local weapon_states = {
idle = 0,
fire = 1,
fire2 = 2,
reload = 3,
showing = 4,
hiding = 5,
hidden = 6,
misfire = 7,
mag_empty = 8,
switch = 9
}

local state = db.actor:active_item():get_hud_item_state()
if state == weapon_states.fire then
...
end

 

 

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

Это опять же можно делать и без ХЕ, нетпакетами.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

На практике подмена параметра owner_id не работает, кроме того аномалия может сработать и на нести урон нпс до перепрошивки. А вот переспавн работает просто идеально.

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

 

 

Ну и повесить на все это дело выполнение функции, если условие оружие-анимация выполнено.

 

А какую анимацию? Если перезарядку, то что-то типа такого:

 

 

local cur_wpn = {}
function on_update( delta )
  local wpn = db.actor:active_item()
  if not wpn then return end
  if not wpn:is_weapon() then return end
  if ( not cur_wpn.id ) or cur_wpn.id ~= wpn:id() then
    cur_wpn = {
      [ "ammo_n"       ] = wpn:get_ammo_in_magazine(),
      [ "has_gl"       ] = has_wpn_gl( wpn ),
      [ "has_silencer" ] = ( ogse_wpn_utils.get_silencer_status( wpn ) == 2 ),
      [ "id"           ] = wpn:id(),
      [ "weapon_state" ] = wpn:get_hud_item_state(),
      [ "wpn"          ] = wpn,
    }
    if cur_wpn.has_gl then
      cur_wpn.gl_mode = ogse_wpn_utils.get_gl_mode( wpn )
      cur_wpn.gl_name = get_string( wpn:section(), "grenade_launcher_name" )
    end
  end
  check_silencer( wpn )
  local state = wpn:get_hud_item_state()
  if state == cur_wpn.weapon_state then
    if state == weapon_states.fire then
      local ammo_n = wpn:get_ammo_in_magazine()
      if ammo_n ~= cur_wpn.ammo_n then
        cur_wpn.ammo_n = ammo_n
        ogse_signals.get_mgr():call( "on_actor_fire", cur_wpn )
      end
    end
  else
    cur_wpn.weapon_state = state
    if state == weapon_states.fire then
      cur_wpn.ammo_n = wpn:get_ammo_in_magazine()
      ogse_signals.get_mgr():call( "on_actor_fire", cur_wpn )
    elseif state == weapon_states.switch then
      if cur_wpn.has_gl then
        local gl_mode = ogse_wpn_utils.get_gl_mode( wpn )
        if cur_wpn.gl_mode ~= gl_mode then
          cur_wpn.gl_mode = gl_mode
          ogse_signals.get_mgr():call( "on_wpn_gl_mode", cur_wpn )
        end
      end
    elseif state == weapon_states.reload then
      if
        ( db.actor:is_actor_sprinting() or db.actor:is_actor_climbing() )
        and math.random() < level.get_game_difficulty() * 0.2
      then
        db.actor:drop_item( wpn )
        dsh.say_blin()
      end
    end
  end
end
 

Здесь обрабатывается стрельба, переключения подствольника и перезарядка. Сравнение с wpn:section() в начало уже сам добавить сможешь.

 

 

 

  • Спасибо 1
Ссылка на комментарий
Если перезарядку

Нет, увы, не перезарядку. Надо на idle, и пока у нас спокойное состояние, все это время выполняется функция. С этим все хорошо, это отловили. Сейчас вскрылась другая проблема: функция выполняется даже если в оружии нет патронов. Нужно как-то проверять патроны, если они = 0, то состояние idle не обрабатывается. Увидел, кстати, в твоем примере: [ "ammo_n" ] = wpn:get_ammo_in_magazine(), возможно, это то, что мне нужно?

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

 

 

wpn:get_ammo_in_magazine()

Да это именно оно.

  • Спасибо 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Камрады, поясните, кто знает. В Солянке в файле sak_off_corpses.script есть две таблицы: tabl_corpses и tabl_corpses_9510. Так понимаю, что в первую заносятся трупы,  которые убираются. А во вторую - которые не должны убираться, что ли (те, которым прописан story_id)?

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

Ссылка на комментарий
@AndrewMor, если я не путаю, в первую в цикле заносятся трупики, которые сейчас будут удалятся. Во вторую заносятся трупики, у которых story_id меньше 9510 и они не будут удаляться.
Ссылка на комментарий

@AndrewMor, если я не путаю, в первую в цикле заносятся трупики, которые сейчас будут удалятся. Во вторую заносятся трупики, у которых story_id меньше 9510 и они не будут удаляться.

Спасибо, я так и думал.

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

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

В движок залезть

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Как ловить хиты по актору?

Причём так же важен тип хита и от кого получен.

Т.е. удар от монстра или человека, или выстрел из опред. Оружия, или же хит от жарки и т.д.

У ГГ есть кости?

Тогда так же если хит от удара или выстрела, то ещё и по какой кости ГГ пришёлся удар/выстрел.

Ссылка на комментарий
@FonSwong,если ты используешь x-ray extensions или OGSE, то там имеется колбэк, вызываемый перед обработкой хита. Вся нужная информация там имеется. Ты же, кажется, для OGSE делаешь? Найди там обработку бюрера, в скриптах. Ему из этого колбэка неуязвимость делается.
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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