mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-10 00:43:27 +02:00
29b3a89b33
Fixed issue with determining if market is placeable Allow entities to be placed within the initial town square Fixed info to remove reference to small plane Fixed issue with no messages when can't place item due to building restrictions Fixed issue with inability to place new towns near enemy spawners or turrets Fixed issue with market listings breaking when special features disabled due to deprecation of computer item Fixed issue with mining sound missing for big-crash-site-# entities (in mod) Default to showing entity info for players (alt-info on chests)
126 lines
5.3 KiB
Lua
126 lines
5.3 KiB
Lua
local Public = {}
|
|
|
|
local Table = require 'modules.scrap_towny_ffa.table'
|
|
|
|
local info = [[You are an "outlander" stuck on this god-forsaken planet with a bunch of other desolate fools. You can choose to join
|
|
an existing town if accepted, or go at it alone, building your own outpost or living as an "outlander".
|
|
|
|
The local inhabitants are indifferent to you at first, so long as you don't build or pollute, but become increasingly aggressive
|
|
by foreign technology. In fact, they get quite aggressive at the scent of it. If you were to hurt any of the natives you will be
|
|
brandished a rogue until your untimely death or until you find better digs.
|
|
|
|
To create a new town or outpost simply place a furnace down in a suitable spot that is not near any other towns or obstructed.
|
|
The world seems to be limited in size with uninhabitable zones on four sides. News towns can only be built within these
|
|
borders and you must leave room for the town's size (radius of 27) when placing a new town.
|
|
TIP: It's best to find a spot far from existing towns and pollution, as enemies will become aggressive once you form a town.
|
|
|
|
Once a town is formed, members may invite other players and teams using a raw fish. To invite another player, drop a fish
|
|
on that player (with the Z key). To accept an invite, offer a fish in return to the member. To leave a town, simply drop coal
|
|
on the market. As a member of a town, your respawn point will change to that of the town.
|
|
|
|
To form any alliance with another town, drop a fish on a member or their market. If they agree they can reciprocate with a
|
|
fish offering.
|
|
|
|
The town market is the heart of your town. If it is destroyed, your town is destroyed and you will lose all research. So
|
|
protect it well, repair it whenever possible, and if you can afford, increase its health by purchasing upgrades. If your
|
|
town falls, members will be disbanded, and all buildings will become neutral and lootable.
|
|
|
|
When building your town, note that you may only build nearby existing structures such as your town market and walls and
|
|
any other structure you have placed. Beware that biters and spitters become more aggressive towards towns that are
|
|
advanced in research. Their evolution will scale around technology progress in any nearby towns and pollution levels.
|
|
|
|
This is a FFA ("Free-For-All") world. Short of bullying and derogatory remarks, anything goes. Griefing is encouraged,
|
|
so best to setup proper defenses for your town or outpost to fend off enemies when you are there and away.
|
|
|
|
Have fun and be comfy ^.^]]
|
|
|
|
function Public.toggle_button(player)
|
|
if player.gui.top["towny_map_intro_button"] then return end
|
|
local b = player.gui.top.add({ type = "sprite-button", caption = "Towny", name = "towny_map_intro_button", tooltip = "Show Info" })
|
|
b.style.font_color = { r = 0.5, g = 0.3, b = 0.99 }
|
|
b.style.font = "heading-1"
|
|
b.style.minimal_height = 38
|
|
b.style.minimal_width = 80
|
|
b.style.top_padding = 1
|
|
b.style.left_padding = 1
|
|
b.style.right_padding = 1
|
|
b.style.bottom_padding = 1
|
|
end
|
|
|
|
function Public.show(player)
|
|
local ffatable = Table.get_table()
|
|
if player.gui.center["towny_map_intro_frame"] then player.gui.center["towny_map_intro_frame"].destroy() end
|
|
local frame = player.gui.center.add { type = "frame", name = "towny_map_intro_frame" }
|
|
frame = frame.add { type = "frame", direction = "vertical" }
|
|
|
|
local t = frame.add { type = "table", column_count = 2 }
|
|
|
|
local label = t.add { type = "label", caption = "Active Factions:" }
|
|
label.style.font = "heading-1"
|
|
label.style.font_color = { r = 0.85, g = 0.85, b = 0.85 }
|
|
label.style.right_padding = 8
|
|
|
|
t = t.add { type = "table", column_count = 4 }
|
|
|
|
local label2 = t.add { type = "label", caption = "Outlander" .. "(" .. #game.forces.player.connected_players .. ")" }
|
|
label2.style.font_color = { 170, 170, 170 }
|
|
label2.style.font = "heading-3"
|
|
label2.style.minimal_width = 80
|
|
|
|
for _, town_center in pairs(ffatable.town_centers) do
|
|
local force = town_center.market.force
|
|
local label3 = t.add { type = "label", caption = force.name .. "(" .. #force.connected_players .. ")" }
|
|
label3.style.font = "heading-3"
|
|
label3.style.minimal_width = 80
|
|
label3.style.font_color = town_center.color
|
|
end
|
|
|
|
frame.add { type = "line" }
|
|
|
|
local l = frame.add { type = "label", caption = "Instructions:" }
|
|
l.style.font = "heading-1"
|
|
l.style.font_color = { r = 0.85, g = 0.85, b = 0.85 }
|
|
|
|
local l2 = frame.add { type = "label", caption = info }
|
|
l2.style.single_line = false
|
|
l2.style.font = "heading-2"
|
|
l2.style.font_color = { r = 0.8, g = 0.7, b = 0.99 }
|
|
end
|
|
|
|
function Public.close(event)
|
|
if not event.element then return end
|
|
if not event.element.valid then return end
|
|
local parent = event.element.parent
|
|
for _ = 1, 4, 1 do
|
|
if not parent then return end
|
|
if parent.name == "towny_map_intro_frame" then
|
|
parent.destroy()
|
|
return
|
|
end
|
|
parent = parent.parent
|
|
end
|
|
end
|
|
|
|
function Public.toggle(event)
|
|
if not event.element then return end
|
|
if not event.element.valid then return end
|
|
if event.element.name == "towny_map_intro_button" then
|
|
local player = game.players[event.player_index]
|
|
if player.gui.center["towny_map_intro_frame"] then
|
|
player.gui.center["towny_map_intro_frame"].destroy()
|
|
else
|
|
Public.show(player)
|
|
end
|
|
end
|
|
end
|
|
|
|
local function on_gui_click(event)
|
|
Public.close(event)
|
|
Public.toggle(event)
|
|
end
|
|
|
|
local Event = require 'utils.event'
|
|
Event.add(defines.events.on_gui_click, on_gui_click)
|
|
|
|
return Public
|