Скриптование - Страница 357 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

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

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/
@losiara, после спавна сохрани ккда-нибудь id или имя объекта (в пстор), а в нужный момент - загрузи из пстора, получи объект и удали. И из пстора тоже, чтоб место не занимать. Изменено пользователем naxac
  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

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

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

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

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

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

 

 

Но как можно в 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 не работает, кроме того аномалия может сработать и на нести урон нпс до перепрошивки. А вот переспавн работает просто идеально.

Хм... интересно. Насчет состояния оружия. У меня не получается отловить стэйт: mag_empty = 8. Другие состояния работают.

 

 

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

 

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

 

 

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 делаешь? Найди там обработку бюрера, в скриптах. Ему из этого колбэка неуязвимость делается.

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

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

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

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

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

Войти

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

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

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