mirror of
				https://github.com/OTCv8/otclientv8.git
				synced 2025-10-31 10:56:24 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			1324 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			1324 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local window = nil
 | |
| 
 | |
| local appearanceGroup = nil
 | |
| local colorModeGroup = nil
 | |
| local colorBoxGroup = nil
 | |
| 
 | |
| local floor = nil
 | |
| local movementCheck = nil
 | |
| local showFloorCheck = nil
 | |
| local showOutfitCheck = nil
 | |
| local showMountCheck = nil
 | |
| local showWingsCheck = nil
 | |
| local showAuraCheck = nil
 | |
| local showShaderCheck = nil
 | |
| local showBarsCheck = nil
 | |
| 
 | |
| local colorBoxes = {}
 | |
| local currentColorBox = nil
 | |
| 
 | |
| ignoreNextOutfitWindow = 0
 | |
| local floorTiles = 7
 | |
| local settingsFile = "/settings/outfit.json"
 | |
| local settings = {}
 | |
| 
 | |
| local tempOutfit = {}
 | |
| local ServerData = {
 | |
|   currentOutfit = {},
 | |
|   outfits = {},
 | |
|   mounts = {},
 | |
|   wings = {},
 | |
|   auras = {},
 | |
|   shaders = {},
 | |
|   healthBars = {},
 | |
|   manaBars = {}
 | |
| }
 | |
| 
 | |
| local AppearanceData = {
 | |
|   "preset",
 | |
|   "outfit",
 | |
|   "mount",
 | |
|   "wings",
 | |
|   "aura",
 | |
|   "shader",
 | |
|   "healthBar",
 | |
|   "manaBar"
 | |
| }
 | |
| 
 | |
| function init()
 | |
|   connect(
 | |
|     g_game,
 | |
|     {
 | |
|       onOpenOutfitWindow = create,
 | |
|       onGameEnd = destroy
 | |
|     }
 | |
|   )
 | |
| end
 | |
| 
 | |
| function terminate()
 | |
|   disconnect(
 | |
|     g_game,
 | |
|     {
 | |
|       onOpenOutfitWindow = create,
 | |
|       onGameEnd = destroy
 | |
|     }
 | |
|   )
 | |
|   destroy()
 | |
| end
 | |
| 
 | |
| function onMovementChange(checkBox, checked)
 | |
|   previewCreature:setAnimate(checked)
 | |
|   settings.movement = checked
 | |
| end
 | |
| 
 | |
| function onShowFloorChange(checkBox, checked)
 | |
|   if checked then
 | |
|     floor:show()
 | |
| 
 | |
|     -- Magic!
 | |
|     local delay = 50
 | |
|     periodicalEvent(
 | |
|       function()
 | |
|         if movementCheck:isChecked() then
 | |
|           local direction = previewCreature:getDirection()
 | |
|           if direction == Directions.North then
 | |
|             local newMargin = floor:getMarginTop() + 8
 | |
|             floor:setMarginTop(newMargin)
 | |
|             if newMargin >= 96 then
 | |
|               for i = 1, floorTiles do
 | |
|                 floor:moveChildToIndex(floor:getChildByIndex(floorTiles * floorTiles), 1)
 | |
|               end
 | |
|               floor:setMarginTop(32)
 | |
|             end
 | |
|           elseif direction == Directions.South then
 | |
|             local newMargin = floor:getMarginBottom() + 8
 | |
|             floor:setMarginBottom(newMargin)
 | |
|             if newMargin >= 64 then
 | |
|               for i = 1, floorTiles do
 | |
|                 floor:moveChildToIndex(floor:getChildByIndex(1), floorTiles * floorTiles)
 | |
|               end
 | |
|               floor:setMarginBottom(0)
 | |
|             end
 | |
|           elseif direction == Directions.East then
 | |
|             local newMargin = floor:getMarginRight() + 8
 | |
|             floor:setMarginRight(newMargin)
 | |
|             if newMargin >= 64 then
 | |
|               floor:setMarginRight(0)
 | |
|             end
 | |
|           elseif direction == Directions.West then
 | |
|             local newMargin = floor:getMarginLeft() + 8
 | |
|             floor:setMarginLeft(newMargin)
 | |
|             if newMargin >= 64 then
 | |
|               floor:setMarginLeft(0)
 | |
|             end
 | |
|           end
 | |
|         else
 | |
|           floor:setMargin(0)
 | |
|         end
 | |
|       end,
 | |
|       function()
 | |
|         return window and floor and showFloorCheck:isChecked()
 | |
|       end,
 | |
|       delay,
 | |
|       delay
 | |
|     )
 | |
|   else
 | |
|     floor:hide()
 | |
|   end
 | |
| 
 | |
|   settings.showFloor = checked
 | |
| end
 | |
| 
 | |
| function onShowMountChange(checkBox, checked)
 | |
|   settings.showMount = checked
 | |
|   updatePreview()
 | |
| end
 | |
| 
 | |
| function onShowOutfitChange(checkBox, checked)
 | |
|   settings.showOutfit = checked
 | |
|   showMountCheck:setEnabled(settings.showOutfit)
 | |
|   showWingsCheck:setEnabled(settings.showOutfit)
 | |
|   showAuraCheck:setEnabled(settings.showOutfit)
 | |
|   showShaderCheck:setEnabled(settings.showOutfit)
 | |
|   showBarsCheck:setEnabled(settings.showOutfit)
 | |
|   updatePreview()
 | |
| end
 | |
| 
 | |
| function onShowAuraChange(checkBox, checked)
 | |
|   settings.showAura = checked
 | |
|   updatePreview()
 | |
| end
 | |
| 
 | |
| function onShowWingsChange(checkBox, checked)
 | |
|   settings.showWings = checked
 | |
|   updatePreview()
 | |
| end
 | |
| 
 | |
| function onShowShaderChange(checkBox, checked)
 | |
|   settings.showShader = checked
 | |
|   updatePreview()
 | |
| end
 | |
| 
 | |
| function onShowBarsChange(checkBox, checked)
 | |
|   settings.showBars = checked
 | |
|   updatePreview()
 | |
| end
 | |
| 
 | |
| local PreviewOptions = {
 | |
|   ["showFloor"] = onShowFloorChange,
 | |
|   ["showOutfit"] = onShowOutfitChange,
 | |
|   ["showMount"] = onShowMountChange,
 | |
|   ["showWings"] = onShowWingsChange,
 | |
|   ["showAura"] = onShowAuraChange,
 | |
|   ["showShader"] = onShowShaderChange,
 | |
|   ["showBars"] = onShowBarsChange
 | |
| }
 | |
| 
 | |
| function create(currentOutfit, outfitList, mountList, wingList, auraList, shaderList, healthBarList, manaBarList)
 | |
|   if ignoreNextOutfitWindow and g_clock.millis() < ignoreNextOutfitWindow + 1000 then
 | |
|     return
 | |
|   end
 | |
| 
 | |
|   if window then
 | |
|     destroy()
 | |
|   end
 | |
| 
 | |
|   if currentOutfit.shader == "" then
 | |
|     currentOutfit.shader = "outfit_default"
 | |
|   end
 | |
| 
 | |
|   loadSettings()
 | |
| 
 | |
|   ServerData = {
 | |
|     currentOutfit = currentOutfit,
 | |
|     outfits = outfitList,
 | |
|     mounts = mountList,
 | |
|     wings = wingList,
 | |
|     auras = auraList,
 | |
|     shaders = shaderList,
 | |
|     healthBars = healthBarList,
 | |
|     manaBars = manaBarList
 | |
|   }
 | |
| 
 | |
|   window = g_ui.displayUI("outfitwindow")
 | |
| 
 | |
|   floor = window.preview.panel.floor
 | |
|   for i = 1, floorTiles * floorTiles do
 | |
|     g_ui.createWidget("FloorTile", floor)
 | |
|   end
 | |
|   floor:hide()
 | |
| 
 | |
|   for _, appKey in ipairs(AppearanceData) do
 | |
|     updateAppearanceText(appKey, "None")
 | |
|   end
 | |
| 
 | |
|   previewCreature = window.preview.panel.creature
 | |
| 
 | |
|   if settings.currentPreset > 0 then
 | |
|     local preset = settings.presets[settings.currentPreset]
 | |
|     tempOutfit = table.copy(preset.outfit)
 | |
| 
 | |
|     updateAppearanceText("preset", preset.title)
 | |
|   else
 | |
|     tempOutfit = currentOutfit
 | |
|   end
 | |
| 
 | |
|   updatePreview()
 | |
| 
 | |
|   updateAppearanceTexts(currentOutfit)
 | |
| 
 | |
|   if g_game.getFeature(GamePlayerMounts) then
 | |
|     local isMount = g_game.getLocalPlayer():isMounted()
 | |
|     if isMount then
 | |
|       window.configure.mount.check:setEnabled(true)
 | |
|       window.configure.mount.check:setChecked(true)
 | |
|     else
 | |
|       window.configure.mount.check:setEnabled(currentOutfit.mount > 0)
 | |
|       window.configure.mount.check:setChecked(isMount and currentOutfit.mount > 0)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if currentOutfit.addons == 3 then
 | |
|     window.configure.addon1.check:setChecked(true)
 | |
|     window.configure.addon2.check:setChecked(true)
 | |
|   elseif currentOutfit.addons == 2 then
 | |
|     window.configure.addon1.check:setChecked(false)
 | |
|     window.configure.addon2.check:setChecked(true)
 | |
|   elseif currentOutfit.addons == 1 then
 | |
|     window.configure.addon1.check:setChecked(true)
 | |
|     window.configure.addon2.check:setChecked(false)
 | |
|   end
 | |
|   window.configure.addon1.check.onCheckChange = onAddonChange
 | |
|   window.configure.addon2.check.onCheckChange = onAddonChange
 | |
| 
 | |
|   configureAddons(currentOutfit.addons)
 | |
| 
 | |
|   movementCheck = window.preview.panel.movement
 | |
|   showFloorCheck = window.preview.options.showFloor.check
 | |
|   showOutfitCheck = window.preview.options.showOutfit.check
 | |
|   showMountCheck = window.preview.options.showMount.check
 | |
|   showWingsCheck = window.preview.options.showWings.check
 | |
|   showAuraCheck = window.preview.options.showAura.check
 | |
|   showShaderCheck = window.preview.options.showShader.check
 | |
|   showBarsCheck = window.preview.options.showBars.check
 | |
| 
 | |
|   movementCheck.onCheckChange = onMovementChange
 | |
|   for _, option in ipairs(window.preview.options:getChildren()) do
 | |
|     option.check.onCheckChange = PreviewOptions[option:getId()]
 | |
|   end
 | |
| 
 | |
|   movementCheck:setChecked(settings.movement)
 | |
|   showFloorCheck:setChecked(settings.showFloor)
 | |
| 
 | |
|   if not settings.showOutfit then
 | |
|     showMountCheck:setEnabled(false)
 | |
|     showWingsCheck:setEnabled(false)
 | |
|     showAuraCheck:setEnabled(false)
 | |
|     showShaderCheck:setEnabled(false)
 | |
|     showBarsCheck:setEnabled(false)
 | |
|   end
 | |
| 
 | |
|   showOutfitCheck:setChecked(settings.showOutfit)
 | |
|   showMountCheck:setChecked(settings.showMount)
 | |
|   showWingsCheck:setChecked(settings.showWings)
 | |
|   showAuraCheck:setChecked(settings.showAura)
 | |
|   showShaderCheck:setChecked(settings.showShader)
 | |
|   showBarsCheck:setChecked(settings.showBars)
 | |
| 
 | |
|   colorBoxGroup = UIRadioGroup.create()
 | |
|   for j = 0, 6 do
 | |
|     for i = 0, 18 do
 | |
|       local colorBox = g_ui.createWidget("ColorBox", window.appearance.colorBoxPanel)
 | |
|       local outfitColor = getOutfitColor(j * 19 + i)
 | |
|       colorBox:setImageColor(outfitColor)
 | |
|       colorBox:setId("colorBox" .. j * 19 + i)
 | |
|       colorBox.colorId = j * 19 + i
 | |
| 
 | |
|       if colorBox.colorId == currentOutfit.head then
 | |
|         currentColorBox = colorBox
 | |
|         colorBox:setChecked(true)
 | |
|       end
 | |
|       colorBoxGroup:addWidget(colorBox)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   colorBoxGroup.onSelectionChange = onColorCheckChange
 | |
| 
 | |
|   appearanceGroup = UIRadioGroup.create()
 | |
|   appearanceGroup:addWidget(window.appearance.settings.preset.check)
 | |
|   appearanceGroup:addWidget(window.appearance.settings.outfit.check)
 | |
|   appearanceGroup:addWidget(window.appearance.settings.mount.check)
 | |
|   appearanceGroup:addWidget(window.appearance.settings.aura.check)
 | |
|   appearanceGroup:addWidget(window.appearance.settings.wings.check)
 | |
