1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-04-04 22:04:31 +02:00
ComfyFactorio/modules/satellite_score.lua

180 lines
8.0 KiB
Lua
Raw Normal View History

2019-01-18 09:22:15 +01:00
-- level up ranks with launching satellites -- by mewmew
2021-03-24 20:14:55 +01:00
local Event = require 'utils.event'
2019-10-28 17:38:36 +01:00
local Server = require 'utils.server'
local Global = require 'utils.global'
2024-10-09 21:35:16 +02:00
if script.active_mods['space-age'] then
error('Satellite Score Module can be used only while the Space Age mod is not enabled. (Most likely you try to run scenario not compatible with Space Age, try disabling it in Mods.)', 2)
end
local this = {}
Global.register(
this,
function (tbl)
this = tbl
end
)
2019-01-18 09:22:15 +01:00
local function get_rank()
for i = #this.satellite_score, 1, -1 do
if this.satellites_in_space >= this.satellite_score[i].goal then
2021-03-24 16:46:00 +01:00
return i
end
end
2019-01-18 09:22:15 +01:00
end
local function satellite_score_toggle_button(player)
2021-03-24 16:46:00 +01:00
if player.gui.top['satellite_score_toggle_button'] then
return
end
local button = player.gui.top.add { name = 'satellite_score_toggle_button', type = 'sprite-button', sprite = 'item/satellite', tooltip = 'Satellites in Space' }
2021-03-24 16:46:00 +01:00
button.style.font = 'default-bold'
button.style.minimal_height = 38
button.style.maximal_height = 38
2021-03-24 16:46:00 +01:00
button.style.minimal_width = 38
button.style.padding = 1
2019-01-18 09:22:15 +01:00
end
2021-03-24 20:14:55 +01:00
--[[
2019-01-18 09:23:43 +01:00
local function level_up_popup(player)
local reward = storage.satellite_score[get_rank()]
2021-03-24 16:46:00 +01:00
if player.gui.center['level_up_popup'] then
player.gui.center['level_up_popup'].destroy()
end
local frame = player.gui.center.add({type = 'frame', name = 'level_up_popup', direction = 'vertical'})
local label = frame.add({type = 'label', caption = reward.msg})
label.style.font = 'default-listbox'
label.style.font_color = reward.color
local button = frame.add({type = 'button', caption = reward.msg2, name = 'level_up_popup_close'})
button.style.minimal_width = string.len(reward.msg) * 7
button.style.font = 'default-listbox'
button.style.font_color = {r = 0.77, g = 0.77, b = 0.77}
2021-03-24 20:14:55 +01:00
end ]]
2019-01-18 09:23:43 +01:00
local function satellites_in_space_gui(player)
--if storage.satellites_in_space == 0 then return end
2021-03-24 16:46:00 +01:00
local i = get_rank()
if player.gui.left['satellites_in_space'] then
player.gui.left['satellites_in_space'].destroy()
end
local frame = player.gui.left.add({ type = 'frame', name = 'satellites_in_space' })
local label = frame.add({ type = 'label', caption = 'Satellites launched: ' })
label.style.font_color = { r = 0.11, g = 0.8, b = 0.44 }
2021-03-24 16:46:00 +01:00
local progress = (this.satellites_in_space - this.satellite_score[i].goal) / (this.satellite_score[i + 1].goal - this.satellite_score[i].goal)
2021-03-24 16:46:00 +01:00
if progress > 1 then
progress = 1
end
2024-10-09 21:35:16 +02:00
local progressbar = frame.add({ type = 'progressbar', value = progress, style = 'achievement_progressbar' })
2021-03-24 16:46:00 +01:00
progressbar.style.minimal_width = 100
progressbar.style.maximal_width = 100
progressbar.style.height = 20
2021-03-24 16:46:00 +01:00
label = frame.add({ type = 'label', caption = this.satellites_in_space .. '/' .. tostring(this.satellite_score[i + 1].goal) })
label.style.font_color = { r = 0.33, g = 0.66, b = 0.9 }
2021-03-24 16:46:00 +01:00
if this.satellite_score[i].rank then
label = frame.add({ type = 'label', caption = ' ~Rank~' })
label.style.font_color = { r = 0.75, g = 0.75, b = 0.75 }
label = frame.add({ type = 'label', caption = this.satellite_score[i].rank })
2021-03-24 16:46:00 +01:00
label.style.font = 'default-bold'
label.style.font_color = this.satellite_score[i].color
2021-03-24 16:46:00 +01:00
end
2019-01-18 09:22:15 +01:00
end
2021-03-24 16:46:00 +01:00
local function on_rocket_launched(event)
2024-10-09 21:35:16 +02:00
local rocket_inventory = event.rocket.cargo_pod.get_inventory(defines.inventory.cargo_unit)
2021-03-24 16:46:00 +01:00
local c = rocket_inventory.get_item_count('satellite')
if c == 0 then
return
end
this.satellites_in_space = this.satellites_in_space + c
2021-03-24 16:46:00 +01:00
local i = get_rank()
for _, player in pairs(game.connected_players) do
satellites_in_space_gui(player)
end
if not this.satellite_score[i].achieved then
2021-03-24 16:46:00 +01:00
for _, player in pairs(game.connected_players) do
player.play_sound { path = 'utility/game_won', volume_modifier = 0.9 }
2021-03-24 16:46:00 +01:00
--level_up_popup(player)
end
this.satellite_score[i].achieved = true
2021-03-24 16:46:00 +01:00
end
if (this.satellites_in_space < 10) or ((this.satellites_in_space < 50) and ((this.satellites_in_space % 5) == 0)) or ((this.satellites_in_space % 25) == 0) then
local message = 'A satellite has been launched! Total count: ' .. this.satellites_in_space
game.print(message)
2019-10-28 17:38:36 +01:00
Server.to_discord_embed(message)
2021-03-24 16:46:00 +01:00
end
2019-01-18 09:22:15 +01:00
end
local function init()
this.satellites_in_space = 0
this.satellite_score = {
{ goal = 0, rank = false, achieved = true },
{ goal = 1, rank = 'Copper', color = { r = 201, g = 133, b = 6 }, msg = '', msg2 = '', achieved = false },
{ goal = 10, rank = 'Iron', color = { r = 219, g = 216, b = 206 }, msg = '', msg2 = '', achieved = false },
{ goal = 100, rank = 'Bronze', color = { r = 186, g = 115, b = 39 }, msg = '', msg2 = '', achieved = false },
{ goal = 500, rank = 'Silver', color = { r = 186, g = 178, b = 171 }, msg = '', msg2 = '', achieved = false },
{ goal = 1000, rank = 'Gold', color = { r = 255, g = 214, b = 33 }, msg = '', msg2 = '', achieved = false },
{ goal = 2500, rank = 'Platinum', color = { r = 224, g = 223, b = 215 }, msg = '', msg2 = '', achieved = false },
{ goal = 5000, rank = 'Diamond', color = { r = 237, g = 236, b = 232 }, msg = '', msg2 = '', achieved = false },
{ goal = 10000, rank = 'Iridium', color = { r = 255, g = 220, b = 220 }, msg = '', msg2 = '', achieved = false },
{ goal = 20000, rank = 'Anti-Matter', color = { r = 190, g = 255, b = 190 }, msg = '', msg2 = '', achieved = false },
{ goal = 30000, rank = 'Orange Dwarf', color = { r = 255, g = 150, b = 50 }, msg = '', msg2 = '', achieved = false },
{ goal = 40000, rank = 'Blue Supergiant', color = { r = 130, g = 130, b = 255 }, msg = '', msg2 = '', achieved = false },
{ goal = 50000, rank = 'Red Hypergiant', color = { r = 255, g = 90, b = 90 }, msg = '', msg2 = '', achieved = false },
{ goal = 75000, rank = 'Neutron Star', color = { r = 200, g = 200, b = 255 }, msg = '', msg2 = '', achieved = false },
{ goal = 100000, rank = 'Supernova', color = { r = 200, g = 255, b = 200 }, msg = '', msg2 = '', achieved = false },
{ goal = 150000, rank = 'Black Hole', color = { r = 0, g = 0, b = 0 }, msg = '', msg2 = '', achieved = false },
{ goal = 1000000, rank = 'Blue Screen', color = { r = 100, g = 100, b = 245 }, msg = '', msg2 = '', achieved = false },
{ goal = 10000000, rank = '?????', color = { r = 0, g = 0, b = 0 }, msg = '', msg2 = '', achieved = false },
{ goal = 1000000000, rank = '?!??!?', color = { r = 0, g = 0, b = 0 }, msg = '', msg2 = '', achieved = false }
2021-03-24 16:46:00 +01:00
}
2019-01-18 09:22:15 +01:00
end
local function on_player_joined_game(event)
if not this.satellites_in_space then
2021-03-24 16:46:00 +01:00
init()
end
local player = game.players[event.player_index]
satellite_score_toggle_button(player)
if player.gui.left['satellites_in_space'] or this.satellites_in_space > 0 then
2021-03-24 16:46:00 +01:00
satellites_in_space_gui(player)
end
2019-01-18 09:22:15 +01:00
end
2021-03-24 16:46:00 +01:00
local function on_gui_click(event)
if not event then
return
end
if not event.element then
return
end
if not event.element.valid then
return
end
local player = game.players[event.element.player_index]
local name = event.element.name
if name == 'satellite_score_toggle_button' then
local frame = player.gui.left['satellites_in_space']
if frame then
frame.destroy()
else
satellites_in_space_gui(player)
end
end
if name == 'level_up_popup_close' then
player.gui.center['level_up_popup'].destroy()
end
2019-01-18 09:22:15 +01:00
end
2021-03-24 20:14:55 +01:00
Event.add(defines.events.on_gui_click, on_gui_click)
Event.add(defines.events.on_player_joined_game, on_player_joined_game)
2024-10-09 21:35:16 +02:00
Event.add(defines.events.on_rocket_launch_ordered, on_rocket_launched)