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

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

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

По научному или "...шоб було" ?

Простейший вариант - костыль обр.2008г:

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

carbody_item , _16 ; inventory_item , _16 ->

обнулить в <wpn_params>...</wpn_params> всё, что шевелится x=, y=, width=, height=, <text></text>, <texture></texture>

 

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий
6 часов назад, Возрождённый сказал:

[...] Все равно у меня какое-то навязчивое подозрение, что они не совсем правильно работают...

 

По-хорошему, нужно не "гасить симптомы" отключением шкал, а править логику в ui_wpn_params.script под конкретную ТТХ-систему.

 

В конктексте какой базы вопрос? Если AMK, то шкалы завязаны на новые параметры в секциях стволов: hit_rate, disp_rate, а также на порядок секций патронов в ammo_section (первой должна идти секция наиболее "продвинутого" типа боеприпасов: дротик для шотганов etc.). В противном случае шкалы будут врать, и сильно. На моем опыте, практически ни в одном моде, построенном на базе AMK, не удосужились внести соответствующие правки, зато на "вранье" шкал не жаловался только ленивый)

Если речь о ванили, то там есть "проблемки" со шкалой "Точность". Она зависит даже от базовой дисперсии актора, хотя в идеале должно рассматриваться оружие, зажатое в тиски. Простейший вариант исправления на более-менее "честную" логику -- в олдовом Zenobian Mod (использую их метод в своем аддоне), но ничто не мешает разработать свой, особенно при использовании нестандартной ТТХ-системы: скажем, TrickSR и т.д.

 

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

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

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

 

Я на YouTube: Vincent Vega

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

@The ReapeR, у меня чистый ТЧ. Хорошо, посмотрю, более детально. Как раз вчера скачал Zenobian.

  • Нравится 1

Работы butcher_512. Все ссылки пропали, поэтому ложу свои сюда, чтобы никогда не потерять:

Customization Pack 0.83 [Beta4] - SoC - Тема модификации.

Customization Pack CoP [Beta]   - CoP - Тема модификации.

Ссылка на комментарий
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
Ссылка на комментарий

@The ReapeR , спасибо, но я уже нашел ошибку в логике рестриктора. Исправил и все взлетело.

  • Нравится 1

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

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

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

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

GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом.

JNCR — Coming Soon...

i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2


Подарки

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

    @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

     

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

    Может нужно сравнивать с nil ?

    И скобки после переменных не ставить...

    Изменено пользователем Graff46
    • Спасибо 1
    • Согласен 1
    Ссылка на комментарий

    @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

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

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

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

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

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

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

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

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

    Войти

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

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

    AMK-Team.ru

    ×
    ×
    • Создать...