Перейти к контенту

Худ


Serafim12

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

А существует ли скриптовый метод, подобный этому

cps = hud:GetCustomStatic("название_кастомстатика")

Только не для кастом, а для базовых статиков худа. Чтобы узнать, отображается ли статик сейчас, и в зависимости от этого скрыть/показать свой кастом-статик. Как пример - скрывать кастом-статики во время прицеливания через оптику, т.к. худ в это время скрывается.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Помогите с таким вопросом - необходимо на худе разместить новое окошко, в которое буду выводить некую текстовую информацию. Отсюда вопросы:

- как создать окно и отрегулировать его положение;

- как отслеживать видимость\невидимость окна - т.е. как хранить его состояние;

- как устанавливать в этом окошке нужный текст;

- как отслеживать общее состояние худа - к примеру переход в режим прицеливания через оптику, что-бы соответстенно этому скрывать\показывать свое окошко.

Ссылка на комментарий

AndreySol

Создать окно на худе можно с помощью кастом-статиков, вывести туда текст - с их же помощью. Подробнее:

 

<hud_patron_load_1 x="10" y="30" width="8" height="40" stretch="1" complex_mode="1">

<texture>twoteam\p3</texture>

</hud_patron_load_1>

Добавив в файл такую запись, мы добавим туда новый элемент. В данном случае это текстура из файла gamedata\textures\twoteam\p3.dds, что указано в теге текстуры. Укажешь текстуру своего окошка и все.

 

 

local hud = get_hud() -- получаем худ
local cps = hud:GetCustomStatic("hud_patron_load_1") -- получаем кастом-статик
if cps == nil then
        hud:AddCustomStatic("hud_patron_load_1", true) -- рисуем на худе, если вдруг его нету
end
hud:RemoveCustomStatic("hud_patron_load_1") -- стираем кастом-статик с экрана.

 

 

<th_weather_text x="920" y="25" width="60" height="18">

<text align="l" complex_mode="0" font="letterica16" r="255" g="150" b="10" a="220">Ammo</text>

</th_weather_text>

Добавляем в файл такую запись - добавляется элемент с возможностью вывода текста. Тут же задается размер, вид и цвет шрифта.

 

 

Как получить кастом-статик в скрипте - см. выше. Задать текст вот так:

 

cps:wnd():SetText("твой текст")

 

 

 

А вот на 4-й вопрос я сам хотел бы ответ узнать. Мой пост выше - с вопросом как раз об этом.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
dragunof, а можно чуть подробнее? А если не затруднит, то вообще подробно.
Ссылка на комментарий
dragunof, а можно чуть подробнее? А если не затруднит, то вообще подробно.

Присоединяюсь.

 

RemoveCustomStatic - это единственная ф-ция удаления окна(статика) с худа, или есть что-то типа ShowCustomStatic \ HideCustomStatic ?

Да, и еще в этом-же вопросе - можно ли применять этот метод для статиков, изначально присутствующих на худе ? А то попадалось здесь же на форумах, что мол их удалить с худа нельзя, а только задав заведомо большие координаты, загнать за край худа.

 

complex_mode="1" - за что отвечает этот параметр ?

Изменено пользователем AndreySol
Ссылка на комментарий

Marafon6540, AndreySol,

Если хотите удалить статик в время прицеливания:

function bla_bla()
local hud = get_hud() 
local static = hud:GetCustomStatic("Ваш_статик")
if db.actor:accuracy()*1000 < 1 then
if static ~= nil then
hud:RemoveCustomStatic("Ваш_статик")
end
end
end

И всё это дело на update актора.

Только вот в ТЧ по моему это не работает там нужно проверять изменение fov, не помню но по моему так:

local fov = device().fov
if fov<35 then
-- action
end

Поправьте если не так.

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

  ▲

▲ ▲

Ссылка на комментарий
device().fov
а что это ?

 

И все-же - дабы скрыть статик с худа, его нужно только удалять и соответственно затем добавлять на худ вновь, или все-же есть ф-ции скрытия\показа статиков ?

 

Есть-ли какая-то ф-ция "энумератор" имеющихся на худе статиков ?

 

И еще - вопросы по работе с инвентарем и КПК сюда можно задавать, ведь это то-же похоже на работу с худом ?

Изменено пользователем AndreySol
Ссылка на комментарий

AndreySol,

а что это ?

Получение fov актора.

есть ф-ции скрытия\показа статиков ?

К сожалению нет.

И еще - вопросы по работе с инвентарем и КПК сюда можно задавать, ведь это то-же похоже на работу с худом ?

Разумеется. :)

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

  ▲

▲ ▲

Ссылка на комментарий
Да, и еще в этом-же вопросе - можно ли применять этот метод для статиков, изначально присутствующих на худе ? А то попадалось здесь же на форумах, что мол их удалить с худа нельзя, а только задав заведомо большие координаты, загнать за край худа.

Чепуха это. В моем же примере, как ты сам видишь, статики объявляются заранее в xml-файле. И затем добавляются-удаляются в любой момент времени.

за что отвечает complex_mode, не помню, поэкспериментируй сам.

 

dragunof

Спасибо огромное, буду пробовать :)

 

Добавлено через 25 мин.:

Так и есть.

device().fov

у меня вернул в обычном режиме (когда гг никуда не целится) 61, при прицеливании через пистолет 41, при взгляде через бинокль 5.625.

Как я понимаю, это зависит от степени зума. Однако бывают ведь оптические прицелы малой кратности, 1.6х скажем. Так что подбор конкретных значений, от которых распознавать оптика или нет, лучше делать исходя из конкретного набора стволов-биноклей в конкретном моде. Могут быть расхождения.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
К сожалению нет.

Как это нету.

local wnd = CUIStatic() --или получаем свой статик.
wnd:Show(true/false)

 

Fov это угол обзора в градусах. Соответственно чем больше значение, том больше видно в стороны, но мелко, а если меньше, то по сторонам видно мало, но зато очень близко.

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

В общем вот такой вопрос - Как можно вывести скриптовое окно, при котором можно было бы пользоваться ПДА или инвентарем?

https://www.youtube.com/embed/U0no-6tCxhU

Канал на "Трубе"

Ссылка на комментарий

Есть-ли какой-то параметр для описания статиков в ui_custom_msgs.xml например, что-бы размер статика автоматически менялся в соответствии с размером текста, который на него выводится ?

В этом-же вопросе - можно-ли динамически (скриптово) менять размеры и положение статика ?

 

По инвентарю - в каких файлах он описывается ?

 

Добавлено через 5 мин.:

Desertir, спасибо за инфу. А как насчет

Есть-ли какая-то ф-ция "энумератор" имеющихся на худе статиков ?

ну типа EnumWindows\EnumChildWindows из WinAPI ?

 

Соответственно чем больше значение, том больше видно в стороны, но мелко, а если меньше, то по сторонам видно мало, но зато очень близко
таким образом реализовано приближение для бинокля и оптики ? Изменено пользователем AndreySol
Ссылка на комментарий
таким образом реализовано приближение для бинокля и оптики ?

Не знаю, наверное, но на сколько я помню, изменение fov до 75 градусов есть в Солянке, но это все устанавливается в движке (xrGame.dll).

 

В этом-же вопросе - можно-ли динамически (скриптово) менять размеры и положение статика ?

