Перейти к содержанию

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

Доброе утро. Глюки я вылечил:) Но появился вопрос как правильно использовать функцию tes3ui.showInventorySelectMenu

Идея такая, нужно показать в контейнере только те ингредиенты которые имеют определенный магический эффект, но у меня ничего не заработало. Если можно, сделайте пример.

И еще, можно ли добавить закладки в инвентарь контейнера? И если да, то будут ли они прокручиваться, если их много? И как их добавить?

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, borivit сказал:

 tes3ui.showInventorySelectMenu. Идея такая, нужно показать в контейнере только те ингредиенты которые имеют определенный магический эффект

В доках есть примеры использования. Фильтр можно сделать так (это просто пример, я не проверял):

local function ingredientEffectFilter(e)
    if e.item.objectType == tes3.objectType.ingredient then
        local effects = e.item.effects
        local fire = tes3.effect.fireDamage
        for i = 1,#effects do
          if effects[i] == fire then return true end
        end
    end
    return false
end

 

10 часов назад, borivit сказал:

можно ли добавить закладки в инвентарь контейнера? И если да, то будут ли они прокручиваться, если их много? И как их добавить?

Вкладки в инвенрать можно посмотреть как пример в моде UI Expansion, но помнится, работал он плохо

Изменено пользователем mintmike
Ссылка на комментарий
Поделиться на другие сайты

Цитата

В доках есть примеры использования. Фильтр можно сделать так (это просто пример, я не проверял):

В доках оч. скупое описание того как сделать такой фильтр, попробую вашу идею:)

Сегодня пытался запустить мой плагин на сборке MFR3.2, но так и не смог заставить его сохранять данные и чтобы он не выдавал эту ошибку: Error in event callback: Data Files\MWSE\mods\rzz_cwa\main.lua:69: attempt to call field 'hasSpell' (a nil value)

local function addRZZSpell() --добавление заклинания RZZ
	local hasSpell = tes3.hasSpell({ reference = tes3.player, spell = "A_RZZ_Enter" }) --ругается на эту строку

	if (not hasSpell) then 
		tes3.addSpell({ reference = tes3.player, spell = "A_RZZ_Enter" })
	end
end

И что самое итересное - на стандартной игре все работает великолепно. Я ничего не понимаю, может у вас возникнут идеи почему так выходит...

P.S.: Я так понял что данные не сохраняет из-за этой ошибки, но в чем там ошибка...

Изменено пользователем borivit
Ссылка на комментарий
Поделиться на другие сайты

Значит, я не зря сегодня скачал последнюю версию MFR:) завтра буду пробовать

P.S.: в последней версии все работает:)

Изменено пользователем borivit
Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте, я снова с вопросом:)

У меня не создаются кнопки в скрол панели.

Это на базе вашей функции создающей окна. 

Просто в конце ваше функции добавил этот код. 

Спойлер
    m.addBlockPane = function(n)
        m.block[n]:createThinBorder{}
        m.block[n].flowDirection = "top_to_bottom"
        m.block[n].width = 250
        m.block[n].height = 500
        m.block[n].childAlignX = 0.5
        m.block[n].childAlignY = 0.5
    end
    
    m.addScrollPane = function(n) 
      m.block[n] = m.menu:createVerticalScrollPane{}
      m.block[n].height = 400
    end

    m.addScrollPaneBtn = function(n, buttext, func)

        local paneButton = m.block[n]:createButton
        {
            id = tes3ui.registerID(buttext),
            text = buttext
        }
        paneButton:register("mouseClick", func)
    end

 

А это я запускаю окно:

Спойлер
MenuRZZ_4 = function() -- меню ингредиентов
  local width = 360
  myMenuRZZ = win.new('myMenuRZZ')                -- создадим новое окно
  myMenuRZZ.addBlock(1, width, "Чего желаеете?")  -- добавим блок номер 1
  myMenuRZZ.addBlock(2, width, "")-- добавим блок номер 2
  myMenuRZZ.addBlockPane(2)
  myMenuRZZ.addScrollPane(2)
  myMenuRZZ.addScrollPaneBtn(2, 'Фильтровать', filter)  
  myMenuRZZ.addScrollPaneBtn(2, 'Открыть все', abrirRZZ_3)
  myMenuRZZ.addBlock(3, width, "")
  myMenuRZZ.addBlockButton(3, 'Отмена', myMenuRZZ.hide) -- добавим в блок номер 3 кнопку назад
  myMenuRZZ.show()                            -- а теперь выведем окно
end

 

Это функция которая должна вывести окно со скрол панелькой, но выводится только окно, в нем есть createThinBorder, createVerticalScrollPane - это тоже вроде есть в виде линии т.е. пустой список и соответственно кнопок нет. Я пробовал createTextSelect вместо createButton, но результат тот же. Может у меня есть ошибка. В логах ошибок нет.

Изменено пользователем borivit
Ссылка на комментарий
Поделиться на другие сайты

В 02.10.2023 в 12:12 PM, borivit сказал:

У меня не создаются кнопки в скрол панели.

Отвечаю сам себе, может кому пригодится:)

Сделал вот такую функцию на базе той что написал mintmike:

Спойлер
local this = {}

this.new = function(name)      -- функция, создающая новое окно и возвращающая нам его данные

	local m = {                    -- данные нашего нового окна
	 id = tes3ui.registerID(name),
	 ltext = ' Enter: ',
	 block = {[1] = ''},
	}
	m.menu = tes3ui.createMenu{id = m.id, fixedFrame = true}
	m.menu.alpha = 1.0             -- нулевая прозрачность

	m.show = function()            -- отобразить окно
	  m.menu:updateLayout()
	  tes3ui.enterMenuMode(m.id)
	end

	m.hide = function()            -- спрятать окно
	  if not tes3ui.findMenu(m.id) then return end
	  m.menu:destroy()
	  if tes3ui.menuMode then tes3ui.leaveMenuMode() end
	end

	m.addBlock = function(n, width, ltext)  -- добавить блок с номером n, шириной [и необязательным текстом надписи]
	  m.block[n] = m.menu:createBlock{}
	  m.block[n].width = width or 360
	  m.block[n].autoHeight = true
	  m.block[n].childAlignX = 0.5
	  m.block[n].childAlignY = 0.5
	  m.block[n].flowDirection = 'top_to_bottom'
	  
	  if ltext then -- если указан 3 параметр - текст надписи, то добавляем её
		m.block[n]:createLabel {text = ltext}
	  end
	end

	m.addBlockButton = function(n, buttext, func)  -- добавить в блок номер n кнопку с текстом buttext
	  local button = m.block[n]:createButton
	  {
		id = tes3ui.registerID(buttext),
		text = buttext,
	  }
	  button:register("mouseClick", func)  -- при нажатии на кнопку будет вызываться функция func
	end
	
	m.addScrollPane = function(n)  -- добавить скрол-панель в блок с номером n
		local ThinBorder = m.block[n]:createThinBorder{}
		ThinBorder.flowDirection = "top_to_bottom"
		ThinBorder.width = width or 150
		ThinBorder.height = height or 200
		ThinBorder.childAlignX = 0.5
		ThinBorder.childAlignY = 0.5
		
		paneList = ThinBorder:createVerticalScrollPane{}
		paneList.widthProportional = 1.0
		paneList.height = height or 200
	end

	m.addScrollPaneBtn = function(buttext, func) --Добавляем кнопку в список

		local paneButton = paneList:createButton
		{
			id = tes3ui.registerID(buttext),
			text = buttext
		}
		paneButton:register("mouseClick", func)  -- при нажатии на кнопку будет вызываться функция func
	end

	m.addScrollPaneTxt = function(buttext, func) --Добавляем текстовую кнопку в список

		local paneTextSelect = paneList:createTextSelect
		{
			id = tes3ui.registerID(buttext),
			text = buttext
		}
		paneTextSelect:register("mouseClick", func)  -- при нажатии на кнопку будет вызываться функция func
	end
	
  return m  -- возвращаем созданную таблицу с данными и функциями для нашего нового окна
end

return this

 

Теперь можно делать списки из кнопок:)

Изменено пользователем borivit
Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Здравствуйте, у меня возникает странная ошибка при перемещении вещей из инвентаря игрока в контейнер. Вот код:

local mumia_1 = tes3.getObject("A_RZZ_mumia_1")

local equip = {} -- создаём новую пустую таблицу
for i, node in pairs(tes3.player.object.equipment) do
	-- запоминаем id и ссылки на надетые на ГГ вещи
	equip[node.object.id] = node
end

for i, stack in pairs(tes3.player.object.inventory) do
	if (stack.object) then
		
	local obj_id = stack.object.id
    	
    	if (equip[obj_id] or string.find(obj_id,'Gold_')) then 
      		goto continue 
    	end
    
	tes3.transferItem{from=tes3.player, to=mumia_1.id, item=obj_id, count=stack.count, playSound=true}
    end
  	::continue::
end

Вот ошибка:

Цитата

Morrowind has raised a warning with a lua stack trace: Not able to find Upper Leg part in c_m_pants_expensive_1_u_ul.
stack traceback:
    [C]: in function 'transferItem'
    .\Data Files\MWSE\mods\rzz_cwa\inventorysort.lua:75: in function 'cosort'
    .\Data Files\MWSE\mods\rzz_cwa\main.lua:166: in function <.\Data Files\MWSE\mods\rzz_cwa\main.lua:165>

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

P.S.: Когда меняю файл меша, то ошибка исчезает...очень странно

P.S.2: Жаль что тема умерла...кстати с addItem вообще выкидывает из игры и даже не ясно почему.

Изменено пользователем borivit
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

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