Merge branch 'master' into testing

This commit is contained in:
Cooldude2606
2018-05-14 19:48:22 +01:00
26 changed files with 219 additions and 144 deletions

View File

@@ -41,7 +41,12 @@ local commands = {
['magic']={'chat-bot.magic'}, ['magic']={'chat-bot.magic'},
['aids']={'chat-bot.aids'}, ['aids']={'chat-bot.aids'},
['riot']={'chat-bot.riot'}, ['riot']={'chat-bot.riot'},
['lenny']={'chat-bot.lenny'} ['lenny']={'chat-bot.lenny'},
['maketea']=function(player) Server.new_thread{
timeout=math.floor(180*(math.random()+0.5)),data=player.name
}:on_event('timeout',function(self)
if self.data then game.print{'chat-bot.message',{'chat-bot.make-tea-2',self.data}} end
end):open() return {'chat-bot.make-tea-1'} end
} }
Event.register(defines.events.on_console_chat,function(event) Event.register(defines.events.on_console_chat,function(event)

View File

@@ -33,7 +33,7 @@ function get_player_info(player,frame,add_cam)
frame.add{type='label',caption={'player-info.group',_player.group}} frame.add{type='label',caption={'player-info.group',_player.group}}
frame.add{type='label',caption={'player-info.rank',_player.rank}} frame.add{type='label',caption={'player-info.rank',_player.rank}}
if add_cam then if add_cam then
Gui.cam_link{entity=player.character,frame=frame,width=200,height=75,zoom=0.5,respawn_open=true} Gui.cam_link{entity=player.character,frame=frame,width=200,height=150,zoom=0.5,respawn_open=true}
end end
end end
return _player return _player

View File

@@ -13,7 +13,8 @@ commands.add_command('report', 'Reports a player.', {'player','reason',true}, fu
local player = Game.get_player(args.player) local player = Game.get_player(args.player)
local reason = args.reason local reason = args.reason
if not player then player_return({'commands.invalid-player',args.player}) return commands.error end if not player then player_return({'commands.invalid-player',args.player}) return commands.error end
if Ranking.get_rank(player):allowed('no-report') or Admin.is_banned(player) then player_return({'reports.cant-report',args.player}) return commands.error end if Admin.is_banned(player) then player_return({'reports.cant-report-ban',args.player}) return commands.error end
if Ranking.get_rank(player):allowed('no-report') then player_return({'reports.cant-report',args.player}) return commands.error end
for _,report in pairs(global.addons.reports.reports) do if report[1] == _player.name then player_return({'reports.cant-report',args.player}) return commands.error end end for _,report in pairs(global.addons.reports.reports) do if report[1] == _player.name then player_return({'reports.cant-report',args.player}) return commands.error end end
for _,report in pairs(global.addons.reports.varified) do if report[1] == _player.name then player_return({'reports.cant-report',args.player}) return commands.error end end for _,report in pairs(global.addons.reports.varified) do if report[1] == _player.name then player_return({'reports.cant-report',args.player}) return commands.error end end
Admin.report(player,event.player_index,reason) Admin.report(player,event.player_index,reason)
@@ -23,7 +24,8 @@ commands.add_command('warn', 'Gives a player a warnings', {'player','reason',tru
local player = Game.get_player(args.player) local player = Game.get_player(args.player)
local reason = args.reason local reason = args.reason
if not player then player_return({'commands.invalid-player',args.player}) return commands.error end if not player then player_return({'commands.invalid-player',args.player}) return commands.error end
if Ranking.get_rank(player):allowed('no-report') or Admin.is_banned(player) then player_return({'reports.cant-report',args.player}) return commands.error end if Admin.is_banned(player) then player_return({'reports.cant-report-ban',args.player}) return commands.error end
if Ranking.get_rank(player):allowed('no-report') then player_return({'reports.cant-report',args.player}) return commands.error end
Admin.give_warning(player,event.player_index,reason) Admin.give_warning(player,event.player_index,reason)
end) end)
@@ -31,13 +33,15 @@ commands.add_command('jail', 'Jails a player', {'player','reason',true}, functio
local player = Game.get_player(args.player) local player = Game.get_player(args.player)
local reason = args.reason local reason = args.reason
if not player then player_return({'commands.invalid-player',args.player}) return commands.error end if not player then player_return({'commands.invalid-player',args.player}) return commands.error end
if Ranking.get_rank(player):allowed('no-report') or Admin.is_banned(player) then player_return({'reports.cant-report',args.player}) return commands.error end if Ranking.get_rank(player):allowed('no-report') then player_return({'reports.cant-report',args.player}) return commands.error end
if Admin.is_banned(player) then player_return({'commands.cant-report-ban',args.player}) return commands.error end
Admin.jail(player,event.player_index,reason) Admin.jail(player,event.player_index,reason)
end) end)
commands.add_command('unjail', 'Returns the players old rank', {'player',true}, function(event,args) commands.add_command('unjail', 'Returns the players old rank', {'player',true}, function(event,args)
local player = Game.get_player(args.player) local player = Game.get_player(args.player)
if not player then player_return({'commands.invalid-player',args.player}) return commands.error end if not player then player_return({'commands.invalid-player',args.player}) return commands.error end
if Admin.is_banned(player) then player_return({'commands.cant-report-ban',args.player}) return commands.error end
Ranking.revert(player,event.player_index) Ranking.revert(player,event.player_index)
end) end)
@@ -45,25 +49,28 @@ commands.add_command('temp-ban', 'Temporarily ban a player.', {'player','reason'
local player = Game.get_player(args.player) local player = Game.get_player(args.player)
local reason = args.reason local reason = args.reason
if not player then player_return({'commands.invalid-player',args.player}) return commands.error end if not player then player_return({'commands.invalid-player',args.player}) return commands.error end
if Admin.is_banned(player) then player_return({'reports.cant-report',args.player}) return commands.error end if Admin.is_banned(player) then player_return({'reports.cant-report-ban',args.player}) return commands.error end
Admin.temp_ban(player,event.player_index,reason) Admin.temp_ban(player,event.player_index,reason)
end) end)
commands.add_command('clear-inv', 'Clears the player\'s invetory', {'player'}, function(event,args) commands.add_command('clear-inv', 'Clears the player\'s invetory', {'player'}, function(event,args)
local player = Game.get_player(args.player) local player = Game.get_player(args.player)
if not player then player_return({'commands.invalid-player',args.player}) return commands.error end if not player then player_return({'commands.invalid-player',args.player}) return commands.error end
if Admin.is_banned(player) then player_return({'reports.cant-report-ban',args.player}) return commands.error end
Admin.move_inventory(player) Admin.move_inventory(player)
end) end)
commands.add_command('clear-warings', 'Clears the warnings on a player.', {'player'}, function(event,args) commands.add_command('clear-warnings', 'Clears the warnings on a player.', {'player'}, function(event,args)
local player = Game.get_player(args.player) local player = Game.get_player(args.player)
if not player then player_return({'commands.invalid-player',args.player}) return commands.error end if not player then player_return({'commands.invalid-player',args.player}) return commands.error end
if Admin.is_banned(player) then player_return({'reports.cant-report-ban',args.player}) return commands.error end
Admin.clear_warings(player,event.player_index) Admin.clear_warings(player,event.player_index)
end) end)
commands.add_command('clear-reports', 'Clears the reports on a player.', {'player'}, function(event,args) commands.add_command('clear-reports', 'Clears the reports on a player.', {'player'}, function(event,args)
local player = Game.get_player(args.player) local player = Game.get_player(args.player)
if not player then player_return({'commands.invalid-player',args.player}) return commands.error end if not player then player_return({'commands.invalid-player',args.player}) return commands.error end
if Admin.is_banned(player) then player_return({'reports.cant-report-ban',args.player}) return commands.error end
Admin.clear_reports(player,event.player_index) Admin.clear_reports(player,event.player_index)
end) end)

View File

@@ -54,6 +54,13 @@ end)
Event.register(defines.events.on_pre_player_died,function(event) Event.register(defines.events.on_pre_player_died,function(event)
local player = Game.get_player(event) local player = Game.get_player(event)
if Ranking.get_rank(player):allowed('bonus-respawn') then if Ranking.get_rank(player):allowed('bonus-respawn') then
player.ticks_to_respawn = 60 player.ticks_to_respawn = 120
-- manually dispatch death event because it is not fired when ticks_to_respawn is set pre death
Event.dispatch{
name=defines.events.on_player_died,
tick=event.tick,
player_index=event.player_index,
cause = event.cause
}
end end
end) end)

View File

@@ -14,14 +14,14 @@ local function _homes(reset)
return global.addons.homes return global.addons.homes
end end
commands.add_command('set-home', 'Set Your Home Possition', {}, function(event,args) commands.add_command('set-home', 'Set your home position', {}, function(event,args)
local player = Game.get_player(event) local player = Game.get_player(event)
if not _homes()[player.index] then _homes()[player.index] = {player.force.get_spawn_position(player.surface),player.force.get_spawn_position(player.surface)} end if not _homes()[player.index] then _homes()[player.index] = {player.force.get_spawn_position(player.surface),player.force.get_spawn_position(player.surface)} end
_homes()[player.index][1] = {math.floor(player.position.x),math.floor(player.position.y)} _homes()[player.index][1] = {math.floor(player.position.x),math.floor(player.position.y)}
player_return('Home set at: ('..math.floor(player.position.x)..','..math.floor(player.position.y)..')') player_return('Home set at: ('..math.floor(player.position.x)..','..math.floor(player.position.y)..')')
end) end)
commands.add_command('home', 'Goto you home possition', {}, function(event,args) commands.add_command('home', 'Go to you home position', {}, function(event,args)
local player = Game.get_player(event) local player = Game.get_player(event)
if not _homes()[player.index] then _homes()[player.index] = {player.force.get_spawn_position(player.surface),player.force.get_spawn_position(player.surface)} end if not _homes()[player.index] then _homes()[player.index] = {player.force.get_spawn_position(player.surface),player.force.get_spawn_position(player.surface)} end
_homes()[player.index][2] = {math.floor(player.position.x),math.floor(player.position.y)} _homes()[player.index][2] = {math.floor(player.position.x),math.floor(player.position.y)}

View File

@@ -28,18 +28,20 @@ commands.add_command('repair', 'Repairs all destoryed and damaged entites in an
local max_range = rank.power-highest_admin_power > 0 and const/(rank.power-highest_admin_power) or nil local max_range = rank.power-highest_admin_power > 0 and const/(rank.power-highest_admin_power) or nil
local center = player and player.position or {x=0,y=0} local center = player and player.position or {x=0,y=0}
if not range or max_range and range > max_range then player_return({'commands.invalid-range',0,math.floor(max_range)}) return commands.error end if not range or max_range and range > max_range then player_return({'commands.invalid-range',0,math.floor(max_range)}) return commands.error end
for x = -range-2, range+2 do local area = {{center.x-range,center.y-range},{center.x+range,center.y+range}}
for y = -range-2, range+2 do local max_time_to_live = 2^32 - 1
if x^2+y^2 < range^2 then local sq_range = range^2
for key, entity in pairs(player.surface.find_entities_filtered({area={{x+center.x,y+center.y},{x+center.x+1,y+center.y+1}},type='entity-ghost'})) do for key, entity in pairs(player.surface.find_entities_filtered({area=area,type='entity-ghost'})) do
if entity.force == player.force and (entity.position.x-center.x)^2+(entity.position.y-center.y)^2 < sq_range then
if disallow[entity.ghost_prototype.name] then if disallow[entity.ghost_prototype.name] then
player_return('You have repaired: '..entity.name..' this item is not allowed.',defines.text_color.crit,player) player_return('You have repaired: '..entity.name..' this item is not allowed.',defines.text_color.crit,player)
Admin.temp_ban(player,'<server>','Attempt To Repair A Banned Item') Admin.temp_ban(player,'<server>','Attempt To Repair A Banned Item')
entity.destroy() entity.destroy()
else entity.revive() end elseif entity.time_to_live ~= max_time_to_live then
end entity.revive() end
for key, entity in pairs(player.surface.find_entities({{x+center.x,y+center.y},{x+center.x+1,y+center.y+1}})) do if entity.health then entity.health = 10000 end end
end end
end end
for key, entity in pairs(player.surface.find_entities(area)) do
if entity.force == player.force and (entity.position.x-center.x)^2+(entity.position.y-center.y)^2 < sq_range and entity.health then entity.health = 10000 end
end end
end) end)

View File

@@ -133,7 +133,7 @@ Admin.center = Gui.center.add{
type='flow', type='flow',
direction='vertical' direction='vertical'
} }
player_info_flow.style.height = 200 player_info_flow.style.height = 300
player_info_flow.style.width = 200 player_info_flow.style.width = 200
local label = dropdowns.add{ local label = dropdowns.add{
type='label', type='label',

View File

@@ -132,19 +132,33 @@ local next = Gui.inputs.add{
draw_poll(parent.parent.poll_area) draw_poll(parent.parent.poll_area)
end) end)
-- this function from redmew, would take too much to make a better one local poll_question_input = Gui.inputs.add_text('poll-question-input',true,'Question',function(player,text,element)
local options = element.parent.options
if not options.question then options.add{type='label',name='question',caption=''}
else options.question.caption = text end
end)
local _self_referace_poll_option_input = nil
local poll_option_input = Gui.inputs.add_text('poll-option-input',true,'Enter Option',function(player,text,element)
local options = element.parent.parent.parent.options
if not options[element.parent.name] then options.add{type='label',name=element.parent.name,caption=text}
else options[element.parent.name].caption = text end
if options.last.caption == element.parent.name then
options.last.caption = tonumber(options.last.caption)+1
_self_referace_poll_option_input:draw(element.parent.parent.add{type='flow',name=options.last.caption}).style.minimal_width = 200
end
end)
_self_referace_poll_option_input = poll_option_input
local function poll_assembler(frame) local function poll_assembler(frame)
frame.clear() frame.clear()
local frame_table = frame.add { type = 'table', name = 'table_poll_assembler', column_count = 2 } local options = frame.add{type='flow',name='options'}
frame_table.add { type = 'label', caption = 'Question:' } options.style.visible = false
frame_table.add { type = 'textfield', name = 'textfield_question', text = '' } options.add{type='label',name='last',caption='2'}
frame_table.add { type = 'label', caption = 'Option #1:' } poll_question_input:draw(frame).style.minimal_width = 200
frame_table.add { type = 'textfield', name = 'textfield_answer_1', text = '' } local flow = frame.add{type='flow',direction='vertical'}
frame_table.add { type = 'label', caption = 'Option #2:' } poll_option_input:draw(flow.add{type='flow',name='1'}).style.minimal_width = 200
frame_table.add { type = 'textfield', name = 'textfield_answer_2', text = '' } poll_option_input:draw(flow.add{type='flow',name='2'}).style.minimal_width = 200
frame_table.add { type = 'label', caption = 'Option #3:' }
frame_table.add { type = 'textfield', name = 'textfield_answer_3', text = '' }
frame_table.add { type = 'label', caption = '' }
end end
local create_poll = Gui.inputs.add{ local create_poll = Gui.inputs.add{
@@ -154,17 +168,24 @@ local create_poll = Gui.inputs.add{
}:on_event('click',function(event) }:on_event('click',function(event)
local parent = event.element.parent local parent = event.element.parent
if event.element.sprite == 'utility/enter' then if event.element.sprite == 'utility/enter' then
local inputs = parent.parent.poll_area.table_poll_assembler local inputs = parent.parent.poll_area.options
if not inputs then if not inputs then
event.element.sprite = 'utility/add' event.element.sprite = 'utility/add'
draw_poll(parent.parent.poll_area) draw_poll(parent.parent.poll_area)
return return
end end
local uuid = _poll_data(inputs.textfield_question.text,{ local options = {}
inputs.textfield_answer_1.text, for _,option in pairs(inputs.children) do
inputs.textfield_answer_2.text, if option.name ~= 'question' and option.name ~= 'last' then
inputs.textfield_answer_3.text if option.caption ~= 'Enter Option' and option.caption ~= '' then table.insert(options,option.caption) end
}) end
end
if not inputs.question or #options == 0 then
event.element.sprite = 'utility/add'
draw_poll(parent.parent.poll_area)
return
end
local uuid = _poll_data(inputs.question.caption,options)
Gui.popup.open('polls',{uuid=uuid}) Gui.popup.open('polls',{uuid=uuid})
event.element.sprite = 'utility/add' event.element.sprite = 'utility/add'
draw_poll(parent.parent.poll_area) draw_poll(parent.parent.poll_area)

View File

@@ -84,3 +84,21 @@ Gui.left.add{
} }
Event.register(defines.events.on_rocket_launched,function(event) Gui.left.update('rockets') end) Event.register(defines.events.on_rocket_launched,function(event) Gui.left.update('rockets') end)
Sync.add_update('rockets',function()
local _return = {}
local data = _global()
local satellites = game.forces.player.get_item_launched('satellite')
local time = {'rockets.nan'}
if satellites == 1 then time = tick_to_display_format(game.tick)
elseif satellites > 1 then time = tick_to_display_format((game.tick-data.first)/satellites) end
_return.total = satellites
_return.first = Sync.tick_format(data.first)
_return.last = Sync.tick_format(data.last-data._last)
_return.time = Sync.tick_format(time)
_return.fastest = Sync.tick_format(data.fastest)
_return.milestones = {}
for milestone,time in pairs(data.milestones) do
_return.milestones[milestone] = Sync.tick_format(time)
end
return _return
end)

View File

@@ -84,3 +84,19 @@ Gui.left.add{
} }
Event.register(defines.events.on_research_finished,function(event) Gui.left.update('science') end) Event.register(defines.events.on_research_finished,function(event) Gui.left.update('science') end)
Sync.add_update('science',function()
local _return = {}
local _data = _global()
for force_name,data in pairs(_data) do
if force_name ~= '_base' then
_return[force_name] = {totals={},times={}}
for i,name in pairs(science_packs) do
local made = data.made[i]
_return[force_name].totals[name] = made
local _made = string.format('%.2f',(made-data._made[i])/((data.update-data._update)/(3600*game.speed)))
_return[force_name].times[name] = _made
end
end
end
return _return
end)

View File

@@ -108,6 +108,7 @@ local function _tasks(player)
return _global().tasks return _global().tasks
elseif not data._edit and _edit then elseif not data._edit and _edit then
data._edit = true data._edit = true
for key,_ in pairs(data._tasks) do if not data._editing[key] then data._editing[key] = false end end
return data._tasks return data._tasks
elseif _edit then return data._tasks elseif _edit then return data._tasks
else return _global().tasks else return _global().tasks

View File

@@ -85,7 +85,10 @@ local function make_warp_point(position,surface,force,name)
icon={type='item',name=warp_item} icon={type='item',name=warp_item}
}) })
_warps().warps[name] = {tag=tag,surface=surface,position=tag.position,old_tile=old_tile} _warps().warps[name] = {tag=tag,surface=surface,position=tag.position,old_tile=old_tile}
_warps().warps = table.keysort(_warps().warps) local _temp = {Spawn=_warps().warps.Spawn}
_warps().warps.Spawn = nil
for name,data in pairs(table.keysort(_warps().warps)) do _temp[name] = data end
_warps().warps = _temp
Gui.left.update('warp-list') Gui.left.update('warp-list')
end end
@@ -94,6 +97,8 @@ commands.add_command('make-warp', 'Make a warp point at your location', {'name',
local position = game.player.position local position = game.player.position
local name = args.name local name = args.name
if _warps().warps[name] then player_return({'warp-system.name-used'},defines.text_color.med) return commands.error end if _warps().warps[name] then player_return({'warp-system.name-used'},defines.text_color.med) return commands.error end
if position.x^2 + position.y^2 < 100 then player_return({'warp-system.too-close'},defines.text_color.med) return commands.error end
-- to do add a test for all warps
make_warp_point(position,game.player.surface,game.player.force,name) make_warp_point(position,game.player.surface,game.player.force,name)
end) end)

