2021-02-06 22:42:10 +02:00
|
|
|
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.
|
|
|
|
|
2021-02-08 09:01:20 +02:00
|
|
|
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.
|
2021-02-06 22:42:10 +02:00
|
|
|
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
|