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

[CoP] Показываем здоровье ГГ в процентах

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

 

[CoP] Показываем здоровье ГГ в процентах

Автор: Akella-96©

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

Мы просто создадим новый файл в папке gamedata\scripts\ и назовем его, например, percent_health.script. В него мы добавим следующий код:

function show_health_percent()
      local a
      local h
      a = db.actor
      h = a.health* 100
      local hud = get_hud()
      local StatCS=hud:GetCustomStatic("actor_health")
      if StatCS == nil then
    hud:AddCustomStatic("actor_health",true)
    StatCS=hud:GetCustomStatic("actor_health")
      end
      local StatText = ""
      StatText = StatText.. string.format("%1.0f\\n",h)
      if StatCS ~= nil then StatCS:wnd():TextControl():SetText(StatText) end
      if db.actor:is_talking() then
           hud:RemoveCustomStatic("actor_health")
      elseif Info("inv_is_open") then
           hud:RemoveCustomStatic("actor_health")
      end
      if not db.actor:alive() then
           hud:RemoveCustomStatic("actor_health")
      end
end

Теперь разберем все по полкам:

show_health_percent – название вашей функции
    local a – объявляем переменную «а»
    local h – объявляем переменную «h»
    a = db.actor – задаем значение переменной «а» (в данном случае «а» равняется «db.actor», то есть ГГ
    h = a.health* 100 - задаем значение переменной «h» (здесь «h» равняется значению health*100, то бишь, состояние здоровья ГГ, умноженное на 100 (если не умножать, здоровье будет показываться форматом 1, 0.9 и т.п.)
local hud = get_hud() – задаем значение переменной hud

       

    if StatCS == nil then – (грубый «перевод») если худ StatCS пуст (отсутствует), то
    hud:AddCustomStatic("actor_health",true) – создаем custom_static с названием «actor_heatlh»
    StatCS=hud:GetCustomStatic("actor_health") – приравниваем StatCS к созданному статику
      end – конец проверки (не функции)

      local StatText = "" – объявляем переменную StatText
      StatText = StatText.. string.format("%1.0f\\n",h) – приравниваем созданную переменную к прописанному формату показа значения ранее объявленной переменной «h»
Подробно о формате показа :
%1.0f – указываем, сколько цифр будет выводиться после запятой (нам не нужны дробные значения, поэтому мы ставим 1.0)

Это условия для отображения нашего статика
      if db.actor:is_talking() then – если ГГ разговаривает, то
           hud:RemoveCustomStatic("actor_health") – удаляем статик
      elseif Info("inv_is_open") then – если инвентарь ГГ открыт, то
           hud:RemoveCustomStatic("actor_health") – удаляем статик
      end
      if not db.actor:alive() then – если ГГ мертв, то
           hud:RemoveCustomStatic("actor_health") – удаляем статик
      end

Дополнительно по проверке открытого инвентаря:
Чтобы игра проверяла открытие инвентаря, нужно в файл actor_menu.script, (возьмите из распакованной игры) в функции «function inventory_wnd_opened()» перед «end» вставить вот этот код:

db.actor:give_info_portion("inv_is_open")

И в функции «function inventory_wnd_closed()» (тоже перед «end») добавить:

db.actor:disable_info_portion("inv_is_open")

Теперь нам надо поставить нашу функцию на вызов.

Для этого в файле gamedata\scripts\bind_stalker.script, в функции «function actor_binder:update(delta)», после «object_binder.update(self, delta)», добавляем:

percent_health.show_health_percent()

На этом со скриптами покончено. Теперь перейдем к конфигу.

Открываем файл gamedata\configs\ui\ui_custom_msgs.xml, в конец, но перед «</header>» добавляем:

   <actor_health x="24" y="47" width="36" height="24" complex_mode="1">
            <text font="graffiti22"  r="255" g="255" b="255" a="255" align="l"/>
           </actor_health>

Здесь прописаны координаты расположения статика на экране, шрифт отображаемого текста и его цвет. В данном куске кода поставлены координаты левого верхнего угла (у меня измененный ХУД), вы можете указать свои. На этом все.

Таким же способом, можно вывести в процентах любое значение параметров ГГ, например, чтобы вывести выносливость, нужно h = a.health* 100 поменять на h = a.power* 100
В общем, можно поэкспериментировать с этой функцией.

Вот список остальных операторов параметров ГГ:

1. db.actor.bleeding - степень кровотечения
2. db.actor.radiation - уровень облученности
3. db.actor.radiation - сытость   

 

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


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

Уже 4тый час пытаюсь сделать процентное отображение ХУДа.. Делаю все по инструкции точь в точь. Игра запускается начинаешь новою игру и на загрузке встает намертво.

ЛОГ всегда разный, например:

Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ...k.e.r.\gamedata\scripts\percent_health.script:17: attempt to call global 'Info' (a nil value)

Может где то, что то еще надо дополнять? Делаю ХУД первый раз.

Очень прошу помочь

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


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

Уже 4тый час пытаюсь сделать процентное отображение ХУДа.. Делаю все по инструкции точь в точь. Игра запускается начинаешь новою игру и на загрузке встает намертво.

ЛОГ всегда разный, например:

Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ...k.e.r.\gamedata\scripts\percent_health.script:17: attempt to call global 'Info' (a nil value)

Может где то, что то еще надо дополнять? Делаю ХУД первый раз.

Очень прошу помочь

замените info на db.actor:has_info

  • Лайк 1

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


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

А можно ли сделать отображение брони в процентах на CoP? 

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


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

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

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

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

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

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

Войти

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

Войти

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

    Ни одного зарегистрированного пользователя не просматривает данную страницу