|   appearanceGroup:addWidget(window.appearance.settings.shader.check)
 | |
|   appearanceGroup:addWidget(window.appearance.settings.healthBar.check)
 | |
|   appearanceGroup:addWidget(window.appearance.settings.manaBar.check)
 | |
| 
 | |
|   appearanceGroup.onSelectionChange = onAppearanceChange
 | |
|   appearanceGroup:selectWidget(window.appearance.settings.preset.check)
 | |
| 
 | |
|   colorModeGroup = UIRadioGroup.create()
 | |
|   colorModeGroup:addWidget(window.appearance.colorMode.head)
 | |
|   colorModeGroup:addWidget(window.appearance.colorMode.primary)
 | |
|   colorModeGroup:addWidget(window.appearance.colorMode.secondary)
 | |
|   colorModeGroup:addWidget(window.appearance.colorMode.detail)
 | |
| 
 | |
|   colorModeGroup.onSelectionChange = onColorModeChange
 | |
|   colorModeGroup:selectWidget(window.appearance.colorMode.head)
 | |
| 
 | |
|   window.preview.options.showMount:setVisible(g_game.getFeature(GamePlayerMounts))
 | |
|   window.preview.options.showWings:setVisible(g_game.getFeature(GameWingsAndAura))
 | |
|   window.preview.options.showAura:setVisible(g_game.getFeature(GameWingsAndAura))
 | |
|   window.preview.options.showShader:setVisible(g_game.getFeature(GameOutfitShaders))
 | |
| 
 | |
|   window.appearance.settings.mount:setVisible(g_game.getFeature(GamePlayerMounts))
 | |
|   window.appearance.settings.wings:setVisible(g_game.getFeature(GameWingsAndAura))
 | |
|   window.appearance.settings.aura:setVisible(g_game.getFeature(GameWingsAndAura))
 | |
|   window.appearance.settings.shader:setVisible(g_game.getFeature(GameOutfitShaders))
 | |
|   window.appearance.settings.healthBar:setVisible(g_game.getFeature(GameHealthInfoBackground))
 | |
|   window.appearance.settings.manaBar:setVisible(g_game.getFeature(GameHealthInfoBackground))
 | |
| 
 | |
|   window.configure.mount:setVisible(g_game.getFeature(GamePlayerMounts))
 | |
| 
 | |
|   window.listSearch.search.onKeyPress = onFilterSearch
 | |
| end
 | |
| 
 | |
| function destroy()
 | |
|   if window then
 | |
|     window:destroy()
 | |
|     window = nil
 | |
| 
 | |
|     floor = nil
 | |
|     movementCheck = nil
 | |
|     showFloorCheck = nil
 | |
|     showOutfitCheck = nil
 | |
|     showMountCheck = nil
 | |
|     showWingsCheck = nil
 | |
|     showAuraCheck = nil
 | |
|     showShaderCheck = nil
 | |
|     showBarsCheck = nil
 | |
| 
 | |
|     colorBoxes = {}
 | |
|     currentColorBox = nil
 | |
| 
 | |
|     appearanceGroup:destroy()
 | |
|     appearanceGroup = nil
 | |
|     colorModeGroup:destroy()
 | |
|     colorModeGroup = nil
 | |
|     colorBoxGroup:destroy()
 | |
|     colorBoxGroup = nil
 | |
| 
 | |
|     ServerData = {
 | |
|       currentOutfit = {},
 | |
|       outfits = {},
 | |
|       mounts = {},
 | |
|       wings = {},
 | |
|       auras = {},
 | |
|       shaders = {},
 | |
|       healthBars = {},
 | |
|       manaBars = {}
 | |
|     }
 | |
| 
 | |
|     saveSettings()
 | |
|     settings = {}
 | |
|   end
 | |
| end
 | |
| 
 | |
| function configureAddons(addons)
 | |
|   local hasAddon1 = addons == 1 or addons == 3
 | |
|   local hasAddon2 = addons == 2 or addons == 3
 | |
|   window.configure.addon1.check:setEnabled(hasAddon1)
 | |
|   window.configure.addon2.check:setEnabled(hasAddon2)
 | |
| 
 | |
|   window.configure.addon1.check.onCheckChange = nil
 | |
|   window.configure.addon2.check.onCheckChange = nil
 | |
|   window.configure.addon1.check:setChecked(false)
 | |
|   window.configure.addon2.check:setChecked(false)
 | |
|   if tempOutfit.addons == 3 then
 | |
|     window.configure.addon1.check:setChecked(true)
 | |
|     window.configure.addon2.check:setChecked(true)
 | |
|   elseif tempOutfit.addons == 2 then
 | |
|     window.configure.addon1.check:setChecked(false)
 | |
|     window.configure.addon2.check:setChecked(true)
 | |
|   elseif tempOutfit.addons == 1 then
 | |
|     window.configure.addon1.check:setChecked(true)
 | |
|     window.configure.addon2.check:setChecked(false)
 | |
|   end
 | |
|   window.configure.addon1.check.onCheckChange = onAddonChange
 | |
|   window.configure.addon2.check.onCheckChange = onAddonChange
 | |
| end
 | |
| 
 | |
| function newPreset()
 | |
|   if not settings.presets then
 | |
|     settings.presets = {}
 | |
|   end
 | |
| 
 | |
|   local presetWidget = g_ui.createWidget("PresetButton", window.presetsList)
 | |
|   local presetId = #settings.presets + 1
 | |
|   presetWidget:setId(presetId)
 | |
|   presetWidget.title:setText("New Preset")
 | |
|   local outfitCopy = table.copy(tempOutfit)
 | |
|   presetWidget.creature:setOutfit(outfitCopy)
 | |
|   presetWidget.creature:setCenter(true)
 | |
| 
 | |
|   settings.presets[presetId] = {
 | |
|     title = "New Preset",
 | |
|     outfit = outfitCopy,
 | |
|     mounted = window.configure.mount.check:isChecked()
 | |
|   }
 | |
| 
 | |
|   presetWidget:focus()
 | |
|   window.presetsList:ensureChildVisible(presetWidget, {x = 0, y = 196})
 | |
| end
 | |
| 
 | |
| function deletePreset()
 | |
|   local presetId = settings.currentPreset
 | |
|   if presetId == 0 then
 | |
|     local focused = window.presetsList:getFocusedChild()
 | |
|     if focused then
 | |
|       presetId = tonumber(focused:getId())
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if not presetId or presetId == 0 then
 | |
|     return
 | |
|   end
 | |
| 
 | |
|   table.remove(settings.presets, presetId)
 | |