View File

@@ -38,7 +38,7 @@ require('Guis/rockets')
require('Guis/player-list') require('Guis/player-list')
require('Guis/tasklist') require('Guis/tasklist')
require('Guis/warp-system') require('Guis/warp-system')
--require('Guis/polls') -- too many desyncs require('Guis/polls') -- too many desyncs
require('Guis/announcements') require('Guis/announcements')
require('Guis/rank-changer') require('Guis/rank-changer')
require('Guis/admin-gui') -- used with Admin/admin, requires Admin/admin require('Guis/admin-gui') -- used with Admin/admin, requires Admin/admin

View File

@@ -12,5 +12,5 @@ require('colours')
require('health') require('health')
require('spawn') require('spawn')
require('starting-items') require('starting-items')
--require('paths') -- takes up too much file size require('paths')
require('body-marker') require('body-marker')

View File

@@ -1,110 +1,100 @@
-- made by cooldude -- made by cooldude
-- idea from Mylon - Dirt Path -- idea from Mylon - Dirt Path
local clean_time = 18000 -- time in ticks local adjacency_boost = 1.3 -- makes paths more lickly to be next to each other
local placed_paths = {
['refined-concrete']=true,
['refined-hazard-concrete-right']=true,
['refined-hazard-concrete-left']=true,
['concrete']=true,
['hazard-concrete-right']=true,
['hazard-concrete-left']=true,
['stone-path']=true
}
local paths = { local paths = {
-- ['tile name'] = {health,convert to} -- ['tile name'] = {health,convert to}
-- health is in hundrads of steps -- health is the average number of steps in hundards before it changes
['refined-concrete']={60,'concrete'}, ['refined-concrete']={30,'concrete'},
['refined-hazard-concrete-right']={60,'hazard-concrete-right'}, ['refined-hazard-concrete-right']={30,'hazard-concrete-right'},
['refined-hazard-concrete-left']={60,'hazard-concrete-left'}, ['refined-hazard-concrete-left']={30,'hazard-concrete-left'},
['concrete']={40,'stone-path'}, ['concrete']={25,'stone-path'},
['hazard-concrete-right']={40,'stone-path'}, ['hazard-concrete-right']={25,'stone-path'},
['hazard-concrete-left']={40,'stone-path'}, ['hazard-concrete-left']={25,'stone-path'},
['stone-path']={20,'world-gen'}, -- world-gen just makes it pick the last tile not placed by a player ['stone-path']={10,'world-gen'}, -- world-gen just makes it pick the last tile not placed by a player
['sand-1']={5,'sand-2'}, ['sand-1']={1,'sand-2'},
['sand-2']={10,'sand-3'}, ['sand-2']={5,'sand-3'},
['sand-3']={5,'red-desert-3'}, ['sand-3']={1,'red-desert-3'},
['red-desert-3']={5,'red-desert-2'}, ['red-desert-3']={1,'red-desert-2'},
['red-desert-2']={10,'dirt-1'}, ['red-desert-2']={5,'dirt-1'},
['grass-2']={5,'grass-1'}, ['grass-2']={1,'grass-1'},
['grass-1']={5,'grass-3'}, ['grass-1']={1,'grass-3'},
['grass-3']={10,'red-desert-0'}, ['grass-3']={5,'red-desert-0'},
['red-desert-0']={5,'red-desert-1'}, ['red-desert-0']={1,'red-desert-1'},
['red-desert-1']={10,'dirt-1'}, ['red-desert-1']={5,'dirt-1'},
['dirt-1']={5,'dirt-2'}, ['dirt-1']={1,'dirt-2'},
['dirt-2']={5,'dirt-3'}, ['dirt-2']={1,'dirt-3'},
['dirt-3']={10,'dirt-4'}, ['dirt-3']={5,'dirt-4'},
['dirt-4']={5,'dirt-5'}, ['dirt-4']={1,'dirt-5'},
['dirt-5']={5,'dirt-6'}, ['dirt-5']={1,'dirt-6'},
['grass-4']={10,'dirt-4'} ['grass-4']={5,'dirt-4'}
} }
for tile,value in pairs(paths) do for tile,value in pairs(paths) do
value[1]=value[1]*100 value[1]=1/(value[1]*150) -- 150 do make it so about 75% will change by the expected value
end end
local function global_key(surface,pos) local function global_key(surface,pos)
local key = 'S'..surface.name..'X'..math.floor(pos.x)..'Y'..math.floor(pos.y) return 'S'..surface.name..'X'..math.floor(pos.x)..'Y'..math.floor(pos.y)
if not global.paths then global.paths = {} end
if not global.paths[key] then
local tile = surface.get_tile(pos).name
global.paths[key] = {tile,paths[tile][1]}
end
return global.paths[key]
end
local function remove_key(surface,pos)
local key = 'S'..surface.name..'X'..math.floor(pos.x)..'Y'..math.floor(pos.y)
if not global.paths then global.paths = {} end
global.paths[key] = nil
end
local function clean_global()
if not global.paths or not game then return end
for key,tile in pairs(global.paths) do
if tile[3] and tile[3] < game.tick-clean_time then global.paths[key] = nil end
end
end end
local function down_grade(surface,pos) local function down_grade(surface,pos)
local tile = surface.get_tile(pos).name local tile = surface.get_tile(pos).name
local new_tile = paths[tile][2] local new_tile = paths[tile][2]
if new_tile == 'world-gen' then new_tile = global_key(surface,pos)[1] or 'grass-1' end if new_tile == 'world-gen' then
if global.paths == nil then global.paths = {} end -- nil as you can set to false to disable
new_tile = global.paths[global_key(surface,pos)] or 'grass-1'
end
surface.set_tiles{{name=new_tile,position=pos}} surface.set_tiles{{name=new_tile,position=pos}}
global_key(surface,pos)[2]=paths[new_tile][1]
if not paths[new_tile] then remove_key(surface,pos) return end
end end
Event.register(defines.events.on_player_built_tile, function(event) Event.register(defines.events.on_player_built_tile, function(event)
local surface = game.surfaces[event.surface_index] local surface = game.surfaces[event.surface_index]
local old_tiles = event.tiles local old_tiles = event.tiles
for _,old_tile in pairs(old_tiles) do for _,old_tile in pairs(old_tiles) do
if old_tile.old_tile.name ~= 'refined-concrete' and old_tile.old_tile.name ~= 'refined-hazard-concrete-right' if placed_paths[old_tile.old_tile.name] or old_tile.old_tile.name == 'water' or old_tile.old_tile.name == 'deep-water' then else
and old_tile.old_tile.name ~= 'refined-hazard-concrete-left' and old_tile.old_tile.name ~= 'concrete' if global.paths == nil then global.paths = {} end -- nil as you can set to false to disable
and old_tile.old_tile.name ~= 'hazard-concrete-right' and old_tile.old_tile.name ~= 'hazard-concrete-left' global.paths[global_key(surface,old_tile.position)]=old_tile.old_tile.name
and old_tile.old_tile.name ~= 'stone-path' and old_tile.old_tile.name ~= 'water' and old_tile.old_tile.name ~= 'deep-water' then
global_key(surface,old_tile.position)[1]=old_tile.old_tile.name
end end
if not paths[surface.get_tile(old_tile.position).name] then remove_key(surface,old_tile.position) return end
global_key(surface,old_tile.position)[2]=paths[surface.get_tile(old_tile.position).name][1]
global_key(surface,old_tile.position)[3] = event.tick
end
end)
Event.register(defines.events.on_player_mined_tile, function(event)
local surface = game.surfaces[event.surface_index]
local old_tiles = event.tiles
for _,old_tile in pairs(old_tiles) do
if not paths[surface.get_tile(old_tile.position).name] then remove_key(surface,old_tile.position) return end
global_key(surface,old_tile.position)[2]=paths[surface.get_tile(old_tile.position).name][1]
global_key(surface,old_tile.position)[3] = event.tick
end end
end) end)
Event.register(defines.events.on_player_changed_position, function(event) Event.register(defines.events.on_player_changed_position, function(event)
local player = Game.get_player(event) local player = Game.get_player(event)
if player.afk_time > 300 then return end
local surface = player.surface local surface = player.surface
local pos = player.position local pos = player.position
if not paths[surface.get_tile(pos).name] then remove_key(surface,pos) return end local tile_name = surface.get_tile(pos).name
global_key(surface,pos)[2] = global_key(surface,pos)[2]-1 if not paths[tile_name] then return end
if global_key(surface,pos)[2] <= 0 then local chance = paths[tile_name][1]
for x = -1,1 do for y = -1,1 do
local _pos = {pos.x+x,pos.y+y}
if paths[tile_name][2] == 'world-gen' and not placed_paths[surface.get_tile(_pos).name]
or surface.get_tile(_pos).name == paths[tile_name][2]
then chance=chance*adjacency_boost end
end end
if math.random() < chance then
down_grade(surface,pos) down_grade(surface,pos)
end end
global_key(surface,pos)[3] = event.tick
end) end)
Event.register(defines.events.on_tick, function(event) --[[
if (game.tick%clean_time) == 0 then /interface
clean_global() local tile_name = tile.name
local chance = paths[tile_name][1]
for x = -1,1 do for y = -1,1 do
local _pos = {position.x+x,position.y+y}
if paths[tile_name][2] == 'world-gen' and not placed_paths[surface.get_tile(_pos).name]
or surface.get_tile(_pos).name == paths[tile_name][2]
then game.print('boost'..tostring(math.random())) chance=chance*adjacency_boost end end
end end
end) return chance
]]

