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

borivit

Граждане
  • Постов

    20
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные borivit

  1. 18 минут назад, Марк К. Марцелл сказал:

    1. Справа вверху - "Управление контентом" - "Добавить дополнение".
    2. Забиваете основные данные - создаётся страничка с плагином.
    3. На странице плагина сверху вкладки - Общая информация, галерея, файлы - в "Файлы" можете добавить всё, что нужно скачать игроку.

    Благодарю 

  2. 6 часов назад, Марк К. Марцелл сказал:

    Оригинальное дополнение не включено в репак. Будет версия форта от команды ТР - когда они его закончат.

    Благодарю, получается я искал то чего нет:)

  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 вообще выкидывает из игры и даже не ясно почему.

  4. В 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

     

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

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

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

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

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

    Спойлер
        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, но результат тот же. Может у меня есть ошибка. В логах ошибок нет.

  6. Цитата

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

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

    Сегодня пытался запустить мой плагин на сборке 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.: Я так понял что данные не сохраняет из-за этой ошибки, но в чем там ошибка...

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

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

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

  8. Цитата

    Благодарю:)

    Я пытаюсь поставить пометку и после телепортировать главного героя, но пометка телепортируется вместе с ним. Как это можно исправить?

     

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

    Я пытаюсь поставить пометку и после телепортировать главного героя, но пометка телепортируется вместе с ним. Как это можно исправить?

    Вопрос снят:) Сделал свою пометку и теперь не портит стандартную пометку.

    Теперь мой плагин полностью работает на lua за исключением запрета активации некоторых предметов т.к. это удобнее через конструктор.

    Благодарю вас за помощь:) Если возникнут еще вопросы, то буду писать сюда:)

    P.S.: Интересный глюк нарисовался, я когда открываю контейнер через свое меню и беру оттуда предмет, то после закрытия контейнера мое меню уже не открывается, а просто открывается контейнер, а когда возвращаешь предмет на место, то после закрытия контейнера опять начинает открывается мое меню.

  9. Рассказываю что у меня получилось:)

    1. Заменить меню контейнера на свое при его активации 

    local function eActivate(e)
        if (e.target.object.id == "A_RZZ_chest_tomb") then
    		if (not RZZ_activate) then
    			timer.delayOneFrame(function()
    				if tes3ui.menuMode then tes3ui.leaveMenuMode() end --закрываем контейнер
    				myMenuShow() --Открываем меню
    			end)
    			return false
    		end
    		RZZ_activate = nil --метка активации контейнера
    	end
    end
    event.register("activate", eActivate)

    2. Открыть контейнер при нажатии кнопки своего меню

    local function abrirRZZ()
    	local tomb = tes3.getReference("A_RZZ_chest_tomb")
    	cerrarMenu() --закрываем свое меню
    	timer.delayOneFrame(function()
    		RZZ_activate = true --метка активации контейнера
    		tes3.player:activate(tomb) --открываем контейнер
    	end)
    end

    3. Убрать helpMenu т.е. окошко всплывающее при наведении прицела на предмет

    local function onUIObjectTooltip(e)
    	if string.find(e.reference.id,'muestra') then --выборка нужных предметов
    		e.tooltip.absolutePosAlignX = 4
    		e.tooltip.absolutePosAlignY = 4
    	else
    		e.tooltip.absolutePosAlignX = nil
    		e.tooltip.absolutePosAlignY = nil
    	end
    end
    event.register("uiObjectTooltip", onUIObjectTooltip)

    Теперь оталось выяснить как отследить запуск заклинания, как запустить проклятие, как остановить выполнение заклинания, как телепортироваться в нужное место и тогда я свой плагин полностью переведу на lua:)

  10. Цитата

    Например, перемещать или сделать disable предметы, а по нажатии кнопки снова переместить или enable. Кстати, при удалении вещей из контейнера/инвентаря, лучше делать это в следующем кадре (меньше шансов вылета на рабочий стол):

    Это не совсем то что я имел ввиду. Видимо я не правильно изложил вопрос. Мне нужно при активации контейнера получить вместо окна с содержимым контейнера, мое окно с кнопками.

    Я здесь нашел такую функцию:

    local tomb = tes3.getReference("A_RZZ_chest_tomb") --контейнер
    tes3.player:activate(tomb) --открывает содержиме контейнера

    это работает как activate в tes3 конструкторе, но у меня не получается запретить показ или закрыть меню с содержимым при стандартной активации т.е. как отследить меню контейнера при его активации и сразу же его закрыть? или может можно его запретить по событию? Кстати -> myObject:clearActionFlag(flagIndex)  - это не помогло.

    И я никак не могу понять как правильно заполнять поле buttons и callbackParams

    tes3ui.showMessageMenu({ id = ..., buttons = ..., callbackParams = ..., cancels = ..., cancelText = ..., cancelCallback = ..., header = ..., message = ..., customBlock = ..., page = ..., pageSize = ... })
     

    Цитата

    Как удобно распечатать таблицу, чтобы посмотреть все содержимое, все ключи и значения? Есть удобная функция deepToString(value, maxDepth) для распечатки в лог содержимого таблицы (взято из OpenMW util.lua)

    Благодарю, еще не попробовал, но обязательно испытаю:)

    Как работает menu:destroy? Я почему-то не могу найти описания. Я заметил что когда запущено мое меню и меню контейнера, то если я закрываю свое меню, закрывается и меню контейнера.

    P.S.: я нашел описание myObject:destroy(), но мне это не очень помогло, я так понимаю что вместо myObject нужна переменная с объектом окна, но как найти id окна контейнера, а потом получить его объект я пока незнаю или может я не в ту сторону копаю.

  11. В 9/18/2023 в 8:35 PM, mintmike сказал:

    Не находит armorWeightClass, должно быть просто weightClass 

    Завтра буду дома, попробую. Но у меня такая же история и с weaponType хотя здесь проще т.к. почти все id имеют указание на тип оружия и можно просто искать нужное через id.

    P.S.: А можно ли как-то вытянуть все значения и ключи относящиеся к объекту? Чтобы можно было увидеть какие есть у объекта свойства и соответственно тогда будет понятно как их узнать.

    P.S.S.: Только что до читался что через for  можно посмотреть все ключи и значения. Завтра попробую. О результатах напишу.

     

    Всех приветствую.

    С weightClass заработало:) а для оружия нужно писать просто type.

    Это не совсем по теме, но может вы знаете как отключить показ названия и характеристик оружия. Я доступ отключил, а название и характеристики не получается отключить.

    Цитата

    P.S.S.: Только что до читался что через for можно посмотреть все ключи и значения. Завтра попробую. О результатах напишу.

    Ничего с этой затеей не вышло т.к. pairs нельзя запускать внутри pairs.

    У меня есть еще одна маленькая проблемка. Хочу сделать создание объекта при активации другого объекта, а потом при активации того же объекта удалить созданный объект, но lua почему-то ругается на createReference хотя 1н раз объект создается и 1н раз он удаляется, а потом уже ничего не создается.

    local function basurero(e)
      if (e.target.object.id == "A_RZZ_active_bell_01") then
        if (saco == nil) then
          local cell = tes3.getPlayerCell()
          local vector_pos = tes3vector3.new(-346, 250, 25)
          local vector_orient = tes3vector3.new(0, 0, 25)
          basura = tes3.createReference{object="A_RZZ_basura", position=vector_pos, orientation=vector_orient, cell=cell}
          saco = true
        else
          saco = nil
          tes3.deleteObject(basura)
        end
      end
    end
    event.register("activate", basurero)

    Ошибку выдает такую: invalid 'object' parameter privided 

     

    В 9/19/2023 в 7:47 PM, borivit сказал:

    Ошибку выдает такую: invalid 'object' parameter privided 

    Я так понимаю что удаляется полностью объект и потому выдает эту ошибку. В tes3 конструкторе для точно такой же операции(placeAtPC) я использовал disable и setdelete, а здесь я нашел только disable, а setdelete нет или может я не увидел.

    P.S.: я нашел в tes3reference  - myObject:delete() там пишут что ссылка помечается как удаленная и потом полностью удаляется - это похоже на setdelete в tes3. Завтра буду пробовать.

     

    В 9/19/2023 в 9:51 PM, borivit сказал:

    P.S.: я нашел в tes3reference  - myObject:delete() там пишут что ссылка помечается как удаленная и потом полностью удаляется - это похоже на setdelete в tes3. Завтра буду пробовать.

    Это сработало.  Вместо tes3.deleteObject(basura) я вставил basura:delete() и теперь все работает

    Как через lua запретить показ содержимого контейнера, а потом показать это содержимое после нажатия кнопки в меню?

  12. Здравствуйте, если еще есть кто живой в этой теме, то может быть он мне поможет разобраться.

     

    Я перебираю объекты в инвентаре, выбираю там броню и пытаюсь узнать класс брони(легкая, средняя, тяжелая), но у меня в результате выдает nil. Может кто может мне объяснить что я делаю не так.

    for i, stack in pairs(tes3.player.object.inventory) do
      if (stack.object) then
        if (stack.object.objectType == tes3.objectType.armor) then
          tes3.messageBox{ message = "armorClass=" .. tostring(stack.object.armorWeightClass)}
        end
      end
    end

     

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