AndreySol 215 Опубликовано 3 Ноября 2011 О форматировании строк вопрос. В примере по добавлению часов на худ, пробую к строке времени добавить еще строку: ............... ............... local str = "вторая строка" local msg = string.format(" %02d:%02d\n%s", time_h, time_m, str) if cs ~= nil then cs:wnd():SetText(msg) end результат получается "07:10вторая строка". Что я не так делаю ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 4 Ноября 2011 В UI-конфиге объекта CS поставь complex_mode = "1" (кажется так) Не помогло. Может еще что ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 5 Ноября 2011 (изменено) тогда добавь ещё один "слешь"Помогло, спасибо. Изменено 5 Ноября 2011 пользователем AndreySol Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 6 Ноября 2011 amk.add_spot_on_map(obj.id,"green_location","Mutantul") а как без АМК установку метки сделать ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 8 Ноября 2011 В файле bind_stalker.script есть такие callback-фунции: ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_enter(npc, info_id) self.actor_detector:actor_enter() end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:level_border_exit(npc, info_id) self.actor_detector:actor_exit() end ---------------------------------------------------------------------------------------------------------------------- я правильно понимаю, что они связаны с выходом актера с локации и появлением на локации ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 8 Ноября 2011 -- записываем переменную function save_variable(variable_name, value) xr_logic.pstor_store(db.actor, variable_name, value) end pstor - это наверно можно расшифровать как Pointer Storage ? Т.е. так движок позволяет хранить user-данные ? Эти данные будут хранится только на сеанс работы или будут сохранятся в сохранениях ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 13 Ноября 2011 Размер сохраняемого pstor НЕ дожен превышать ~8000 байт.Значит есть способ этот размер получить ? Подскажите как ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 13 Ноября 2011 Вот: _G.script function set_save_marker(p, mode, check, prefix) чет нет у меня в _G.script такой ф-ции. Вот тока тебе это зачем надо? Там стоит стандартная проверка на превышение лимита. Игра вылетит сама. если такое случится.Ну так для того и надо, чтоб игра не вылетала. Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 19 Ноября 2011 создаю в папке gamedata\scripts файл ui_my_script_class.script, в нем прописываю наследование класса от CUIScriptWnd. Далее, чтоб использовать этот мой наследованный класс, приходится делать так: local script_wnd = ui_my_script_class.my_script_wnd() Т.е. движок не видит добавленного мной файла с описанием класса ? Как побороть ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 22 Ноября 2011 В окне инвентаря, в списке имеющихся предметов - выбрали мышей к примеру патроны. После этого можно как-то скриптово получить этот выбранный объект ? В описании game_object нашел: int object_count() -- количество объектов в инвентаре game_object* object(string) -- возвращает объект из инвентаря по секции game_object* object(number) -- возвращает объект из инвентаря по индексу По индексу роде можно получить, но как тогда узнать индекс выбранного предмета ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 26 Ноября 2011 В окне инвентаря, по нажатии добавленной мною кнопки, создается окно наследованное от CUIScriptWnd. На нем размещаю список (использую CUIListWnd), который заполняю (CUIListItemEx). Реализацию в общем содрал из скриптов главного меню. Все вроде работает. ----------------- class "CAddItemEx" (CUIListItemEx) function CAddItemEx:__init() super() self:SetWndRect(0,0,330,30) self.item_icon = CUIStatic() self:AttachChild(self.item_icon) self.item_icon:SetAutoDelete(true) self.item_icon:SetWndRect(0,0,30,30) self.item_icon:SetStretchTexture(true) self.item_icon:InitTexture("ля-ля-ля") self.item_name = CUIStatic() self:AttachChild(self.item_name) self.item_name:SetAutoDelete(true) self.item_name:SetWndRect(32,0,300,30) self.item_name:SetFont(GetFontLetterica16Russian()) self.item_name:SetTextColor(255,216,186,140) self.item_name:SetText("item_name") end function CAddItemEx:__finalize() end ---------------- class "CUIMyScriptWnd" (CUIScriptWnd) st_items_list = nil function CUIMyScriptWnd:__init(owner) super() -- self.owner = owner self:InitControls() self:InitCallBacks() self:FillItemsList() end function CUIMyScriptWnd:__finalize() end function CUIMyScriptWnd:InitControls() -- Положение и размеры окна self:Init(345,20,335,520)--345,2,335,520 -- файл-описатель элементов local xml = CScriptXmlInit() xml:ParseFile("ля-ля-ля.xml") xml:InitStatic("main_background", self) self:Register(xml:Init3tButton("btn_close", self),"btn_close") -- список предметов st_items_list = CUIListWnd() st_items_list:Init(11, 370, 305, 140) self:AttachChild(st_items_list) st_items_list:SetAutoDelete(true) st_items_list:EnableScrollBar(true) st_items_list:Show(true) self:Register(st_items_list, "items_list") end function CUIMyScriptWnd:FillItemsList() local add_item = nil local num_add = 7 for i = 1, num_add do add_item = CAddItemEx() add_item.item_icon:SetStretchTexture(true) add_item.item_icon:InitTexture("ля-ля-ля") -- иконка эл-та в списке local item_text = "" item_text = string.format("Item %d", i) add_item.item_name:SetText(item_text) -- надпись эл-та в списке if add_item and st_items_list then st_items_list:AddItem(add_item) end end end Но обнаружил проблему - после того, как хотя-бы раз было вызвано это мое окно со списком, при выходе в главное меню (там где загрузить\сохранить\выйти) на нем просматривается прозрачное окно списка со всеми добавленными строками. Т.е. похоже я чет напортачил с зачисткой при закрытии окна инвентаря. В скриптах главного меню, которые брал за образец, нигде нет даже упоминания DetachChild для строк списка и для самого окна списка. Подскажите, как побороть ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 26 Ноября 2011 стандартно скрываю ------------------ обработка нажатий клавы --------------------------------- function CUIMyScriptWnd:OnKeyboard(dik, keyboard_action) CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) if keyboard_action == ui_events.WINDOW_KEY_PRESSED then -- на выход повесим Esc if dik == DIK_keys.DIK_ESCAPE then self:on_Close() end end return true end ----------------- function CUIMyScriptWnd:on_Close() self:GetHolder():start_stop_menu(self, true) end Добавлено через 66 мин.: В моем сообщении #3313 есть ф-ция заполнения списка элементами, состоящими из иконки и текста. Если к примеру элемент списка должен описывать патрон "ammo_9x18_fmj", как скриптово получить соответствующую ему иконку\текстуру (похоже из файла ui_icon_equipment.dds) и строку названия ? Если хочу вывести список всех имеющихся боеприпасов, понятно, что нужно перебрать все объекты в инвентаре актера (подходящие ф-ции видел в описании класса game_object) и проверить принадлежность к искомому типу. В описаниях боеприпасов в файле weapons.ltx есть вроде подходящий параметр - "class = AMMO", но как к нему добраться скриптово ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 27 Ноября 2011 парсим из секции координаты иконки и ставим их(x, y, w, h) Название аналогично, получаем строку и далее game.translate_string или SetTextST где-ж эту секцию искать, в которой координаты иконки ? В каком файле ? Парсинг ltx и xml файлов - есть что-то встроенное в ЛУА\движок или надо самому ? Если самому - может есть готовые вещи, чтоб велосипед не изобретать ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 27 Ноября 2011 Приглянись, например, к system_ini() иль ini_file(string)Пригляделся. Да, есть основное для парсинга. Жаль, не вижу в описании класса ini_file ничего, чтоб получить\перебрать все секции ini-файла. Могло-бы пригодится. И еще - класс ini_file работает только с ltx-файлами или с xml то-же ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 27 Ноября 2011 local weapons_ini = ini_file("weapons\\weapons.ltx") на эту строку ругается так: Expression : fatal error Function : CInifile::r_section File : E:\stalker\sources\trunk\xrCore\Xr_ini.cpp Line : 342 Description : <no expression> Arguments : Can't open section 'identity_immunities' Что это означает ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 27 Ноября 2011 Zander_driver после получение координат иконки, как их применить для CUIStatic ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 5 Декабря 2011 (изменено) RvP Вы мне, на вопрос о том как применить координаты иконки предмета для CUIStatic, посоветовали открываем справочник и смотрим как проинитить текстуру Вы это имели в виду: void Init(float x, float y, float w, float h); void Init(string texture, float x, float y, float w, float h); void InitTexture(string texture); или что-то иное ? Что ? Изменено 5 Декабря 2011 пользователем AndreySol Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 10 Декабря 2011 Desertir я проверял, не получается то, что мне нужно. А мне нужно инвентарную иконку пачки патронов, к примеру 9х18 fmj вывести на статик. В файле weapons.ltx есть данные: inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 11 inv_grid_y = 12 это координаты иконки в условных ячейках сетки (50х50) в файле ui_icon_equipment.dds. А вышеприведенные Вами ф-ции класса CUIStatic не умеют (если я правильно разобрался) "вырезать" требуемый фрагмент из большой текстуры. Так как это сделать ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 10 Декабря 2011 (изменено) Т.о. применяя это, можно хоть вырезать из иконки нужный фрагмент иль склеивать рядом находящиеся ... Ой-ли ??? local x = 550 local y = 600 local width = 50 local height = 50 add_item.item_icon:Init("ui\\ui_icon_equipment",x, y, width, height) в результате на статике изображения нет. если-же пробую так: local x = 0 local y = 0 local width = 50 local height = 50 add_item.item_icon:Init("ui\\ui_icon_equipment",x, y, width, height) на статике получаю изображение всей текстуры из файла ui_icon_equipment.ltx, с размерами 50х50 точек. Из чего делаю вывод - этот метод класса рисует заданную текстуру по указанным координатам x и y (относительно самого окна статика) и с размером width и height. И уж ни как он не вырезает ничего из текстуры, переданной первым параметром. Но если первым параметром передать в метод идентификатор прописанный в каком-то из видимых движку xml-файлов, то текстура будет вырезана согласно координат в описании этого идентификатора в этом xml-файле. Отсюда вопрос: если нет более никаких способов подсунуть статику координаты по сетке из ltx-файла, значит выход - писать свой (добавлять в существующий) xml-файл, в котором прописывать "вырезки" для всех иконок боеприпасов ? Изменено 10 Декабря 2011 пользователем AndreySol Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 10 Декабря 2011 Существует вариант получения необходимого фрейма из текстуры: Frect():set(x,y,width,height) создавая требуемые описатели фреймов Можно об этом подробнее ? Смотрел я в lua_help описание класса Frect - 6 переменных, ф-ция set инициализирует только 4. Какие из них ? Зачем две остальных. Как это использовать ? Поделиться этим сообщением Ссылка на сообщение