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

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

@Simonov50,

При первом обращении к нему он сам зарегистрируется.

@Капитан Кузьмичёв

Насколько я понял это нужно делать в пределах локации?

db.actor:set_actor_position(vector():set(X,X,X)) не подойдет?

Поставить space_restrictor  и при заходе в него вызывать метод выше.

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

Можете подсказать? Нужен запуск скриптов и выдача инфо при использовании итемов в ЛА. Сами колбэки на использование и всё прочее уже есть, но сама функция выглядит так

function actor_binder:on_use_item(oItem)
local sSection = oItem:section()
if not sSection:match("fake") then
event("item_use"):trigger({item=oItem,item_id=oItem:id(),section=sSection}) --/#!#>
end
end

 

Как мне его модернизировать чтобы при использовании из этой функции запускался ещё и мой скрипт? Хочу сделать звуки при употреблении пищи

 

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

@Михаил Мега черьв, тут система ивентов-сигналов, если не хочешь использовать ее - читай тутор, если с ней, то смотри как интятся скрипты и подключай свой, на мотив:

event('item_use'):register(func) 

 

и далее

 

function func(e)

-- action

end

 

где е - вышеуказанная тобою таблица.

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

@stalker8509, возможно. Подобная схема боя для БТР уже реализована и включена в мод "Terra Incognita". Удалось довольно просто реализовать этот режим, не внося глобальных изменений в исходную схему логики БТР. Но простота реализации схемы достигнута благодаря ее взаимодействию с другими компонентами мода. Поэтому, рассматривать ее в отрыве от остальных компонентов мода нельзя.

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

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

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

Не надо ничего создавать.

bind_stalker: function actor_binder:on_item_take() - добавить свою проверку и добавить db.actor:give_info_portion(), тоже с проверкой на то, что уже выдано. И, да, целая отдельная тема есть, где все расписано.

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

Подскажите, пожалуйста, как сделать так, чтобы определённый НПС не использовал фонарик даже ночью?

Заранее спасибо!

 

sr_light.script внезапно занимается включением/выключением фонариков. dc

 

Поиском пользовался, но так и не нашёл ответа. Скрипт глядел, но мне для конкретного НПС нужен запрет на использование фонарика, а не всея Зоны. Ну и менять схему поведения НПСу из-за фонарика не очень то хочется.

Изменено пользователем Капитан Кузьмичёв
Ссылка на комментарий
а не всея Зоны

Да там по идее достаточно просто для конкретного сделать, только нужно знать :

но мне для конкретного НПС нужен запрет

А насколько он конкретный? Чем отличается от других? У него своя секция? Или sid?

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

"У него своя секция? Или sid?"

 

Да как-бы и obj:name() в таком случае должно быть вполне достаточно.

А скрит, кстати, откомментирован вполне подробно. Если уж ЭТОГО недостаточно, то вопрос называется "а вот сделайте мне сам не знаю что, но чтобы было".

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

@Dennis_Chikin

С obj:name() не так всё просто, как с section или sid.

Хорошо если НПС в all.spawn-е. Можно имя глянуть как с sid-ом.

А если он скриптовый? В общем...

Полагаю что человек ещё не очень в скриптах, поэтому сразу и исключил этот вариант из списка.

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

 

 

как сделать так, чтобы определённый НПС не использовал фонарик даже ночью?
Может лучше глянуть в сторону enable_attachable_item - правда будет запрет и на батоны, гитары, водку. Но я думаю что навряд-ли непись, которому запрещено пользоваться фонариком, будет сидеть у костра в кампе.
Ссылка на комментарий

@UnLoaded

Это понятно что enable_attachable_item. Тут все проще. Батоны, гитары, водка не при чем.

В sr_light.script есть функция check_light, которая стоит на апдейте из xr_motivator.script.

И в самом конце :

    if light ~= nil and torch then
        torch:enable_attachable_item(light)
    end

добавить проверку на нужного НПС :

    if light ~= nil and torch then
        if "тот_сталкер_который_нужен" then
            light = false
        end
        torch:enable_attachable_item(light)
    end

Вот собственно и был вопрос, - что у этого сталкера есть такого, чтобы сказать, что это "тот_сталкер_который_нужен".

Т.е. что использовать вместо "тот_сталкер_который_нужен"?

stalker:section()  == "секция_того_сталкера"
stalker:name()     == "имя_того_сталкера"
stalker:story_id() == "sid_того_сталкера"
stalker:profile_name() == "может_такое_имя_есть"
или ещё что-то, чем его можно отличить от других
Изменено пользователем Nazgool
  • Нравится 1
Ссылка на комментарий