View File

@@ -22,6 +22,7 @@ Event.register(defines.events.on_player_created, function(event)
local player = game.players[event.player_index] local player = game.players[event.player_index]
if event.player_index == 1 then if event.player_index == 1 then
player.force.friendly_fire = false player.force.friendly_fire = false
game.map_settings.enemy_expansion.enabled = false
player.force.chart(player.surface, {{player.position.x - 400, player.position.y - 400}, {player.position.x + 400, player.position.y + 400}}) player.force.chart(player.surface, {{player.position.x - 400, player.position.y - 400}, {player.position.x + 400, player.position.y + 400}})
end end
for item,count in pairs(items) do for item,count in pairs(items) do

View File

@@ -1,3 +1,3 @@
[base-damage] [base-damage]
used=You hit some of your own buildings. Please be careful next time! used=You hit some of your own buildings. Please be careful next time!
nukes=Nukes are not allowed in your rank. This is a preventive measure against griefers. nuke=Nukes are not allowed in your rank. This is a preventive measure against griefers.

View File

@@ -13,10 +13,12 @@ read-readme=Make sure you have read the Readme (can be found through the questio
not-real-dev=Cooldude2606 is a dev for this server and makes the softmod (look top left) and is not a factorio dev. not-real-dev=Cooldude2606 is a dev for this server and makes the softmod (look top left) and is not a factorio dev.
softmod=A softmod is a custom scenario that runs on this server, example is the player list. softmod=A softmod is a custom scenario that runs on this server, example is the player list.
blame=Blame __1__ for what just happend! blame=Blame __1__ for what just happend!
afk=Your afk? Look at __1__ they have been afk for: __2__ afk=Your afk? Look at __1__, that player has been afk for: __2__
links=To see links open the readme and click links. links=To see links open the readme and click links.
magic=Fear the admin magic (ノ゚∀゚)ノ⌒・*:.。. .。.:*・゜゚・*☆ magic=Fear the admin magic (ノ゚∀゚)ノ⌒・*:.。. .。.:*・゜゚・*☆
aids=≖ ‿ ≖ Fear the aids of a public server ≖ ‿ ≖ aids=≖ ‿ ≖ Fear the aids of a public server ≖ ‿ ≖
riot=(admins) ┬┴┬┴┤ᵒ_ᵒ)├┬┴┬┴ \(´ω` )/\ (  ´)/\ ( ´ω`)/ (rest of server) riot=(admins) ┬┴┬┴┤ᵒ_ᵒ)├┬┴┬┴ \(´ω` )/\ (  ´)/\ ( ´ω`)/ (rest of server)
loops=NO LOOPS; LOOPS ARE BAD; JUST NO LOOPS!!!!!; IF YOU MAKE A LOOP.... IT WILL NOT END WELL!!!!!!! loops=NO LOOPS; LOOPS ARE BAD; JUST NO LOOPS!!!!!; IF YOU MAKE A LOOP.... IT WILL NOT END WELL!!!!!!!
lenny=( ͡° ͜ʖ ͡°) lenny=( ͡° ͜ʖ ͡°)
make-tea-1= ☕ Boiling the water... ☕
make-tea-2= ☕ __1__ your tea is done! ☕

