mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 19:45:22 +09:00
Merge branch 'master' into testing
This commit is contained in:
@@ -41,7 +41,12 @@ local commands = {
|
||||
['magic']={'chat-bot.magic'},
|
||||
['aids']={'chat-bot.aids'},
|
||||
['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)
|
||||
|
||||
@@ -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.rank',_player.rank}}
|
||||
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
|
||||
return _player
|
||||
|
||||
@@ -13,7 +13,8 @@ commands.add_command('report', 'Reports a player.', {'player','reason',true}, fu
|
||||
local player = Game.get_player(args.player)
|
||||
local reason = args.reason
|
||||
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.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)
|
||||
@@ -23,7 +24,8 @@ commands.add_command('warn', 'Gives a player a warnings', {'player','reason',tru
|
||||
local player = Game.get_player(args.player)
|
||||
local reason = args.reason
|
||||
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)
|
||||
end)
|
||||
|
||||
@@ -31,13 +33,15 @@ commands.add_command('jail', 'Jails a player', {'player','reason',true}, functio
|
||||
local player = Game.get_player(args.player)
|
||||
local reason = args.reason
|
||||
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)
|
||||
end)
|
||||
|
||||
commands.add_command('unjail', 'Returns the players old rank', {'player',true}, function(event,args)
|
||||
local player = Game.get_player(args.player)
|
||||
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)
|
||||
end)
|
||||
|
||||
@@ -45,25 +49,28 @@ commands.add_command('temp-ban', 'Temporarily ban a player.', {'player','reason'
|
||||
local player = Game.get_player(args.player)
|
||||
local reason = args.reason
|
||||
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)
|
||||
end)
|
||||
|
||||
commands.add_command('clear-inv', 'Clears the player\'s invetory', {'player'}, function(event,args)
|
||||
local player = Game.get_player(args.player)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
end)
|
||||
|
||||
commands.add_command('clear-reports', 'Clears the reports on a player.', {'player'}, function(event,args)
|
||||
local player = Game.get_player(args.player)
|
||||
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)
|
||||
end)
|
||||
|
||||
|
||||
@@ -54,6 +54,13 @@ end)
|
||||
Event.register(defines.events.on_pre_player_died,function(event)
|
||||
local player = Game.get_player(event)
|
||||
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)
|
||||
|
||||
@@ -14,24 +14,24 @@ local function _homes(reset)
|
||||
return global.addons.homes
|
||||
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)
|
||||
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)}
|
||||
player_return('Home set at: ('..math.floor(player.position.x)..','..math.floor(player.position.y)..')')
|
||||
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)
|
||||
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)}
|
||||
player.teleport(player.surface.find_non_colliding_position('player',_homes()[player.index][1],32,1),player.surface)
|
||||
end)
|
||||
|
||||
commands.add_command('return', 'Goto where you were before using /home', {}, function(event,args)
|
||||
commands.add_command('return', 'Go to where you were before using /home', {}, function(event,args)
|
||||
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
|
||||
local _temp = {math.floor(player.position.x),math.floor(player.position.y)}
|
||||
player.teleport(player.surface.find_non_colliding_position('player',_homes()[player.index][2],32,1),player.surface)
|
||||
_homes()[player.index][2] = _temp
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -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 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
|
||||
for x = -range-2, range+2 do
|
||||
for y = -range-2, range+2 do
|
||||
if x^2+y^2 < range^2 then
|
||||
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
|
||||
if disallow[entity.ghost_prototype.name] then
|
||||
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')
|
||||
entity.destroy()
|
||||
else entity.revive() end
|
||||
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
|
||||
local area = {{center.x-range,center.y-range},{center.x+range,center.y+range}}
|
||||
local max_time_to_live = 2^32 - 1
|
||||
local sq_range = range^2
|
||||
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
|
||||
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')
|
||||
entity.destroy()
|
||||
elseif entity.time_to_live ~= max_time_to_live then
|
||||
entity.revive() 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)
|
||||
|
||||
@@ -133,7 +133,7 @@ Admin.center = Gui.center.add{
|
||||
type='flow',
|
||||
direction='vertical'
|
||||
}
|
||||
player_info_flow.style.height = 200
|
||||
player_info_flow.style.height = 300
|
||||
player_info_flow.style.width = 200
|
||||
local label = dropdowns.add{
|
||||
type='label',
|
||||
|
||||
@@ -132,19 +132,33 @@ local next = Gui.inputs.add{
|
||||
draw_poll(parent.parent.poll_area)
|
||||
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)
|
||||
frame.clear()
|
||||
local frame_table = frame.add { type = 'table', name = 'table_poll_assembler', column_count = 2 }
|
||||
frame_table.add { type = 'label', caption = 'Question:' }
|
||||
frame_table.add { type = 'textfield', name = 'textfield_question', text = '' }
|
||||
frame_table.add { type = 'label', caption = 'Option #1:' }
|
||||
frame_table.add { type = 'textfield', name = 'textfield_answer_1', text = '' }
|
||||
frame_table.add { type = 'label', caption = 'Option #2:' }
|
||||
frame_table.add { type = 'textfield', name = 'textfield_answer_2', text = '' }
|
||||
frame_table.add { type = 'label', caption = 'Option #3:' }
|
||||
frame_table.add { type = 'textfield', name = 'textfield_answer_3', text = '' }
|
||||
frame_table.add { type = 'label', caption = '' }
|
||||
frame.clear()
|
||||
local options = frame.add{type='flow',name='options'}
|
||||
options.style.visible = false
|
||||
options.add{type='label',name='last',caption='2'}
|
||||
poll_question_input:draw(frame).style.minimal_width = 200
|
||||
local flow = frame.add{type='flow',direction='vertical'}
|
||||
poll_option_input:draw(flow.add{type='flow',name='1'}).style.minimal_width = 200
|
||||
poll_option_input:draw(flow.add{type='flow',name='2'}).style.minimal_width = 200
|
||||
end
|
||||
|
||||
local create_poll = Gui.inputs.add{
|
||||
@@ -154,17 +168,24 @@ local create_poll = Gui.inputs.add{
|
||||
}:on_event('click',function(event)
|
||||
local parent = event.element.parent
|
||||
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
|
||||
event.element.sprite = 'utility/add'
|
||||
draw_poll(parent.parent.poll_area)
|
||||
return
|
||||
end
|
||||
local uuid = _poll_data(inputs.textfield_question.text,{
|
||||
inputs.textfield_answer_1.text,
|
||||
inputs.textfield_answer_2.text,
|
||||
inputs.textfield_answer_3.text
|
||||
})
|
||||
local options = {}
|
||||
for _,option in pairs(inputs.children) do
|
||||
if option.name ~= 'question' and option.name ~= 'last' then
|
||||
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})
|
||||
event.element.sprite = 'utility/add'
|
||||
draw_poll(parent.parent.poll_area)
|
||||
|
||||
@@ -83,4 +83,22 @@ Gui.left.add{
|
||||
end
|
||||
}
|
||||
|
||||
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)
|
||||
@@ -83,4 +83,20 @@ Gui.left.add{
|
||||
end
|
||||
}
|
||||
|
||||
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)
|
||||
@@ -108,6 +108,7 @@ local function _tasks(player)
|
||||
return _global().tasks
|
||||
elseif not data._edit and _edit then
|
||||
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
|
||||
elseif _edit then return data._tasks
|
||||
else return _global().tasks
|
||||
|
||||
@@ -85,7 +85,10 @@ local function make_warp_point(position,surface,force,name)
|
||||
icon={type='item',name=warp_item}
|
||||
})
|
||||
_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')
|
||||
end
|
||||
|
||||
@@ -94,6 +97,8 @@ commands.add_command('make-warp', 'Make a warp point at your location', {'name',
|
||||
local position = game.player.position
|
||||
local name = args.name
|
||||
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)
|
||||
end)
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ require('Guis/rockets')
|
||||
require('Guis/player-list')
|
||||
require('Guis/tasklist')
|
||||
require('Guis/warp-system')
|
||||
--require('Guis/polls') -- too many desyncs
|
||||
require('Guis/polls') -- too many desyncs
|
||||
require('Guis/announcements')
|
||||
require('Guis/rank-changer')
|
||||
require('Guis/admin-gui') -- used with Admin/admin, requires Admin/admin
|
||||
|
||||
@@ -12,5 +12,5 @@ require('colours')
|
||||
require('health')
|
||||
require('spawn')
|
||||
require('starting-items')
|
||||
--require('paths') -- takes up too much file size
|
||||
require('paths')
|
||||
require('body-marker')
|
||||
@@ -1,110 +1,100 @@
|
||||
-- made by cooldude
|
||||
-- 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 = {
|
||||
-- ['tile name'] = {health,convert to}
|
||||
-- health is in hundrads of steps
|
||||
['refined-concrete']={60,'concrete'},
|
||||
['refined-hazard-concrete-right']={60,'hazard-concrete-right'},
|
||||
['refined-hazard-concrete-left']={60,'hazard-concrete-left'},
|
||||
['concrete']={40,'stone-path'},
|
||||
['hazard-concrete-right']={40,'stone-path'},
|
||||
['hazard-concrete-left']={40,'stone-path'},
|
||||
['stone-path']={20,'world-gen'}, -- world-gen just makes it pick the last tile not placed by a player
|
||||
['sand-1']={5,'sand-2'},
|
||||
['sand-2']={10,'sand-3'},
|
||||
['sand-3']={5,'red-desert-3'},
|
||||
['red-desert-3']={5,'red-desert-2'},
|
||||
['red-desert-2']={10,'dirt-1'},
|
||||
['grass-2']={5,'grass-1'},
|
||||
['grass-1']={5,'grass-3'},
|
||||
['grass-3']={10,'red-desert-0'},
|
||||
['red-desert-0']={5,'red-desert-1'},
|
||||
['red-desert-1']={10,'dirt-1'},
|
||||
['dirt-1']={5,'dirt-2'},
|
||||
['dirt-2']={5,'dirt-3'},
|
||||
['dirt-3']={10,'dirt-4'},
|
||||
['dirt-4']={5,'dirt-5'},
|
||||
['dirt-5']={5,'dirt-6'},
|
||||
['grass-4']={10,'dirt-4'}
|
||||
-- health is the average number of steps in hundards before it changes
|
||||
['refined-concrete']={30,'concrete'},
|
||||
['refined-hazard-concrete-right']={30,'hazard-concrete-right'},
|
||||
['refined-hazard-concrete-left']={30,'hazard-concrete-left'},
|
||||
['concrete']={25,'stone-path'},
|
||||
['hazard-concrete-right']={25,'stone-path'},
|
||||
['hazard-concrete-left']={25,'stone-path'},
|
||||
['stone-path']={10,'world-gen'}, -- world-gen just makes it pick the last tile not placed by a player
|
||||
['sand-1']={1,'sand-2'},
|
||||
['sand-2']={5,'sand-3'},
|
||||
['sand-3']={1,'red-desert-3'},
|
||||
['red-desert-3']={1,'red-desert-2'},
|
||||
['red-desert-2']={5,'dirt-1'},
|
||||
['grass-2']={1,'grass-1'},
|
||||
['grass-1']={1,'grass-3'},
|
||||
['grass-3']={5,'red-desert-0'},
|
||||
['red-desert-0']={1,'red-desert-1'},
|
||||
['red-desert-1']={5,'dirt-1'},
|
||||
['dirt-1']={1,'dirt-2'},
|
||||
['dirt-2']={1,'dirt-3'},
|
||||
['dirt-3']={5,'dirt-4'},
|
||||
['dirt-4']={1,'dirt-5'},
|
||||
['dirt-5']={1,'dirt-6'},
|
||||
['grass-4']={5,'dirt-4'}
|
||||
}
|
||||
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
|
||||
|
||||
local function global_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
|
||||
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
|
||||
return 'S'..surface.name..'X'..math.floor(pos.x)..'Y'..math.floor(pos.y)
|
||||
end
|
||||
|
||||
local function down_grade(surface,pos)
|
||||
local tile = surface.get_tile(pos).name
|
||||
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}}
|
||||
global_key(surface,pos)[2]=paths[new_tile][1]
|
||||
if not paths[new_tile] then remove_key(surface,pos) return end
|
||||
end
|
||||
|
||||
Event.register(defines.events.on_player_built_tile, function(event)
|
||||
local surface = game.surfaces[event.surface_index]
|
||||
local old_tiles = event.tiles
|
||||
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'
|
||||
and old_tile.old_tile.name ~= 'refined-hazard-concrete-left' and old_tile.old_tile.name ~= 'concrete'
|
||||
and old_tile.old_tile.name ~= 'hazard-concrete-right' and old_tile.old_tile.name ~= 'hazard-concrete-left'
|
||||
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
|
||||
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
|
||||
if global.paths == nil then global.paths = {} end -- nil as you can set to false to disable
|
||||
global.paths[global_key(surface,old_tile.position)]=old_tile.old_tile.name
|
||||
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)
|
||||
|
||||
Event.register(defines.events.on_player_changed_position, function(event)
|
||||
local player = Game.get_player(event)
|
||||
if player.afk_time > 300 then return end
|
||||
local surface = player.surface
|
||||
local pos = player.position
|
||||
if not paths[surface.get_tile(pos).name] then remove_key(surface,pos) return end
|
||||
global_key(surface,pos)[2] = global_key(surface,pos)[2]-1
|
||||
if global_key(surface,pos)[2] <= 0 then
|
||||
local tile_name = surface.get_tile(pos).name
|
||||
if not paths[tile_name] then return end
|
||||
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)
|
||||
end
|
||||
global_key(surface,pos)[3] = event.tick
|
||||
end)
|
||||
|
||||
Event.register(defines.events.on_tick, function(event)
|
||||
if (game.tick%clean_time) == 0 then
|
||||
clean_global()
|
||||
end
|
||||
end)
|
||||
--[[
|
||||
/interface
|
||||
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
|
||||
return chance
|
||||
]]
|
||||
@@ -22,6 +22,7 @@ Event.register(defines.events.on_player_created, function(event)
|
||||
local player = game.players[event.player_index]
|
||||
if event.player_index == 1 then
|
||||
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}})
|
||||
end
|
||||
for item,count in pairs(items) do
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
[base-damage]
|
||||
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.
|
||||
|
||||
@@ -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.
|
||||
softmod=A softmod is a custom scenario that runs on this server, example is the player list.
|
||||
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.
|
||||
magic=Fear the admin magic (ノ゚∀゚)ノ⌒・*:.。. .。.:*・゜゚・*☆
|
||||
aids=≖ ‿ ≖ Fear the aids of a public 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!!!!!!!
|
||||
lenny=( ͡° ͜ʖ ͡°)
|
||||
lenny=( ͡° ͜ʖ ͡°)
|
||||
make-tea-1= ☕ Boiling the water... ☕
|
||||
make-tea-2= ☕ __1__ your tea is done! ☕
|
||||
@@ -3,6 +3,7 @@ name=Report Player
|
||||
low-print=__1__ has been reported by a user for: __2__
|
||||
high-print=__1__ has been reported by __2__ for: __3__
|
||||
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__
|
||||
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
|
||||
|
||||
@@ -6,4 +6,5 @@ go-to-tooltip=Go To
|
||||
cooldown=You must wait for the cooldown. Time left: __1__
|
||||
cooldown-zero=Your cooldown has expired, You can use warp points again.
|
||||
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.
|
||||
@@ -1,3 +1,3 @@
|
||||
[base-damage]
|
||||
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)
|
||||
|
||||
@@ -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)
|
||||
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.
|
||||
|
||||
|
||||
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 fö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".
|
||||
magic=Frukta admin-magin (ノ゚∀゚)ノ⌒・*:.。. .。.:*・゜゚・*☆
|
||||
aids=≖ ‿ ≖Fear the aids of a public 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!!!!!!!
|
||||
|
||||
@@ -4,7 +4,7 @@ invalid-inputs=Igiltig inmatning, /__1__ __2__
|
||||
invalid-range=Invalid räckvid, Min: __1__, Max: __2__
|
||||
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.
|
||||
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.
|
||||
command-ran=Kommandot slutfört
|
||||
|
||||
@@ -19,4 +19,4 @@ tag-reset=Din tag blev återställd på grund av rangförändrning.
|
||||
[gui]
|
||||
unauthorized=401 -Otillåten: Tillgång nekas på grund av otillräcklig säkerhetsprövning.
|
||||
cant-open=Du kan inte öppna den här panelen just nu, orsak: __1__
|
||||
cant-open-no-reason=Du kan inte öppna den här panelen just nu
|
||||
cant-open-no-reason=Du kan inte öppna den här panelen just nu
|
||||
@@ -4,4 +4,4 @@ tooltip=Se gamla undersökningar
|
||||
no-poll=Inga gamla undersökningar
|
||||
end=Röstning slutade nyss: __1__
|
||||
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.
|
||||
@@ -30,30 +30,30 @@ servers-name=Servrar
|
||||
servers-tooltip=Information om våra servrar
|
||||
servers-singleline=Välkommen till ExplosiveGamings gemenskap! S1-S3 har förskjutna återställningar (resets).
|
||||
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-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-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-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-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-des6=För spelare som stöder oss finansiellt. Ändringar kan göras på begäran.
|
||||
rules-name=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-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-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-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-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-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.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[tasklist]
|
||||
name=Uppgiftslista
|
||||
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.
|
||||
Reference in New Issue
Block a user