|   window.presetsList[presetId]:destroy()
 | |
|   settings.currentPreset = 0
 | |
|   local newId = 1
 | |
|   for _, child in ipairs(window.presetsList:getChildren()) do
 | |
|     child:setId(newId)
 | |
|     newId = newId + 1
 | |
|   end
 | |
|   updateAppearanceText("preset", "None")
 | |
| end
 | |
| 
 | |
| function savePreset()
 | |
|   local presetId = settings.currentPreset
 | |
|   if presetId == 0 then
 | |
|     local focused = window.presetsList:getFocusedChild()
 | |
|     if focused then
 | |
|       presetId = tonumber(focused:getId())
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if not presetId or presetId == 0 then
 | |
|     return
 | |
|   end
 | |
| 
 | |
|   local outfitCopy = table.copy(tempOutfit)
 | |
|   window.presetsList[presetId].creature:setOutfit(outfitCopy)
 | |
|   window.presetsList[presetId].creature:setCenter(true)
 | |
|   settings.presets[presetId].outfit = outfitCopy
 | |
|   settings.presets[presetId].mounted = window.configure.mount.check:isChecked()
 | |
|   settings.currentPreset = presetId
 | |
| end
 | |
| 
 | |
| function renamePreset()
 | |
|   local presetId = settings.currentPreset
 | |
|   if presetId == 0 then
 | |
|     local focused = window.presetsList:getFocusedChild()
 | |
|     if focused then
 | |
|       presetId = tonumber(focused:getId())
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if not presetId or presetId == 0 then
 | |
|     return
 | |
|   end
 | |
| 
 | |
|   local presetWidget = window.presetsList[presetId]
 | |
|   presetWidget.title:hide()
 | |
|   presetWidget.rename.input:setText("")
 | |
|   presetWidget.rename.save.onClick = function()
 | |
|     saveRename(presetId)
 | |
|   end
 | |
|   presetWidget.rename:show()
 | |
| end
 | |
| 
 | |
| function saveRename(presetId)
 | |
|   local presetWidget = window.presetsList[presetId]
 | |
|   if not presetWidget then
 | |
|     return
 | |
|   end
 | |
| 
 | |
|   local newTitle = presetWidget.rename.input:getText():trim()
 | |
|   presetWidget.rename.input:setText("")
 | |
|   presetWidget.rename:hide()
 | |
|   presetWidget.title:setText(newTitle)
 | |
|   presetWidget.title:show()
 | |
|   settings.presets[presetId].title = newTitle
 | |
| 
 | |
|   if presetId == settings.currentPreset then
 | |
|     updateAppearanceText("preset", newTitle)
 | |
|   end
 | |
| end
 | |
| 
 | |
| function onAppearanceChange(widget, selectedWidget)
 | |
|   local id = selectedWidget:getParent():getId()
 | |
|   if id == "preset" then
 | |
|     showPresets()
 | |
|   elseif id == "outfit" then
 | |
|     showOutfits()
 | |
|   elseif id == "mount" then
 | |
|     showMounts()
 | |
|   elseif id == "aura" then
 | |
|     showAuras()
 | |
|   elseif id == "wings" then
 | |
|     showWings()
 | |
|   elseif id == "shader" then
 | |
|     showShaders()
 | |
|   elseif id == "healthBar" then
 | |
|     showHealthBars()
 | |
|   elseif id == "manaBar" then
 | |
|     showManaBars()
 | |
|   end
 | |
| end
 | |
| 
 | |
| function showPresets()
 | |
|   window.listSearch:hide()
 | |
|   window.selectionList:hide()
 | |
|   window.selectionScroll:hide()
 | |
| 
 | |
|   local focused = nil
 | |
|   if window.presetsList:getChildCount() == 0 and settings.presets then
 | |
|     for presetId, preset in ipairs(settings.presets) do
 | |
|       local presetWidget = g_ui.createWidget("PresetButton", window.presetsList)
 | |
|       presetWidget:setId(presetId)
 | |
|       presetWidget.title:setText(preset.title)
 | |
|       presetWidget.creature:setOutfit(preset.outfit)
 | |
|       presetWidget.creature:setCenter(true)
 | |
|       if presetId == settings.currentPreset then
 | |
|         focused = presetId
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if focused then
 | |
|     local w = window.presetsList[focused]
 | |
|     w:focus()
 | |
|     window.presetsList:ensureChildVisible(w, {x = 0, y = 196})
 | |
|   end
 | |
| 
 | |
|   window.presetsList.onChildFocusChange = onPresetSelect
 | |
|   window.presetsList:show()
 | |
|   window.presetsScroll:show()
 | |
|   window.presetButtons:show()
 | |
| end
 | |
| 
 | |
| function showOutfits()
 | |
|   window.presetsList:hide()
 | |
|   window.presetsScroll:hide()
 | |
|   window.presetButtons:hide()
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = nil
 | |
|   window.selectionList:destroyChildren()
 | |
| 
 | |
|   local focused = nil
 | |
|   for _, outfitData in ipairs(ServerData.outfits) do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId(outfitData[1])
 | |
| 
 | |
|     local outfit = table.copy(previewCreature:getOutfit())
 | |
|     outfit.type = outfitData[1]
 | |
|     outfit.addons = outfitData[3]
 | |
|     outfit.mount = 0
 | |
|     outfit.aura = 0
 | |
|     outfit.wings = 0
 | |
|     outfit.shader = "outfit_default"
 | |
|     outfit.healthBar = 0
 | |
|     outfit.manaBar = 0
 | |
|     button.outfit:setOutfit(outfit)
 | |
|     button.outfit:setCenter(true)
 | |
|     button.name:setText(outfitData[2])
 | |
|     if tempOutfit.type == outfitData[1] then
 | |
|       focused = outfitData[1]
 | |
|       configureAddons(outfitData[3])
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if focused then
 | |
|     local w = window.selectionList[focused]
 | |
|     w:focus()
 | |
|     window.selectionList:ensureChildVisible(w, {x = 0, y = 196})
 | |
|   end
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = onOutfitSelect
 | |
|   window.selectionList:show()
 | |
|   window.selectionScroll:show()
 | |
|   window.listSearch:show()
 | |
| end
 | |
| 
 | |
| function showMounts()
 | |
|   window.presetsList:hide()
 | |
|   window.presetsScroll:hide()
 | |
|   window.presetButtons:hide()
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = nil
 | |
|   window.selectionList:destroyChildren()
 | |
| 
 | |
|   local focused = nil
 | |
