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

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


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

22 часа назад, AndreySol сказал:

Ну тогда уж проще будет использовать вариант create(...) с указанием номера секции из all.spawn, раз уж все равно используем all.spawn.

Не совсем. Если спавн пересобирается и разбирается по новой, номера секций могут измениться. Проще аптечку спавнить обычным скриптом alife():create.

 

22 часа назад, dPlayer сказал:

любая неживая табуретка, записанная в спавне, будет всегда онлайн.

А заспавненная, а потом УДАЛЕННАЯ - тоже будет онлайн??? :biggrin:

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

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

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

Прошу помощи у знающих.

Словил вылет

Скрытый текст

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...shing\s.t.a.l.k.e.r\gamedata\scripts\xr_logic.script:891: bad argument #1 to 'gfind' (string expected, got nil)

Кусок скрипта, начиная с нужной строки (выделена красным)

Скрытый текст

    for fld in string.gfind(src, "%s*([^,]+)%s*") do
        -- Здесь fld это набор infoportions в {} и имя секции, на которую переключиться.
        lst[n] = {}
        --printf("_bp: iter %d: fld = %s", n, fld)

        -- Выделяем список infoportions для проверки:
        at, to, infop_check_lst = string.find(fld, "{%s*(.*)%s*}")
        if infop_check_lst then
            --printf("_bp: infop_check_lst: [%s]", infop_check_lst)

В чем может быть причина вылета? Вылетает не на всех локациях, сразу скажу, что правилось много всего. В какую сторону начать копать?

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

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

@AndrewMor, так у тебя переменная src нил. Нужно выше по коду смотреть, где она инициализируется и места всех присвоений.

 

UPD: так это ж ванильная parse_condlist(). Где-то ты ее вызываешь, передавая последним аргументом нил вместо строки.

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

Например:

function parse_condlist(npc, section, field, src)
+	dbglog("xr_logic.parse_condlist: %s [%s] %s %s", npc and npc:name() or "<nil>", tostring(section), tostring(field), src or "<nil>")
	local lst = {}

	-- 1) Разбиваем на разделенные запятыми части:
[...]

где dbglog() -- любимый вариант выхлопа.

Для уменьшения спама можно занести вывод под if not src или if src == nil (if src ~= "" etc.).

 

Вообще, она предназначена для парсинга т.н. кондишен-листов, которые обитают, в основном, в config/scripts/, config/misc/task_manager.ltx, config/misc/treasure_manager.ltx и в оллспавне (поле cond, секция [logic] в custom_data). Так что проблема может быть и не скриптовой. По имени NPC и названию секции сможешь найти конкретное место.

 

Изменено пользователем The ReapeR
  • Полезно 1

New Level Changer 5.08: Раритеты

ReapeR build 3: Раритеты

 

Я на YouTube: Vincent Vega

Ссылка на комментарий
12 часов назад, dPlayer сказал:

зачем тень Чернобыля и чистое небо создают вначале игры all.save

Ну так это способ "поднять себя за волосы". Запуск игры происходит с сохранки. Чтобы с нее запуститься, надо сначала создать хоть какую-нибудь.

  • Нравится 1
Ссылка на комментарий

Кто-нибудь пробовал фиксить скрипт однотипных квестов на то, чтобы можно было набирать сразу несколько, а не по одному? И что нужно в нем исправить?

То есть сейчас так: берешь квест у НПС из доступных (убить НПС, принести арт, тому подобное), и после этого остальные квесты закрываются (нельзя взять), пока не выполнишь текущий. А хотелось бы сразу набирать скопом все доступные квесты. Или какие-то ограничения есть на это? Почему-то до сих пор ни в одном моде (по-моему) это не реализовали.

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

@HellRatz наверное никому не нужно, вот и не сделано. Мне например, не нужно. Найди у себя в task_manager.script похожее на вот такое:

-- Проверка свойств таска
function CRandomTask:check_task_props( task_id )
  local t = self.task_info[ task_id ]
  -- Проверка по активным заданиям данного типа у вендора.
  if self.active_task_by_type[ t.complex_type ] ~= nil then
    t.enabled_props = false
    return
  end

И убери этот блок if end. Вероятно еще понадобится убрать из CRandomTask:task_avail вот такое

  -- local priors = self.current_parent_type_prior
  -- if
  --   priors[ task_desc.complex_type ]
  --   and priors[ task_desc.complex_type ] < task_desc.prior
  -- then
  --   return false
  -- end

Это у меня уже закомментировано, а у тебя, скорее всего, нет.

 

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

Там в куче мест выбор идет по тип+квестодатель. Поэтому запрещают брать однотипные.

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

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

Как сделать проверку на наличие предмета хоть в одном из слотов? Если сравнивать с 0, будет вылет.

function s_all_check()
	local item_in_slot_1 = db.actor:item_in_slot(1)
	local item_in_slot_2 = db.actor:item_in_slot(2)
	local item_in_slot_6 = db.actor:item_in_slot(6)
	if item_in_slot_1() ~= 0 or item_in_slot_2() ~= 0 or item_in_slot_6() ~= 0 then
		return true
	else
		return false
	end
end

 

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

@Graff46 item_in_slot() возвращает клиентский объект или nil, т.ч. достаточно проверять результат на истинность.

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

@dPlayer,

function have_any()
	return (db.actor:item_in_slot(1) or db.actor:item_in_slot(2) or db.actor:item_in_slot(6)) ~= nil
end

function have_any_opt()
	local act = db.actor -- сомнительный по выигрышу шоткат, после ZRP шарахаюсь от любого дублирования
	return (act:item_in_slot(1) or act:item_in_slot(2) or act:item_in_slot(6)) ~= nil
end

Просто пара примеров, с оптимизацией использования переменных и однотипных вызовов.

 

Изменено пользователем The ReapeR
  • Спасибо 1
  • Согласен 1

New Level Changer 5.08: Раритеты

ReapeR build 3: Раритеты

 

Я на YouTube: Vincent Vega

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

Все вопросы касаются Теней Чернобыля.

1) Где можно найти информацию по редактированию (изменению местоположения и интенсивности) "статических" источников звука, по примеру ЧН (например, завывание ветра на верхушке церкви, щёлканье сломанного электрощитка)?

2) Как изменить количество возможных проигрываемых звуков смерти ГГ  (в папке actor'a находятся 4 дефолтных звука, их можно заменить, однако дополнительная нумерация, как в случае с гитарными мелодиями, не помогает, необходим файл, где прописаны эти звуки, в конфиге актора проверял, там только звуки повреждений).

3) Амбиент в Тенях Чернобыля играет только днём, ночью его включить, даже через конфиг музыки на локациях, не выходит. Каким образом можно сделать, чтобы амбиент в ТЧ делился на дневной и ночной, как в ЧН и ЗП?

P.S. Перелопатил Stalker Inside и этот форум по этим вопросам, ничего не нашёл, заранее прошу прощения за возможную невнимательность.

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

@Snowguard, открываешь уровень в LevelEditor, ставишь куда хочешь Sound Source, настраиваешь его, делаешь Make Game и получаешь level.sound_static в папке с уровнем.

2. зашито в движке.

Скрытый текст

// actor_defs.h
enum ESoundCcount {
	SND_DIE_COUNT=4
};
// Actor.cpp
void CActor::Load	(LPCSTR section)
		::Sound->create		(sndDie[0],			strconcat(sizeof(buf),buf,*cName(),"\\die0"), st_Effect,SOUND_TYPE_MONSTER_DYING);
		::Sound->create		(sndDie[1],			strconcat(sizeof(buf),buf,*cName(),"\\die1"), st_Effect,SOUND_TYPE_MONSTER_DYING);
		::Sound->create		(sndDie[2],			strconcat(sizeof(buf),buf,*cName(),"\\die2"), st_Effect,SOUND_TYPE_MONSTER_DYING);
		::Sound->create		(sndDie[3],			strconcat(sizeof(buf),buf,*cName(),"\\die3"), st_Effect,SOUND_TYPE_MONSTER_DYING);

 

 

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

Ребята, знает кто-нибудь, файл XR_3DA.exe для огсе с какими параметрами собран? в форуме огсе написал,а там по ходу всё умерло...

Ссылка на комментарий
30 минут назад, alexsimm сказал:

файл XR_3DA.exe для огсе с какими параметрами собран?

Выкладывались вроде авторские исходники, вот если понадобиться:

https://yadi.sk/d/3t-fnQzw3UVKuK

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

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

wpn_lr300 = 1, scope silencer launcher\n
wpn_lr300 = 1, scope, silencer, launcher\n

С запятыми нормально работает, проверил сперва на Волке.

В оригинале без запятых. На радаре много с двумя,тремя аданнами на оружии, но в игре не видел ни разу этого. Вот и интересно.

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

@alex5773 думаю - как работает так и правельно:crazy2:

  • Согласен 2
  • Не согласен 2

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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

@alex5773 я помню только на ДТ наймы со стволами с установленой оптикой, как там в конфигах прописаны аддоны?

@Charsi получается, в данной ситуации я прав)))

Изменено пользователем UriZzz
  • Не нравится 1

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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

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

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

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

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

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

Войти

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

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

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