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

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


Svoboда

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

О форматировании строк вопрос. В примере по добавлению часов на худ, пробую к строке времени добавить еще строку:

...............
...............
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вторая строка". Что я не так делаю ?

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


Ссылка на сообщение
В UI-конфиге объекта CS поставь complex_mode = "1" (кажется так)

Не помогло. Может еще что ?

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


Ссылка на сообщение
(изменено)
тогда добавь ещё один "слешь"
Помогло, спасибо. Изменено пользователем AndreySol

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


Ссылка на сообщение
amk.add_spot_on_map(obj.id,"green_location","Mutantul")

а как без АМК установку метки сделать ?

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


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

В файле 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

----------------------------------------------------------------------------------------------------------------------

я правильно понимаю, что они связаны с выходом актера с локации и появлением на локации ?

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


Ссылка на сообщение
-- записываем переменную

function save_variable(variable_name, value)

xr_logic.pstor_store(db.actor, variable_name, value)

end

pstor - это наверно можно расшифровать как Pointer Storage ? Т.е. так движок позволяет хранить user-данные ?

Эти данные будут хранится только на сеанс работы или будут сохранятся в сохранениях ?

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


Ссылка на сообщение
Размер сохраняемого pstor НЕ дожен превышать ~8000 байт.
Значит есть способ этот размер получить ? Подскажите как ?

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


Ссылка на сообщение
Вот: _G.script

function set_save_marker(p, mode, check, prefix)

чет нет у меня в _G.script такой ф-ции.

 

Вот тока тебе это зачем надо? Там стоит стандартная проверка на превышение лимита. Игра вылетит сама. если такое случится.
Ну так для того и надо, чтоб игра не вылетала.

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


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

создаю в папке gamedata\scripts файл ui_my_script_class.script, в нем прописываю наследование класса от CUIScriptWnd. Далее, чтоб использовать этот мой наследованный класс, приходится делать так:

local script_wnd = ui_my_script_class.my_script_wnd()

Т.е. движок не видит добавленного мной файла с описанием класса ? Как побороть ?

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


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

В окне инвентаря, в списке имеющихся предметов - выбрали мышей к примеру патроны. После этого можно как-то скриптово получить этот выбранный объект ? В описании game_object нашел:

int object_count() -- количество объектов в инвентаре

game_object* object(string) -- возвращает объект из инвентаря по секции

game_object* object(number) -- возвращает объект из инвентаря по индексу

По индексу роде можно получить, но как тогда узнать индекс выбранного предмета ?

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


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

В окне инвентаря, по нажатии добавленной мною кнопки, создается окно наследованное от 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 для строк списка и для самого окна списка.

Подскажите, как побороть ?

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


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

стандартно скрываю

------------------ обработка нажатий клавы ---------------------------------
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", но как к нему добраться скриптово ?

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


Ссылка на сообщение
парсим из секции координаты иконки и ставим их(x, y, w, h)

Название аналогично, получаем строку и далее game.translate_string или SetTextST

где-ж эту секцию искать, в которой координаты иконки ? В каком файле ?

Парсинг ltx и xml файлов - есть что-то встроенное в ЛУА\движок или надо самому ? Если самому - может есть готовые вещи, чтоб велосипед не изобретать ?

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


Ссылка на сообщение
Приглянись, например, к system_ini() иль ini_file(string)
Пригляделся. Да, есть основное для парсинга.

Жаль, не вижу в описании класса ini_file ничего, чтоб получить\перебрать все секции ini-файла. Могло-бы пригодится.

 

И еще - класс ini_file работает только с ltx-файлами или с xml то-же ?

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


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

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'

 

Что это означает ?

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


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

Zander_driver

после получение координат иконки, как их применить для CUIStatic ?

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


Ссылка на сообщение
(изменено)

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);

или что-то иное ? Что ? Изменено пользователем AndreySol

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


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

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 не умеют (если я правильно разобрался) "вырезать" требуемый фрагмент из большой текстуры. Так как это сделать ?

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


Ссылка на сообщение
(изменено)
Т.о. применяя это, можно хоть вырезать из иконки нужный фрагмент иль склеивать рядом находящиеся ...

Ой-ли ???

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-файл, в котором прописывать "вырезки" для всех иконок боеприпасов ?

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

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


Ссылка на сообщение
Существует вариант получения необходимого фрейма из текстуры: Frect():set(x,y,width,height)
создавая требуемые описатели фреймов

Можно об этом подробнее ? Смотрел я в lua_help описание класса Frect - 6 переменных, ф-ция set инициализирует только 4. Какие из них ? Зачем две остальных. Как это использовать ?

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


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

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

AMK-Team.ru

×
×
  • Создать...