Overf1rst 1 499 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 19 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 926 Опубликовано 25 октября, 2021 Прописал в логику =disable_anomaly(toz_camp) для костра со стори айди, в СДК у костра стори айди прописан: Но ловлю вылет: FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ...r call of pripyat\gamedata\scripts\xr_effects.script:2130: attempt to index local 'obj' (a nil value) stack trace: Вроде как жалуется, что не может найти объект с таким айди, но он же прописан. Что я делаю не так? Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Contentic 11 Опубликовано 25 октября, 2021 mortan лог закрепил в спойлер, помоги пожалуйста, до определенного момента этого вылета не было. Копался только в конфигах и скриптах. Спойлер * Detected CPU: Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz [GenuineIntel], F6/M14/S10, 2808.00 mhz, 26-clk 'rdtsc' * CPU features: RDTSC, MMX, 3DNowExt!, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, HTT * CPU cores/threads: 6/6 Initializing File System... using fs-ltx fsgame.ltx FS: 63541 files cached 44 archives, 9630Kb memory used. Init FileSystem 1.486414 sec 'xrCore' build 7090, Jul 5 2018 EH: D8524A36AF9B3F32084FDA4649221CFA -----loading c:\program files (x86)\dead air\gamedata\configs\system.ltx -----loading c:\program files (x86)\dead air\gamedata\configs\system.ltx Initializing Engine... Starting INPUT device... Loading DLL: xrRender_R2.dll Loading DLL: xrRender_R3.dll refCount:m_pAdapter 1 Loading DLL: xrRender_R4.dll command line -dbgdev -no_staging Executing config-script "user.ltx"... [appdata\user.ltx] successfully loaded. Loading DLL: xrRender_R2.dll Loading DLL: xrGame.dll * [win32]: free[4036400 K], reserved[60396 K], committed[97444 K] * [ D3D ]: textures[0 K] * [x-ray]: process heap[27089 K], game lua[0 K], render[0 K] * [x-ray]: economy: strings[21896 K], smem[0 K] SOUND: OpenAL: enumerate devices... SOUND: OpenAL: EnumerationExtension Present dir[0]=C:\Program Files (x86)\Dead Air\ dir[1]=C:\Program Files (x86)\Dead Air\ dir[2]=C:\Program Files (x86)\Dead Air\ dir[3]=C:\WINDOWS\system32\ CleanDeviceSpecifierList CleanDeviceSpecifierList DirectSound Software devices Generic Software SOUND: OpenAL: system default SndDevice name is DirectSound3D SOUND: OpenAL: All available devices: 1. Generic Software, Spec Version 1.1 eax[2] efx[no] xram[no] Executing config-script "c:\program files (x86)\dead air\gamedata\configs\default_controls.ltx"... [c:\program files (x86)\dead air\gamedata\configs\default_controls.ltx] successfully loaded. Executing config-script "user.ltx"... Executing config-script "c:\program files (x86)\dead air\gamedata\configs\rspec_extreme.ltx"... ~ Invalid syntax in call to 'r2_sun_quality' ~ Valid arguments: st_opt_low/st_opt_medium/st_opt_high [c:\program files (x86)\dead air\gamedata\configs\rspec_extreme.ltx] successfully loaded. Executing config-script "c:\program files (x86)\dead air\gamedata\configs\default_controls.ltx"... [c:\program files (x86)\dead air\gamedata\configs\default_controls.ltx] successfully loaded. ~ Invalid syntax in call to 'sv_adm_menu_ban_time' ~ Valid arguments: ui_mp_am_10_minutes/ui_mp_am_30_minutes/ui_mp_am_1_hour/ui_mp_am_6_hours/ui_mp_am_1_day/ui_mp_am_1_week/ui_mp_am_1_month/ui_mp_am_3_monthes/ui_mp_am_forever [appdata\user.ltx] successfully loaded. SOUND: Selected device is Generic Software * sound: EAX 2.0 extension: present * sound: EAX 2.0 deferred: present * sound : cache: 65537 kb, 4856 lines, 13820 bpl Starting RENDER device... * GPU [vendor:10DE]-[device:1B80]: NVIDIA GeForce GTX 1080 * GPU driver: 30.0.14.7168 * CREATE: DeviceREF: 1 * Vertex Processor: PURE HARDWARE * Texture memory: 4081 M * DDI-level: 9.0 * GPU shading: vs(fffe0300/3.0/30), ps(ffff0300/3.0/30) * GPU vertex cache: unrecognized, 16 * NVidia MGPU: Logical(1), Physical(1) * Starting rendering as 2-GPU. * DVB created: 1536K * DIB created: 512K ! Renderer doesn't support blender 'effects\shadow_world' ! Version conflict in shader 'models\helicopter' ! Version conflict in shader 'models\lightplanesself' ! Version conflict in shader 'models\model_puh' ! Version conflict in shader 'models\model_refl' ! Version conflict in shader 'models\xbrainglass' ! Version conflict in shader 'models\xdistortcolorlinv' ! Version conflict in shader 'models\xglass' ! Version conflict in shader 'models\xglass2' ! Version conflict in shader 'models\xlens' stack trace: 0023:00B589B4 xrCore.dll, IReaderBase<IReader>::find_chunk() 0023:061633EB xrRender_R2.dll 0023:061BD156 xrRender_R2.dll Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Ekagors 186 Опубликовано 25 октября, 2021 (изменено) AziatkaVictor , в ЗП регистрация стори айди объектам читается из под скриптов. Обычно регистрация производится внутри скриптовых серверных классов. У костра нет. Если правильно помню, даже скриптового варианта серверного класса нет. Пиши его и добавь чтение и регистрацию айдишника, тут все просто по аналогии. p.s. Но никто не запрещает регать и из под биндера на пример или откуда-то еще. (пригодится может. Т.К. Не все до экспортировано в луа.) Изменено 25 октября, 2021 пользователем Ekagors Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 926 Опубликовано 25 октября, 2021 Ekagors а можно подробнее пожалуйста? Если честно, я не понял что конкретно нужно делать, точнее где и что писать. Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Ekagors 186 Опубликовано 25 октября, 2021 (изменено) AziatkaVictor , осуществляется все в скрипте story_objects.script, вызовом check_spawn_ini_for_story_id(sObj) то есть story_objects.check_spawn_ini_for_story_id(sObj) Где sObj - серверный объект. И все. Рега закончена. Читает из секции конфига и из кастюм даты, проверяет есть ли стори айди, то регает. Пример (вырезка из ПЫС скрипта кусок скриптового серверного класса брони): Спойлер function se_outfit:on_register() cse_alife_item_custom_outfit.on_register( self ) -- Проверяем кастомдату обьекта на наличие стори айди. story_objects.check_spawn_ini_for_story_id(self) --// Вот и оно, это чудо. -- Собираем статистику по предметам. if registred_items[self:section_name()] == nil then registred_items[self:section_name()] = 1 else registred_items[self:section_name()] = registred_items[self:section_name()] + 1 end self.secret_item = treasure_manager.get_treasure_manager():register_item(self) end P.S. Необязательно регать там. Но ПЫС регают там. p.s.s По скриптовым серверным классам: Как, что и где связано разберешься сам. Интуитивно понятно, а если нет, то гайдов нет, есть описания по работе с скриптовыми серверными классами, на АМК точно помню было, они даже ценней. Изменено 25 октября, 2021 пользователем Ekagors Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
makdm 672 Опубликовано 25 октября, 2021 9 часов назад, AziatkaVictor сказал: Прописал в логику =disable_anomaly(toz_camp) для костра со стори айди, Так попробуй. Работать будет только на DX10 function disable_campfire(actor, npc, p) local obj = get_story_object(p[1]) if obj then local campfire = obj:get_campfire() campfire:turn_off() end end Терпение... И все получится. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Ekagors 186 Опубликовано 25 октября, 2021 (изменено) makdm , у него вылет не жалуется, что метод неподходящий, он жалуется на отсутствие obj. 11 часов назад, AziatkaVictor сказал: xr_effects.script:2130: attempt to index local 'obj' (a nil value) А если просто открыть эффектс и посмотреть: Спойлер function disable_anomaly(actor, npc, p) if p[1] == nil then abort("Story id for disable_anomaly function is not set") end local obj = get_story_object(p[1]) --Тут читаем по стори ид. if not obj then abort("There is no object with story_id %s for disable_anomaly function", tostring(p[1])) end obj:disable_anomaly() end Раз его нет. Он не зареган, не зареган он может быть только по четырем причинам: 1. Он не прописан нигде или прописан неправильно. 2. Регистрация происходит слишком поздно. 3. Регистрации вообще не осуществляется для данного объекта. 4. Сбой, неправильная работа скриптов, ввиду какой-то ошибки. Но у нас, первое, он прописан. Второе, это вряд ли, такое могло быть при имениях существующих скриптов или добавлении своего кода с ошибками. Третье, на лицо оно. К тому же я не помню, чтобы у костров был скриптовый серверный класс и даже если есть, на пример точно помню, что у тех же визуальных зон не прописана рега стори айди (жгучий-пух). Четвертый пункт, маловероятен в нашем случае. Изменено 25 октября, 2021 пользователем Ekagors Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 926 Опубликовано 25 октября, 2021 Ekagors то есть, я не могу отключить его, так как ему просто не присваивается айдишник? Но как тогда его отключают, если присвоить специальное имя смарт тиррейна? Когда там нету ни одного НПС, то костры отключаются. Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Ekagors 186 Опубликовано 25 октября, 2021 (изменено) AziatkaVictor , а кто запрещает отключать? Ты в ручную оффаешь, через ф-ию которая дает тебе объекты из таблицы по их стори айди. То есть, у тебя есть ф-ия disable_anomaly в xr_effects, которую ты вызываешь из под логики. Что внутри нее: Спойлер function disable_anomaly(actor, npc, p) if p[1] == nil then abort("Story id for disable_anomaly function is not set") end local obj = get_story_object(p[1]) if not obj then abort("There is no object with story_id %s for disable_anomaly function", tostring(p[1])) end obj:disable_anomaly() end Видишь же, что она объект получает передавая тобой переданный аргумент в get_story_object. get_story_object в свою же очередь, это ф-ия которая прописана в _g.script: Спойлер function get_story_object(story_obj_id) local obj_id = story_objects.get_story_objects_registry():get(story_obj_id) if obj_id == nil then return nil end return (db.storage[obj_id] and db.storage[obj_id].object) or (level ~= nil and level.object_by_id(obj_id)) end Которая взывает как раз таки таблицу внутри класса из скрипта story_objects , где зареганы (записаны в таблицу) айдишники. По принципу {[name_sid]=id,[name_sid_arbuz]=id,[rad_pm]=id и т.д.}. Получив этот айди, по айди дает тебе объект либо из стора (таблица, которая уже заполняется из под биндеров), либо через двигло с помощью level.object_by_id. Расписал, немного. Чтобы было понятно. Что там свой механизм и отключается там в скриптах имея объект. У тебя же случай, где ты хочешь получить объект и провести с ним операцию. Получить по выше описному. Но его просто там нет. Его нет в табле стори айдишников. Он не "зареган". Следовательно нет ID, следовательно объекта никак не получить. Изменено 25 октября, 2021 пользователем Ekagors Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Arkada 428 Опубликовано 25 октября, 2021 (изменено) AziatkaVictor попробуй заменить obj = alife():object(p[1]) --здесь НАЗВАНИЕ В СДК аномалии if obj ~= nil then ... должно сработать Изменено 25 октября, 2021 пользователем liner Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
mortan 294 Опубликовано 25 октября, 2021 Contentic увы, в логе ничего интересного кроме жалоб на шейдеры нету, так что совет остаётся тем же, плюс еще можно попробовать шейдерный кэщ почистить, он находится в shader_cache рядом с сохранениями. Вполне возможно что настоящая причина вылета в лог не попадает. 1 Boomsticks & Sharpsticks: https://discord.gg/vThnFWrbaA Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Ekagors 186 Опубликовано 25 октября, 2021 (изменено) 2 часа назад, liner сказал: попробуй заменить obj = alife():object(p[1]) --здесь НАЗВАНИЕ В СДК аномалии if obj ~= nil then ... В чистом ЗП нет метода на получение серверного объекта по его имени. Только по ID.(В ЧН и ТЧ есть. В ЗП вырезан.) Спойлер Конечно, никто не запрещает сделать вот такую страшную хитрость: Спойлер local obj for i=1,65534 do if level.object_by_id(i) and alife():object(i):name() == p[1] then obj = level.object_by_id(i) break end end НО ДАВАЙТЕ БУДЕМ ПРОТИВ КОСТЫЛЕЙ, КОГДА ИХ МОЖНО НЕ ДЕЛАТЬ! Изменено 25 октября, 2021 пользователем Ekagors Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Kalambur 25 Опубликовано 26 октября, 2021 (изменено) intro_start game_loaded * MEMORY USAGE: 413727 K * End of synchronization A[1] R[1] intro_delete ::update_game_loaded weather= atmosfear_clear compiling shader shadow_direct_model_aref_2 FATAL ERROR [error]Expression : no_assert [error]Function : CIni_IdToIndex<1,struct COMMUNITY_DATA,class shared_str,int,class CHARACTER_COMMUNITY>::GetById [error]File : d:\projects\x-ray_callofchernobyl-master\src\xrgame\ini_id_loader.h [error]Line : 134 [error]Description : item not found, id [error]Arguments : stack trace: 0023:00563C43 xrCore.dll, xrDebug::fail() 0023:05399863 xrGame.dll, CDialogHolder::UseIndicators() Подскажите пожалуйста, что 3а вылет такой и как лечить ? Это при убийстве сталкера зомбированого ! Изменено 26 октября, 2021 пользователем Kalambur Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xrLil Batya 731 Опубликовано 26 октября, 2021 Kalambur зачем посылать одно и тоже сообщение в две темы? бывший модоел Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Policai 1 323 Опубликовано 26 октября, 2021 Kalambur Зачем вообще с КОКом лезть в тему по ЗП, не различаете разницу??? Группа мода в VK Мод делался и тестировался на железе i5-11400, 32Гб ОЗУ, Radeon RX580 Разрешение 2560 х 1440. ВСЕ на максималке Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 26 октября, 2021 Kalambur Чел не туда пишешь. Поподробнее распиши про вылет. Зомби симуляционный или уникальный? Вылет стабильный или нестабильный? 1 Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Arkada 428 Опубликовано 26 октября, 2021 (изменено) удалено Изменено 26 октября, 2021 пользователем liner Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Paradox27kms 15 Опубликовано 28 октября, 2021 Как отобразить в GUI например списком содержимое рюкзака ГГ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 28 октября, 2021 Paradox27kms перебор инвентаря - db.actor:iterate_inventory(функция, obj) function функция (actor, item) ...здесь добавляете в список или в таблицу что надо от item ... end. Пример составления списка можно посмотреть в файле ui_load_dialog.script В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Paradox27kms 15 Опубликовано 29 октября, 2021 (изменено) vader_33 Ну вот я например взял скрипт на проверку содержимого определенного оружия в инвентаре (пример проверка на оружие у бандита Валета) и нужно чтобы оружие отображалось в списке уже в listbox gui. (сам список то я реализовал) т.е нужно как-то прикрутить скрипт к списку. Изменено 29 октября, 2021 пользователем Paradox27kms Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 29 октября, 2021 Paradox27kms ui_load_dialog.script смотрите, там всё есть. Функция FillList, там уже поиском по файлу AddItemToList и остальное всё найдёте, как там добавлять в список В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Paradox27kms 15 Опубликовано 29 октября, 2021 (изменено) 1 час назад, vader_33 сказал: Paradox27kms ui_load_dialog.script смотрите, там всё есть. Функция FillList, там уже поиском по файлу AddItemToList и остальное всё найдёте, как там добавлять в список local weapons_table = { "wpn_ak74", "wpn_ak74u", } function ui_mm_mod:FillListShop() local tbl local name self.list_shop:Clear() tbl = weapons_table -- список предметов (оружия) отображаемого в списке listbox for i, v in ipairs(tbl) do name = game.translate_string(system_ini():r_string(v, "inv_name")) self:AddItemToListShop(name, v) end end P.S нужно сделать так чтобы отображалось только то оружие которое есть в таблице weapons_table и в слоте для оружия, те должно получиться так что если данного оружия в слоте нет то оно и не будет отображаться списке weapons_table вот подобный скрипт на проверку оружия в слоте 2 и 3 Спойлер for k,v in pairs(weapons_table) do if db.actor:item_in_slot(2)~= nil and db.actor:item_in_slot(2):section() == v then return true elseif db.actor:item_in_slot(3)~= nil and db.actor:item_in_slot(3):section() == v then return true end end return false end Но нужно это как-то к списку прикрутить. Скорее всего я так думаю должно получиться что-то типо этого только рабочий вариант Спойлер function ui_mm_mod:FillListInv() local tbl local name self.list_inv:Clear() tbl = inv_table for i, v in ipairs(tbl) do name = game.translate_string(system_ini():r_string(v, "inv_name")) self:AddItemToListInv(name, v) if db.actor:item_in_slot(2)~= nil and db.actor:item_in_slot(2):section() == v then return true elseif db.actor:item_in_slot(3)~= nil and db.actor:item_in_slot(3):section() == v then return true end end return false end Изменено 29 октября, 2021 пользователем Paradox27kms Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 29 октября, 2021 Paradox27kms вот так сразу надо, а не ходить вокруг да около. Зачем tbl = inv_table? Спойлер function ui_mm_mod:FillListInv() local tbl local name self.list_inv:Clear() tbl = inv_table for i, v in ipairs(tbl) do name = game.translate_string(system_ini():r_string(v, "inv_name")) if (db.actor:item_in_slot(2)~= nil and db.actor:item_in_slot(2):section() == v) or ( db.actor:item_in_slot(3)~= nil and db.actor:item_in_slot(3):section() == v) then self:AddItemToListInv(name, v) end end end 1 В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Paradox27kms 15 Опубликовано 29 октября, 2021 (изменено) 7 минут назад, vader_33 сказал: Paradox27kms вот так сразу надо, а не ходить вокруг да около. Зачем tbl = inv_table? Показать контент function ui_mm_mod:FillListInv() local tbl local name self.list_inv:Clear() tbl = inv_table for i, v in ipairs(tbl) do name = game.translate_string(system_ini():r_string(v, "inv_name")) if (db.actor:item_in_slot(2)~= nil and db.actor:item_in_slot(2):section() == v) or ( db.actor:item_in_slot(3)~= nil and db.actor:item_in_slot(3):section() == v) then self:AddItemToListInv(name, v) end end end Большое спасибо. А как реализовать чтобы при клике на предмете в списке активировалась функция? p.s я к сожалению знаю только как так сделать в компоненте выпадающий список (combo_box) но мне нужно с простым списком list_box Изменено 29 октября, 2021 пользователем Paradox27kms Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 29 октября, 2021 Всем привет. Столкнулся с такой проблемой, с которой ранее не сталкивался. Недавно у меня получилось сделать симуляцию жизни на локации, ну там, чтобы неписи по гулагам ходили, отдыхали на них. А также перестрелки между отрядами сталкеров и мутантов. Вот в чём заключается проблема, все мобы и нпс - тупые и слепые. Даже на мастере мутантам меня сложно убить. У меня на локе только кровососы и собаки, собаки не могут укусить, а кровосос не бьется и даже не присасывает камеру. А нпс даже при полном счетчике палива стоят секунд 10, а потом стреляют, но по инвалидному при чём на мастере. Дополнено 0 минут спустя Я и понятия не имею, почему они так тупят. Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты