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

Справочник по функциям и классам


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

7.9, с инвентарностью - никак. Все инвентарные объекты имеют и мировую модель, вот вся эта физика и относится к ней. Кстати, upd:torque и upd:force вряд ли работают (по крайней мере в ЗП). В оригинальном спавне все 24 байта, отведенные под эти переменные заполнены случайным мусором. То ли глюк xrAI, то ли он их специально так корежит.
Ссылка на комментарий
  Скрипт отлова стрельбы игроком из оружия: (Показать)
Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Для нажатий клавиш есть колбеки для ТЧ и ЧН в модифицированных dll.

  Полезный утиль (Показать)
Ссылка на комментарий

Эх, забыл совсем... в ЗП работать не будет, т.к там вырезали функцию level.main_input_receiver(), а ею я проверяю, что не открыто никакого UI

Так что её придётся как то заменить.

В принципе она нужна, чтобы сделать защиту от срабатывания колбека на выстрел в момент разрядки оружия в инвенторе. Я уже делал её без использования level.main_input_receiver() (скрипт проверял, что в инвенторе новый предмет появлялся, не важно какой секции, и на 1 апдейт блочил срабатывание колбека на выстрел), там был тока глюк со сменой оружия в инвенторе, если кликнуть двойным шелчком мыши на оружие, т.к менялось оружие и патроны в нём + была нажата левая кнопка мыши, скрипт считал, что это был выстрел. Это можно предотвратить, если сравнивать ещё id текущего и предыдущего оружия, но я этим заниматься уже не буду. Так что в принципе после переделки, на ЗП работать будет тоже, просто чутка более громоздко.

 

С ТЧ-ЧН работать должно. Сам тестировал на ЧН.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*

ИМХО, скрипт 'отлова' ... сыроват.

Уже говорил, что при смене режима стрельбы на подствольник - будет врать.

При смене типа патронов (<Y>) - так же будет врать, если кол-во нового типа будет меньше.

При использовании в слотах иных чем оружейные типы предметов (тех же артефактов/капсул при активации) - будут баги.

... и т.п.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos

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

 

  Новая версия отлова стрельбы (Показать)
Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*, зря ты вместо топиков по ковыряниям в скриптах стал "увековечивать" в топике-справочнике ...

Во-первых, там, где требуется скорость выполнения вычислений порой использование стандартных библиотек и избыточно и приводит к протере скорости. По сути тебе всего то требуется считывать последние параметры из нет-пакета оружия, что можно было гораздо проще организовать.

Модуль нет-пакетов, использованный тобою, полностью рабочий для ТЧ/ЧН/ЗП.

Параметр 'updgrenade_mode', о котором ты срашиваешь, никуда не делся с 2008 года. Он относится к оружию, которое имеет подствольник или возможность его установки. Как раз этот параметр мог бы помочь еще более оптимизировать скорость, т.к. и оружие не класса 'cse_alife_item_weapon_magazined_w_gl' или с параметром не равным 1 (подствольник штатно не установлен) и т.п. - можно не проверять на подствольные заряды.

Чтобы получать параметры типа 'upd' (UPDATE_Read|UPDATE_Write) - требуется вызывать с флагом 'true':

local p = sm_net_utils.Get_Data_Weapon(sobj,true) --/ полный пакет

В общем, подобные функции, на которую ты замахнулся, не могут быть простыми, т.к. имеют множество и входных условий и вариаций, и пишутся исходя из потребностей и возможностей конкретного мода. ИМХО.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Кстати, об update-пакете. Считать данные оттуда - без вопросов, а вот получалось ли у кого-нибудь данные туда результативно записать?

Допустим, спавн оружия. В state-пакет вписываю, что надо, и спавнится с нужным визуалом, типом-количеством патронов и т.д. - все прекрасно работает. Пытаюсь одновременно в update-пакет прописать тот же updgrenade_mode - толку ноль, все равно спавнится в обычном режиме, с выкл подстволом. Режим стрельбы тоже только по умолчанию, что бы не вписывал. Причем сразу после записи (в тот же момент времени) пытался update-пакет считать снова - вроде все и прекрасно записалось, да только толку с того ноль - на состоянии оружия не отражается.

Может, с update-пакетом надо как-то по-другому работать, чем со state-пакетом?

 

P.S. В корректности разбора update-пакета полностью уверен, учитывал и класс оружия, и порядок следования данных, результаты чтения тоже вполне ожидаемые.

 

Artos

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

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Kirag, насчет оружия и update-пакетов для него - только что в топике по скриптованию есть информация для размышлений и сведений.

А вот на вопрос: " а вот получалось ли у кого-нибудь данные туда результативно записать?" - могу ответить утвердительно.

Тот же параметр здоровья (health + upd:health) для неписей (хоть в он-лайне, хоть в офлайне) очень помогает и убивать и ранить и оживлять.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
  Цитата