View File

@@ -3,6 +3,7 @@ name=Report Player
low-print=__1__ has been reported by a user for: __2__ low-print=__1__ has been reported by a user for: __2__
high-print=__1__ has been reported by __2__ for: __3__ high-print=__1__ has been reported by __2__ for: __3__
cant-report=This player can not be reported. cant-report=This player can not be reported.
cant-report-ban=Invalid player as player is banned; Either unban or use /clear-all <player_name>
warning-given-by=This warning was given by: __1__ warning-given-by=This warning was given by: __1__
player-warning=__1__ was given a warning by __2__ for: __3__ player-warning=__1__ was given a warning by __2__ for: __3__
temp-ban=__1__ was temporary banned by __2__ and will remain in jail until next reset temp-ban=__1__ was temporary banned by __2__ and will remain in jail until next reset

View File

@@ -6,4 +6,5 @@ go-to-tooltip=Go To
cooldown=You must wait for the cooldown. Time left: __1__ cooldown=You must wait for the cooldown. Time left: __1__
cooldown-zero=Your cooldown has expired, You can use warp points again. cooldown-zero=Your cooldown has expired, You can use warp points again.
name-used=That name is already taken. name-used=That name is already taken.
too-close=You are too close to an existing warp point to make a new one.
not-on-warp=You are not on a warp point right now, you must be on a warp point to go to one. not-on-warp=You are not on a warp point right now, you must be on a warp point to go to one.

