Случайная подборка модов
G.L.A.D.I.A.T.O.R. II Время Альянса
3.4
Sleep Of Reason - Zulus Story 0.5
2.4
Новый Арсенал 5.0
3.6
ABC Inferno
3.9
Блудный сын
2.8
Возвращение
3.0
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
⚙ Модострой: Вопросница
Российская Федерация  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
Российская Федерация  Maximless
Понедельник, 30.10.2017, 21:22 | Сообщение # 8551
Статус:
Гость:
Сообщений: 54
Награды: 1
Регистрация: 19.09.2017

Такой вопрос! Каким способом проверить лучше - объект в онлайне level.object_by_id(id) или db.storage[id].object ? Есть ли между этими методами разница?
  Злобная реклама
Понедельник, 30.10.2017, 21:22
Статус:
Сообщений: 666
Регистрация: 19.09.2017
Украина  BozKurt
Понедельник, 30.10.2017, 21:37 | Сообщение # 8552
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

Maximless, да, и существенная. level.object_by_id(id) это движковая функция, а db.storage[id].object это скриптовая таблица, которая может модифицироваться как угодно и кем угодно. Первый вариант однозначно надёжнее.

Добавлено (30.10.2017, 21:37)
---------------------------------------------
prototip98, проверяешь наличие пда в слоте, если его нет, отбиндиваешь кнопку открытия ПДА, предварительно сохранив то, на что она была забиндена; позже, когда возвращаешь пда - биндишь кнопку назад.

  Злобная реклама
Понедельник, 30.10.2017, 21:37
Статус:
Сообщений: 666
Регистрация: 25.05.2012
Российская Федерация  Overfirst
Вторник, 31.10.2017, 00:13 | Сообщение # 8553
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

Joni_009, продублирую из ЛС:
Код
function set_rnd_time()
      local hours = math.random(0, 23)
      local mins = math.random(0, 60)    
      level.change_game_time(0, hours, mins)
      level_weathers.get_weather_manager():forced_weather_change()
      surge_manager.get_surge_manager().time_forwarded = true
      if surge_manager.is_started() and level_weathers.get_weather_manager().weather_fx then
           level.stop_weather_fx()
           level_weathers.get_weather_manager():forced_weather_change()
      end
end
  Злобная реклама
Вторник, 31.10.2017, 00:13
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Соединенные Штаты  Joni_009
Вторник, 31.10.2017, 00:26 | Сообщение # 8554
Статус:
Бывалый:
Сообщений: 1008
Награды: 14
Регистрация: 25.05.2014

BoBaH_671, Благодарю в ЛС отписал работает.
  Злобная реклама
Вторник, 31.10.2017, 00:26
Статус:
Сообщений: 666
Регистрация: 25.05.2014
Российская Федерация  atanda
Вторник, 31.10.2017, 11:28 | Сообщение # 8555
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

BoBaH_671, в x-ray extension есть метод получения объекта на который смотришь.

Добавлено (31.10.2017, 11:28)
---------------------------------------------
Хоть всё же получится и костыль, но сработает.

  Злобная реклама
Вторник, 31.10.2017, 11:28
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  denis2000
Вторник, 31.10.2017, 11:47 | Сообщение # 8556
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Цитата XMODER ()
Можно подробнее?

Можно. Зададите подробный вопрос - будет по делу ответ.
  Злобная реклама
Вторник, 31.10.2017, 11:47
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  Overfirst
Среда, 01.11.2017, 09:08 | Сообщение # 8557
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

Цитата buffy ()
BoBaH_671, в x-ray extension есть метод получения объекта на который смотришь.

У нас этот метод тоже экспортирован.
  Злобная реклама
Среда, 01.11.2017, 09:08
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Российская Федерация  atanda
Среда, 01.11.2017, 16:16 | Сообщение # 8558
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

BoBaH_671, у нас это у кого?

У команды, разрабатывающей True Stalker.
BoBaH_671


Добавлено (01.11.2017, 10:59)
---------------------------------------------
BoBaH_671, Тогда у меня к тебе вопрос biggrin . Я начать изучать схемы, точнее их построение в скриптах, и решил сделать свою, так сказать для теста. Так вот вопрос когда вызывается метод reset_scheme? При инициализации схемы __init или при каждом апдейте? Про остальное я, кажется, понял.

Смотреть надо. На разных схемах по-разному.
BoBaH_671

Добавлено (01.11.2017, 16:16)
---------------------------------------------
BoBaH_671, то есть этот метод не обрабатывается движком? Ну в смысле на уровне скриптов обрабатывается.

  Злобная реклама
Среда, 01.11.2017, 16:16
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  denis2000
Среда, 01.11.2017, 18:51 | Сообщение # 8559
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

buffy, Да это скриптовый метод. Уж точно при каждом апдейте не вызывается. Иногда принудительно вызывается при активации схемы.
  Злобная реклама
Среда, 01.11.2017, 18:51
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Украина  BozKurt
Среда, 01.11.2017, 23:27 | Сообщение # 8560
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

buffy, на самом деле метод reset_scheme, не совсем "иногда" вызывается, если быть точным, он вызывается всегда, когда происходит переключение на схему.
Во всех схемах, есть метод add_to_binder, который регистрирует все action, для которых будет вызываться этот метод. Сама регистрация происходит через метод xr_logic.subscribe_action_for_events. Создание storage (хранилища данных) и бинды этих самых event'ов, которые "стреляют" эти самые зарегистрированные выше action, для той или иной схемы, происходит в методе set_scheme самой схемы, через метод xr_logic.assign_storage_and_bind.
Включение секции (set_scheme) происходит через xr_logic.activate_by_section.
Так, что можно сказать, что reset_scheme вызывается "по факту" на каждом апдейте.
P.S. Может сложно, но эти сложности легко (возможно) проходят, если проследить цепочку вызова на примере конкретной схемы.
P.P.S. Всё это точно работает на чистом ТЧ.
Сообщение отредактировал BozKurt - Среда, 01.11.2017, 23:31
  Злобная реклама
Среда, 01.11.2017, 23:27
Статус:
Сообщений: 666
Регистрация: 25.05.2012
Российская Федерация  atanda
Четверг, 02.11.2017, 11:16 | Сообщение # 8561
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

BozKurt, вчера вечером втыкал как это работает в ЗП, по факту система та же.

Добавлено (02.11.2017, 11:16)
---------------------------------------------
BozKurt, кстати, а есть ли по созданию схем статейки, а то, имхо мало кто этим занимался, и создание новых схем я наблюдал лишь в скриптах LA(может есть и в других). Но всё же статейка не помешала бы.

  Злобная реклама
Четверг, 02.11.2017, 11:16
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  Graff46
Четверг, 02.11.2017, 11:37 | Сообщение # 8562
Новое Время
Статус:
Бывалый:
Сообщений: 867
Награды: 7
Регистрация: 02.05.2013

Цитата buffy ()
есть ли по созданию схем статейки

На сталкерине не плохая статья есть по созданию схем логики.
Сообщение отредактировал Graff46 - Четверг, 02.11.2017, 11:38
  Злобная реклама
Четверг, 02.11.2017, 11:37
Статус:
Сообщений: 666
Регистрация: 02.05.2013
Российская Федерация  atanda
Четверг, 02.11.2017, 15:56 | Сообщение # 8563
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

Graff46, может быть прямую ссылку? нет желания рыскать)

Добавлено (02.11.2017, 12:50)
---------------------------------------------
Уже не надо.

Добавлено (02.11.2017, 15:56)
---------------------------------------------
Доброго всем дня. Крч, получается какой-то бред-бредовый. Сделал я тестовую схемку:

Код

class "action_test"

function action_test:__init(obj, storage)
    self.object = obj
    self.st = storage
end

function action_test:reset_scheme()
    if self.st.status == "off" then
  self.object:set_tip_text("test")
    else self.st.status == "on" then
  self.object:set_tip_text("test")
    end
end

function add_to_binder(obj, ini, scheme, section, storage)
    local action = action_test(obj, starage)
    xr_logic.subscribe_action_for_events(obj, storage, action)
end

function set_scheme(obj, ini, scheme, section, gulag_name)
    local st = xr_logic.assign_storage_and_bind(obj, ini, scheme, section)
    st.logic = xr_logic.cfg_get_switch_conditions(ini, section, obj)
    
    st.status = des_utils.cfg_get_string(ini, section, "status", obj, "off")
end

Зарегистрировал её в modules.script, как положено.
В сдк прописал в кастом дате объекта логику. Скомпилировал спавн.
Ну в общем с этим проблем не было.

Далее запускаю игру на моей тестовой карте, и ловлю вылет, при чём странный.


посмотрел я в этот файл на строку 405:
Код
_G[filename].set_scheme(npc, ini, scheme, section, gulag_name)

понял, что по какой-то причине filename отсутствует, а значит и файл ph_test отсутствует, но он есть.

А дальше я запутался wacko
  Злобная реклама
Четверг, 02.11.2017, 15:56
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  DaaGuda
Четверг, 02.11.2017, 16:05 | Сообщение # 8564
Статус:
Неопытный:
Сообщений: 479
Награды: 4
Регистрация: 09.03.2014

buffy, стандартный лог с ошибкой логики, что угодно может быть, даже банальная, забытая запятая.
Сообщение отредактировал DaaGuda - Четверг, 02.11.2017, 16:05
  Злобная реклама
Четверг, 02.11.2017, 16:05
Статус:
Сообщений: 666
Регистрация: 09.03.2014
Российская Федерация  Overfirst
Четверг, 02.11.2017, 16:14 | Сообщение # 8565
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

Цитата buffy ()
if self.st.status == "off" then
self.object:set_tip_text("test")
else self.st.status == "on" then
self.object:set_tip_text("test")
end

Дружище, внимательнее. smile
Надо как минимум вот так:

Цитата BoBaH_671 ()
function action_test:reset_scheme()
if self.st.status == "off" then
self.object:set_tip_text("test")
elseif self.st.status == "on" then
self.object:set_tip_text("test")
end
end

Любая синтаксическая ошибка валит весь скрипт, и он считается отсутствующим.

И странно, что у тебя в обоих случаях выставляется 'test'. Ладно, с этим разберёшься.

PS: эту конструкцию можно упросить до одной проверки:

Код
if self.st.status == "on" then
self.object:set_tip_text("test_1")
else
self.object:set_tip_text("test_2")
end
  Злобная реклама
Четверг, 02.11.2017, 16:14
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Поиск: