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

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

@ted.80, Нет, я смог сделать перенос, внутри CUIListItemEx есть статик, ему надо сделать SetTextComplexMode(true), но тогда текст становится многострочным, и не реагируют на клик нижние строки

Ссылка на комментарий
1 минуту назад, Graff46 сказал:

но тогда текст становится многострочным, и не реагируют на клик нижние строки

текст и не будет реагировать, реагирует статик - попробуй его увеличить

Ссылка на комментарий
Только что, Graff46 сказал:

ему надо сделать SetTextComplexMode(true), но тогда текст становится многострочным, и не реагируют на клик нижние строки

Еще ему надо сделать

AdjustHeightToText();

Чтобы принял размер(высоту) в соответствии с размерами текста. А не тупо всегда в одну/всегде в две строки независимо от содержимого.

Только что, Graff46 сказал:

текстурка статика (горизонтальная полоска) не растягивается

SetStretchTexture(true);

 

Но stretch и из XML работать должен.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

 

@Zander_driver

Скрытый текст

class "List1_ListItem"(CUIListItemEx)
function List1_ListItem:__init() super()
	self.text_item = CUIStatic()
	self.text_item:SetStretchTexture(true)
	self.text_item:SetTextComplexMode(true)
	self.text_item:AdjustHeightToText()
	self.text_item:SetWidth(762)
	self:AttachChild(self.text_item)
	self.text_item:SetFont(GetFontLetterica18Russian())
	self.text_item:SetTextColor(255,216,186,140)

end
------------------- >>>  END  <<< -------------------

function dialogs2:AddItemTo_List1(item_name)    --/Добавление элемента в список List1
	local _itm = List1_ListItem()
	_itm:SetStretchTexture(true)
	_itm:SetHeight(_itm.text_item:GetHeight())
	_itm:SetColor(GetARGB(1, 159, 255, 167))
	_itm.text_item:SetText(item_name)
	_itm.text_item:AdjustHeightToText()
	self.List1:SetItemHeight(_itm.text_item:GetHeight())
	self.List1:AddItem(_itm)
end

 

Скрытый текст

jpeg&tknv=v2&owner_uid=135127859&hid=7e1

 

Ссылка на комментарий

@Graff46

_itm:SetHeight(_itm.text_item:GetHeight()) 	// Сначала ты поменял высоту ListItemEx, на основании высоты ПУСТОГО статика.
	_itm:SetColor(GetARGB(1, 159, 255, 167))
	_itm.text_item:SetText(item_name)   // Затем засунул текст в статик
	_itm.text_item:AdjustHeightToText() // И поменял его размер по объему содержимого.
// Внимание вопрос: Какой же размер будет у ListItemEx? 

Ответ - будет размер пустой строки. Что мы на скрине и, наблюдаем.

 

Только что, Graff46 сказал:

полоска вообще может растягиваться в высоту?

А почему бы нет-то.

Цепочка наследования задом наперед:

CUIListItemEx < CUIListItem < CUIButton < CUIStatic

Во всяком случае, в OGSR движке так, ванильного нет под рукой, но вряд-ли там иначе. А Статик как известно, может.

Ищи у себя причины, что делал с этими классами... Судя по показанному коду, должно было быть уже нормально. Или я чего-то не вижу.

 

 

Изменено пользователем Zander_driver
Добавил ответ на следующий пост.
  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver, Переписал, толку пора нет

Скрытый текст

class "List1_ListItem"(CUIListItemEx)
function List1_ListItem:__init() super()
	self.text_item = CUIStatic()
	self.text_item:SetAutoDelete (true)
	self:AttachChild(self.text_item)
	
	self.text_item:SetWndRect (0,0,230,22)
	self.text_item:SetStretchTexture(true)
	self.text_item:SetTextComplexMode(true)
	self.text_item:AdjustHeightToText()
	
	self.text_item:SetFont(GetFontLetterica18Russian())
	self.text_item:SetTextColor(255,216,186,140)

end
------------------- >>>  END  <<< -------------------

function dialogs2:AddItemTo_List1(item_name)    --/Добавление элемента в список List1
	local _itm = List1_ListItem()
	_itm.text_item:SetWidth(self.List1:GetWidth())
	_itm:SetStretchTexture(true)
	_itm.text_item:SetText(item_name)
	_itm.text_item:AdjustHeightToText()
	
	_itm:SetHeight(_itm.text_item:GetHeight())
	
	self.List1:SetItemHeight(_itm:GetHeight())
	self.List1:AddItem(_itm)
end

 

 

А эта полоска вообще может растягиваться в высоту?

Ссылка на комментарий

Здрасьте.

 

[ТЧ 1.0006] Задача: добавить в инвентарь кнопку. Проблема на стадии вывода нового окна.

Ориентируюсь на следующие инструкции:

On 11/14/2010 at 11:31 PM, Kolmogor said:

Алгоритм простой:

- ждешь пока откроется инвентарь, ловишь ui_inventory в info_callback

- получаешь его окно через level.main_input_receiver()

- аттачишь свое окно AttachChild

и

 

On 2/3/2019 at 1:54 PM, Graff46 said:

запускаем диалог

level.start_stop_menu(dlg, true/false)

или так

dlg:GetHolder():start_stop_menu(dlg, true/false)

разницы никакой, это фактически одна и та же функция

 

Добавляю окно (+ статик с текстурой для заметности), приклеиваю к инвентарю: никакой реакции.

Вывожу то же окно отдельно через level.start_stop_menu() – условная кнопка отображается при открытом инвентаре, но игра вылетает через пару секунд.

Вывожу окно через GetHolder() – вылет уже при обращении к инвентарю, ошибка "attempt to index a nil value".

Spoiler

[bind_stalker.script]
function actor_binder:info_callback(npc, info_id)

	if info_id == "ui_inventory" then
		local w = CUIScriptWnd()
		w:Init(0, 0, 70, 25)

		local b = CUIStatic()
		b:Init(0, 0, 70, 25)
		b:InitTexture("ui_button_ordinary_d")
		b:SetStretchTexture(true)
		w:AttachChild(b)

		-- local inv = level.main_input_receiver()
		-- inv:AttachChild(w)

		level.start_stop_menu(w, true)
		-- w:GetHolder():start_stop_menu(w, true)
	end

 

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий

1. Значит, не только CUIStatic() от этого страдает…

2. Осталась проблема с инвентарем: как приклеить новое окно именно к нему?

Строки

        local inv = level.main_input_receiver()
        inv:AttachChild(w)

никакого эффекта не дают.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
Только что, Norman Eisenherz сказал:

не только CUIStatic() от этого страдает…

Любой GUI-класс от этого "страдает".

Правильно надо обращаться с ними. Аттач, детач, и обращение в nil, в правильном порядке делать, ничего не пропуская. Тогда ничего не вылетает.

В туториалах malandrinus-a это было подробно описано еще черт-знает-когда.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver Видел расширенное описание оконных классов из lua_help и обсуждение с Garry_Geller по поводу удаления дочерних окон. Это то, что понимается под "подробно" или еще какая-то информация есть? Может, где-то есть уроки уровня "окно с одной кнопкой", а не просто ссылка "смотри numpad"?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
Только что, Norman Eisenherz сказал:

обсуждение с Garry_Geller

Я понятия не имею, кто это, и о каком обсуждении идет речь.

Смотрим шапку темы "справочник по функциям и классам".

Находим там это и это.

Что еще может понадобиться и для чего? Я не знаю. Мне в свое время, этих двух постов, хватило для того чтобы свой скриптовый инвентарь изваять с нуля.

 

Ну и кстати там далее ровно твоя же задача обсуждается. А посты за 2010 год.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

1. При инициализации оконного класса к __init() добавляется super(). Что дает такая конструкция?

 

2. В обсуждении Malandrinus / Garry_Geller описан вылет при удалении кнопки, который обходится присоединением кнопки к промежуточному окну. Это особенность версии ТЧ 1.0004? Под патчем 1.0006 кнопка успешно обнуляется сразу после отсоединения от инвентаря и не вызывает в дальнейшем вылетов при перезагрузке.

Spoiler

function on_hide()
    inventory_wnd:DetachChild(attached_btn)
    rec_wnd:AttachChild(attached_btn)	-- для чего нужно это действие?
    attached_btn = nil
    rec_wnd = nil
end

 

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
Только что, Norman Eisenherz сказал:

Что дает такая конструкция?

Вызов конструктора класса-родителя.

 

Только что, Norman Eisenherz сказал:

который обходится присоединением кнопки к промежуточному окну.

Не припоминаю таких манипуляций в своих интерфейсах. А начинался мой мод вообще-то на 1.0004. Так что это видимо, костыль для более ранних версий или чего-то более иного.

В 1.0004 и всем что позднее, не было нужды в таких действиях.


function on_hide()
    inventory_wnd:DetachChild(attached_btn)
    attached_btn = nil -- убрал ненужные действия - по моему, должно быть так.
	-- И на 1,0004 / 1,0006 это совершенно точно, работало.
end

 

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Norman Eisenherz, вот тут

https://github.com/dsh2dsh/op2ogse/blob/85185bb9cefb3eb78fbb27537c21b2cfc75993c4/gamedata/scripts/dsh/dsh_skat15_control.script#L23

присоединяется кнопка к инвентарю в net_spawn и отсоединяется в net_destroy. Окно инвентаря сущестует постоянно, даже когда инвентарь закрыт.

Ссылка на комментарий
13 часов назад, Norman Eisenherz сказал:

Строки

        local inv = level.main_input_receiver()
        inv:AttachChild(w)

никакого эффекта не дают.

Сделай ещё w:Show(true)

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

@naxac Приклеил кнопку к инвентарю напрямую, а не через отдельное окно – отображается сразу, без Show(true).

@dsh Каким образом ловится ссылка на скрытое окно инвентаря и можно ли такое повторить в ТЧ?

  • Нравится 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий

Подскажите, существует ли прямая скриптовая проверка, в зуме ли оружие (ТЧ 1.0006)? Или только через net_packet?

Здесь могла быть ваша реклама.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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