Ещё вопрос. Если я декомпилирую аллспавн, а потом все alife и way и прочее засуну просто в папку all, предварительно удалив аллспавн, то работать будет?

Просто у меня мистическим образом работает (игра).

Изменено пользователем Капитан Кузьмичёв
Ссылка на комментарий

 

 

Просто у меня мистическим образом работает (игра).

 

Ну если делаешь изменения на чистой игре, то не мудрено, all.spawn же вшит в 1 из игровых архивов, по этому его удаление из папки gamedata никак не влияет (пока там нет капитальных изменений).

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

@Nazgool,

При обычной загрузке лист сразу транслируется, и если присутствует текст обращения к несуществующей

функции будет вылет. То есть, вариант проверки "если есть лист, тогда обратиться к функции не срабатывает".

Если "спрятать" текст (mu_call="Имя_скрипта"..".".."имя_функции".."()"), то вылета не будет, но команда dostring(mu_call)

не проходит. Видимо в игре недоступна? Пытаюсь найти вариант загрузки в два этапа. Обычным образом загрузить мой 1_й лист, мой второй лист (с обращением к функции) спрятать в другом каталоге, если присутствует некий третий лист,(наличие функции в котором и проверяется), то подключить мой второй лист. Но как это сделать не представляю.

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

Э-эээ... Может, сначала попробовать расшифровать ?

Что за "лист" такой, зачем делать mu_call="Имя_скрипта"..".".."имя_функции".."()", и т.д.

 

Ибо, во-первых, есть классическое

local func
local module, fname = string_match( infop.func, "(.+)[.](.+)" )
if not fname then func = xr_effects[infop.func]
elseif _G[module] and _G[module][fname] then func=_G[module][fname]
end
из xr_logic.script, во-вторых:

t = { ["fn"] = module.fn }
...
t["fn"]()
Или надо что-то еще ? Изменено пользователем Dennis_Chikin
Ссылка на комментарий
Может, сначала попробовать расшифровать ?

+1

Раз 5 перечитал, но так и не смог определить для себя круг задач.

@Simonov50

Ты хочешь защититься от вылета при вызове не существующей функции в файле?

Правда возникает вопрос - зачем вызывать функцию, которой нет?

Распиши подробнее, что ты хочешь сделать.

 

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

В _g.script добавить функцию :

function safe_call(script, func, ...)
    local module = _G[script]
    if module then
        local f = module[func]
        if type(f) == 'function' then
            return f(...)
        end
    end
end

И вызывать где-то в защищенном режиме :

-- вызов
x = safe_call('my_script','my_func', arg1, ... , argN)

-- проверка
if safe_call('my_script','my_func', arg1, ... , argN) then
    ...
end
Изменено пользователем Nazgool
Ссылка на комментарий

@Dennis_Chikin,

Спасибо !!! Всё в тему, но кому классика, а кому откровение.

Если я верно понял, то нужно засовывать в инфопоршень, а вытаскивать с помощью xr_effects.

Ни когда с инфопоршнями не работал. Пойду читать xr_effects.

Ещё раз спасибо.

@Nazgool,

Круг задач определён уровнем моих незнаний и для понимания нормальным человеком слишком обширен.

Пока есть только цель - сделать "переносной" скрипт (из мода в мод).

Воткнул его, он сам быстренько посмотрел ресурсы и "сказал" что (и где) надо доделывать руками.

Скрипт чисто модерский - простенький инструментарий (будет когда-нибудь?).

Про _G всё понял, а вот про защищённый режим (на уровне игры) услышал впервые! Где читать?

Спасибо за помощь - иду учить мат.часть.

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

xr_logic - это не работа с info как таковыми, а разбор условий и какие-то действия по этим условиям.

Здесь нам интересно конкретно реализация действия %=miscript.myfunc%

 

Если оно находит точку, то func=_G["miscript"]["myfunc"]

если точки нет - то есть, в логике написано  %=myfunc% - то пытается найти функцию "myfunc" в xr_effects.script.

Ну а дальше там идет банально func() - то есть, вызов найденного.

 

 

Ну а если идет речь о скрипте, который хочет определить, есть ли нужная функция в каком-то другом месте, так здесь все еще проще:

if another_script.myfunc then another_script.myfunc() -- функция есть, вызываем

else ... -- оппаньки !

end

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

В общем такое дело, делал по этой схеме. Всё работает как часы, но проблема в следующем.. Как только стартует таймер, мне нельзя сейв/лоад жать, использовать спальник, и локации переходить(в противном случае таймер останавливается/не срабатывает)

Как это победить можно?

Мы типа сталкеры, мы крутые

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

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

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

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

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

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

Войти

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

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

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