View File

@@ -1,3 +1,3 @@
[base-damage] [base-damage]
used=Du träffade några av dina egna byggnader. Var försiktig nästa gång! used=Du träffade några av dina egna byggnader. Var försiktig nästa gång!
nukes=Kärnvapen är inte tillåted för din rang. Det här är en förebyggande åtgärd mot griefers (bråkstakar) nuke=Kärnvapen är inte tillåted för din rang. Det här är en förebyggande åtgärd mot griefers (bråkstakar)

View File

@@ -13,12 +13,10 @@ custom-commands=Vi använder oss av specialiserade kommandon, som till exempel /
read-readme=Se till att du har läst "Readme" (Finn den genom att klicka på frågetecknet högst upp i vänstra hörnet) read-readme=Se till att du har läst "Readme" (Finn den genom att klicka på frågetecknet högst upp i vänstra hörnet)
not-real-dev=Cooldude2606 är dev för den här servern och gör mjukmodden ("the softmod") och är inte en factorio dev. not-real-dev=Cooldude2606 är dev för den här servern och gör mjukmodden ("the softmod") och är inte en factorio dev.
ssoftmod=En mjukmod ("softmod") är ett specialscenario som används på den här servern, exempelvis listan över spelare. ssoftmod=En mjukmod ("softmod") är ett specialscenario som används på den här servern, exempelvis listan över spelare.
blame=Skyll på __1__ för vad som just hände! blame=Skyll på __1__ för vad som just hände!
afk=Är du afk (borta från tangentbordet)? Titta på __1__ De har varit afk r: __2__ afk=Är du afk (borta från tangentbordet)? Titta på __1__, den spelaren har varit afk under: __2__
links=För att se länkar, öppna readme och klicka "länkar". links=För att se länkar, öppna readme och klicka "länkar".
magic=Frukta admin-magin (ノ゚∀゚)ノ⌒・*:.。. .。.:*・゜゚・*☆ magic=Frukta admin-magin (ノ゚∀゚)ノ⌒・*:.。. .。.:*・゜゚・*☆
aids=≖ ‿ ≖Fear the aids of a public server ≖ ‿ ≖ aids=≖ ‿ ≖Fear the aids of a public server ≖ ‿ ≖
riot=(admins) ┬┴┬┴┤ᵒ_ᵒ)├┬┴┬┴ \(´ω` )/\ (  ´)/\ ( ´ω`)/ (rest of server) riot=(admins) ┬┴┬┴┤ᵒ_ᵒ)├┬┴┬┴ \(´ω` )/\ (  ´)/\ ( ´ω`)/ (rest of server)
loops=NO LOOPS; LOOPS ARE BAD; JUST NO LOOPS!!!!!; IF YOU MAKE A LOOP.... IT WILL NOT END WELL!!!!!!! loops=INGA LOOPAR; LOOPAR ÄR DÅLIGT; JUST INGA LOOPAR!!!!!; OM DU GJÖR EN LOOP.... DET KOMMER INTE ATT SLUTA VÄL!!!!!!!