Да, можно. Цитата из справочника

    // установить положение верхнего левого угла окна относительно родительского
    void SetWndPos(float x, float y); // вариант ТЧ
    void SetWndPos(vector2*);         // вариант ЗП
    vector2* GetWndPos(CUIWindow*); // только ЗП, получить положение окна
    // установить размеры окна
    void SetWndSize(float w, float h); // вариант ТЧ
    void SetWndSize(vector2);          // вариант ЗП
    // установить положение и размеры окна
    void SetWndRect(Frect);
    void SetWndRect(float x, float y, float width, float height); // только ТЧ
    void SetHeight(float h); // только ТЧ, установить высоту окна
    float GetHeight(); // получить высоту окна
    void SetWidth(float w); // только ТЧ, установить ширину окна
    float GetWidth(); // получить ширину окна

 

PS: советую прочесть.

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

Desertir, еще раз спасибо. Уже есть с чего начинать !

Еще вопросы:

 

1) Динамическое отображение уровней здоровья и др. на худе и в инвентаре - это встроено в движок и к этому скриптеру не добраться, или-же где-то крутится callback-функция и к ней есть доступ ? Если второй вариант, то где искать ?

 

2) К примеру, требуется отобразить на худе свой статик. И хочется этот статик хранить в отдельном dds-файле и описать его параметры в отдельном xml-файле - как это правильно сделать, чтоб он был виден движку ?

 

Доступ к худу

local hud = get_hud()

А как сделать то-же самое, но для инвентаря и КПК ?

 

Дрючим все тот-же пример добавления часов на худ:

local hud = get_hud() 
local cs = hud:GetCustomStatic("hud_show_time") 
if cs == nil then 
    hud:AddCustomStatic("hud_time_static", true) 
    hud:AddCustomStatic("hud_show_time", true) 
    cs = hud:GetCustomStatic("hud_show_time") 
end

local time_h = level.get_time_hours() 
local time_m = level.get_time_minutes() 
local msg = string.format("%02d:%02d", time_h, time_m) 

if cs ~= nil then
    cs:wnd():SetText(msg)
    cs:wnd():SetTextColor(100,250,10,10) -- цвет устанавливается нормально
    cs:wnd():Show(false) -- может здесь ошибка ?
end

в результате имеем циферки красного цвета, а Show(false) или тупо игнорируется движком, или я опять чего-то не понял ?

Ссылка на комментарий

AndreySol

И чем тебе ненравятся методы удалить/добавить статик? их можно применять сколько угодно раз, и работают они стабильно без причуд. А вот почему у тебя

cs:wnd():Show(false)

неработает, я понятия не имею :) Сам никогда этим методом не пользовался.

 

Ну и по твоим вопросам.

1) Это базовый статик, его отображением занимается движок. Но можно этот статик убрать (унести за пределы худа/инвентаря) и нарисовать свой, который уже от скрипта будет работать. Узнать здоровье гг из скрипта проблем не составляет.

 

2)Ну файл dds-текстуры ты и так в описании статика указываешь. Чтобы еще и xml-файл был отдельный, полагаю надо инклуды применять :)

#include "относительный путь к твоему файлу"

 

На остальные вопросы ответов не знаю... чем смог, тем помог.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
Узнать здоровье гг из скрипта проблем не составляет.
Ну подскажите уж примерчиком, а заодно и остальные параметры - пси-здоровье и радиоактивность. ;)

 

К примеру такая ситуевина - нужно динамически убрать базовый статик с худа, т.е. не в его описании в .xml-файле, а по необходимости, в процессе игры. Как сие сделать ? Как мне думалось, наиболее правильно использовать CUIWindow:Show(false), однако облом, похоже.

Ссылка на комментарий

AndreySol

Советую почитать:

Там про все эти свойства написано.

Примеры:

db.actor.health = -0.28
db.actor.power = -(db.actor.power / 2)
local h = db.actor.health
local p = db.actor.power

Это здоровье и выносливость.

 

динамически убрать базовый статик с худа

Я таких способов не знаю. Есть способ такой: убираете базовый статик за кадр в xml-файле, раз и навсегда. А на его месте рисуете свой кастом-статик, как две капли воды похожий на базовый. Ну или неочень похожий :) И его можете удалять или являть взору игрока когда угодно.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

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

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...