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

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий

Всем привет , как через нет пакет правильно сменить direction у объекта который я спавню через alife:...(или может можно как либо задать direction при спавне через скрипт?)
в нет пакетах я не силен , но если кто поможет буду при много  благодарен , заранее спасибо)

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

 

 

трабла в самом изначальном решении разряжать оружие в on_item_drop... В чем смысл-то ?
Сие надо бы у автора сего творения спрашивать. Я лишь пытаюсь заставить это нормально работать под ТЧ вообще и ОГСЕ в частности. И если в чистом ТЧ оно работает без вылетов, несмотря на срабатывание actor_binder:on_item_drop на переходах, то в ОГСЕ свои грабли, которые именно на переходах мешают.

Смысл сего действа в том, чтобы при подборе\изъятии ствола, он автоматом скидывал патроны в инвентарь. Если в чистом ТЧ, пока я заради проверки добежал от Сидоровича до перехода, у ГГ уже 500 патронов ля ПМа, 150 для MP-5 и 4 пачки дроби, то в ОГСЕ с неписей выпадает 5 патронов в инвентаре и 3 в стволе, но раз так на десятый. И хотя концепцию "Бомж в ЗО" у них так реализовать не получилось, но в начале игры с хламом к Сидоровичу побегать таки приходится, и неписей поотстреливать только заради лишнего патрона. И вот, чтобы кадый ствол в инвентаре не тыкать, нужен сей замечательный прибамбас.


 

 

В чем смысл-то ?

Или ты о чём?

  • Нравится 1

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий
А вот это как раз слишком рано. Задумайтесь, как могут срабатывать колбеки до того, как инициализирован сам объект биндера? Это же его методы. Конечно они после __init будут срабатывать.

А при чём тут биндер? Речь-то изначально шла о том, как отловить факт перехода на другую локацию перед этим самым переходом. А это происходит уж точно тогда, когда актор полностью инициализирован в процессе предыдущей загрузки. И значит можно сохранить текущую позицию, например id локации, один раз, в момент инициализации актора.

 

@Romz, попробуй в on_item_drop проверять позицию не клиентского объекта, как ты это делаешь сейчас, а серверного. Примерно так:

local sObj = alife():object(db.actor:id())
local vPos,idLv,idGv = sObj.position, sObj.m_level_vertex_id, sObj.m_game_vertex_id
-- дальше можно вычислить id локации и сравнить с запомненным
if idGv and game_graph():valid_vertex_id(idGv) then
  local oVertex = game_graph():vertex(idGv)
  if oVertex then
    local idLevel = oVertex:level_id()
  end
end

Засим из дискуссии удаляюсь по причине катастрофической нехватки времени. Удачи в поисках решения!

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

@Kirgudu, Вот два набора координат, полученных при переходе. Первое - твоим методом, второе - тем, что было. Отличия только в LevelVertex.

 

 

(908846.0625) = spawn_ammo_in_inv => sect [ammo_7.62x54_7h14] npc [single_player]
position [ x = 15.177068710327, y = 16.481603622437, z = 684.85302734375]
 level_vertex_id [290088]
 game_vertex_id [207]
 npc ID [0]
 number [20] 
(908846.0625) = spawn_ammo_in_inv => sect [ammo_7.62x54_7h14] npc [single_player]
position [ x = 15.177068710327, y = 16.481603622437, z = 684.85302734375]
 level_vertex_id [290880]
 game_vertex_id [207]
 npc ID [0]
 number [20] 

 

 

Шаман - СисАдмин

Всяко-разно: для ЧН

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

@Romz, сей прибамбас, думается мне, можно переключить с on_item_drop на on_item_take. Будут стволы разряжаться при взятии, а оно срабатывает массово ПОСЛЕ входа актора на новую локацию.
И там допустим просто в __init или в netspawn биндера ставить некий флаг в false, в on_item_take его проверять равен ли истине, а в true его ставить на медленном апдейте секунд через 5 после нетспавна актора.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

 

 