View File

@@ -4,7 +4,7 @@ invalid-inputs=Igiltig inmatning, /__1__ __2__
invalid-range=Invalid räckvid, Min: __1__, Max: __2__ invalid-range=Invalid räckvid, Min: __1__, Max: __2__
invalid-length=ogiltig längd, Max: __1__ invalid-length=ogiltig längd, Max: __1__
invalid-player=Ogiltigt spelarnamn, __1__ , försök använda tab-tangenten för att auto-slutföra namn. invalid-player=Ogiltigt spelarnamn, __1__ , försök använda tab-tangenten för att auto-slutföra namn.
offline-player=Spellare är offline. Kommando misslyckades med att köras. offline-player=Spelare är offline. Kommando misslyckades med att köras.
dead-player=Spelare är död. Kommando misslyckades med att köras. dead-player=Spelare är död. Kommando misslyckades med att köras.
command-ran=Kommandot slutfört command-ran=Kommandot slutfört

View File

@@ -4,4 +4,4 @@ tooltip=Se gamla undersökningar
no-poll=Inga gamla undersökningar no-poll=Inga gamla undersökningar
end=Röstning slutade nyss: __1__ end=Röstning slutade nyss: __1__
winner=__1__ hade flest röster. winner=__1__ hade flest röster.
time-left=Du kommer att få __1__s att välja. time-left=Du kommer att få __1__s på dig att välja.

