|
Akella-96
Пятница, 16.08.2013, 20:34 | Сообщение # 1
Статус: |
|
Отмычка: |
|
Сообщений: |
155 |
Награды: |
0 |
Регистрация: |
17.01.2012 |
|
Всем добра. В данном уроке я покажу вам способ вывода на экран процентное состояние здоровья ГГ. Нам не понадобится куча текстур, используемых в качестве 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>
Здесь прописаны координаты расположения статика на экране, шрифт отображаемого текста и его цвет. В данном куске кода поставлены координаты левого верхнего угла (у меня измененный ХУД), вы можете указать свои. На этом все. Статья от Akella-96©
Добавлено (16.08.2013, 00:15) --------------------------------------------- Таким же способом, можно вывести в процентах любое значение параметров ГГ, например, чтобы вывести выносливость, нужно h = a.health* 100 поменять на h = a.power* 100 В общем, можно поэкспериментировать с этой функцией.
Добавлено (16.08.2013, 20:34) --------------------------------------------- Вот список остальных операторов параметров ГГ : Код 1. db.actor.bleeding - степень кровотечения 2. db.actor.radiation - уровень облученности 3. db.actor.radiation - сытость
Сообщение отредактировал Akella-96 - Пятница, 16.08.2013, 20:36
|
|
Пятница, 16.08.2013, 20:34
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
17.01.2012 |
|
|
|
|
|
Созидатель
Статус: |
|
Бывалый: |
|
Сообщений: |
607 |
Награды: |
1 |
Регистрация: |
24.05.2013 |
|
Полезная статья. Если не сложно, можно скриншот?
|
|
Суббота, 17.08.2013, 00:38
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
24.05.2013 |
|
|
|
|
|
PorShen
Суббота, 17.08.2013, 01:35 | Сообщение # 3
Статус: |
|
Отмычка: |
|
Сообщений: |
155 |
Награды: |
2 |
Регистрация: |
30.12.2011 |
|
|
|
Суббота, 17.08.2013, 01:35
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
30.12.2011 |
|
|
|
|
|
hi_flyer
Суббота, 17.08.2013, 17:33 | Сообщение # 4
Oblivion Lost Remake
Статус: |
|
Опытный: |
|
Сообщений: |
1918 |
Награды: |
11 |
Регистрация: |
11.03.2012 |
|
Вот для ТЧ кому нужно:
Код 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():SetText(StatText) end end
|
|
Суббота, 17.08.2013, 17:33
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
11.03.2012 |
|
|
|
|
|
alanbrose
Четверг, 05.10.2017, 00:39 | Сообщение # 5
Статус: |
|
Отмычка: |
|
Сообщений: |
113 |
Награды: |
4 |
Регистрация: |
28.08.2015 |
|
Akella-96, а можно в процентах указать состояние оружия?
|
|
Четверг, 05.10.2017, 00:39
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
28.08.2015 |
|
|
|
|