local Event = require 'utils.event' local Game = require 'utils.game' local RS = require 'map_gen.shared.redmew_surface' local function killBitters(pos) for k, v in pairs(RS.get_surface().find_entities_filtered({area = {{pos.x - 250, pos.y - 250}, {pos.x + 250, pos.y + 250}}, force = 'enemy'})) do v.destroy() end end local function dist(position1, position2) return ((position1.x - position2.x) ^ 2 + (position1.y - position2.y) ^ 2) ^ 0.5 end local function neForceNear(pos) for k, v in pairs(game.forces) do if dist(pos, v.get_spawn_position(RS.get_surface())) <= 50 then return false end end return true end local function validPlayer(name) if name ~= nil and Game.get_player_by_index(name) ~= nil and Game.get_player_by_index(name).force == game.forces.player then return true end return false end local function guiNewPlayer(gui) local frame = gui.add {type = 'frame', name = 'new_force', caption = {'gui.create-force'}, direction = 'vertical'} frame.add {type = 'button', name = 'new_button', caption = {'gui.new-force'}} end local function guiForcePlayer(gui) local frame = gui.add {type = 'frame', name = 'own_force', caption = {'gui.force'}, direction = 'vertical'} frame.add {type = 'textfield', name = 'inv_name'} frame.add {type = 'button', name = 'inv_button', caption = {'gui.invite'}} frame.add {type = 'button', name = 'leave_button', caption = {'gui.leave'}} end local function printNewPlayer(player) --player.print{"msg.info13"} --player.print{"msg.info14"} player.print {'msg.info1'} player.print {'msg.info2'} player.print {'msg.info3'} player.print {'msg.info4'} player.print {'msg.info5'} --player.print{"msg.info6"} --player.print{"msg.info7"} --player.print{"msg.info8"} end local function printForcePlayer(player) player.print {'msg.info11'} player.print {'msg.info12'} end Event.on_init( function() global.players = {} game.forces.enemy.set_cease_fire(game.forces.player, true) game.forces.player.disable_research() game.forces.player.disable_all_prototypes() game.forces.player.set_ammo_damage_modifier('rocket', -3) end ) Event.add( defines.events.on_player_created, function(event) local player = Game.get_player_by_index(event.player_index) --player.print("Info: PVP server mod 'Bearded Snails' (c) byte"); guiNewPlayer(player.gui.left) printNewPlayer(player) player.insert {name = 'heavy-armor', count = 1} player.insert {name = 'iron-plate', count = 8} player.insert {name = 'pistol', count = 1} player.insert {name = 'firearm-magazine', count = 10} player.insert {name = 'burner-mining-drill', count = 1} player.insert {name = 'stone-furnace', count = 1} player.insert {name = 'shotgun', count = 1} player.insert {name = 'shotgun-shell', count = 10} player.character.character_running_speed_modifier = 0.5 player.force.chart(player.surface, {{player.position.x - 200, player.position.y - 200}, {player.position.x + 200, player.position.y + 200}}) end ) Event.add( defines.events.on_player_respawned, function(event) local player = Game.get_player_by_index(event.player_index) player.insert {name = 'heavy-armor', count = 1} player.insert {name = 'pistol', count = 1} player.insert {name = 'firearm-magazine', count = 10} player.insert {name = 'shotgun', count = 1} player.insert {name = 'shotgun-shell', count = 10} player.character.character_running_speed_modifier = 0.5 end ) Event.add( defines.events.on_rocket_launched, function(event) local force = event.rocket.force if event.rocket.get_item_count('satellite') > 0 then if global.satellite_sent == nil then global.satellite_sent = {} end if global.satellite_sent[force.name] == nil then game.set_game_state {game_finished = true, player_won = true, can_continue = true} global.satellite_sent[force.name] = 1 else global.satellite_sent[force.name] = global.satellite_sent[force.name] + 1 end for index, player in pairs(force.players) do if player.gui.left.rocket_score == nil then local frame = player.gui.left.add {name = 'rocket_score', type = 'frame', direction = 'horizontal', caption = {'gui.score'}} frame.add {name = 'rocket_count_label', type = 'label', caption = {'', {'gui.rockets-sent'}, ':'}} frame.add {name = 'rocket_count', type = 'label', caption = tostring(global.satellite_sent[force.name])} else player.gui.left.rocket_score.rocket_count.caption = tostring(global.satellite_sent[force.name]) end end else for index, player in pairs(force.players) do player.print({'msg.gui-rocket-silo.rocket-launched-without-satellite'}) end end end ) Event.add( defines.events.on_gui_click, function(event) local player = Game.get_player_by_index(event.player_index) local gui = player.gui.left if player.force == game.forces.player and event.element.name == 'new_button' then if neForceNear(player.position) then local force = game.create_force(player.name) force.set_spawn_position(player.position, RS.get_surface()) player.force = force killBitters(player.position) player.force.chart(player.surface, {{player.position.x - 200, player.position.y - 200}, {player.position.x + 200, player.position.y + 200}}) player.force.set_ammo_damage_modifier('rocket', -3) player.force.research_all_technologies() gui.new_force.destroy() guiForcePlayer(gui) player.print {'msg.force-created'} printForcePlayer(player) else player.print {'msg.close-position'} end elseif event.element.name == 'inv_button' then local name = gui.own_force.inv_name.text if name ~= nil and validPlayer(name) then local iplayer = Game.get_player_by_index(name) local igui = iplayer.gui.left iplayer.force = player.force iplayer.teleport(player.force.get_spawn_position(RS.get_surface())) igui.new_force.destroy() guiForcePlayer(igui) player.print {'msg.player-invated', name} iplayer.print {'msg.you-invated', player.name} else player.print {'msg.invalid-name'} end elseif event.element.name == 'leave_button' and gui.own_force.inv_name.text == 'leave' then if #player.force.players == 1 then game.merge_forces(player.force.name, game.forces.player.name) gui.own_force.destroy() guiNewPlayer(gui) player.print {'msg.force-destroyed'} elseif #player.force.players > 1 then player.force = game.forces.player player.character.die() gui.own_force.destroy() guiNewPlayer(gui) player.print {'msg.force-leave'} end elseif event.element.name == 'leave_button' and gui.own_force.inv_name.text ~= 'leave' then player.print {'msg.force-leave-confim'} end end )