оно срабатывает массово ПОСЛЕ входа актора на новую локацию
Но размножения патронов не вызывает, т.к. состояние инвентаря читается из автосохранения.

А на actor_binder:on_item_drop можно, как мне тут подсказали, сделать проверку на открытый инвентарь. Т.к. осмыленный выброс происходит из открытого инвентаря.

 

 

if idGv and game_graph():valid_vertex_id(idGv) then local oVertex = game_graph():vertex(idGv) if oVertex then local idLevel = oVertex:level_id() end end
idLevel = nil

Причём, в любом случае, и при ручном выбросе, и при переходе.

Шаман - СисАдмин

Всяко-разно: для ЧН

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

Логично: если оружие было разряжено при взятии, то незачем разряжать уже разряженное оружие при выбрасывании.

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

@aromatizer, Нелогично, т.к. это может быть твой ствол, который был в слоте, и который ты заменил другим, и решил засунуть в ящик, например.

Шаман - СисАдмин

Всяко-разно: для ЧН

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

Зарядить оружие можно только поместив его в слот. Значит, при перемещении оружия из слота в инвентарь, оно тоже должно разряжаться.

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

@aromatizer, Вообще-то, здесь не место для таких обсуждений. Завязываем, а то прилетит.
@Kirgudu, @Zander_driver, Проблема решилась таким образом.
Добавляем в начало функции ts_mod_soc.ts_on_item_drop проверку на открытый инвентарь

if db.actor:has_info("ui_inventory") then

И она срабатывает только при явном выбрасывании ствола из инвентаря ГГ. При переходах и прочих развоплощениях уже не срабатывает.

  • Нравится 2

Шаман - СисАдмин

Всяко-разно: для ЧН

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

А теперь обратный вопрос есть у меня :)  Как можно функцией в ствол запихать N количество патронов?

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

 

 

И она срабатывает только при явном выбрасывании ствола из инвентаря ГГ

Хотелось бы уточнить - то есть на горячей клавише сброса "активного" ствола авторазряжалка не срабатывает?

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

@=VENOM=, Да, там проверка, что ствол не в слоте. Чтобы, значит, если у тебя его выбьет, он не разрядился и ты без патронов не остался.

Шаман - СисАдмин

Всяко-разно: для ЧН

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

Блин, кто сегодня скачать успел - перекачайте, плиз. В одном месте забыл переменную переименовать :t1807:

Ссылка та же. Я.Диск

  • Спасибо 1

Шаман - СисАдмин

Всяко-разно: для ЧН

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

Такая проблема образовалась. Нужно отловить момент броска/взрыва гранаты. Написал простой биндер для гранат, net_spawn(бросок) работает на ура, а вот net_destroy(как я думал взрыв) ведет себя странно, срабатывает сначала секунды за 2 до собственно взрыва, а потом еще раз через 1-2 секунды. Есть какие мысли по этому поводу?

Ссылка на комментарий
@vampirnik77, первый дестрой вызывается, когда граната вылетает с руки. Дальше летит уже другая граната, если я правильно помню. Второй дестрой - это уже ее взрыв.
Ссылка на комментарий

@dsh, Когда граната вылетает из рук вызывается net_spawn дестрой вообще вызывается невесть как.

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

@vampirnik77,  и net_spawn и net_destroy вызываются. Когда граната появляется в руках, вызывается net_spawn и у этой гранаты есть parent. Потом гранату бросают и вызывается net_destroy, а потом появляется новая граната и для нее вызывается net_spawn. parent-а у этой гранаты нет. Она летит, падает и взрывается. Вызывается net_destroy. Один из вариантов отловить взрыв гранаты - это в net_spawn сохранить parent_id, а в net_destroy проверять, имеется-ли сохраненный parent_id. Если нет, значит это взрыв. Если есть - значит граната полетела.

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

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

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

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

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

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

Войти

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

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

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