RayTwitty 587 Опубликовано 1 Марта 2015 Я зря что-ли столько времени убил на это руководство?Блин, чувак, ну а как ты это руководство выложил? Неизвестно где, неизвестно когда. Тут же нет телепатов, чтобы знать, что кто-то там делал мануалы. Да банально в подпись забить и ссылку в шапку - уже какой-то прок будет. Мне например тоже интересна некоторая информация, но ведь её же не найти... З.Ы. мануал на родном языке - вдвойне приятно, спасибо. Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 14 Марта 2015 (изменено) Интересно, а можно ли скриптом добавить к игровым объектам новый метод (например: db.actor:my_method())? По идее, достаточно иметь ссылку на CScriptGameObject, но вот я что-то не припомню, есть ли такое в оригинале... Изменено 14 Марта 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 14 Марта 2015 (изменено) Примерно такСпасибо, немного переделал таким образом: local game_object = {} local game_object_mt = getmetatable(db.actor) local game_object_idx = game_object_mt.__index function game_object_mt.__index(t, k) return game_object[k] or game_object_idx(t, k) end -- методы function game_object.get_id(self) if self:is_game_object() then return self:id() end return -1 end -- вызовы log1("id = "..db.actor:get_id()) log1("id = "..db.actor:active_item():get_id())Всё пашет, только онлайновый актор нужен)) Изменено 14 Марта 2015 пользователем Shadows 1 Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 14 Марта 2015 (изменено) Вместо method(obj) писать obj:method()? Явно же не для подобного.Например для совместимости кода от разных платформ. Я вижу, что ты сделал только для actor-а.Для оружия, коробок, неписей и т.д. этот код также работает. Я же там не спроста вывожу айди для активного предмета в руках. Изменено 14 Марта 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 24 Мая 2015 (изменено) Даже не знаю куда писать... Либо сюда, либо сразу в справочник, но суть в чём: Есть код 1: local s = get_hud():GetCustomStatic("static") if not s then s = get_hud():AddCustomStatic("static") end s:wnd():SetText("text")И код 2: get_hud():AddCustomStatic("static", true):wnd():SetText("text")Первый код вешает апдейт актора, а второй нет. Почему так? Исходники смотрел, там вроде всё нормально. З.Ы. второй аргумент AddCustomStatic означает, что сначала будет произведен поиск статика с таким же именем и в случае успеха, он будет возвращен вместо создания нового (т.е. эквивалент функции GetCustomStatic). Изменено 24 Мая 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 24 Мая 2015 (изменено) 2 Shadows: а проверки с логом добавить ? s = get_hud():AddCustomStatic("static") - вот здесь статик точно возвращается ? local s = get_hud():AddCustomStatic("static") if s and s:wnd() then log1("yes") else log1("no") end--> yesДа и во втором варианте кода же работает. SDrawStaticStruct* CUIGameCustom::AddCustomStatic (LPCSTR id, bool bSingleInstance) { if(bSingleInstance){ st_vec::iterator it = std::find(m_custom_statics.begin(),m_custom_statics.end(), id); if(it!=m_custom_statics.end()) return &(*it); } CUIXmlInit xml_init; m_custom_statics.push_back (SDrawStaticStruct()); SDrawStaticStruct& sss = m_custom_statics.back(); sss.m_static = xr_new<CUIStatic>(); sss.m_name = id; xml_init.InitStatic (*m_msgs_xml, id, 0, sss.m_static); float ttl = m_msgs_xml->ReadAttribFlt(id, 0, "ttl", -1); if(ttl>0.0f) sss.m_endTime = Device.fTimeGlobal + ttl; return &sss; } @7.9, нет, там метод. Изменено 24 Мая 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 24 Мая 2015 Может у тебя в биндере дальше переменная s используется?Не используется. так на какой строчке биндер вешается?s:wnd():SetText("text") Причем именно на апдейте надо это делать. При единичном вызове все нормально работает почему-то. Подскажите, как реализовать выстрел дуплетом в чн, спасибоЗадай zoom_enabled = off в конфиге. Хотя не уверен, что сработает в ЧН, но в ТЧ 100% пашет. 1 Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 16 Июня 2015 Мне это нужно для того, чтобы: несколько таких предметов не группировались в инвентаре ГГ Двиг не группирует предметы с различием состояния менее 0.01, т.е. если изменишь его на 0.0099 то ничего не выйдет. Просто для справки. 1 1 Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 17 Июня 2015 Группирует. Более - не группирует. Просто для справедливости.Да, перепутал)) Не группирует, если различие больше 0.01. Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 20 Июня 2015 Ещё такой вопрос: как отловить момент перезарядки, разрядки и момент смены типов патронов у оружия? Есть ли флаг или что-то подобное для этого? Я сейчас "ловлю" последний патрон в стволе, но может быть есть более изящный способ?Если используешь ХЕ, там есть метод получения текущего стейта худа оружия: uint<state> get_hud_item_state() - возвращает номер текущего стейта. пример: local weapon_states = { idle = 0, fire = 1, fire2 = 2, reload = 3, showing = 4, hiding = 5, hidden = 6, misfire = 7, mag_empty = 8, switch = 9 } local state = db.actor:active_item():get_hud_item_state() if state == weapon_states.reload then ... end 1 1 Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 29 Июня 2015 (изменено) Но может есть другие варианты?По хорошему, на бы в самом движке перед созданием биндера проверять, а существует ли такой файл\функция вообще. Но если движок не вариант, значит на выходе в онлайн читаем секцию у объекта, в этой секции читаем параметр script_binding, разбиваем строку на [файл].[функция], далее известными способами проверяем наличие и вылетам если чего-то не хватает. В случае если всё окей, добавляем секцию в табличку "проверенных секций", чтобы несколько раз не сканировать одно и тоже. Изменено 29 Июня 2015 пользователем Shadows 1 Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 29 Июня 2015 @UnLoaded, не у всех объектов, выходящих в онлайн, должен быть биндер. Без чтения конфига не обойтись. 1 Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 30 Июня 2015 (изменено) Ещё такой вариант - перебрать вообще все секции и посмотреть у них параметры биндинга, ну и потом проверить наличие всего необходимого. Другими словами, отладка ещё до выхода объектов в онлайн. Изменено 30 Июня 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 30 Июня 2015 (изменено) Ну про перебор уже говорилось ранее.Ранее говорилось про перебор объектов, я же написал про перебор _секций_. Секций всегда будет меньше, следовательно меньше нагрузка + их нельзя изменять\добавлять без перезагрузки игры. Чтобы так проверить все объекты игры, тоже вообще-то перебор надо устраивать. тогда уж проще такНу проверишь в начале уровня, дальше что? Если какой-нибудь новый объект в игре появится, снова проверка? На апдейте будешь делать?)) Изменено 30 Июня 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 30 Июня 2015 (изменено) Кстати а как получить список всех существующих секций? Чтобы перебирать.Так просто наверно не получить. Я думаю, надо пропарсить system.ltx и все его вложения, найти все строки, которые обозначают секцию (по заданному шаблону), после чего, найденную секцию на всякий случай проверить при помощи section_exist, ну и добавить её в табличку. Далее, пройтись по этой табличке и посмотреть наличие нужного параметра в секциях. Правда, для чтения файла наверно понадобятся расширения RvP (io namespace). Изменено 30 Июня 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 30 Июня 2015 (изменено) @Zander_driver, а причем тут прогнать все возможные комбинации символов с длинной строки до 30, через ltx:section exist? Я построчное чтение файла предлагал вообще-то. поиск объектов на линии прицеливания или около нееПроще поставить xray-ex и заюзать трассировку лучей RayPick. Изменено 30 Июня 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 30 Июня 2015 @vampirnik77, ну тогда используй скриптовый аналог)) Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 3 Июля 2015 А можно ли отследить процесс загрузки игры через скрипты? музыкальное сопровождение.Штатных функций для проигрывания без онлайного объекта в сталке нет, но можно попытаться через дополнительные библиотеки для луа запустить какой-нибудь mp3-трек прямо в плеере фоном. Помнится в каком-то билде, амбиент-музыка на локацях именно так и была реализована)) Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 4 Июля 2015 (изменено) @macron, а разве имя нужного объекта неизвестно? Зачем эти извраты с измерением расстояния до позиции? Изменено 4 Июля 2015 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 587 Опубликовано 11 Июля 2015 Прицел на оружии появляется моментально. Вот только прицеливание осталось через мушку. В том смысле, что весь экран заполняет приближенная модель оптического прицела, вместо того, что бы смотреть через нее. Потому что вся инфа о параметрах прицела хранится в серверной части - меняя флаг прицела, меняется лишь видимость костей. Поделиться этим сообщением Ссылка на сообщение