Перейти к содержанию

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

 

b27b2a4837.png

Тема посвящена моддингу на платформе Чистое Небо.

 

Правила темы:

  • Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть.
  • Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
  • Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
  • Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться.
  • Лайк 4
  • Мастер! 3

c01570bf2e07524.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

imcrazyhoudini в файле atmmain.script где if obj:section() == "sleepingbag" then в самом конце назначается ui_sleep_init = true даже если перед этим условие пройдет на false. Можно не с update() открывать окно спальника, а сразу же в on_item_drop(obj), лучше не забивать апдейт хламом. Лучше туда перенести. От точек с запятой проблем нету? Первый раз вижу чтобы их ставили

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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);        

а куда его впихнуть хз

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

не помогает

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

imcrazyhoudini это где на апдейте? В atmsleep.script в update() тоже не работает? Где условие на здоровье

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

N42 

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

В atmsleep.script в update() тоже не работает?

это я повесил на on_use в биндере, зачем ему на апдейте висеть...

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

это где на апдейте?

в биндере на апдейте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
24 минуты назад, imcrazyhoudini сказал:

зачем ему на апдейте висеть

Ну, мало ли кто-нибудь во сне все-таки прибежит стрелять, 15 м небольшая дистанция. Тем более + проверка на видимость, если не видит актора, может быть еще ближе. Само сообщение приходит?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

imcrazyhoudini как в бинд сталкере назначается переменная ui_sleep_init?


Дополнено 1 минуту спустя

imcrazyhoudini этот код с условиями и выводом окна в отдельном скрипте или сразу в биндсталкере? Обозначена ли глобально ui_sleep_init или только local ui_sleep_init? Чтобы использовать ui_sleep_init в другом скрипте, должно быть без local и за пределами функций

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
2 минуты назад, N42 сказал:

как в бинд сталкере назначается переменная ui_sleep_init?

а зачем её обозначать, или нужно?
я сразу же ведь написал ui_sleep_init == true

или нужно было?

2 минуты назад, N42 сказал:

только local ui_sleep_init?

локально в atmmain.script

2 минуты назад, N42 сказал:

отдельном скрипте

отдельно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
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 в апдейт, удобнее когда все, что относится к чему-то определенному, было в одном месте. И не надо будет захламляться глобальными переменными

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

local ui_sleep_init = false; убери в начале


Дополнено 1 минуту спустя

И с update(obj) убери  local ui_sleep_init = true

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

N42 работает, но:
- бесконечно сыпит сообщениями что ГГ хочет есть + гг не до конца поднимается (ppe эффект или какой там правильно доигрывается лишь когда ГГ поест);
- если проверка на сытость/врагов/радиации не прошла последующие открытия рюкзака не принесут никакого эффекта

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

imcrazyhoudini тогда проще не использовать эту проверку в биндсталкере, а все-таки использовать уже готовый апдейт в atmsleep.script (там и проверка есть именно на момент сна), чем переделывать ui_sleep_init и условия


Дополнено 3 минуты спустя
В 08.03.2023 в 11:32, imcrazyhoudini сказал:

Как можно вызвать скриптовый выброс? (не оригинальный)

Менялось небо, можно было задать сколько выброс будет идти по времени.

Плюс чтобы можно было создать зону в которой игрок не будет получать урон

Типа просто сменить погоду, добавить тряску и хит по гг с проверкой на нахождение в рестрикторе? Скриптовые выбросы вроде только оригинальный вызывают

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
19 минут назад, N42 сказал:

а все-таки использовать уже готовый апдейт в atmsleep.script

но там ведь нет остановки сна, не так ли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

imcrazyhoudini так она в этом же скрипте, и с проверки на здоровье вызывается

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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 - не поможет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

imcrazyhoudini atmsleep, а не atmmain. Ну и вернуть ui_sleep_init как локальную, как было


Дополнено 1 минуту спустя
5 минут назад, imcrazyhoudini сказал:

а если в _g.script ui_sleep_init объявить как true - не поможет?

Будет то же самое

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

N42
имеешь ввиду сюда:
 

Спойлер

function update()
    if sleep_activ == true then
        if db.actor.health < 0.1 then
            sleep_stop();
        end
    end
end


впихнуть проверки и эту функцию повесить на апдейт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Как отключить начальную кат-сцену?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

N42 это победа


Дополнено 0 минут спустя

N42 а проверку на кровотечение не знаешь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

imcrazyhoudini  db.actor:get_bleeding() возвращает величину кровотека

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   1 пользователь онлайн