CUIWindow - базовый класс для всех остальных оконных классов

Вопрос такой возник по базовым методам оконных классов:

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():SetWndPos(100, 200) -- это работает
    cs:wnd():Show(false) -- а вот это не работает !!!
end

есть какое-то объяснение такой не любви движка к этому методу класса ?

И еще, вышеуказанным способом

local hud = get_hud() 
local cs = hud:GetCustomStatic("static_weapon") 
if cs == nil then
......................

получить доступ к любому базовому статику на худе не получается, cs всегда == nil. У меня по крайней мере. В чем проблема ?

 

И еще, будет или нет дополнение описания этого базового класса ? К примеру методы

SetAutoDelete(bool);

bool IsAutoDelete();

для чего они ?

 

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

AndreySol,

  Цитата
local cs = hud:GetCustomStatic("hud_show_time") 
...
cs:wnd():Show(false) -- а вот это не работает !!!

есть какое-то объяснение такой не любви движка к этому методу класса ?

кастомстатики, создаваемые через ui_custom_msgs.xml, - достаточно специфические. Если нужны с ними изыски, то лучше всего непосредственно в ui_custom_msgs.xml ничего не создавать, только пустое окно без текстуры и вообще всего. А само наполнение сделать отдельно и поместить на статик с помощью AttachChild. С этим окном уже все операции будут работать без проблем.

 

  Цитата
И еще, вышеуказанным способом

...

получить доступ к любому базовому статику на худе не получается, cs всегда == nil.

Я ничего не понял. Что такое базовый статик?

 

  Цитата
SetAutoDelete(bool);

bool IsAutoDelete();

для чего они ?

ставят/снимают флажок автоудаления окна при его отсоединении от родительского или удалении родительского.

  Полезный утиль (Показать)
Ссылка на комментарий

в xml-файлах описания окна ивентаря есть такой статик

<dragdrop_belt x="645" y="136" width="410" height="60" cell_width = "60" cell_height="60" rows_num="1" cols_num="5"/>

какой из оконных классов используется для этого статика ?

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

AndreySol,

  Цитата
в xml-файлах описания окна ивентаря есть такой статик

<dragdrop_belt x="645" y="136" width="410" height="60" cell_width = "60" cell_height="60" rows_num="1" cols_num="5"/>

какой из оконных классов используется для этого статика ?

Первое, это не статик. Статик - это вполне конкретный класс CUIStatic, один из многих оконных классов.

Второе, класс для этого элемента не экспортирован и никак в скриптах не доступен.

  Полезный утиль (Показать)
Ссылка на комментарий
  Цитата
класс для этого элемента не экспортирован и никак в скриптах не доступен.

Весело !

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

 

никак не реализовать, бывает и такое в модостроении =)

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

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

  Параметры (Показать)

Freedom

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

open_inventory_box

Данная функция была добавлена в r17.

Судя по названию и коду, должна открывать инвентарь.

Но как именно её использовать кто-нибудь знает?

И передавать нужно серверный объект того ящика, который хотим открыть?

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

Real Wolf, не нужно путать справочник по 'штаным' классам/функциям оригинальных игр с различными расширителями.

Твой вопрос уместен в топике "X-Ray extensions"

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

Тут читаем:

  Цитата
int parent() –- кому принадлежит. Для предметов в инвентаре и в ящиках. Если никому, то -1

Из этого можно сделать вывод что parent() возвращает id того, кому принадлежит.

Совсем недавно один код у меня не заработал так как ожидалось, дальнейшее разбирательство обнаружило следующий факт:

type(obj:parent())

возвратило "userdata" в то время как obj был клиентским объектом артефакта.

Далее, обнаружилось что следующий код очень даже рабочий:

  бдымс (Показать)

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

В дополнение к таблице соответствия серверных и клиентских классов (пост №29): в файле xr_game.dll ближе к концу есть упоминания соответствий серверных и клиентских классов (причём внутри движка имена этих классов могут отличаться от тех, что экспортированы в LUA). Кроме этого, классы делятся на парные и непарные. Непарные остаются без соответстия, т.е. они "чисто серверные" или "чисто клиентские". Если я правильно понял, непарные классы наследованы от неэкспортируемого класса CObjectItemSingle, парные - от CObjectItemClientServer.

 

Вырезка из файла xr_game.dll (убраны нечитаемые символы) под спойлером.

 

  Смотреть тут (Показать)
Изменено пользователем Полтергейст
Ссылка на комментарий

в классе CUIListWnd есть метод ShowSelectedItem(...). Работает, но отображение выделения эл-та не соответствует высоте самого эл-та. Это можно побороть ?

 

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

класс Frect - 6 переменных, ф-ция set инициализирует только 4. Какие из них ? Зачем две остальных. Как это использовать ?

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

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

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

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

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

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

Войти

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

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

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

×
×
  • Создать...