Charsi 441 Опубликовано 5 Сентября 2012 Для кнопки кроме того работают колбеки BUTTON_DOWN, WINDOW_LBUTTON_DB_CLICK, STATIC_FOCUS_LOST, STATIC_FOCUS_RECEIVED. Последними как раз и отлавливается потеря/наведение курсора мыши. Как правильно называются - смотри класс ui_events в lua_help.script. Доступность какого-либо события для конкретного класса элемента окна выясняется опытным путем. Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 24 Сентября 2012 Не класс, а объект всё-таки... local inventory_wnd = nil function on_inv_open() if not wnd then inventory_wnd = level.main_input_receiver() wnd = CUIStatic() wnd:SetAutoDelete(true) wnd:SetWndRect(190, 730, 108, 33) wnd:SetText("Кол-во: ") wnd:SetFont(GetFontGraffiti22Russian()) wnd:SetTextColor(ca,cr,cg,cb) end inventory_wnd:AttachChild(wnd) end function on_inv_close() inventory_wnd:DetachChild(wnd) end Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 24 Сентября 2012 На закрытие инвентаря не init надо вешать, а функцию с детачем. Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 9 Ноября 2012 Viнt@rь, задай в конфиге текстового поля параметр complex_mode="1" либо используй метод SetTextComplexMode(boolean). 1 Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 15 Апреля 2013 Stiingray, неправильно написано условие. if ren == "renderer_r2" then В логе должно быть как минимум то, что файл скрипта невалидный. Используй для проверки синтаксиса script Syntax Checker. Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 20 Мая 2013 АuReN, например так: self:AddCallback("Button_"..id,ui_events.WINDOW_LBUTTON_DB_CLICK, self:get_callback_by_id(id)) function class_name:get_callback_by_id(btn_id) return function() get_console():execute("load ~~обрабатываем кнопку "..btn_id) end end Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 30 Мая 2013 В ЧН/ЗП движковое окно открывается на следующем апдейте после изменения флажка в actor_menu.script. Если приаттачить к худу своё окно не сразу, а чуть погодя, то оно окажется поверх движкового. Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 31 Мая 2013 Viнt@rь, в ЧН функция есть и работает.mumie, пару апдейтов нужно подождать. -- при открытии инвентаря -- вызываем из actor_manu.inventory_wnd_opened function on_inv_open() local x = 2 level.add_call(function() x=x-1 return x==0 end, function() -- пора аттачить своё окно get_hud():AddDialogToRender( wnd ) end) end -- при закрытии инвентаря -- вызываем из actor_manu.inventory_wnd_closed function on_inv_close() get_hud():RemoveDialogToRender( wnd ) end Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 19 Июня 2013 Можно использовать не user.ltx, а свой отдельный конфиг-файл, который можно сохранять и загружать по мере надобности. local value = 0 local concomm ="sv_vote_enabled" local con = get_console() function var_load() con:execute("cfg_load my_config") value = con:get_string(concomm) con:execute("cfg_load user") end function var_save() con:execute("cfg_load my_config") con:execute(concomm.." "..value) con:execute("cfg_save my_config") con:execute("cfg_load user") end 4 1 Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 5 Июля 2013 Старлей, метод section - у клиентских объектов, у серверных - section_name. Чтобы узнать, какие из этих объектов сталкеры, есть функция IsStalker (object, class_id). 3 Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 4 Января 2014 Объект открытого окна иногда по каким-то причинам уничтожается уборщиком мусора. В таком случае помогает сохранение ссылки на окно в глобальной переменной. Можно также попробовать сохранить ссылку в виде члена класса и заниливать его при закрытии окна. 3 Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 27 Января 2014 (изменено) Вертикальная черта относится к классу %p. Она учитывается на предыдущей итерации, но не попадает в захват. Можно же всё сразу захватить. Вроде побыстрее работает. for dist,state,sound in string.gfind( s, "%|*(%d+)%|([^%|%@]+)%@?([^%|]+)" ) do Изменено 27 Января 2014 пользователем Charsi Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 27 Февраля 2014 Можно, но при удалении четвертый элемент станет третьим и это нужно учесть там, где к нему идет обращение (function spawn_rand_anom) и изменить индекс с 4 на 3. 5 Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 21 Марта 2014 Если texture это файл, то его наличие можно проверить так getFS():exist("$game_textures$", texture..".dds") Если это идентификатор текстуры, то нужно проверить его наличие в файлах-описателях для текстур. Их имена перечислены в секции texture_desc. Если не нашлось ни того ни другого, ругаемся в лог и текстурим окно какой-нибудь заведомо существующей дефолтной текстурой. 1 Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 8 Августа 2014 Открытое скриптовое окно само автоматически обновляется с частотой рендера, поэтому изменения в нем отображаются моментально. Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 11 Августа 2014 Проще всего посмотреть список ключей в исходниках движка. Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 22 Августа 2014 , можно округлить в помощью string.format, например, так: print(string.format("%.2f", math.pi)) --> 3.14 print(string.format("%.3f", math.pi)) --> 3.142 print(string.format("%.4f", math.pi)) --> 3.1416 1 1 Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 5 Марта 2015 @Anonim, принцип блокировки зависимых опций в ТЧ похож на ЧН. Например, добавим чекбокс в список и зарегистрируем его под именем "option1". _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_option1", _st) ctl = xml:InitCheck ("video_adv:check_option1", _st) handler:Register (ctl, "option1") Добавим трекбар для другой опции и сделаем его зависимым от первой опции. _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_option2", _st) ctl = xml:InitTrackBar ("video_adv:track_option2", _st) handler.m_preconditions[ctl] = function() local opt1 = self:GetCheckButton("option1") ctrl:Enable( opt1:GetCheck() ) end В таблицу handler.m_preconditions для ключа ctl добавляется функция, которая будет выполняться при вызове метода UpdateDependControls объекта окна опций. Осталось самое простое - на нажатие чекбокса опции "option1" назначить вызов UpdateDependControls. Идем в ui_mm_opt_main.script и в функцию function options_dialog:InitCallBacks() добавляем self:AddCallback("option1", ui_events.BUTTON_CLICKED, self.UpdateDependControls, self) В ЗП сделано чуть иначе. Там все опции имеют прекондишены, завязанные на тип рендера. При смене типа рендера список опций полностью очищается и заполняется заново опциями, доступными только для выбранного рендера. 1 3 2 Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 15 Марта 2015 Потому что вместо self:GetCheckButton должно было быть handler:GetCheckButton. Поделиться этим сообщением Ссылка на сообщение
Charsi 441 Опубликовано 9 Апреля 2015 @UnLoaded, ты открываешь своё скриптовое окно и оно перехватывает управление ввода на себя. Попробуй при входе в диалог разбиндить экшены use и quit, а на последней фразе диалога забиндить обратно. Поделиться этим сообщением Ссылка на сообщение