Overf1rst 1 496 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Тень Чернобыля. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 6 4 1 3 1 3 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
frankenshtayn 17 Опубликовано 21 ноября, 2021 6 минут назад, imcrazyhoudini сказал: Наоборот, в него должны стрелять, а так как все вокруг него - враги, то и игнорировать он должен всех. Значит я не понял вопрос, т.к. решил, что это он в кого-то стреляет))) 8 минут назад, imcrazyhoudini сказал: Всё там нормально. Озвучку только так проигрывать, в ремарке и не более того. Дай бог))) Но поставить 1 валк и 1 лук не составит труда, но Вам виднее) Дополнено 7 минуты спустя 1 час назад, frankenshtayn сказал: Это выше моего понимания) Даже не понимаю в какую сторону теперь копать... Отбой. Причина банальна, хотя неожиданная: в этой геймдате менялась геометрия одной локации, СДК ошибок кроме "инвалид-фейс" не показывал, скомпилировалась нормально, да и протестировал на этой локации практически всё и вот на тебе. При установке дефолтной level все сохранки грузятся, все в порядке. Пойду в другую тему 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xorda 2 Опубликовано 21 ноября, 2021 Как запретить использовать болт (или как сделать так, чтобы у игрока не было выбранного оружия, т.е. "нулевой" слот)? Для более точной картины скажу, что у игрока вообще нет оружий, кроме болта. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 230 Опубликовано 22 ноября, 2021 (изменено) Народ, выручайте Удалю пожалуй) Дополнено 4 минуты спустя xorda ты хочешь просто убрать оружие? Типо как в зонах, где убирается оружие? Попробуй так db.actor:hide_weapon() -- запретить оружие db.actor:restore_weapon() -- разрешить Изменено 22 ноября, 2021 пользователем ian98 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xorda 2 Опубликовано 22 ноября, 2021 (изменено) ian98 да, чтобы нельзя было любым оружием пользоваться (как в баре, только на продолжительное время и без рестрикторов). Однако, твой совет рабоатет, поэтому благодарю тебя!))) Мне нужно было также и при спавне игрока убирать все оружия, но болт не убирался. В общем я его сместил очень далеко по координатам и теперь никаких оружий не будет в игре!) Изменено 28 ноября, 2021 пользователем xorda Обновление. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 230 Опубликовано 22 ноября, 2021 (изменено) Народ, выручайте. Как можно обновить ассортимент у торговца скриптом? Сам я пробовал ковырять скрипт трейд менеджер. Вот эту функцию Спойлер function update(npc) local tt = trade_manager[npc:id()] if tt == nil then return end if tt.update_time ~= nil and tt.update_time < time_global() then return end tt.update_time = time_global() + 3600000 local str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.buy_condition) if tt.current_buy_condition ~= str then printf("TRADE [%s]: buy condition = %s", npc:name(), str) npc:buy_condition(tt.config, str) tt.current_buy_condition = str end str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.sell_condition) if tt.current_sell_condition ~= str then printf("TRADE [%s]: sell condition = %s", npc:name(), str) npc:sell_condition(tt.config, str) tt.current_sell_condition = str end if tt.buy_supplies == nil then return end str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.buy_supplies) if tt.current_buy_supplies ~= str then if tt.resuply_time ~= nil and tt.resuply_time < time_global() then return end printf("TRADE [%s]: buy_supplies = %s", npc:name(), str) npc:buy_supplies(tt.config, str) tt.current_buy_supplies = str tt.resuply_time = time_global() + 1*3600000 end end игрался там со значениями, но она, функция эта, как-будто и не работает вовсе. Просто я ставил там вместо 3600000 даже 1000 - ничего как-бы не меняется, а должно? В моем понимании вроде должно, но фиг знает. Изменено 22 ноября, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
frankenshtayn 17 Опубликовано 23 ноября, 2021 14 часов назад, ian98 сказал: эту (Показать контент) function update(npc) local tt = trade_manager[npc:id()] if tt == nil then return end if tt.update_time ~= nil and tt.update_time < time_global() then return end tt.update_time = time_global() + 3600000 local str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.buy_condition) if tt.current_buy_condition ~= str then printf("TRADE [%s]: buy condition = %s", npc:name(), str) npc:buy_condition(tt.config, str) tt.current_buy_condition = str end str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.sell_condition) if tt.current_sell_condition ~= str then printf("TRADE [%s]: sell condition = %s", npc:name(), str) npc:sell_condition(tt.config, str) tt.current_sell_condition = str end if tt.buy_supplies == nil then return end str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.buy_supplies) if tt.current_buy_supplies ~= str then if tt.resuply_time ~= nil and tt.resuply_time < time_global() then return end printf("TRADE [%s]: buy_supplies = %s", npc:name(), str) npc:buy_supplies(tt.config, str) tt.current_buy_supplies = str tt.resuply_time = time_global() + 1*3600000 end end Народ, выручайте. Как можно обновить ассортимент у торговца скриптом? Сам я пробовал ковырять скрипт трейд менеджер. Вот эту функцию игрался там со значениями, но она, функция эта, как-будто и не работает вовсе. Просто я ставил там вместо 3600000 даже 1000 - ничего как-бы не меняется, а должно? В моем понимании вроде должно, но фиг знает. Скриптом? Гм, не сталкивался, но процедура должна быть примерно такова: два-три файла ассортимента конкретного торговца, и скриптом подгружать выбранный файл. Нюанс, если я не ошибаюсь, заключается в том, что конфиги во время игры не поменяются, только после перезагрузки. И зачем весь этот гемморой? Не проще ли отредактировать ltx-файл? Файлы ассортимента торговцев обычно находятся по пути config/misk/trade_имя*торговца. Есали открыть (в "чистом" ТЧ) например бармена, то можно увидеть такие строки: buy_condition = barman_generic_buy sell_condition = {+yan_labx16_switcher_primary_off} barman_after_brain_sell, {+bar_darklab_document_done} barman_after_darkvalley_sell, barman_start_sell buy_supplies = {+yan_labx16_switcher_primary_off} supplies_after_brain, {+bar_darklab_document_done} supplies_after_darkvalley, supplies_start где buy_condition - основной раздел, что будет покупать торговец и разброс цен sell_condition - что будет покупать торговец и разброс цен, а так же условия перехода на другой раздел с другим ассортиментом (после получения инфо, торговля ведется из другого раздела с другим ассортиментом) buy_supplies - доступный ассортимент торговца, то есть то, что будет у него в продаже, сколько и вероятность появления. Не проще ли сделать так? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 230 Опубликовано 23 ноября, 2021 (изменено) frankenshtayn ассортимент быстро заканчивается. Я там уже все отредактировал как надо. Сейвлодом я перезагружу список товаров, да, но это не красиво. По красоте, чтобы ассортимент сам перезагружался, чтобы полки в принципе не могли пустовать. Я пробовал спавнить нужные предметы напрямую в инвентарь нпс, но ничего не получил. Возможно респавнил неправильно. Изменено 23 ноября, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 230 Опубликовано 24 ноября, 2021 ОГСР движок. Не знаю куда спрашивать, надеюсь сюда. В общем, по советам которые мне были даны еще месяцы назад, решил перенестись на этот движок. Все-таки он классный и все такое. Единственное что, а как перенести туда свои скрипты? Они не работают( Есть хоть что-то где почитать, как стартануть? Или может эта проблема не так глобальна и у меня крашить будет лишь некоторые рабочие на оригинальном движке функции? Как быть с этой? Спойлер local timeStep = math.random(1000,5000) -- как часто будет накладываться эффект(1000 = 1 секунда) local passedTime = 0 function update(deltaTime) passedTime = passedTime + deltaTime if (passedTime >= timeStep) then passedTime = 0 random_effects_irt() end end Вызывается из bind_stalker, который я взял из оригинала(может это неправильно) function actor_binder:update(delta) ... -- Чуть ниже апдейтора погоды. В общем вставлено там все правильно. В оригинале работает. actor_cond.update(delta) ... Игра даже не запускается. В логе пишет, что при попытке в актор конд выходит нил Спойлер https://imgur.com/a/LSY0uef https://imgur.com/a/PfNsFx8 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 24 ноября, 2021 3 часа назад, ian98 сказал: actor_cond.update(delta) этот скрипт вообще есть в папке scripts? Без синтаксических ошибок он? В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 230 Опубликовано 24 ноября, 2021 (изменено) vader_33 Ну конечно он есть в папке скриптс) Не настолько ж я прост, конечно я почти ничего не знаю, но не.. ладно. В общем, сейчас сделал( СЕЙЧАС ПРОВЕРИЛ ОРИГИНАЛ И ТОЖЕ НЕ РАБОТАЕТ. Косяк у меня, но я его в упор не вижу, уставший очень) В общем, помоги пожалуйста с консольными командами. Тут я точно не знаю как. Пробовал если что, наугад естественно, local console = get.console() console:execute("команда") Спойлер local timeStep = math.random(1000,5000) -- как часто будет накладываться эффект(1000 = 1 секунда) local passedTime = 0 function update(deltaTime) passedTime = passedTime + deltaTime if (passedTime >= timeStep) then passedTime = 0 random_effects_irt() end end -- Рандомные эффекты. function random_effects_irt() -- здесь выбирается случайный эффект if db.actor:alive() then db.actor.health = 0.03 end end Крашило меня, когда я пытался видимо вызывать консольную команду скриптом. Видно делал именно это неправильно, даже не буду писать как делал, просто спрошу как. Как?) Как можно скриптом вводить консольную команду? Я сюда поэтому и хочу переехать с оригинального движка. Понравился time_factor и ph_gravity, еще понравились блудмарки, лучи, коллизия вроде называется оружия в руках гг с геометрией, подправленное 3 лицо хоть немного и не довели пока до идеала, уверен что-нибудь еще понравилось - не суть. В общем, теперь хочу сюда, только бы узнать функцию для вызова консольной команды по скрипту и понять почему даже то, что в спойлере, хоть и не вылетает, но не работает. И вопрос, почему ролик вступительный начинается не сразу, а после загрузки уровня? Пока единственное, что подпортило впечатление. На неработающий стим оверлей глаза закрыл уже... Этот момент немного мазолит, привыкну конечно, просто почему именно такое решение интересно. Изменено 24 ноября, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 24 ноября, 2021 8 минут назад, ian98 сказал: СЕЙЧАС ПРОВЕРИЛ ОРИГИНАЛ И ТОЖЕ НЕ РАБОТАЕТ может синтаксическая ошибка, проверьте этой прогой https://disk.yandex.ru/d/PITCpyZ42pxHEA 10 минут назад, ian98 сказал: local console = get.console() get_console() А в выложеном куске кода что не работает? Не очень понял 14 минут назад, ian98 сказал: И вопрос, почему ролик вступительный начинается не сразу, а после загрузки уровня? насчет этого не знаю, в модах на огср, которые я играл, везде так было 1 В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
I am dead 1 182 Опубликовано 24 ноября, 2021 ian98 А как он должен воспроизводится? В момент загрузки локации? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 230 Опубликовано 24 ноября, 2021 (изменено) vader_33 Спойлер по первому, разобрался, там просто минус надо поставить. Не проверял, но очень уверен. Проверил, да этот минус... Я лечил гг, а ожидал По второму, так и делал же, опечатался как всегда конечно, но делал так function blabla() local console = get_console() console:execute("time_factor 2") end Тю, блин, все заработало теперь. Наверное я делал так, уже просто стерлась память function blabla() local console = get_console() local rnd = math.random(1,300/100) console:execute("time_factor rnd") end или так console:execute("time_factor = math.random(1,300/100)") В общем, с утра ситуация казалась безвыходной, а на деле какие-то пустяковые ошибки. Могу только извиниться, что побеспокоил тут всех. Все работает) Дополнено 0 минут спустя I am dead я имел ввиду, в оригинале последовательность событий ролик-геймплей, а тут геймплей-ролик-геймплей почему-то Изменено 24 ноября, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
I am dead 1 182 Опубликовано 24 ноября, 2021 ian98 Паузу после загрузки убери 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 230 Опубликовано 24 ноября, 2021 I am dead я понял. На нее и думал почему-то. в ЗП однако такой проблемы все равно не было. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 230 Опубликовано 25 ноября, 2021 Не подскажите по огсру все-таки? В оригинале дез менеджер у меня был модифицирован, таким образом Спойлер local active_item = npc:active_item() local id = item:id() if isWeapon(item) then local timer = time_global() + 1000 local function check_timer() return time_global() > timer end local function release_item() alife():release(alife():object(id), true) end level.add_call(check_timer, release_item) end Все работало. После смерти у нпс удалялись стволы, так мне и хотелось бы, но вылет ? В логе мне пишет, что проблема именно в этом, вроде бы alife():release(alife():object(id), true) Пишет что-то про object, ну а как его правильно оформить это блин для меня загадка. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 110 Опубликовано 25 ноября, 2021 У меня есть скриптовая полоска пси-хп. При скрине через демо рекорд она не убирается, как исправить? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
nasar75 134 Опубликовано 25 ноября, 2021 imcrazyhoudini клавиши + - на цифровой клавиатуре убирают худ... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 110 Опубликовано 25 ноября, 2021 nasar75 знаю, но я не об этом ведь. Чтобы полоска в демо рекорде убиралась как и весь интерфейс, без всего прочего. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Кефир 768 Опубликовано 25 ноября, 2021 Есть ли в данной части .xml-файл для редактирования сеток прицелов? Мне бы пригодилось, т.к. я так и не понял как работают прицелы. Спойлер Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 924 Опубликовано 25 ноября, 2021 KERIXFIX337X У большинства модов на ТЧ были аддоны, которые правили прицелы под соотношение монитора игрока. Скачай, посмотри. 1 Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 25 ноября, 2021 (изменено) ian98 весь скрипт выложите. И выкладывайте нормальный лог, а не "Пишет что-то про object" Изменено 25 ноября, 2021 пользователем vader_33 1 В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Manool 128 Опубликовано 25 ноября, 2021 ian98 8 часов назад, ian98 сказал: alife():release(alife():object(id), true) Вместо этого лучше так - local sobj = alife():object(id) if sobj then alife():release(sobj, true) end С логом было бы понятнее. 1 Объединённый Пак OGSR Engine Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 230 Опубликовано 25 ноября, 2021 vader_33 Manool вот такой лог, не всегда крашит так, скрипт срабатывает иногда без проблем, но очень редко. Так что можно сказать, блин, всегда крашит. Спойлер [25.11.21 18:19:45.391] !! [CGameObject::lua_game_object] you are trying to use a destroyed object [7f78d678] [25.11.21 18:19:45.391] !! [CScriptGameObject::object] You are trying to use a destroyed object [7f78d678] [25.11.21 18:19:45.391] FATAL ERROR [error]Expression : assertion failed [error]Function : CALifeSimulator__release [error]File : d:\a\ogsr-engine\ogsr-engine\ogsr_engine\xrgame\alife_simulator_script.cpp [error]Line : 278 [error]Description : object [25.11.21 18:19:45.391] ***************************[ScriptCrashHandler]********************************** [25.11.21 18:19:45.391] stack traceback: [C]: in function 'release' ...hadow of chernobyl\gamedata\scripts\death_manager.script:178: in function <...hadow of chernobyl\gamedata\scripts\death_manager.script:177> [25.11.21 18:19:45.391] Locals: [25.11.21 18:19:45.391] userdata (*temporary) : (alife_simulator): 000002A344F7C9E0 [25.11.21 18:19:45.391] nil (*temporary) : [not available] [25.11.21 18:19:45.391] boolean (*temporary) : true [25.11.21 18:19:45.391] End [25.11.21 18:19:45.391] Locals: [25.11.21 18:19:45.391] End [25.11.21 18:19:45.391] ********************************************************************************* [25.11.21 18:19:45.391] ******************************************************************************** [25.11.21 18:19:45.391] !![LogStackTrace] Thread: [X-RAY Primary thread] [25.11.21 18:20:06.484] !!stack trace: К слову, я не пытаюсь использовать удаляемые предметы, а просто убиваю нпс. В оригинале я вообще мог залутать пистолет из трупа, а он уже с моего инвентаря удалялся, опять же к слову. Этим же скриптом все. Сам скрипт в закрепе. Это дез менеджер под аи адикшн, не из чистого тч. death_manager.script Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
I am dead 1 182 Опубликовано 25 ноября, 2021 (изменено) ian98 Тебе выше @Manool подсказал что нужно делать проверку что объект существует. Если хочешь удалить любой ствол что попадает тебе в рюкзак то можешь сделать как то так: Спойлер function on_item_to_ruck( obj ) if not( string.find( obj:section(), "wpn_" ) ) then return end -- тут идет проверка что в рюкзак попал айтем id которого начинается на wpn_ local release_item = obj:section() alife():release(alife():object(db.actor:object(release_item):id())) end Изменено 25 ноября, 2021 пользователем I am dead 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты