-
Число публикаций
1 257 -
Регистрация
-
Последнее посещение
-
Дней в топе
7 -
AMKoin
3,076 [Подарить AMKoin]
RayTwitty последний раз побеждал 27 Июня
RayTwitty - автор самых популярных публикаций!
Баланс оценок
558Донаты
-
Карта банка
4276-0700-1636-2230
Контакты
-
Сайт
https://youtube.com/@RayTwitty
-
@Stalkersof ты что хочешь сделать? Сонливость? Так зачем этот надмозг с таймерами городить. Сонливость - это почти тоже самое, что и другие состояния ГГ, сытость, радиация и т.д. Вот и пляши от этого. Введи для начала параметр сонливости ГГ и меняй его на апдейте - просто прибавляй какой-то коэффициент, по аналогии с другими. Выведи параметры в конфиги в секцию ГГ, чтобы удобно было менять. Далее твоя задача сохранить это все между загрузками игры - тут вариантов масса + в каждой платформе свои ништяки. Ну и все, основное ты считай сделал. Далее привязывайся к параметру сонливости - достиг условно 0.5 - показываешь зеленый индикатор, 0.7 - желтый и т.д. Туда же доп. эффекты типа зевков, уменьшения выносливости и прочее. При этом также легко будет намутить бустеры - всякие кофие и энергетики, которые просто будут уменьшать значение сонливости, а остальное (индикаторы) изменится само под воздействием внешних факторов. Туда же монстры - усыпляющие кошаки и аномалии, простор для творчества большой.
-
При наличии SetSelectedItem (в оригинале ТЧ нет, но есть в ХЕ и вроде бы в ЗП), можно и навигацию стрелками по элементам списка сделать. Я у себя в исходниках еще давно убрал это все под капот (со всеми проверками на вшивость), сделав два метода - выбрать следующий и предыдущий элемент списка. Помимо выбора возвращает успешность попытки (если например дошли до конца, то делать ничего не надо). -- навигация по списку с клавиатуры if keyboard_action == ui_events.WINDOW_KEY_PRESSED then local list = self:GetListWnd("list_window") if dik == DIK_keys.DIK_UP then if list:SelectLastItem() then self:OnListItemClicked() end elseif dik == DIK_keys.DIK_DOWN then if list:SelectNextItem() then self:OnListItemClicked() end elseif dik == DIK_keys.DIK_DELETE then self:OnButton_del_clicked() elseif dik == DIK_keys.DIK_RETURN then self:OnButton_load_clicked() end end Теперь подумываю изменить (добавить перегрузку, чтобы сохранить обратную совместимость) метод GetItem, чтобы без аргументов он сразу возвращал выбранный элемент списка (если есть). Тогда не придется городить эти все if index ~= -1 then return end и прочие: сразу local item = list:GetItem() if item then ... end P.S. Для ванильного (и ХЕ) движка давно юзаю обертку: function _G.validate_list(list) if list:GetSize() ~= 0 then local index = list:GetSelectedItem() return index ~= -1 and list:GetItem(index) end end Юзается так: self:AddCallback("list", ui_events.LIST_ITEM_CLICKED, self.on_list_item_clicked, self) function CUIMyWnd:on_list_item_clicked() if validate_list(self.list) then -- тут 100% есть выбранный item local item = self.list:GetItem(self.list:GetSelectedItem()) end end
-
@WinCap скорее всего некорректное название. GetSelectedIndex правильнее было бы. А вот GetItem уже возвращает юзердату. Можно там конечно дописать что-то типа if not list:GetItem(index) then return end, но это будет затычка. Мне кажется там проблема в чем-то другом. Скрипт кстати правленный, -1 заменено на 4294967295 как минимум, скорее всего оно было написано для другого движка. Как я уже писал выше, надо дебажить.
-
Тогда вылет по идее должен быть при нажатии визуальной кнопки Удалить, функция та же самая вызывается.
-
@Капрал Хикс что в таком случае ты хочешь удалить?
-
@Капрал Хикс при этом какая-нибудь строчка выделена? (закрашен элемент списка полоской на фоне)
-
@Капрал Хикс тогда надо дебажить, выводить в лог индекс который выдает GetSelectedItem, смотреть, почему с ним не работает GetItem (получение элемента списка по его номеру) и т.д. Да и вообще, в целом не ясно "если курсор не стоит на строке сохранения" - курсор это что? Фокус мыши не наведен на элемента списка? Или элемент списка не выделен? Просто в каком-то ориг скрипте был момент (наверно save dialog), что вместо GetSelectedItem использовался GetFocusedItem, и там как раз тоже был косяк с тем, что при подвязке хоткеев мышь могла не быть над элементом списка в момент действия. Но тут такого я не вижу.
-
@Капрал Хикс попробуй все строчки вида if index == 4294967295 then return end заменить на if index == 4294967295 or index == -1 then return end Возможно скрипт написан под обновленный lua.
-
Что-то туплю видимо, давно lua не ковырял Есть локальная функция в модуле: local function myfunc() print("myfunc !!!") end Нужно вызвать ее по имени. Но, имя генерируется в другом месте. Первая мысль была сделать просто ["myfunc"](), но не сработало, как и this["myfunc"]() Так, как сделать? Через loadstring что ли? loadstring(script_name()..".myfunc()")() выглядит как дичь же (но работает, правда не с локальными функциями, что логично)
-
Требуется мнение. Навело на мысль обсуждение из соседней темы по Enhanced Edition. В нем также как и в кастомных движках обновили библиотеку lua, из-за чего кое-какие места в скриптах перестали нормально работать (ТЧ). В частности task_manager.script, функция CRandomTask:load. Если я все правильно помню, то local selected_target = p:r_u32() в оригинальном движке при передаче туда u32(-1) возвращал 0, а теперь возвращает 4294967295, из-за чего ломалась вся дальнейшая логика. И я, и новоПЫС придумали затычку, на скрине (мое снизу). По своей затычке могу объяснить логику - коль уж в оригинальном движке у нас selected_target получал 0 при передаче туда u32(-1), тогда если случается local defend_object = alife():object(4294967295), что результате всегда дает nil, то мы просто присваиваем переменной серверный объект актора. То есть, поведение оригинала 1.0006 не меняется. А вот у новоПЫС получается так - self.task_info[id].selected_target и self.task_info[id].defend_target просто не заполняются. Какие от этого могут быть последствия я даже не знаю. Так в чем вопрос - кто тут прав? И почему вообще r_u32() стало по-другому работать? Из-за обновленного lua ли? Или может из-за другого компилятора и пр.?
-
Мы не про lua (библиотеку) разговор вели, а про скриптовый API конкретно движка. С lua библиотекой история ожидаемая и вполне понятная. Тоже самое было в кастомных движках, где вроде кроме замены gfind на gmatch и пары подобных штук, особо последствий никаких. Да и тех я не припомню, у себя я поправил только один момент связанный с u32(-1) в таск менеджере. А вот изменение скриптового API движка - это другого уровня переделки. Вот как например гейм граф, упомянутый выше. Наверняка там еще что-то есть... P.S. Кстати, заметили что в ТЧ добавили hit_callback для актора? Сколько в свое время костылей было написано, чтобы сделать такую банальную вещь, как реакцию на хит)) Скорее всего придется (если кто захочет добавлять поддержку ЕЕ) писать в коде инъекции по типу: if get_platform_id then -- get_platform_id() глобальный метод, который есть только в ЕЕ -- код совместимый с ЕЕ else -- старый код end
-
Хех, будет весело если выяснится, что порезали скриптовый API. Это будет означать, что нет обратной совместимости с модами или она будет частичной.
-
Собственно, обновил. X-Ray converter (Repack) https://disk.yandex.ru/d/quAl5SrTNjZEWQ Старая версия на всякий случай тут. Отличия от старой версии: 1) обновлен конвертер, используется последняя версия (0.3.1) отсюда*: https://github.com/abramcumner/xray_re-tools/releases 2) поддержка SDK от ЧН и ЗП (раньше было только под ТЧ) 3) документация теперь в одном файле * Как по мне, наиболее актуальный форк. Есть еще вот это, но я его не тестировал.
-
Сначала это всё вызывало *смех мексиканца*. Теперь это вызывает лишь одно чувство - ненависть. Как вариант, чтобы не костылить автостатики: <texture id="ui_inv_icon_health_restore_speed" x="498" y="110" width="18" height="18" ng_ratio="4" /> -> <texture id="ui_inv_icon_health_restore_speed" x="1992" y="440" width="72" height="72" ng_ratio="1" /> Не проверял, но насколько я понял идею: просто умножить все на 4 и убрать множитель.
-
Оно сделано в движке. По идее там ничего сложного, обычный трекбар. slider_box - тег в инвентаре. Другое дело, а надо ли это брать в таком виде, в каком оно сделано? Как по мне, выглядит по васянски. В оригинале оно кстати было зашито в движок (в кастомных движках отдельно выводили в конфиги).
УЧИМСЯ МОДДИНГУ
ИГРАЕМ В МОДЫ НА ТЧ
ИГРАЕМ В МОДЫ НА ЧН И ЗП
- [ЧН] OGSM CS 1.8 CE Fixes
- [ЧН] HARDWARMOD 3.2
- [ЗП] The Long Road
- [ЧН] New vision of War
- [ЧН] Old Good Stalker Mod - Clear Sky
- [ЗП] Unofficial Patch
- [ЗП] Смерти вопреки
- [ЗП] Контракт на хорошую жизнь
- [ЗП] Shoker Weapon Mod 2.1
- [ЗП] Hardcore pack for SGM 2.2
- [ЗП] Контракт Синдиката
- [ЗП] Клондайк 2.0
- ...и другие моды
ПОЛЕЗНОЕ И РАЗНОЕ