diff --git a/features/user_groups.lua b/features/user_groups.lua index 7c9005e5..8eb2f70c 100644 --- a/features/user_groups.lua +++ b/features/user_groups.lua @@ -2,84 +2,53 @@ local Event = require 'utils.event' local Utils = require 'utils.utils' local Server = require 'server' local Donators = require 'resources.donators' +local Game = require 'utils.game' +local Token = require 'utils.global_token' global.regulars = {} global.donators = Donators.donators global.donator_welcome_messages = {} -local Game = require 'utils.game' local Module = {} -local function update_file() - local data = {'{\n'} - for player_name, _ in pairs(global.regulars) do - table.insert(data, "['") - table.insert(data, player_name) - table.insert(data, "''] = true,\n") - end - table.insert(data, '}') - - game.write_file('regulars.lua', table.concat(data), false, 0) -end - Module.is_regular = function(player_name) return Utils.cast_bool(global.regulars[player_name] or global.regulars[player_name:lower()]) --to make it backwards compatible end -Module.add_regular = - function(player_name) +Module.add_regular = function(player_name) local actor = Utils.get_actor() - --[[ - if Module.is_regular(player_name) then + + if (Module.is_regular(player_name)) then Game.player_print(player_name .. ' is already a regular.') else - if game.players[player_name] then - player_name = game.players[player_name].name - game.print(actor .. ' promoted ' .. player_name .. ' to regular.') - global.regulars[player_name] = true - update_file() - else - Game.player_print(player_name .. ' does not exist.') - end - end ]] - global.regulars[player_name] = true - game.print(actor .. ' promoted ' .. player_name .. ' to regular.') - Server.regular_promote(player_name, actor) -end - -Module.remove_regular = - function(player_name) - local actor = Utils.get_actor() - --[[ if game.players[player_name] then - player_name = game.players[player_name].name - if Module.is_regular(player_name) then - game.print(player_name .. ' was demoted from regular by ' .. actor .. '.') - end - global.regulars[player_name] = nil - global.regulars[player_name:lower()] = nil --backwards compatible - update_file() - end ]] - global.regulars[player_name] = nil - game.print(player_name .. ' was demoted from regular by ' .. actor .. '.') - Server.regular_deomote(player_name, actor) -end - -function Module.server_add_regular(player_name) - global.regulars[player_name] = true -end - -function Module.server_remove_regular(player_name) - global.regulars[player_name] = nil -end - -function Module.sync_regulars(names) - local r = {} - for _, name in ipairs(names) do - r[name] = true + global.regulars[player_name] = true + Server.set_data('regulars', player_name, true) + game.print(actor .. ' promoted ' .. player_name .. ' to regular.') end +end - global.regulars = r +Module.remove_regular = function(player_name) + local actor = Utils.get_actor() + + if (Module.is_regular(player_name)) then + global.regulars[player_name] = nil + Server.set_data('regulars', player_name, nil) + game.print(player_name .. ' was demoted from regular by ' .. actor .. '.') + else + Game.player_print(player_name .. ' is not a regular.') + end +end + +local sync_regulars_callback = + Token.register( + function(data) + global.regulars = data.entries + end +) + +function Module.sync_regulars() + Server.try_get_all_data('regulars', sync_regulars_callback) end Module.print_regulars = function() @@ -152,11 +121,24 @@ Event.add( function(event) local correctCaseName = Game.get_player_by_index(event.player_index).name if global.regulars[correctCaseName:lower()] and not global.regulars[correctCaseName] then - global.regulars[correctCaseName:lower()] = nil - global.regulars[correctCaseName] = true - update_file() + Server.set_data('regulars', correctCaseName:lower(), nil) + Server.set_data('regulars', correctCaseName, true) end end ) +Event.add( + Server.events.on_server_started, + function() + Module.sync_regulars() + end +) + +Server.on_data_set_changed( + 'regulars', + function(data) + global.regulars[data.key] = data.value + end +) + return Module