Overf1rst 1 503 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Чистое Небо. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 4 3 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 9 марта, 2023 (изменено) imcrazyhoudini в файле atmmain.script где if obj:section() == "sleepingbag" then в самом конце назначается ui_sleep_init = true даже если перед этим условие пройдет на false. Можно не с update() открывать окно спальника, а сразу же в on_item_drop(obj), лучше не забивать апдейт хламом. Лучше туда перенести. От точек с запятой проблем нету? Первый раз вижу чтобы их ставили Изменено 9 марта, 2023 пользователем N42 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 9 марта, 2023 (изменено) N42 вот сижу втыкаю над этим скриптом, тут дерьма просто ТЬМА, я вообще не понимаю нахрена оно нужно 18 минут назад, N42 сказал: ui_sleep_init = true а вот куда его пихать в таком случае? Дополнено 1 минуту спустя довёл скрипт до такого состояния, выбросил с апдейта перевёл на on_use Спойлер local ui_sleep_init = false; function update(obj) -- юзаем рюкзак if obj:section() == "sleepingbag" then local ui_sleep_init = true local actor = db.actor for id, v in pairs(db.storage) do local object = level.object_by_id(id) -- проверка на то, есть ли враги, и если они нас видят то выдаём сообщение и запрещаем спать (ui_sleep_init = false) if object ~= nil then if (IsStalker(object) and object:relation(actor) == game_object.enemy) or IsMonster(object) then if object:position():distance_to(actor:position()) < ENEMY_RADIUS and object:see(actor) then news_manager.send_tip(actor, "sleep_warning_enemy", nil, "default", 5000) ui_sleep_init = false break end end end end -- проверка на то, есть ли у гг радиация и если есть то выдаём сообщение и запрещаем спать (ui_sleep_init = false) if actor.radiation > 0 and ui_sleep_init then news_manager.send_tip(actor, "sleep_warning_radiation", nil, "default", 5000) ui_sleep_init = false end -- проверка на то, есть ли у гг голод и если есть то выдаём сообщение и запрещаем спать (ui_sleep_init = false) if actor.satiety < 0.5 and ui_sleep_init then news_manager.send_tip(actor, "satiety_warning_radiation", nil, "default", 5000) ui_sleep_init = false end -- открытие окна сна level.start_stop_menu(atmsleep.UISleep(), true); end end понимаю что всё портит -- открытие окна сна level.start_stop_menu(atmsleep.UISleep(), true); а куда его впихнуть хз Изменено 9 марта, 2023 пользователем imcrazyhoudini Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 9 марта, 2023 imcrazyhoudini в самом начале оставь local ui_sleep_init = true, а к level.start_stop_menu добавь условие if ui_sleep_init == true then level.start_stop_menu(atmsleep.UISleep(), true) end 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 9 марта, 2023 (изменено) N42 ты уже внештатный разработчик моего мода так сказать слушай, а как можно остановить сон если гг голоден? впихнул на апдейт такое: if db.actor.satiety < 0.70 and ui_sleep_init == true then news_manager.send_tip(actor, "satiety_sleep", nil, "default", 5000) atmsleep.sleep_stop() end не помогает Изменено 10 марта, 2023 пользователем imcrazyhoudini Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 10 марта, 2023 (изменено) imcrazyhoudini это где на апдейте? В atmsleep.script в update() тоже не работает? Где условие на здоровье Изменено 10 марта, 2023 пользователем N42 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 10 марта, 2023 N42 11 минут назад, N42 сказал: В atmsleep.script в update() тоже не работает? это я повесил на on_use в биндере, зачем ему на апдейте висеть... 11 минут назад, N42 сказал: это где на апдейте? в биндере на апдейте Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 10 марта, 2023 (изменено) 24 минуты назад, imcrazyhoudini сказал: зачем ему на апдейте висеть Ну, мало ли кто-нибудь во сне все-таки прибежит стрелять, 15 м небольшая дистанция. Тем более + проверка на видимость, если не видит актора, может быть еще ближе. Само сообщение приходит? Изменено 10 марта, 2023 пользователем N42 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 10 марта, 2023 N42 конструкция в atmmain.script (проверка плюс запуск окна) которая висит в bind_stalker на use_object работает: Спойлер function update(obj) -- юзаем рюкзак if obj:section() == "sleepingbag" then local ui_sleep_init = true local actor = db.actor for id, v in pairs(db.storage) do local object = level.object_by_id(id) -- проверка на то, есть ли враги, и если они нас видят то выдаём сообщение и запрещаем спать (ui_sleep_init = false) if object ~= nil then if (IsStalker(object) and object:relation(actor) == game_object.enemy) or IsMonster(object) then if object:position():distance_to(actor:position()) < ENEMY_RADIUS and object:see(actor) then news_manager.send_tip(actor, "sleep_warning_enemy", nil, "default", 5000) ui_sleep_init = false break end end end end -- проверка на то, есть ли у гг радиация и если есть то выдаём сообщение и запрещаем спать (ui_sleep_init = false) if actor.radiation > 0 and ui_sleep_init then news_manager.send_tip(actor, "sleep_warning_radiation", nil, "default", 5000) ui_sleep_init = false end -- проверка на то, есть ли у гг голод и если есть то выдаём сообщение и запрещаем спать (ui_sleep_init = false) if actor.satiety < 0.70 and ui_sleep_init then news_manager.send_tip(actor, "sleep_warning_satiety", nil, "default", 5000) ui_sleep_init = false end if ui_sleep_init == true then level.start_stop_menu(atmsleep.UISleep(), true) end end end проверка в bind_stalker - update на то, если гг проголодался и прерываем на сон - не работает совсем Спойлер if db.actor.satiety < 0.70 and ui_sleep_init == true then news_manager.send_tip(actor, "satiety_sleep", nil, "default", 5000) atmsleep.sleep_stop() end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 10 марта, 2023 (изменено) imcrazyhoudini как в бинд сталкере назначается переменная ui_sleep_init? Дополнено 1 минуту спустя imcrazyhoudini этот код с условиями и выводом окна в отдельном скрипте или сразу в биндсталкере? Обозначена ли глобально ui_sleep_init или только local ui_sleep_init? Чтобы использовать ui_sleep_init в другом скрипте, должно быть без local и за пределами функций Изменено 10 марта, 2023 пользователем N42 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 10 марта, 2023 2 минуты назад, N42 сказал: как в бинд сталкере назначается переменная ui_sleep_init? а зачем её обозначать, или нужно? я сразу же ведь написал ui_sleep_init == true или нужно было? 2 минуты назад, N42 сказал: только local ui_sleep_init? локально в atmmain.script 2 минуты назад, N42 сказал: отдельном скрипте отдельно Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 10 марта, 2023 (изменено) 11 минут назад, imcrazyhoudini сказал: а зачем её обозначать, или нужно? я сразу же ведь написал ui_sleep_init == true Другой скрипт не знает про эту переменную, для него она не будет существовать. local что-то, если находится внутри функции, существует только для этой функции. Если local что-то находится, например, в начале файла скрипта, то она существует только для файла. Это локальная переменная. Чтобы читать ее из других файлов, нужно ее обозначать как глобальную переменную. Перенеси ui_sleep_init = true без local в начало atmmain и в апдейте в условии поменяй на if db.actor.satiety < 0.70 and atmmain.ui_sleep_init == true then Дополнено 2 минуты спустя Но не лучше будет перенести в atmsleep.script в апдейт, удобнее когда все, что относится к чему-то определенному, было в одном месте. И не надо будет захламляться глобальными переменными Изменено 10 марта, 2023 пользователем N42 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 10 марта, 2023 N42 atmmain.script, начало Спойлер local ui_sleep_init = false; local sleepingbag_id = nil; ui_sleep_init = true bind_stalker.script Спойлер if db.actor.satiety < 0.70 and atmmain.ui_sleep_init == true then news_manager.send_tip(actor, "satiety_sleep", nil, "default", 5000) atmsleep.sleep_stop() end не помогло bind_stalker.script atmmain.script Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 10 марта, 2023 (изменено) local ui_sleep_init = false; убери в начале Дополнено 1 минуту спустя И с update(obj) убери local ui_sleep_init = true Изменено 10 марта, 2023 пользователем N42 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 10 марта, 2023 N42 работает, но: - бесконечно сыпит сообщениями что ГГ хочет есть + гг не до конца поднимается (ppe эффект или какой там правильно доигрывается лишь когда ГГ поест); - если проверка на сытость/врагов/радиации не прошла последующие открытия рюкзака не принесут никакого эффекта Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 10 марта, 2023 (изменено) imcrazyhoudini тогда проще не использовать эту проверку в биндсталкере, а все-таки использовать уже готовый апдейт в atmsleep.script (там и проверка есть именно на момент сна), чем переделывать ui_sleep_init и условия Дополнено 3 минуты спустя В 08.03.2023 в 11:32, imcrazyhoudini сказал: Как можно вызвать скриптовый выброс? (не оригинальный) Менялось небо, можно было задать сколько выброс будет идти по времени. Плюс чтобы можно было создать зону в которой игрок не будет получать урон Типа просто сменить погоду, добавить тряску и хит по гг с проверкой на нахождение в рестрикторе? Скриптовые выбросы вроде только оригинальный вызывают Изменено 10 марта, 2023 пользователем N42 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 10 марта, 2023 19 минут назад, N42 сказал: а все-таки использовать уже готовый апдейт в atmsleep.script но там ведь нет остановки сна, не так ли? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 10 марта, 2023 (изменено) imcrazyhoudini так она в этом же скрипте, и с проверки на здоровье вызывается Изменено 10 марта, 2023 пользователем N42 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 10 марта, 2023 N42 по-моему в atmmain.script нет ничего связанного со здоровьем: Спойлер ---------------------------------------------------- -- file : atmmain -- copyright (c) 2009 Atempad (atem.pad@mail.ru) ----------------------------------------------------- local sleepingbag_id = nil; ui_sleep_init = true ---------------------------------------------------------------------------------- -- Func: Print in log file. ---------------------------------------------------------------------------------- function prnt(msg) end ---------------------------------------------------------------------------------- -- Func: Callback on the load game. ---------------------------------------------------------------------------------- function on_game_load() end ---------------------------------------------------------------------------------- -- Func: Callback on the game end. ---------------------------------------------------------------------------------- function on_actor_destroy() end ---------------------------------------------------------------------------------- -- Func: Callback on the take of item. ---------------------------------------------------------------------------------- function on_item_take(obj) end ---------------------------------------------------------------------------------- -- Func: Callback on the loss of item. ---------------------------------------------------------------------------------- local ENEMY_RADIUS = 15 -- радиус врагов function on_item_drop(obj) end ---------------------------------------------------------------------------------- -- Func: Update of actor. ---------------------------------------------------------------------------------- function update(obj) -- юзаем рюкзак if obj:section() == "sleepingbag" then local actor = db.actor for id, v in pairs(db.storage) do local object = level.object_by_id(id) -- проверка на то, есть ли враги, и если они нас видят то выдаём сообщение и запрещаем спать (ui_sleep_init = false) if object ~= nil then if (IsStalker(object) and object:relation(actor) == game_object.enemy) or IsMonster(object) then if object:position():distance_to(actor:position()) < ENEMY_RADIUS and object:see(actor) then news_manager.send_tip(actor, "sleep_warning_enemy", nil, "default", 5000) ui_sleep_init = false break end end end end -- проверка на то, есть ли у гг радиация и если есть то выдаём сообщение и запрещаем спать (ui_sleep_init = false) if actor.radiation > 0 and ui_sleep_init then news_manager.send_tip(actor, "sleep_warning_radiation", nil, "default", 5000) ui_sleep_init = false end -- проверка на то, есть ли у гг голод и если есть то выдаём сообщение и запрещаем спать (ui_sleep_init = false) if actor.satiety < 0.70 and ui_sleep_init then news_manager.send_tip(actor, "sleep_warning_satiety", nil, "default", 5000) ui_sleep_init = false end if ui_sleep_init == true then level.start_stop_menu(atmsleep.UISleep(), true) end end end ---------------------------------------------------------------------------------- -- Func: Save a value in a storage. ---------------------------------------------------------------------------------- function save_val(varname, val) xr_logic.pstor_store(db.actor, varname, val); end ---------------------------------------------------------------------------------- -- Func: Load a value from a storage. ---------------------------------------------------------------------------------- function load_val(varname, defval) xr_logic.pstor_retrieve(db.actor, varname, defval); end Дополнено 0 минут спустя а если в _g.script ui_sleep_init объявить как true - не поможет? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 10 марта, 2023 (изменено) imcrazyhoudini atmsleep, а не atmmain. Ну и вернуть ui_sleep_init как локальную, как было Дополнено 1 минуту спустя 5 минут назад, imcrazyhoudini сказал: а если в _g.script ui_sleep_init объявить как true - не поможет? Будет то же самое Изменено 10 марта, 2023 пользователем N42 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 10 марта, 2023 N42 имеешь ввиду сюда: Спойлер function update() if sleep_activ == true then if db.actor.health < 0.1 then sleep_stop(); end end end впихнуть проверки и эту функцию повесить на апдейт? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 10 марта, 2023 imcrazyhoudini да Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Sidorovich 6 Опубликовано 10 марта, 2023 Как отключить начальную кат-сцену? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 10 марта, 2023 N42 это победа Дополнено 0 минут спустя N42 а проверку на кровотечение не знаешь? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 717 Опубликовано 10 марта, 2023 imcrazyhoudini db.actor:get_bleeding() возвращает величину кровотека Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 126 Опубликовано 10 марта, 2023 N42 в тч кстати есть такое, не знаешь? Дополнено 1 минуту спустя такое прокатит? Спойлер if db.actor:get_bleeding() > 0 and ui_sleep_init then news_manager.send_tip(actor, "sleep_warning_bleeding", nil, "default", 5000) ui_sleep_init = false end ибо с радиацией нет : и () if actor.radiation > 0 and ui_sleep_init then news_manager.send_tip(actor, "sleep_warning_radiation", nil, "default", 5000) ui_sleep_init = false end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты