Случайная подборка модов
Ф.О.Т.О.Г.Р.А.Ф
4.2
Волей Случая
3.5
Зона поражения
4.1
World of War - Mod 0.2
3.5
Время Альянса
2.9
S.T.A.L.K.E.R. F.M.
4.4
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
⚙ Модострой: Вопросница
Российская Федерация  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
Российская Федерация  atanda
Пятница, 03.11.2017, 18:28 | Сообщение # 8491
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

Добрый вечер. Продолжаю изучать схемы.
Собственно вопрос: в большинстве схем в методе update имеется данная проверка:
Код

if xr_logic.try_switch_to_another_section(self.object, self.st, actor) then
    return true/false/or nothing
end    


Что делает данный метод я знаю - пытается переключить объект на другую схему, если хоть одно из условий переключения сработало.

Но что делает данный блок кода, точнее пытается сделать? Типа можно ли перейти во время апдейта активной схемы на другую схему и тем самым разрешает или запрещает?

Я прав?
  Злобная реклама
Пятница, 03.11.2017, 18:28
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  denis2000
Пятница, 03.11.2017, 18:47 | Сообщение # 8492
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

buffy, Ну, если бы вы ориентировались не на имя функции, а на ее код, то вы бы поняли, что она не только проверяет возможность переключения, но и переключает на следующую секцию, при этом если переключение произошло возвращает true, следовательно приведенный вами код означает попробовать и переключиться на другую секцию логики, а если переключились выполнить код после then, то есть в данном случае просто завершить обработку колбека.
Сообщение отредактировал denis2000 - Пятница, 03.11.2017, 18:49
  Злобная реклама
Пятница, 03.11.2017, 18:47
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  atanda
Пятница, 03.11.2017, 18:56 | Сообщение # 8493
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

denis2000, о да... Я ещё плохо разобрался с xr_logic..
  Злобная реклама
Пятница, 03.11.2017, 18:56
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  denis2000
Пятница, 03.11.2017, 18:59 | Сообщение # 8494
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Цитата buffy ()
Я ещё плохо разобрался с xr_logic..

У вас одно несомненное преимущество - вы действительно пытаетесь разобраться!
  Злобная реклама
Пятница, 03.11.2017, 18:59
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  atanda
Пятница, 03.11.2017, 19:14 | Сообщение # 8495
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

denis2000, кстати у меня ещё одна проблемка была, которую я к сожалению не понял: в свою схему добавил hit_callback. Но он почему-то не обрабатывается вообще. То есть при хите моего физ. объекта не происходит, то, что было указано в блоке метода.
Сообщение отредактировал buffy - Пятница, 03.11.2017, 19:14
  Злобная реклама
Пятница, 03.11.2017, 19:14
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Российская Федерация  denis2000
Пятница, 03.11.2017, 19:25 | Сообщение # 8496
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

buffy, Не для всех классов объектов можно зарегистрировать колбек на хит, а только для тех которые поддерживает эту возможность в движке.
  Злобная реклама
Пятница, 03.11.2017, 19:25
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  makdm
Пятница, 03.11.2017, 21:49 | Сообщение # 8497
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

Цитата yobakun ()
makdm, спасибо, работает.

Да, пожалуйста.
Только всё это неправильно с точки зрения быстродействия работы скриптов.
Здесь нужно понимать, что все костры, находящиеся на активной локации ( на которой находится ГГ ) не зависят от параметра switch_distance, а по - русски, всегда ОНЛАЙН.
Поэтому достаточно в биндер костров ( bind_campfire.script ) добавить свою таблицу.

В самом верху файла пишите:

campfire_table = {}

Затем в методе net_spawn(server_object) пишите:

campfire_table[ self.object:id() ] = self.object

После этих добавлений ваша функция будет выглядеть так:

function campfire_distance()
local actor_pos = db.actor:position()
for k,v in pairs(bind_campfire.campfire_table) do
if v:position():distance_to( actor_pos ) < 1.5 then
log("campfire_distance true")
return true
end
end
log("campfire_distance false")
return false
end

Быстродействие - просто в разы. И никаких лишних телодвижений.
  Злобная реклама
Пятница, 03.11.2017, 21:49
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Российская Федерация  СЕРА
Пятница, 03.11.2017, 22:49 | Сообщение # 8498
Статус:
Новичок:
Сообщений: 284
Награды: 1
Регистрация: 17.04.2012

По какой причине заспавненые через сдк гравитационные аномалии могут не наносят урона?
  Злобная реклама
Пятница, 03.11.2017, 22:49
Статус:
Сообщений: 666
Регистрация: 17.04.2012
Российская Федерация  makdm
Пятница, 03.11.2017, 23:00 | Сообщение # 8499
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

СЕРА, если у аномалий прописано restrictor_type = 0, то урон будет минимальным. Если пропишите restrictor_type = 3, то урон максимальный.
  Злобная реклама
Пятница, 03.11.2017, 23:00
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Российская Федерация  СЕРА
Пятница, 03.11.2017, 23:05 | Сообщение # 8500
Статус:
Новичок:
Сообщений: 284
Награды: 1
Регистрация: 17.04.2012

makdm, но в restrictor_type сдк нельзя выставить числовое значение вроде
  Злобная реклама
Пятница, 03.11.2017, 23:05
Статус:
Сообщений: 666
Регистрация: 17.04.2012
Российская Федерация  DaaGuda
Пятница, 03.11.2017, 23:19 | Сообщение # 8501
Статус:
Неопытный:
Сообщений: 479
Награды: 4
Регистрация: 09.03.2014

СЕРА, ставь четвертое значение, можно же догадаться.
Прикрепления: 9743888.jpg (345.3 Kb)
Сообщение отредактировал DaaGuda - Пятница, 03.11.2017, 23:20
  Злобная реклама
Пятница, 03.11.2017, 23:19
Статус:
Сообщений: 666
Регистрация: 09.03.2014
Российская Федерация  makdm
Суббота, 04.11.2017, 00:29 | Сообщение # 8502
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

yobakun, вот все эти проверки в ваших функциях ну совсем лишнее.
Цитата yobakun ()
  if obj:section() == "c_matches" or obj:section() == "c_matches_old" or obj:section() == "c_ignition_set" then

Цитата yobakun ()
 if obj:section() == "c_matches" then

Цитата yobakun ()
 if obj:section() == "c_matches_old" then

Цитата yobakun ()
 if obj:section() == "c_ignition_set" then


Если вы учитесь писАть скрипы, то сразу старайтесь делать это правильно и с наименьшими затратами ресурсов компа на обработку ваших скриптов ( повышаем быстродействие ).

Почитайте, как это сделать без всяких проверок на секцию ( урок 75 ) :

http://sigerous.ru/forum/322-208-1348629-16-1425756707
  Злобная реклама
Суббота, 04.11.2017, 00:29
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Российская Федерация  СЕРА
Суббота, 04.11.2017, 07:31 | Сообщение # 8503
Статус:
Новичок:
Сообщений: 284
Награды: 1
Регистрация: 17.04.2012

DaaGuda, спасибо
  Злобная реклама
Суббота, 04.11.2017, 07:31
Статус:
Сообщений: 666
Регистрация: 17.04.2012
Российская Федерация  yobakun
Суббота, 04.11.2017, 14:34 | Сообщение # 8504
Статус:
Новичок:
Сообщений: 270
Награды: 5
Регистрация: 30.07.2016

makdm,

Цитата
В файл bind_stalker.script в метод function actor_binder:use_inventory_item(obj) пишем

xr_s.use_inventory_item( obj:section() ) -- здесь мы вызываем колбэк

В call of chernobyl такого нет, есть только вот это:
Код
    Line 6:  npc:bind_object(actor_binder(npc))
    Line 10: class "actor_binder" (object_binder)
    Line 12: function actor_binder:__init (obj) super(obj)
    Line 13:  db.actor_binder = self
    Line 27: function actor_binder:net_spawn(data)
    Line 73: function actor_binder:net_destroy()
    Line 149: function actor_binder:reinit()
    Line 208: function actor_binder:update(delta)
    Line 285: function actor_binder:save(packet)

Как быть?
  Злобная реклама
Суббота, 04.11.2017, 14:34
Статус:
Сообщений: 666
Регистрация: 30.07.2016
Российская Федерация  atanda
Суббота, 04.11.2017, 14:56 | Сообщение # 8505
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

denis2000, Это я знаю, но разве на схему для физ. объекта нельзя цеплять калбэк, вот, например, в той же схеме ph_idle, hit_callback работает нормально, а в моей схеме для физ. объекта ничего не работает. Сначала подумал, что может быть этот калбэк должен вызываться откуда нибудь из другого места, к примеру из xr_logic. Там посмотрел - есть строки отвечающие за hit_callback, но это совсем для других схем, на подобии ph_hit и ph_on_hit. А для ph_idle нет, и что же это тогда получается?..

И вот ещё настройка объекта в сдк:

Добавлено (04.11.2017, 14:56)
---------------------------------------------
yobakun, с СоС не разбирался, но в своём первом посте ты писал вот это:

Цитата yobakun ()
function on_game_start()
RegisterScriptCallback("actor_on_item_use",item_use)
end
Сообщение отредактировал buffy - Суббота, 04.11.2017, 14:41
  Злобная реклама
Суббота, 04.11.2017, 14:56
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Поиск: