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

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


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

@MTomich Это рестриктор: при входе актера в область проверить наличие баллона, при действии удалить баллон из инвентаря и отспавнить в заданных координатах, плюс набор инфо-поршней.

 

[spawns\all.spawn\alife_zaton.ltx] -- объекты и координаты

[configs\scripts\zaton\zat_b57_gas_actor.ltx] -- логика

  • Спасибо 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Здравствуйте, опять ищу помощи. Сделал кат-сцену с "растяжкой" и оглушением ГГ при входе в рестриктор. Написал логику:

 

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

[logic]
active = sr_idle@idle

[sr_idle@idle]
on_info = {=actor_in_zone(wiz_rastyashka)} sr_idle@timer%=play_sound(generic_checkout)=spawn_object(pri_a25_enter_door_explosive_grenade:wiz_rast_point)%

[sr_idle@timer]
on_game_timer = 10|{-wiz_cam_start_nauch =object_exist(pri_a25_enter_door_explosive_grenade)} sr_cutsene %=barrel_explode(pri_a25_enter_door_explosive_grenade) = run_postprocess(alcohol) +wiz_cam_start_nauch%

[sr_cutsene]
point = wiz_spawn_umnik
cam_effector = scenario_cam\way_in_zone\nachalo_kam
on_signal = cameff_end | sr_idle@end % =run_postprocess(alcohol) = set_time(14:0) +wiz_cam_start_nauch_end%
global_cameffect = true
outdoor = true

[sr_idle@end]

Но при входе на рестриктор происходит вылет:

 

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

[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : ..\xrServerEntities\script_storage.cpp
[error]Line          : 748
[error]Description   : ....l.k.e.r. call of pripyat\gamedata\scripts\_g.script:480: bad argument #2 to 'format' (string expected, got nil)

Помогите найти ошибку, пожалуйста. 

Изменено пользователем egorkaufman1
Ссылка на комментарий
2 часа назад, egorkaufman1 сказал:

Помогите найти ошибку

Искать её придется самому.

Для начала убери из логики все эффекты (заключены в %%) и добавь отладочное сообщение типа =send_tip(perehod_na_sekciyu_xxx). Посмотришь как происходит переход и есть ли ошибки, а потом добавляй по одному эффекту и выявляй "косячный".

  • Спасибо 1
  • Согласен 1
  • Полезно 1

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

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

На только одной локации враждебные НПС не видят ГГ вплотную. Если выстрелить, то НПС начинают паниковать, изредка стреляя в ГГ, но кидают гранаты. Пересобирал АИ сетку и спавн несколько раз, сетка не драфт. Также я проверял видимость ГГ для НПС функцией

npc:see(db.actor)

Возвращает false. Подскажите в чем может дело быть?

Изменено пользователем Graff46
Ссылка на комментарий
7 часов назад, egorkaufman1 сказал:

scripts\_g.script:480: bad argument #2 to 'format' (string expected, got nil)

Для устранения таких вылетов неплохо было бы привести в порядок _g.script, заменив в нем древние и убогие функции вывода лога, на более логически адекватные. Ведь есть же уже куча примеров как это сделать.

А так, вам _g.script буквально сообщает, что "вылет произошел потому, что не получилось сообщить причину вылета в логе".  Это практически анекдот "вскрытие показало, что пациент умер от вскрытия" - ну неужели вас это не смущает в вашем моде? Не приводит к мысли, что может быть, этот скрипт должен работать не так?

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

 

Чтобы не быть голословным.

--==============================================================================================
local tostring_all_tbl = {
    ["table"] 	   = function(table, ind) --Распечатка таблиц
                        local res = "{" --Начало
                        local end_res = ind and "\n"..ind.."}" or "\n}" --Конец
                        local def_ind = "  " --Отступ от начала строки
                        ind = ind and ind..def_ind or def_ind --Для каждой "таблицы внутри таблицы" отступ увеличивается в 2 раза
                        for k, v in pairs(table) do
                            res = res.."\n"..ind.."["..tostring_all(k, ind).."] = "..tostring_all(v, ind)..","
                        end
                        return res..end_res
                    end,
    ["string"]    = function(v) return "'"..v.."'" end, --Строки берём в кавычки. Это нужно, чтобы можно было отличить строку "123" от числа 123, "nil" от nil и тд...
    ["number"]    = function(v) return tostring(v) end,
    ["boolean"]   = function(v) return tostring(v) end,
    ["nil"]       = function(v) return tostring(v) end,
    ["function"]  = function() return "[[FUNCTION]]" end, --Function, Userdata и Thread распечатать нельзя, просто заменим на строки
    ["userdata"]  = function() return "[[USERDATA]]" end,
    ["thread"]    = function() return "[[THREAD]]" end,
}
--Конвертирование чего угодно в строку. Использовать только для вывода в лог!
function tostring_all(obj, ind) --ind - служебный аргумент для распечатки "таблиц в таблицах".
	return tostring_all_tbl[type(obj)](obj, ind)
end

--Функциональная обёртка для log1.
--Делает дополнительную работу по конвертации параметров, которые не воспринимаются родной функцией string.format.
--Параметры можно передавать ЛЮБОГО ТИПА! В строке формата они должны стоять как %s (потому, что будут сконвертированы в строки).
function log3(fmt, ...)
	local args = {...}
	for i=1, #args do
		args[i] = tostring_all(args[i])
	end
	local res, msg = pcall(string.format, fmt, unpack(args))
	if not res then --Если произошла ошибка
		msg = "!!log3 failed: "..msg.."\n"..debug.traceback()
	end
	log1(msg)
end
--==============================================================================================
function abort(fmt, ...)
	log1("!!****************************[ABORT]*********************************")
	log1(debug.traceback())
	log3(fmt, ...)
	log1("!!********************************************************************")
	error(tostring(fmt))
end

Вот из OGSR для примера. Тоже старый, не лучший (имхо) вариант, но хорош тем что не подтягивает функций из других файлов - тут все перед глазами, наглядно. Он не пишет сообщений в духе "вскрытие показало, что пациент умер от вскрытия" - а пишет по делу.

 

 

 

 

 

 

 

  • Нравится 1
  • Полезно 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

@Graff46 

проверить в сдк, у актора должен быть включен флажок: Used AI Locations, и сетка на драфте не влияет на видимость нпс.

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

Здравствуйте.

Понадобилось сделать своё собственное диалоговое окно. Следуя многочисленным советам с форума, взял за основу "ui_numpad.script".

Скрытый текст
function main()
	super_dlg = ui_MyDialog.MyDialog()
	super_dlg:ShowDialog(true)
end

class "MyDialog" (CUIScriptWnd)

function MyDialog:__init() super()
	self:InitControls()
end

function MyDialog:__finalize()
end

function MyDialog:InitControls()

	local xml = CScriptXmlInit()
	xml:ParseFile("ui_numpad_wnd.xml")
	xml:InitStatic("background", self)

	self.st = xml:InitStatic("edit_box", self)
	self.st:SetWindowName("edit_box")

	self:AddCallback("edit_box", ui_events.BUTTON_CLICKED, self.On_BUTTON_CLICKED, self)	<-- "Проблемная" строчка
end

function MyDialog:On_BUTTON_CLICKED()
end

function MyDialog:OnKeyboard(dik, keyboard_action)
	CUIScriptWnd.OnKeyboard(self, dik, keyboard_action)

	if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
		if dik == DIK_keys.DIK_ESCAPE then
			self:HideDialog()
		end
	end

	return true
end

 

 

В целом всё получилось, но столкнулся с одной непонятной проблемой: Мне не требуется обработка событий для отдельных элементов окна, хватает общего "OnKeyboard", но я не могу удалить строчку с установкой Callback'а. Если её удалить то при открытии окна, через несколько секунд происходит стабильный вылет.

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

[STACK TRACE UF] :
   0023:0377AC2E luabind.beta7-devel.rc4.dll, luabind::detail::do_call_member_selection()
   0023:054191DA xrGame.dll, CDialogHolder::OnFrame()
 
Unhandled Error
[error][     183]    : Невозможно создать файл, так как он уже существует.

 

Подскажите, пожалуйста, в чем дело?

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

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

Закомментил указанную строчку и function MyDialog:On_BUTTON_CLICKED(), сделал запуск function main() через съедание бинта: окно с задником выводится и отображается без вылетов, правильно реагирует на выход через [Esc] и перезагрузку.

 

Видимо, конфликт еще с каким-то модом…

 

Зачем нужен вывод "return true" в OnKeyboard?

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

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
10 минут назад, Norman Eisenherz сказал:

отображается без вылетов

Попробуй подождать подольше.

 

11 минут назад, Norman Eisenherz сказал:

Зачем нужен вывод "return true" в OnKeyboard?

Не знаю. Был в оригинальном "ui_numpad.script".

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

Ссылка на комментарий
2 минуты назад, Norman Eisenherz сказал:

Выложи свой скрипт.

Он выложен постом выше. Я только начал оформлять диалог, удалив ненужное из "ui_numpad.script", поэтому там ничего особенного и нет. Единственное, что могу добавить, это то, что я для теста вставил этот диалог вместо "ui_numpad" в "ph_code.script".

Кстати, если в оригинальном "ui_numpad.script" закомментировать все "AddCallback", то при срабатывании "ph_code" происходит такой же вылет. Может и правда ещё где-то "накосячил".

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

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

Выложен текст, а нужен файл для испытаний.

Как раз хотел спросить, откуда выполняется вызов. Для теста в [ph_code.script] нужно точно знать, какого ввода он ожидает.

Задача в создании своего окна или именно в изменении логики [ui_numpad]?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@WinCap Ты пытаешься из скриптовой схемы сделать некое рандомное окно. Разве это правильно? Я не работаю с ЗП, по этому не знаю как там правильно вывести свое срипт-окно на худ, но в ТЧ уж точно нет нужды переделывать какие-то скриптовые схемы, там есть нормальный ф-ционал для такого.

Опять-же, ты используешь диалоговое окно, которое изначально подразумевает взаимодействие с пользователем. так может по этому, при отсутствии обработчиков взаимодействия получается вылет. Сделай окно на базе чего-то типа UIStatic, там может и без обработчиков будет все нормально.

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

Здравствуйте. Не знаю куда и писать.  Стоит call of chernobyl 1.5 r6, и имеется баг - в инвентаре у артефактов не отображается параметр "fire_wound_immunity", то есть пулестойкость. И по всей видимости, он и не учитывается при расчетах.  Подскажите, как это исправить? Только через изменения в движке?

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

@spirt17 а ты точно проверял что он не действует? Зайди в файл с параметрами артефактов и повысь его до предела, а затем побегай под пулями. Если будешь неуязвимым значит он действует, а проблема скорее всего в отображении параметра. Тогда надо искать файл отвечающий за отображение параметров в папке ui. Вообще у меня этот параметр fire_wound_immunity стоит на нуле и относить к иммунитету самого артефакта. Но у меня другая версия так-что...

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

Добрый день. Я начал разрабатывать мод для Зова Припяти и захотелось мне портировать инвентарь и HUD из аддона "Чистое небо". Но как это сделать? Какие файлы из ЧН надо портировать в ЗП? Как исправить баг с квадратной миникартой (то есть, текстура карты квадратная, а сама она круглая)? Как сделать так, чтобы в 1 первый слот можно будет брать только пистолеты, а во второй - все остальное? И если не сложно, то можно прикрепить файлы инвентаря и HUD из ЧН. Заранее спасибо!

Изменено пользователем wiegy
Небольшие ошибки
Добавлено  Опричник,

Перемещено.

Ссылка на комментарий
18.08.2022 в 01:58, spirt17 сказал:

в инвентаре у артефактов не отображается параметр "fire_wound_immunity

Насколько я помню в ЧН и ЗП этот параметр не учитывается, а берется коэффициент сопротивления костюма. Посмотрите как сделаны кевларовые пластины в COC и Anomaly и сделайте по аналогии.

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

Не соответствует. N6260

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

Здравствуйте.
Подскажите, пожалуйста, почему в биндере физических объектов (bind_physic_object) все callback'и устанавливаются в функции "update", а не, например, в "reinit"?
Это ошибка или какая-то военная хитрость?

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

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

Когда-то я тоже задался этим вопросом, и перенес установку коллбеков. Работать перестало, т.ч. я вернул все обратно. Подробнее разбираться не стал.

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

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

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

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

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

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

Войти

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

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

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