View File

@@ -30,30 +30,30 @@ servers-name=Servrar
servers-tooltip=Information om våra servrar servers-tooltip=Information om våra servrar
servers-singleline=Välkommen till ExplosiveGamings gemenskap! S1-S3 har förskjutna återställningar (resets). servers-singleline=Välkommen till ExplosiveGamings gemenskap! S1-S3 har förskjutna återställningar (resets).
servers-format=S__1__: __2__ servers-format=S__1__: __2__
servers-cap1=Publik servers-cap1=Offentlig
servers-des1=En plats för alla spelare, then här kartan återställs varje 72H, 16:00 UTC. servers-des1=En plats för alla spelare, then här kartan återställs varje 72H, 16:00 UTC.
servers-cap2=Publik servers-cap2=Offentlig
servers-des2=En plats för alla spelare, then här kartan återställs varje 72H, 16:00 UTC. servers-des2=En plats för alla spelare, then här kartan återställs varje 72H, 16:00 UTC.
servers-cap3=Publik servers-cap3=Offentlig
servers-des3=En plats för alla spelare, then här kartan återställs varje 72H, 16:00 UTC. servers-des3=En plats för alla spelare, then här kartan återställs varje 72H, 16:00 UTC.
servers-cap4=Modifierad servers-cap4=Modifierad
servers-des4=A Modifierad server för alla spelare. Länk i Discord för medlemmar. servers-des4=En modifierad server för alla spelare. Länk i Discord för medlemmar.
servers-cap5=Evenemang servers-cap5=Evenemang
servers-des5=Server för evenemang (alla kan ansluta sig) - Kan kräva lösenord. Anslut dig till Discord för mer info. servers-des5=Server för evenemang (alla kan ansluta sig) - Kan kräva lösenord. Anslut dig till Discord för mer info.
servers-cap6=Donator servers-cap6=Donator
servers-des6=För spelare som stöder oss finansiellt. Ändringar kan göras på begäran. servers-des6=För spelare som stöder oss finansiellt. Ändringar kan göras på begäran.
rules-name=Regler rules-name=Regler
rules-tooltip=Den fullla listan över ExplosiveGamings regler. rules-tooltip=Den fullla listan över ExplosiveGamings regler.
rules-singleline=Även om riktlinjerna täcker de flesta av reglerna, den fulla listan har alltid prioritet och går alltid före riktlinjerna. Det är välbetänkt att vara bekant med alla reglerna för att förhindra varningar och bannlystningar. rules-singleline=Även om riktlinjerna täcker de flesta av reglerna så har den fulla listan alltid prioritet och går alltid före riktlinjerna. Det är välbetänkt att vara bekant med alla reglerna för att förhindra varningar och bannlystningar.
rules-format=__1__) __2__ rules-format=__1__) __2__
rules-rule1=Dataintrång / fusk / missbruk av buggar kommer inte att tolereras. rules-rule1=Dataintrång / fusk / missbruk av buggar kommer inte att tolereras.
rules-rule2=Buggar och utnyttjingssätt ska rapporteras till team-medlemmar (exkluderande kreativa saker) rules-rule2=Buggar och utnyttjingssätt ska rapporteras till team-medlemmar (exkludera kreativa saker)
rules-rule3=Var inte respektlös mot någon annan spelare i servern. rules-rule3=Var inte respektlös mot någon annan spelare i servern.
rules-rule4=Att ta alla saker från ett bälte eller logistikbegäran är förbjudet: att dela med sig av resurserna är obligatoriskt. rules-rule4=Att ta alla saker från ett bälte eller logistikbegäran är förbjudet: att dela med sig av resurserna är obligatoriskt.
rules-rule5=Spam (genom chat, bottar, obegränsade kistor eller betong) är inte tillåtet. rules-rule5=Spam (genom chat, bottar, obegränsade kistor eller betong) är inte tillåtet.
rules-rule6=Gör inga placeringar/borttagningar av betong eller sten med hjälp av bottar utan tillåtelse. rules-rule6=Gör inga placeringar/borttagningar av betong eller sten med hjälp av bottar utan tillåtelse.
rules-rule7=Använd inte aktiva tillgångskistor utan tillåtelse. rules-rule7=Använd inte aktiva tillgångskistor utan tillåtelse.
rules-rule8=Använd inte globala högtalare varningar utan tillåtelse. rules-rule8=Använd inte globala högtalare eller varningar utan tillåtelse.
rules-rule9=Ta inte bort eller flytta huvuddelar av fabriken utan tillåtelse. rules-rule9=Ta inte bort eller flytta huvuddelar av fabriken utan tillåtelse.
rules-rule10=Gå inte omkring i slumpvisa riktningar utan anledning (för att spara kartstorlek och serverresurser) rules-rule10=Gå inte omkring i slumpvisa riktningar utan anledning (för att spara kartstorlek och serverresurser)
rules-rule11=Ta inte bort saker utan att fråga dina medspelare. rules-rule11=Ta inte bort saker utan att fråga dina medspelare.

View File

@@ -1,4 +1,4 @@
[tasklist] [tasklist]
name=Uppgiftslista name=Uppgiftslista
tooltip=Jobb som behövs slutföras överallt i fabriken tooltip=Jobb som behövs slutföras överallt i fabriken
none=Det finns för närvarande inga uppgifter. Fråga en medlem i spelet eller via Discord för att lägga till uppgifter. none=Det finns för närvarande inga uppgifter. Fråga en medlem i spelet eller via Discord för att lägga till nya uppgifter.