Случайная подборка модов
STALKER: [O.F.F.L.I.F.E.]
4.1
Тайный путь
3.6
Обречённый город
4.2
Возвращение
3.0
Legend Returns 0.9.2
4.0
Dead City Mod v. 4.80
3.7
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
⚙ Модострой: Вопросница
Российская Федерация  Wolfstalker
Среда, 24.02.2016, 00:25 | Сообщение # 1
Статус:
Легенда:
Сообщений: 2258
Награды: 15
Регистрация: 05.04.2010

В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга


• Не флудить
• Предварительно просматривайте раздел, ведь ответ на ваш вопрос может быть там
• В своем вопросе указывайте платформу моддинга — Тень Чернобыля, Чистое небо или Зов Припяти




F.A.Q

  Злобная реклама
Среда, 24.02.2016, 00:25
Статус:
Сообщений: 666
Регистрация: 05.04.2010
Российская Федерация  Mikluxa
Вторник, 12.09.2017, 19:49 | Сообщение # 7981
Статус:
Отмычка:
Сообщений: 96
Награды: 2
Регистрация: 16.03.2017

Парочка вопросов касательно СоС.


  Злобная реклама
Вторник, 12.09.2017, 19:49
Статус:
Сообщений: 666
Регистрация: 16.03.2017
Российская Федерация  RoboCat
Вторник, 12.09.2017, 20:23 | Сообщение # 7982
Статус:
Новичок:
Сообщений: 300
Награды: 9
Регистрация: 07.01.2017

  Злобная реклама
Вторник, 12.09.2017, 20:23
Статус:
Сообщений: 666
Регистрация: 07.01.2017
Российская Федерация  Han_Kostenlo
Среда, 13.09.2017, 12:51 | Сообщение # 7983
Группа Кровавой Дороги
Статус:
Отмычка:
Сообщений: 96
Награды: 0
Регистрация: 31.05.2017

Как в функции
Код
level.disable_input()

установить что-то вроде таймера, или, же, если то невозможно, остановить ее, допустим, другой функцией?
  Злобная реклама
Среда, 13.09.2017, 12:51
Статус:
Сообщений: 666
Регистрация: 31.05.2017
Российская Федерация  denis2000
Среда, 13.09.2017, 19:41 | Сообщение # 7984
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Цитата Han_Kostenlo ()
остановить ее, допустим, другой функцией?

level.enable_input()
  Злобная реклама
Среда, 13.09.2017, 19:41
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  Han_Kostenlo
Пятница, 15.09.2017, 17:16 | Сообщение # 7985
Группа Кровавой Дороги
Статус:
Отмычка:
Сообщений: 96
Награды: 0
Регистрация: 31.05.2017

denis2000, О, спасибо. Вот еще такой вопрос, чтобы никого больше не доставать, не знаешь где можно достать большой сборник функций? Ну, и так, чтобы в один пост, мне нужна еще функция удаления НПС в зоне видения ГГ(типо как в фотографе пропадал наблюдатель, или в ЗШ исчезали монолитовцы).
  Злобная реклама
Пятница, 15.09.2017, 17:16
Статус:
Сообщений: 666
Регистрация: 31.05.2017
Украина  exDeMODER
Пятница, 15.09.2017, 21:24 | Сообщение # 7986
SFZ Project
Статус:
Отмычка:
Сообщений: 746
Награды: 11
Регистрация: 05.07.2014

Han_Kostenlo
Цитата Han_Kostenlo ()
функция удаления НПС в зоне видения ГГ

Всегда так делал:
  Злобная реклама
Пятница, 15.09.2017, 21:24
Статус:
Сообщений: 666
Регистрация: 05.07.2014
Российская Федерация  makdm
Пятница, 15.09.2017, 22:51 | Сообщение # 7987
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

Цитата XMODER ()
Всегда так делал

Всё можно сделать "красивее" и без тормозов в игре:

В файл _G.script добавить:

stalkers_by_section = {}
function remove_stalker_by_section(section)
alife():release( stalkers_by_section[section], true )
end

В файле se_stalker.script в метод on_register() добавить:
_G.stalkers_by_section[ self:section_name() ] = self
А в метод on_unregister() добавить:
_G.stalkers_by_section[ self:section_name() ] = nil

Теперь чтобы удалить НПС - сталкера по его секции, достаточно в удобное для вас время вызвать функцию remove_stalker_by_section , например:

remove_stalker_by_section("stalker_sakharov")

Удалили Сахарова.
  Злобная реклама
Пятница, 15.09.2017, 22:51
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Российская Федерация  Han_Kostenlo
Суббота, 16.09.2017, 06:27 | Сообщение # 7988
Группа Кровавой Дороги
Статус:
Отмычка:
Сообщений: 96
Награды: 0
Регистрация: 31.05.2017

XMODER, makdm, При использовании обеих функций вылетает, с сылкой в логе на "попытку вызвать поле". Похоже, что подобную функцию не привязать к space restrictor`у. Хотя, может я чего не знаю....

Добавлено (16.09.2017, 06:27)
---------------------------------------------

Цитата Han_Kostenlo ()
При использовании обеих функций вылетает, с сылкой в логе на "попытку вызвать поле". Похоже, что подобную функцию не привязать к space restrictor`у.
Попытался переместить функцию из одного скрипта в xr_effects и, хоть и не вылетает, но функцию не читает. НПС просто стоит там, где стоял, и ничего не происходит.
  Злобная реклама
Суббота, 16.09.2017, 06:27
Статус:
Сообщений: 666
Регистрация: 31.05.2017
Российская Федерация  makdm
Суббота, 16.09.2017, 07:44 | Сообщение # 7989
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

Цитата Han_Kostenlo ()
Похоже, что подобную функцию не привязать к space restrictor`у

А чего там привязывать?

В файле xr_effects.script пишите:

function remove_stalker_by_sect(actor, obj, p )
if p and p[1] then
remove_stalker_by_section(p[1])
end
end

Из рестриктора вызываете функцию:

on_info = {-info} %+info =remove_stalker_by_sect(srction)%
  Злобная реклама
Суббота, 16.09.2017, 07:44
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Российская Федерация  Overfirst
Суббота, 16.09.2017, 07:58 | Сообщение # 7990
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

Цитата Han_Kostenlo ()
Попытался переместить функцию из одного скрипта в xr_effects и, хоть и не вылетает, но функцию не читает.

В функции скрипта xr_effects, как правило, передаются такие аргументы: actor, npc и p. В actor передается наш ГГ, в npc передается непись, из логики которого вызывают функцию или же любой другой объект. Параметр p — параметр, который задаёт пользователь, он и читается из логики:
Цитата makdm ()
on_info = {-info} %+info =remove_stalker_by_sect(section)%

section передаётся в p и дальше юзается в функции.

Цитата makdm ()
function remove_stalker_by_sect(actor, obj, p )
if p and p[1] then
remove_stalker_by_section(p[1])
end
end

Как видишь, обычные функции приходится чуть переделать, чтобы юзать из логики.
  Злобная реклама
Суббота, 16.09.2017, 07:58
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Российская Федерация  Han_Kostenlo
Суббота, 16.09.2017, 14:16 | Сообщение # 7991
Группа Кровавой Дороги
Статус:
Отмычка:
Сообщений: 96
Награды: 0
Регистрация: 31.05.2017

BoBaH_671, makdm, Секунду... А где в функции, собственно, ссылка на НПС? То есть, я не заметил, где вставлять данные НПС.
  Злобная реклама
Суббота, 16.09.2017, 14:16
Статус:
Сообщений: 666
Регистрация: 31.05.2017
Российская Федерация  Overfirst
Суббота, 16.09.2017, 14:25 | Сообщение # 7992
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

Цитата BoBaH_671 ()
on_info = {-info} %+info =remove_stalker_by_sect(section)%

Где section - секция твоего непися.
  Злобная реклама
Суббота, 16.09.2017, 14:25
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Украина  BozKurt
Суббота, 16.09.2017, 15:04 | Сообщение # 7993
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

А можно вопрос к отвечающим? Как ваши функции помогут в
Цитата Han_Kostenlo ()
удаления НПС в зоне видения ГГ
?
  Злобная реклама
Суббота, 16.09.2017, 15:04
Статус:
Сообщений: 666
Регистрация: 25.05.2012
Российская Федерация  makdm
Суббота, 16.09.2017, 16:10 | Сообщение # 7994
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

Цитата BozKurt ()
А можно вопрос к отвечающим? Как ваши функции помогут в

А что такое "В зоне видения"?
1. ГГ Видит НПС
2. НПС видит ГГ
3. ГГ видит НПС и НПС видит ГГ
4. НПС в зоне а-лайф.

Когда будет разъяснено, тогда и нарисуем код. Причем легко и непринужденно.
  Злобная реклама
Суббота, 16.09.2017, 16:10
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Украина  BozKurt
Суббота, 16.09.2017, 16:13 | Сообщение # 7995
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

Если я правильно помню геометрию, то вот такое решение получит всех НПС попавших в угол обзора (по факту FOV игры), но без учёта прямой видимости:
Код
local actorPosition = db.actor:position();
local vectorToActorDirection = device().cam_dir;
for id = 1, 65534 do
    local npc = level.object_by_id(id);
    local npcPosition = npc:position();
    local vectorToNpcPosition = vector():set(npcPosition.X - actorPosition.X, 0, npcPosition.Z - actorPosition.Z);
    local scalar = (vectorToActorDirection.X * vectorToNpcPosition.X + vectorToActorDirection.Z * vectorToNpcPosition.Z)
    local angleCos = scalar / (math.sqrt(vectorToActorDirection.X^2 + vectorToActorDirection.Z^2) * math.sqrt(vectorToNpcPosition.X^2 + vectorToNpcPosition.Z^2));
    if math.ceil(math.acos(angleCos * 180 / math.pi)) <= device().fov then
  --/ npc попал в угол зрения ГГ, но без учёта прямой видимости. Удаляем если не важно видим ли мы его физически.
    end
end

P.S. Угол (FOV) учитывается только в плоскости земли, если мы перед НПС поднимим камеру вверх, то НПС всё равно будет удалён.
Сообщение отредактировал BozKurt - Суббота, 16.09.2017, 16:16
  Злобная реклама
Суббота, 16.09.2017, 16:13
Статус:
Сообщений: 666
Регистрация: 25.05.2012
Поиск: