mirror of
https://github.com/Refactorio/RedMew.git
synced 2024-12-12 10:04:40 +02:00
c2234505f3
* Implement server-side color saving * Add set_and_return to core utils
91 lines
2.8 KiB
Lua
91 lines
2.8 KiB
Lua
local Event = require 'utils.event'
|
|
local Game = require 'utils.game'
|
|
local Command = require 'utils.command'
|
|
local Server = require 'features.server'
|
|
local Token = require 'utils.token'
|
|
local Utils = require 'utils.core'
|
|
|
|
local serialize = serpent.line
|
|
|
|
local Public = {}
|
|
|
|
local color_callback =
|
|
Token.register(
|
|
function(data)
|
|
local key = data.key
|
|
local value = data.value
|
|
if not value then
|
|
return
|
|
end
|
|
local player = game.players[key]
|
|
if not player then
|
|
return
|
|
end
|
|
player.chat_color = value.chat_color
|
|
player.color = value.color
|
|
end
|
|
)
|
|
|
|
--- Attempts to retrieve and get the saved color of a LuaPlayer
|
|
function Public.recall_player_color(player)
|
|
Server.try_get_data('colors', player.name, color_callback)
|
|
end
|
|
|
|
--- Assigns LuaPlayer random RGB values for color and player_color and returns the RGB table.
|
|
function Public.set_random_color(player)
|
|
return {
|
|
chat_color = Utils.set_and_return(player, 'chat_color', Utils.random_RGB()),
|
|
color = Utils.set_and_return(player, 'color', Utils.random_RGB())
|
|
}
|
|
end
|
|
|
|
--- Saves the player's color to the server
|
|
local function save_color(player_name, value)
|
|
Server.set_data('colors', player_name, value)
|
|
end
|
|
|
|
Command.add(
|
|
'color-redmew',
|
|
{
|
|
description = 'Set will save your current color for future maps. Reset will erase your saved color. Random will give you a random color.',
|
|
arguments = {'set-reset-random'},
|
|
admin_only = false,
|
|
regular_only = true,
|
|
allowed_by_server = false,
|
|
allowed_by_player = true
|
|
},
|
|
function(args, player)
|
|
local player_name = player.name
|
|
if args['set-reset-random'] == 'set' then
|
|
local data = {
|
|
color = player.color,
|
|
chat_color = player.chat_color,
|
|
}
|
|
save_color(player_name, data)
|
|
player.print('Your color has been saved. Any time you join a redmew server your color will automatically be set.')
|
|
elseif args['set-reset-random'] == 'reset' then
|
|
save_color(player_name, nil)
|
|
player.print('Your saved color (if you had one) has been removed.')
|
|
elseif args['set-reset-random'] == 'random' then
|
|
local color_data = Public.set_random_color(player)
|
|
player.print('Your color has been changed to: ' .. serialize(color_data))
|
|
else
|
|
player.print('Only set, reset, and random are accepted arguments')
|
|
end
|
|
end
|
|
)
|
|
|
|
Event.add(
|
|
defines.events.on_player_joined_game,
|
|
function(event)
|
|
local player = Game.get_player_by_index(event.player_index)
|
|
if not player or not player.valid then
|
|
return
|
|
end
|
|
|
|
Public.recall_player_color(player)
|
|
end
|
|
)
|
|
|
|
return Public
|