Случайная подборка модов
MISERY 2.2
4.1
Как вступить в "Долг"?
3.9
Зона поражения 2: Ответный удар
4.1
Хроники Кайдана
3.6
Вариант Омега 2
3.6
Paradise Lost
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
Российская Федерация  ins33
Вторник, 28.06.2016, 17:02 | Сообщение # 2161
Dream Reader Mod
Статус:
Опытный:
Сообщений: 2269
Награды: 1
Регистрация: 17.01.2012

Asfagan, Сделай проверку на расстояние от костра и запускай скрипт восстановления здоровья. Правда тут наверно без апдейта не обойтись.
Как вариант, поставить рестрикторы на костры, и из них запускай восстановление здоровья. Это будет правильней.
Код
for a=10,65635,1 do
local obj=level.object_by_id(a)
if obj and string.find(obj:name(),"flame") then

скриптом спавнишь рестрикторы на все костры, и напиши одну логику типа on_actor_inside.
Плюс этого способа, не придётся копать алл.спавн ища все костры в ручную. При НИ единожды запусти скрипт.

MP3_IIJIEEP, А звуки не родные. В логе ищи invalid ogf и исвправляй.
Сообщение отредактировал ins33 - Вторник, 28.06.2016, 17:05
  Злобная реклама
Вторник, 28.06.2016, 17:02
Статус:
Сообщений: 666
Регистрация: 17.01.2012
Российская Федерация  Jaroslaw1861
Вторник, 28.06.2016, 17:11 | Сообщение # 2162
Статус:
Зевака:
Сообщений: 28
Награды: 0
Регистрация: 27.06.2016

Сообщение
  Злобная реклама
Вторник, 28.06.2016, 17:11
Статус:
Сообщений: 666
Регистрация: 27.06.2016
Российская Федерация  Asfagan
Вторник, 28.06.2016, 17:12 | Сообщение # 2163
Статус:
Бывалый:
Сообщений: 929
Награды: 12
Регистрация: 01.02.2014

ins33, этот вариант не подходит, как помню в том уроке было по другому, то вариант был подходящим
  Злобная реклама
Вторник, 28.06.2016, 17:12
Статус:
Сообщений: 666
Регистрация: 01.02.2014
Российская Федерация  ins33
Вторник, 28.06.2016, 17:17 | Сообщение # 2164
Dream Reader Mod
Статус:
Опытный:
Сообщений: 2269
Награды: 1
Регистрация: 17.01.2012

Asfagan,
Цитата Asfagan ()
этот вариант не подходит
Обоснуй.
Я что то даже не могу представить более удачный вариант.
Хотя бог его знает, как в ЗП. Найдёшь, поделись ссылкой, интересен альтернативный вариант.
  Злобная реклама
Вторник, 28.06.2016, 17:17
Статус:
Сообщений: 666
Регистрация: 17.01.2012
Российская Федерация  Asfagan
Вторник, 28.06.2016, 17:18 | Сообщение # 2165
Статус:
Бывалый:
Сообщений: 929
Награды: 12
Регистрация: 01.02.2014

ins33, если сам не путаю biggrin но вроде бы было по другому...
  Злобная реклама
Вторник, 28.06.2016, 17:18
Статус:
Сообщений: 666
Регистрация: 01.02.2014
Российская Федерация  ins33
Вторник, 28.06.2016, 17:21 | Сообщение # 2166
Dream Reader Mod
Статус:
Опытный:
Сообщений: 2269
Награды: 1
Регистрация: 17.01.2012

Asfagan, А по другому = правильно?
Хоть я и не утверждаю, что мой способ идеален.
  Злобная реклама
Вторник, 28.06.2016, 17:21
Статус:
Сообщений: 666
Регистрация: 17.01.2012
Российская Федерация  Asfagan
Вторник, 28.06.2016, 17:23 | Сообщение # 2167
Статус:
Бывалый:
Сообщений: 929
Награды: 12
Регистрация: 01.02.2014

ins33, вот наконец таки нашел, как видно только через биндер...

Код
Функция: actor_binder:update(delta)

local pos = db.actor:position()
    for id = 1, 65535 do
        local obj = level.object_by_id(id)
        if obj then
            local campfire = obj:get_campfire()
            if campfire and obj:position():distance_to(pos) <= 3 then
                if campfire:is_on() then
                    db.actor.health = 0.001
                end
            end
        end
    end


я ж говорил cool
  Злобная реклама
Вторник, 28.06.2016, 17:23
Статус:
Сообщений: 666
Регистрация: 01.02.2014
Украина  _S_k_i_F_
Вторник, 28.06.2016, 17:26 | Сообщение # 2168
Золотой Обоз
Статус:
Опытный:
Сообщений: 1311
Награды: 9
Регистрация: 09.08.2015

Asfagan, через bind_campfire в метод update в самом конце
Код
local pos = self.object:position():distance_to_sqr(db.actor:position()) <= 3

и дальше действия.
  Злобная реклама
Вторник, 28.06.2016, 17:26
Статус:
Сообщений: 666
Регистрация: 09.08.2015
Российская Федерация  Asfagan
Вторник, 28.06.2016, 17:27 | Сообщение # 2169
Статус:
Бывалый:
Сообщений: 929
Награды: 12
Регистрация: 01.02.2014

_S_k_i_F_, уже разобрался biggrin
  Злобная реклама
Вторник, 28.06.2016, 17:27
Статус:
Сообщений: 666
Регистрация: 01.02.2014
Российская Федерация  makdm
Вторник, 28.06.2016, 17:29 | Сообщение # 2170
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

Цитата Asfagan ()
 for id = 1, 65535 do

Для всех любителей перебирать на апдейте актора все объекты игры пишу второй раз:

В ЗП есть биндер костров. Файл bind_campfire.script
Вот на его апдейте и нужно делать проверку на расстояние до ГГ.
И ничего перебирать не нужно!!!

local story_actor = get_story_object("actor")
if self.campfire:is_on() and story_actor then
if self.object:position():distance_to_sqr(story_actor:position()) <= 3*3 then
story_actor.health = 1
story_actor.radiation = -1
story_actor.bleeding = 1
end
end
  Злобная реклама
Вторник, 28.06.2016, 17:29
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Российская Федерация  Asfagan
Вторник, 28.06.2016, 17:31 | Сообщение # 2171
Статус:
Бывалый:
Сообщений: 929
Награды: 12
Регистрация: 01.02.2014

makdm, спс smile
  Злобная реклама
Вторник, 28.06.2016, 17:31
Статус:
Сообщений: 666
Регистрация: 01.02.2014
Российская Федерация  ins33
Вторник, 28.06.2016, 17:35 | Сообщение # 2172
Dream Reader Mod
Статус:
Опытный:
Сообщений: 2269
Награды: 1
Регистрация: 17.01.2012

Asfagan, Теперь УТВЕРЖДАЮ! Мой способ корректней, правда есть правка касательно ЗП:
Код
for id = 1, 65535 do --  прошерстили всё
        local obj = level.object_by_id(id) -- определили все костры
        if obj then  -- убедились, что оно есть
дальше спавни рестриктор любым удобным способом по координатам
obj:position(), obj:level_vertex_id(), obj:game_vertex_id()
и радиусом 6

В логике рестриктора напиши так:
Код
[logic]
active =  sr_idle

[sr_idle]
on_actor_inside = %=add_health%
В xr_effects.script добавь ф-ию
Код
function add_health()
db.actor.health = 0.001
end


Ф-ию спавна рестрикторов запусти один раз при старте игры.
Сообщение отредактировал ins33 - Вторник, 28.06.2016, 17:48
  Злобная реклама
Вторник, 28.06.2016, 17:35
Статус:
Сообщений: 666
Регистрация: 17.01.2012
Российская Федерация  Asfagan
Вторник, 28.06.2016, 17:38 | Сообщение # 2173
Статус:
Бывалый:
Сообщений: 929
Награды: 12
Регистрация: 01.02.2014

ins33, видишь ли опять проверка через логику, + эффектор, все же тот вариант проще как и вариант от makdm, но это считай 3 варианта, выбор хороший smile
  Злобная реклама
Вторник, 28.06.2016, 17:38
Статус:
Сообщений: 666
Регистрация: 01.02.2014
Российская Федерация  ins33
Вторник, 28.06.2016, 17:42 | Сообщение # 2174
Dream Reader Mod
Статус:
Опытный:
Сообщений: 2269
Награды: 1
Регистрация: 17.01.2012

Про бинд костров не знал, отталкивался от
Цитата Asfagan ()
Функция: actor_binder:update(delta)

Всёж ЗП местами технологичней.

Добавлено (28.06.2016, 17:42)
---------------------------------------------
makdm, Кстати, а с какой периодичностью срабатывает bind_campfire, неужто реже рестриктора?

  Злобная реклама
Вторник, 28.06.2016, 17:42
Статус:
Сообщений: 666
Регистрация: 17.01.2012
Российская Федерация  makdm
Вторник, 28.06.2016, 17:50 | Сообщение # 2175
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

ins33, первым всегда работает биндер . А уже из биндера передаётся управление файлу xr_logic.script на апдейт логики.
Так что биндер костра будет работать быстрее, чем логика рестриктора, установленного на месте костра.
  Злобная реклама
Вторник, 28.06.2016, 17:50
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Поиск: