1
0
mirror of https://github.com/Refactorio/RedMew.git synced 2025-03-03 14:53:01 +02:00

Merge pull request #1146 from Refactorio/entities_built_fix

Added player_built and player_crafted to the crash site awards ceremony
This commit is contained in:
grilledham 2021-02-11 19:26:34 +00:00 committed by GitHub
commit c26148b1e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 14 deletions

View File

@ -2,6 +2,7 @@ local Global = require 'utils.global'
local Event = require 'utils.event'
local ScoreTracker = require 'utils.score_tracker'
require 'utils.table'
local pairs = pairs
local sqrt = math.sqrt
local change_for_global = ScoreTracker.change_for_global
@ -26,6 +27,7 @@ local player_worms_killed_name = 'player-worms-killed'
local player_spawners_killed_name = 'player-spawners-killed'
local player_total_kills_name = 'player-total-kills'
local player_turrets_killed_name = 'player-turrets-killed'
local player_entities_built_name = 'player_entities_built'
ScoreTracker.register(rocks_smashed_name, {'player_stats.rocks_smashed'}, '[img=entity.rock-huge]')
ScoreTracker.register(trees_cut_down_name, {'player_stats.trees_cut_down'}, '[img=entity.tree-02]')
@ -46,6 +48,7 @@ ScoreTracker.register(player_worms_killed_name, {'player_stats.player_worms_kill
ScoreTracker.register(player_spawners_killed_name, {'player_stats.player_spawners_killed'})
ScoreTracker.register(player_turrets_killed_name, {'player_stats.player_turrets_killed'})
ScoreTracker.register(player_total_kills_name, {'player_stats.player_total_kills'})
ScoreTracker.register(player_entities_built_name, {'player_stats.player_entities_built'})
local train_kill_causes = {
['locomotive'] = true,
@ -166,12 +169,28 @@ local function player_console_chat(event)
end
end
local function player_built_entity()
change_for_global(built_by_players_name, 1)
local function player_built_entity(event)
local player_index = event.player_index
if event.created_entity.is_registered_for_construction() == false then -- When is_registered_for_construction() is true we only register the entity as built once a robot builds it
change_for_global(built_by_players_name, 1)
change_for_player(player_index, player_entities_built_name, 1)
end
end
local function robot_built_entity()
local function robot_built_entity(event)
change_for_global(built_by_robots_name, 1)
local robot = event.robot
if not robot.valid then
return
end
-- When item gets built, add to the total entities built for the player whose robot built the entity NOT for the player who placed the ghost
local robot_owner = robot.logistic_network.cells[1].owner
if robot_owner.player then -- nil if the robot owner is a roboport
change_for_player(robot_owner.player.index, player_entities_built_name, 1)
end
end
local function get_player_index_from_cause(cause, event)
@ -312,7 +331,8 @@ local Public = {
player_worms_killed_name = player_worms_killed_name,
player_spawners_killed_name = player_spawners_killed_name,
player_total_kills_name = player_total_kills_name,
player_turrets_killed_name = player_turrets_killed_name
player_turrets_killed_name = player_turrets_killed_name,
player_entities_built_name = player_entities_built_name
}
-- Returns a dictionary of cause_name -> count

View File

@ -17,8 +17,12 @@ local ScoreTracker = require 'utils.score_tracker'
local PlayerStats = require 'features.player_stats'
local set_timeout_in_ticks = Task.set_timeout_in_ticks
-- Use these settings for live
local map_promotion_channel = Discord.channel_names.map_promotion
local crash_site_role_mention = Discord.role_mentions.crash_site
-- Use these settings for testing
--local map_promotion_channel = Discord.channel_names.bot_playground
--local crash_site_role_mention = Discord.role_mentions.test
local Public = {}
@ -27,6 +31,7 @@ function Public.control(config)
local server_player = {name = '<server>', print = print}
local global_data = {restarting = nil}
local airstrike_data = {radius_level = 1, count_level = 1}
local default_name = config.scenario_name or 'crashsite'
Global.register({global_data = global_data, airstrike_data = airstrike_data}, function(tbl)
global_data = tbl.global_data
@ -76,6 +81,14 @@ function Public.control(config)
return entity_count
end
-- Scenario display name for printing new scenario to discord
local scenario_display_name = {
['crashsite'] = 'Crash Site',
['crashsite-world'] = 'Crash Site World Map',
['crashsite-desert'] = 'Crash Site Desert',
['crashsite-arrakis'] = 'Crash Site Arrakis'
}
local callback
callback = Token.register(function(data)
if not global_data.restarting then
@ -83,8 +96,9 @@ function Public.control(config)
end
local state = data.state
local next_scenario = data.scenario_name
if state == 0 then
Server.start_scenario(data.scenario_name)
Server.start_scenario(next_scenario)
double_print('restarting')
global_data.restarting = nil
return
@ -107,7 +121,8 @@ function Public.control(config)
distance_walked = ScoreTracker.get_for_player(p.index,PlayerStats.player_distance_walked_name),
player_deaths = ScoreTracker.get_for_player(p.index, PlayerStats.player_deaths_name),
coins_earned = ScoreTracker.get_for_player(p.index, PlayerStats.coins_earned_name),
entities_built = ScoreTracker.get_for_player(p.index,PlayerStats.built_by_players_name),
entities_built = ScoreTracker.get_for_player(p.index,PlayerStats.player_entities_built_name),
entities_crafted = ScoreTracker.get_for_player(p.index,PlayerStats.player_items_crafted_name),
time_played = p.online_time
}
end
@ -120,6 +135,7 @@ function Public.control(config)
enemy_entities = count_enemy_entities(),
biters_killed = ScoreTracker.get_for_global(PlayerStats.aliens_killed_name),
total_players = #game.players,
entities_built = ScoreTracker.get_for_global(PlayerStats.built_by_players_name),
player_data = player_data
}
@ -131,6 +147,7 @@ function Public.control(config)
['player_deaths'] = {value = 0, player = ""},
['time_played'] = {value = 0, player = ""},
['entities_built'] = {value = 0, player = ""},
['entities_crafted'] = {value = 0, player = ""},
['distance_walked'] = {value = 0, player = ""},
['coins_earned'] = {value = 0, player = ""}
}
@ -160,11 +177,14 @@ function Public.control(config)
awards.time_played.value = v.time_played
awards.time_played.player = v.name
end
-- This stat not working
--if v.entities_built > awards.entities_built.value then
-- awards.entities_built.value = v.entities_built
-- awards.entities_built.player = v.name
--end
if v.entities_built > awards.entities_built.value then
awards.entities_built.value = v.entities_built
awards.entities_built.player = v.name
end
if v.entities_crafted > awards.entities_crafted.value then
awards.entities_crafted.value = v.entities_crafted
awards.entities_crafted.player = v.name
end
if v.distance_walked > awards.distance_walked.value then
awards.distance_walked.value = v.distance_walked
awards.distance_walked.player = v.name
@ -182,13 +202,16 @@ function Public.control(config)
.. 'Map time: '..time_string..'\\n'
.. 'Total kills: '..statistics.biters_killed..'\\n'
.. 'Biters remaining on map: '..statistics.enemy_entities..'\\n'
.. 'Players: '..statistics.total_players..'\\n\\n'
.. 'Players: '..statistics.total_players..'\\n'
.. 'Total entities built: '..statistics.entities_built..'\\n\\n'
.. 'Awards:\\n'
.. 'Most kills overall: '..awards.total_kills.player..' ('..awards.total_kills.value..')\\n'
.. 'Most biters/spitters killed: '..awards.units_killed.player..' ('..awards.units_killed.value..')\\n'
.. 'Most spawners killed: '..awards.spawners_killed.player..' ('..awards.spawners_killed.value..')\\n'
.. 'Most worms killed: '..awards.worms_killed.player..' ('..awards.worms_killed.value..')\\n'
.. 'Most deaths: '..awards.player_deaths.player..' ('..awards.player_deaths.value..')\\n'
.. 'Most items crafted: '..awards.entities_crafted.player..' ('..awards.entities_crafted.value..')\\n'
.. 'Most entities built: '..awards.entities_built.player..' ('..awards.entities_built.value..')\\n'
.. 'Most time played: '..awards.time_played.player..' ('..Core.format_time(awards.time_played.value)..')\\n'
.. 'Furthest walked: '..awards.distance_walked.player..' ('..math.floor(awards.distance_walked.value)..')\\n'
.. 'Most coins earned: '..awards.coins_earned.player..' ('..awards.coins_earned.value..')\\n'
@ -202,7 +225,7 @@ function Public.control(config)
.. 'Players: '..statistics.total_players..'\\n'
)
end
Server.to_discord_named_raw(map_promotion_channel, crash_site_role_mention .. ' **Crash Site has just restarted!!**')
Server.to_discord_named_raw(map_promotion_channel, crash_site_role_mention .. ' **'..scenario_display_name[default_name]..' has just restarted!!**')
Server.set_data('crash_site_data', tostring(end_epoch), statistics) -- Store the table, with end_epoch as the key
Popup.all('\nServer restarting!\nInitiated by ' .. data.name .. '\n')
@ -541,7 +564,6 @@ function Public.control(config)
allowed_by_server = true
}, abort)
local default_name = config.scenario_name or 'crashsite'
Command.add('crash-site-restart', {
description = {'command_description.crash_site_restart'},
arguments = {'scenario_name'},