mirror of
https://github.com/ErikasKontenis/SabrehavenServer.git
synced 2025-10-18 16:23:27 +02:00
fix items, map, protocls
This commit is contained in:
160
800OTClient/modules/client_profiles/profiles.lua
Normal file
160
800OTClient/modules/client_profiles/profiles.lua
Normal file
@@ -0,0 +1,160 @@
|
||||
local settings = {}
|
||||
ChangedProfile = false
|
||||
|
||||
function init()
|
||||
connect(g_game, {
|
||||
onGameStart = online,
|
||||
onGameEnd = offline
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
function terminate()
|
||||
disconnect(g_game, {
|
||||
onGameStart = online,
|
||||
onGameEnd = offline
|
||||
})
|
||||
end
|
||||
|
||||
-- loads settings on character login
|
||||
function online()
|
||||
ChangedProfile = false
|
||||
|
||||
-- startup arguments has higher priority than settings
|
||||
local index = getProfileFromStartupArgument()
|
||||
if index then
|
||||
setProfileOption(index)
|
||||
end
|
||||
|
||||
load()
|
||||
|
||||
if not index then
|
||||
setProfileOption(getProfileFromSettings() or 1)
|
||||
end
|
||||
|
||||
-- create main settings dir
|
||||
if not g_resources.directoryExists("/settings/") then
|
||||
g_resources.makeDir("/settings/")
|
||||
end
|
||||
|
||||
-- create profiles dirs
|
||||
for i=1,10 do
|
||||
local path = "/settings/profile_"..i
|
||||
|
||||
if not g_resources.directoryExists(path) then
|
||||
g_resources.makeDir(path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function setProfileOption(index)
|
||||
local currentProfile = g_settings.getNumber('profile')
|
||||
currentProfile = tostring(currentProfile)
|
||||
index = tostring(index)
|
||||
|
||||
if currentProfile ~= index then
|
||||
ChangedProfile = true
|
||||
return modules.client_options.setOption('profile', index)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
-- load profile number from settings
|
||||
function getProfileFromSettings()
|
||||
-- settings should save per character, return if not online
|
||||
if not g_game.isOnline() then return end
|
||||
|
||||
local index = g_game.getCharacterName()
|
||||
local savedData = settings[index]
|
||||
|
||||
return savedData
|
||||
end
|
||||
|
||||
-- option to launch client with hardcoded profile
|
||||
function getProfileFromStartupArgument()
|
||||
local startupOptions = string.split(g_app.getStartupOptions(), " ")
|
||||
if #startupOptions < 2 then
|
||||
return false
|
||||
end
|
||||
|
||||
for index, option in ipairs(startupOptions) do
|
||||
if option == "--profile" then
|
||||
local profileIndex = startupOptions[index + 1]
|
||||
if profileIndex == nil then
|
||||
return g_logger.info("Startup arguments incomplete: missing profile index.")
|
||||
end
|
||||
|
||||
g_logger.info("Startup options: Forced profile: "..profileIndex)
|
||||
-- set value in options
|
||||
return profileIndex
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
-- returns string path ie. "/settings/1/actionbar.json"
|
||||
function getSettingsFilePath(fileNameWithFormat)
|
||||
local currentProfile = g_settings.getNumber('profile')
|
||||
|
||||
return "/settings/profile_"..currentProfile.."/"..fileNameWithFormat
|
||||
end
|
||||
|
||||
function offline()
|
||||
onProfileChange(true)
|
||||
end
|
||||
|
||||
-- profile change callback (called in options), saves settings & reloads given module configs
|
||||
function onProfileChange(offline)
|
||||
if not offline then
|
||||
if not g_game.isOnline() then return end
|
||||
-- had to apply some delay
|
||||
scheduleEvent(collectiveReload, 100)
|
||||
end
|
||||
|
||||
local currentProfile = g_settings.getNumber('profile')
|
||||
local index = g_game.getCharacterName()
|
||||
|
||||
if index then
|
||||
settings[index] = currentProfile
|
||||
save()
|
||||
end
|
||||
end
|
||||
|
||||
-- collection of refresh functions from different modules
|
||||
function collectiveReload()
|
||||
modules.game_topbar.refresh(true)
|
||||
modules.game_actionbar.refresh(true)
|
||||
modules.game_bot.refresh()
|
||||
end
|
||||
|
||||
-- json handlers
|
||||
function load()
|
||||
local file = "/settings/profiles.json"
|
||||
if g_resources.fileExists(file) then
|
||||
local status, result = pcall(function()
|
||||
return json.decode(g_resources.readFileContents(file))
|
||||
end)
|
||||
if not status then
|
||||
return onError(
|
||||
"Error while reading profiles file. To fix this problem you can delete storage.json. Details: " ..
|
||||
result)
|
||||
end
|
||||
settings = result
|
||||
end
|
||||
end
|
||||
|
||||
function save()
|
||||
local file = "/settings/profiles.json"
|
||||
local status, result = pcall(function() return json.encode(settings, 2) end)
|
||||
if not status then
|
||||
return onError(
|
||||
"Error while saving profile settings. Data won't be saved. Details: " ..
|
||||
result)
|
||||
end
|
||||
if result:len() > 100 * 1024 * 1024 then
|
||||
return onError(
|
||||
"Something went wrong, file is above 100MB, won't be saved")
|
||||
end
|
||||
g_resources.writeFileContents(file, result)
|
||||
end
|
11
800OTClient/modules/client_profiles/profiles.otmod
Normal file
11
800OTClient/modules/client_profiles/profiles.otmod
Normal file
@@ -0,0 +1,11 @@
|
||||
Module
|
||||
name: client_profiles
|
||||
description: Client profiles
|
||||
author: Vithrax
|
||||
website: discord_Vithrax#5814
|
||||
autoload: true
|
||||
reloadable: false
|
||||
scripts: [ profiles ]
|
||||
sandboxed: true
|
||||
@onLoad: init()
|
||||
@onUnload: terminate()
|
Reference in New Issue
Block a user