Случайная подборка модов
S.T.A.L.K.E.R. Complete 2009
4.0
Dead Autumn
4.1
Золотой обоз. Часть первая
3.5
Old Story
4.1
Туман войны: Закалённые Зоной
3.2
Ночь Перед Рождеством 2
3.5
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
⚙ Модострой: Вопросница
Российская Федерация  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
Российская Федерация  denis2000
Пятница, 03.11.2017, 18:08 | Сообщение # 8671
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Цитата yobakun ()
Теперь вот тут где-то косяк, не могу понять.

Вот косяк:
Код
if campfire_distance() == 1 then

Функция возвращает бинарное значение, а вы сравниваете с числом.
Сообщение отредактировал denis2000 - Пятница, 03.11.2017, 18:10
  Злобная реклама
Пятница, 03.11.2017, 18:08
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  yobakun
Пятница, 03.11.2017, 18:10 | Сообщение # 8672
Статус:
Новичок:
Сообщений: 270
Награды: 5
Регистрация: 30.07.2016

denis2000, понял.

Попробовал вот так:

Код
function item_use(obj)
    if obj:section() == "c_matches" or obj:section() == "c_matches_old" or obj:section() == "c_ignition_set" then
  obj:set_remaining_uses(obj:get_remaining_uses()+1)
  if not campfire_distance() then
  return
  end
    end    
    if obj:section() == "c_matches" then
  local roll = math.random(1,2)
  if roll == 1 then
   campfire_on(obj)
   log("turn_on:success")
  else
   obj:set_remaining_uses(obj:get_remaining_uses()-1)
   SetHudMsg(game.translate_string("st_fail"),3)
   log("turn_on:fail")
  end
    end
    
    if obj:section() == "c_matches_old" then
  local roll = math.random(1,3)
  if roll == 1 then
   campfire_on(obj)
   log("turn_on:success")
  else
   obj:set_remaining_uses(obj:get_remaining_uses()-1)
   SetHudMsg(game.translate_string("st_fail"),3)
   log("turn_on:fail")
  end
    end
    if obj:section() == "c_ignition_set" then
  local roll = math.random(1,1)
  if roll == 1 then
   campfire_on(obj)
   log("turn_on:success")
  else
   obj:set_remaining_uses(obj:get_remaining_uses()-1)
   SetHudMsg(game.translate_string("st_fail"),3)
   log("turn_on:fail")
  end
    end
end

Часть кода из campfire_on(matches) перестала работать.
Код
if not (cf:is_on()) then
if (rainy_is() == 1) then
local snd_obj = sound_object("interface\\inv_matches")
snd_obj:play(db.actor,0,sound_object.s2d)
-- xr_sound.set_sound_play(db.actor:id(),"inv_matches")
matches:set_remaining_uses(matches:get_remaining_uses()-1)
cf:turn_on()
-- return
break
else
matches:set_remaining_uses(matches:get_remaining_uses()-1)
local text = game.translate_string("st_fail")
SetHudMsg(text,3)
end
end

Плюс утечка памяти и вылет через некоторое время.
Сообщение отредактировал yobakun - Пятница, 03.11.2017, 18:33
  Злобная реклама
Пятница, 03.11.2017, 18:10
Статус:
Сообщений: 666
Регистрация: 30.07.2016
Российская Федерация  atanda
Пятница, 03.11.2017, 18:28 | Сообщение # 8673
Статус:
Бывалый:
Сообщений: 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 | Сообщение # 8674
Время Альянса
Статус:
Ветеран:
Сообщений: 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 | Сообщение # 8675
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

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

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

У вас одно несомненное преимущество - вы действительно пытаетесь разобраться!
  Злобная реклама
Пятница, 03.11.2017, 18:59
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  atanda
Пятница, 03.11.2017, 19:14 | Сообщение # 8677
Статус:
Бывалый:
Сообщений: 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 | Сообщение # 8678
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

buffy, Не для всех классов объектов можно зарегистрировать колбек на хит, а только для тех которые поддерживает эту возможность в движке.
  Злобная реклама
Пятница, 03.11.2017, 19:25
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  makdm
Пятница, 03.11.2017, 21:49 | Сообщение # 8679
Время Альянса
Статус:
Опытный:
Сообщений: 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 | Сообщение # 8680
Статус:
Новичок:
Сообщений: 284
Награды: 1
Регистрация: 17.04.2012

По какой причине заспавненые через сдк гравитационные аномалии могут не наносят урона?
  Злобная реклама
Пятница, 03.11.2017, 22:49
Статус:
Сообщений: 666
Регистрация: 17.04.2012
Российская Федерация  makdm
Пятница, 03.11.2017, 23:00 | Сообщение # 8681
Время Альянса
Статус:
Опытный:
Сообщений: 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 | Сообщение # 8682
Статус:
Новичок:
Сообщений: 284
Награды: 1
Регистрация: 17.04.2012

makdm, но в restrictor_type сдк нельзя выставить числовое значение вроде
  Злобная реклама
Пятница, 03.11.2017, 23:05
Статус:
Сообщений: 666
Регистрация: 17.04.2012
Российская Федерация  DaaGuda
Пятница, 03.11.2017, 23:19 | Сообщение # 8683
Статус:
Неопытный:
Сообщений: 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
Российская Федерация  yobakun
Пятница, 03.11.2017, 23:56 | Сообщение # 8684
Статус:
Новичок:
Сообщений: 270
Награды: 5
Регистрация: 30.07.2016

makdm, спасибо еще раз. Там правда было еще нечто похожее, но раз работает, пусть будет так.

В общем, вот, розжиг костров и автосохранение.
Суть: есть 3 предмета для розжига - старые спички, новые и специальный набор для розжига. Вероятность разжечь костер 33, 50 и 100% соответственно. Также в зависимости от силы дождя сверху накладывается процент неудачи. Если дождя нет - 0%, при дожде с силой (rain_factor) от 0 до 0.5 - 50% успеха, от 0.6 и выше - 33%.
Если подойти к горящему костру и нажать F, игра просто сохранится без потери спичек.
Скачать
Сообщение отредактировал yobakun - Пятница, 03.11.2017, 23:57
  Злобная реклама
Пятница, 03.11.2017, 23:56
Статус:
Сообщений: 666
Регистрация: 30.07.2016
Российская Федерация  makdm
Суббота, 04.11.2017, 00:29 | Сообщение # 8685
Время Альянса
Статус:
Опытный:
Сообщений: 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
Поиск: