Jein 12 Опубликовано 4 Ноября 2012 (изменено) Всем привет. Стоит задача вывести строку времени на ПДА. Имеется готовая функция от тов. Artos'а: function show_time() --------------------------------------------------------------------------------- local clock = true -- (true\false) - включение\выключение показа часов на HUDе --------------------------------------------------------------------------------- local hud = get_hud() if clock == true then local cs = hud:GetCustomStatic("hud_show_time") if cs == nil then hud:AddCustomStatic("hud_show_time", true) cs = hud:GetCustomStatic("hud_show_time") end local time_h = level.get_time_hours() - "2" local time_m = level.get_time_minutes() local msg if time_m >= 10 then msg = string.format(" %02d:%02d\n", time_h, time_m) else msg = string.format(" %02d:%02d\n", time_h, time_m) end if cs ~= nil then cs:wnd():SetText(msg) end end end Также в скрипте есть функция которая "ловит" момент открытия ПДА и вызывает функцию времени. ]function PdaOpen() oHelpWnd = CHelpWindow() oPda = level.main_input_receiver() my_show_time.show_time() .... В ui_custom_msgs.xml строка времени уже описана. В результате на самом худе время есть а вот в ПДА строка никак не хочет появляться. "Перехватчик" открытия ПДА работает исправно, после него я добавлял текст с помощью CUIStatic() - текст на ПДА появляется без проблем. А вот строка времени - не хочет. Прошу помощи. Изменено 4 Ноября 2012 пользователем Jein Поделиться этим сообщением Ссылка на сообщение
Jein 12 Опубликовано 4 Ноября 2012 Viнt@rь, Artos - кастомное время мне нужно выводить на месте стандартного. С помощью CUIStatic() вывести время у меня получилось без проблем. Поэтому исходя из ваших советов и моих экспериментов - получается что CUIStatic() самый подходящий вариант?? Но здесь встает другой вопрос - дело в том что строка времени выведенная через CUIStatic() статическая, то-есть время не "идет". Получается что нужно как-то обновлять CUIStatic() через апдейт или с помощью цикла. И вот вопрос - как это лутше сделать? К примеру бесконечный цикл в котором крутился бы CUIStatic() вешает игру. Поделиться этим сообщением Ссылка на сообщение
Jein 12 Опубликовано 4 Ноября 2012 Jein, .... P.S. Использовать штатный метод апдейта для созданного объекта CUIStatic() для ПДА нецелесообразно, ИМХО. И ПДА редко когда открывается и изменения времени - раз в минуту. Имея созданный объект можно просто в нужное время в нем менять/перезаписывать информацию... То есть, ты предлагаешь не использовать метод апдейта, а обновлять объект таймером? Поделиться этим сообщением Ссылка на сообщение
Jein 12 Опубликовано 4 Ноября 2012 (изменено) Viнt@rь, Artos спасибо за разъяснения. Вот только боюсь что строку времени предложенную Artos'ом я не знаю как править, ведь мне нужно "сдвинуть" время на час или на два назад. В конструкции вида local time_h = level.get_time_hours() - "2" все предельно ясно. Я просто отнимаю 2 часа, а в выше изложенном варианте я не знаю как это сделать. И второй вопрос. Решил я функцию времени вынести в другой файл для удобства работы, вот она: function show_time() local oPda = level.main_input_receiver() local time_h = level.get_time_hours() - "2" local time_m = level.get_time_minutes() local msg if time_m >= 10 then msg = string.format(" %02d:%02d\n", time_h, time_m) else msg = string.format(" %02d:%02d\n", time_h, time_m) end oShow_time = CUIStatic() oShow_time:SetAutoDelete(true) oPda:AttachChild(oShow_time) oShow_time:SetStretchTexture(true) oShow_time:SetWndRect(600, 692, 145, 27) oShow_time:SetText(msg) end и начал получать вылет с логом [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...:\s.t.a.l.k.e.r\gamedata\scripts\my_show_time.script:18: attempt to index local 'oPda' (a nil value) из лога я понимаю что переменная oPda не имеет значения, но вот что с ней делать? Что нужно ей присвоить? Забыл сказать что сейчас функция show_time() прописана в function actor_binder:update(delta). А если выкинуть ее из апдейта - ошибка пропадает. Изменено 5 Ноября 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
Jein 12 Опубликовано 4 Ноября 2012 (изменено) Artos, ну на счет того что все будет просто я и не надеялся. А моддингом я вообще-то и не собирался углубленно заниматься. Просто есть желание пройти мод LWRToD в связке с погодой SWTC - но видя, в первые часы игры определенные несуразности решил их поправить. И даже думаю моих мелких правок, если они конечно получатся, мне хватит дабы с покойной душой пройти мод. Ну так подскажешь проблему с вылетом? Изменено 4 Ноября 2012 пользователем Jein Поделиться этим сообщением Ссылка на сообщение
Jein 12 Опубликовано 4 Ноября 2012 (изменено) Вообще- то по жизни я очень дотошный. Поэтому видя на худе время 21:00, а в игре еще светло как днем то меня это начинает раздражать. Вот по этому весь этот сыр-бор из-за времени завелся. А потом по рысскав по теме моддинга, я наткнулся на твою же функцию времени (которую ты создал года два назад) и увидел как с помощью этой функции легко реализуется время на худе - ну и загорелся. А Ирбис кстати твою функцию и заюзал, в ЛВР через нее реализовал время на худ. Я то и решил что это можно будет сделать самому. Мне ведь и не в домек что разница между ХУДом и ПДА или ИНвентарем ой как велика. Хотя спасибо Ирбису, он в своем моде скриптами достаточно много переработал функций ПДА - чего и в помине нет в чистом СТалкере. Я вообще был удивлен что в чистом Сталкере нет даже скриптов ПДА Изменено 4 Ноября 2012 пользователем Jein Поделиться этим сообщением Ссылка на сообщение
Jein 12 Опубликовано 4 Ноября 2012 (изменено) Ладно ребята, не буду больше офтопить, Спасибо вам за подсказки - придется как-нибудь самому вариться. А по-поводу шор, Artos, так это твое было предложение, сдвинуть время с помощью подмены. Вот этот пост http://www.amk-team....460#entry734985 Ну а я за твой совет и ухватился. Еще раз спсибо за советы. Извините если что не так. Изменено 4 Ноября 2012 пользователем Jein Поделиться этим сообщением Ссылка на сообщение