|   for _, mountData in ipairs(ServerData.mounts) do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId(mountData[1])
 | |
| 
 | |
|     button.outfit:setOutfit({type = mountData[1]})
 | |
|     button.outfit:setCenter(true)
 | |
|     button.name:setText(mountData[2])
 | |
|     if tempOutfit.mount == mountData[1] then
 | |
|       focused = mountData[1]
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if #ServerData.mounts == 1 then
 | |
|     window.selectionList:focusChild(nil)
 | |
|   end
 | |
| 
 | |
|   window.configure.mount.check:setEnabled(focused)
 | |
|   window.configure.mount.check:setChecked(g_game.getLocalPlayer():isMounted() and focused)
 | |
| 
 | |
|   if focused ~= nil then
 | |
|     local w = window.selectionList[focused]
 | |
|     w:focus()
 | |
|     window.selectionList:ensureChildVisible(w, {x = 0, y = 196})
 | |
|   end
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = onMountSelect
 | |
|   window.selectionList:show()
 | |
|   window.selectionScroll:show()
 | |
|   window.listSearch:show()
 | |
| end
 | |
| 
 | |
| function showAuras()
 | |
|   window.presetsList:hide()
 | |
|   window.presetsScroll:hide()
 | |
|   window.presetButtons:hide()
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = nil
 | |
|   window.selectionList:destroyChildren()
 | |
| 
 | |
|   local focused = nil
 | |
|   do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId("0")
 | |
| 
 | |
|     button.outfit:setOutfit({type = 0})
 | |
|     button.name:setText("None")
 | |
|     if tempOutfit.aura == 0 then
 | |
|       focused = 0
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   for _, auraData in ipairs(ServerData.auras) do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId(auraData[1])
 | |
| 
 | |
|     button.outfit:setOutfit({type = auraData[1]})
 | |
|     button.outfit:setAnimate(true)
 | |
|     button.name:setText(auraData[2])
 | |
|     if tempOutfit.aura == auraData[1] then
 | |
|       focused = auraData[1]
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if focused ~= nil then
 | |
|     local w = window.selectionList[focused]
 | |
|     w:focus()
 | |
|     window.selectionList:ensureChildVisible(w, {x = 0, y = 196})
 | |
|   end
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = onAuraSelect
 | |
|   window.selectionList:show()
 | |
|   window.selectionScroll:show()
 | |
|   window.listSearch:show()
 | |
| end
 | |
| 
 | |
| function showWings()
 | |
|   window.presetsList:hide()
 | |
|   window.presetsScroll:hide()
 | |
|   window.presetButtons:hide()
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = nil
 | |
|   window.selectionList:destroyChildren()
 | |
| 
 | |
|   local focused = nil
 | |
|   do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId("0")
 | |
| 
 | |
|     button.outfit:setOutfit({type = 0})
 | |
|     button.name:setText("None")
 | |
|     if tempOutfit.wings == 0 then
 | |
|       focused = 0
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   for _, wingsData in ipairs(ServerData.wings) do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId(wingsData[1])
 | |
| 
 | |
|     button.outfit:setOutfit({type = wingsData[1]})
 | |
|     button.outfit:setAnimate(true)
 | |
|     button.name:setText(wingsData[2])
 | |
|     if tempOutfit.wings == wingsData[1] then
 | |
|       focused = wingsData[1]
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if focused ~= nil then
 | |
|     local w = window.selectionList[focused]
 | |
|     w:focus()
 | |
|     window.selectionList:ensureChildVisible(w, {x = 0, y = 196})
 | |
|   end
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = onWingsSelect
 | |
|   window.selectionList:show()
 | |
|   window.selectionScroll:show()
 | |
|   window.listSearch:show()
 | |
| end
 | |
| 
 | |
| function showShaders()
 | |
|   window.presetsList:hide()
 | |
|   window.presetsScroll:hide()
 | |
|   window.presetButtons:hide()
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = nil
 | |
|   window.selectionList:destroyChildren()
 | |
| 
 | |
|   local focused = nil
 | |
|   do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId("outfit_default")
 | |
| 
 | |
|     button.outfit:setOutfit({type = tempOutfit.type, addons = tempOutfit.addons, shader = "outfit_default"})
 | |
|     button.name:setText("None")
 | |
|     if tempOutfit.shader == "outfit_default" then
 | |
|       focused = "outfit_default"
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   for _, shaderData in ipairs(ServerData.shaders) do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId(shaderData[2])
 | |
| 
 | |
|     button.outfit:setOutfit({type = tempOutfit.type, addons = tempOutfit.addons, shader = shaderData[2]})
 | |
|     button.outfit:setCenter(true)
 | |
|     button.name:setText(shaderData[2])
 | |
|     if tempOutfit.shader == shaderData[2] then
 | |
|       focused = shaderData[2]
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if focused ~= nil then
 | |
|     local w = window.selectionList[focused]
 | |
|     w:focus()
 | |
|     window.selectionList:ensureChildVisible(w, {x = 0, y = 196})
 | |
|   end
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = onShaderSelect
 | |
|   window.selectionList:show()
 | |
|   window.selectionScroll:show()
 | |
|   window.listSearch:show()
 | |
| end
 | |
| 
 | |
| function showHealthBars()
 | |
|   window.presetsList:hide()
 | |
|   window.presetsScroll:hide()
 | |
|   window.presetButtons:hide()
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = nil
 | |
|   window.selectionList:destroyChildren()
 | |
| 
 | |
|   local focused = nil
 | |
|   do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId("0")
 | |
| 
 | |
|     button.outfit:hide()
 | |
|     button.name:setText("None")
 | |
|     if tempOutfit.healthBar == 0 then
 | |
|       focused = 0
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   for _, barData in ipairs(ServerData.healthBars) do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId(barData[1])
 | |
| 
 | |
|     button.outfit:hide()
 | |
| 
 | |
|     button.bar:setImageSource(g_healthBars.getHealthBarPath(barData[1]))
 | |
|     button.bar:show()
 | |
| 
 | |
|     button.name:setText(barData[2])
 | |
|     if tempOutfit.healthBar == barData[1] then
 | |
|       focused = barData[1]
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if focused ~= nil then
 | |
|     local w = window.selectionList[focused]
 | |
|     w:focus()
 | |
|     window.selectionList:ensureChildVisible(w, {x = 0, y = 196})
 | |
|   end
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = onHealthBarSelect
 | |
|   window.selectionList:show()
 | |
|   window.selectionScroll:show()
 | |
|   window.listSearch:show()
 | |
| end
 | |
| 
 | |
| function showManaBars()
 | |
|   window.presetsList:hide()
 | |
|   window.presetsScroll:hide()
 | |
|   window.presetButtons:hide()
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = nil
 | |
|   window.selectionList:destroyChildren()
 | |
| 
 | |
|   local focused = nil
 | |
|   do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId("0")
 | |
| 
 | |
|     button.outfit:hide()
 | |
|     button.name:setText("None")
 | |
|     if tempOutfit.manaBar == 0 then
 | |
|       focused = 0
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   for _, barData in ipairs(ServerData.manaBars) do
 | |
|     local button = g_ui.createWidget("SelectionButton", window.selectionList)
 | |
|     button:setId(barData[1])
 | |
| 
 | |
|     button.outfit:hide()
 | |
| 
 | |
|     button.bar:setImageSource(g_healthBars.getManaBarPath(barData[1]))
 | |
|     button.bar:show()
 | |
| 
 | |
|     button.name:setText(barData[2])
 | |
|     if tempOutfit.manaBar == barData[1] then
 | |
|       focused = barData[1]
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   if focused ~= nil then
 | |
|     local w = window.selectionList[focused]
 | |
|     w:focus()
 | |
|     window.selectionList:ensureChildVisible(w, {x = 0, y = 196})
 | |
|   end
 | |
| 
 | |
|   window.selectionList.onChildFocusChange = onManaBarSelect
 | |
|   window.selectionList:show()
 | |
|   window.selectionScroll:show()
 | |
|   window.listSearch:show()
 | |
| end
 | |
| 
 | |
| function onPresetSelect(list, focusedChild, unfocusedChild, reason)
 | |
|   if focusedChild then
 | |
|     local presetId = tonumber(focusedChild:getId())
 | |
|     local preset = settings.presets[presetId]
 | |
|     tempOutfit = table.copy(preset.outfit)
 | |
| 
 | |
|     for _, outfitData in ipairs(ServerData.outfits) do
 | |
|       if tempOutfit.type == outfitData[1] then
 | |
|         configureAddons(outfitData[3])
 | |
|         break
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     if g_game.getFeature(GamePlayerMounts) then
 | |
|       window.configure.mount.check:setChecked(preset.mounted and tempOutfit.mount > 0)
 | |
|     end
 | |
| 
 | |
|     settings.currentPreset = presetId
 | |
| 
 | |
|     updatePreview()
 | |
| 
 | |
|     updateAppearanceTexts(tempOutfit)
 | |
|     updateAppearanceText("preset", preset.title)
 | |
|   end
 | |
| end
 | |
| 
 | |
| function onOutfitSelect(list, focusedChild, unfocusedChild, reason)
 | |
|   if focusedChild then
 | |
|     local outfitType = tonumber(focusedChild:getId())
 | |
|     local outfit = focusedChild.outfit:getOutfit()
 | |
|     tempOutfit.type = outfit.type
 | |
|     tempOutfit.addons = outfit.addons
 | |
| 
 | |
|     deselectPreset()
 | |
| 
 | |
|     configureAddons(outfit.addons)
 | |
| 
 | |
|     if showOutfitCheck:isChecked() then
 | |
|       updatePreview()
 | |
|     end
 | |
|     updateAppearanceText("outfit", focusedChild.name:getText())
 | |
|   end
 | |
| end
 | |
| 
 | |
| function onMountSelect(list, focusedChild, unfocusedChild, reason)
 | |
|   if focusedChild then
 | |
|     local mountType = tonumber(focusedChild:getId())
 | |
|     tempOutfit.mount = mountType
 | |
| 
 | |
|     deselectPreset()
 | |
| 
 | |
|     if showMountCheck:isChecked() then
 | |
|       updatePreview()
 | |
|     end
 | |
| 
 | |
|     window.configure.mount.check:setEnabled(tempOutfit.mount > 0)
 | |
|     window.configure.mount.check:setChecked(g_game.getLocalPlayer():isMounted() and tempOutfit.mount > 0)
 | |
| 
 | |
|     updateAppearanceText("mount", focusedChild.name:getText())
 | |
|   end
 | |
| end
 | |
| 
 | |
| function onAuraSelect(list, focusedChild, unfocusedChild, reason)
 | |
|   if focusedChild then
 | |
|     local auraType = tonumber(focusedChild:getId())
 | |
|     tempOutfit.aura = auraType
 | |
|     updatePreview()
 | |
| 
 | |
|     deselectPreset()
 | |
| 
 | |
|     updateAppearanceText("aura", focusedChild.name:getText())
 | |
|   end
 | |
| end
 | |
| 
 | |
| function onWingsSelect(list, focusedChild, unfocusedChild, reason)
 | |
|   if focusedChild then
 | |
|     local wingsType = tonumber(focusedChild:getId())
 | |
|     tempOutfit.wings = wingsType
 | |
|     updatePreview()
 | |
| 
 | |
|     deselectPreset()
 | |
| 
 | |
|     updateAppearanceText("wings", focusedChild.name:getText())
 | |
|   end
 | |
| end
 | |
| 
 | |
| function onShaderSelect(list, focusedChild, unfocusedChild, reason)
 | |
|   if focusedChild then
 | |
|     local shaderType = focusedChild:getId()
 | |
|     tempOutfit.shader = shaderType
 | |
|     updatePreview()
 | |
| 
 | |
|     deselectPreset()
 | |
| 
 | |
|     updateAppearanceText("shader", focusedChild.name:getText())
 | |
|   end
 | |
| end
 | |
| 
 | |
| function onHealthBarSelect(list, focusedChild, unfocusedChild, reason)
 | |
|   if focusedChild then
 | |
|     local barType = tonumber(focusedChild:getId())
 | |
|     tempOutfit.healthBar = barType
 | |
|     updatePreview()
 | |
| 
 | |
|     deselectPreset()
 | |
| 
 | |
|     updateAppearanceText("healthBar", focusedChild.name:getText())
 | |
|   end
 | |
| end
 | |
| 
 | |
| function onManaBarSelect(list, focusedChild, unfocusedChild, reason)
 | |
|   if focusedChild then
 | |
|     local barType = tonumber(focusedChild:getId())
 | |
|     tempOutfit.manaBar = barType
 | |
|     updatePreview()
 | |
| 
 | |
|     deselectPreset()
 | |
| 
 | |
|     updateAppearanceText("manaBar", focusedChild.name:getText())
 | |
|   end
 | |
| end
 | |
| 
 | |
| function updateAppearanceText(widget, text)
 | |
|   window.appearance.settings[widget].name:setText(text)
 | |
| end
 | |
| 
 | |
| function updateAppearanceTexts(outfit)
 | |
|   for _, appKey in ipairs(AppearanceData) do
 | |
|     updateAppearanceText(appKey, "None")
 | |
|   end
 | |
| 
 | |
|   for key, value in pairs(outfit) do
 | |
|     local newKey = key
 | |
|     local appKey = key
 | |
|     if key == "type" then
 | |
|       newKey = "outfits"
 | |
|       appKey = "outfit"
 | |
|     elseif key == "wings" then
 | |
|       newKey = "wings"
 | |
|       appKey = "wings"
 | |
|     else
 | |
|       newKey = key .. "s"
 | |
|       appKey = key
 | |
|     end
 | |
|     local dataTable = ServerData[newKey]
 | |
|     if dataTable then
 | |
|       for _, data in ipairs(dataTable) do
 | |
|         if outfit[key] == data[1] or outfit[key] == data[2] then
 | |
|           updateAppearanceText(appKey, data[2])
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| function deselectPreset()
 | |
|   settings.currentPreset = 0
 | |
| end
 | |
| 
 | |
| function onAddonChange(widget, checked)
 | |
|   local addonId = widget:getParent():getId()
 | |
| 
 | |
|   local addons = tempOutfit.addons
 | |
|   if addonId == "addon1" then
 | |
|     addons = checked and addons + 1 or addons - 1
 | |
|   elseif addonId == "addon2" then
 | |
|     addons = checked and addons + 2 or addons - 2
 | |
|   end
 | |
| 
 | |
|   settings.currentPreset = 0
 | |
| 
 | |
|   tempOutfit.addons = addons
 | |
|   updatePreview()
 | |
|   if appearanceGroup:getSelectedWidget() == window.appearance.settings.outfit.check then
 | |
|     showOutfits()
 | |
|   end
 | |
| end
 | |
| 
 | |
| function onColorModeChange(widget, selectedWidget)
 | |
|   local colorMode = selectedWidget:getId()
 | |
|   if colorMode == "head" then
 | |
|     colorBoxGroup:selectWidget(window.appearance.colorBoxPanel["colorBox" .. tempOutfit.head])
 | |
|   elseif colorMode == "primary" then
 | |
|     colorBoxGroup:selectWidget(window.appearance.colorBoxPanel["colorBox" .. tempOutfit.body])
 | |
|   elseif colorMode == "secondary" then
 | |
|     colorBoxGroup:selectWidget(window.appearance.colorBoxPanel["colorBox" .. tempOutfit.legs])
 | |
|   elseif colorMode == "detail" then
 | |
|     colorBoxGroup:selectWidget(window.appearance.colorBoxPanel["colorBox" .. tempOutfit.feet])
 | |
|   end
 | |
| end
 | |
| 
 | |
| function onColorCheckChange(widget, selectedWidget)
 | |
|   local colorId = selectedWidget.colorId
 | |
|   local colorMode = colorModeGroup:getSelectedWidget():getId()
 | |
|   if colorMode == "head" then
 | |
|     tempOutfit.head = colorId
 | |
|   elseif colorMode == "primary" then
 | |
|     tempOutfit.body = colorId
 | |
|   elseif colorMode == "secondary" then
 | |
|     tempOutfit.legs = colorId
 | |
|   elseif colorMode == "detail" then
 | |
|     tempOutfit.feet = colorId
 | |
|   end
 | |
| 
 | |
|   updatePreview()
 | |
| 
 | |
|   if appearanceGroup:getSelectedWidget() == window.appearance.settings.outfit.check then
 | |
|     showOutfits()
 | |
|   end
 | |
| end
 | |
| 
 | |
| function updatePreview()
 | |
|   local direction = previewCreature:getDirection()
 | |
|   local previewOutfit = table.copy(tempOutfit)
 | |
| 
 | |
|   if not settings.showOutfit then
 | |
|     previewCreature:hide()
 | |
|   else
 | |
|     previewCreature:show()
 | |
|   end
 | |
| 
 | |
|   if not settings.showMount then
 | |
|     previewOutfit.mount = 0
 | |
|   end
 | |
| 
 | |
|   if not settings.showAura then
 | |
|     previewOutfit.aura = 0
 | |
|   end
 | |
| 
 | |
|   if not settings.showWings then
 | |
|     previewOutfit.wings = 0
 | |
|   end
 | |
| 
 | |
|   if not settings.showShader then
 | |
|     previewOutfit.shader = "outfit_default"
 | |
|   end
 | |
| 
 | |
|   if not settings.showBars then
 | |
|     previewOutfit.healthBar = 0
 | |
|     previewOutfit.manaBar = 0
 | |
|     window.preview.panel.bars:hide()
 | |
|   else
 | |
|     if g_game.getFeature(GamePlayerMounts) and settings.showMount and previewOutfit.mount > 0 then
 | |
|       window.preview.panel.bars:setMarginTop(45)
 | |
|       window.preview.panel.bars:setMarginLeft(25)
 | |
|     else
 | |
|       window.preview.panel.bars:setMarginTop(30)
 | |
|       window.preview.panel.bars:setMarginLeft(15)
 | |
|     end
 | |
|     local name = g_game.getCharacterName()
 | |
|     window.preview.panel.bars.name:setText(name)
 | |
|     if name:find("g") or name:find("j") or name:find("p") or name:find("q") or name:find("y") then
 | |
|       window.preview.panel.bars.name:setHeight(14)
 | |
|     else
 | |
|       window.preview.panel.bars.name:setHeight(11)
 | |
|     end
 | |
| 
 | |
|     local healthBar = window.preview.panel.bars.healthBar
 | |
|     local manaBar = window.preview.panel.bars.manaBar
 | |
|     if not g_game.getFeature(GameHealthInfoBackground) then
 | |
|       manaBar:setMarginTop(0)
 | |
|       healthBar:setMarginTop(1)
 | |
|       healthBar.image:setMargin(0)
 | |
|       healthBar.image:hide()
 | |
|       manaBar.image:setMargin(0)
 | |
|       manaBar.image:hide(0)
 | |
|     else
 | |
|       local healthOffset = g_healthBars.getHealthBarOffset(previewOutfit.healthBar)
 | |
|       local healthBarOffset = g_healthBars.getHealthBarOffsetBar(previewOutfit.healthBar)
 | |
|       local manaOffset = g_healthBars.getHealthBarOffset(previewOutfit.manaBar)
 | |
| 
 | |
|       if previewOutfit.healthBar > 0 then
 | |
|         healthBar.image:setImageSource(g_healthBars.getHealthBarPath(previewOutfit.healthBar))
 | |
| 
 | |
|         healthBar:setMarginTop(-healthOffset.y + 1)
 | |
|         healthBar.image:setMarginTop(-healthOffset.y)
 | |
|         healthBar.image:setMarginBottom(-healthOffset.y)
 | |
|         healthBar.image:setMarginLeft(-healthOffset.x)
 | |
|         healthBar.image:setMarginRight(-healthOffset.x)
 | |
|         healthBar.image:show()
 | |
|         manaBar:setMarginTop(healthBarOffset.y + 1 - manaOffset.y)
 | |
|       else
 | |
|         manaBar:setMarginTop(0)
 | |
|         healthBar:setMarginTop(1)
 | |
|         healthBar.image:setMargin(0)
 | |
|         healthBar.image:hide()
 | |
|       end
 | |
| 
 | |
|       if previewOutfit.manaBar > 0 then
 | |
|         manaBar.image:setImageSource(g_healthBars.getManaBarPath(previewOutfit.manaBar))
 | |
| 
 | |
|         manaBar:setMarginTop(healthBarOffset.y + 1 - manaOffset.y)
 | |
| 
 | |
|         manaBar.image:setMarginTop(-manaOffset.y)
 | |
|         manaBar.image:setMarginBottom(-manaOffset.y)
 | |
|         manaBar.image:setMarginLeft(-manaOffset.x)
 | |
|         manaBar.image:setMarginRight(-manaOffset.x)
 | |
|         manaBar.image:show()
 | |
|       else
 | |
|         manaBar.image:setMargin(0)
 | |
|         manaBar.image:hide(0)
 | |
|       end
 | |
|     end
 | |
|     window.preview.panel.bars:show()
 | |
|   end
 | |
| 
 | |
|   previewCreature:setOutfit(previewOutfit)
 | |
|   previewCreature:setDirection(direction)
 | |
| end
 | |
| 
 | |
| function rotate(value)
 | |
|   local direction = previewCreature:getDirection()
 | |
|   direction = direction + value
 | |
|   if direction < Directions.North then
 | |
|     direction = Directions.West
 | |
|   elseif direction > Directions.West then
 | |
|     direction = Directions.North
 | |
|   end
 | |
|   previewCreature:setDirection(direction)
 | |
|   floor:setMargin(0)
 | |
| end
 | |
| 
 | |
| function onFilterSearch()
 | |
|   addEvent(
 | |
|     function()
 | |
|       local searchText = window.listSearch.search:getText():lower():trim()
 | |
|       local children = window.selectionList:getChildren()
 | |
|       if searchText:len() >= 1 then
 | |
|         for _, child in ipairs(children) do
 | |
|           local text = child.name:getText():lower()
 | |
|           if text:find(searchText) then
 | |
|             child:show()
 | |
|           else
 | |
|             child:hide()
 | |
|           end
 | |
|         end
 | |
|       else
 | |
|         for _, child in ipairs(children) do
 | |
|           child:show()
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   )
 | |
| end
 | |
| 
 | |
| function saveSettings()
 | |
|   if not g_resources.fileExists(settingsFile) then
 | |
|     g_resources.makeDir("/settings")
 | |
|     g_resources.writeFileContents(settingsFile, "[]")
 | |
|   end
 | |
| 
 | |
|   local fullSettings = {}
 | |
|   do
 | |
|     local json_status, json_data =
 | |
|       pcall(
 | |
|       function()
 | |
|         return json.decode(g_resources.readFileContents(settingsFile))
 | |
|       end
 | |
|     )
 | |
| 
 | |
|     if not json_status then
 | |
|       g_logger.error("[saveSettings] Couldn't load JSON: " .. json_data)
 | |
|       return
 | |
|     end
 | |
|     fullSettings = json_data
 | |
|   end
 | |
| 
 | |
|   fullSettings[g_game.getCharacterName()] = settings
 | |
| 
 | |
|   local json_status, json_data =
 | |
|     pcall(
 | |
|     function()
 | |
|       return json.encode(fullSettings)
 | |
|     end
 | |
|   )
 | |
| 
 | |
|   if not json_status then
 | |
|     g_logger.error("[saveSettings] Couldn't save JSON: " .. json_data)
 | |
|     return
 | |
|   end
 | |
| 
 | |
|   g_resources.writeFileContents(settingsFile, json.encode(fullSettings))
 | |
| end
 | |
| 
 | |
| function loadSettings()
 | |
|   if not g_resources.fileExists(settingsFile) then
 | |
|     g_resources.makeDir("/settings")
 | |
|   end
 | |
| 
 | |
|   if g_resources.fileExists(settingsFile) then
 | |
|     local json_status, json_data =
 | |
|       pcall(
 | |
|       function()
 | |
|         return json.decode(g_resources.readFileContents(settingsFile))
 | |
|       end
 | |
|     )
 | |
| 
 | |
|     if not json_status then
 | |
|       g_logger.error("[loadSettings] Couldn't load JSON: " .. json_data)
 | |
|       return
 | |
|     end
 | |
| 
 | |
|     settings = json_data[g_game.getCharacterName()]
 | |
|     if not settings then
 | |
|       loadDefaultSettings()
 | |
|     end
 | |
|   else
 | |
|     loadDefaultSettings()
 | |
|   end
 | |
| end
 | |
| 
 | |
| function loadDefaultSettings()
 | |
|   settings = {
 | |
|     movement = false,
 | |
|     showFloor = false,
 | |
|     showOutfit = true,
 | |
|     showMount = false,
 | |
|     showWings = false,
 | |
|     showAura = false,
 | |
|     showShader = false,
 | |
|     showBars = false,
 | |
|     presets = {},
 | |
|     currentPreset = 0
 | |
|   }
 | |
|   settings.currentPreset = 0
 | |
| end
 | |
| 
 | |
| function accept()
 | |
|   if g_game.getFeature(GamePlayerMounts) then
 | |
|     local player = g_game.getLocalPlayer()
 | |
|     local isMountedChecked = window.configure.mount.check:isChecked()
 | |
|     if not player:isMounted() and isMountedChecked then
 | |
|       player:mount()
 | |
|     elseif player:isMounted() and not isMountedChecked then
 | |
|       player:dismount()
 | |
|     end
 | |
|     if settings.currentPreset > 0 then
 | |
|       settings.presets[settings.currentPreset].mounted = isMountedChecked
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   g_game.changeOutfit(tempOutfit)
 | |
|   destroy()
 | |
| end
 | 
