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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

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

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
44 минуты назад, Graff46 сказал:

можно ли тест перенести или урезать?

 А перенос стоки заюзать не?

\\n

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

@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?

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

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

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

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

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

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

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

Войти

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

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

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