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

[SoC] Ковыряемся в файлах


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

Как сделать, чтобы задания из task_manager'а (ну которые начинаются "Мне нужна работа. Есть что на примете?") не повторялись.


По какой-то непонятной для меня причине они часто сбрасываются. К примеру Сидоровичу нужно сначала принести Медузу, потом Каменный цветок, потом Ломоть мяса, и в конце Ночную звезду. Ты выполняешь 2 из них. Уходишь временно. Потом приходишь за получением 3его, а Сидоровичу опять нужна Медуза (самое первое задание). Я пытался понять в task_manager.script, как это работает, но так и не понял.


Как убрать эту багофичу?


Ссылка на комментарий
  Kondr48 писал(а):
Нужно скинуть вещи ГГ в ящик который довольно-таки далеко от него.

Обсуждалось же 5 страниц назад.

 Способ позволяет закинуть в ящик\рюкзак из оллспавна любое количество предметов вне зависимости от офф-он-лайна.

http://www.amk-team.ru/forum/topic/5525-soc-kovyriaemsia-v-fajlakh/?p=1020159

Изменено пользователем BFG

"Кругом зомби.....у меня кончаются патроны...."

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

@Kondr48,

alife():set_switch_online(box.id, true)
alife():set_switch_offline(box.id, false)
Потом немного подождать, пока он (ящик) выйдет в онлайн, и можно трансферить предметы.

 

@IQDDD, добавь в секцию задания, которое нужно реже повторять, параметр:

idle_time = время в игровых секундах

Через это время после выполнения оно снова будет доступно. По умолчанию в чистой игре стоят одни сутки.

Изменено пользователем naxac
  • Спасибо 2
  • Нравится 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

В task_manager.ltx ни у одного задания не стоит idle_time. У четырёх заданий закомментирован. Когда скрипт task_manager'а читает ltx-файл, то по дефолту действительно ставит 24*60*60. Я ещё на 90 умножил. :D

Спасибо за совет.

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

 

 

  Kondr48 писал(а):
Функция прекрасно срабатывает вблизи ящика, но не работает если мы далеко

Функция прекрасно работает и далеко от ящика. Но предмет в ящике не сохраняется, если сделать сейв и потом его загрузить.

 

Мне посоветовали делать так, и все прекрасно работает.

function spawn_docs()
   local sobj = alife():object("heli_seif")
   if sobj and has_alife_info("take_zver_message") then
     local obj = level.object_by_id(sobj.id)
     if obj then
       spawn_item_in_inv("access_card", obj)
       spawn_item_in_inv("journal", obj)
     end
   end
end

function spawn_item_in_inv(spawn_item,npc)
	if not npc then 
		npc = db.actor 
	end
	local item = alife():create(spawn_item, 
		npc:position(),
		npc:level_vertex_id(),  
		npc:game_vertex_id(),
		npc:id())
	
	if npc:id() ~= db.actor:id() then
		-- Фикс пропадания доспавненного предмета при сейв/лоаде
		level.client_spawn_manager():add(item.id, -1, fix_spawn_item_in_inv, npc)  -- Калбек на выход item в онлайн
	end

	return item
end

function fix_spawn_item_in_inv(npc, id, item)
    npc:transfer_item(item, npc)
end

Сталкер - наше всё!

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

Прошу помощи.

 

Написал диалог, на первый взгляд, вроде все правильно.

    <dialog id="job_juk_dialog">
        <phrase_list>
            <phrase id="0">
                <text>job_juk_dialog_0</text>
                <next>1</next>
            </phrase>
            <phrase id="1">
                <text />
                <next>111</next>
                <next>121</next>
                <next>131</next>
            </phrase>
            <phrase id="111">
                <text />
                <precondition>zaton_dialog.bandits_death</precondition>
                <next>11</next>
            </phrase>
            <phrase id="121">
                <text />
                <precondition>zaton_dialog.killers_death</precondition>
                <next>12</next>
            </phrase>
            <phrase id="131">
                <text />
                <precondition>zaton_dialog.all_alive</precondition>
                <next>13</next>
            </phrase>
            <phrase id="11">
                <text>job_juk_dialog_11</text>
                <next>21</next>
            </phrase>
            <phrase id="12">
                <text>job_juk_dialog_12</text>
                <next>22</next>
            </phrase>
            <phrase id="13">
                <text>job_juk_dialog_13</text>
                <action>dialogs.break_dialog</action>
            </phrase>
            <phrase id="21">
                <text>job_juk_dialog_21</text>
                <next>311</next>
                <next>312</next>
            </phrase>
            <phrase id="311">
                <text>job_juk_dialog_311</text>
                <give_info>job_kill_bandits</give_info>
                <action>dialogs.break_dialog</action>
            </phrase>
            <phrase id="312">
                <text>job_juk_dialog_312</text>
                <action>dialogs.break_dialog</action>
             </phrase>
            <phrase id="22">
                <text>job_juk_dialog_22</text>
                <next>321</next>
                <next>322</next>
            </phrase>
            <phrase id="321">
                <text>job_juk_dialog_321</text>
                <give_info>job_kill_killers</give_info>
                <action>dialogs.break_dialog</action>
            </phrase>
            <phrase id="322">
                <text>job_juk_dialog_322</text>
                <action>dialogs.break_dialog</action>
            </phrase>
        </phrase_list>
    </dialog>

Но при клике на первую фразу - вылет. Что тут не так?

  лог (Показать)

Сталкер - наше всё!

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

@AndrewMor, Вроде всё верно, но зачем столько лишних телодвижений со строкой <text /> ? Указал её в красном поле. Сначала ты разветвляешь диалог, потом зачем то 2 раза с помощью этой строки переводишь фразу от ГГ НПСу и обратно. Почему не поставил прекондишен сразу перед фразой (зелёным выделено) и убрать не нужную секцию ?

1fe827aecd931ac6ded37e4a60d6fb645eb4bd25

"Кругом зомби.....у меня кончаются патроны...."

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

Йо. 1. Подскажите, где находится параметр, отвечающий за время респавна артефактов в аномалии.

2. Как добавить в ту или иную аномалию спавн артефакта? К примеру, создал на новой локе жарку, и хочу в неё добавить спавн капли и огненного шара. Спасибо заранее.

Ссылка на комментарий
@UnLoaded, хм... это ввело меня в заблуждение. На примере подземелья агропрома: каждые 1,5 суток (точный интервал не вычислил) в полночь у электры спавнится вспышка. Бывало, зачистил полностью локу от артов, а они потом в ночь снова появляются. Игра без модов, поэтому и спрашиваю. Может что-то путаю, но ещё знаю, что в ЧН и ЗП респавн артов есть 100%
Ссылка на комментарий
  08.07.2016 в 17:32, naxac сказал:

@Kondr48,

alife():set_switch_online(box.id, true)
alife():set_switch_offline(box.id, false)
Потом немного подождать, пока он (ящик) выйдет в онлайн, и можно трансферить предметы.

Проблема вылезла в том, чтобы узнать id ящика. У меня есть только story_id его. level_object_by_sid возвращает game_object или я не правильно понял? В любом случае когда тайник в офлайне он мне nil возвращает.

P.S. Или же ткните, где есть реализованная на базе ТЧ функция ограбления ГГ, чтобы все его шмотки перепорхнули в нужный ящик. Я с оригинала только арену вспомнил, но там ящик как раз-таки в онлайне, что мне не подходит.

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

@Kondr48

Ну почему только level_object_by_sid ?

У класса alife_simulator есть метод story_object, используй его:

local sim = alife()
local soBox = sim:story_object(тут SID твоего ящика)
  • Спасибо 1
Ссылка на комментарий

Опять. Тестил подземелья: стабильно спавнится вспышка и бенгальский огонь у электр. Есть шанс появления двух бенгальских огней сразу!

Теперь хочу найти параметр, отвечающий за респавн. Не вижу его..

Ссылка на комментарий
  Vitalik Izotop писал(а):
Теперь хочу найти параметр, отвечающий за респавн. Не вижу его..

В конфигах аномалий есть:

  Цитата
artefacts = af_rusty_thorn,0.7,af_rusty_kristall,0.25,af_rusty_sea-urchin,0.05
BirthProbability = 0.1

Если я не ошибаюсь, то этот респавн происходит только при выходе аномалий в он-лайн.

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

1. Насколько я знаю, сталкеры и мутанты с определённой вероятностью могут покинуть гулаг и начать путешествие по локациям в поисках другого свободного. ( собаки уходят с агропрома на свалку, плоти идут на агропром. Сталкеры с арм.складов в бар ходят. Второстепенные персонажи, типо Фраера и Кочерги шляются из гулага в гулаг. ) Какой параметр отвечает за вероятность "желания" уйти с гулага в свободное путешествие?

P.S. Unloaded, правил конфиг аномалий, респавн артов всё равно составляет 1,5-2 суток. Разве что получилось заспавнить огненный шар в карусели)

Кстати говоря, для меня загадка, откуда при переходе из ТД на кордон позади тебя спавнятся 10-13 бандитов. Если АТП заполнено, другие гулаги тоже, то какая цель? Или это наитупейший маршрут на свалку, где они должны были остановиться?

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

 

 

  BFG писал(а):
Почему не поставил прекондишен сразу перед фразой (зелёным выделено) и убрать не нужную секцию ?

Опытным путем выяснил, что вылет идет из-за precondition, если его убрать(закомментировать) - все работает. Тады вопрос: почему?

function bandits_death(actor, npc)
  if not has_alife_info("job_kill_bandits") then
        return true
  end
        return false
end

Сталкер - наше всё!

Ссылка на комментарий
  AndrewMor писал(а):
Тады вопрос: почему?

Ну так что не ясно: видимо условие в прекондишене не выполняется, он возвращает false, движок соответственно не может "построить" дальше диалог -> вылет. Для диалогов с ветвлениями есть такое правило - должна быть хотя-бы одна ветка, которая будет доступна и движок сможет "построить" ее до конца.

 

  Vitalik Izotop писал(а):
Насколько я знаю, сталкеры и мутанты с определённой вероятностью могут покинуть гулаг...

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

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

Вопрос про серверные и клиентские классы. Чтобы сделать "скриптовую обёртку" для серверного объекта ( в смысле как se_stalker.script ) нужно, чтобы этот класс был зарегистрирован в class_registrator.script, а так же, чтобы был экспортирован клиентский(?) класс ( CMosquitoBald и тому подобное) . И так как классы CNoGravityZone и CRadioactiveZone не экспортированы, такую вот "обвязочку" им не сделаешь. Я правильно всё понял?

... А наше дело маленькое - с ружьём да по болотам. (с)

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

 

 

  UnLoaded писал(а):
Ну так что не ясно: видимо условие в прекондишене не выполняется

В том-то и дело, что условие выполняется. Ну в общем, я плюнул и сделал все по другому.

Сталкер - наше всё!

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

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

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

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

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

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

Войти

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

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

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...