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

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

Доброе утро. Глюки я вылечил:) Но появился вопрос как правильно использовать функцию 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 пользователей онлайн

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