2018-06-27 15:48:04 +02:00
local Event = require ' utils.event '
2018-11-26 03:07:03 +02:00
local Utils = require ' utils.core '
2018-11-27 14:32:33 +02:00
local Server = require ' features.server '
2018-10-04 00:26:33 +02:00
local Donators = require ' resources.donators '
2018-11-26 13:44:27 +02:00
local Game = require ' utils.game '
2018-11-28 00:12:00 +02:00
local Token = require ' utils.token '
2018-10-03 22:03:19 +02:00
global.regulars = { }
2018-10-04 00:26:33 +02:00
global.donators = Donators.donators
2018-04-15 22:24:10 +02:00
2018-05-23 18:39:46 +02:00
local Module = { }
2018-06-27 15:48:04 +02:00
Module.is_regular =
function ( player_name )
2018-12-22 01:38:47 +02:00
return Utils.cast_bool ( global.regulars [ player_name ] or global.regulars [ player_name : lower ( ) ] or ( global.silly_regulars and global.silly_regulars [ player_name ] ) ) --to make it backwards compatible
2017-07-09 15:20:01 +02:00
end
2018-10-03 22:03:19 +02:00
2018-11-26 13:44:27 +02:00
Module.add_regular = function ( player_name )
2018-06-02 18:16:04 +02:00
local actor = Utils.get_actor ( )
2018-11-26 13:44:27 +02:00
if ( Module.is_regular ( player_name ) ) then
2018-11-06 13:55:52 +02:00
Game.player_print ( player_name .. ' is already a regular. ' )
2017-08-23 23:06:58 +02:00
else
2018-11-26 13:44:27 +02:00
global.regulars [ player_name ] = true
Server.set_data ( ' regulars ' , player_name , true )
game.print ( actor .. ' promoted ' .. player_name .. ' to regular. ' )
end
2017-07-09 15:20:01 +02:00
end
2018-11-26 13:44:27 +02:00
Module.remove_regular = function ( player_name )
2018-06-02 18:16:04 +02:00
local actor = Utils.get_actor ( )
2018-10-03 22:03:19 +02:00
2018-11-26 13:44:27 +02:00
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
2018-10-03 22:03:19 +02:00
end
2018-11-26 13:44:27 +02:00
local sync_regulars_callback =
Token.register (
function ( data )
2018-11-27 16:47:37 +02:00
global.regulars = data.entries or { }
2018-05-23 19:29:35 +02:00
end
2018-11-26 13:44:27 +02:00
)
2018-10-03 22:03:19 +02:00
2018-11-26 13:44:27 +02:00
function Module . sync_regulars ( )
Server.try_get_all_data ( ' regulars ' , sync_regulars_callback )
2017-07-09 15:20:01 +02:00
end
2018-05-23 18:39:46 +02:00
Module.print_regulars = function ( )
2018-10-03 22:03:19 +02:00
local result = { }
2018-06-27 15:48:04 +02:00
for k , _ in pairs ( global.regulars ) do
2018-10-03 22:03:19 +02:00
table.insert ( result , k )
2018-06-27 15:48:04 +02:00
end
2018-10-03 22:03:19 +02:00
result = table.concat ( result , ' , ' )
2018-11-27 18:51:15 +02:00
Game.player_print ( result )
2017-07-09 15:20:01 +02:00
end
2018-06-27 15:48:04 +02:00
function Module . get_rank ( player )
if player.admin then
return ' Admin '
elseif Module.is_regular ( player.name ) then
return ' Regular '
else
return ' Guest '
end
end
2018-06-04 12:36:21 +02:00
2018-08-13 13:39:27 +02:00
function Module . is_donator ( player_name )
2018-11-26 14:40:38 +02:00
return global.donators [ player_name ] ~= nil
2018-08-13 13:39:27 +02:00
end
2018-09-11 01:20:12 +02:00
function Module . player_has_donator_perk ( player_name , perk_flag )
2018-09-11 01:08:22 +02:00
local d = global.donators [ player_name ]
if not d then
return false
end
2018-11-26 14:40:38 +02:00
local flags = d.perk_flags
if not flags then
return false
end
return bit32.band ( flags , perk_flag ) == perk_flag
2018-09-11 01:08:22 +02:00
end
2018-10-03 22:03:19 +02:00
function Module . get_donator_welcome_message ( player_name )
2018-11-26 14:40:38 +02:00
local d = global.donators [ player_name ]
if not d then
return nil
end
2018-10-03 22:03:19 +02:00
2018-11-26 14:40:38 +02:00
return d.welcome_messages
2018-10-04 00:26:33 +02:00
end
2018-11-26 14:40:38 +02:00
function Module . set_donator ( player_name , data )
global.donators [ player_name ] = data
Server.set_data ( ' donators ' , player_name , data )
2018-10-03 22:03:19 +02:00
end
2018-11-26 14:40:38 +02:00
local sync_donators_callback =
Token.register (
function ( data )
2018-11-27 16:47:37 +02:00
global.donators = data.entries or { }
2018-11-26 14:40:38 +02:00
end
)
function Module . sync_donators ( )
Server.try_get_all_data ( ' donators ' , sync_donators_callback )
2018-10-04 00:26:33 +02:00
end
function Module . print_donators ( )
local result = { }
2018-11-26 14:40:38 +02:00
for k , _ in pairs ( global.donators ) do
2018-10-04 00:26:33 +02:00
table.insert ( result , k )
end
2018-11-26 14:40:38 +02:00
result = table.concat ( result , ' , ' )
2018-11-27 18:51:15 +02:00
Game.player_print ( result )
2018-10-04 00:26:33 +02:00
end
2018-06-27 15:48:04 +02:00
Event.add (
defines.events . on_player_joined_game ,
function ( event )
2018-09-23 12:46:58 +02:00
local correctCaseName = Game.get_player_by_index ( event.player_index ) . name
2018-11-26 21:39:51 +02:00
local lowerCaseName = correctCaseName : lower ( )
if correctCaseName ~= lowerCaseName and global.regulars [ lowerCaseName ] then
global.regulars [ lowerCaseName ] = nil
global.regulars [ correctCaseName ] = true
Server.set_data ( ' regulars ' , lowerCaseName , nil )
2018-11-26 13:44:27 +02:00
Server.set_data ( ' regulars ' , correctCaseName , true )
2018-06-27 15:48:04 +02:00
end
end
)
2018-05-23 18:39:46 +02:00
2018-11-26 13:44:27 +02:00
Event.add (
Server.events . on_server_started ,
function ( )
Module.sync_regulars ( )
2018-11-26 14:40:38 +02:00
Module.sync_donators ( )
2018-11-26 13:44:27 +02:00
end
)
Server.on_data_set_changed (
' regulars ' ,
function ( data )
global.regulars [ data.key ] = data.value
end
)
2018-11-26 14:40:38 +02:00
Server.on_data_set_changed (
' donators ' ,
function ( data )
global.donators [ data.key ] = data.value
end
)
2018-05-23 18:39:46 +02:00
return Module