1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-03-11 14:49:24 +02:00

jail surface and explosive gun update

This commit is contained in:
Gerkiz 2020-08-21 20:11:47 +02:00
parent 046a7214ae
commit 27a7e03461
2 changed files with 167 additions and 13 deletions

View File

@ -32,25 +32,41 @@ function Public.explosive_bullets(event)
if random(1, 3) ~= 1 then
return false
end
local entity = event.entity
if not entity or not entity.valid then
local cause = event.cause
if not cause or not cause.valid then
return
end
if cause.name ~= 'character' then
return
end
if event.damage_type.name ~= 'physical' then
return false
end
local player = event.cause
if not player or not player.valid or player.name ~= 'character' then
return
end
local player = event.cause
if player.shooting_state.state == defines.shooting.not_shooting then
return false
return
end
local selected_weapon = player.get_inventory(defines.inventory.character_guns)[player.selected_gun_index]
if selected_weapon and selected_weapon.name ~= 'submachine-gun' and selected_weapon.name ~= 'pistol' then
return false
local weapon = player.get_inventory(defines.inventory.character_guns)[player.selected_gun_index]
local ammo = player.get_inventory(defines.inventory.character_ammo)[player.selected_gun_index]
if not weapon.valid_for_read or not ammo.valid_for_read then
return
end
if weapon.name ~= 'pistol' then
return
end
if
ammo.name ~= 'firearm-magazine' and ammo.name ~= 'piercing-rounds-magazine' and
ammo.name ~= 'uranium-rounds-magazine'
then
return
end
local entity = event.entity
if not entity or not entity.valid then
return
end
local surface = player.surface

View File

