Merge branch 'master' of https://github.com/tgstation/-tg-station into turfs

Conflicts:
	_maps/RandomZLevels/Cabin.dmm
	_maps/RandomZLevels/beach2.dmm
	_maps/RandomZLevels/caves.dmm
	_maps/RandomZLevels/research.dmm
	_maps/RandomZLevels/snowdin.dmm
	_maps/RandomZLevels/undergroundoutpost45.dmm
	_maps/map_files/DreamStation/dreamstation04.dmm
	_maps/map_files/EfficiencyStation/EfficiencyStation.dmm
	_maps/map_files/MetaStation/MetaStation.v41I.dmm
	_maps/map_files/MiniStation/MiniStation.dmm
	_maps/map_files/TgStation/tgstation.2.1.3.dmm
	_maps/map_files/generic/z4.dmm
	_maps/templates/lavaland_surface_automated_trade_outpost.dmm
	_maps/templates/lavaland_surface_biodome_winter.dmm
	_maps/templates/lavaland_surface_prisoner_crash.dmm
	_maps/templates/lavaland_surface_seed_vault.dmm
	code/controllers/subsystem/air.dm
	code/game/asteroid.dm
	code/game/atoms.dm
	code/game/gamemodes/nuclear/nuclearbomb.dm
	code/game/machinery/computer/arcade.dm
	code/game/objects/effects/aliens.dm
	code/game/objects/effects/overlays.dm
	code/game/objects/items/apc_frame.dm
	code/game/objects/structures/false_walls.dm
	code/game/objects/structures/girders.dm
	code/game/turfs/simulated.dm
	code/game/turfs/simulated/floor/fancy_floor.dm
	code/game/turfs/simulated/floor/mineral_floor.dm
	code/game/turfs/simulated/floor/plating.dm
	code/game/turfs/simulated/river.dm
	code/game/turfs/simulated/walls_misc.dm
	code/game/turfs/simulated/walls_reinforced.dm
	code/modules/admin/verbs/buildmode.dm
	code/modules/atmospherics/environmental/LINDA_turf_tile.dm
	code/modules/events/spacevine.dm
	code/modules/flufftext/Hallucination.dm
	code/modules/holodeck/turfs.dm
	code/modules/mining/mine_items.dm
	code/modules/mining/mine_turfs.dm
	code/modules/mob/interactive.dm
	code/modules/mob/living/carbon/human/life.dm
	code/modules/mob/living/living.dm
	code/modules/mob/living/simple_animal/bot/floorbot.dm
	code/modules/mob/living/simple_animal/guardian/guardian.dm
	code/modules/mob/living/simple_animal/hostile/hostile.dm
	code/modules/mob/mob_movement.dm
	code/modules/power/singularity/narsie.dm
	code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
	code/modules/research/server.dm
This commit is contained in:
duncathan
2016-03-29 14:46:06 -06:00
477 changed files with 400407 additions and 32092 deletions
+2 -2
View File
@@ -355,8 +355,8 @@ var/list/admin_verbs_hideable = list(
src << "<font color='red'>Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.</font>"
else
//ghostize
log_admin("[key_name(usr)] admin ghosted")
message_admins("[key_name_admin(usr)] admin ghosted")
log_admin("[key_name(usr)] admin ghosted.")
message_admins("[key_name_admin(usr)] admin ghosted.")
var/mob/body = mob
body.ghostize(1)
if(body && !body.key)
+1 -1
View File
@@ -588,7 +588,7 @@
dat += "<br><table cellspacing=5><tr><td><B>Blob</B></td><td></td><td></td></tr>"
if(istype(ticker.mode,/datum/game_mode/blob))
var/datum/game_mode/blob/mode = ticker.mode
blob_minds |= mode.infected_crew
blob_minds |= mode.blob_overminds
dat += "<tr><td><i>Progress: [blobs_legit.len]/[mode.blobwincount]</i></td></tr>"
for(var/datum/mind/blob in blob_minds)
+1 -3
View File
@@ -347,11 +347,9 @@
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","BC")
var/newBombCap = input(usr,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be between 4 and 128)", "New Bomb Cap", MAX_EX_LIGHT_RANGE) as num|null
var/newBombCap = input(usr,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be above 4)", "New Bomb Cap", MAX_EX_LIGHT_RANGE) as num|null
if (newBombCap < 4)
return
if (newBombCap > 128)
newBombCap = 128
MAX_EX_DEVESTATION_RANGE = round(newBombCap/4)
MAX_EX_HEAVY_RANGE = round(newBombCap/2)
+3 -3
View File
@@ -185,9 +185,9 @@
server = config.server_name
var/regex/note = new("^(\\d{2}-\\w{3}-\\d{4}) \\| (.+) ~(\\w+)$", "i")
note.Find(notetext)
var/timestamp = note.group[2]
notetext = note.group[3]
var/adminckey = note.group[4]
var/timestamp = note.group[1]
notetext = note.group[2]
var/adminckey = note.group[3]
var/DBQuery/query_convert_time = dbcon.NewQuery("SELECT ADDTIME(STR_TO_DATE('[timestamp]','%d-%b-%Y'), '0')")
if(!query_convert_time.Execute())
var/err = query_convert_time.ErrorMsg()
+11
View File
@@ -75,6 +75,7 @@
if(char == "/" || char == "*")
for(var/from in from_objs)
objs += SDQL_get_all(type, from)
CHECK_TICK
else if(char == "'" || char == "\"")
objs += locate(copytext(type, 2, length(type)))
@@ -85,6 +86,7 @@
for(var/datum/d in objs_temp)
if(SDQL_expression(d, query_tree["where"]))
objs += d
CHECK_TICK
switch(query_tree[1])
if("call")
@@ -94,10 +96,12 @@
for(var/datum/d in objs)
for(var/v in call_list)
SDQL_callproc(d, v, args_list)
CHECK_TICK
if("delete")
for(var/datum/d in objs)
qdel(d)
CHECK_TICK
if("select")
var/text = ""
@@ -140,6 +144,7 @@
else
for(var/v in vals)
d.vars[v] = vals[v]
CHECK_TICK
@@ -246,31 +251,37 @@
for(var/mob/d in location)
if(istype(d, type))
out += d
CHECK_TICK
else if(ispath(type, /turf))
for(var/turf/d in location)
if(istype(d, type))
out += d
CHECK_TICK
else if(ispath(type, /obj))
for(var/obj/d in location)
if(istype(d, type))
out += d
CHECK_TICK
else if(ispath(type, /area))
for(var/area/d in location)
if(istype(d, type))
out += d
CHECK_TICK
else if(ispath(type, /atom))
for(var/atom/d in location)
if(istype(d, type))
out += d
CHECK_TICK
else
for(var/datum/d in location)
if(istype(d, type))
out += d
CHECK_TICK
return out
+1 -1
View File
@@ -64,7 +64,7 @@
bd.quit()
return 1
/obj/screen/buildmode/dir/Click()
/obj/screen/buildmode/bdir/Click()
bd.change_dir()
update_icon()
return 1
+3 -1
View File
@@ -261,7 +261,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
log_admin("[key_name(src)] has blobized [M.key].")
var/mob/living/carbon/human/H = M
spawn(0)
H.Blobize()
var/mob/camera/blob/B = H.become_overmind()
B.place_blob_core(B.base_point_rate, -1) //place them wherever they are
else
alert("Invalid mob")
@@ -405,6 +406,7 @@ var/global/list/g_fancy_list_of_types = null
if(istype(O, hsbitem))
counter++
qdel(O)
CHECK_TICK
log_admin("[key_name(src)] has deleted all ([counter]) instances of [hsbitem].")
message_admins("[key_name_admin(src)] has deleted all ([counter]) instances of [hsbitem].", 0)
feedback_add_details("admin_verb","DELA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+43
View File
@@ -145,32 +145,38 @@
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
M.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
CHECK_TICK
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
M.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
A.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
A.vars[variable] = O.vars[variable]
CHECK_TICK
if("edit referenced object")
return .(O.vars[variable])
@@ -219,6 +225,7 @@
new_value = O.vars[variable] //We already processed the non-unique form for O, reuse it
M.vars[variable] = new_value
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
@@ -233,6 +240,7 @@
new_value = O.vars[variable]
A.vars[variable] = new_value
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
@@ -247,6 +255,7 @@
new_value = O.vars[variable]
A.vars[variable] = new_value
CHECK_TICK
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
@@ -261,6 +270,7 @@
new_value = O.vars[variable]
M.vars[variable] = new_value
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
@@ -275,6 +285,7 @@
new_value = O.vars[variable]
A.vars[variable] = new_value
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
@@ -289,6 +300,7 @@
new_value = O.vars[variable]
A.vars[variable] = new_value
CHECK_TICK
if("num")
var/new_value = input("Enter new number:","Num",\
@@ -308,6 +320,7 @@
M.SetLuminosity(new_value)
else
M.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
@@ -316,6 +329,7 @@
A.SetLuminosity(new_value)
else
A.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
@@ -324,6 +338,7 @@
A.SetLuminosity(new_value)
else
A.vars[variable] = O.vars[variable]
CHECK_TICK
else
if(istype(O, /mob))
@@ -333,6 +348,7 @@
M.SetLuminosity(new_value)
else
M.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
@@ -341,6 +357,7 @@
A.SetLuminosity(new_value)
else
A.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
@@ -349,6 +366,7 @@
A.SetLuminosity(new_value)
else
A.vars[variable] = O.vars[variable]
CHECK_TICK
if("type")
var/new_value
@@ -360,31 +378,38 @@
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
M.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
CHECK_TICK
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
M.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
A.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
A.vars[variable] = O.vars[variable]
CHECK_TICK
if("file")
var/new_value = input("Pick file:","File",O.vars[variable]) as null|file
@@ -396,31 +421,37 @@
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
M.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O.type, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O.type, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
CHECK_TICK
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
M.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
A.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
A.vars[variable] = O.vars[variable]
CHECK_TICK
if("icon")
var/new_value = input("Pick icon:","Icon",O.vars[variable]) as null|icon
@@ -431,64 +462,76 @@
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
M.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
CHECK_TICK
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
M.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
A.vars[variable] = O.vars[variable]
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
A.vars[variable] = O.vars[variable]
CHECK_TICK
if(method)
if(istype(O,/mob))
for(var/mob/M in mob_list)
if(istype(M,O.type))
M.on_varedit(variable)
CHECK_TICK
else if(istype(O,/obj))
for(var/obj/A in world)
if(istype(A,O.type))
A.on_varedit(variable)
CHECK_TICK
else if(istype(O,/turf))
for(var/turf/A in block(locate(1,1,1),locate(world.maxx,world.maxy,world.maxz)))
if(istype(A,O.type))
A.on_varedit(variable)
CHECK_TICK
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if(M.type == O.type)
M.on_varedit(variable)
CHECK_TICK
else if(istype(O, /obj))
for(var/obj/A in world)
if(A.type == O.type)
A.on_varedit(variable)
CHECK_TICK
else if(istype(O, /turf))
for(var/turf/A in world)
if(A.type == O.type)
A.on_varedit(variable)
CHECK_TICK
world.log << "### MassVarEdit by [src]: [O.type] [variable]=[html_encode("[O.vars[variable]]")]"
log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]")
+5 -2
View File
@@ -332,7 +332,7 @@
Commando << missiondesc
if(config.enforce_human_authority)
Commando.set_species("human")
Commando.set_species(/datum/species/human)
//Logging and cleanup
if(numagents == 1)
@@ -411,6 +411,9 @@
missionobj.completed = 1
newmob.mind.objectives += missionobj
if(config.enforce_human_authority)
newmob.set_species(/datum/species/human)
//Greet the official
newmob << "<B><font size=3 color=red>You are a Centcom Official.</font></B>"
newmob << "<BR>Central Command is sending you to [station_name()] with the task: [mission]"
@@ -519,7 +522,7 @@
ERTOperative << missiondesc
if(config.enforce_human_authority)
ERTOperative.set_species("human")
ERTOperative.set_species(/datum/species/human)
//Logging and cleanup
if(numagents == 1)
+7 -1
View File
@@ -42,14 +42,20 @@
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
msg = "<span class='adminnotice'><b><font color=orange>CENTCOM:</font>[key_name_admin(Sender)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[Sender]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[Sender]'>FLW</A>) (<A HREF='?_src_=holder;traitor=\ref[Sender]'>TP</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]</span>"
admins << msg
for(var/obj/machinery/computer/communications/C in machines)
C.overrideCooldown()
/proc/Syndicate_announce(text , mob/Sender)
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
msg = "<span class='adminnotice'><b><font color=crimson>SYNDICATE:</font>[key_name_admin(Sender)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[Sender]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[Sender]'>FLW</A>) (<A HREF='?_src_=holder;traitor=\ref[Sender]'>TP</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]</span>"
admins << msg
for(var/obj/machinery/computer/communications/C in machines)
C.overrideCooldown()
/proc/Nuke_request(text , mob/Sender)
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
msg = "<span class='adminnotice'><b><font color=orange>NUKE CODE REQUEST:</font>[key_name_admin(Sender)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[Sender]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[Sender]'>FLW</A>) (<A HREF='?_src_=holder;traitor=\ref[Sender]'>TP</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]</span>"
admins << msg
admins << "<span class='adminnotice'><b>At this current time, the nuke must have the code manually set via varedit.</b></span>"
admins << "<span class='adminnotice'><b>At this current time, the nuke must have the code manually set via varedit.</b></span>"
for(var/obj/machinery/computer/communications/C in machines)
C.overrideCooldown()