1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-08 00:39:30 +02:00
ComfyFactorio/modules/scrap_towny_ffa/team.lua

766 lines
27 KiB
Lua
Raw Normal View History

2021-03-24 21:14:55 +02:00
--luacheck: ignore
2021-02-06 22:42:10 +02:00
local Public = {}
local table_size = table.size
local string_match = string.match
local string_lower = string.lower
local Table = require 'modules.scrap_towny_ffa.table'
2021-03-24 17:46:00 +02:00
local outlander_color = {150, 150, 150}
local outlander_chat_color = {170, 170, 170}
local rogue_color = {150, 150, 150}
local rogue_chat_color = {170, 170, 170}
2021-02-06 22:42:10 +02:00
local item_drop_radius = 1.65
local function can_force_accept_member(force)
2021-03-24 17:46:00 +02:00
local ffatable = Table.get_table()
local town_centers = ffatable.town_centers
local size_of_town_centers = ffatable.size_of_town_centers
local member_limit = 0
2021-02-06 22:42:10 +02:00
2021-03-24 17:46:00 +02:00
if size_of_town_centers <= 1 then
return true
end
2021-02-06 22:42:10 +02:00
2021-03-24 17:46:00 +02:00
for _, town in pairs(town_centers) do
member_limit = member_limit + table_size(town.market.force.connected_players)
end
member_limit = math.floor(member_limit / size_of_town_centers) + 4
2021-02-06 22:42:10 +02:00
2021-03-24 17:46:00 +02:00
if #force.connected_players >= member_limit then
game.print('>> Town ' .. force.name .. ' has too many settlers! Current limit (' .. member_limit .. ')', {255, 255, 0})
return
end
return true
2021-02-06 22:42:10 +02:00
end
local function is_towny(force)
2021-03-24 17:46:00 +02:00
if force == game.forces['player'] or force == game.forces['rogue'] then
return false
end
return true
2021-02-06 22:42:10 +02:00
end
function Public.has_key(player)
2021-11-17 00:13:36 +02:00
if not (player and player.valid) then
return
2021-03-24 17:46:00 +02:00
end
2021-11-17 00:13:36 +02:00
local ffatable = Table.get_table()
return ffatable.key[player.index]
2021-02-06 22:42:10 +02:00
end
function Public.give_key(player)
2021-11-17 00:13:36 +02:00
if not (player and player.valid) then
2021-03-24 17:46:00 +02:00
return
end
2021-11-17 00:13:36 +02:00
local ffatable = Table.get_table()
ffatable.key[player.index] = true
2021-02-06 22:42:10 +02:00
end
function Public.remove_key(player)
2021-11-17 00:13:36 +02:00
if not (player and player.valid) then
2021-03-24 17:46:00 +02:00
return
end
2021-11-17 00:13:36 +02:00
local ffatable = Table.get_table()
ffatable.key[player.index] = false
2021-02-06 22:42:10 +02:00
end
function Public.set_player_color(player)
2021-03-24 17:46:00 +02:00
local ffatable = Table.get_table()
if player.force == game.forces['player'] then
player.color = outlander_color
player.chat_color = outlander_chat_color
return
end
if player.force == game.forces['rogue'] then
player.color = rogue_color
player.chat_color = rogue_chat_color
return
end
local town_center = ffatable.town_centers[player.force.name]
if not town_center then
return
end
player.color = town_center.color
player.chat_color = town_center.color
2021-02-06 22:42:10 +02:00
end
local function set_town_color(event)
2021-03-24 17:46:00 +02:00
local ffatable = Table.get_table()
if event.command ~= 'color' then
return
end
local player = game.players[event.player_index]
local force = player.force
local town_center = ffatable.town_centers[force.name]
if not town_center then
Public.set_player_color(player)
return
end
town_center.color = {player.color.r, player.color.g, player.color.b}
rendering.set_color(town_center.town_caption, town_center.color)
for _, p in pairs(force.players) do
Public.set_player_color(p)
end
2021-02-06 22:42:10 +02:00
end
function Public.set_all_player_colors()
2021-03-24 17:46:00 +02:00
for _, p in pairs(game.connected_players) do
Public.set_player_color(p)
end
2021-02-06 22:42:10 +02:00
end
function Public.add_player_to_town(player, town_center)
2021-03-24 17:46:00 +02:00
local ffatable = Table.get_table()
local market = town_center.market
local force = market.force
local surface = market.surface
player.force = market.force
Public.remove_key(player)
ffatable.spawn_point[player.name] = force.get_spawn_position(surface)
game.permissions.get_group(force.name).add_player(player)
player.tag = ''
Public.set_player_color(player)
2021-02-06 22:42:10 +02:00
end
function Public.give_outlander_items(player)
2021-03-24 17:46:00 +02:00
player.insert({name = 'stone-furnace', count = 1})
player.insert({name = 'raw-fish', count = 3})
player.insert({name = 'coal', count = 3})
2021-02-06 22:42:10 +02:00
end
function Public.set_player_to_outlander(player)
2021-03-24 17:46:00 +02:00
local ffatable = Table.get_table()
player.force = game.forces.player
if ffatable.spawn_point[player.name] then
ffatable.spawn_point[player.name] = nil
end
if game.permissions.get_group('outlander') == nil then
game.permissions.create_group('outlander')
end
game.permissions.get_group('outlander').add_player(player)
player.tag = '[Outlander]'
Public.set_player_color(player)
Public.give_key(player)
2021-02-06 22:42:10 +02:00
end
local function set_player_to_rogue(player)
2021-03-24 17:46:00 +02:00
local ffatable = Table.get_table()
player.force = game.forces['rogue']
if ffatable.spawn_point[player.name] then
ffatable.spawn_point[player.name] = nil
end
if game.permissions.get_group('rogue') == nil then
game.permissions.create_group('rogue')
end
game.permissions.get_group('rogue').add_player(player)
player.tag = '[Rogue]'
Public.set_player_color(player)
2021-02-06 22:42:10 +02:00
end
local function ally_outlander(player, target)
2021-03-24 17:46:00 +02:00
local ffatable = Table.get_table()
local requesting_force = player.force
local target_force = target.force
-- don't handle request if target is not a town
if not is_towny(requesting_force) and not is_towny(target_force) then
return false
end
-- don't handle request to another town if already in a town
if is_towny(requesting_force) and is_towny(target_force) then
return false
end
-- handle the request
if not is_towny(requesting_force) and is_towny(target_force) then
ffatable.requests[player.index] = target_force.name
local target_player = false
if target.type == 'character' then
target_player = target.player
else
target_player = game.players[target_force.name]
end
if target_player then
if ffatable.requests[target_player.index] then
if ffatable.requests[target_player.index] == player.name then
if ffatable.town_centers[target_force.name] then
if not can_force_accept_member(target_force) then
return true
end
game.print('>> ' .. player.name .. ' has settled in ' .. target_force.name .. "'s Town!", {255, 255, 0})
Public.add_player_to_town(player, ffatable.town_centers[target_force.name])
return true
end
end
end
end
game.print('>> ' .. player.name .. ' wants to settle in ' .. target_force.name .. ' Town!', {255, 255, 0})
return true
end
-- handle the approval
if is_towny(requesting_force) and not is_towny(target_force) then
if target.type ~= 'character' then
return true
end
local target_player = target.player
if not target_player then
return true
end
ffatable.requests[player.index] = target_player.name
if ffatable.requests[target_player.index] then
if ffatable.requests[target_player.index] == player.force.name then
if not can_force_accept_member(player.force) then
return true
end
if player.force.name == player.name then
game.print('>> ' .. player.name .. ' has accepted ' .. target_player.name .. ' into their Town!', {255, 255, 0})
else
game.print('>> ' .. player.name .. ' has accepted ' .. target_player.name .. ' into' .. player.force.name .. "'s Town!", {255, 255, 0})
end
Public.add_player_to_town(target_player, ffatable.town_centers[player.force.name])
return true
end
end
if player.force.name == player.name then
game.print('>> ' .. player.name .. ' is inviting ' .. target_player.name .. ' into their Town!', {255, 255, 0})
else
game.print('>> ' .. player.name .. ' is inviting ' .. target_player.name .. ' into ' .. player.force.name .. "'s Town!", {255, 255, 0})
end
return true
end
2021-02-06 22:42:10 +02:00
end
local function ally_neighbour_towns(player, target)
2021-03-24 17:46:00 +02:00
local requesting_force = player.force
local target_force = target.force
2021-02-06 22:42:10 +02:00
2021-03-24 17:46:00 +02:00
if target_force.get_friend(requesting_force) and requesting_force.get_friend(target_force) then
return
end
2021-02-06 22:42:10 +02:00
2021-03-24 17:46:00 +02:00
requesting_force.set_friend(target_force, true)
game.print('>> Town ' .. requesting_force.name .. ' has set ' .. target_force.name .. ' as their friend!', {255, 255, 0})
2021-02-06 22:42:10 +02:00
2021-03-24 17:46:00 +02:00
if target_force.get_friend(requesting_force) then
game.print('>> The towns ' .. requesting_force.name .. ' and ' .. target_force.name .. ' have formed an alliance!', {255, 255, 0})
end
2021-02-06 22:42:10 +02:00
end
local function ally_town(player, item)
2021-03-24 17:46:00 +02:00
local position = item.position
local surface = player.surface
local area = {{position.x - item_drop_radius, position.y - item_drop_radius}, {position.x + item_drop_radius, position.y + item_drop_radius}}
local requesting_force = player.force
local target = false
for _, e in pairs(surface.find_entities_filtered({type = {'character', 'market'}, area = area})) do
if e.force.name ~= requesting_force.name then
target = e
break
end
end
if not target then
return
end
if target.force == game.forces['enemy'] or target.force == game.forces['neutral'] then
return
end
if ally_outlander(player, target) then
return
end
ally_neighbour_towns(player, target)
2021-02-06 22:42:10 +02:00
end
local function declare_war(player, item)
2021-03-24 17:46:00 +02:00
local ffatable = Table.get_table()
local position = item.position
local surface = player.surface
local area = {{position.x - item_drop_radius, position.y - item_drop_radius}, {position.x + item_drop_radius, position.y + item_drop_radius}}
local requesting_force = player.force
local target = surface.find_entities_filtered({type = {'character', 'market'}, area = area})[1]
if not target then
return
end
local target_force = target.force
if not is_towny(target_force) then
return
end
if requesting_force.name == target_force.name then
if player.name ~= target.force.name then
Public.set_player_to_outlander(player)
game.print('>> ' .. player.name .. ' has abandoned ' .. target_force.name .. "'s Town!", {255, 255, 0})
ffatable.requests[player.index] = nil
end
if player.name == target.force.name then
if target.type ~= 'character' then
return
end
local target_player = target.player
if not target_player then
return
end
if target_player.index == player.index then
return
end
Public.set_player_to_outlander(target_player)
game.print('>> ' .. player.name .. ' has banished ' .. target_player.name .. ' from their Town!', {255, 255, 0})
ffatable.requests[player.index] = nil
end
return
end
if not is_towny(requesting_force) then
return
end
requesting_force.set_friend(target_force, false)
target_force.set_friend(requesting_force, false)
game.print('>> ' .. player.name .. ' has dropped the coal! Town ' .. target_force.name .. ' and ' .. requesting_force.name .. ' are now at war!', {255, 255, 0})
2021-02-06 22:42:10 +02:00
end
local function delete_chart_tag_for_all_forces(market)
2021-03-24 17:46:00 +02:00
local forces = game.forces
local position = market.position
local surface = market.surface
for _, force in pairs(forces) do
local tags = force.find_chart_tags(surface, {{position.x - 0.1, position.y - 0.1}, {position.x + 0.1, position.y + 0.1}})
local tag = tags[1]
if tag then
if tag.icon.name == 'stone-furnace' then
tag.destroy()
end
end
end
2021-02-06 22:42:10 +02:00
end
function Public.add_chart_tag(force, market)
2021-03-24 17:46:00 +02:00
local position = market.position
local tags = force.find_chart_tags(market.surface, {{position.x - 0.1, position.y - 0.1}, {position.x + 0.1, position.y + 0.1}})
if tags[1] then
return
end
force.add_chart_tag(market.surface, {icon = {type = 'item', name = 'stone-furnace'}, position = position, text = market.force.name .. "'s Town"})
2021-02-06 22:42:10 +02:00
end
function Public.update_town_chart_tags()
2021-03-24 17:46:00 +02:00
local ffatable = Table.get_table()
local town_centers = ffatable.town_centers
local forces = game.forces
for _, town_center in pairs(town_centers) do
local market = town_center.market
for _, force in pairs(forces) do
if force.is_chunk_visible(market.surface, town_center.chunk_position) then
Public.add_chart_tag(force, market)
end
end
end
if game.forces['player'] ~= nil then
game.forces['player'].clear_chart(game.surfaces['nauvis'])
end
if game.forces['rogue'] ~= nil then
game.forces['rogue'].clear_chart(game.surfaces['nauvis'])
end
2021-02-06 22:42:10 +02:00
end
local function reset_permissions(permission_group)
2021-03-24 17:46:00 +02:00
for action_name, _ in pairs(defines.input_action) do
permission_group.set_allows_action(defines.input_action[action_name], true)
end
2021-02-06 22:42:10 +02:00
end
local function disable_blueprints(permission_group)
2021-03-24 17:46:00 +02:00
local defs = {
defines.input_action.alt_select_blueprint_entities,
defines.input_action.cancel_new_blueprint,
defines.input_action.change_blueprint_record_label,
defines.input_action.clear_selected_blueprint,
defines.input_action.create_blueprint_like,
defines.input_action.cycle_blueprint_backwards,
defines.input_action.cycle_blueprint_forwards,
defines.input_action.delete_blueprint_library,
defines.input_action.delete_blueprint_record,
defines.input_action.drop_blueprint_record,
defines.input_action.drop_to_blueprint_book,
defines.input_action.export_blueprint,
defines.input_action.grab_blueprint_record,
defines.input_action.import_blueprint,
defines.input_action.import_blueprint_string,
defines.input_action.open_blueprint_library_gui,
defines.input_action.open_blueprint_record,
defines.input_action.select_blueprint_entities,
defines.input_action.setup_blueprint,
defines.input_action.setup_single_blueprint_record,
defines.input_action.upgrade_open_blueprint,
defines.input_action.deconstruct,
defines.input_action.clear_selected_deconstruction_item,
defines.input_action.cancel_deconstruct,
defines.input_action.toggle_deconstruction_item_entity_filter_mode,
defines.input_action.toggle_deconstruction_item_tile_filter_mode,
defines.input_action.set_deconstruction_item_tile_selection_mode,
defines.input_action.set_deconstruction_item_trees_and_rocks_only
}
for _, d in pairs(defs) do
permission_group.set_allows_action(d, false)
end
2021-02-06 22:42:10 +02:00
end
local function enable_artillery(force, permission_group)
2021-03-24 17:46:00 +02:00
permission_group.set_allows_action(defines.input_action.use_artillery_remote, true)
force.technologies['artillery'].enabled = true
force.technologies['artillery-shell-range-1'].enabled = false
force.technologies['artillery-shell-speed-1'].enabled = false
force.recipes['artillery-turret'].enabled = true
force.recipes['artillery-wagon'].enabled = true
force.recipes['artillery-targeting-remote'].enabled = true
force.recipes['artillery-shell'].enabled = true
2021-02-06 22:42:10 +02:00
end
local function disable_artillery(force, permission_group)
2021-03-24 17:46:00 +02:00
permission_group.set_allows_action(defines.input_action.use_artillery_remote, false)
force.technologies['artillery'].enabled = false
force.technologies['artillery-shell-range-1'].enabled = false
force.technologies['artillery-shell-speed-1'].enabled = false
force.recipes['artillery-turret'].enabled = false
force.recipes['artillery-wagon'].enabled = false
force.recipes['artillery-targeting-remote'].enabled = false
force.recipes['artillery-shell'].enabled = false
2021-02-06 22:42:10 +02:00
end
local function disable_spidertron(force, permission_group)
2021-03-24 17:46:00 +02:00
permission_group.set_allows_action(defines.input_action.send_spidertron, false)
force.technologies['spidertron'].enabled = false
force.recipes['spidertron'].enabled = false
force.recipes['spidertron-remote'].enabled = false
2021-02-06 22:42:10 +02:00
end
local function disable_rockets(force)
2021-03-24 17:46:00 +02:00
force.technologies['rocketry'].enabled = false
force.technologies['explosive-rocketry'].enabled = false
force.recipes['rocket-launcher'].enabled = false
force.recipes['rocket'].enabled = false
force.recipes['explosive-rocket'].enabled = false
2021-02-06 22:42:10 +02:00
end
local function disable_nukes(force)
2021-03-24 17:46:00 +02:00
force.technologies['atomic-bomb'].enabled = false
force.recipes['atomic-bomb'].enabled = false
2021-02-06 22:42:10 +02:00
end
local function disable_cluster_grenades(force)
2021-03-24 17:46:00 +02:00
force.recipes['cluster-grenade'].enabled = false
2021-02-06 22:42:10 +02:00
end
local function enable_radar(force)
2021-03-24 17:46:00 +02:00
force.recipes['radar'].enabled = true
force.share_chart = true
force.clear_chart('nauvis')
2021-02-06 22:42:10 +02:00
end
local function disable_radar(force)
2021-03-24 17:46:00 +02:00
force.recipes['radar'].enabled = false
force.share_chart = false
force.clear_chart('nauvis')
2021-02-06 22:42:10 +02:00
end
local function disable_achievements(permission_group)
2021-03-24 17:46:00 +02:00
permission_group.set_allows_action(defines.input_action.open_achievements_gui, false)
2021-02-06 22:42:10 +02:00
end
local function disable_tips_and_tricks(permission_group)
2021-03-24 17:46:00 +02:00
permission_group.set_allows_action(defines.input_action.open_tips_and_tricks_gui, false)
2021-02-06 22:42:10 +02:00
end
-- setup a team force
function Public.add_new_force(force_name)
2021-03-24 17:46:00 +02:00
-- disable permissions
local force = game.create_force(force_name)
local permission_group = game.permissions.create_group(force_name)
reset_permissions(permission_group)
disable_blueprints(permission_group)
enable_artillery(force, permission_group)
disable_spidertron(force, permission_group)
disable_rockets(force)
disable_nukes(force)
disable_cluster_grenades(force)
enable_radar(force)
disable_achievements(permission_group)
disable_tips_and_tricks(permission_group)
-- friendly fire
force.friendly_fire = true
-- disable technologies
force.research_queue_enabled = true
-- balance initial combat
force.set_ammo_damage_modifier('landmine', -0.75)
force.set_ammo_damage_modifier('grenade', -0.5)
2021-02-06 22:42:10 +02:00
end
local function kill_force(force_name)
2021-03-24 17:46:00 +02:00
local ffatable = Table.get_table()
local force = game.forces[force_name]
local market = ffatable.town_centers[force_name].market
local surface = market.surface
surface.create_entity({name = 'big-artillery-explosion', position = market.position})
for _, player in pairs(force.players) do
if player.character then
player.character.die()
else
ffatable.requests[player.index] = 'kill-character'
end
player.force = game.forces.player
Public.set_player_color(player)
end
for _, e in pairs(surface.find_entities_filtered({force = force_name})) do
if e.valid then
if e.type == 'wall' or e.type == 'gate' then
e.die()
end
end
end
game.merge_forces(force_name, 'neutral')
ffatable.town_centers[force_name] = nil
ffatable.size_of_town_centers = ffatable.size_of_town_centers - 1
delete_chart_tag_for_all_forces(market)
game.print('>> ' .. force_name .. "'s town has fallen! [gps=" .. math.floor(market.position.x) .. ',' .. math.floor(market.position.y) .. ']', {255, 255, 0})
end
local player_force_disabled_recipes = {'lab', 'automation-science-pack', 'stone-brick', 'radar'}
local player_force_enabled_recipes = {
'submachine-gun',
'assembling-machine-1',
'small-lamp',
'shotgun',
'shotgun-shell',
'underground-belt',
'splitter',
'steel-plate',
'car',
'cargo-wagon',
'constant-combinator',
'engine-unit',
'green-wire',
'locomotive',
'rail',
'train-stop',
'arithmetic-combinator',
'decider-combinator'
}
2021-02-06 22:42:10 +02:00
-- setup the player force (this is the default for Outlanders)
local function setup_player_force()
2021-03-24 17:46:00 +02:00
local force = game.forces.player
local permission_group = game.permissions.create_group('outlander')
-- disable permissions
reset_permissions(permission_group)
disable_blueprints(permission_group)
disable_artillery(force, permission_group)
disable_spidertron(force, permission_group)
disable_rockets(force)
disable_nukes(force)
disable_cluster_grenades(force)
disable_radar(force)
disable_achievements(permission_group)
disable_tips_and_tricks(permission_group)
-- disable research
force.disable_research()
force.research_queue_enabled = false
-- friendly fire
force.friendly_fire = true
-- disable recipes
local recipes = force.recipes
for _, recipe_name in pairs(player_force_disabled_recipes) do
recipes[recipe_name].enabled = false
end
for _, recipe_name in pairs(player_force_enabled_recipes) do
recipes[recipe_name].enabled = true
end
force.set_ammo_damage_modifier('landmine', -0.75)
force.set_ammo_damage_modifier('grenade', -0.5)
2021-02-06 22:42:10 +02:00
end
local function setup_rogue_force()
2021-03-24 17:46:00 +02:00
local force_name = 'rogue'
local force = game.create_force(force_name)
local permission_group = game.permissions.create_group(force_name)
-- disable permissions
reset_permissions(permission_group)
disable_blueprints(permission_group)
disable_artillery(force, permission_group)
disable_spidertron(force, permission_group)
disable_rockets(force)
disable_nukes(force)
disable_cluster_grenades(force)
disable_radar(force)
disable_achievements(permission_group)
disable_tips_and_tricks(permission_group)
-- disable research
force.disable_research()
force.research_queue_enabled = false
-- friendly fire
force.friendly_fire = true
-- disable recipes
local recipes = force.recipes
for _, recipe_name in pairs(player_force_disabled_recipes) do
recipes[recipe_name].enabled = false
end
for _, recipe_name in pairs(player_force_enabled_recipes) do
recipes[recipe_name].enabled = true
end
force.set_ammo_damage_modifier('landmine', -0.75)
force.set_ammo_damage_modifier('grenade', -0.5)
2021-02-06 22:42:10 +02:00
end
local function setup_enemy_force()
2021-03-24 17:46:00 +02:00
local e_force = game.forces['enemy']
e_force.evolution_factor = 1 -- this should never change since we are changing biter types on spawn
e_force.set_friend(game.forces.player, true) -- outlander force (player) should not be attacked by turrets
e_force.set_cease_fire(game.forces.player, true) -- outlander force (player) should not be attacked by units
e_force.set_friend(game.forces['rogue'], false) -- rogue force (rogue) should be attacked by turrets
e_force.set_cease_fire(game.forces['rogue'], false) -- rogue force (rogue) should be attacked by units
-- note, these don't prevent an outlander or rogue from attacking a unit or spawner, we need to handle separately
2021-02-06 22:42:10 +02:00
end
local function on_player_dropped_item(event)
2021-03-24 17:46:00 +02:00
local player = game.players[event.player_index]
local entity = event.entity
if entity.stack.name == 'raw-fish' then
ally_town(player, entity)
return
end
if entity.stack.name == 'coal' then
declare_war(player, entity)
return
end
2021-02-06 22:42:10 +02:00
end
---- when a player dies, reveal their base to everyone
--local function on_player_died(event)
-- local player = game.players[event.player_index]
-- if not player.character then return end
-- if not player.character.valid then return end
-- reveal_entity_to_all(player.character)
--end
local function on_entity_damaged(event)
2021-03-24 17:46:00 +02:00
local entity = event.entity
if not entity.valid then
return
end
local cause = event.cause
local force = event.force
-- special case to handle enemies attacked by outlanders
if entity.force == game.forces['enemy'] then
if cause ~= nil then
if cause.type == 'character' and force == game.forces['player'] then
local player = cause.player
if force == game.forces['player'] then
-- set the force of the player to rogue until they die or create a town
set_player_to_rogue(player)
end
end
-- cars and tanks
if cause.type == 'car' or cause.type == 'tank' then
local driver = cause.get_driver()
if driver ~= nil and driver.force == game.forces['player'] then
-- set the force of the player to rogue until they die or create a town
set_player_to_rogue(driver)
end
local passenger = cause.get_passenger()
if passenger ~= nil and passenger.force == game.forces['player'] then
-- set the force of the player to rogue until they die or create a town
set_player_to_rogue(passenger)
end
end
-- trains
if cause.type == 'locomotive' or cause.type == 'cargo-wagon' or cause.type == 'fluid-wagon' or cause.type == 'artillery-wagon' then
local train = cause.train
for _, passenger in pairs(train.passengers) do
if passenger ~= nil and passenger.force == game.forces['player'] then
set_player_to_rogue(passenger)
end
end
end
-- combat robots
if cause.type == 'combat-robot' and force == game.forces['player'] then
local owner = cause.last_user
-- set the force of the player to rogue until they die or create a town
set_player_to_rogue(owner)
end
end
end
2021-02-06 22:42:10 +02:00
end
local function on_entity_died(event)
2021-03-24 17:46:00 +02:00
local entity = event.entity
if entity.name == 'market' then
kill_force(entity.force.name)
end
2021-02-06 22:42:10 +02:00
end
local function on_post_entity_died(event)
2021-03-24 17:46:00 +02:00
local prototype = event.prototype.type
if prototype ~= 'character' then
return
end
local entities = game.surfaces[event.surface_index].find_entities_filtered({position = event.position, radius = 1})
for _, e in pairs(entities) do
if e.type == 'character-corpse' then
Public.remove_key(e)
end
end
2021-02-06 22:42:10 +02:00
end
local function on_console_command(event)
2021-03-24 17:46:00 +02:00
set_town_color(event)
2021-02-06 22:42:10 +02:00
end
local function on_console_chat(event)
2021-03-24 17:46:00 +02:00
local player = game.players[event.player_index]
if string_match(string_lower(event.message), '%[armor%=') then
player.clear_console()
game.print('>> ' .. player.name .. ' is trying to gain an unfair advantage!')
end
2021-02-06 22:42:10 +02:00
end
function Public.initialize()
2021-03-24 17:46:00 +02:00
setup_player_force()
setup_rogue_force()
setup_enemy_force()
2021-02-06 22:42:10 +02:00
end
2021-03-24 17:46:00 +02:00
local on_init = function()
local ffatable = Table.get_table()
ffatable.key = {}
ffatable.spawn_point = {}
ffatable.requests = {}
2021-02-06 22:42:10 +02:00
end
local Event = require 'utils.event'
Event.on_init(on_init)
Event.add(defines.events.on_player_dropped_item, on_player_dropped_item)
Event.add(defines.events.on_entity_damaged, on_entity_damaged)
Event.add(defines.events.on_entity_died, on_entity_died)
Event.add(defines.events.on_post_entity_died, on_post_entity_died)
Event.add(defines.events.on_console_command, on_console_command)
Event.add(defines.events.on_console_chat, on_console_chat)
2021-03-24 17:46:00 +02:00
return Public