Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement