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:
parent
046a7214ae
commit
27a7e03461
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user