Fixed Existing Lua Check Errors

This commit is contained in:
Cooldude2606
2020-05-26 18:21:10 +01:00
parent 2aaeb06be3
commit 32507492b8
76 changed files with 1622 additions and 1617 deletions

View File

@@ -17,31 +17,31 @@ Event.add(defines.events.on_player_created, function(event)
player.force.chart(player.surface, {{p.x-r, p.y-r}, {p.x+r, p.y+r}})
end
-- spawn items
for item,callback in pairs(items) do
for item, callback in pairs(items) do
if type(callback) == 'function' then
local stats = player.force.item_production_statistics
local made = stats.get_input_count(item)
local success,count = pcall(callback,made,stats.get_input_count,player)
local success, count = pcall(callback, made, stats.get_input_count, player)
count = math.floor(count)
if success and count > 0 then
player.insert{name=item,count=count}
player.insert{name=item, count=count}
end
end
end
end)
Event.on_init(function()
remote.call('freeplay','set_created_items',{})
remote.call('freeplay','set_chart_distance',0)
remote.call('freeplay','set_skip_intro',config.skip_intro)
remote.call('freeplay', 'set_created_items', {})
remote.call('freeplay', 'set_chart_distance', 0)
remote.call('freeplay', 'set_skip_intro', config.skip_intro)
if config.research_queue_from_start then
for _,force in pairs(game.forces) do
for _, force in pairs(game.forces) do
force.research_queue_enabled = true
end
end
if not config.disable_base_game_silo_script then
if config.skip_victory then
remote.call('silo_script','set_no_victory',true)
remote.call('silo_script', 'set_no_victory', true)
end
end
end)

View File

@@ -8,7 +8,7 @@ local config = require 'config.popup_messages' --- @dep config.popup_messages
local send_text = Game.print_player_floating_text -- (player_index, text, color)
Event.add(defines.events.on_console_chat,function(event)
Event.add(defines.events.on_console_chat, function(event)
if not event.player_index or event.player_index < 1 then return end
local player = Game.get_player_by_index(event.player_index)
@@ -18,7 +18,7 @@ Event.add(defines.events.on_console_chat,function(event)
-- Sends the message as text above them
if config.show_player_messages then
send_text(player.index,{'chat-popup.message',player.name,event.message},player.chat_color)
send_text(player.index, {'chat-popup.message', player.name, event.message}, player.chat_color)
end
if not config.show_player_mentions then return end
@@ -27,10 +27,10 @@ Event.add(defines.events.on_console_chat,function(event)
local search_string = event.message:lower():gsub("%s+", "")
-- Loops over online players to see if they name is included
for _,mentioned_player in pairs(game.connected_players) do
for _, mentioned_player in pairs(game.connected_players) do
if mentioned_player.index ~= player.index then
if search_string:match(mentioned_player.name:lower(), 1, true) then
send_text(mentioned_player.index,{'chat-popup.ping',player.name},player.chat_color)
send_text(mentioned_player.index, {'chat-popup.ping', player.name}, player.chat_color)
end
end
end

View File

@@ -6,17 +6,17 @@ local Game = require 'utils.game' --- @dep utils.game
local Roles = require 'expcore.roles' --- @dep expcore.roles
local config = require 'config.chat_reply' --- @dep config.chat_reply
Event.add(defines.events.on_console_chat,function(event)
Event.add(defines.events.on_console_chat, function(event)
local player_index = event.player_index
if not player_index or player_index < 1 then return end
local player = Game.get_player_by_index(player_index)
local message = event.message:lower():gsub("%s+", "")
local allowed = true
if config.command_admin_only and not player.admin then allowed = false end
if config.command_permission and not Roles.player_allowed(player,config.command_permission) then allowed = false end
if config.command_permission and not Roles.player_allowed(player, config.command_permission) then allowed = false end
local prefix = config.command_prefix
for key_word,reply in pairs(config.messages) do
for key_word, reply in pairs(config.messages) do
if message:find(key_word) then
if type(reply) == 'function' then
reply = reply(player)
@@ -24,29 +24,29 @@ Event.add(defines.events.on_console_chat,function(event)
if message:find(prefix..key_word) then
if allowed then
game.print{'chat-bot.reply',reply}
game.print{'chat-bot.reply', reply}
else
player.print{'chat-bot.disallow'}
end
elseif not allowed then
player.print{'chat-bot.reply',reply}
player.print{'chat-bot.reply', reply}
end
end
end
if not allowed then return end
for key_word,reply in pairs(config.commands) do
for key_word, reply in pairs(config.commands) do
if message:find(prefix..key_word) then
if type(reply) == 'function' then
reply = reply(player)
if reply then
game.print{'chat-bot.reply',reply}
game.print{'chat-bot.reply', reply}
end
else
game.print{'chat-bot.reply',reply}
game.print{'chat-bot.reply', reply}
end
end

View File

@@ -18,7 +18,7 @@ local Public = {
Global.register({
compilatrons = Public.compilatrons,
current_messages = Public.current_messages
},function(tbl)
}, function(tbl)
Public.compilatrons = tbl.compilatrons
Public.current_messages = tbl.current_messages
end)
@@ -42,7 +42,7 @@ local callback =
local function circle_messages()
for name, ent in pairs(Public.compilatrons) do
if not ent.valid then
Public.spawn_compilatron(game.players[1].surface,name)
Public.spawn_compilatron(game.players[1].surface, name)
end
local current_message = Public.current_messages[name]
local msg_number
@@ -66,7 +66,7 @@ Event.on_nth_tick(config.message_cycle, circle_messages)
--- This will add a compilatron to the global and start his message cycle
-- @tparam LuaEntity entity the compilatron entity that moves around
-- @tparam string name the name of the location that the complitron is at
-- @tparam string name the name of the location that the compilatron is at
function Public.add_compilatron(entity, name)
if not entity and not entity.valid then
return
@@ -85,19 +85,19 @@ end
--- This spawns a new compilatron on a surface with the given location tag (not a position)
-- @tparam LuaSurface surface the surface to spawn the compilatron on
-- @tparam string location the location tag that is in the config file
function Public.spawn_compilatron(surface,location)
function Public.spawn_compilatron(surface, location)
local position = locations[location]
local pos = surface.find_non_colliding_position('compilatron', position, 1.5, 0.5)
local compi = surface.create_entity {name='compilatron',position=pos,force=game.forces.neutral}
Public.add_compilatron(compi,location)
local compi = surface.create_entity {name='compilatron', position=pos, force=game.forces.neutral}
Public.add_compilatron(compi, location)
end
-- When the first player is created this will create all compilatrons that are resisted in the config
Event.add(defines.events.on_player_created,function(event)
Event.add(defines.events.on_player_created, function(event)
if event.player_index ~= 1 then return end
local player = Game.get_player_by_index(event.player_index)
for location,pos in pairs(locations) do
Public.spawn_compilatron(player.surface,location)
for location in pairs(locations) do
Public.spawn_compilatron(player.surface, location)
end
end)

View File

@@ -12,21 +12,21 @@ Event.add(defines.events.on_entity_damaged, function(event)
local damage = math.floor(event.original_damage_amount)
local health = math.floor(entity.health)
local health_percentage = entity.get_health_ratio()
local text_colour = {r=1-health_percentage,g=health_percentage,b=0}
local text_colour = {r=1-health_percentage, g=health_percentage, b=0}
-- Gets the location of the text
local size = entity.get_radius()
if size < 1 then size = 1 end
local r = (math.random()-0.5)*size*config.damage_location_variance
local p = entity.position
local position = {x=p.x+r,y=p.y-size}
local position = {x=p.x+r, y=p.y-size}
-- Sets the message
local message
if entity.name == 'character' and config.show_player_health then
message = {'damage-popup.player-health',health}
message = {'damage-popup.player-health', health}
elseif entity.name ~= 'character' and cause and cause.name == 'character' and config.show_player_damage then
message = {'damage-popup.player-damage',damage}
message = {'damage-popup.player-damage', damage}
end
-- Outputs the message as floating text

View File

@@ -5,13 +5,13 @@ local Event = require 'utils.event' --- @dep utils.event
local Game = require 'utils.game' --- @dep utils.game
local Global = require 'utils.global' --- @dep utils.global
local config = require 'config.death_logger' --- @dep config.death_logger
local format_time,move_items = _C.format_time, _C.move_items --- @dep expcore.common
local format_time, move_items = _C.format_time, _C.move_items --- @dep expcore.common
local deaths = {
archive={} -- deaths moved here after body is gone
--{player_name='Cooldude2606',time_of_death='15H 15M',position={x=0,y=0},corpse=LuaEntity,tag=LuaCustomChartTag}
--{player_name='Cooldude2606', time_of_death='15H 15M', position={x=0, y=0}, corpse=LuaEntity, tag=LuaCustomChartTag}
}
Global.register(deaths,function(tbl)
Global.register(deaths, function(tbl)
deaths = tbl
end)
@@ -20,10 +20,10 @@ local function create_map_tag(death)
local player = Game.get_player_from_any(death.player_name)
local message = player.name..' died'
if config.include_time_of_death then
local time = format_time(death.time_of_death,{hours=true,minutes=true,string=true})
local time = format_time(death.time_of_death, {hours=true, minutes=true, string=true})
message = message..' at '..time
end
death.tag = player.force.add_chart_tag(player.surface,{
death.tag = player.force.add_chart_tag(player.surface, {
position=death.position,
icon=config.map_icon,
text=message
@@ -33,7 +33,7 @@ end
--- Checks that all map tags are present and valid
-- adds missing ones, deletes expired ones
local function check_map_tags()
for index,death in ipairs(deaths) do
for index, death in ipairs(deaths) do
local map_tag = death.tag
local corpse = death.corpse
-- Check the corpse is valid
@@ -51,19 +51,19 @@ local function check_map_tags()
-- Move the death to the archive
death.corpse = nil
death.tag = nil
table.insert(deaths.archive,death)
table.remove(deaths,index)
table.insert(deaths.archive, death)
table.remove(deaths, index)
end
end
end
-- when a player dies a new death is added to the records and a map marker is made
Event.add(defines.events.on_player_died,function(event)
Event.add(defines.events.on_player_died, function(event)
local player = Game.get_player_by_index(event.player_index)
local corpse = player.surface.find_entity('character-corpse',player.position)
local corpse = player.surface.find_entity('character-corpse', player.position)
if config.use_chests_as_bodies then
local items = corpse.get_inventory(defines.inventory.character_corpse).get_contents()
local chest = move_items(items,corpse.surface,corpse.position)
local chest = move_items(items, corpse.surface, corpse.position)
chest.destructible = false
corpse.destroy()
corpse = chest
@@ -77,22 +77,22 @@ Event.add(defines.events.on_player_died,function(event)
if config.show_map_markers then
create_map_tag(death)
end
table.insert(deaths,death)
table.insert(deaths, death)
end)
-- every 5 min all bodies are checked for valid map tags
if config.show_map_markers then
local check_period = 60*60*5 -- five minutes
Event.on_nth_tick(check_period,function(event)
Event.on_nth_tick(check_period, function()
check_map_tags()
end)
end
if config.auto_collect_bodies then
Event.add(defines.events.on_character_corpse_expired,function(event)
Event.add(defines.events.on_character_corpse_expired, function(event)
local corpse = event.corpse
local items = corpse.get_inventory(defines.inventory.character_corpse).get_contents()
move_items(items,corpse.surface,{x=0,y=0})
move_items(items, corpse.surface, {x=0, y=0})
end)
end

View File

@@ -4,7 +4,7 @@
local Event = require 'utils.event' --- @dep utils.event
local Game = require 'utils.game' --- @dep utils.game
local Colors = require 'utils.color_presets' --- @dep utils.color_presets
local write_json,format_time = _C.write_json, _C.format_time --- @dep expcore.common
local write_json, format_time = _C.write_json, _C.format_time --- @dep expcore.common
local config = require 'config.discord_alerts' --- @dep config.discord_alerts
local function get_player_name(event)
@@ -16,8 +16,8 @@ local function to_hex(color)
local hex_digits = '0123456789ABCDEF'
local function hex(bit)
local major, minor = math.modf(bit/16)
major,minor = major+1,minor*16+1
return hex_digits:sub(major,major)..hex_digits:sub(minor,minor)
major, minor = major+1, minor*16+1
return hex_digits:sub(major, major)..hex_digits:sub(minor, minor)
end
return '0x'..hex(color.r)..hex(color.g)..hex(color.b)
@@ -33,24 +33,24 @@ local function emit_event(args)
end
local tick = args.tick or 0
local tick_formated = format_time(tick,{hours = true,minutes = true,string = true,long = true})
local tick_formated = format_time(tick, {hours = true, minutes = true, string = true, long = true})
local players_online = 0
local admins_online = 0
for _,player in pairs(game.connected_players) do
for _, player in pairs(game.connected_players) do
players_online = players_online+1
if player.admin then
admins_online = admins_online + 1
end
end
local done = {title=true,color=true,description=true}
local done = {title=true, color=true, description=true}
local fields = {{
name='Server Details',
value=string.format('Server name: ${serverName} Players: %d Admins: %d Time: %s',players_online,admins_online,tick_formated)
value=string.format('Server name: ${serverName} Players: %d Admins: %d Time: %s', players_online, admins_online, tick_formated)
}}
for key,value in pairs(args) do
for key, value in pairs(args) do
if not done[key] then
done[key] = true
local field = {
@@ -59,17 +59,17 @@ local function emit_event(args)
inline=false
}
local new_value, inline = value:gsub('<inline>','',1)
local new_value, inline = value:gsub('<inline>', '', 1)
if inline then
field.value = new_value
field.inline = true
end
table.insert(fields,field)
table.insert(fields, field)
end
end
write_json('log/discord.log',{
write_json('log/discord.log', {
title=title,
description=description,
color=color,
@@ -80,8 +80,8 @@ end
--- Reports added and removed
if config.player_reports then
local Reports = require 'modules.control.reports' --- @dep modules.control.reports
Event.add(Reports.events.on_player_reported,function(event)
local player_name,by_player_name = get_player_name(event)
Event.add(Reports.events.on_player_reported, function(event)
local player_name, by_player_name = get_player_name(event)
emit_event{
title='Report',
description='A player was reported',
@@ -91,7 +91,7 @@ if config.player_reports then
['Reason:']=event.reason
}
end)
Event.add(Reports.events.on_report_removed,function(event)
Event.add(Reports.events.on_report_removed, function(event)
local player_name = get_player_name(event)
emit_event{
title='Report Removed',
@@ -106,8 +106,8 @@ end
--- Warnings added and removed
if config.player_warnings then
local Warnings = require 'modules.control.warnings' --- @dep modules.control.warnings
Event.add(Warnings.events.on_warning_added,function(event)
local player_name,by_player_name = get_player_name(event)
Event.add(Warnings.events.on_warning_added, function(event)
local player_name, by_player_name = get_player_name(event)
emit_event{
title='Warning',
description='A player has been given a warning',
@@ -117,8 +117,8 @@ if config.player_warnings then
['Reason:']=event.reason
}
end)
Event.add(Warnings.events.on_warning_removed,function(event)
local player_name,by_player_name = get_player_name(event)
Event.add(Warnings.events.on_warning_removed, function(event)
local player_name, by_player_name = get_player_name(event)
emit_event{
title='Warning Removed',
description='A player has a warning removed',
@@ -132,8 +132,8 @@ end
--- When a player is jailed or unjailed
if config.player_jail then
local Jail = require 'modules.control.jail'
Event.add(Jail.events.on_player_jailed,function(event)
local player_name,by_player_name = get_player_name(event)
Event.add(Jail.events.on_player_jailed, function(event)
local player_name, by_player_name = get_player_name(event)
emit_event{
title='Jail',
description='A player has been jailed',
@@ -143,8 +143,8 @@ if config.player_jail then
['Reason:']=event.reason
}
end)
Event.add(Jail.events.on_player_unjailed,function(event)
local player_name,by_player_name = get_player_name(event)
Event.add(Jail.events.on_player_unjailed, function(event)
local player_name, by_player_name = get_player_name(event)
emit_event{
title='Unjail',
description='A player has been unjailed',
@@ -158,8 +158,8 @@ end
--- When a player is tempbanned
if config.player_temp_ban then
local Jail = require 'modules.control.jail'
Event.add(Jail.events.on_player_temp_banned,function(event)
local player_name,by_player_name = get_player_name(event)
Event.add(Jail.events.on_player_temp_banned, function(event)
local player_name, by_player_name = get_player_name(event)
emit_event{
title='Temp Ban',
description='A player has been temp banned',
@@ -169,8 +169,8 @@ if config.player_temp_ban then
['Reason:']=event.reason
}
end)
Event.add(Jail.events.on_player_untemp_banned,function(event)
local player_name,by_player_name = get_player_name(event)
Event.add(Jail.events.on_player_untemp_banned, function(event)
local player_name, by_player_name = get_player_name(event)
emit_event{
title='Temp Ban Removed',
description='A player has been untemp banned',
@@ -183,7 +183,7 @@ end
--- Ban and unban
if config.player_bans then
Event.add(defines.events.on_player_banned,function(event)
Event.add(defines.events.on_player_banned, function(event)
if event.by_player then
local by_player = Game.get_player_by_index(event.by_player)
emit_event{
@@ -196,7 +196,7 @@ if config.player_bans then
}
end
end)
Event.add(defines.events.on_player_unbanned,function(event)
Event.add(defines.events.on_player_unbanned, function(event)
if event.by_player then
local by_player = Game.get_player_by_index(event.by_player)
emit_event{
@@ -212,7 +212,7 @@ end
--- Mute and unmute
if config.player_mutes then
Event.add(defines.events.on_player_muted,function(event)
Event.add(defines.events.on_player_muted, function(event)
local player_name = get_player_name(event)
emit_event{
title='Muted',
@@ -221,7 +221,7 @@ if config.player_mutes then
['Player:']='<inline>'..player_name
}
end)
Event.add(defines.events.on_player_unmuted,function(event)
Event.add(defines.events.on_player_unmuted, function(event)
local player_name = get_player_name(event)
emit_event{
title='Un-Muted',
@@ -234,7 +234,7 @@ end
--- Kick
if config.player_kicks then
Event.add(defines.events.on_player_kicked,function(event)
Event.add(defines.events.on_player_kicked, function(event)
if event.by_player then
local player_name = get_player_name(event)
local by_player = Game.get_player_by_index(event.by_player)
@@ -252,7 +252,7 @@ end
--- Promote and demote
if config.player_promotes then
Event.add(defines.events.on_player_promoted,function(event)
Event.add(defines.events.on_player_promoted, function(event)
local player_name = get_player_name(event)
emit_event{
title='Promote',
@@ -261,7 +261,7 @@ if config.player_promotes then
['Player:']='<inline>'..player_name
}
end)
Event.add(defines.events.on_player_demoted,function(event)
Event.add(defines.events.on_player_demoted, function(event)
local player_name = get_player_name(event)
emit_event{
title='Demote',
@@ -273,12 +273,12 @@ if config.player_promotes then
end
--- Other commands
Event.add(defines.events.on_console_command,function(event)
Event.add(defines.events.on_console_command, function(event)
if event.player_index then
local player_name = get_player_name(event)
if config[event.command] then
emit_event{
title=event.command:gsub('^%l',string.upper),
title=event.command:gsub('^%l', string.upper),
description='/'..event.command..' was used',
color=Colors.grey,
['By:']='<inline>'..player_name,

View File

@@ -7,7 +7,7 @@ local config = require 'config.join_messages' --- @dep config.join_messages
local Global = require 'utils.global' --- @dep utils.global
require 'overrides.table'
Global.register(config,function(tbl)
Global.register(config, function(tbl)
config = tbl
end)
@@ -16,9 +16,9 @@ function(event)
local player = Game.get_player_by_index(event.player_index)
local custom_message = config[player.name]
if custom_message then
game.print(custom_message,player.color)
game.print(custom_message, player.color)
else
player.print{'greetings.greet',{'links.discord'}}
player.print{'greetings.greet', {'links.discord'}}
end
end

View File

@@ -5,7 +5,7 @@ local Event = require 'utils.event' --- @dep utils.event
local config = require 'config.pollution_grading' --- @dep config.pollution_grading
local delay = config.update_delay * 3600 -- convert from minutes to ticks
Event.on_nth_tick(delay,function()
Event.on_nth_tick(delay, function()
local surface = game.surfaces[1]
local true_max = surface.get_pollution(config.reference_point)
local max = true_max*config.max_scalar

View File

@@ -8,22 +8,22 @@ local config = require 'config.preset_player_colours' --- @dep config.preset_pla
local Global = require 'utils.global' --- @dep utils.global
require 'overrides.table'
Global.register(config,function(tbl)
Global.register(config, function(tbl)
config = tbl
end)
Event.add(defines.events.on_player_created,function(event)
Event.add(defines.events.on_player_created, function(event)
local player = Game.get_player_by_index(event.player_index)
local color = 'white'
if config.players[player.name] then
color = config.players[player.name]
else
while config.disallow[color] do
color = table.get_random_dictionary_entry(Colours,true)
color = table.get_random_dictionary_entry(Colours, true)
end
color = Colours[color]
end
color = {r=color.r/255,g=color.g/255,b=color.b/255,a=0.5}
color = {r=color.r/255, g=color.g/255, b=color.b/255, a=0.5}
player.color = color
player.chat_color = color
end)

View File

@@ -9,7 +9,7 @@ local config = require 'config.scorched_earth' --- @dep config.scorched_earth
-- Loops over the config and finds the wile which has the highest value for strength
local max_strength = 0
for _,strength in pairs(config.strengths) do
for _, strength in pairs(config.strengths) do
if strength > max_strength then
max_strength = strength
end
@@ -22,12 +22,12 @@ Global.register(debug_players, function(tbl)
end)
-- Will degrade a tile down to the next tile when called
local function degrade(surface,position)
local function degrade(surface, position)
local tile = surface.get_tile(position)
local tile_name = tile.name
local degrade_tile_name = config.degrade_order[tile_name]
if not degrade_tile_name then return end
surface.set_tiles{{name=degrade_tile_name,position=position}}
surface.set_tiles{{name=degrade_tile_name, position=position}}
end
-- Same as degrade but will degrade all tiles that are under an entity
@@ -42,12 +42,12 @@ local function degrade_entity(entity)
for x = lt.x, rb.x do -- x loop
local px = position.x+x
for y = lt.y, rb.y do -- y loop
local p = {x=px,y=position.y+y}
local p = {x=px, y=position.y+y}
local tile = surface.get_tile(p)
local tile_name = tile.name
local degrade_tile_name = config.degrade_order[tile_name]
if not degrade_tile_name then return end
table.insert(tiles,{name=degrade_tile_name,position=p})
table.insert(tiles, {name=degrade_tile_name, position=p})
end
end
surface.set_tiles(tiles)
@@ -62,15 +62,15 @@ local function get_probability(strength)
end
-- Gets the mean of the strengths around a tile to give the strength at that position
local function get_tile_strength(surface,position)
local function get_tile_strength(surface, position)
local tile = surface.get_tile(position)
local tile_name = tile.name
local strength = config.strengths[tile_name]
if not strength then return end
for x = -1,1 do -- x loop
for x = -1, 1 do -- x loop
local px = position.x + x
for y = -1,1 do -- y loop
local check_tile = surface.get_tile{x=px,y=position.y+y}
for y = -1, 1 do -- y loop
local check_tile = surface.get_tile{x=px, y=position.y+y}
local check_tile_name = check_tile.name
local check_strength = config.strengths[check_tile_name] or 0
strength = strength + check_strength
@@ -80,12 +80,12 @@ local function get_tile_strength(surface,position)
end
-- Same as get_tile_strength but returns to a in game text rather than as a value
local function debug_get_tile_strength(surface,position)
for x = -3,3 do -- x loop
local function debug_get_tile_strength(surface, position)
for x = -3, 3 do -- x loop
local px = position.x+x
for y = -3,3 do -- y loop
local p = {x=px,y=position.y+y}
local strength = get_tile_strength(surface,p) or 0
for y = -3, 3 do -- y loop
local p = {x=px, y=position.y+y}
local strength = get_tile_strength(surface, p) or 0
local tile = surface.get_tile(p)
print_grid_value(get_probability(strength)*config.weakness_value, surface, tile.position)
end
@@ -97,13 +97,13 @@ Event.add(defines.events.on_player_changed_position, function(event)
local player = Game.get_player_by_index(event.player_index)
local surface = player.surface
local position = player.position
local strength = get_tile_strength(surface,position)
local strength = get_tile_strength(surface, position)
if not strength then return end
if get_probability(strength) > math.random() then
degrade(surface,position)
degrade(surface, position)
end
if debug_players[player.name] then
debug_get_tile_strength(surface,position)
debug_get_tile_strength(surface, position)
end
end)
@@ -112,7 +112,7 @@ Event.add(defines.events.on_built_entity, function(event)
local entity = event.created_entity
local surface = entity.surface
local position = entity.position
local strength = get_tile_strength(surface,position)
local strength = get_tile_strength(surface, position)
if not strength then return end
if get_probability(strength)*config.weakness_value > math.random() then
degrade_entity(entity)
@@ -124,7 +124,7 @@ Event.add(defines.events.on_robot_built_entity, function(event)
local entity = event.created_entity
local surface = entity.surface
local position = entity.position
local strength = get_tile_strength(surface,position)
local strength = get_tile_strength(surface, position)
if not strength then return end
if get_probability(strength)*config.weakness_value > math.random() then
degrade_entity(entity)
@@ -132,7 +132,7 @@ Event.add(defines.events.on_robot_built_entity, function(event)
end)
-- Used as a way to access the global table
return function(player_name,state)
return function(player_name, state)
local player = Game.get_player_from_any(player_name)
clear_flying_text(player.surface)
debug_players[player_name] = state

View File

@@ -10,7 +10,7 @@ local entities = config.entities
local belts = config.afk_belts.locations
local turrets = config.infinite_ammo_turrets.locations
Global.register(turrets,function(tbl)
Global.register(turrets, function(tbl)
turrets = tbl
end)
@@ -19,13 +19,13 @@ local function get_spawn_force()
local force = game.forces['Spawn']
if force and force.valid then return force end
force = game.create_force('Spawn')
force.set_cease_fire('player',true)
game.forces['player'].set_cease_fire('Spawn',true)
force.set_cease_fire('player', true)
game.forces['player'].set_cease_fire('Spawn', true)
return force
end
-- protects and entity so players cant do anything to it
local function protect_entity(entity,set_force)
local function protect_entity(entity, set_force)
if entity and entity.valid then
entity.destructible = false
entity.minable = false
@@ -39,40 +39,40 @@ end
-- handles the infinite ammo turrets
local function spawn_turrets()
if config.infinite_ammo_turrets.enabled then
for _,turret_pos in pairs(turrets) do
for _, turret_pos in pairs(turrets) do
local surface = game.surfaces[turret_pos.surface]
local pos = turret_pos.position
local turret = surface.find_entity('gun-turret',pos)
local turret = surface.find_entity('gun-turret', pos)
-- Makes a new turret if it is not found
if not turret or not turret.valid then
turret = surface.create_entity{name='gun-turret',position=pos,force='Spawn'}
protect_entity(turret,true)
turret = surface.create_entity{name='gun-turret', position=pos, force='Spawn'}
protect_entity(turret, true)
end
-- adds ammo to the turret
local inv = turret.get_inventory(defines.inventory.turret_ammo)
if inv.can_insert{name=config.infinite_ammo_turrets.ammo_type,count=10} then
inv.insert{name=config.infinite_ammo_turrets.ammo_type,count=10}
if inv.can_insert{name=config.infinite_ammo_turrets.ammo_type, count=10} then
inv.insert{name=config.infinite_ammo_turrets.ammo_type, count=10}
end
end
end
end
-- makes a 2x2 afk belt where set in config
local function spawn_belts(surface,position)
local belt_details = {{-0.5,-0.5,2},{0.5,-0.5,4},{-0.5,0.5,0},{0.5,0.5,6}} -- x,y,dir
for _,belt_set in pairs(belts) do
local function spawn_belts(surface, position)
local belt_details = {{-0.5, -0.5, 2}, {0.5, -0.5, 4}, {-0.5, 0.5, 0}, {0.5, 0.5, 6}} -- x, y,dir
for _, belt_set in pairs(belts) do
local o = position
local p = belt_set
for _,belt in pairs(belt_details) do
local pos = {x=o.x+p.x+belt[1],y=o.y+p.y+belt[2]}
local belt_entity = surface.create_entity{name='transport-belt',position=pos,force='neutral',direction=belt[3]}
for _, belt in pairs(belt_details) do
local pos = {x=o.x+p.x+belt[1], y=o.y+p.y+belt[2]}
local belt_entity = surface.create_entity{name='transport-belt', position=pos, force='neutral', direction=belt[3]}
protect_entity(belt_entity)
end
end
end
-- generates an area with no water and removes entities in the decon area
local function spawn_base(surface,position)
local function spawn_base(surface, position)
local dr = config.corrections.deconstruction_radius
local dr2 = dr^2
local dtile = config.corrections.deconstruction_tile
@@ -86,17 +86,17 @@ local function spawn_base(surface,position)
for y = -pr, pr do -- loop over y
local y2 = y^2
local prod = x2+y2
local p = {x=position.x+x,y=position.y+y}
local p = {x=position.x+x, y=position.y+y}
if prod < dr2 then
-- if it is inside the decon radius
table.insert(tiles_to_make,{name=dtile,position=p})
local entities_to_remove = surface.find_entities_filtered{area={{p.x-1,p.y-1},{p.x,p.y}}}
for _,entity in pairs(entities_to_remove) do
table.insert(tiles_to_make, {name=dtile, position=p})
local entities_to_remove = surface.find_entities_filtered{area={{p.x-1, p.y-1}, {p.x, p.y}}}
for _, entity in pairs(entities_to_remove) do
if entity.name ~= 'character' then entity.destroy() end
end
elseif prod < pr2 then
-- if it is inside the pattern radius
table.insert(tiles_to_make,{name=ptile,position=p})
table.insert(tiles_to_make, {name=ptile, position=p})
end
end
end
@@ -104,30 +104,30 @@ local function spawn_base(surface,position)
end
-- generates the pattern that is in the config
local function spawn_pattern(surface,position)
local function spawn_pattern(surface, position)
local tiles_to_make = {}
local ptile = config.corrections.pattern_tile
local o = config.corrections.offset
local p = {x=position.x+o.x,y=position.y+o.y}
for _,tile in pairs(tiles) do
table.insert(tiles_to_make,{name=ptile,position={tile[1]+p.x,tile[2]+p.y}})
local p = {x=position.x+o.x, y=position.y+o.y}
for _, tile in pairs(tiles) do
table.insert(tiles_to_make, {name=ptile, position={tile[1]+p.x, tile[2]+p.y}})
end
surface.set_tiles(tiles_to_make)
end
-- generates the entities that are in the config
local function spawn_entities(surface,position)
local function spawn_entities(surface, position)
local o = config.corrections.offset
local p = {x=position.x+o.x,y=position.y+o.y}
for _,entity in pairs(entities) do
entity = surface.create_entity{name=entity[1],position={entity[2]+p.x,entity[3]+p.y},force='neutral'}
local p = {x=position.x+o.x, y=position.y+o.y}
for _, entity in pairs(entities) do
entity = surface.create_entity{name=entity[1], position={entity[2]+p.x, entity[3]+p.y}, force='neutral'}
protect_entity(entity)
entity.operable = true
end
end
local refill_time = 60*60*5 -- 5 minutes
Event.on_nth_tick(refill_time,function()
Event.on_nth_tick(refill_time, function()
if game.tick < 10 then return end
spawn_turrets()
end)
@@ -135,15 +135,15 @@ end)
Event.add(defines.events.on_player_created, function(event)
if event.player_index ~= 1 then return end
local player = Game.get_player_by_index(event.player_index)
local p = {x=0,y=0}
local p = {x=0, y=0}
local s = player.surface
spawn_base(s,p)
spawn_pattern(s,p)
spawn_base(s, p)
spawn_pattern(s, p)
get_spawn_force()
spawn_entities(s,p)
spawn_belts(s,p)
spawn_entities(s, p)
spawn_belts(s, p)
spawn_turrets()
player.teleport(p,s)
player.teleport(p, s)
end)
-- Way to access global table

View File

@@ -1,54 +1,7 @@
---LuaPlayerBuiltEntityEventFilters
---Events.set_event_filter(defines.events.on_built_entity, {{filter = "name", name = "fast-inserter"}})
local Event = require 'utils.event' --- @dep utils.event
local station_name_changer =
function(event)
local enetety = event.created_entity
local name = enetety.name
if name == "train-stop" then --only do the event if its a trainstop
local boundingbox = enetety.bounding_box
-- expanded box for recourse search:
local bounding2 = { {boundingbox.left_top.x -100 ,boundingbox.left_top.y -100} , {boundingbox.right_bottom.x +100,boundingbox.right_bottom.y +100 } }
--gets all resources in bounding_box2:
local recoursec = game.surfaces[1].find_entities_filtered{area = bounding2, type = "resource"}
if #recoursec > 0 then -- save cpu time if their are no recourses in bounding_box2
local closest_distance
local px,py = boundingbox.left_top.x,boundingbox.left_top.y
local recourse_closed
--Check which recource is closest
for i, item in ipairs(recoursec) do
local dx, dy = px - item.bounding_box.left_top.x, py - item.bounding_box.left_top.y
local distance = (dx*dx)+(dy*dy)
if not closest_distance or distance < closest_distance then
recourse_closed = item
closest_distance = distance
end
end
local item_name = recourse_closed.name
if item_name then -- prevent errors if something went wrong
local item_name2 = item_name:gsub("^%l", string.upper):gsub('-',' ') -- removing the - and making first letter capital
local Item_ore_fluid = "item"
if item_name == "crude-oil" then
Item_ore_fluid = "fluid"
end
--Final string:
enetety.backer_name = string.format("[L] [img=%s.%s] %s %s (%s)",Item_ore_fluid,item_name,item_name2,enetety.backer_name,Angle( enetety ))
end
end
end
end
--add func to robot and player build entities
Event.add(defines.events.on_built_entity,station_name_changer)
Event.add(defines.events.on_robot_built_entity,station_name_changer)
--Credit to Cooldude2606 for using his lua magic to make this function.
local directions = {
['W'] = -0.875,
@@ -60,12 +13,58 @@ local directions = {
['S'] = 0.625,
['SW'] = 0.875
}
function Angle( enetety )
local angle = math.atan2(enetety.position.y,enetety.position.x)/math.pi
for direction, requiredAngle in pairs(directions) do
if angle < requiredAngle then
return direction
end
end
local function Angle(entity)
local angle = math.atan2(entity.position.y, entity.position.x)/math.pi
for direction, requiredAngle in pairs(directions) do
if angle < requiredAngle then
return direction
end
end
end
local function station_name_changer(event)
local entity = event.created_entity
local name = entity.name
if name == "train-stop" then --only do the event if its a train stop
local boundingBox = entity.bounding_box
-- expanded box for recourse search:
local bounding2 = { {boundingBox.left_top.x -100 ,boundingBox.left_top.y -100} , {boundingBox.right_bottom.x +100, boundingBox.right_bottom.y +100 } }
-- gets all resources in bounding_box2:
local recourses = game.surfaces[1].find_entities_filtered{area = bounding2, type = "resource"}
if #recourses > 0 then -- save cpu time if their are no recourses in bounding_box2
local closest_distance
local px, py = boundingBox.left_top.x, boundingBox.left_top.y
local recourse_closed
--Check which recourse is closest
for i, item in ipairs(recourses) do
local dx, dy = px - item.bounding_box.left_top.x, py - item.bounding_box.left_top.y
local distance = (dx*dx)+(dy*dy)
if not closest_distance or distance < closest_distance then
recourse_closed = item
closest_distance = distance
end
end
local item_name = recourse_closed.name
if item_name then -- prevent errors if something went wrong
local item_name2 = item_name:gsub("^%l", string.upper):gsub('-', ' ') -- removing the - and making first letter capital
local Item_ore_fluid = "item"
if item_name == "crude-oil" then
Item_ore_fluid = "fluid"
end
--Final string:
entity.backer_name = string.format("[L] [img=%s.%s] %s %s (%s)", Item_ore_fluid, item_name, item_name2, entity.backer_name, Angle( entity ))
end
end
end
end
-- Add handler to robot and player build entities
Event.add(defines.events.on_built_entity, station_name_changer)
Event.add(defines.events.on_robot_built_entity, station_name_changer)

View File

@@ -57,7 +57,7 @@ Event.add(defines.events.on_tick, function()
local max_remove = math.floor(head/100)+1
local remove_count = math.random(0, max_remove)
while remove_count > 0 and head > 0 do
local remove_index = math.random(1,head)
local remove_index = math.random(1, head)
local entity = tree_queue[remove_index]
tree_queue[remove_index] = tree_queue[head]
head = head - 1
@@ -71,7 +71,7 @@ end)
-- Clear the chache
Event.on_nth_tick(300, function()
for key,_ in pairs(chache) do
for key, _ in pairs(chache) do
chache[key] = nil
end
end)

View File

@@ -10,16 +10,16 @@ require 'config.expcore.command_general_parse'
--- Sends a message in chat that only admins can see
-- @command admin-chat
-- @tparam string message the message to send in the admin chat
Commands.new_command('admin-chat','Sends a message in chat that only admins can see.')
:add_param('message',false)
Commands.new_command('admin-chat', 'Sends a message in chat that only admins can see.')
:add_param('message', false)
:enable_auto_concat()
:set_flag('admin_only')
:add_alias('ac')
:register(function(player,message,raw)
:register(function(player, message)
local player_name_colour = format_chat_player_name(player)
for _,return_player in pairs(game.connected_players) do
for _, return_player in pairs(game.connected_players) do
if return_player.admin then
return_player.print{'expcom-admin-chat.format',player_name_colour,message}
return_player.print{'expcom-admin-chat.format', player_name_colour, message}
end
end
return Commands.success -- prevents command complete message from showing

View File

@@ -17,9 +17,9 @@ local bonus_store = Store.register(function(player)
end)
-- Apply a bonus amount to a player
local function apply_bonus(player,amount)
local function apply_bonus(player, amount)
if not amount then return end
for bonus,min_max in pairs(config) do
for bonus, min_max in pairs(config) do
local increase = min_max[2]*amount
player[bonus] = min_max[1]+increase
end
@@ -28,32 +28,32 @@ end
--- Changes the amount of bonus you receive
-- @command bonus
-- @tparam number amount range 0-50 the percent increase for your bonus
Commands.new_command('bonus','Changes the amount of bonus you receive')
:add_param('amount','integer-range',0,50)
:register(function(player,amount)
Commands.new_command('bonus', 'Changes the amount of bonus you receive')
:add_param('amount', 'integer-range', 0,50)
:register(function(player, amount)
local percent = amount/100
Store.set(bonus_store,player,percent)
Commands.print{'expcom-bonus.set',amount}
Commands.print({'expcom-bonus.wip'},'orange')
Store.set(bonus_store, player, percent)
Commands.print{'expcom-bonus.set', amount}
Commands.print({'expcom-bonus.wip'}, 'orange')
end)
-- When store is updated apply new bonus to the player
Store.watch(bonus_store,function(value,category)
Store.watch(bonus_store, function(value, category)
local player = Game.get_player_from_any(category)
apply_bonus(player,value)
apply_bonus(player, value)
end)
-- When a player respawns re-apply bonus
Event.add(defines.events.on_player_respawned,function(event)
Event.add(defines.events.on_player_respawned, function(event)
local player = Game.get_player_by_index(event.player_index)
local value = Store.get(bonus_store,player)
apply_bonus(player,value)
local value = Store.get(bonus_store, player)
apply_bonus(player, value)
end)
-- When a player dies allow them to have instant respawn
Event.add(defines.events.on_player_died,function(event)
Event.add(defines.events.on_player_died, function(event)
local player = Game.get_player_by_index(event.player_index)
if Roles.player_has_flag(player,'instance-respawn') then
if Roles.player_has_flag(player, 'instance-respawn') then
player.ticks_to_respawn = 120
end
end)
@@ -61,12 +61,12 @@ end)
-- Remove bonus if a player no longer has access to the command
local function role_update(event)
local player = Game.get_player_by_index(event.player_index)
if not Roles.player_allowed(player,'command/bonus') then
Store.clear(bonus_store,player)
if not Roles.player_allowed(player, 'command/bonus') then
Store.clear(bonus_store, player)
end
end
Event.add(Roles.events.on_role_assigned,role_update)
Event.add(Roles.events.on_role_unassigned,role_update)
Event.add(Roles.events.on_role_assigned, role_update)
Event.add(Roles.events.on_role_unassigned, role_update)
return bonus_store

View File

@@ -9,12 +9,12 @@ require 'config.expcore.command_general_parse'
--- Toggles cheat mode for your player, or another player.
-- @command toggle-cheat-mode
-- @tparam[opt=self] LuaPlayer player player to toggle chest mode of, can be nil for self
Commands.new_command('toggle-cheat-mode','Toggles cheat mode for your player, or another player.')
:add_param('player',true,'player')
Commands.new_command('toggle-cheat-mode', 'Toggles cheat mode for your player, or another player.')
:add_param('player', true, 'player')
:set_defaults{player=function(player)
return player -- default is the user using the command
end}
:set_flag('admin_only')
:register(function(player,action_player,raw)
action_player.cheat_mode = not action_player.cheat_mode
:register(function(_, player)
player.cheat_mode = not player.cheat_mode
end)

View File

@@ -10,11 +10,11 @@ require 'config.expcore.command_role_parse'
--- Clears a players inventory
-- @command clear-inventory
-- @tparam LuaPlayer player the player to clear the inventory of
Commands.new_command('clear-inventory','Clears a players inventory')
:add_param('player',false,'player-role-alive')
:add_alias('clear-inv','move-inventory','move-inv')
:register(function(player,action_player)
local inv = action_player.get_main_inventory()
Commands.new_command('clear-inventory', 'Clears a players inventory')
:add_param('player', false, 'player-role-alive')
:add_alias('clear-inv', 'move-inventory', 'move-inv')
:register(function(_, player)
local inv = player.get_main_inventory()
move_items(inv.get_contents())
inv.clear()
end)

View File

@@ -8,7 +8,7 @@ local Commands = require 'expcore.commands' --- @dep expcore.commands
--- Opens the debug pannel for viewing tables.
-- @command debug
Commands.new_command('debug','Opens the debug pannel for viewing tables.')
Commands.new_command('debug', 'Opens the debug pannel for viewing tables.')
:register(function(player)
DebugView.open_dubug(player)
end)

View File

@@ -9,11 +9,11 @@ require 'config.expcore.command_general_parse'
--- Find a player on your map.
-- @command find-on-map
-- @tparam LuaPlayer the player to find on the map
Commands.new_command('find-on-map','Find a player on your map.')
:add_param('player',false,'player-online')
:add_alias('find','zoom-to')
:register(function(player,action_player,raw)
Commands.new_command('find-on-map', 'Find a player on your map.')
:add_param('player', false, 'player-online')
:add_alias('find', 'zoom-to')
:register(function(player, action_player)
local position = action_player.position
player.zoom_to_world(position,1.75)
player.zoom_to_world(position, 1.75)
return Commands.success -- prevents command complete message from showing
end)

View File

@@ -10,7 +10,7 @@ require 'config.expcore.command_general_parse'
local results_per_page = 5
local search_cache = {}
Global.register(search_cache,function(tbl)
Global.register(search_cache, function(tbl)
search_cache = tbl
end)
@@ -18,12 +18,12 @@ end)
-- @command chelp
-- @tparam string keyword the keyword that will be looked for
-- @tparam number page the page of help to view, must be in range of pages
Commands.new_command('search-help','Searches for a keyword in all commands you are allowed to use.')
:add_alias('chelp','shelp','commands')
:add_param('keyword',true)
:add_param('page',true,'integer')
:set_defaults{keyword='',page=1}
:register(function(player,keyword,page,raw)
Commands.new_command('search-help', 'Searches for a keyword in all commands you are allowed to use.')
:add_alias('chelp', 'shelp', 'commands')
:add_param('keyword', true)
:add_param('page', true, 'integer')
:set_defaults{keyword='', page=1}
:register(function(player, keyword, page)
local player_index = player and player.index or 0
-- if keyword is a number then treat it as page number
if tonumber(keyword) then
@@ -40,20 +40,20 @@ Commands.new_command('search-help','Searches for a keyword in all commands you a
pages = {{}}
local current_page = 1
local page_count = 0
local commands = Commands.search(keyword,player)
local commands = Commands.search(keyword, player)
-- loops other all commands returned by search, includes game commands
for _,command_data in pairs(commands) do
for _, command_data in pairs(commands) do
-- if the number of results if greater than the number already added then it moves onto a new page
if page_count >= results_per_page then
page_count = 0
current_page = current_page + 1
table.insert(pages,{})
table.insert(pages, {})
end
-- adds the new command to the page
page_count = page_count + 1
found = found + 1
local alias_format = #command_data.aliases > 0 and {'expcom-chelp.alias',table.concat(command_data.aliases,', ')} or ''
table.insert(pages[current_page],{
local alias_format = #command_data.aliases > 0 and {'expcom-chelp.alias', table.concat(command_data.aliases, ', ')} or ''
table.insert(pages[current_page], {
'expcom-chelp.format',
command_data.name,
command_data.description,
@@ -70,15 +70,15 @@ Commands.new_command('search-help','Searches for a keyword in all commands you a
end
-- print the requested page
keyword = keyword == '' and '<all>' or keyword
Commands.print({'expcom-chelp.title',keyword},'cyan')
Commands.print({'expcom-chelp.title', keyword}, 'cyan')
if pages[page] then
for _,command in pairs(pages[page]) do
for _, command in pairs(pages[page]) do
Commands.print(command)
end
Commands.print({'expcom-chelp.footer',found,page,#pages},'cyan')
Commands.print({'expcom-chelp.footer', found, page, #pages}, 'cyan')
else
Commands.print({'expcom-chelp.footer',found,page,#pages},'cyan')
return Commands.error{'expcom-chelp.out-of-range',page}
Commands.print({'expcom-chelp.footer', found, page, #pages}, 'cyan')
return Commands.error{'expcom-chelp.out-of-range', page}
end
-- blocks command complete message
return Commands.success

View File

@@ -8,16 +8,16 @@ local Global = require 'utils.global' --- @dep utils.global
require 'config.expcore.command_general_parse'
local homes = {}
Global.register(homes,function(tbl)
Global.register(homes, function(tbl)
homes = tbl
end)
local function teleport(player,position)
local function teleport(player, position)
local surface = player.surface
local pos = surface.find_non_colliding_position('character',position,32,1)
local pos = surface.find_non_colliding_position('character', position, 32, 1)
if not position then return false end
if player.driving then player.driving = false end -- kicks a player out a vehicle if in one
player.teleport(pos,surface)
player.teleport(pos, surface)
return true
end
@@ -30,22 +30,22 @@ end
--- Teleports you to your home location
-- @command home
Commands.new_command('home','Teleports you to your home location')
:register(function(player,raw)
Commands.new_command('home', 'Teleports you to your home location')
:register(function(player)
local home = homes[player.index]
if not home or not home[1] then
return Commands.error{'expcom-home.no-home'}
end
local rtn = floor_pos(player.position)
teleport(player,home[1])
teleport(player, home[1])
home[2] = rtn
Commands.print{'expcom-home.return-set',rtn.x,rtn.y}
Commands.print{'expcom-home.return-set', rtn.x, rtn.y}
end)
--- Sets your home location to your current position
-- @command home-set
Commands.new_command('home-set','Sets your home location to your current position')
:register(function(player,raw)
Commands.new_command('home-set', 'Sets your home location to your current position')
:register(function(player)
local home = homes[player.index]
if not home then
home = {}
@@ -53,31 +53,31 @@ Commands.new_command('home-set','Sets your home location to your current positio
end
local pos = floor_pos(player.position)
home[1] = pos
Commands.print{'expcom-home.home-set',pos.x,pos.y}
Commands.print{'expcom-home.home-set', pos.x, pos.y}
end)
--- Returns your current home location
-- @command home-get
Commands.new_command('home-get','Returns your current home location')
:register(function(player,raw)
Commands.new_command('home-get', 'Returns your current home location')
:register(function(player)
local home = homes[player.index]
if not home or not home[1] then
return Commands.error{'expcom-home.no-home'}
end
local pos = home[1]
Commands.print{'expcom-home.home-get',pos.x,pos.y}
Commands.print{'expcom-home.home-get', pos.x, pos.y}
end)
--- Teleports you to previous location
-- @command return
Commands.new_command('return','Teleports you to previous location')
:register(function(player,raw)
Commands.new_command('return', 'Teleports you to previous location')
:register(function(player)
local home = homes[player.index]
if not home or not home[2] then
return Commands.error{'expcom-home.no-return'}
end
local rtn = floor_pos(player.position)
teleport(player,home[2])
teleport(player, home[2])
home[2] = rtn
Commands.print{'expcom-home.return-set',rtn.x,rtn.y}
Commands.print{'expcom-home.return-set', rtn.x, rtn.y}
end)

View File

@@ -21,7 +21,7 @@ local interface_modules = {
}
-- loads all the modules given in the above table
for key,value in pairs(interface_modules) do
for key, value in pairs(interface_modules) do
if type(value) == 'string' then
interface_modules[key] = Common.opt_require(value)
end
@@ -29,7 +29,7 @@ end
local interface_env = {} -- used as a persistent sandbox for interface commands
local interface_callbacks = {} -- saves callbacks which can load new values per use
Global.register(interface_env,function(tbl)
Global.register(interface_env, function(tbl)
interface_env = tbl
end)
@@ -38,14 +38,14 @@ end)
-- @tparam string name the name that the value is loaded under, cant use upvalues
-- @tparam function callback the function that will run whent he command is used
-- callback param - player: LuaPlayer - the player who used the command
local function add_interface_callback(name,callback)
local function add_interface_callback(name, callback)
if type(callback) == 'function' then
interface_callbacks[name] = callback
end
end
-- this is a meta function for __index when self[key] is nil
local function get_index(self,key)
local function get_index(_, key)
if interface_env[key] then
return interface_env[key]
elseif interface_modules[key] then
@@ -56,36 +56,36 @@ end
--- Sends an innovation to be ran and returns the result.
-- @command interface
-- @tparam string innovation the command that will be run
Commands.new_command('interface','Sends an innovation to be ran and returns the result.')
:add_param('innovation',false)
Commands.new_command('interface', 'Sends an innovation to be ran and returns the result.')
:add_param('innovation', false)
:enable_auto_concat()
:set_flag('admin_only')
:register(function(player,innovation,raw)
:register(function(player, innovation)
if not innovation:find('%s') and not innovation:find('return') then
-- if there are no spaces and return is not present then return is appended to the start
innovation='return '..innovation
end
-- temp_env will index to interface_env and interface_modules if value not found
local temp_env = setmetatable({},{__index=get_index})
local temp_env = setmetatable({}, {__index=get_index})
if player then -- player can be nil when it is the server
for name,callback in pairs(interface_callbacks) do
for name, callback in pairs(interface_callbacks) do
-- loops over callbacks and loads the values returned
local success, rtn = pcall(callback,player)
local _, rtn = pcall(callback, player)
temp_env[name]=rtn
end
end
-- sets the global metatable to prevent new values being made
-- global will index to temp_env and new indexs saved to interface_sandbox
-- global will index to temp_env and new indexes saved to interface_sandbox
local old_mt = getmetatable(_G)
setmetatable(_G,{__index=temp_env,__newindex=interface_env})
setmetatable(_G, {__index=temp_env, __newindex=interface_env})
-- runs the innovation and returns values to the player
innovation = loadstring(innovation)
local success, rtn = pcall(innovation)
setmetatable(_G,old_mt)
setmetatable(_G, old_mt)
if not success then
if type(rtn) == 'string' then
-- there may be stack trace that must be removed to avoid desyncs
rtn = rtn:gsub('%.%.%..-/temp/currently%-playing','')
rtn = rtn:gsub('%.%.%..-/temp/currently%-playing', '')
end
return Commands.error(rtn)
else
@@ -94,16 +94,16 @@ Commands.new_command('interface','Sends an innovation to be ran and returns the
end)
-- adds some basic callbacks for the interface
add_interface_callback('player',function(player) return player end)
add_interface_callback('surface',function(player) return player.surface end)
add_interface_callback('force',function(player) return player.force end)
add_interface_callback('position',function(player) return player.position end)
add_interface_callback('entity',function(player) return player.selected end)
add_interface_callback('tile',function(player) return player.surface.get_tile(player.position) end)
add_interface_callback('player', function(player) return player end)
add_interface_callback('surface', function(player) return player.surface end)
add_interface_callback('force', function(player) return player.force end)
add_interface_callback('position', function(player) return player.position end)
add_interface_callback('entity', function(player) return player.selected end)
add_interface_callback('tile', function(player) return player.surface.get_tile(player.position) end)
return {
add_interface_callback=add_interface_callback,
interface_env=interface_env,
interface_callbacks=interface_callbacks,
clean_stack_trace=function(str) return str:gsub('%.%.%..-/temp/currently%-playing','') end
clean_stack_trace=function(str) return str:gsub('%.%.%..-/temp/currently%-playing', '') end
}

View File

@@ -12,37 +12,37 @@ require 'config.expcore.command_role_parse'
-- @command jail
-- @tparam LuaPlayer player the player that will be jailed
-- @tparam[opt] string reason the reason why the player is being jailed
Commands.new_command('jail','Puts a player into jail and removes all other roles.')
:add_param('player',false,'player-role')
:add_param('reason',true)
Commands.new_command('jail', 'Puts a player into jail and removes all other roles.')
:add_param('player', false, 'player-role')
:add_param('reason', true)
:enable_auto_concat()
:register(function(player,action_player,reason,raw)
:register(function(player, action_player, reason)
reason = reason or 'Non Given.'
local action_player_name_color = format_chat_player_name(action_player)
local by_player_name_color = format_chat_player_name(player)
local player_name = player and player.name or '<server>'
if Jail.jail_player(action_player, player_name, reason) then
game.print{'expcom-jail.give',action_player_name_color,by_player_name_color,reason}
game.print{'expcom-jail.give', action_player_name_color, by_player_name_color, reason}
else
return Commands.error{'expcom-jail.already-jailed',action_player_name_color}
return Commands.error{'expcom-jail.already-jailed', action_player_name_color}
end
end)
--- Removes a player from jail.
-- @command unjail
-- @tparam LuaPlayer the player that will be unjailed
Commands.new_command('unjail','Removes a player from jail.')
:add_param('player',false,'player-role')
:add_alias('clear-jail','remove-jail')
Commands.new_command('unjail', 'Removes a player from jail.')
:add_param('player', false, 'player-role')
:add_alias('clear-jail', 'remove-jail')
:enable_auto_concat()
:register(function(player,action_player,raw)
:register(function(player, action_player)
local action_player_name_color = format_chat_player_name(action_player)
local by_player_name_color = format_chat_player_name(player)
local player_name = player and player.name or '<server>'
if Jail.unjail_player(action_player, player_name) then
game.print{'expcom-jail.remove',action_player_name_color,by_player_name_color}
game.print{'expcom-jail.remove', action_player_name_color, by_player_name_color}
else
return Commands.error{'expcom-jail.not-jailed',action_player_name_color}
return Commands.error{'expcom-jail.not-jailed', action_player_name_color}
end
end)
@@ -50,33 +50,33 @@ end)
-- @command temp-ban
-- @tparam LuaPlayer player the player that will be temp banned
-- @tparam string reason the reason that the player is being temp banned
Commands.new_command('temp-ban','Temp bans a player until the next reset; this requires a reason; this will clear the players inventory.')
:add_param('player',false,'player-role')
:add_param('reason',false)
Commands.new_command('temp-ban', 'Temp bans a player until the next reset; this requires a reason; this will clear the players inventory.')
:add_param('player', false, 'player-role')
:add_param('reason', false)
:enable_auto_concat()
:register(function(player,action_player,reason,raw)
:register(function(player, action_player, reason)
local action_player_name_color = format_chat_player_name(action_player)
local by_player_name_color = format_chat_player_name(player)
if Jail.temp_ban_player(action_player,player.name,reason) then
game.print{'expcom-jail.temp-ban',action_player_name_color,by_player_name_color,reason}
if Jail.temp_ban_player(action_player, player.name, reason) then
game.print{'expcom-jail.temp-ban', action_player_name_color, by_player_name_color, reason}
else
return Commands.error{'expcom-jail.already-banned',action_player_name_color}
return Commands.error{'expcom-jail.already-banned', action_player_name_color}
end
end)
--- Removes temp ban from a player; this will not restore their items.
-- @command clear-temp-ban
-- @tparam LuaPlayer player the player to revoke the temp ban from
Commands.new_command('clear-temp-ban','Removes temp ban from a player; this will not restore their items.')
:add_param('player',false,'player-role')
:add_alias('untemp-ban','remove-temp-ban')
Commands.new_command('clear-temp-ban', 'Removes temp ban from a player; this will not restore their items.')
:add_param('player', false, 'player-role')
:add_alias('untemp-ban', 'remove-temp-ban')
:enable_auto_concat()
:register(function(player,action_player,raw)
:register(function(player, action_player)
local action_player_name_color = format_chat_player_name(action_player)
local by_player_name_color = format_chat_player_name(player)
if Jail.untemp_ban_player(action_player,player.name) then
game.print{'expcom-jail.temp-ban-clear',action_player_name_color,by_player_name_color}
if Jail.untemp_ban_player(action_player, player.name) then
game.print{'expcom-jail.temp-ban-clear', action_player_name_color, by_player_name_color}
else
return Commands.error{'expcom-jail.not-temp-banned',action_player_name_color}
return Commands.error{'expcom-jail.not-temp-banned', action_player_name_color}
end
end)

View File

@@ -11,22 +11,22 @@ require 'config.expcore.command_role_parse'
--- Kills yourself or another player.
-- @command kill
-- @tparam[opt=self] LuaPlayer player the player to kill, must be alive to be valid
Commands.new_command('kill','Kills yourself or another player.')
:add_param('player',true,'player-role-alive')
Commands.new_command('kill', 'Kills yourself or another player.')
:add_param('player', true, 'player-role-alive')
:set_defaults{player=function(player)
-- default is the player unless they are dead
if player.character and player.character.health > 0 then
return player
end
end}
:register(function(player,action_player,raw)
:register(function(player, action_player)
if not action_player then
-- can only be nil if no player given and the user is dead
return Commands.error{'expcom-kill.already-dead'}
end
if player == action_player then
action_player.character.die()
elseif Roles.player_allowed(player,'command/kill/always') then
elseif Roles.player_allowed(player, 'command/kill/always') then
action_player.character.die()
else
return Commands.error{'expcore-commands.unauthorized'}

View File

@@ -8,10 +8,10 @@ local Commands = require 'expcore.commands' --- @dep expcore.commands
--- Sends an action message in the chat
-- @command me
-- @tparam string action the action that follows your name in chat
Commands.new_command('me','Sends an action message in the chat')
:add_param('action',false)
Commands.new_command('me', 'Sends an action message in the chat')
:add_param('action', false)
:enable_auto_concat()
:register(function(player,action,raw)
:register(function(player, action)
local player_name = player and player.name or '<Server>'
game.print(string.format('* %s %s *',player_name,action),player.chat_color)
game.print(string.format('* %s %s *', player_name, action), player.chat_color)
end)

View File

@@ -4,14 +4,11 @@
]]
local Commands = require 'expcore.commands' --- @dep expcore.commands
local Roles = require 'expcore.roles' --- @dep expcore.roles
local Game = require 'utils.game' --- @dep utils.game
local config = require 'config.preset_player_quickbar' --- @dep config.preset_player_quickbar
--- Loads your quickbar preset
-- @command load-quickbar
Commands.new_command('load-quickbar','Loads your preset Quickbar items')
Commands.new_command('load-quickbar', 'Loads your preset Quickbar items')
:add_alias('load-toolbar')
:register(function(player)
if config[player.name] then
@@ -28,7 +25,7 @@ end)
--- Saves your quickbar preset to the script-output folder
-- @command save-quickbar
Commands.new_command('save-quickbar','Saves your Quickbar preset items to file')
Commands.new_command('save-quickbar', 'Saves your Quickbar preset items to file')
:add_alias('save-toolbar')
:register(function(player)
local quickbar_names = {}

View File

@@ -6,27 +6,27 @@
local Commands = require 'expcore.commands' --- @dep expcore.commands
local format_chat_colour = _C.format_chat_colour --- @dep expcore.common
local function step_component(c1,c2)
local function step_component(c1, c2)
if c1 < 0 then
return 0,c2+c1
return 0, c2+c1
elseif c1 > 1 then
return 1,c2-c1+1
return 1, c2-c1+1
else
return c1,c2
return c1, c2
end
end
local function step_color(color)
color.r,color.g = step_component(color.r,color.g)
color.g,color.b = step_component(color.g,color.b)
color.b,color.r = step_component(color.b,color.r)
color.r = step_component(color.r,0)
color.r, color.g = step_component(color.r, color.g)
color.g, color.b = step_component(color.g, color.b)
color.b, color.r = step_component(color.b, color.r)
color.r = step_component(color.r, 0)
return color
end
local function next_color(color,step)
local function next_color(color, step)
step = step or 0.1
local new_color = {r=0,g=0,b=0}
local new_color = {r=0, g=0, b=0}
if color.b == 0 and color.r ~= 0 then
new_color.r = color.r-step
new_color.g = color.g+step
@@ -43,19 +43,19 @@ end
--- Sends an rainbow message in the chat
-- @command rainbow
-- @tparam string message the message that will be printed in chat
Commands.new_command('rainbow','Sends an rainbow message in the chat')
:add_param('message',false)
Commands.new_command('rainbow', 'Sends an rainbow message in the chat')
:add_param('message', false)
:enable_auto_concat()
:register(function(player,message,raw)
:register(function(player, message)
local player_name = player and player.name or '<Server>'
local player_color = player and player.color or nil
local color_step = 3/message:len()
if color_step > 1 then color_step = 1 end
local current_color = {r=1,g=0,b=0}
local output = format_chat_colour(player_name..': ',player_color)
output = output..message:gsub('%S',function(letter)
local rtn = format_chat_colour(letter,current_color)
current_color = next_color(current_color,color_step)
local current_color = {r=1, g=0, b=0}
local output = format_chat_colour(player_name..': ', player_color)
output = output..message:gsub('%S', function(letter)
local rtn = format_chat_colour(letter, current_color)
current_color = next_color(current_color, color_step)
return rtn
end)
game.print(output)

View File

@@ -2,33 +2,46 @@
local Commands = require 'expcore.commands'
local function Modules(moduleInventory) -- returns the multiplier of the modules
local effect1 = moduleInventory.get_item_count("productivity-module") -- type 1
local effect2 = moduleInventory.get_item_count("productivity-module-2")-- type 2
local effect3 = moduleInventory.get_item_count("productivity-module-3") -- type 3
Commands.new_command('ratio','This command will give the input and ouput ratios of the selected machine. Use the parameter for calcualting the machines needed for that amount of items per second.')
:add_param('itemsPerSecond',true,'number')
:register(function(player,itemsPerSecond,raw)
local multi = effect1*4+effect2*6+effect3*10
return multi/100+1
end
local function AmountOfMachines(itemsPerSecond, output)
if(itemsPerSecond) then
return itemsPerSecond/output
end
end
Commands.new_command('ratio', 'This command will give the input and output ratios of the selected machine. Use the parameter for calculating the machines needed for that amount of items per second.')
:add_param('itemsPerSecond', true, 'number')
:register(function(player, itemsPerSecond)
local machine = player.selected -- selected machine
if not machine then --nil check
return Commands.error{'expcom-ratio.notSelecting'}
end
if machine.type ~= "assembling-machine" and machine.type ~= "furnace" then
return Commands.error{'expcom-ratio.notSelecting'}
end
local recpie = machine.get_recipe() -- recpie
local recipe = machine.get_recipe() -- recipe
if not recpie then --nil check
if not recipe then --nil check
return Commands.error{'expcom-ratio.notSelecting'}
end
local items = recpie.ingredients -- items in that recpie
local product = recpie.products -- output items
local items = recipe.ingredients -- items in that recipe
local products = recipe.products -- output items
local amountOfMachines
local moduleInvetory = machine.get_module_inventory()--the module Invetory of the machine
local mult = Modules(moduleInvetory) --function for the productivety moduals
local moduleInventory = machine.get_module_inventory()--the module Inventory of the machine
local multi = Modules(moduleInventory) --function for the productively modals
if itemsPerSecond then
amountOfMachines = math.ceil( AmountOfMachines(itemsPerSecond,1/recpie.energy*machine.crafting_speed*product[1].amount*mult)) -- amount of machines
amountOfMachines = math.ceil( AmountOfMachines(itemsPerSecond, 1/recipe.energy*machine.crafting_speed*products[1].amount*multi)) -- amount of machines
end
if not amountOfMachines then
amountOfMachines = 1 --set to 1 to make it not nil
@@ -42,14 +55,13 @@ Commands.new_command('ratio','This command will give the input and ouput ratios
else
sprite = 'expcom-ratio.fluid-in'
end
local ips = item.amount/recpie.energy*machine.crafting_speed*amountOfMachines --math on the items/fluids per second
Commands.print {sprite,math.round(ips,3),item.name}-- full string
local ips = item.amount/recipe.energy*machine.crafting_speed*amountOfMachines --math on the items/fluids per second
Commands.print {sprite, math.round(ips, 3), item.name}-- full string
end
----------------------------products----------------------------
for i, product in ipairs(product) do
for i, product in ipairs(products) do
local sprite -- string to make the icon work either fluid ore item
if product.type == "item" then
@@ -58,28 +70,13 @@ Commands.new_command('ratio','This command will give the input and ouput ratios
sprite = 'expcom-ratio.fluid-out'
end
local output = 1/recpie.energy*machine.crafting_speed*product.amount*mult --math on the outputs per second
Commands.print {sprite,math.round(output*amountOfMachines,3),product.name} -- full string
local output = 1/recipe.energy*machine.crafting_speed*product.amount*multi --math on the outputs per second
Commands.print {sprite, math.round(output*amountOfMachines, 3), product.name} -- full string
end
if amountOfMachines ~= 1 then
Commands.print{'expcom-ratio.machines',amountOfMachines}
Commands.print{'expcom-ratio.machines', amountOfMachines}
end
end)
function Modules(moduleInvetory) -- returns the multeplier of the modules
local effect1 = moduleInvetory.get_item_count("productivity-module") -- type 1
local effect2 = moduleInvetory.get_item_count("productivity-module-2")-- type 2
local effect3 = moduleInvetory.get_item_count("productivity-module-3") -- type 3
local mult = effect1*4+effect2*6+effect3*10
return mult/100+1
end
function AmountOfMachines(itemsPerSecond,output)
if(itemsPerSecond) then
return itemsPerSecond/output
end
end
end)

View File

@@ -11,18 +11,18 @@ local max_time_to_live = 4294967295 -- unit32 max
--- Repairs entities on your force around you
-- @command repair
-- @tparam number range the range to repair stuff in, there is a max limit to this
Commands.new_command('repair','Repairs entities on your force around you')
:add_param('range',false,'integer-range',1,config.max_range)
:register(function(player,range,raw)
Commands.new_command('repair', 'Repairs entities on your force around you')
:add_param('range', false, 'integer-range', 1,config.max_range)
:register(function(player, range)
local revive_count = 0
local heal_count = 0
local range2 = range^2
local surface = player.surface
local center = player.position
local area = {{x=center.x-range,y=center.y-range},{x=center.x+range,y=center.y+range}}
local area = {{x=center.x-range, y=center.y-range}, {x=center.x+range, y=center.y+range}}
if config.allow_ghost_revive then
local ghosts = surface.find_entities_filtered({area=area,type='entity-ghost',force=player.force})
for _,ghost in pairs(ghosts) do
local ghosts = surface.find_entities_filtered({area=area, type='entity-ghost', force=player.force})
for _, ghost in pairs(ghosts) do
if ghost.valid then
local x = ghost.position.x-center.x
local y = ghost.position.y-center.y
@@ -36,8 +36,8 @@ Commands.new_command('repair','Repairs entities on your force around you')
end
end
if config.allow_heal_entities then
local entities = surface.find_entities_filtered({area=area,force=player.force})
for _,entity in pairs(entities) do
local entities = surface.find_entities_filtered({area=area, force=player.force})
for _, entity in pairs(entities) do
if entity.valid then
local x = entity.position.x-center.x
local y = entity.position.y-center.y
@@ -48,5 +48,5 @@ Commands.new_command('repair','Repairs entities on your force around you')
end
end
end
return Commands.success{'expcom-repair.result',revive_count,heal_count}
return Commands.success{'expcom-repair.result', revive_count, heal_count}
end)

View File

@@ -13,25 +13,25 @@ require 'config.expcore.command_general_parse'
-- @command report
-- @tparam LuaPlayer player the player to report, some players are immune
-- @tparam string reason the reason the player is being reported
Commands.new_command('report','Reports a player and notifies moderators')
:add_param('player',false,function(input,player,reject)
input = Commands.parse('player',input,player,reject)
Commands.new_command('report', 'Reports a player and notifies moderators')
:add_param('player', false, function(input, player, reject)
input = Commands.parse('player', input, player, reject)
if not input then return end
if Roles.player_has_flag(input,'report-immune') then
if Roles.player_has_flag(input, 'report-immune') then
return reject{'expcom-report.player-immune'}
else
return input
end
end)
:add_param('reason',false)
:add_param('reason', false)
:add_alias('report-player')
:enable_auto_concat()
:register(function(player,action_player,reason,raw)
:register(function(player, action_player, reason)
local action_player_name_color = format_chat_player_name(action_player)
local by_player_name_color = format_chat_player_name(player)
if Reports.report_player(action_player,player.name,reason) then
game.print{'expcom-report.non-admin',action_player_name_color,reason}
Roles.print_to_roles_higher('Trainee',{'expcom-report.admin',action_player_name_color,by_player_name_color,reason})
if Reports.report_player(action_player, player.name, reason) then
game.print{'expcom-report.non-admin', action_player_name_color, reason}
Roles.print_to_roles_higher('Trainee', {'expcom-report.admin', action_player_name_color, by_player_name_color, reason})
else
return Commands.error{'expcom-report.already-reported'}
end
@@ -40,25 +40,25 @@ end)
--- Gets a list of all reports that a player has on them. If no player then lists all players and the number of reports on them.
-- @command get-reports
-- @tparam LuaPlayer player the player to get the report for
Commands.new_command('get-reports','Gets a list of all reports that a player has on them. If no player then lists all players and the number of reports on them.')
:add_param('player',true,'player')
:add_alias('reports','list-reports')
:register(function(player,action_player,raw)
if action_player then
local reports = Reports.get_reports(action_player)
local action_player_name_color = format_chat_player_name(action_player)
Commands.print{'expcom-report.player-report-title',action_player_name_color}
for player_name,reason in pairs(reports) do
Commands.new_command('get-reports', 'Gets a list of all reports that a player has on them. If no player then lists all players and the number of reports on them.')
:add_param('player', true, 'player')
:add_alias('reports', 'list-reports')
:register(function(_, player)
if player then
local reports = Reports.get_reports(player)
local player_name_color = format_chat_player_name(player)
Commands.print{'expcom-report.player-report-title', player_name_color}
for player_name, reason in pairs(reports) do
local by_player_name_color = format_chat_player_name(player_name)
Commands.print{'expcom-report.list',by_player_name_color,reason}
Commands.print{'expcom-report.list', by_player_name_color, reason}
end
else
local user_reports = Reports.user_reports
Commands.print{'expcom-report.player-count-title'}
for player_name,reports in pairs(user_reports) do
for player_name in pairs(user_reports) do
local player_name_color = format_chat_player_name(player_name)
local report_count = Reports.count_reports(player_name)
Commands.print{'expcom-report.list',player_name_color,report_count}
Commands.print{'expcom-report.list', player_name_color, report_count}
end
end
end)
@@ -67,20 +67,20 @@ end)
-- @command clear-reports
-- @tparam LuaPlayer player the player to clear the report(s) from
-- @tparam[opt=all] LuaPlayer from-player remove only the report made by this player
Commands.new_command('clear-reports','Clears all reports from a player or just the report from one player.')
:add_param('player',false,'player')
:add_param('from-player',true,'player')
:register(function(player,action_player,from_player,raw)
Commands.new_command('clear-reports', 'Clears all reports from a player or just the report from one player.')
:add_param('player', false, 'player')
:add_param('from-player', true, 'player')
:register(function(player, action_player, from_player)
if from_player then
if not Reports.remove_report(action_player,from_player.name,player.name) then
if not Reports.remove_report(action_player, from_player.name, player.name) then
return Commands.error{'expcom-report.not-reported'}
end
else
if not Reports.remove_all(action_player,player.name) then
if not Reports.remove_all(action_player, player.name) then
return Commands.error{'expcom-report.not-reported'}
end
end
local action_player_name_color = format_chat_player_name(action_player)
local by_player_name_color = format_chat_player_name(player)
game.print{'expcom-report.removed',action_player_name_color,by_player_name_color}
game.print{'expcom-report.removed', action_player_name_color, by_player_name_color}
end)

View File

@@ -12,15 +12,15 @@ local format_chat_player_name, format_chat_colour_localized = _C.format_chat_pla
-- @command assign-role
-- @tparam LuaPlayer player the player to assign the role to
-- @tparam string role the name of the role to assign to the player, supports auto complete after enter
Commands.new_command('assign-role','Assigns a role to a player')
:add_param('player',false,'player-role')
:add_param('role',false,'role')
Commands.new_command('assign-role', 'Assigns a role to a player')
:add_param('player', false, 'player-role')
:add_param('role', false, 'role')
:set_flag('admin-only')
:add_alias('rpromote','assign','role','add-role')
:register(function(player,action_player,role,raw)
:add_alias('rpromote', 'assign', 'role', 'add-role')
:register(function(player, action_player, role)
local player_highest = Roles.get_player_highest_role(player)
if player_highest.index < role.index then
Roles.assign_player(action_player,role,player.name)
Roles.assign_player(action_player, role, player.name)
else
return Commands.error{'expcom-roles.higher-role'}
end
@@ -30,15 +30,15 @@ end)
-- @command unassign-role
-- @tparam LuaPlayer player the player to unassign the role from
-- @tparam string role the name of the role to unassign from the player, supports auto complete after enter
Commands.new_command('unassign-role','Unassigns a role from a player')
:add_param('player',false,'player-role')
:add_param('role',false,'role')
Commands.new_command('unassign-role', 'Unassigns a role from a player')
:add_param('player', false, 'player-role')
:add_param('role', false, 'role')
:set_flag('admin-only')
:add_alias('rdemote','unassign','rerole','remove-role')
:register(function(player,action_player,role,raw)
:add_alias('rdemote', 'unassign', 'rerole', 'remove-role')
:register(function(player, action_player, role)
local player_highest = Roles.get_player_highest_role(player)
if player_highest.index < role.index then
Roles.unassign_player(action_player,role,player.name)
Roles.unassign_player(action_player, role, player.name)
else
return Commands.error{'expcom-roles.higher-role'}
end
@@ -47,27 +47,27 @@ end)
--- Lists all roles in they correct order
-- @command list-roles
-- @tparam[opt=all] LuaPlayer player list only the roles which this player has
Commands.new_command('list-roles','Lists all roles in they correct order')
:add_param('player',true,'player')
:add_alias('lsroles','roles')
:register(function(player,action_player,raw)
Commands.new_command('list-roles', 'Lists all roles in they correct order')
:add_param('player', true, 'player')
:add_alias('lsroles', 'roles')
:register(function(_, player)
local roles = Roles.config.order
local message = {'expcom-roles.list'}
if action_player then
roles = Roles.get_player_roles(action_player)
if player then
roles = Roles.get_player_roles(player)
end
for index,role in pairs(roles) do
for index, role in pairs(roles) do
role = Roles.get_role_from_any(role)
local colour = role.custom_color or Colours.white
local role_name = format_chat_colour_localized(role.name,colour)
local role_name = format_chat_colour_localized(role.name, colour)
if index == 1 then
message = {'expcom-roles.list',role_name}
if action_player then
local player_name_colour = format_chat_player_name(action_player)
message = {'expcom-roles.list-player',player_name_colour,role_name}
message = {'expcom-roles.list', role_name}
if player then
local player_name_colour = format_chat_player_name(player)
message = {'expcom-roles.list-player', player_name_colour, role_name}
end
else
message = {'expcom-roles.list-element',message,role_name}
message = {'expcom-roles.list-element', message, role_name}
end
end
return Commands.success(message)

View File

@@ -9,18 +9,18 @@ local Roles = require 'expcore.roles' --- @dep expcore.roles
local function teleport(player)
local surface = player.surface
local spawn = player.force.get_spawn_position(surface)
local position = surface.find_non_colliding_position('character',spawn,32,1)
local position = surface.find_non_colliding_position('character', spawn, 32, 1)
if not position then return false end
if player.driving then player.driving = false end -- kicks a player out a vehicle if in one
player.teleport(position,surface)
player.teleport(position, surface)
return true
end
--- Teleport to spawn
-- @command go-to-spawn
-- @tparam[opt=self] LuaPlayer player the player to teleport to their spawn point
Commands.new_command('go-to-spawn','Teleport to spawn')
:add_param('player',true,'player-role-alive')
Commands.new_command('go-to-spawn', 'Teleport to spawn')
:add_param('player', true, 'player-role-alive')
:set_defaults{
player=function(player)
if player.connected and player.character and player.character.health > 0 then
@@ -28,15 +28,15 @@ Commands.new_command('go-to-spawn','Teleport to spawn')
end
end
}
:add_alias('spawn','tp-spawn')
:register(function(player,action_player)
if not action_player then
:add_alias('spawn', 'tp-spawn')
:register(function(player, action_player)
if not action_player then
return Commands.error{'expcom-spawn.unavailable'}
elseif action_player == player then
if not teleport(player) then
return Commands.error{'expcom-spawn.unavailable'}
end
elseif Roles.player_allowed(player,'command/go-to-spawn/always') then
elseif Roles.player_allowed(player, 'command/go-to-spawn/always') then
if not teleport(action_player) then
return Commands.error{'expcom-spawn.unavailable'}
end

View File

@@ -11,26 +11,26 @@ require 'config.expcore.command_role_parse'
--- Sets your player tag.
-- @command tag
-- @tparam string tag the tag that will be after the name, there is a max length
Commands.new_command('tag','Sets your player tag.')
:add_param('tag',false,'string-max-length',20)
Commands.new_command('tag', 'Sets your player tag.')
:add_param('tag', false, 'string-max-length', 20)
:enable_auto_concat()
:register(function(player,tag,raw)
:register(function(player, tag)
player.tag = '- '..tag
end)
--- Clears your tag. Or another player if you are admin.
-- @command tag-clear
-- @tparam[opt=self] LuaPlayer player the player to remove the tag from, nil will apply to self
Commands.new_command('tag-clear','Clears your tag. Or another player if you are admin.')
:add_param('player',true,'player-role')
Commands.new_command('tag-clear', 'Clears your tag. Or another player if you are admin.')
:add_param('player', true, 'player-role')
:set_defaults{player=function(player)
return player -- default is the user using the command
end}
:register(function(player,action_player,raw)
:register(function(player, action_player)
if action_player.index == player.index then
-- no player given so removes your tag
action_player.tag = ''
elseif Roles.player_allowed(player,'command/clear-tag/always') then
elseif Roles.player_allowed(player, 'command/clear-tag/always') then
-- player given and user is admin so clears that player's tag
action_player.tag = ''
else

View File

@@ -6,12 +6,12 @@
local Commands = require 'expcore.commands' --- @dep expcore.commands
require 'config.expcore.command_general_parse'
local function teleport(from_player,to_player)
local function teleport(from_player, to_player)
local surface = to_player.surface
local position = surface.find_non_colliding_position('character',to_player.position,32,1)
local position = surface.find_non_colliding_position('character', to_player.position, 32, 1)
if not position then return false end -- return false if no new position
if from_player.driving then from_player.driving = false end -- kicks a player out a vehicle if in one
from_player.teleport(position,surface)
from_player.teleport(position, surface)
return true
end
@@ -19,17 +19,17 @@ end
-- @command teleport
-- @tparam LuaPlayer from_player the player that will be teleported, must be alive
-- @tparam LuaPlayer to_player the player to teleport to, must be online (if dead goes to where they died)
Commands.new_command('teleport','Teleports a player to another player.')
:add_param('from_player',false,'player-alive')
:add_param('to_player',false,'player-online')
Commands.new_command('teleport', 'Teleports a player to another player.')
:add_param('from_player', false, 'player-alive')
:add_param('to_player', false, 'player-online')
:add_alias('tp')
:set_flag('admin_only')
:register(function(player,from_player,to_player,raw)
:register(function(_, from_player, to_player)
if from_player.index == to_player.index then
-- return if attempting to teleport to self
return Commands.error{'expcom-tp.to-self'}
end
if not teleport(from_player,to_player) then
if not teleport(from_player, to_player) then
-- return if the teleport failed
return Commands.error{'expcom-tp.no-position-found'}
end
@@ -38,15 +38,15 @@ end)
--- Teleports a player to you.
-- @command bring
-- @tparam LuaPlayer player the player that will be teleported, must be alive
Commands.new_command('bring','Teleports a player to you.')
:add_param('player',false,'player-alive')
Commands.new_command('bring', 'Teleports a player to you.')
:add_param('player', false, 'player-alive')
:set_flag('admin_only')
:register(function(player,from_player,raw)
:register(function(player, from_player)
if from_player.index == player.index then
-- return if attempting to teleport to self
return Commands.error{'expcom-tp.to-self'}
end
if not teleport(from_player,player) then
if not teleport(from_player, player) then
-- return if the teleport failed
return Commands.error{'expcom-tp.no-position-found'}
end
@@ -55,16 +55,16 @@ end)
--- Teleports you to a player.
-- @command goto
-- @tparam LuaPlayer player the player to teleport to, must be online (if dead goes to where they died)
Commands.new_command('goto','Teleports you to a player.')
:add_param('player',false,'player-online')
:add_alias('tp-me','tpme')
Commands.new_command('goto', 'Teleports you to a player.')
:add_param('player', false, 'player-online')
:add_alias('tp-me', 'tpme')
:set_flag('admin_only')
:register(function(player,to_player,raw)
:register(function(player, to_player)
if to_player.index == player.index then
-- return if attempting to teleport to self
return Commands.error{'expcom-tp.to-self'}
end
if not teleport(player,to_player) then
if not teleport(player, to_player) then
-- return if the teleport failed
return Commands.error{'expcom-tp.no-position-found'}
end

View File

@@ -13,47 +13,47 @@ require 'config.expcore.command_role_parse'
-- @command give-warning
-- @tparam LuaPlayer player the player the will recive a warning
-- @tparam string reason the reason the player is being given a warning
Commands.new_command('give-warning','Gives a warning to a player; may lead to automatic script action.')
:add_param('player',false,'player-role')
:add_param('reason',false)
Commands.new_command('give-warning', 'Gives a warning to a player; may lead to automatic script action.')
:add_param('player', false, 'player-role')
:add_param('reason', false)
:add_alias('warn')
:enable_auto_concat()
:register(function(player,action_player,reason,raw)
Warnings.add_warning(action_player,player.name,reason)
:register(function(player, action_player, reason)
Warnings.add_warning(action_player, player.name, reason)
local action_player_name_color = format_chat_player_name(action_player)
local by_player_name_color = format_chat_player_name(player)
game.print{'expcom-warnings.received',action_player_name_color,by_player_name_color,reason}
game.print{'expcom-warnings.received', action_player_name_color, by_player_name_color, reason}
end)
--- Gets the number of warnings a player has. If no player then lists all players and the number of warnings they have.
-- @command get-warnings
-- @tparam[opt=list] LuaPlayer player the player to get the warning for, if nil all players are listed
Commands.new_command('get-warnings','Gets the number of warnings a player has. If no player then lists all players and the number of warnings they have.')
:add_param('player',true,'player')
:add_alias('warnings','list-warnings')
:register(function(player,action_player,raw)
if action_player then
local warnings = Warnings.get_warnings(action_player)
local script_warnings = Warnings.get_script_warnings(action_player)
local action_player_name_color = format_chat_player_name(action_player)
Commands.print{'expcom-warnings.player',action_player_name_color,warnings,script_warnings,config.temp_warning_limit}
Commands.new_command('get-warnings', 'Gets the number of warnings a player has. If no player then lists all players and the number of warnings they have.')
:add_param('player', true, 'player')
:add_alias('warnings', 'list-warnings')
:register(function(_, player)
if player then
local warnings = Warnings.get_warnings(player)
local script_warnings = Warnings.get_script_warnings(player)
local player_name_color = format_chat_player_name(player)
Commands.print{'expcom-warnings.player', player_name_color, warnings, script_warnings, config.temp_warning_limit}
else
local rtn = {}
local user_warnings = Warnings.user_warnings
local user_script_warnings = Warnings.user_script_warnings
for player_name,warnings in pairs(user_warnings) do
rtn[player_name] = {#warnings,0}
for player_name, warnings in pairs(user_warnings) do
rtn[player_name] = {#warnings, 0}
end
for player_name,warnings in pairs(user_script_warnings) do
for player_name, warnings in pairs(user_script_warnings) do
if not rtn[player_name] then
rtn[player_name] = {0,0}
rtn[player_name] = {0, 0}
end
rtn[player_name][2] = #warnings
end
Commands.print{'expcom-warnings.list-tilte'}
for player_name,warnings in pairs(rtn) do
for player_name, warnings in pairs(rtn) do
local player_name_color = format_chat_player_name(player_name)
Commands.print{'expcom-warnings.list',player_name_color,warnings[1],warnings[2],config.temp_warning_limit}
Commands.print{'expcom-warnings.list', player_name_color, warnings[1], warnings[2], config.temp_warning_limit}
end
end
end)
@@ -61,12 +61,12 @@ end)
--- Clears all warnings (and script warnings) from a player
-- @command clear-warnings
-- @tparam LuaPlayer player the player to clear the warnings from
Commands.new_command('clear-warnings','Clears all warnings (and script warnings) from a player')
:add_param('player',false,'player')
:register(function(player,action_player,raw)
Warnings.clear_warnings(action_player,player.name)
Warnings.clear_script_warnings(action_player,player.name)
Commands.new_command('clear-warnings', 'Clears all warnings (and script warnings) from a player')
:add_param('player', false, 'player')
:register(function(player, action_player)
Warnings.clear_warnings(action_player, player.name)
Warnings.clear_script_warnings(action_player, player.name)
local action_player_name_color = format_chat_player_name(action_player)
local by_player_name_color = format_chat_player_name(player)
game.print{'expcom-warnings.cleared',action_player_name_color,by_player_name_color}
game.print{'expcom-warnings.cleared', action_player_name_color, by_player_name_color}
end)

View File

@@ -9,15 +9,15 @@
-- This will move 'MrBiter' to the jail role and remove all other roles from them
-- the player name and reason are only so they can be included in the event for user feedback
Jail.jail_player('MrBiter','Cooldude2606','Likes biters too much')
Jail.jail_player('MrBiter', 'Cooldude2606', 'Likes biters too much')
-- This will give 'MrBiter' all his roles back and remove him from jail
-- again as above the player name is only used in the event for user feedback
Jail.unjail_player('MrBiter','Cooldude2606')
Jail.unjail_player('MrBiter', 'Cooldude2606')
-- Temp ban works the same as jail but will store the reason and move the players items to spawn
-- this is meant to be used as a more permiment jail but not as strong as a ban
Jail.temp_ban_player('MrBiter','Cooldude2606','Likes biters too much')
Jail.temp_ban_player('MrBiter', 'Cooldude2606', 'Likes biters too much')
]]
local Roles = require 'expcore.roles' --- @dep expcore.roles
@@ -65,7 +65,7 @@ local temp_bans = Jail.temp_bans
Global.register({
old_roles = old_roles,
temp_bans = temp_bans
},function(tbl)
}, function(tbl)
Jail.old_roles = tbl.old_roles
Jail.temp_bans = tbl.temp_bans
old_roles = Jail.old_roles
@@ -77,8 +77,8 @@ end)
-- @tparam LuaPlayer player the player who is being acted on
-- @tparam string by_player_name the player who is doing the action
-- @tparam string reason the reason for the action (jail and tempban only)
local function event_emit(event,player,by_player_name,reason)
script.raise_event(event,{
local function event_emit(event, player, by_player_name, reason)
script.raise_event(event, {
name=event,
tick=game.tick,
player_index=player.index,
@@ -95,7 +95,7 @@ end
-- @tparam LuaPlayer player the player to check if they are in jail
-- @treturn boolean whether the player is currently in jail
function Jail.is_jailed(player)
return has_role(player,'Jail')
return has_role(player, 'Jail')
end
--- Moves a player to jail and removes all other roles
@@ -103,14 +103,14 @@ end
-- @tparam string by_player_name the name of the player who is doing the jailing
-- @tparam[opt='Non given.'] string reason the reason that the player is being jailed
-- @treturn boolean wheather the user was jailed successfully
function Jail.jail_player(player,by_player_name,reason)
function Jail.jail_player(player, by_player_name, reason)
player = valid_player(player)
if not player then return end
if not by_player_name then return end
reason = reason or 'Non given.'
if has_role(player,'Jail') then return end
if has_role(player, 'Jail') then return end
local roles = get_roles(player)
old_roles[player.name] = roles
@@ -126,12 +126,12 @@ end
-- @tparam LuaPlayer player the player that will be unjailed
-- @tparam string by_player_name the name of the player that is doing the unjail
-- @treturn boolean whether the player was unjailed successfully
function Jail.unjail_player(player,by_player_name)
function Jail.unjail_player(player, by_player_name)
player = valid_player(player)
if not player then return end
if not by_player_name then return end
if not has_role(player,'Jail') then return end
if not has_role(player, 'Jail') then return end
local roles = old_roles[player.name] or {}
assign_roles(player, roles, by_player_name, nil, true)
@@ -160,7 +160,7 @@ end
-- @tparam string by_player_name the name of the player who is doing the temp ban
-- @tparam[opt='Non given.'] string reason the reason that the player is being temp banned
-- @treturn boolean whether the player was successfully temp banned
function Jail.temp_ban_player(player,by_player_name,reason)
function Jail.temp_ban_player(player, by_player_name, reason)
player = valid_player(player)
if not player then return end
if not by_player_name then return end
@@ -168,9 +168,9 @@ function Jail.temp_ban_player(player,by_player_name,reason)
reason = reason or 'Non given.'
if temp_bans[player.name] then return end
temp_bans[player.name] = {reason,by_player_name}
temp_bans[player.name] = {reason, by_player_name}
if not has_role(player,'Jail') then
if not has_role(player, 'Jail') then
local roles = get_roles(player)
old_roles[player.name] = roles
@@ -182,7 +182,7 @@ function Jail.temp_ban_player(player,by_player_name,reason)
move_items(inv.get_contents())
inv.clear()
event_emit(Jail.events.on_player_temp_banned,player,by_player_name,reason)
event_emit(Jail.events.on_player_temp_banned, player, by_player_name, reason)
return true
end
@@ -191,7 +191,7 @@ end
-- @tparam LuaPlayer player the player who is being removed from temp ban
-- @tparam string by_player_name the name of the player who is doing the untemp ban
-- @treturn boolean whether the player was successfully removed
function Jail.untemp_ban_player(player,by_player_name)
function Jail.untemp_ban_player(player, by_player_name)
player = valid_player(player)
if not player then return end
if not by_player_name then return end
@@ -199,14 +199,14 @@ function Jail.untemp_ban_player(player,by_player_name)
if not temp_bans[player.name] then return end
temp_bans[player.name] = nil
if has_role(player,'Jail') then
if has_role(player, 'Jail') then
local roles = old_roles[player.name]
assign_roles(player, roles, by_player_name, nil, true)
unassign_roles(player, 'Jail', by_player_name, nil, true)
end
event_emit(Jail.events.on_player_untemp_banned,player,by_player_name)
event_emit(Jail.events.on_player_untemp_banned, player, by_player_name)
return true
end

View File

@@ -14,21 +14,21 @@
-- The get production function is used to get production, consumion and net
-- it may be used for any item and with any precision level, use total for total
Production.get_production(game.forces.player,'iron-plate',defines.flow_precision_index.one_minute)
Production.get_production(game.forces.player, 'iron-plate', defines.flow_precision_index.one_minute)
-- The fluctuations works by compearing recent production with the average over time
-- again any precision may be used, apart from one_thousand_hours as there would be no valid average
Production.get_fluctuations(game.forces.player,'iron-plate',defines.flow_precision_index.one_minute)
Production.get_fluctuations(game.forces.player, 'iron-plate', defines.flow_precision_index.one_minute)
-- ETA is calculated based on what function you use but all share a similar method
-- for production eta it will take current production average given by the precision
-- and work out how many ticks it will require to make the required amount (1000 by default)
Production.get_production_eta(game.forces.player,'iron-plate',defines.flow_precision_index.one_minute,250000)
Production.get_production_eta(game.forces.player, 'iron-plate', defines.flow_precision_index.one_minute, 250000)
-- Both get_color and format_number are helper functions to help format production stats
-- get_color will return green,orange,red,or grey based on the active_value
-- the passive_value is used when active_value is 0 and can only return orange,red,or grey
Production.get_color(clamp,active_value,passive_value)
-- get_color will return green, orange, red, or grey based on the active_value
-- the passive_value is used when active_value is 0 and can only return orange, red, or grey
Production.get_color(clamp, active_value, passive_value)
]]
@@ -47,13 +47,13 @@ local Production = {}
-- @treturn[1] defines.flow_precision_index the next precision value
-- @treturn[1] number the multiplicive difference between the values
function Production.precision_up(precision)
if precision == precision_index.one_second then return precision_index.one_minute,60
elseif precision == precision_index.one_minute then return precision_index.ten_minutes,10
elseif precision == precision_index.ten_minutes then return precision_index.one_hour,6
elseif precision == precision_index.one_hour then return precision_index.ten_hours,10
elseif precision == precision_index.ten_hours then return precision_index.fifty_hours,5
elseif precision == precision_index.fifty_hours then return precision_index.two_hundred_fifty_hours,5
elseif precision == precision_index.two_hundred_fifty_hours then return precision_index.one_thousand_hours,4
if precision == precision_index.one_second then return precision_index.one_minute, 60
elseif precision == precision_index.one_minute then return precision_index.ten_minutes, 10
elseif precision == precision_index.ten_minutes then return precision_index.one_hour, 6
elseif precision == precision_index.one_hour then return precision_index.ten_hours, 10
elseif precision == precision_index.ten_hours then return precision_index.fifty_hours, 5
elseif precision == precision_index.fifty_hours then return precision_index.two_hundred_fifty_hours, 5
elseif precision == precision_index.two_hundred_fifty_hours then return precision_index.one_thousand_hours, 4
end
end
@@ -62,13 +62,13 @@ end
-- @treturn[1] defines.flow_precision_index the next precision value
-- @treturn[1] number the multiplicive difference between the values
function Production.precision_down(precision)
if precision == precision_index.one_minute then return precision_index.one_second,60
elseif precision == precision_index.ten_minutes then return precision_index.one_minute,10
elseif precision == precision_index.one_hour then return precision_index.ten_minutes,6
elseif precision == precision_index.ten_hours then return precision_index.one_hour,10
elseif precision == precision_index.fifty_hours then return precision_index.ten_hours,5
elseif precision == precision_index.two_hundred_fifty_hours then return precision_index.fifty_hours,5
elseif precision == precision_index.one_thousand_hours then return precision_index.two_hundred_fifty_hours,4
if precision == precision_index.one_minute then return precision_index.one_second, 60
elseif precision == precision_index.ten_minutes then return precision_index.one_minute, 10
elseif precision == precision_index.one_hour then return precision_index.ten_minutes, 6
elseif precision == precision_index.ten_hours then return precision_index.one_hour, 10
elseif precision == precision_index.fifty_hours then return precision_index.ten_hours, 5
elseif precision == precision_index.two_hundred_fifty_hours then return precision_index.fifty_hours, 5
elseif precision == precision_index.one_thousand_hours then return precision_index.two_hundred_fifty_hours, 4
end
end
@@ -95,7 +95,7 @@ end
-- @tparam LuaForce force the force to get the data for
-- @tparam string item_name the name of the item that you want the data about
-- @treturn table contains total made, used and net
function Production.get_production_total(force,item_name)
function Production.get_production_total(force, item_name)
local stats = force.item_production_statistics
local made = stats.get_input_count(item_name) or 0
local used = stats.get_output_count(item_name) or 0
@@ -113,10 +113,10 @@ end
-- @tparam string item_name the name of the item that you want the data about
-- @tparam defines.flow_precision_index precision the precision that you want the data given to
-- @treturn table contains made, used and net
function Production.get_production(force,item_name,precision)
function Production.get_production(force, item_name, precision)
local stats = force.item_production_statistics.get_flow_count
local made = stats{name=item_name,input=true,precision_index=precision} or 0
local used = stats{name=item_name,input=false,precision_index=precision} or 0
local made = stats{name=item_name, input=true, precision_index=precision} or 0
local used = stats{name=item_name, input=false, precision_index=precision} or 0
return {
made=made,
@@ -131,10 +131,10 @@ end
-- @tparam string item_name the name of the item that you want the data about
-- @tparam defines.flow_precision_index precision the precision that you want the data given to
-- @treturn table contains made, used and net
function Production.get_fluctuations(force,item_name,precision)
function Production.get_fluctuations(force, item_name, precision)
local percision_up = Production.precision_up(precision)
local current = Production.get_production(force,item_name,precision)
local previous = Production.get_production(force,item_name,percision_up)
local current = Production.get_production(force, item_name, precision)
local previous = Production.get_production(force, item_name, percision_up)
return {
made=(current.made/previous.made)-1,
@@ -150,10 +150,10 @@ end
-- @tparam defines.flow_precision_index precision the precision that you want the data given to
-- @tparam[opt=1000] number required the number of items that are required to be made
-- @treturn number the number of ticks required to produce this ammount of items
function Production.get_production_eta(force,item_name,precision,required)
function Production.get_production_eta(force, item_name, precision, required)
required = required or 1000
local ticks = Production.precision_ticks(precision)
local production = Production.get_production(force,item_name,precision)
local production = Production.get_production(force, item_name, precision)
return production.made == 0 and -1 or ticks*required/production.made
end
@@ -163,10 +163,10 @@ end
-- @tparam defines.flow_precision_index precision the precision that you want the data given to
-- @tparam[opt=1000] number required the number of items that are required to be consumed
-- @treturn number the number of ticks required to consume this ammount of items
function Production.get_consumsion_eta(force,item_name,precision,required)
function Production.get_consumsion_eta(force, item_name, precision, required)
required = required or 1000
local ticks = Production.precision_ticks(precision)
local production = Production.get_production(force,item_name,precision)
local production = Production.get_production(force, item_name, precision)
return production.used == 0 and -1 or ticks*required/production.used
end
@@ -176,10 +176,10 @@ end
-- @tparam defines.flow_precision_index precision the precision that you want the data given to
-- @tparam[opt=1000] number required the number of items that are required to be made but not used
-- @treturn number the number of ticks required to produce, but not use, this ammount of items
function Production.get_net_eta(force,item_name,precision,required)
function Production.get_net_eta(force, item_name, precision, required)
required = required or 1000
local ticks = Production.precision_ticks(precision)
local production = Production.get_production(force,item_name,precision)
local production = Production.get_production(force, item_name, precision)
return production.net == 0 and -1 or ticks*required/production.net
end
@@ -191,8 +191,8 @@ end
-- @tparam number clamp value which seperates the different colours
-- @tparam number active_value first value tested, tested against clamp
-- @tparam number passive_value second value tested, tested against 0
-- @treturn table contains r,g,b keys
function Production.get_color(clamp,active_value,passive_value)
-- @treturn table contains r, g,b keys
function Production.get_color(clamp, active_value, passive_value)
if active_value > clamp then
return Colors.light_green
elseif active_value < -clamp then
@@ -213,19 +213,19 @@ end
-- @treturn[1] string the sign for the number
-- @treturn[1] string the surfix for any unit used
function Production.format_number(value)
local rtn = format_number(math.round(value,1),true)
local rtn = format_number(math.round(value, 1), true)
local surfix = rtn:sub(-1)
if value > 0 then
rtn = '+'..rtn
elseif value == 0 and rtn:sub(1,1) == '-' then
elseif value == 0 and rtn:sub(1, 1) == '-' then
rtn = rtn:sub(2)
end
if not tonumber(surfix) then
return surfix,rtn:sub(1,-2)
return surfix, rtn:sub(1, -2)
else
return '',rtn
return '', rtn
end
end

View File

@@ -10,13 +10,13 @@
-- This will place a report on "MrBiter" (must be a valid player) the report will have been made
-- by "Cooldude2606" (must be the player name) with the reason 'Liking biters too much' this can be
-- seen by using Reports.get_report.
Reports.report_player('MrBiter','Cooldude2606','Liking biters too much') -- true
Reports.report_player('MrBiter', 'Cooldude2606', 'Liking biters too much') -- true
-- The other get methods can be used to get all the reports on a player or to test if a player is reported.
Reports.get_report('MrBiter','Cooldude2606') -- 'Liking biters too much'
Reports.get_report('MrBiter', 'Cooldude2606') -- 'Liking biters too much'
-- This will remove the warning on 'MrBiter' (must be a valid player) which was made by 'Cooldude2606'.
Reports.remove_report('MrBiter','Cooldude2606') -- true
Reports.remove_report('MrBiter', 'Cooldude2606') -- true
-- This will remove all the report that have been made against 'MrBiter'. Note that the remove event will
-- be triggered once per report issused.
@@ -48,7 +48,7 @@ local Reports = {
}
local user_reports = Reports.user_reports
Global.register(user_reports,function(tbl)
Global.register(user_reports, function(tbl)
Reports.user_reports = tbl
user_reports = Reports.user_reports
end)
@@ -71,7 +71,7 @@ end
-- @tparam LuaPlayer player the player to get the report for
-- @tparam string by_player_name the name of the player who made the report
-- @treturn ?string|nil string is the reason that the player was reported, if the player is not reported
function Reports.get_report(player,by_player_name)
function Reports.get_report(player, by_player_name)
player = valid_player(player)
if not player then return end
if not by_player_name then return end
@@ -84,7 +84,7 @@ end
-- @tparam LuaPlayer player the player to check if reported
-- @tparam[opt] string by_player_name when given will check if reported by this player
-- @treturn boolean if the player has been reported
function Reports.is_reported(player,by_player_name)
function Reports.is_reported(player, by_player_name)
player = valid_player(player)
if not player then return end
@@ -100,15 +100,15 @@ end
-- @tparam LuaPlayer player the player to count the reports for
-- @tparam[opt] function custom_count when given this function will be used to count the reports
-- @treturn number the number of reports that the user has
function Reports.count_reports(player,custom_count)
function Reports.count_reports(player, custom_count)
player = valid_player(player)
if not player then return end
local reports = user_reports[player.name] or {}
if custom_count then
local ctn = 0
for by_player_name,reason in pairs(reports) do
ctn = ctn + custom_count(player,by_player_name,reason)
for by_player_name, reason in pairs(reports) do
ctn = ctn + custom_count(player, by_player_name, reason)
end
return ctn
else
@@ -125,7 +125,7 @@ end
-- @tparam string by_player_name the name of the player that is making the report
-- @tparam[opt='Non given.'] string reason the reason that the player is being reported
-- @treturn boolean whether the report was added successfully
function Reports.report_player(player,by_player_name,reason)
function Reports.report_player(player, by_player_name, reason)
player = valid_player(player)
if not player then return end
local player_name = player.name
@@ -144,7 +144,7 @@ function Reports.report_player(player,by_player_name,reason)
reports[by_player_name] = reason
end
script.raise_event(Reports.events.on_player_reported,{
script.raise_event(Reports.events.on_player_reported, {
name = Reports.events.on_player_reported,
tick = game.tick,
player_index = player.index,
@@ -159,8 +159,8 @@ end
-- @tparam LuaPlayer player the player who is having the report removed from them
-- @tparam string reported_by_name the player who had the report
-- @tparam string removed_by_name the player who is clearing the report
local function report_removed_event(player,reported_by_name,removed_by_name)
script.raise_event(Reports.events.on_report_removed,{
local function report_removed_event(player, reported_by_name, removed_by_name)
script.raise_event(Reports.events.on_report_removed, {
name = Reports.events.on_report_removed,
tick = game.tick,
player_index = player.index,
@@ -174,7 +174,7 @@ end
-- @tparam string reported_by_name the name of the player that made the report
-- @tparam string removed_by_name the name of the player who removed the report
-- @treturn boolean whether the report was removed successfully
function Reports.remove_report(player,reported_by_name,removed_by_name)
function Reports.remove_report(player, reported_by_name, removed_by_name)
player = valid_player(player)
if not player then return end
@@ -188,7 +188,7 @@ function Reports.remove_report(player,reported_by_name,removed_by_name)
return false
end
report_removed_event(player,reported_by_name,removed_by_name)
report_removed_event(player, reported_by_name, removed_by_name)
reports[reported_by_name] = nil
return true
@@ -198,7 +198,7 @@ end
-- @tparam LuaPlayer player the player to remove the reports from
-- @tparam string removed_by_name the name of the player who removed the report
-- @treturn boolean whether the reports were removed successfully
function Reports.remove_all(player,removed_by_name)
function Reports.remove_all(player, removed_by_name)
player = valid_player(player)
if not player then return end
@@ -207,8 +207,8 @@ function Reports.remove_all(player,removed_by_name)
return false
end
for reported_by_name,_ in pairs(reports) do
report_removed_event(player,reported_by_name,removed_by_name)
for reported_by_name, _ in pairs(reports) do
report_removed_event(player, reported_by_name, removed_by_name)
end
user_reports[player.name] = nil

View File

@@ -18,10 +18,10 @@
Rockets.get_silos('player')
-- You can get the launch time for a rocket, meaning what game tick the 50th rocket was launched
Rockets.get_rocket_time('player',50)
Rockets.get_rocket_time('player', 50)
-- The rolling average will work out the time to launch one rocket based on the last X rockets
Rockets.get_rolling_average('player',10)
Rockets.get_rolling_average('player', 10)
]]
@@ -30,7 +30,7 @@ local Global = require 'utils.global' --- @dep utils.global
local config = require 'config.gui.rockets' --- @dep config.rockets
local largest_rolling_avg = 0
for _,avg_over in pairs(config.stats.rolling_avg) do
for _, avg_over in pairs(config.stats.rolling_avg) do
if avg_over > largest_rolling_avg then
largest_rolling_avg = avg_over
end
@@ -49,7 +49,7 @@ Global.register({
rocket_times = rocket_times,
rocket_stats = rocket_stats,
rocket_silos = rocket_silos
},function(tbl)
}, function(tbl)
Rockets.times = tbl.rocket_times
Rockets.stats = tbl.rocket_stats
Rockets.silos = tbl.rocket_silos
@@ -94,9 +94,9 @@ end
-- @treturn table an array of silo data that all belong to this force
function Rockets.get_silos(force_name)
local rtn = {}
for _,silo_data in pairs(rocket_silos) do
for _, silo_data in pairs(rocket_silos) do
if silo_data.force == force_name then
table.insert(rtn,silo_data)
table.insert(rtn, silo_data)
end
end
return rtn
@@ -106,7 +106,7 @@ end
-- @tparam string force_name the name of the force to get the count for
-- @tparam number rocket_number the number of the rocket to get the launch time for
-- @treturn number the game tick that the rocket was lanuched on
function Rockets.get_rocket_time(force_name,rocket_number)
function Rockets.get_rocket_time(force_name, rocket_number)
return rocket_times[force_name] and rocket_times[force_name][rocket_number] or nil
end
@@ -122,7 +122,7 @@ end
-- @treturn number the total number of rockets launched this game
function Rockets.get_game_rocket_count()
local rtn = 0
for _,force in pairs(game.forces) do
for _, force in pairs(game.forces) do
rtn = rtn + force.rockets_launched
end
return rtn
@@ -132,7 +132,7 @@ end
-- @tparam string force_name the name of the force to get the average for
-- @tparam number count the distance to get the rolling average over
-- @treturn number the number of ticks required to launch one rocket
function Rockets.get_rolling_average(force_name,count)
function Rockets.get_rolling_average(force_name, count)
local force = game.forces[force_name]
local rocket_count = force.rockets_launched
if rocket_count == 0 then return 0 end
@@ -146,7 +146,7 @@ function Rockets.get_rolling_average(force_name,count)
end
--- Event used to update the stats and the hui when a rocket is launched
Event.add(defines.events.on_rocket_launched,function(event)
Event.add(defines.events.on_rocket_launched, function(event)
local entity = event.rocket_silo
local silo_data = Rockets.get_silo_data(entity)
local force = event.rocket_silo.force
@@ -177,7 +177,7 @@ Event.add(defines.events.on_rocket_launched,function(event)
rocket_times[force_name][rockets_launched] = event.tick
local remove_rocket = rockets_launched-largest_rolling_avg
if remove_rocket > 0 and not table.contains(config.milestones,remove_rocket) then
if remove_rocket > 0 and not table.contains(config.milestones, remove_rocket) then
rocket_times[force_name][remove_rocket] = nil
end
@@ -186,7 +186,7 @@ Event.add(defines.events.on_rocket_launched,function(event)
end)
--- When a launch is reiggered it will await reset
Event.add(defines.events.on_rocket_launch_ordered,function(event)
Event.add(defines.events.on_rocket_launch_ordered, function(event)
local entity = event.rocket_silo
local silo_data = Rockets.get_silo_data(entity)
silo_data.awaiting_reset = true
@@ -212,7 +212,7 @@ local function on_built(event)
end
end
Event.add(defines.events.on_built_entity,on_built)
Event.add(defines.events.on_robot_built_entity,on_built)
Event.add(defines.events.on_built_entity, on_built)
Event.add(defines.events.on_robot_built_entity, on_built)
return Rockets

View File

@@ -4,9 +4,9 @@
@alias Tasks
@usage-- Making and then editing a new task
local task_id = Tasks.add_task(game.player.force.name,nil,game.player.name)
local task_id = Tasks.add_task(game.player.force.name, nil, game.player.name)
Tasks.update_task(task_id,'We need more iron!',game.player.name)
Tasks.update_task(task_id, 'We need more iron!', game.player.name)
]]
@@ -18,7 +18,7 @@ local Tasks = {}
-- Global lookup table for force name to task ids
local force_tasks = {}
Global.register(force_tasks,function(tbl)
Global.register(force_tasks, function(tbl)
force_tasks = tbl
end)
@@ -38,10 +38,10 @@ Tasks.store = task_store
@treturn string the uid of the task which was created
@usage-- Adding a new task for your force
local task_id = Tasks.add_task(game.player.force.name,nil,game.player.name)
local task_id = Tasks.add_task(game.player.force.name, nil, game.player.name)
]]
function Tasks.add_task(force_name,task_number,player_name,task_message)
function Tasks.add_task(force_name, task_number, player_name, task_message)
-- Get a new task id
local task_id = tostring(Token.uid())
task_message = task_message or 'New Task'
@@ -55,9 +55,9 @@ function Tasks.add_task(force_name,task_number,player_name,task_message)
-- Insert the task id into the forces tasks
if task_number then
table.insert(tasks,task_number,task_id)
table.insert(tasks, task_number, task_id)
else
table.insert(tasks,task_id)
table.insert(tasks, task_id)
end
-- Create the editing table
@@ -67,7 +67,7 @@ function Tasks.add_task(force_name,task_number,player_name,task_message)
end
-- Add the new task to the store
Store.set(task_store,task_id,{
Store.set(task_store, task_id, {
task_id = task_id,
force_name = force_name,
message = task_message,
@@ -87,10 +87,10 @@ Tasks.remove_task(task_id)
]]
function Tasks.remove_task(task_id)
local task = Store.get(task_store,task_id)
local task = Store.get(task_store, task_id)
local force_name = task.force_name
table.remove_element(force_tasks[force_name],task_id)
Store.clear(task_store,task_id)
table.remove_element(force_tasks[force_name], task_id)
Store.clear(task_store, task_id)
end
--[[-- Update the message and last edited information for a task
@@ -99,11 +99,11 @@ end
@tparam[opt='server'] string player_name the name of the player who made the edit
@usage-- Updating the message for on a task
Task.update_task(task_id,'We need more iron!',game.player.name)
Task.update_task(task_id, 'We need more iron!', game.player.name)
]]
function Tasks.update_task(task_id,new_message,player_name)
Store.update(task_store,task_id,function(task)
function Tasks.update_task(task_id, new_message, player_name)
Store.update(task_store, task_id, function(task)
task.last_edit_name = player_name or '<server>'
task.last_edit_time = game.tick
task.message = new_message
@@ -116,11 +116,11 @@ end
@tparam boolean state the new state to set editing to
@usage-- Setting your editing state to true
Tasks.set_editing(task_id,game.player.name,true)
Tasks.set_editing(task_id, game.player.name, true)
]]
function Tasks.set_editing(task_id,player_name,state)
Store.update(task_store,task_id,function(task)
function Tasks.set_editing(task_id, player_name, state)
Store.update(task_store, task_id, function(task)
task.curently_editing[player_name] = state
end)
end
@@ -135,7 +135,7 @@ end)
]]
function Tasks.on_update(handler)
Store.watch(task_store,handler)
Store.watch(task_store, handler)
end
--- Getters.
@@ -151,7 +151,7 @@ local task = Tasks.get_task(task_id)
]]
function Tasks.get_task(task_id)
return Store.get(task_store,task_id)
return Store.get(task_store, task_id)
end
--[[-- Gets all the task ids that a force has
@@ -172,11 +172,11 @@ end
@treturn boolean weather the player is currently editing this task
@usage-- Check if a player is editing a task or not
local editing = Tasks.get_editing(task_id,game.player.name)
local editing = Tasks.get_editing(task_id, game.player.name)
]]
function Tasks.get_editing(task_id,player_name)
local task = Store.get(task_store,task_id)
function Tasks.get_editing(task_id, player_name)
local task = Store.get(task_store, task_id)
return task.curently_editing[player_name]
end

View File

@@ -8,17 +8,17 @@
local Warnings = require 'modules.control.warnings' --- @dep modules.control.warnings
-- This will add a warning to the player
Warnings.add_warning('MrBiter','Cooldude2606','Killed too many biters')
Warnings.add_warning('MrBiter', 'Cooldude2606', 'Killed too many biters')
-- This will remove a warning from a player, second name is just who is doing the action
Warnings.remove_warning('MrBiter','Cooldude2606')
Warnings.remove_warning('MrBiter', 'Cooldude2606')
-- Script warning as similar to normal warning but are designed to have no effect for a short amount of time
-- this is so it can be used for greifer protection without being too agressive
Warnings.add_script_warning('MrBiter','Killed too many biters')
Warnings.add_script_warning('MrBiter', 'Killed too many biters')
-- Both normal and script warnings can also be cleared, this will remove all warnings
Warnings.clear_warnings('MrBiter','Cooldude2606')
Warnings.clear_warnings('MrBiter', 'Cooldude2606')
]]
local Event = require 'utils.event' --- @dep utils.event
@@ -65,7 +65,7 @@ local user_script_warnings = Warnings.user_script_warnings
Global.register({
user_warnings = user_warnings,
user_script_warnings = user_script_warnings
},function(tbl)
}, function(tbl)
Warnings.user_warnings = tbl.user_warnings
Warnings.user_script_warnings = tbl.user_script_warnings
user_warnings = Warnings.user_warnings
@@ -92,7 +92,7 @@ end
-- @tparam string by_player_name the name of the player who is doing the action
-- @tparam[opt='Non given.'] string reason the reason that the player is being warned
-- @treturn number the number of warnings that the player has
function Warnings.add_warning(player,by_player_name,reason)
function Warnings.add_warning(player, by_player_name, reason)
player = valid_player(player)
if not player then return end
if not by_player_name then return end
@@ -105,7 +105,7 @@ function Warnings.add_warning(player,by_player_name,reason)
user_warnings[player.name] = warnings
end
table.insert(warnings,{
table.insert(warnings, {
tick = game.tick,
by_player_name = by_player_name,
reason = reason
@@ -113,7 +113,7 @@ function Warnings.add_warning(player,by_player_name,reason)
local warning_count = #warnings
script.raise_event(Warnings.events.on_warning_added,{
script.raise_event(Warnings.events.on_warning_added, {
name = Warnings.events.on_warning_added,
tick = game.tick,
player_index = player.index,
@@ -126,11 +126,11 @@ function Warnings.add_warning(player,by_player_name,reason)
if action then
local _type = type(action)
if _type == 'function' then
action(player,by_player_name,warning_count)
action(player, by_player_name, warning_count)
elseif _type == 'table' then
local current = table.deepcopy(action)
table.insert(current,2,by_player_name)
table.insert(current,3,warning_count)
table.insert(current, 2,by_player_name)
table.insert(current, 3,warning_count)
player.print(current)
elseif type(action) == 'string' then
player.print(action)
@@ -145,8 +145,8 @@ end
-- @tparam string warning_by_name the name of the player who made the warning
-- @tparam string removed_by_name the name of the player who is doing the action
-- @tparam number warning_count the number of warnings that the player how has
local function warning_removed_event(player,warning_by_name,removed_by_name,warning_count)
script.raise_event(Warnings.events.on_warning_removed,{
local function warning_removed_event(player, warning_by_name, removed_by_name, warning_count)
script.raise_event(Warnings.events.on_warning_removed, {
name = Warnings.events.on_warning_removed,
tick = game.tick,
player_index = player.index,
@@ -160,7 +160,7 @@ end
-- @tparam LuaPlayer player the player to remove a warning from
-- @tparam string by_player_name the name of the player who is doing the action
-- @treturn number the number of warnings that the player has
function Warnings.remove_warning(player,by_player_name)
function Warnings.remove_warning(player, by_player_name)
player = valid_player(player)
if not player then return end
if not by_player_name then return end
@@ -168,9 +168,9 @@ function Warnings.remove_warning(player,by_player_name)
local warnings = user_warnings[player.name]
if not warnings then return end
local warning = table.remove(warnings,1)
local warning = table.remove(warnings, 1)
warning_removed_event(player,warning.by_player_name,by_player_name,#warnings)
warning_removed_event(player, warning.by_player_name, by_player_name, #warnings)
return #warnings
end
@@ -179,7 +179,7 @@ end
-- @tparam LuaPlayer player the player to clear the warnings from
-- @tparam string by_player_name the name of the player who is doing the action
-- @treturn boolean true when warnings were cleared succesfully
function Warnings.clear_warnings(player,by_player_name)
function Warnings.clear_warnings(player, by_player_name)
player = valid_player(player)
if not player then return end
if not by_player_name then return end
@@ -188,8 +188,8 @@ function Warnings.clear_warnings(player,by_player_name)
if not warnings then return end
local warning_count = #warnings
for n,warning in pairs(warnings) do
warning_removed_event(player,warning.by_player_name,by_player_name,warning_count-n)
for n, warning in pairs(warnings) do
warning_removed_event(player, warning.by_player_name, by_player_name, warning_count-n)
end
user_warnings[player.name] = nil
@@ -215,7 +215,7 @@ end
-- @tparam LuaPlayer player the player to add a script warning to
-- @tparam[opt='Non given.'] string reason the reason that the player is being warned
-- @treturn number the number of script warnings that the player has
function Warnings.add_script_warning(player,reason)
function Warnings.add_script_warning(player, reason)
player = valid_player(player)
if not player then return end
@@ -227,14 +227,14 @@ function Warnings.add_script_warning(player,reason)
user_script_warnings[player.name] = warnings
end
table.insert(warnings,{
table.insert(warnings, {
tick = game.tick,
reason = reason
})
local warning_count = #warnings
script.raise_event(Warnings.events.on_script_warning_added,{
script.raise_event(Warnings.events.on_script_warning_added, {
name = Warnings.events.on_script_warning_added,
tick = game.tick,
player_index = player.index,
@@ -243,7 +243,7 @@ function Warnings.add_script_warning(player,reason)
})
if warning_count > config.script_warning_limit then
Warnings.add_warning(player,'<server>',reason)
Warnings.add_warning(player, '<server>', reason)
end
return warning_count
@@ -252,8 +252,8 @@ end
--- Script warning removed event tigger due to it being looped in clear script warnings
-- @tparam LuaPlayer player the player who is having a script warning removed
-- @tparam number warning_count the number of warning that the player has
local function script_warning_removed_event(player,warning_count)
script.raise_event(Warnings.events.on_script_warning_removed,{
local function script_warning_removed_event(player, warning_count)
script.raise_event(Warnings.events.on_script_warning_removed, {
name = Warnings.events.on_script_warning_removed,
tick = game.tick,
player_index = player.index,
@@ -271,7 +271,7 @@ function Warnings.remove_script_warning(player)
local warnings = user_script_warnings[player.name]
if not warnings then return end
table.remove(warnings,1)
table.remove(warnings, 1)
script_warning_removed_event(player)
@@ -288,8 +288,8 @@ function Warnings.clear_script_warnings(player)
if not warnings then return end
local warning_count = #warnings
for n,_ in pairs(warnings) do
script_warning_removed_event(player,warning_count-n)
for n, _ in pairs(warnings) do
script_warning_removed_event(player, warning_count-n)
end
user_script_warnings[player.name] = nil
@@ -298,11 +298,11 @@ end
-- script warnings are removed after a certain amount of time to make them even more lienient
local script_warning_cool_down = config.script_warning_cool_down*3600
Event.on_nth_tick(script_warning_cool_down/4,function()
Event.on_nth_tick(script_warning_cool_down/4, function()
local cutoff = game.tick - script_warning_cool_down
for player_name,script_warnings in pairs(user_script_warnings) do
for player_name, script_warnings in pairs(user_script_warnings) do
if #script_warnings > 0 then
for _,warning in pairs(script_warnings) do
for _, warning in pairs(script_warnings) do
if warning.tick < cutoff then
Warnings.remove_script_warning(player_name)
end

View File

@@ -6,7 +6,7 @@
@usage-- Making a new spawn warp
local player = game.player
local force = player.force
local spawn_id = Warps.add_warp(force.name,player.surface,player.position,player.name,'Spawn')
local spawn_id = Warps.add_warp(force.name, player.surface, player.position, player.name, 'Spawn')
Warps.set_spawn_warp(spawn_id, force)
Warps.make_warp_tag(spawn_id)
@@ -14,7 +14,7 @@ Warps.make_warp_tag(spawn_id)
@usage-- Making a new warp with a warp area
local player = game.player
local force = player.force
local warp_id = Warps.add_warp(force.name,player.surface,player.position,player.name)
local warp_id = Warps.add_warp(force.name, player.surface, player.position, player.name)
Warps.make_warp_area(warp_id)
Warps.make_warp_tag(warp_id)
@@ -30,7 +30,7 @@ local Warps = {}
-- Global lookup table for force name to task ids
local force_warps = {}
Global.register(force_warps,function(tbl)
Global.register(force_warps, function(tbl)
force_warps = tbl
end)
@@ -39,7 +39,7 @@ local warp_store = Store.register()
Warps.store = warp_store
-- When a warp is updated change its chat tag and resort the warp order
Store.watch(warp_store,function(warp,warp_id)
Store.watch(warp_store, function(warp, warp_id)
if warp then
-- Update the map chart tag if there is one
if warp.tag then
@@ -55,8 +55,8 @@ Store.watch(warp_store,function(warp,warp_id)
local spawn_id = warp_ids.spawn
local warp_names = {}
for _,next_warp_id in pairs(warp_ids) do
local next_warp = Store.get(warp_store,next_warp_id)
for _, next_warp_id in pairs(warp_ids) do
local next_warp = Store.get(warp_store, next_warp_id)
if next_warp_id ~= spawn_id then
warp_names[next_warp.name..next_warp_id] = next_warp_id
end
@@ -64,7 +64,7 @@ Store.watch(warp_store,function(warp,warp_id)
-- Sort the warp names in alphabetical order
local new_warp_ids = table.get_values(table.keysort(warp_names))
table.insert(new_warp_ids,1,spawn_id)
table.insert(new_warp_ids, 1,spawn_id)
new_warp_ids.spawn = spawn_id
force_warps[force_name] = new_warp_ids
end
@@ -83,7 +83,7 @@ local tag_added = Warps.make_warp_tag(warp_id)
]]
function Warps.make_warp_tag(warp_id)
local warp = Store.get(warp_store,warp_id)
local warp = Store.get(warp_store, warp_id)
local name = warp.name
local icon = warp.icon
@@ -91,7 +91,7 @@ function Warps.make_warp_tag(warp_id)
local tag = warp.tag
if tag and tag.valid then
tag.text = 'Warp: '..name
tag.icon = {type='item',name=icon}
tag.icon = {type='item', name=icon}
return false
end
@@ -100,10 +100,10 @@ function Warps.make_warp_tag(warp_id)
local surface = warp.surface
local position = warp.position
tag = force.add_chart_tag(surface,{
position = {position.x+0.5,position.y+0.5},
tag = force.add_chart_tag(surface, {
position = {position.x+0.5, position.y+0.5},
text = 'Warp: '..name,
icon = {type='item',name=icon}
icon = {type='item', name=icon}
})
-- Add the tag to this warp, store.update not needed as we dont want it to trigger
@@ -120,7 +120,7 @@ local removed = Warps.remove_warp_tag(warp_id)
]]
function Warps.remove_warp_tag(warp_id)
local warp = Store.get(warp_store,warp_id)
local warp = Store.get(warp_store, warp_id)
-- Check there is a tag to remove
local tag = warp.tag
@@ -144,7 +144,7 @@ Warps.make_warp_area(warp_id)
]]
function Warps.make_warp_area(warp_id)
local warp = Store.get(warp_store,warp_id)
local warp = Store.get(warp_store, warp_id)
local surface = warp.surface
local position = warp.position
local posx = position.x
@@ -164,7 +164,7 @@ function Warps.make_warp_area(warp_id)
for y = -radius, radius do
local y2 = y^2
if x2+y2 < radius2 then
table.insert(base_tiles,{name=base_tile,position={x+posx,y+posy}})
table.insert(base_tiles, {name=base_tile, position={x+posx, y+posy}})
end
end
end
@@ -172,16 +172,16 @@ function Warps.make_warp_area(warp_id)
-- Add a tile patern ontop of the base
local tiles = {}
for _,pos in pairs(config.tiles) do
table.insert(tiles,{name=base_tile,position={pos[1]+posx,pos[2]+posy}})
for _, pos in pairs(config.tiles) do
table.insert(tiles, {name=base_tile, position={pos[1]+posx, pos[2]+posy}})
end
surface.set_tiles(tiles)
-- Add entities to the warp structure
for _,entity in pairs(config.entities) do
for _, entity in pairs(config.entities) do
entity = surface.create_entity{
name=entity[1],
position={entity[2]+posx,entity[3]+posy},
position={entity[2]+posx, entity[3]+posy},
force='neutral'
}
entity.destructible = false
@@ -199,7 +199,7 @@ Warps.remove_warp_area(warp_id)
]]
function Warps.remove_warp_area(warp_id)
local warp = Store.get(warp_store,warp_id)
local warp = Store.get(warp_store, warp_id)
local position = warp.position
local surface = warp.surface
local radius = config.standard_proximity_radius
@@ -216,7 +216,7 @@ function Warps.remove_warp_area(warp_id)
for y = -radius, radius do
local y2 = y^2
if x2+y2 < radius2 then
table.insert(tiles,{name=base_tile,position={x+position.x,y+position.y}})
table.insert(tiles, {name=base_tile, position={x+position.x, y+position.y}})
end
end
end
@@ -226,11 +226,11 @@ function Warps.remove_warp_area(warp_id)
local entities = surface.find_entities_filtered{
force='neutral',
area={
{position.x-radius,position.y-radius},
{position.x+radius,position.y+radius}
{position.x-radius, position.y-radius},
{position.x+radius, position.y+radius}
}
}
for _,entity in pairs(entities) do if entity.name ~= 'player' then entity.destroy() end end
for _, entity in pairs(entities) do if entity.name ~= 'player' then entity.destroy() end end
end
--[[-- Set a warp to be the spawn point for a force, force must own this warp
@@ -238,12 +238,12 @@ end
@tparam LuaForce force the force that you want to set the spawn for
@usage-- Set your forces spawn to a warp
Warps.set_spawn_warp(warp_id,game.player.force)
Warps.set_spawn_warp(warp_id, game.player.force)
]]
function Warps.set_spawn_warp(warp_id,force)
function Warps.set_spawn_warp(warp_id, force)
-- Check the force owns this warp
local warp = Store.get(warp_store,warp_id)
local warp = Store.get(warp_store, warp_id)
if warp.force_name ~= force.name then return end
-- Set this warp as the spawn
@@ -263,11 +263,11 @@ end
@tparam LuaPlayer player the player to teleport to the warp
@usage-- Teleport yourself to a warp point
Warps.teleport_player(warp_id,game.player)
Warps.teleport_player(warp_id, game.player)
]]
function Warps.teleport_player(warp_id,player)
local warp = Store.get(warp_store,warp_id)
function Warps.teleport_player(warp_id, player)
local warp = Store.get(warp_store, warp_id)
local surface = warp.surface
local position = {
x=warp.position.x+0.5,
@@ -275,9 +275,9 @@ function Warps.teleport_player(warp_id,player)
}
-- Teleport the player
local goto_position = surface.find_non_colliding_position('character',position,32,1)
local goto_position = surface.find_non_colliding_position('character', position, 32, 1)
if player.driving then player.driving = false end
player.teleport(goto_position,surface)
player.teleport(goto_position, surface)
end
--- Setters.
@@ -294,10 +294,10 @@ end
@usage-- Adding a new warp for your force at your position
local player = game.player
local warp_id = Warps.add_warp(player.force.name,player.surface,player.position,player.name)
local warp_id = Warps.add_warp(player.force.name, player.surface, player.position, player.name)
]]
function Warps.add_warp(force_name,surface,position,player_name,warp_name)
function Warps.add_warp(force_name, surface, position, player_name, warp_name)
-- Get new warp id
local warp_id = tostring(Token.uid())
warp_name = warp_name or 'New warp'
@@ -310,7 +310,7 @@ function Warps.add_warp(force_name,surface,position,player_name,warp_name)
end
-- Insert the warp id into the force warps
table.insert(warp_ids,warp_id)
table.insert(warp_ids, warp_id)
-- Create the editing table
local editing = {}
@@ -319,7 +319,7 @@ function Warps.add_warp(force_name,surface,position,player_name,warp_name)
end
-- Add the new warp to the store
Store.set(warp_store,warp_id,{
Store.set(warp_store, warp_id, {
warp_id = warp_id,
force_name = force_name,
name = warp_name,
@@ -345,12 +345,12 @@ Warps.remove_warp(warp_id)
]]
function Warps.remove_warp(warp_id)
local warp = Store.get(warp_store,warp_id)
local warp = Store.get(warp_store, warp_id)
local force_name = warp.force_name
Warps.remove_warp_tag(warp_id)
Warps.remove_warp_area(warp_id)
Store.clear(warp_store,warp_id)
table.remove_element(force_warps[force_name],warp_id)
Store.clear(warp_store, warp_id)
table.remove_element(force_warps[force_name], warp_id)
end
--[[-- Update the name and icon for a warp
@@ -360,11 +360,11 @@ end
@tparam[opt='server'] string player_name the name of the player that made the edit
@usage-- Changing the name and icon for a warp
Warps.update_warp(warp_id,'My Warp','iron-plate',game.player.name)
Warps.update_warp(warp_id, 'My Warp', 'iron-plate', game.player.name)
]]
function Warps.update_warp(warp_id,new_name,new_icon,player_name)
Store.update(warp_store,warp_id,function(warp)
function Warps.update_warp(warp_id, new_name, new_icon, player_name)
Store.update(warp_store, warp_id, function(warp)
warp.last_edit_name = player_name or '<server>'
warp.last_edit_time = game.tick
warp.old_name = warp.name
@@ -379,11 +379,11 @@ end
@tparam boolean state the new state to set editing to
@usage-- Setting your editing state to true
Warps.set_editing(warp_id,game.player.name,true)
Warps.set_editing(warp_id, game.player.name, true)
]]
function Warps.set_editing(warp_id,player_name,state)
Store.update(warp_store,warp_id,function(warp)
function Warps.set_editing(warp_id, player_name, state)
Store.update(warp_store, warp_id, function(warp)
warp.currently_editing[player_name] = state
end)
end
@@ -398,7 +398,7 @@ end)
]]
function Warps.on_update(handler)
Store.watch(warp_store,handler)
Store.watch(warp_store, handler)
end
--- Getters.
@@ -414,7 +414,7 @@ local warp = Warps.get_warp(warp_id)
]]
function Warps.get_warp(warp_id)
return Store.get(warp_store,warp_id)
return Store.get(warp_store, warp_id)
end
--[[-- Gets all the warp ids that a force has
@@ -448,11 +448,11 @@ end
@treturn boolean weather the player is currently editing this warp
@usage-- Check if a player is editing a warp or not
local editing = Warps.get_editing(warp_id,game.player.name)
local editing = Warps.get_editing(warp_id, game.player.name)
]]
function Warps.get_editing(warp_id,player_name)
local warp = Store.get(warp_store,warp_id)
function Warps.get_editing(warp_id, player_name)
local warp = Store.get(warp_store, warp_id)
return warp.currently_editing[player_name]
end

View File

@@ -10,7 +10,7 @@ if use_silo_script then
end
local global = {}
Global.register(global,function(tbl)
Global.register(global, function(tbl)
global = tbl
end)
@@ -35,7 +35,7 @@ local respawn_items = function()
end
if use_silo_script then
for k,v in pairs(silo_script.get_events()) do
for k, v in pairs(silo_script.get_events()) do
Event.add(k, v)
end
end

View File

@@ -4,6 +4,7 @@
@alias player_list
]]
-- luacheck:ignore 211/Colors
local Gui = require 'expcore.gui' --- @dep expcore.gui
local Roles = require 'expcore.roles' --- @dep expcore.roles
local Store = require 'expcore.store' --- @dep expcore.store
@@ -24,7 +25,7 @@ local selected_action_store = Store.register(function(player)
end)
-- Set the config to use these stores
config.set_store_uids(selected_player_store,selected_action_store)
config.set_store_uids(selected_player_store, selected_action_store)
--- Button used to open the action bar
-- @element open_action_bar
@@ -40,13 +41,13 @@ Gui.element{
width = 8,
height = 14
}
:on_click(function(player,element,_)
:on_click(function(player, element, _)
local selected_player_name = element.parent.name
local old_selected_player_name = Store.get(selected_player_store,player)
local old_selected_player_name = Store.get(selected_player_store, player)
if selected_player_name == old_selected_player_name then
Store.clear(selected_player_store,player)
Store.clear(selected_player_store, player)
else
Store.set(selected_player_store,player,selected_player_name)
Store.set(selected_player_store, player, selected_player_name)
end
end)
@@ -59,10 +60,10 @@ Gui.element{
tooltip = {'player-list.close-action-bar'},
style = 'shortcut_bar_button_red'
}
:style(Gui.sprite_style(30,-1,{ top_margin = -1, right_margin = -1 }))
:on_click(function(player,_)
Store.clear(selected_player_store,player)
Store.clear(selected_action_store,player)
:style(Gui.sprite_style(30, -1, { top_margin = -1, right_margin = -1 }))
:on_click(function(player, _)
Store.clear(selected_player_store, player)
Store.clear(selected_action_store, player)
end)
--- Button used to confirm a reason
@@ -74,21 +75,21 @@ Gui.element{
tooltip = {'player-list.reason-confirm'},
style = 'shortcut_bar_button_green'
}
:style(Gui.sprite_style(30,-1,{ left_margin = -2, right_margin = -1 }))
:on_click(function(player,element)
:style(Gui.sprite_style(30, -1, { left_margin = -2, right_margin = -1 }))
:on_click(function(player, element)
local reason = element.parent.entry.text or 'Non Given'
local action_name = Store.get(selected_action_store,player)
local action_name = Store.get(selected_action_store, player)
local reason_callback = config.buttons[action_name].reason_callback
reason_callback(player,reason)
Store.clear(selected_player_store,player)
Store.clear(selected_action_store,player)
reason_callback(player, reason)
Store.clear(selected_player_store, player)
Store.clear(selected_action_store, player)
element.parent.entry.text = ''
end)
--- Set of elements that are used to make up a row of the player table
-- @element add_player_base
local add_player_base =
Gui.element(function(event_trigger,parent,player_data)
Gui.element(function(event_trigger, parent, player_data)
-- Add the button to open the action bar
local toggle_action_bar_flow = parent.add{ type = 'flow', name = player_data.name }
open_action_bar(toggle_action_bar_flow)
@@ -99,13 +100,13 @@ Gui.element(function(event_trigger,parent,player_data)
type = 'label',
name = event_trigger,
caption = player_data.name,
tooltip = {'player-list.open-map',player_data.name,player_data.tag,player_data.role_name}
tooltip = {'player-list.open-map', player_data.name, player_data.tag, player_data.role_name}
}
player_name.style.padding = {0,2,0,0}
player_name.style.padding = {0, 2,0, 0}
player_name.style.font_color = player_data.chat_color
-- Add the time played label
local alignment = Gui.alignment(parent,'player-time-'..player_data.index)
local alignment = Gui.alignment(parent, 'player-time-'..player_data.index)
local time_label = alignment.add{
name = 'label',
type = 'label',
@@ -116,34 +117,34 @@ Gui.element(function(event_trigger,parent,player_data)
return time_label
end)
:on_click(function(player,element,event)
:on_click(function(player, element, event)
local selected_player_name = element.caption
local selected_player = Game.get_player_from_any(selected_player_name)
if event.button == defines.mouse_button_type.left then
-- LMB will open the map to the selected player
local position = selected_player.position
event.player.zoom_to_world(position,1.75)
event.player.zoom_to_world(position, 1.75)
else
-- RMB will toggle the settings
local old_selected_player_name = Store.get(selected_player_store,player)
local old_selected_player_name = Store.get(selected_player_store, player)
if selected_player_name == old_selected_player_name then
Store.clear(selected_player_store,player)
Store.clear(selected_action_store,player)
Store.clear(selected_player_store, player)
Store.clear(selected_action_store, player)
else
Store.set(selected_player_store,player,selected_player_name)
Store.set(selected_player_store, player, selected_player_name)
end
end
end)
-- Removes the three elements that are added as part of the base
local function remove_player_base(parent,player)
local function remove_player_base(parent, player)
Gui.destroy_if_valid(parent[player.name])
Gui.destroy_if_valid(parent['player-name-'..player.index])
Gui.destroy_if_valid(parent['player-time-'..player.index])
end
-- Update the time label for a player using there player time data
local function update_player_base(parent,player_time)
local function update_player_base(parent, player_time)
local time_element = parent[player_time.element_name]
if time_element and time_element.valid then
time_element.label.caption = player_time.caption
@@ -154,15 +155,15 @@ end
--- Adds all the buttons and flows that make up the action bar
-- @element add_action_bar
local add_action_bar_buttons =
Gui.element(function(_,parent)
Gui.element(function(_, parent)
close_action_bar(parent)
-- Loop over all the buttons in the config
for action_name,button_data in pairs(config.buttons) do
for action_name, button_data in pairs(config.buttons) do
-- Added the permission flow
local permission_flow = parent.add{ type = 'flow', name = action_name }
permission_flow.visible = false
-- Add the buttons under that permission
for _,button in ipairs(button_data) do
for _, button in ipairs(button_data) do
button(permission_flow)
end
end
@@ -173,7 +174,7 @@ end)
--- Updates the visible state of the action bar buttons
local function update_action_bar(element)
local player = Gui.get_player_from_element(element)
local selected_player_name = Store.get(selected_player_store,player)
local selected_player_name = Store.get(selected_player_store, player)
if not selected_player_name then
-- Hide the action bar when no player is selected
@@ -184,16 +185,16 @@ local function update_action_bar(element)
if not selected_player.connected then
-- If the player is offline then reest stores
element.visible = false
Store.clear(selected_player_store,player)
Store.clear(selected_action_store,player)
Store.clear(selected_player_store, player)
Store.clear(selected_action_store, player)
else
-- Otherwise check what actions the player is allowed to use
element.visible = true
for action_name,buttons in pairs(config.buttons) do
if buttons.auth and not buttons.auth(player,selected_player) then
for action_name, buttons in pairs(config.buttons) do
if buttons.auth and not buttons.auth(player, selected_player) then
element[action_name].visible = false
elseif Roles.player_allowed(player,action_name) then
elseif Roles.player_allowed(player, action_name) then
element[action_name].visible = true
end
end
@@ -205,36 +206,36 @@ end
--- Main player list container for the left flow
-- @element player_list_container
local player_list_container =
Gui.element(function(event_trigger,parent)
Gui.element(function(event_trigger, parent)
-- Draw the internal container
local container = Gui.container(parent,event_trigger,200)
local container = Gui.container(parent, event_trigger, 200)
-- Draw the scroll table for the players
local scroll_table = Gui.scroll_table(container,184,3)
local scroll_table = Gui.scroll_table(container, 184, 3)
-- Change the style of the scroll table
local scroll_table_style = scroll_table.style
scroll_table_style.padding = {1,0,1,2}
scroll_table_style.padding = {1, 0,1, 2}
-- Add the action bar
local action_bar = Gui.footer(container,nil,nil,false,'action_bar')
local action_bar = Gui.footer(container, nil, nil, false, 'action_bar')
-- Change the style of the action bar
local action_bar_style = action_bar.style
action_bar_style.height = 35
action_bar_style.padding = {1,3}
action_bar_style.padding = {1, 3}
action_bar.visible = false
-- Add the buttons to the action bar
add_action_bar_buttons(action_bar)
-- Add the reason bar
local reason_bar = Gui.footer(container,nil,nil,false,'reason_bar')
local reason_bar = Gui.footer(container, nil, nil, false, 'reason_bar')
-- Change the style of the reason bar
local reason_bar_style = reason_bar.style
reason_bar_style.height = 35
reason_bar_style.padding = {-1,3}
reason_bar_style.padding = {-1, 3}
reason_bar.visible = false
-- Add the text entry for the reason bar
@@ -263,15 +264,15 @@ end)
--- Button on the top flow used to toggle the player list container
-- @element toggle_left_element
Gui.left_toolbar_button('entity/character', {'player-list.main-tooltip'}, player_list_container, function(player)
return Roles.player_allowed(player,'gui/player-list')
return Roles.player_allowed(player, 'gui/player-list')
end)
-- Get caption and tooltip format for a player
local function get_time_formats(online_time,afk_time)
local function get_time_formats(online_time, afk_time)
local tick = game.tick > 0 and game.tick or 1
local percent = math.round(online_time/tick,3)*100
local percent = math.round(online_time/tick, 3)*100
local caption = format_time(online_time)
local tooltip = {'player-list.afk-time', percent, format_time(afk_time,{minutes=true,long=true})}
local tooltip = {'player-list.afk-time', percent, format_time(afk_time, {minutes=true, long=true})}
return caption, tooltip
end
@@ -297,20 +298,20 @@ end
local function get_player_list_order()
-- Sort all the online players into roles
local players = {}
for _,player in pairs(game.connected_players) do
for _, player in pairs(game.connected_players) do
local highest_role = Roles.get_player_highest_role(player)
if not players[highest_role.name] then
players[highest_role.name] = {}
end
table.insert(players[highest_role.name],player)
table.insert(players[highest_role.name], player)
end
-- Sort the players from roles into a set order
local ctn = 0
local player_list_order = {}
for _,role_name in pairs(Roles.config.order) do
for _, role_name in pairs(Roles.config.order) do
if players[role_name] then
for _,player in pairs(players[role_name]) do
for _, player in pairs(players[role_name]) do
ctn = ctn + 1
-- Add the player data to the array
local caption, tooltip = get_time_formats(player.online_time, player.afk_time)
@@ -329,8 +330,8 @@ local function get_player_list_order()
--[[Adds fake players to the player list
for i = 1, 10 do
local online_time = math.random(1,tick)
local afk_time = math.random(online_time-(tick/10),tick)
local online_time = math.random(1, tick)
local afk_time = math.random(online_time-(tick/10), tick)
local caption, tooltip = get_time_formats(online_time, afk_time)
player_list_order[ctn+i] = {
name='Player '..i,
@@ -347,29 +348,29 @@ local function get_player_list_order()
end
--- Update the play times every 30 sections
Event.on_nth_tick(1800,function()
Event.on_nth_tick(1800, function()
local player_times = get_player_times()
for _,player in pairs(game.connected_players) do
local frame = Gui.get_left_element(player,player_list_container)
for _, player in pairs(game.connected_players) do
local frame = Gui.get_left_element(player, player_list_container)
local scroll_table = frame.container.scroll.table
for _,player_time in pairs(player_times) do
update_player_base(scroll_table,player_time)
for _, player_time in pairs(player_times) do
update_player_base(scroll_table, player_time)
end
end
end)
--- When a player leaves only remove they entry
Event.add(defines.events.on_player_left_game,function(event)
Event.add(defines.events.on_player_left_game, function(event)
local remove_player = Game.get_player_by_index(event.player_index)
for _,player in pairs(game.connected_players) do
local frame = Gui.get_left_element(player,player_list_container)
for _, player in pairs(game.connected_players) do
local frame = Gui.get_left_element(player, player_list_container)
local scroll_table = frame.container.scroll.table
remove_player_base(scroll_table,remove_player)
remove_player_base(scroll_table, remove_player)
local selected_player_name = Store.get(selected_player_store,player)
local selected_player_name = Store.get(selected_player_store, player)
if selected_player_name == remove_player.name then
Store.clear(selected_player_store,player)
Store.clear(selected_action_store,player)
Store.clear(selected_player_store, player)
Store.clear(selected_action_store, player)
end
end
end)
@@ -377,27 +378,27 @@ end)
--- All other events require a full redraw of the table
local function redraw_player_list()
local player_list_order = get_player_list_order()
for _,player in pairs(game.connected_players) do
local frame = Gui.get_left_element(player,player_list_container)
for _, player in pairs(game.connected_players) do
local frame = Gui.get_left_element(player, player_list_container)
local scroll_table = frame.container.scroll.table
scroll_table.clear()
for _,next_player_data in ipairs(player_list_order) do
add_player_base(scroll_table,next_player_data)
for _, next_player_data in ipairs(player_list_order) do
add_player_base(scroll_table, next_player_data)
end
end
end
Event.add(defines.events.on_player_joined_game,redraw_player_list)
Event.add(Roles.events.on_role_assigned,redraw_player_list)
Event.add(Roles.events.on_role_unassigned,redraw_player_list)
Event.add(defines.events.on_player_joined_game, redraw_player_list)
Event.add(Roles.events.on_role_assigned, redraw_player_list)
Event.add(Roles.events.on_role_unassigned, redraw_player_list)
--- When the action player is changed the action bar will update
Store.watch(selected_player_store,function(value,player_name)
Store.watch(selected_player_store, function(value, player_name)
local player = Game.get_player_from_any(player_name)
local frame = Gui.get_left_element(player,player_list_container)
local frame = Gui.get_left_element(player, player_list_container)
local scroll_table = frame.container.scroll.table
update_action_bar(frame.container.action_bar)
for _,next_player in pairs(game.connected_players) do
for _, next_player in pairs(game.connected_players) do
local element = scroll_table[next_player.name][open_action_bar.name]
local style = 'frame_button'
if next_player.name == value then
@@ -412,20 +413,20 @@ Store.watch(selected_player_store,function(value,player_name)
end)
--- When the action name is changed the reason input will update
Store.watch(selected_action_store,function(value,player_name)
Store.watch(selected_action_store, function(value, player_name)
local player = Game.get_player_from_any(player_name)
local frame = Gui.get_left_element(player,player_list_container)
local frame = Gui.get_left_element(player, player_list_container)
local element = frame.container.reason_bar
if value then
-- if there is a new value then check the player is still online
local selected_player_name = Store.get(selected_player_store,player_name)
local selected_player_name = Store.get(selected_player_store, player_name)
local selected_player = Game.get_player_from_any(selected_player_name)
if selected_player.connected then
element.visible = true
else
-- Clear if the player is offline
Store.clear(selected_player_store,player_name)
Store.clear(selected_action_store,player_name)
Store.clear(selected_player_store, player_name)
Store.clear(selected_action_store, player_name)
end
else

View File

@@ -12,7 +12,7 @@ local Game = require 'utils.game' --- @dep utils.game
local format_time = _C.format_time --- @dep expcore.common
local tabs = {}
local function Tab(caption,tooltip,element_define)
local function Tab(caption, tooltip, element_define)
tabs[#tabs+1] = {caption, tooltip, element_define}
end
@@ -23,7 +23,7 @@ local scroll_hieght = 275 -- controls the height of the scrolls
--- Sub content area used within the content areas
-- @element sub_content
local sub_content =
Gui.element(function(_,parent)
Gui.element(function(_, parent)
return parent.add{
type = 'frame',
direction = 'vertical',
@@ -38,7 +38,7 @@ end)
--- Table which has a title above it above it
-- @element title_table
local title_table =
Gui.element(function(_,parent,bar_size,caption,column_count)
Gui.element(function(_, parent, bar_size, caption, column_count)
Gui.title_label(parent, bar_size, caption)
return parent.add{
@@ -65,15 +65,15 @@ Gui.element{
style = 'scroll_pane_under_subheader'
}
:style{
padding = {1,3},
padding = {1, 3},
maximal_height = scroll_hieght,
horizontally_stretchable = true,
}
--- Content area for the welcome tab
-- @element welcome_content
Tab({'readme.welcome-tab'},{'readme.welcome-tooltip'},
Gui.element(function(_,parent)
Tab({'readme.welcome-tab'}, {'readme.welcome-tooltip'},
Gui.element(function(_, parent)
local server_details = global.server_details or { name='ExpGaming S0 - Local', description='Failed to load description: disconnected from sync api.', reset_time='Non Set', branch='Unknown'}
local container = parent.add{ type='flow', direction='vertical' }
local player = Gui.get_player_from_element(parent)
@@ -93,15 +93,15 @@ Gui.element(function(_,parent)
-- Get the names of the roles the player has
local player_roles = Roles.get_player_roles(player)
local role_names = {}
for i,role in ipairs(player_roles) do
for i, role in ipairs(player_roles) do
role_names[i] = role.name
end
-- Add the other information to the gui
container.add{ type='flow' }.style.height = 4
local online_time = format_time(game.tick,{days=true,hours=true,minutes=true,long=true})
local online_time = format_time(game.tick, {days=true, hours=true, minutes=true, long=true})
Gui.centered_label(sub_content(container), frame_width, {'readme.welcome-general', server_details.reset_time, online_time})
Gui.centered_label(sub_content(container), frame_width, {'readme.welcome-roles', table.concat(role_names,', ')})
Gui.centered_label(sub_content(container), frame_width, {'readme.welcome-roles', table.concat(role_names, ', ')})
Gui.centered_label(sub_content(container), frame_width, {'readme.welcome-chat'})
return container
@@ -109,8 +109,8 @@ end))
--- Content area for the rules tab
-- @element rules_content
Tab({'readme.rules-tab'},{'readme.rules-tooltip'},
Gui.element(function(_,parent)
Tab({'readme.rules-tab'}, {'readme.rules-tooltip'},
Gui.element(function(_, parent)
local container = parent.add{ type='flow', direction='vertical' }
-- Add the title and description to the content
@@ -125,7 +125,7 @@ Gui.element(function(_,parent)
rules.style.cell_padding = 4
-- Add the rules to the table
for i = 1,15 do
for i = 1, 15 do
Gui.centered_label(rules, 565, {'readme.rules-'..i})
end
@@ -134,8 +134,8 @@ end))
--- Content area for the commands tab
-- @element commands_content
Tab({'readme.commands-tab'},{'readme.commands-tooltip'},
Gui.element(function(_,parent)
Tab({'readme.commands-tab'}, {'readme.commands-tooltip'},
Gui.element(function(_, parent)
local container = parent.add{ type='flow', direction='vertical' }
local player = Gui.get_player_from_element(parent)
@@ -151,7 +151,7 @@ Gui.element(function(_,parent)
commands.style.cell_padding = 0
-- Add the rules to the table
for name,command in pairs(Commands.get(player)) do
for name, command in pairs(Commands.get(player)) do
Gui.centered_label(commands, 120, name)
Gui.centered_label(commands, 450, command.help)
end
@@ -161,8 +161,8 @@ end))
--- Content area for the servers tab
-- @element servers_content
Tab({'readme.servers-tab'},{'readme.servers-tooltip'},
Gui.element(function(_,parent)
Tab({'readme.servers-tab'}, {'readme.servers-tooltip'},
Gui.element(function(_, parent)
local container = parent.add{ type='flow', direction='vertical' }
-- Add the title and description to the content
@@ -177,14 +177,14 @@ Gui.element(function(_,parent)
-- Add the factorio servers
local factorio_servers = title_table(scroll_pane, 225, {'readme.servers-factorio'}, 2)
for i = 1,8 do
for i = 1, 8 do
Gui.centered_label(factorio_servers, 110, {'readme.servers-'..i})
Gui.centered_label(factorio_servers, 460, {'readme.servers-d'..i})
end
-- Add the external links
local external_links = title_table(scroll_pane, 235, {'readme.servers-external'}, 2)
for _,key in ipairs{'discord','website','patreon','status','github'} do
for _, key in ipairs{'discord', 'website', 'patreon', 'status', 'github'} do
Gui.centered_label(external_links, 110, key:gsub("^%l", string.upper))
Gui.centered_label(external_links, 460, {'links.'..key}, {'readme.servers-open-in-browser'})
end
@@ -194,8 +194,8 @@ end))
--- Content area for the servers tab
-- @element backers_content
Tab({'readme.backers-tab'},{'readme.backers-tooltip'},
Gui.element(function(_,parent)
Tab({'readme.backers-tab'}, {'readme.backers-tooltip'},
Gui.element(function(_, parent)
local container = parent.add{ type='flow', direction='vertical' }
-- Add the title and description to the content
@@ -207,10 +207,10 @@ Gui.element(function(_,parent)
-- Find which players will go where
local done = {}
local groups = {
{ _roles={'Senior Administrator','Administrator'}, _title={'readme.backers-management'}, _width=230 },
{ _roles={'Board Member','Senior Backer'}, _title={'readme.backers-board'}, _width=145 }, -- change role to board
{ _roles={'Sponsor','Supporter'}, _title={'readme.backers-backers'}, _width=196 }, -- change to backer
{ _roles={'Moderator','Trainee'}, _title={'readme.backers-staff'}, _width=235 },
{ _roles={'Senior Administrator', 'Administrator'}, _title={'readme.backers-management'}, _width=230 },
{ _roles={'Board Member', 'Senior Backer'}, _title={'readme.backers-board'}, _width=145 }, -- change role to board
{ _roles={'Sponsor', 'Supporter'}, _title={'readme.backers-backers'}, _width=196 }, -- change to backer
{ _roles={'Moderator', 'Trainee'}, _title={'readme.backers-staff'}, _width=235 },
{ _roles={}, _time=3*3600*60, _title={'readme.backers-active'}, _width=235 },
}
@@ -242,12 +242,12 @@ Gui.element(function(_,parent)
local scroll_pane = title_table_scroll(container)
for _, players in ipairs(groups) do
local table = title_table(scroll_pane, players._width, players._title, 4)
for _,player_name in ipairs(players) do
for _, player_name in ipairs(players) do
Gui.centered_label(table, 140, player_name)
end
if #players < 4 then
for i = 1,4-#players do
for i = 1, 4-#players do
Gui.centered_label(table, 140)
end
end
@@ -260,7 +260,7 @@ end))
-- @element readme
local readme_toggle
local readme =
Gui.element(function(event_trigger,parent)
Gui.element(function(event_trigger, parent)
local container = parent.add{
name = event_trigger,
type = 'frame',
@@ -269,7 +269,7 @@ Gui.element(function(event_trigger,parent)
-- Add the left hand side of the frame back, removed because of frame_tabbed_pane style
local left_alignment = Gui.alignment(container, nil, nil, 'bottom')
left_alignment.style.padding = {32,0,0,0}
left_alignment.style.padding = {32, 0,0, 0}
local left_side =
left_alignment.add{
@@ -288,7 +288,7 @@ Gui.element(function(event_trigger,parent)
}
-- Add the different content areas
for _,tab_details in ipairs(tabs) do
for _, tab_details in ipairs(tabs) do
local tab = tab_pane.add{ type = 'tab', style = 'frame_tab', caption = tab_details[1], tooltip = tab_details[2] }
tab_pane.add_tab(tab, tab_details[3](tab_pane))
end
@@ -299,7 +299,7 @@ end)
local toggle_button = Gui.get_top_element(player, readme_toggle)
Gui.toolbar_button_style(toggle_button, true)
end)
:on_close(function(player,element)
:on_close(function(player, element)
local toggle_button = Gui.get_top_element(player, readme_toggle)
Gui.toolbar_button_style(toggle_button, false)
Gui.destroy_if_valid(element)
@@ -308,10 +308,10 @@ end)
--- Toggle button for the readme gui
-- @element readme_toggle
readme_toggle =
Gui.toolbar_button('virtual-signal/signal-info',{'readme.main-tooltip'},function(player)
return Roles.player_allowed(player,'gui/readme')
Gui.toolbar_button('virtual-signal/signal-info', {'readme.main-tooltip'}, function(player)
return Roles.player_allowed(player, 'gui/readme')
end)
:on_click(function(player,_)
:on_click(function(player, _)
local center = player.gui.center
if center[readme.name] then
player.opened = nil
@@ -321,7 +321,7 @@ end)
end)
--- When a player joins the game for the first time show this gui
Event.add(defines.events.on_player_created,function(event)
Event.add(defines.events.on_player_created, function(event)
local player = Game.get_player_by_index(event.player_index)
local element = readme(player.gui.center)
element.pane.selected_tab_index = 1
@@ -329,7 +329,7 @@ Event.add(defines.events.on_player_created,function(event)
end)
--- When a player joins clear center unless the player has something open
Event.add(defines.events.on_player_joined_game,function(event)
Event.add(defines.events.on_player_joined_game, function(event)
local player = Game.get_player_by_index(event.player_index)
if not player.opened then
player.gui.center.clear()
@@ -337,7 +337,7 @@ Event.add(defines.events.on_player_joined_game,function(event)
end)
--- When a player respawns clear center unless the player has something open
Event.add(defines.events.on_player_respawned,function(event)
Event.add(defines.events.on_player_respawned, function(event)
local player = Game.get_player_by_index(event.player_index)
if not player.opened then
player.gui.center.clear()

View File

@@ -20,7 +20,7 @@ local time_formats = {
}
--- Check if a player is allowed to use certain interactions
local function check_player_permissions(player,action)
local function check_player_permissions(player, action)
if not config.progress['allow_'..action] then
return false
end
@@ -30,7 +30,7 @@ local function check_player_permissions(player,action)
end
if config.progress[action..'_role_permission']
and not Roles.player_allowed(player,config.progress[action..'_role_permission']) then
and not Roles.player_allowed(player, config.progress[action..'_role_permission']) then
return false
end
@@ -46,7 +46,7 @@ Gui.element{
tooltip = {'rocket-info.toggle-rocket-tooltip'}
}
:style(Gui.sprite_style(16))
:on_click(function(_,element,_)
:on_click(function(_, element, _)
local rocket_silo_name = element.parent.name:sub(8)
local rocket_silo = Rockets.get_silo_entity(rocket_silo_name)
if rocket_silo.auto_launch then
@@ -68,21 +68,21 @@ Gui.element{
sprite = 'utility/center',
tooltip = {'rocket-info.launch-tooltip'}
}
:style(Gui.sprite_style(16,-1))
:on_click(function(player,element,_)
:style(Gui.sprite_style(16, -1))
:on_click(function(player, element, _)
local rocket_silo_name = element.parent.name:sub(8)
local silo_data = Rockets.get_silo_data_by_name(rocket_silo_name)
if silo_data.entity.launch_rocket() then
element.enabled = false
else
player.print({'rocket-info.launch-failed'},Colors.orange_red)
player.print({'rocket-info.launch-failed'}, Colors.orange_red)
end
end)
--- XY cords that allow zoom to map when pressed
-- @element silo_cords
local silo_cords =
Gui.element(function(event_trigger,parent,silo_data)
Gui.element(function(event_trigger, parent, silo_data)
local silo_name = silo_data.silo_name
local pos = silo_data.position
local name = config.progress.allow_zoom_to_map and event_trigger or nil
@@ -94,13 +94,13 @@ Gui.element(function(event_trigger,parent,silo_data)
name = 'label-x-'..silo_name,
caption = silo_name
}
flow_x.style.padding = {0,2,0,1}
flow_x.style.padding = {0, 2,0, 1}
-- Add the x cord label
flow_x.add{
type = 'label',
name = name,
caption = {'rocket-info.progress-x-pos',pos.x},
caption = {'rocket-info.progress-x-pos', pos.x},
tooltip = tooltip
}
@@ -110,32 +110,32 @@ Gui.element(function(event_trigger,parent,silo_data)
name = 'label-y-'..silo_name,
caption = silo_name
}
flow_y.style.padding = {0,2,0,1}
flow_y.style.padding = {0, 2,0, 1}
-- Add the y cord label
flow_y.add{
type = 'label',
name = name,
caption = {'rocket-info.progress-y-pos',pos.y},
caption = {'rocket-info.progress-y-pos', pos.y},
tooltip = tooltip
}
end)
:on_click(function(player,element,_)
:on_click(function(player, element, _)
local rocket_silo_name = element.parent.caption
local rocket_silo = Rockets.get_silo_entity(rocket_silo_name)
player.zoom_to_world(rocket_silo.position,2)
player.zoom_to_world(rocket_silo.position, 2)
end)
--- Base element for each rocket in the progress list
-- @element rocket_entry
local rocket_entry =
Gui.element(function(_,parent,silo_data)
Gui.element(function(_, parent, silo_data)
local silo_name = silo_data.silo_name
local player = Gui.get_player_from_element(parent)
-- Add the toggle auto launch if the player is allowed it
if check_player_permissions(player,'toggle_active') then
if check_player_permissions(player, 'toggle_active') then
local flow = parent.add{ type = 'flow', name = 'toggle-'..silo_name}
local button = toggle_launch(flow)
button.tooltip = silo_data.toggle_tooltip
@@ -143,17 +143,17 @@ Gui.element(function(_,parent,silo_data)
end
-- Add the remote launch if the player is allowed it
if check_player_permissions(player,'remote_launch') then
if check_player_permissions(player, 'remote_launch') then
local flow = parent.add{ type = 'flow', name = 'launch-'..silo_name}
local button = launch_rocket(flow)
button.enabled = silo_data.allow_launch
end
-- Draw the silo cords element
silo_cords(parent,silo_data)
silo_cords(parent, silo_data)
-- Add a progress label
local alignment = Gui.alignment(parent,silo_name)
local alignment = Gui.alignment(parent, silo_name)
local element =
alignment.add{
type = 'label',
@@ -169,7 +169,7 @@ end)
--- Data label which contains a name and a value label pair
-- @element data_label
local data_label =
Gui.element(function(_,parent,label_data)
Gui.element(function(_, parent, label_data)
local data_name = label_data.name
local data_subname = label_data.subname
local data_fullname = data_subname and data_name..data_subname or data_name
@@ -178,13 +178,13 @@ Gui.element(function(_,parent,label_data)
local name_label = parent.add{
type = 'label',
name = data_fullname..'-label',
caption = {'rocket-info.data-caption-'..data_name,data_subname},
tooltip = {'rocket-info.data-tooltip-'..data_name,data_subname}
caption = {'rocket-info.data-caption-'..data_name, data_subname},
tooltip = {'rocket-info.data-tooltip-'..data_name, data_subname}
}
name_label.style.padding = {0,2}
name_label.style.padding = {0, 2}
--- Right aligned label to store the data
local alignment = Gui.alignment(parent,data_fullname)
local alignment = Gui.alignment(parent, data_fullname)
local element =
alignment.add{
type = 'label',
@@ -192,17 +192,17 @@ Gui.element(function(_,parent,label_data)
caption = label_data.value,
tooltip = label_data.tooltip
}
element.style.padding = {0,2}
element.style.padding = {0, 2}
return element
end)
-- Used to update the captions and tooltips on the data labels
local function update_data_labels(parent,data_label_data)
local function update_data_labels(parent, data_label_data)
for _, label_data in ipairs(data_label_data) do
local data_name = label_data.subname and label_data.name..label_data.subname or label_data.name
if not parent[data_name] then
data_label(parent,label_data)
data_label(parent, label_data)
else
local data_label_element = parent[data_name].label
data_label_element.tooltip = label_data.tooltip
@@ -220,7 +220,7 @@ local function get_progress_data(force_name)
if not rocket_silo or not rocket_silo.valid then
-- Remove from list if not valid
force_silos[silo_data.name] = nil
table.insert(progress_data,{
table.insert(progress_data, {
silo_name = silo_data.name,
remove = true
})
@@ -228,14 +228,14 @@ local function get_progress_data(force_name)
else
-- Get the progress caption and tooltip
local progress_color = Colors.white
local progress_caption = {'rocket-info.progress-caption',rocket_silo.rocket_parts}
local progress_tooltip = {'rocket-info.progress-tooltip',silo_data.launched or 0}
local progress_caption = {'rocket-info.progress-caption', rocket_silo.rocket_parts}
local progress_tooltip = {'rocket-info.progress-tooltip', silo_data.launched or 0}
local status = rocket_silo.status == defines.entity_status.waiting_to_launch_rocket
if status and silo_data.awaiting_reset then
progress_caption = {'rocket-info.progress-launched'}
progress_color = Colors.green
elseif status then
progress_caption = {'rocket-info.progress-caption',100}
progress_caption = {'rocket-info.progress-caption', 100}
progress_color = Colors.cyan
else
silo_data.awaiting_reset = false
@@ -250,7 +250,7 @@ local function get_progress_data(force_name)
end
-- Insert the gui data
table.insert(progress_data,{
table.insert(progress_data, {
silo_name = silo_data.name,
position = rocket_silo.position,
allow_launch = not silo_data.awaiting_reset and status or false,
@@ -267,7 +267,7 @@ local function get_progress_data(force_name)
end
--- Update the build progress section
local function update_build_progress(parent,progress_data)
local function update_build_progress(parent, progress_data)
local show_message = true
for _, silo_data in ipairs(progress_data) do
parent.parent.no_silos.visible = false
@@ -285,7 +285,7 @@ local function update_build_progress(parent,progress_data)
elseif not progress_label then
-- Add the rocket to the list
show_message = false
rocket_entry(parent,silo_data)
rocket_entry(parent, silo_data)
else
show_message = false
@@ -323,7 +323,7 @@ local function get_stats_data(force_name)
-- Format the first launch data
if config.stats.show_first_rocket then
local value = stats.first_launch or 0
table.insert(stats_data,{
table.insert(stats_data, {
name = 'first-launch',
value = time_formats.caption_hours(value),
tooltip = time_formats.tooltip_hours(value)
@@ -333,7 +333,7 @@ local function get_stats_data(force_name)
-- Format the last launch data
if config.stats.show_last_rocket then
local value = stats.last_launch or 0
table.insert(stats_data,{
table.insert(stats_data, {
name = 'last-launch',
value = time_formats.caption_hours(value),
tooltip = time_formats.tooltip_hours(value)
@@ -343,7 +343,7 @@ local function get_stats_data(force_name)
-- Format fastest launch data
if config.stats.show_fastest_rocket then
local value = stats.fastest_launch or 0
table.insert(stats_data,{
table.insert(stats_data, {
name = 'fastest-launch',
value = time_formats.caption_hours(value),
tooltip = time_formats.tooltip_hours(value)
@@ -354,18 +354,18 @@ local function get_stats_data(force_name)
if config.stats.show_total_rockets then
local total_rockets = Rockets.get_game_rocket_count()
total_rockets = total_rockets == 0 and 1 or total_rockets
local percentage = math.round(force_rockets/total_rockets,3)*100
table.insert(stats_data,{
local percentage = math.round(force_rockets/total_rockets, 3)*100
table.insert(stats_data, {
name = 'total-rockets',
value = force_rockets,
tooltip = {'rocket-info.value-tooltip-total-rockets',percentage}
tooltip = {'rocket-info.value-tooltip-total-rockets', percentage}
})
end
-- Format game avg data
if config.stats.show_game_avg then
local avg = force_rockets > 0 and math.floor(game.tick/force_rockets) or 0
table.insert(stats_data,{
table.insert(stats_data, {
name = 'avg-launch',
value = time_formats.caption(avg),
tooltip = time_formats.tooltip(avg)
@@ -373,9 +373,9 @@ local function get_stats_data(force_name)
end
-- Format rolling avg data
for _,avg_over in pairs(config.stats.rolling_avg) do
local avg = Rockets.get_rolling_average(force_name,avg_over)
table.insert(stats_data,{
for _, avg_over in pairs(config.stats.rolling_avg) do
local avg = Rockets.get_rolling_average(force_name, avg_over)
table.insert(stats_data, {
name = 'avg-launch-n',
subname = avg_over,
value = time_formats.caption(avg),
@@ -392,17 +392,17 @@ local function get_milestone_data(force_name)
local force_rockets = Rockets.get_rocket_count(force_name)
local milestone_data = {}
for _,milestone in ipairs(config.milestones) do
for _, milestone in ipairs(config.milestones) do
if milestone <= force_rockets then
local time = Rockets.get_rocket_time(force_name,milestone)
table.insert(milestone_data,{
local time = Rockets.get_rocket_time(force_name, milestone)
table.insert(milestone_data, {
name = 'milestone-n',
subname = milestone,
value = time_formats.caption_hours(time),
tooltip = time_formats.tooltip_hours(time)
})
else
table.insert(milestone_data,{
table.insert(milestone_data, {
name = 'milestone-n',
subname = milestone,
value = {'rocket-info.data-caption-milestone-next'},
@@ -425,7 +425,7 @@ Gui.element{
tooltip = {'rocket-info.toggle-section-tooltip'}
}
:style(Gui.sprite_style(20))
:on_click(function(_,element,_)
:on_click(function(_, element, _)
local header_flow = element.parent
local flow_name = header_flow.caption
local flow = header_flow.parent.parent[flow_name]
@@ -443,7 +443,7 @@ end)
-- Draw a section header and main scroll
-- @element rocket_list_container
local section =
Gui.element(function(_,parent,section_name,table_size)
Gui.element(function(_, parent, section_name, table_size)
-- Draw the header for the section
local header = Gui.header(
parent,
@@ -458,7 +458,7 @@ Gui.element(function(_,parent,section_name,table_size)
toggle_section(header)
-- Table used to store the data
local scroll_table = Gui.scroll_table(parent,215,table_size,section_name)
local scroll_table = Gui.scroll_table(parent, 215, table_size, section_name)
scroll_table.parent.visible = false
-- Return the flow table
@@ -468,9 +468,9 @@ end)
--- Main gui container for the left flow
-- @element rocket_list_container
local rocket_list_container =
Gui.element(function(event_trigger,parent)
Gui.element(function(event_trigger, parent)
-- Draw the internal container
local container = Gui.container(parent,event_trigger,200)
local container = Gui.container(parent, event_trigger, 200)
-- Set the container style
local style = container.style
@@ -480,27 +480,27 @@ Gui.element(function(event_trigger,parent)
local force_name = player.force.name
-- Draw stats section
if config.stats.show_stats then
update_data_labels(section(container,'stats',2),get_stats_data(force_name))
update_data_labels(section(container, 'stats', 2), get_stats_data(force_name))
end
-- Draw milestones section
if config.milestones.show_milestones then
update_data_labels(section(container,'milestones',2),get_milestone_data(force_name))
update_data_labels(section(container, 'milestones', 2), get_milestone_data(force_name))
end
-- Draw build progress list
if config.progress.show_progress then
local col_count = 3
if check_player_permissions(player,'remote_launch') then col_count = col_count+1 end
if check_player_permissions(player,'toggle_active') then col_count = col_count+1 end
local progress = section(container,'progress',col_count)
if check_player_permissions(player, 'remote_launch') then col_count = col_count+1 end
if check_player_permissions(player, 'toggle_active') then col_count = col_count+1 end
local progress = section(container, 'progress', col_count)
-- Label used when there are no active silos
local no_silos = progress.parent.add{
type = 'label',
name = 'no_silos',
caption = {'rocket-info.progress-no-silos'}
}
no_silos.style.padding = {1,2}
no_silos.style.padding = {1, 2}
update_build_progress(progress, get_progress_data(force_name))
end
@@ -508,13 +508,13 @@ Gui.element(function(event_trigger,parent)
return container.parent
end)
:add_to_left_flow(function(player)
return player.force.rockets_launched > 0 and Roles.player_allowed(player,'gui/rocket-info')
return player.force.rockets_launched > 0 and Roles.player_allowed(player, 'gui/rocket-info')
end)
--- Button on the top flow used to toggle the container
-- @element toggle_left_element
Gui.left_toolbar_button('entity/rocket-silo', {'rocket-info.main-tooltip'}, rocket_list_container, function(player)
return Roles.player_allowed(player,'gui/rocket-info')
return Roles.player_allowed(player, 'gui/rocket-info')
end)
--- Update the gui for all players on a force
@@ -522,21 +522,21 @@ local function update_rocket_gui_all(force_name)
local stats = get_stats_data(force_name)
local milestones = get_milestone_data(force_name)
local progress = get_progress_data(force_name)
for _,player in pairs(game.forces[force_name].players) do
local frame = Gui.get_left_element(player,rocket_list_container)
for _, player in pairs(game.forces[force_name].players) do
local frame = Gui.get_left_element(player, rocket_list_container)
local container = frame.container
update_data_labels(container.stats.table,stats)
update_data_labels(container.milestones.table,milestones)
update_build_progress(container.progress.table,progress)
update_data_labels(container.stats.table, stats)
update_data_labels(container.milestones.table, milestones)
update_build_progress(container.progress.table, progress)
end
end
--- Event used to update the stats when a rocket is launched
Event.add(defines.events.on_rocket_launched,function(event)
Event.add(defines.events.on_rocket_launched, function(event)
local force = event.rocket_silo.force
update_rocket_gui_all(force.name)
if force.rockets_launched == 1 then
for _,player in pairs(force.players) do
for _, player in pairs(force.players) do
Gui.update_top_flow(player)
end
end
@@ -545,23 +545,23 @@ end)
--- Update only the progress gui for a force
local function update_rocket_gui_progress(force_name)
local progress = get_progress_data(force_name)
for _,player in pairs(game.forces[force_name].players) do
local frame = Gui.get_left_element(player,rocket_list_container)
for _, player in pairs(game.forces[force_name].players) do
local frame = Gui.get_left_element(player, rocket_list_container)
local container = frame.container
update_build_progress(container.progress.table,progress)
update_build_progress(container.progress.table, progress)
end
end
--- Event used to set a rocket silo to be awaiting reset
Event.add(defines.events.on_rocket_launch_ordered,function(event)
Event.add(defines.events.on_rocket_launch_ordered, function(event)
local silo = event.rocket_silo
local silo_data = Rockets.get_silo_data(silo)
silo_data.awaiting_reset = true
update_rocket_gui_progress(silo.force.name)
end)
Event.on_nth_tick(150,function()
for _,force in pairs(game.forces) do
Event.on_nth_tick(150, function()
for _, force in pairs(game.forces) do
if #Rockets.get_silos(force.name) > 0 then
update_rocket_gui_progress(force.name)
end
@@ -576,20 +576,20 @@ local function on_built(event)
end
end
Event.add(defines.events.on_built_entity,on_built)
Event.add(defines.events.on_robot_built_entity,on_built)
Event.add(defines.events.on_built_entity, on_built)
Event.add(defines.events.on_robot_built_entity, on_built)
--- Redraw the progress section on role change
local function role_update_event(event)
if not config.progress.show_progress then return end
local player = game.players[event.player_index]
local container = Gui.get_left_element(player,rocket_list_container).container
local container = Gui.get_left_element(player, rocket_list_container).container
local progress_scroll = container.progress
Gui.destroy_if_valid(progress_scroll.table)
local col_count = 3
if check_player_permissions(player,'remote_launch') then col_count = col_count+1 end
if check_player_permissions(player,'toggle_active') then col_count = col_count+1 end
if check_player_permissions(player, 'remote_launch') then col_count = col_count+1 end
if check_player_permissions(player, 'toggle_active') then col_count = col_count+1 end
local progress = progress_scroll.add{
type = 'table',
name = 'table',
@@ -599,7 +599,7 @@ local function role_update_event(event)
update_build_progress(progress, get_progress_data(player.force.name))
end
Event.add(Roles.events.on_role_assigned,role_update_event)
Event.add(Roles.events.on_role_unassigned,role_update_event)
Event.add(Roles.events.on_role_assigned, role_update_event)
Event.add(Roles.events.on_role_unassigned, role_update_event)
return rocket_list_container

View File

@@ -11,19 +11,19 @@ local config = require 'config.gui.science' --- @dep config.gui.science
local Production = require 'modules.control.production' --- @dep modules.control.production
local format_time = _C.format_time --- @dep expcore.common
local null_time_short = {'science-info.eta-time',format_time(0,{hours=true,minutes=true,seconds=true,time=true,null=true})}
local null_time_long = format_time(0,{hours=true,minutes=true,seconds=true,long=true,null=true})
local null_time_short = {'science-info.eta-time', format_time(0, {hours=true, minutes=true, seconds=true, time=true, null=true})}
local null_time_long = format_time(0, {hours=true, minutes=true, seconds=true, long=true, null=true})
--- Data label that contains the value and the surfix
-- @element production_label
local production_label =
Gui.element(function(_,parent,production_label_data)
Gui.element(function(_, parent, production_label_data)
local name = production_label_data.name
local tooltip = production_label_data.tooltip
local color = production_label_data.color
-- Add an alignment for the number
local alignment = Gui.alignment(parent,name)
local alignment = Gui.alignment(parent, name)
-- Add the main value label
local element =
@@ -42,7 +42,7 @@ Gui.element(function(_,parent,production_label_data)
parent.add{
name = 'surfix-'..name,
type = 'label',
caption = {'science-info.unit',production_label_data.surfix},
caption = {'science-info.unit', production_label_data.surfix},
tooltip = tooltip
}
@@ -56,9 +56,9 @@ Gui.element(function(_,parent,production_label_data)
end)
-- Get the data that is used with the production label
local function get_production_label_data(name,tooltip,value,secondary)
local function get_production_label_data(name, tooltip, value, secondary)
local data_colour = Production.get_color(config.color_clamp, value, secondary)
local surfix,caption = Production.format_number(value)
local surfix, caption = Production.format_number(value)
return {
name = name,
@@ -70,20 +70,20 @@ local function get_production_label_data(name,tooltip,value,secondary)
end
-- Updates a prodution label to match the current data
local function update_production_label(parent,production_label_data)
local function update_production_label(parent, production_label_data)
local name = production_label_data.name
local tooltip = production_label_data.tooltip
local color = production_label_data.color
-- Update the production label
local production_label_element = parent[name] and parent[name].label or production_label(parent,production_label_data)
local production_label_element = parent[name] and parent[name].label or production_label(parent, production_label_data)
production_label_element.caption = production_label_data.caption
production_label_element.tooltip = production_label_data.tooltip
production_label_element.style.font_color = color
-- Update the surfix label
local surfix_element = parent['surfix-'..name]
surfix_element.caption = {'science-info.unit',production_label_data.surfix}
surfix_element.caption = {'science-info.unit', production_label_data.surfix}
surfix_element.tooltip = tooltip
surfix_element.style.font_color = color
@@ -92,7 +92,7 @@ end
--- Adds 4 elements that show the data for a science pack
-- @element science_pack_base
local science_pack_base =
Gui.element(function(_,parent,science_pack_data)
Gui.element(function(_, parent, science_pack_data)
local science_pack = science_pack_data.science_pack
-- Draw the icon for the science pack
@@ -110,7 +110,7 @@ Gui.element(function(_,parent,science_pack_data)
local pack_icon_style = pack_icon.style
pack_icon_style.height = 55
if icon_style == 'quick_bar_slot_button' then
pack_icon_style.padding = {0,-2}
pack_icon_style.padding = {0, -2}
pack_icon_style.width = 36
end
@@ -121,7 +121,7 @@ Gui.element(function(_,parent,science_pack_data)
type = 'frame',
style = 'bordered_frame'
}
delta_flow.style.padding = {0,3}
delta_flow.style.padding = {0, 3}
-- Draw the delta flow table
local delta_table =
@@ -133,15 +133,15 @@ Gui.element(function(_,parent,science_pack_data)
delta_table.style.padding = 0
-- Draw the production labels
update_production_label(delta_table,science_pack_data.positive)
update_production_label(delta_table,science_pack_data.negative)
update_production_label(parent,science_pack_data.net)
update_production_label(delta_table, science_pack_data.positive)
update_production_label(delta_table, science_pack_data.negative)
update_production_label(parent, science_pack_data.net)
-- Return the pack icon
return pack_icon
end)
local function get_science_pack_data(player,science_pack)
local function get_science_pack_data(player, science_pack)
local force = player.force
-- Check that some packs have been made
@@ -186,28 +186,28 @@ local function get_science_pack_data(player,science_pack)
end
local function update_science_pack(pack_table,science_pack_data)
local function update_science_pack(pack_table, science_pack_data)
if not science_pack_data then return end
local science_pack = science_pack_data.science_pack
pack_table.parent.non_made.visible = false
-- Update the icon
local pack_icon = pack_table['icon-'..science_pack] or science_pack_base(pack_table,science_pack_data)
local pack_icon = pack_table['icon-'..science_pack] or science_pack_base(pack_table, science_pack_data)
local icon_style = science_pack_data.icon_style
pack_icon.style = icon_style
local pack_icon_style = pack_icon.style
pack_icon_style.height = 55
if icon_style == 'quick_bar_slot_button' then
pack_icon_style.padding = {0,-2}
pack_icon_style.padding = {0, -2}
pack_icon_style.width = 36
end
-- Update the production labels
local delta_table = pack_table['delta-'..science_pack].table
update_production_label(delta_table,science_pack_data.positive)
update_production_label(delta_table,science_pack_data.negative)
update_production_label(pack_table,science_pack_data.net)
update_production_label(delta_table, science_pack_data.positive)
update_production_label(delta_table, science_pack_data.negative)
update_production_label(pack_table, science_pack_data.net)
end
@@ -226,7 +226,7 @@ local function get_eta_label_data(player)
local remaining = research.research_unit_count*(1-progress)
-- Check for the limiting science pack
for _,ingredient in pairs(research.research_unit_ingredients) do
for _, ingredient in pairs(research.research_unit_ingredients) do
local pack_name = ingredient.name
local required = ingredient.amount * remaining
local time = Production.get_consumsion_eta(force, pack_name, defines.flow_precision_index.one_minute, required)
@@ -238,14 +238,14 @@ local function get_eta_label_data(player)
-- Return the caption and tooltip
return limit and limit > 0 and {
research = true,
caption = format_time(limit,{hours=true,minutes=true,seconds=true,time=true}),
tooltip = format_time(limit,{hours=true,minutes=true,seconds=true,long=true})
caption = format_time(limit, {hours=true, minutes=true, seconds=true, time=true}),
tooltip = format_time(limit, {hours=true, minutes=true, seconds=true, long=true})
} or { research = false }
end
-- Updates the eta label
local function update_eta_label(element,eta_label_data)
local function update_eta_label(element, eta_label_data)
-- If no research selected show null
if not eta_label_data.research then
element.caption = null_time_short
@@ -254,24 +254,24 @@ local function update_eta_label(element,eta_label_data)
end
-- Update the element
element.caption = {'science-info.eta-time',eta_label_data.caption}
element.caption = {'science-info.eta-time', eta_label_data.caption}
element.tooltip = eta_label_data.tooltip
end
--- Main task list container for the left flow
-- @element task_list_container
local science_info_container =
Gui.element(function(event_trigger,parent)
Gui.element(function(event_trigger, parent)
local player = Gui.get_player_from_element(parent)
-- Draw the internal container
local container = Gui.container(parent,event_trigger,200)
local container = Gui.container(parent, event_trigger, 200)
-- Draw the header
Gui.header(container, {'science-info.main-caption'}, {'science-info.main-tooltip'})
-- Draw the scroll table for the tasks
local scroll_table = Gui.scroll_table(container,178,4)
local scroll_table = Gui.scroll_table(container, 178, 4)
-- Draw the no packs label
local no_packs_label =
@@ -283,7 +283,7 @@ Gui.element(function(event_trigger,parent)
-- Change the style of the no packs label
local no_packs_style = no_packs_label.style
no_packs_style.padding = {2,4}
no_packs_style.padding = {2, 4}
no_packs_style.single_line = false
no_packs_style.width = 200
@@ -303,13 +303,13 @@ Gui.element(function(event_trigger,parent)
}
-- Update the eta
update_eta_label(eta_label,get_eta_label_data(player))
update_eta_label(eta_label, get_eta_label_data(player))
end
-- Add packs which have been made
for _,science_pack in ipairs(config) do
update_science_pack(scroll_table,get_science_pack_data(player,science_pack))
for _, science_pack in ipairs(config) do
update_science_pack(scroll_table, get_science_pack_data(player, science_pack))
end
-- Return the exteral container
@@ -320,16 +320,16 @@ end)
--- Button on the top flow used to toggle the task list container
-- @element toggle_left_element
Gui.left_toolbar_button('entity/lab', {'science-info.main-tooltip'}, science_info_container, function(player)
return Roles.player_allowed(player,'gui/science-info')
return Roles.player_allowed(player, 'gui/science-info')
end)
--- Updates the gui every 1 second
Event.on_nth_tick(60,function()
Event.on_nth_tick(60, function()
local force_pack_data = {}
local force_eta_data = {}
for _,player in pairs(game.connected_players) do
for _, player in pairs(game.connected_players) do
local force_name = player.force.name
local frame = Gui.get_left_element(player,science_info_container)
local frame = Gui.get_left_element(player, science_info_container)
local container = frame.container
-- Update the science packs
@@ -339,16 +339,16 @@ Event.on_nth_tick(60,function()
-- No data in chache so it needs to be generated
pack_data = {}
force_pack_data[force_name] = pack_data
for _,science_pack in ipairs(config) do
local next_data = get_science_pack_data(player,science_pack)
for _, science_pack in ipairs(config) do
local next_data = get_science_pack_data(player, science_pack)
pack_data[science_pack] = next_data
update_science_pack(scroll_table,next_data)
update_science_pack(scroll_table, next_data)
end
else
-- Data found in chache is no need to generate it
for _,next_data in ipairs(pack_data) do
update_science_pack(scroll_table,next_data)
for _, next_data in ipairs(pack_data) do
update_science_pack(scroll_table, next_data)
end
end
@@ -361,11 +361,11 @@ Event.on_nth_tick(60,function()
-- No data in chache so it needs to be generated
eta_data = get_eta_label_data(player)
force_eta_data[force_name] = eta_data
update_eta_label(eta_label,eta_data)
update_eta_label(eta_label, eta_data)
else
-- Data found in chache is no need to generate it
update_eta_label(eta_label,eta_data)
update_eta_label(eta_label, eta_data)
end

View File

@@ -21,8 +21,8 @@ Gui.element{
--- Toggles if the server ups is visbile
-- @command server-ups
Commands.new_command('server-ups','Toggle the server ups display')
:add_alias('sups','ups')
Commands.new_command('server-ups', 'Toggle the server ups display')
:add_alias('sups', 'ups')
:register(function(player)
local label = player.gui.screen[server_ups.name]
if not global.ext or not global.ext.server_ups then
@@ -42,7 +42,7 @@ local function set_location(event)
end
-- Draw the label when the player joins
Event.add(defines.events.on_player_created,function(event)
Event.add(defines.events.on_player_created, function(event)
local player = game.players[event.player_index]
local label = server_ups(player.gui.screen)
label.visible = false
@@ -50,15 +50,15 @@ Event.add(defines.events.on_player_created,function(event)
end)
-- Update the caption for all online players
Event.on_nth_tick(60,function()
Event.on_nth_tick(60, function()
if global.ext and global.ext.server_ups then
local caption = 'SUPS = '..global.ext.server_ups
for _,player in pairs(game.connected_players) do
for _, player in pairs(game.connected_players) do
player.gui.screen[server_ups.name].caption = caption
end
end
end)
-- Update when res or ui scale changes
Event.add(defines.events.on_player_display_resolution_changed,set_location)
Event.add(defines.events.on_player_display_scale_changed,set_location)
Event.add(defines.events.on_player_display_resolution_changed, set_location)
Event.add(defines.events.on_player_display_scale_changed, set_location)

View File

@@ -18,7 +18,7 @@ local Styles = {
}
--- If a player is allowed to use the edit buttons
local function check_player_permissions(player,task)
local function check_player_permissions(player, task)
if task then
-- When a task is given check if the player can edit it
local allow_edit_task = config.allow_edit_task
@@ -34,7 +34,7 @@ local function check_player_permissions(player,task)
elseif allow_edit_task == 'admin' then
return player.admin
elseif allow_edit_task == 'expcore.roles' then
return Roles.player_allowed(player,config.expcore_roles_allow_edit_task)
return Roles.player_allowed(player, config.expcore_roles_allow_edit_task)
end
-- Return false as all other condidtions have not been met
@@ -49,7 +49,7 @@ local function check_player_permissions(player,task)
elseif allow_add_task == 'admin' then
return player.admin
elseif allow_add_task == 'expcore.roles' then
return Roles.player_allowed(player,config.expcore_roles_allow_add_task)
return Roles.player_allowed(player, config.expcore_roles_allow_add_task)
end
-- Return false as all other condidtions have not been met
@@ -67,8 +67,8 @@ Gui.element{
style = 'tool_button'
}
:style(Styles.sprite20)
:on_click(function(player,_,_)
Tasks.add_task(player.force.name,nil,player.name)
:on_click(function(player, _,_)
Tasks.add_task(player.force.name, nil, player.name)
end)
--- Button displayed next to tasks which the user is can edit, used to start editing a task
@@ -81,9 +81,9 @@ Gui.element{
style = 'tool_button'
}
:style(Styles.sprite20)
:on_click(function(player,element,_)
:on_click(function(player, element, _)
local task_id = element.parent.name:sub(6)
Tasks.set_editing(task_id,player.name,true)
Tasks.set_editing(task_id, player.name, true)
end)
--- Button displayed next to tasks which the user is can edit, used to delete a task from the list
@@ -96,7 +96,7 @@ Gui.element{
style = 'tool_button'
}
:style(Styles.sprite20)
:on_click(function(_,element,_)
:on_click(function(_, element, _)
local task_id = element.parent.name:sub(6)
Tasks.remove_task(task_id)
end)
@@ -104,7 +104,7 @@ end)
--- Set of three elements which make up each row of the task table
-- @element add_task_base
local add_task_base =
Gui.element(function(_,parent,task_id)
Gui.element(function(_, parent, task_id)
-- Add the task number label
local task_number = parent.add{
name = 'count-'..task_id,
@@ -118,7 +118,7 @@ Gui.element(function(_,parent,task_id)
task_flow.style.padding = 0
-- Add the two edit buttons outside the task flow
local edit_flow = Gui.alignment(parent,'edit-'..task_id)
local edit_flow = Gui.alignment(parent, 'edit-'..task_id)
edit_task(edit_flow)
discard_task(edit_flow)
@@ -127,7 +127,7 @@ Gui.element(function(_,parent,task_id)
end)
-- Removes the three elements that are added as part of the task base
local function remove_task_base(parent,task_id)
local function remove_task_base(parent, task_id)
Gui.destroy_if_valid(parent['count-'..task_id])
Gui.destroy_if_valid(parent['edit-'..task_id])
Gui.destroy_if_valid(parent[task_id])
@@ -144,11 +144,11 @@ Gui.element{
style = 'shortcut_bar_button_green'
}
:style(Styles.sprite22)
:on_click(function(player,element,_)
:on_click(function(player, element, _)
local task_id = element.parent.name
local new_message = element.parent[task_editing.name].text
Tasks.set_editing(task_id,player.name)
Tasks.update_task(task_id,new_message,player.name)
Tasks.set_editing(task_id, player.name)
Tasks.update_task(task_id, new_message, player.name)
end)
--- Button displayed next to tasks which the user is currently editing, used to discard changes
@@ -161,15 +161,15 @@ Gui.element{
style = 'shortcut_bar_button_red'
}
:style(Styles.sprite22)
:on_click(function(player,element,_)
:on_click(function(player, element, _)
local task_id = element.parent.name
Tasks.set_editing(task_id,player.name)
Tasks.set_editing(task_id, player.name)
end)
--- Editing state for a task, contrins a text field and the two edit buttons
-- @element task_editing
task_editing =
Gui.element(function(event_trigger,parent,task)
Gui.element(function(event_trigger, parent, task)
local message = task.message
-- Draw the element
@@ -192,17 +192,17 @@ end)
maximal_width = 110,
height = 20
}
:on_confirmed(function(player,element,_)
:on_confirmed(function(player, element, _)
local task_id = element.parent.name
local new_message = element.text
Tasks.set_editing(task_id,player.name)
Tasks.update_task(task_id,new_message,player.name)
Tasks.set_editing(task_id, player.name)
Tasks.update_task(task_id, new_message, player.name)
end)
--- Default state for a task, contains only a label with the task message
-- @element task_label
local task_label =
Gui.element(function(_,parent,task)
Gui.element(function(_, parent, task)
local message = task.message
local last_edit_name = task.last_edit_name
local last_edit_time = task.last_edit_time
@@ -220,7 +220,7 @@ end)
}
--- Updates a task for a player
local function update_task(player,task_table,task_id)
local function update_task(player, task_table, task_id)
local task = Tasks.get_task(task_id)
local task_ids = Tasks.get_force_task_ids(player.force.name)
local task_number = table.get_index(task_ids, task_id)
@@ -228,18 +228,18 @@ local function update_task(player,task_table,task_id)
-- Task no longer exists so should be removed from the list
if not task then
task_table.parent.no_tasks.visible = #task_ids == 0
remove_task_base(task_table,task_id)
remove_task_base(task_table, task_id)
return
end
-- Get the task flow for this task
local task_flow = task_table[task_id] or add_task_base(task_table,task_id)
local task_flow = task_table[task_id] or add_task_base(task_table, task_id)
task_table.parent.no_tasks.visible = false
task_table['count-'..task_id].caption = task_number..')'
-- Update the edit flow
local edit_flow = task_table['edit-'..task_id]
local player_allowed_edit = check_player_permissions(player,task)
local player_allowed_edit = check_player_permissions(player, task)
local players_editing = table.get_keys(task.curently_editing)
local edit_task_element = edit_flow[edit_task.name]
local discard_task_element = edit_flow[discard_task.name]
@@ -248,14 +248,14 @@ local function update_task(player,task_table,task_id)
discard_task_element.visible = player_allowed_edit
if #players_editing > 0 then
edit_task_element.hovered_sprite = 'utility/warning_icon'
edit_task_element.tooltip = {'task-list.edit-tooltip',table.concat(players_editing,', ')}
edit_task_element.tooltip = {'task-list.edit-tooltip', table.concat(players_editing, ', ')}
else
edit_task_element.hovered_sprite = edit_task_element.sprite
edit_task_element.tooltip = {'task-list.edit-tooltip-none'}
end
-- Check if the player is was editing and/or currently editing
local task_entry = task_flow[task_editing.name] or task_label(task_flow,task)
local task_entry = task_flow[task_editing.name] or task_label(task_flow, task)
local player_was_editing = task_entry.type == 'textfield'
local player_is_editing = task.curently_editing[player.name]
@@ -272,24 +272,24 @@ local function update_task(player,task_table,task_id)
-- Player was editing but is no longer, remove text field and add label
edit_task_element.enabled = true
task_flow.clear()
task_label(task_flow,task)
task_label(task_flow, task)
elseif not player_was_editing and player_is_editing then
-- Player was not editing but now is, remove label and add text field
edit_task_element.enabled = false
task_flow.clear()
task_editing(task_flow,task).focus()
task_table.parent.scroll_to_element(task_flow,'top-third')
task_editing(task_flow, task).focus()
task_table.parent.scroll_to_element(task_flow, 'top-third')
end
end
-- Update all the tasks for a player
local function update_all_tasks(player,scroll_table)
local function update_all_tasks(player, scroll_table)
local task_ids = Tasks.get_force_task_ids(player.force.name)
if #task_ids > 0 then
for _,task_id in ipairs(task_ids) do
update_task(player,scroll_table,task_id)
for _, task_id in ipairs(task_ids) do
update_task(player, scroll_table, task_id)
end
end
end
@@ -297,9 +297,9 @@ end
--- Main task list container for the left flow
-- @element task_list_container
local task_list_container =
Gui.element(function(event_trigger,parent)
Gui.element(function(event_trigger, parent)
-- Draw the internal container
local container = Gui.container(parent,event_trigger,200)
local container = Gui.container(parent, event_trigger, 200)
-- Draw the header
local header = Gui.header(
@@ -315,7 +315,7 @@ Gui.element(function(event_trigger,parent)
add_new_task_element.visible = check_player_permissions(player)
-- Draw the scroll table for the tasks
local scroll_table = Gui.scroll_table(container,190,3)
local scroll_table = Gui.scroll_table(container, 190, 3)
scroll_table.draw_horizontal_lines = true
scroll_table.vertical_centering = false
@@ -334,7 +334,7 @@ Gui.element(function(event_trigger,parent)
-- Change the style of the no tasks label
local no_tasks_style = no_tasks_label.style
no_tasks_style.padding = {2,4}
no_tasks_style.padding = {2, 4}
no_tasks_style.single_line = false
no_tasks_style.width = 200
@@ -342,8 +342,8 @@ Gui.element(function(event_trigger,parent)
local task_ids = Tasks.get_force_task_ids(player.force.name)
if #task_ids > 0 then
no_tasks_label.visible = false
for _,task_id in ipairs(task_ids) do
update_task(player,scroll_table,task_id)
for _, task_id in ipairs(task_ids) do
update_task(player, scroll_table, task_id)
end
end
@@ -358,11 +358,11 @@ end)
--- Button on the top flow used to toggle the task list container
-- @element toggle_left_element
Gui.left_toolbar_button('utility/not_enough_repair_packs_icon', {'task-list.main-tooltip'}, task_list_container, function(player)
return Roles.player_allowed(player,'gui/task-list')
return Roles.player_allowed(player, 'gui/task-list')
end)
--- When a new task is added it will udpate the task list for everyone on that force
Tasks.on_update(function(task,task_id,removed_task)
Tasks.on_update(function(task, task_id, removed_task)
-- Get the force to update, task is nil when removed
local force
if task then
@@ -373,12 +373,12 @@ Tasks.on_update(function(task,task_id,removed_task)
-- Update the task for all the players on the force
local task_ids = Tasks.get_force_task_ids(force.name)
for _,player in pairs(force.connected_players) do
local frame = Gui.get_left_element(player,task_list_container)
for _, player in pairs(force.connected_players) do
local frame = Gui.get_left_element(player, task_list_container)
local scroll_table = frame.container.scroll.table
-- Update the task that was changed
update_task(player,scroll_table,task_id)
update_task(player, scroll_table, task_id)
-- Update the numbering of the other tasks if the task was removed
if not task then
@@ -391,26 +391,26 @@ Tasks.on_update(function(task,task_id,removed_task)
end)
--- Update the tasks when the player joins
Event.add(defines.events.on_player_joined_game,function(event)
Event.add(defines.events.on_player_joined_game, function(event)
local player = game.players[event.player_index]
local frame = Gui.get_left_element(player,task_list_container)
local frame = Gui.get_left_element(player, task_list_container)
local scroll_table = frame.container.scroll.table
update_all_tasks(player,scroll_table)
update_all_tasks(player, scroll_table)
end)
--- Makes sure the right buttons are present when roles change
local function role_update_event(event)
local player = game.players[event.player_index]
local container = Gui.get_left_element(player,task_list_container).container
local container = Gui.get_left_element(player, task_list_container).container
-- Update the tasks, incase the user can now edit them
local scroll_table = container.scroll.table
update_all_tasks(player,scroll_table)
update_all_tasks(player, scroll_table)
-- Update the new task button incase the user can now add them
local add_new_task_element = container.header.alignment[add_new_task.name]
add_new_task_element.visible = check_player_permissions(player)
end
Event.add(Roles.events.on_role_assigned,role_update_event)
Event.add(Roles.events.on_role_unassigned,role_update_event)
Event.add(Roles.events.on_role_assigned, role_update_event)
Event.add(Roles.events.on_role_unassigned, role_update_event)

View File

@@ -27,7 +27,7 @@ end)
-- Table that stores a boolean value of weather to keep the warp gui open
local keep_gui_open = {}
Global.register(keep_gui_open,function(tbl)
Global.register(keep_gui_open, function(tbl)
keep_gui_open = tbl
end)
@@ -40,7 +40,7 @@ local Styles = {
--- Returns if a player is allowed to edit the given warp
--- If a player is allowed to use the edit buttons
local function check_player_permissions(player,action,warp)
local function check_player_permissions(player, action, warp)
-- Check if the action is allow edit and then check bypass settings
if action == 'allow_edit_warp' then
-- Check if the warp is the spawn then it cant be edited
@@ -62,7 +62,7 @@ local function check_player_permissions(player,action,warp)
elseif action_config == 'admin' then
return player.admin
elseif action_config == 'expcore.roles' then
return Roles.player_allowed(player,config['expcore_roles_'..action])
return Roles.player_allowed(player, config['expcore_roles_'..action])
end
-- Return false as all other condidtions have not been met
@@ -79,12 +79,12 @@ Gui.element{
style = 'tool_button'
}
:style(Styles.sprite20)
:on_click(function(player,_)
:on_click(function(player, _)
-- Add the new warp
local force_name = player.force.name
local surface = player.surface
local position = player.position
local warp_id = Warps.add_warp(force_name,surface,position,player.name)
local warp_id = Warps.add_warp(force_name, surface, position, player.name)
Warps.make_warp_tag(warp_id)
Warps.make_warp_area(warp_id)
end)
@@ -99,7 +99,7 @@ Gui.element{
style = 'tool_button'
}
:style(Styles.sprite20)
:on_click(function(_,element)
:on_click(function(_, element)
local warp_id = element.parent.name:sub(6)
Warps.remove_warp(warp_id)
end)
@@ -114,15 +114,15 @@ Gui.element{
style = 'tool_button'
}
:style(Styles.sprite20)
:on_click(function(player,element)
:on_click(function(player, element)
local warp_id = element.parent.name:sub(6)
Warps.set_editing(warp_id,player.name,true)
Warps.set_editing(warp_id, player.name, true)
end)
--- Set of three elements which make up each row of the warp table
-- @element add_warp_base
local add_warp_base =
Gui.element(function(_,parent,warp_id)
Gui.element(function(_, parent, warp_id)
-- Add the icon flow
local icon_flow =
parent.add{
@@ -137,7 +137,7 @@ Gui.element(function(_,parent,warp_id)
warp_flow.style.padding = 0
-- Add the two edit buttons outside the warp flow
local edit_flow = Gui.alignment(parent,'edit-'..warp_id)
local edit_flow = Gui.alignment(parent, 'edit-'..warp_id)
edit_warp(edit_flow)
discard_warp(edit_flow)
@@ -146,7 +146,7 @@ Gui.element(function(_,parent,warp_id)
end)
-- Removes the three elements that are added as part of the warp base
local function remove_warp_base(parent,warp_id)
local function remove_warp_base(parent, warp_id)
Gui.destroy_if_valid(parent['icon-'..warp_id])
Gui.destroy_if_valid(parent['edit-'..warp_id])
Gui.destroy_if_valid(parent[warp_id])
@@ -164,12 +164,12 @@ Gui.element{
style = 'shortcut_bar_button_green'
}
:style(Styles.sprite22)
:on_click(function(player,element)
:on_click(function(player, element)
local warp_id = element.parent.name
local warp_name = element.parent[warp_editing.name].text
local warp_icon = element.parent.parent['icon-'..warp_id][warp_icon_button.name].elem_value
Warps.set_editing(warp_id,player.name)
Warps.update_warp(warp_id,warp_name,warp_icon,player.name)
Warps.set_editing(warp_id, player.name)
Warps.update_warp(warp_id, warp_name, warp_icon, player.name)
end)
--- Cancels the editing changes of the selected warp name or icon
@@ -182,15 +182,15 @@ Gui.element{
style = 'shortcut_bar_button_red'
}
:style(Styles.sprite22)
:on_click(function(player,element)
:on_click(function(player, element)
local warp_id = element.parent.name
Warps.set_editing(warp_id,player.name)
Warps.set_editing(warp_id, player.name)
end)
--- Editing state for a warp, contrins a text field and the two edit buttons
-- @element warp_editing
warp_editing =
Gui.element(function(event_trigger,parent,warp)
Gui.element(function(event_trigger, parent, warp)
local name = warp.name
-- Draw the element
@@ -213,18 +213,18 @@ end)
maximal_width = 110,
height = 20
}
:on_confirmed(function(player,element,_)
:on_confirmed(function(player, element, _)
local warp_id = element.parent.name
local warp_name = element.text
local warp_icon = element.parent.parent['icon-'..warp_id][warp_icon_button.name].elem_value
Warps.set_editing(warp_id,player.name)
Warps.update_warp(warp_id,warp_name,warp_icon,player.name)
Warps.set_editing(warp_id, player.name)
Warps.update_warp(warp_id, warp_name, warp_icon, player.name)
end)
--- Default state for a warp, contains only a label with the warp name
-- @element warp_label
local warp_label =
Gui.element(function(event_trigger,parent,warp)
Gui.element(function(event_trigger, parent, warp)
local last_edit_name = warp.last_edit_name
local last_edit_time = warp.last_edit_time
-- Draw the element
@@ -232,52 +232,52 @@ Gui.element(function(event_trigger,parent,warp)
name = event_trigger,
type = 'label',
caption = warp.name,
tooltip = {'warp-list.last-edit',last_edit_name,format_time(last_edit_time)}
tooltip = {'warp-list.last-edit', last_edit_name, format_time(last_edit_time)}
}
end)
:style{
single_line = false,
maximal_width = 150
}
:on_click(function(player,element,_)
:on_click(function(player, element, _)
local warp_id = element.parent.name
local warp = Warps.get_warp(warp_id)
local position = warp.position
player.zoom_to_world(position,1.5)
player.zoom_to_world(position, 1.5)
end)
--- Default state for the warp icon, when pressed teleports the player
-- @element warp_icon_button
warp_icon_button =
Gui.element(function(event_trigger,parent,warp)
Gui.element(function(event_trigger, parent, warp)
local warp_position = warp.position
-- Draw the element
return parent.add{
name = event_trigger,
type = 'sprite-button',
sprite = 'item/'..warp.icon,
tooltip = {'warp-list.goto-tooltip',warp_position.x,warp_position.y},
tooltip = {'warp-list.goto-tooltip', warp_position.x, warp_position.y},
style = 'quick_bar_slot_button'
}
end)
:style(Styles.sprite32)
:on_click(function(player,element,_)
:on_click(function(player, element, _)
if element.type == 'choose-elem-button' then return end
local warp_id = element.parent.caption
Warps.teleport_player(warp_id,player)
Warps.teleport_player(warp_id, player)
-- Reset the warp cooldown if the player does not have unlimited warps
if not check_player_permissions(player,'bypass_warp_cooldown') then
Store.set(player_warp_cooldown_store,player,config.cooldown_duraction)
Store.trigger(player_in_range_store,player)
if not check_player_permissions(player, 'bypass_warp_cooldown') then
Store.set(player_warp_cooldown_store, player, config.cooldown_duraction)
Store.trigger(player_in_range_store, player)
end
end)
--- Editing state for the warp icon, chose elem used to chosse icon
-- @element warp_icon_editing
local warp_icon_editing =
Gui.element(function(_,parent,warp)
Gui.element(function(_, parent, warp)
return parent.add{
name = warp_icon_button.name,
type = 'choose-elem-button',
@@ -293,7 +293,7 @@ end)
local warp_timer =
Gui.element{
type = 'progressbar',
tooltip = {'warp-list.timer-tooltip',config.cooldown_duraction},
tooltip = {'warp-list.timer-tooltip', config.cooldown_duraction},
minimum_value = 0,
maximum_value = config.cooldown_duraction*config.update_smoothing
}
@@ -303,22 +303,22 @@ Gui.element{
}
--- Updates a warp for a player
local function update_warp(player,warp_table,warp_id)
local function update_warp(player, warp_table, warp_id)
local warp = Warps.get_warp(warp_id)
-- Warp no longer exists so should be removed from the list
if not warp then
remove_warp_base(warp_table,warp_id)
remove_warp_base(warp_table, warp_id)
return
end
-- Get the warp flow for this warp
local warp_flow = warp_table[warp_id] or add_warp_base(warp_table,warp_id)
local warp_flow = warp_table[warp_id] or add_warp_base(warp_table, warp_id)
local icon_flow = warp_table['icon-'..warp_id]
-- Update the edit flow
local edit_flow = warp_table['edit-'..warp_id]
local player_allowed_edit = check_player_permissions(player,'allow_edit_warp',warp)
local player_allowed_edit = check_player_permissions(player, 'allow_edit_warp', warp)
local players_editing = table.get_keys(warp.currently_editing)
local edit_warp_element = edit_flow[edit_warp.name]
local discard_warp_element = edit_flow[discard_warp.name]
@@ -327,15 +327,15 @@ local function update_warp(player,warp_table,warp_id)
discard_warp_element.visible = player_allowed_edit
if #players_editing > 0 then
edit_warp_element.hovered_sprite = 'utility/warning_icon'
edit_warp_element.tooltip = {'warp-list.edit-tooltip',table.concat(players_editing,', ')}
edit_warp_element.tooltip = {'warp-list.edit-tooltip', table.concat(players_editing, ', ')}
else
edit_warp_element.hovered_sprite = edit_warp_element.sprite
edit_warp_element.tooltip = {'warp-list.edit-tooltip-none'}
end
-- Check if the player is was editing and/or currently editing
local warp_label_element = warp_flow[warp_label.name] or warp_label(warp_flow,warp)
local icon_entry = icon_flow[warp_icon_button.name] or warp_icon_button(icon_flow,warp)
local warp_label_element = warp_flow[warp_label.name] or warp_label(warp_flow, warp)
local icon_entry = icon_flow[warp_icon_button.name] or warp_icon_button(icon_flow, warp)
local player_was_editing = icon_entry.type == 'choose-elem-button'
local player_is_editing = warp.currently_editing[player.name]
@@ -347,20 +347,20 @@ local function update_warp(player,warp_table,warp_id)
local last_edit_name = warp.last_edit_name
local last_edit_time = warp.last_edit_time
warp_label_element.caption = warp_name
warp_label_element.tooltip = {'warp-list.last-edit',last_edit_name,format_time(last_edit_time)}
warp_label_element.tooltip = {'warp-list.last-edit', last_edit_name, format_time(last_edit_time)}
icon_entry.sprite = 'item/'..warp_icon
elseif player_was_editing and not player_is_editing then
-- Player was editing but is no longer, remove text field and add label
edit_warp_element.enabled = true
warp_flow.clear()
warp_label(warp_flow,warp)
warp_label(warp_flow, warp)
icon_flow.clear()
local warp_icon_element = warp_icon_button(icon_flow,warp)
local timer = Store.get(player_warp_cooldown_store,player)
local in_range = Store.get(player_in_range_store,player)
local apply_proximity = not check_player_permissions(player,'bypass_warp_proximity')
local warp_icon_element = warp_icon_button(icon_flow, warp)
local timer = Store.get(player_warp_cooldown_store, player)
local in_range = Store.get(player_in_range_store, player)
local apply_proximity = not check_player_permissions(player, 'bypass_warp_proximity')
if (timer and timer > 0) or (apply_proximity and not in_range) then
warp_icon_element.enabled = false
warp_icon_element.tooltip = {'warp-list.goto-disabled'}
@@ -370,20 +370,20 @@ local function update_warp(player,warp_table,warp_id)
-- Player was not editing but now is, remove label and add text field
edit_warp_element.enabled = false
warp_flow.clear()
warp_editing(warp_flow,warp).focus()
warp_table.parent.scroll_to_element(warp_flow,'top-third')
warp_editing(warp_flow, warp).focus()
warp_table.parent.scroll_to_element(warp_flow, 'top-third')
icon_flow.clear()
warp_icon_editing(icon_flow,warp)
warp_icon_editing(icon_flow, warp)
end
end
-- Update all the warps for a player
local function update_all_warps(player,warp_table)
local function update_all_warps(player, warp_table)
local warp_ids = Warps.get_force_warp_ids(player.force.name)
if #warp_ids > 0 then
for _,warp_id in ipairs(warp_ids) do
update_warp(player,warp_table,warp_id)
for _, warp_id in ipairs(warp_ids) do
update_warp(player, warp_table, warp_id)
end
end
end
@@ -391,9 +391,9 @@ end
--- Main warp list container for the left flow
-- @element warp_list_container
local warp_list_container =
Gui.element(function(event_trigger,parent)
Gui.element(function(event_trigger, parent)
-- Draw the internal container
local container = Gui.container(parent,event_trigger,200)
local container = Gui.container(parent, event_trigger, 200)
-- Draw the header
local header = Gui.header(
@@ -406,10 +406,10 @@ Gui.element(function(event_trigger,parent)
-- Draw the new warp button
local player = Gui.get_player_from_element(parent)
local add_new_warp_element = add_new_warp(header)
add_new_warp_element.visible = check_player_permissions(player,'allow_add_warp')
add_new_warp_element.visible = check_player_permissions(player, 'allow_add_warp')
-- Draw the scroll table for the warps
local scroll_table = Gui.scroll_table(container,250,3)
local scroll_table = Gui.scroll_table(container, 250, 3)
-- Change the style of the scroll table
local scroll_table_style = scroll_table.style
@@ -421,14 +421,14 @@ Gui.element(function(event_trigger,parent)
-- Change the progress of the warp timer
local progress = 1
local timer = Store.get(player_warp_cooldown_store,player)
local timer = Store.get(player_warp_cooldown_store, player)
if timer and timer > 0 then
progress = 1 - (timer/config.cooldown_duraction)
end
warp_timer_element.value = progress
-- Add any existing warps
update_all_warps(player,scroll_table)
update_all_warps(player, scroll_table)
-- Return the exteral container
return container.parent
@@ -437,16 +437,16 @@ end)
--- Button on the top flow used to toggle the warp list container
-- @element warp_list_toggle
Gui.left_toolbar_button('item/'..config.default_icon,{'warp-list.main-tooltip',config.standard_proximity_radius},warp_list_container, function(player)
return Roles.player_allowed(player,'gui/warp-list')
Gui.left_toolbar_button('item/'..config.default_icon, {'warp-list.main-tooltip', config.standard_proximity_radius}, warp_list_container, function(player)
return Roles.player_allowed(player, 'gui/warp-list')
end)
:on_custom_event(Gui.events.on_visibility_changed_by_click, function(player,_,event)
:on_custom_event(Gui.events.on_visibility_changed_by_click, function(player, _,event)
-- Set gui keep open state for player that clicked the button: true if visible, false if invisible
keep_gui_open[player.name] = event.state
end)
--- When the name of a warp is updated this is triggered
Warps.on_update(function(warp,_,removed_warp)
Warps.on_update(function(warp, _,removed_warp)
-- Get the force to update, warp is nil when removed
local force
if warp then
@@ -457,69 +457,69 @@ Warps.on_update(function(warp,_,removed_warp)
-- Update the gui for selected players
local warp_ids = Warps.get_force_warp_ids(force.name)
for _,player in pairs(force.connected_players) do
local frame = Gui.get_left_element(player,warp_list_container)
for _, player in pairs(force.connected_players) do
local frame = Gui.get_left_element(player, warp_list_container)
local scroll_table = frame.container.scroll.table
-- Update the gui
scroll_table.clear()
for _,next_warp_id in ipairs(warp_ids) do
update_warp(player,scroll_table,next_warp_id)
for _, next_warp_id in ipairs(warp_ids) do
update_warp(player, scroll_table, next_warp_id)
end
end
end)
--- Update the warps when the player joins
Event.add(defines.events.on_player_joined_game,function(event)
Event.add(defines.events.on_player_joined_game, function(event)
local player = game.players[event.player_index]
local frame = Gui.get_left_element(player,warp_list_container)
local frame = Gui.get_left_element(player, warp_list_container)
local scroll_table = frame.container.scroll.table
update_all_warps(player,scroll_table)
update_all_warps(player, scroll_table)
end)
--- Makes sure the right buttons are present when roles change
local function role_update_event(event)
local player = game.players[event.player_index]
local container = Gui.get_left_element(player,warp_list_container).container
local container = Gui.get_left_element(player, warp_list_container).container
-- Update the warps, incase the user can now edit them
local scroll_table = container.scroll.table
update_all_warps(player,scroll_table)
update_all_warps(player, scroll_table)
-- Update the new warp button incase the user can now add them
local add_new_warp_element = container.header.alignment[add_new_warp.name]
add_new_warp_element.visible = check_player_permissions(player,'allow_add_warp')
add_new_warp_element.visible = check_player_permissions(player, 'allow_add_warp')
end
Event.add(Roles.events.on_role_assigned,role_update_event)
Event.add(Roles.events.on_role_unassigned,role_update_event)
Event.add(Roles.events.on_role_assigned, role_update_event)
Event.add(Roles.events.on_role_unassigned, role_update_event)
--- When the player leaves or enters range of a warp this is triggered
Store.watch(player_in_range_store,function(value,player_name)
Store.watch(player_in_range_store, function(value, player_name)
local player = game.players[player_name]
local force = player.force
-- Change if the frame is visible based on if the player is in range
if not keep_gui_open[player.name] then
Gui.toggle_left_element(player,warp_list_container,value)
Gui.toggle_left_element(player, warp_list_container, value)
end
-- Check if the player requires proximity
if check_player_permissions(player,'bypass_warp_proximity') then
if check_player_permissions(player, 'bypass_warp_proximity') then
return
end
-- Get the warp table
local frame = Gui.get_left_element(player,warp_list_container)
local frame = Gui.get_left_element(player, warp_list_container)
local scroll_table = frame.container.scroll.table
-- Check if the buttons should be active
local timer = Store.get(player_warp_cooldown_store,player)
local timer = Store.get(player_warp_cooldown_store, player)
local button_disabled = timer and timer > 0 or not value
-- Change the enabled state of the warp buttons
local warp_ids = Warps.get_force_warp_ids(force.name)
for _,warp_id in pairs(warp_ids) do
for _, warp_id in pairs(warp_ids) do
local element = scroll_table['icon-'..warp_id][warp_icon_button.name]
if element and element.valid then
element.enabled = not button_disabled
@@ -527,23 +527,23 @@ Store.watch(player_in_range_store,function(value,player_name)
element.tooltip = {'warp-list.goto-disabled'}
else
local position = Warps.get_warp(warp_id).position
element.tooltip = {'warp-list.goto-tooltip',position.x,position.y}
element.tooltip = {'warp-list.goto-tooltip', position.x, position.y}
end
end
end
end)
--- Update the warp cooldown progress bars to match the store
Store.watch(player_warp_cooldown_store,function(value,player_name,old_value)
Store.watch(player_warp_cooldown_store, function(value, player_name, old_value)
if value == old_value then return end
-- Get the progress bar element
local player = game.players[player_name]
local frame = Gui.get_left_element(player,warp_list_container)
local frame = Gui.get_left_element(player, warp_list_container)
local warp_timer_element = frame.container[warp_timer.name]
-- Set the progress
local progress = 1
local timer = Store.get(player_warp_cooldown_store,player)
local timer = Store.get(player_warp_cooldown_store, player)
if timer and timer > 0 then
progress = 1 - (timer/config.cooldown_duraction)
end
@@ -551,7 +551,7 @@ Store.watch(player_warp_cooldown_store,function(value,player_name,old_value)
-- Trigger update of buttons if cooldown is now 0
if value == 0 then
Store.trigger(player_in_range_store,player_name)
Store.trigger(player_in_range_store, player_name)
end
end)
@@ -559,8 +559,8 @@ end)
local r2 = config.standard_proximity_radius^2
local rs2 = config.spawn_proximity_radius^2
local mr2 = config.minimum_distance^2
Event.on_nth_tick(math.floor(60/config.update_smoothing),function()
Store.map(player_warp_cooldown_store,function(value)
Event.on_nth_tick(math.floor(60/config.update_smoothing), function()
Store.map(player_warp_cooldown_store, function(value)
if value > 0 then
return value - 1
end
@@ -568,8 +568,8 @@ Event.on_nth_tick(math.floor(60/config.update_smoothing),function()
local force_warps = {}
local warps = {}
for _,player in pairs(game.connected_players) do
local was_in_range = Store.get(player_in_range_store,player)
for _, player in pairs(game.connected_players) do
local was_in_range = Store.get(player_in_range_store, player)
-- Get the ids of all the warps on the players force
local force_name = player.force.name
@@ -585,10 +585,10 @@ Event.on_nth_tick(math.floor(60/config.update_smoothing),function()
if #warp_ids > 0 then
local surface = player.surface
local pos = player.position
local px,py = pos.x,pos.y
local px, py = pos.x, pos.y
-- Loop over each warp
for _,warp_id in ipairs(warp_ids) do
for _, warp_id in ipairs(warp_ids) do
-- Check if warp id is chached
local warp = warps[warp_id]
if not warp then
@@ -612,13 +612,13 @@ Event.on_nth_tick(math.floor(60/config.update_smoothing),function()
-- Check the dist to the closest warp
local in_range = closest_warp.warp_id == warp_ids.spawn and closest_distance < rs2 or closest_distance < r2
if was_in_range and not in_range then
Store.set(player_in_range_store,player,false)
Store.set(player_in_range_store, player, false)
elseif not was_in_range and in_range then
Store.set(player_in_range_store,player,true)
Store.set(player_in_range_store, player, true)
end
-- Change the enabled state of the add warp button
local frame = Gui.get_left_element(player,warp_list_container)
local frame = Gui.get_left_element(player, warp_list_container)
local add_warp_element = frame.container.header.alignment[add_new_warp.name]
local was_able_to_make_warp = add_warp_element.enabled
local can_make_warp = closest_distance > mr2
@@ -627,7 +627,7 @@ Event.on_nth_tick(math.floor(60/config.update_smoothing),function()
add_warp_element.tooltip = {'warp-list.add-tooltip'}
elseif not can_make_warp and was_able_to_make_warp then
add_warp_element.enabled = false
add_warp_element.tooltip = {'warp-list.too-close',closest_warp.name}
add_warp_element.tooltip = {'warp-list.too-close', closest_warp.name}
end
end
@@ -637,16 +637,16 @@ Event.on_nth_tick(math.floor(60/config.update_smoothing),function()
end)
--- When a player is created make sure that there is a spawn warp created
Event.add(defines.events.on_player_created,function(event)
Event.add(defines.events.on_player_created, function(event)
-- If the force has no spawn then make a spawn warp
local player = Game.get_player_by_index(event.player_index)
local force = player.force
local spawn_id = Warps.get_spawn_warp_id(force.name)
if not spawn_id then
local spawn_position = force.get_spawn_position(player.surface)
spawn_id = Warps.add_warp(force.name,player.surface,spawn_position,nil,'Spawn')
Warps.set_spawn_warp(spawn_id,force)
Store.trigger(Warps.store,spawn_id)
spawn_id = Warps.add_warp(force.name, player.surface, spawn_position, nil, 'Spawn')
Warps.set_spawn_warp(spawn_id, force)
Store.trigger(Warps.store, spawn_id)
Warps.make_warp_tag(spawn_id)
end
end)
@@ -657,7 +657,7 @@ local function maintain_tag(event)
local tag = event.tag
local force_name = event.force.name
local warp_ids = Warps.get_force_warp_ids(force_name)
for _,warp_id in pairs(warp_ids) do
for _, warp_id in pairs(warp_ids) do
local warp = Warps.get_warp(warp_id)
local wtag = warp.tag
if not wtag or not wtag.valid or wtag == tag then
@@ -669,5 +669,5 @@ local function maintain_tag(event)
end
end
Event.add(defines.events.on_chart_tag_modified,maintain_tag)
Event.add(defines.events.on_chart_tag_removed,maintain_tag)
Event.add(defines.events.on_chart_tag_modified, maintain_tag)
Event.add(defines.events.on_chart_tag_removed, maintain_tag)