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

Скриптование


Svoboда

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

Всем привет. Стоит задача вывести строку времени на ПДА. Имеется готовая функция от тов. 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() - текст на ПДА появляется без проблем. А вот строка времени - не хочет.

Прошу помощи.

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

Поделиться этим сообщением


Ссылка на сообщение

Viнt@rь, Artos - кастомное время мне нужно выводить на месте стандартного. С помощью CUIStatic() вывести время у меня получилось без проблем. Поэтому исходя из ваших советов и моих экспериментов - получается что CUIStatic() самый подходящий вариант??

Но здесь встает другой вопрос - дело в том что строка времени выведенная через CUIStatic() статическая, то-есть время не "идет". Получается что нужно как-то обновлять CUIStatic() через апдейт или с помощью цикла. И вот вопрос - как это лутше сделать? К примеру бесконечный цикл в котором крутился бы CUIStatic() вешает игру.

Поделиться этим сообщением


Ссылка на сообщение

Jein, ....

P.S. Использовать штатный метод апдейта для созданного объекта CUIStatic() для ПДА нецелесообразно, ИМХО.

И ПДА редко когда открывается и изменения времени - раз в минуту. Имея созданный объект можно просто в нужное время в нем менять/перезаписывать информацию...

То есть, ты предлагаешь не использовать метод апдейта, а обновлять объект таймером?

Поделиться этим сообщением


Ссылка на сообщение

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). А если выкинуть ее из апдейта - ошибка пропадает.

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

Поделиться этим сообщением


Ссылка на сообщение

Artos, ну на счет того что все будет просто я и не надеялся. А моддингом я вообще-то и не собирался углубленно заниматься. Просто есть желание пройти мод LWRToD в связке с погодой SWTC - но видя, в первые часы игры определенные несуразности решил их поправить. И даже думаю моих мелких правок, если они конечно получатся, мне хватит дабы с покойной душой пройти мод.

Ну так подскажешь проблему с вылетом?

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

Поделиться этим сообщением


Ссылка на сообщение

Вообще- то по жизни я очень дотошный. Поэтому видя на худе время 21:00, а в игре еще светло как днем то меня это начинает раздражать. Вот по этому весь этот сыр-бор из-за времени завелся. А потом по рысскав по теме моддинга, я наткнулся на твою же функцию времени (которую ты создал года два назад) и увидел как с помощью этой функции легко реализуется время на худе - ну и загорелся. А Ирбис кстати твою функцию и заюзал, в ЛВР через нее реализовал время на худ. Я то и решил что это можно будет сделать самому. Мне ведь и не в домек что разница между ХУДом и ПДА или ИНвентарем ой как велика. Хотя спасибо Ирбису, он в своем моде скриптами достаточно много переработал функций ПДА - чего и в помине нет в чистом СТалкере. Я вообще был удивлен что в чистом Сталкере нет даже скриптов ПДА


  •  

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

Поделиться этим сообщением


Ссылка на сообщение

Ладно ребята, не буду больше офтопить, Спасибо вам за подсказки - придется как-нибудь самому вариться. А по-поводу шор, Artos, так это твое было предложение, сдвинуть время с помощью подмены. Вот этот пост http://www.amk-team....460#entry734985 Ну а я за твой совет и ухватился.

Еще раз спсибо за советы. Извините если что не так.

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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