@ -9,6 +9,7 @@ local Utils = require 'utils.core'
local jailed_data_set = 'jailed'
local jailed = {}
local player_data = {}
local votejail = {}
local votefree = {}
local settings = {
@ -30,13 +31,15 @@ Global.register(
jailed = jailed,
votejail = votejail,
votefree = votefree,
settings = settings
settings = settings,
player_data = player_data
},
function(t)
jailed = t.jailed
votejail = t.votejail
votefree = t.votefree
settings = t.settings
player_data = t.player_data
end
)
@ -66,6 +69,123 @@ local validate_trusted = function(player)
return is_trusted
end
local get_player_data = function(player, remove)
if remove and player_data[player.index] then
player_data[player.index] = nil
return
end
if not player_data[player.index] then
player_data[player.index] = {}
end
return player_data[player.index]
end
local get_gulag_permission_group = function()
if not game.permissions.get_group('gulag') then
local gulag = game.permissions.create_group('gulag')
gulag.set_allows_action(defines.input_action.cancel_craft, false)
gulag.set_allows_action(defines.input_action.edit_permission_group, false)
gulag.set_allows_action(defines.input_action.import_permissions_string, false)
gulag.set_allows_action(defines.input_action.delete_permission_group, false)
gulag.set_allows_action(defines.input_action.add_permission_group, false)
gulag.set_allows_action(defines.input_action.admin_action, false)
gulag.set_allows_action(defines.input_action.drop_item, false)
gulag.set_allows_action(defines.input_action.place_equipment, false)
gulag.set_allows_action(defines.input_action.take_equipment, false)
end
local gulag = game.permissions.get_group('gulag')
return gulag
end
local create_gulag_surface = function()
local surface = game.surfaces['gulag']
if not surface then
local walls = {}
local tiles = {}
surface =
game.create_surface(
'gulag',
{
autoplace_controls = {
['coal'] = {frequency = 23, size = 3, richness = 3},
['stone'] = {frequency = 20, size = 3, richness = 3},
['copper-ore'] = {frequency = 25, size = 3, richness = 3},
['iron-ore'] = {frequency = 35, size = 3, richness = 3},
['uranium-ore'] = {frequency = 20, size = 3, richness = 3},
['crude-oil'] = {frequency = 80, size = 3, richness = 1},
['trees'] = {frequency = 0.75, size = 2, richness = 0.1},
['enemy-base'] = {frequency = 15, size = 0, richness = 1}
},
cliff_settings = {cliff_elevation_0 = 1024, cliff_elevation_interval = 10, name = 'cliff'},
height = 64,
width = 256,
peaceful_mode = false,
seed = 1337,
starting_area = 'very-low',
starting_points = {{x = 0, y = 0}},
terrain_segmentation = 'normal',
water = 'normal'
}
)
surface.always_day = true
surface.request_to_generate_chunks({0, 0}, 9)
surface.force_generate_chunk_requests()
local area = {left_top = {x = -128, y = -32}, right_bottom = {x = 128, y = 32}}
for x = area.left_top.x, area.right_bottom.x, 1 do
for y = area.left_top.y, area.right_bottom.y, 1 do
tiles[#tiles + 1] = {name = 'black-refined-concrete', position = {x = x, y = y}}
if x == area.left_top.x or x == area.right_bottom.x or y == area.left_top.y or y == area.right_bottom.y then
walls[#walls + 1] = {name = 'stone-wall', force = 'neutral', position = {x = x, y = y}}
end
end
end
surface.set_tiles(tiles)
for _, entity in pairs(walls) do
local e = surface.create_entity(entity)
e.destructible = false
e.minable = false
end
rendering.draw_text {
text = 'BAAAAAD HOOOOOMAAAAAN!!',
surface = surface,
target = {0, -50},
color = {r = 0.98, g = 0.66, b = 0.22},
scale = 10,
font = 'heading-1',
alignment = 'center',
scale_with_zoom = false
}
end
surface = game.surfaces['gulag']
return surface
end
local teleport_player_to_gulag = function(player, action)
local p_data = get_player_data(player)
if action == 'jail' then
local surface = game.surfaces['gulag']
p_data.fallback_surface_index = player.surface.index
player.teleport(surface.find_non_colliding_position('character', {0, 0}, 2, 1), 'gulag')
elseif action == 'free' then
if p_data.fallback_surface_index then
local surface = game.surfaces[p_data.fallback_surface_index]
player.teleport(
surface.find_non_colliding_position(
'character',
game.forces.player.get_spawn_position(surface),
3,
0,
5
),
surface
)
get_player_data(player, true)
end
end
end
local validate_args = function(player, griefer)
if not game.players[griefer] then
Utils.print_to(player, 'Invalid name.')
@ -158,6 +278,9 @@ local jail = function(player, griefer)
return
end
local g = game.players[griefer]
teleport_player_to_gulag(g, 'jail')
local permission_group = game.permissions.get_group('prisoner')
if not permission_group then
permission_group = game.permissions.create_group('prisoner')
@ -168,7 +291,12 @@ local jail = function(player, griefer)
permission_group.set_allows_action(defines.input_action.gui_click, true)
permission_group.set_allows_action(defines.input_action.gui_selection_state_changed, true)
end
permission_group.add_player(griefer)
if g.surface.name == 'gulag' then
local gulag = get_gulag_permission_group()
gulag.add_player(griefer)
else
permission_group.add_player(griefer)
end
local message = griefer .. ' has been jailed by ' .. player .. '.'
if
@ -200,8 +328,16 @@ local free = function(player, griefer)
return
end
local g = game.players[griefer]
teleport_player_to_gulag(g, 'free')
local permission_group = game.permissions.get_group('Default')
permission_group.add_player(griefer)
if g.surface.name == 'gulag' then
local gulag = get_gulag_permission_group()
gulag.add_player(griefer)
else
permission_group.add_player(griefer)
end
local message = griefer .. ' was set free from jail by ' .. player .. '.'
jailed[griefer] = nil
@ -376,6 +512,8 @@ Event.add(
end
)
Event.on_init(create_gulag_surface)
Server.on_data_set_changed(
jailed_data_set,
function(data)