Merge branch 'master' into upstream-merge-33621
This commit is contained in:
@@ -705,15 +705,17 @@
|
||||
|
||||
/datum/admins/proc/output_all_devil_info()
|
||||
var/devil_number = 0
|
||||
for(var/D in SSticker.mode.devils)
|
||||
for(var/datum/mind/D in SSticker.mode.devils)
|
||||
devil_number++
|
||||
to_chat(usr, "Devil #[devil_number]:<br><br>" + SSticker.mode.printdevilinfo(D))
|
||||
var/datum/antagonist/devil/devil = D.has_antag_datum(/datum/antagonist/devil)
|
||||
to_chat(usr, "Devil #[devil_number]:<br><br>" + devil.printdevilinfo())
|
||||
if(!devil_number)
|
||||
to_chat(usr, "<b>No Devils located</b>" )
|
||||
|
||||
/datum/admins/proc/output_devil_info(mob/living/M)
|
||||
if(is_devil(M))
|
||||
to_chat(usr, SSticker.mode.printdevilinfo(M))
|
||||
var/datum/antagonist/devil/devil = M.mind.has_antag_datum(/datum/antagonist/devil)
|
||||
to_chat(usr, devil.printdevilinfo())
|
||||
else
|
||||
to_chat(usr, "<b>[M] is not a devil.")
|
||||
|
||||
|
||||
@@ -94,6 +94,7 @@ GLOBAL_LIST(round_end_notifiees)
|
||||
return "Unable to run query, another admin proc call is in progress. Try again later."
|
||||
GLOB.AdminProcCaller = "CHAT_[sender]" //_ won't show up in ckeys so it'll never match with a real admin
|
||||
var/list/results = world.SDQL2_query(params, GLOB.AdminProcCaller, GLOB.AdminProcCaller)
|
||||
GLOB.AdminProcCaller = null
|
||||
if(!results)
|
||||
return "Query produced no output"
|
||||
var/list/text_res = results.Copy(1, 3)
|
||||
|
||||
@@ -110,26 +110,32 @@
|
||||
anchored = TRUE
|
||||
|
||||
/obj/effect/shuttle_build/New()
|
||||
SSshuttle.emergency.dock(SSshuttle.getDock("emergency_home"))
|
||||
SSshuttle.emergency.initiate_docking(SSshuttle.getDock("emergency_home"))
|
||||
qdel(src)
|
||||
|
||||
//Arena
|
||||
|
||||
/obj/effect/forcefield/arena_shuttle
|
||||
name = "portal"
|
||||
var/list/warp_points = list()
|
||||
var/list/warp_points
|
||||
|
||||
/obj/effect/forcefield/arena_shuttle/Initialize()
|
||||
. = ..()
|
||||
warp_points = get_area_turfs(/area/shuttle/escape)
|
||||
for(var/thing in warp_points)
|
||||
CHECK_TICK
|
||||
var/turf/T = thing
|
||||
if(istype(T.loc, /area/shuttle/escape/backup))
|
||||
warp_points -= T
|
||||
continue
|
||||
for(var/atom/movable/TAM in T)
|
||||
if(TAM.density && TAM.anchored)
|
||||
warp_points -= T
|
||||
break
|
||||
|
||||
/obj/effect/forcefield/arena_shuttle/CollidedWith(atom/movable/AM)
|
||||
if(!isliving(AM))
|
||||
return
|
||||
if(!warp_points.len)
|
||||
warp_points = get_area_turfs(/area/shuttle/escape)
|
||||
for(var/turf/T in warp_points)
|
||||
for(var/atom/movable/TAM in T)
|
||||
if(TAM.density && TAM.anchored)
|
||||
warp_points -= T
|
||||
break
|
||||
|
||||
var/mob/living/L = AM
|
||||
if(L.pulling && istype(L.pulling, /obj/item/bodypart/head))
|
||||
|
||||
@@ -384,9 +384,10 @@
|
||||
dat += "<BR><span class='userdanger'>[other_players] players in invalid state or the statistics code is bugged!</span>"
|
||||
dat += "<BR>"
|
||||
|
||||
if(SSticker.mode.syndicates.len)
|
||||
var/list/nukeops = get_antagonists(/datum/antagonist/nukeop)
|
||||
if(nukeops.len)
|
||||
dat += "<br><table cellspacing=5><tr><td><B>Syndicates</B></td><td></td></tr>"
|
||||
for(var/datum/mind/N in SSticker.mode.syndicates)
|
||||
for(var/datum/mind/N in nukeops)
|
||||
var/mob/M = N.current
|
||||
if(M)
|
||||
dat += "<tr><td><a href='?_src_=holder;[HrefToken()];adminplayeropts=[REF(M)]'>[M.real_name]</a>[M.client ? "" : " <i>(No Client)</i>"][M.stat == DEAD ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
||||
@@ -523,7 +524,7 @@
|
||||
|
||||
if(SSticker.mode.brother_teams.len > 0)
|
||||
dat += "<br><table cellspacing=5><tr><td><B>Brothers</B></td><td></td><td></td></tr>"
|
||||
for(var/datum/objective_team/brother_team/team in SSticker.mode.brother_teams)
|
||||
for(var/datum/team/brother_team/team in SSticker.mode.brother_teams)
|
||||
for(var/datum/mind/brother in team.members)
|
||||
var/mob/M = brother.current
|
||||
if(M)
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
var/new_volume = input(user, "Choose a volume.", "Sound Emitter", sound_volume) as null|num
|
||||
if(isnull(new_volume))
|
||||
return
|
||||
new_volume = Clamp(new_volume, 0, 100)
|
||||
new_volume = CLAMP(new_volume, 0, 100)
|
||||
sound_volume = new_volume
|
||||
to_chat(user, "<span class='notice'>Volume set to [sound_volume]%.</span>")
|
||||
if(href_list["edit_mode"])
|
||||
@@ -115,7 +115,7 @@
|
||||
var/new_radius = input(user, "Choose a radius.", "Sound Emitter", sound_volume) as null|num
|
||||
if(isnull(new_radius))
|
||||
return
|
||||
new_radius = Clamp(new_radius, 0, 127)
|
||||
new_radius = CLAMP(new_radius, 0, 127)
|
||||
play_radius = new_radius
|
||||
to_chat(user, "<span class='notice'>Audible radius set to [play_radius].</span>")
|
||||
if(href_list["play"])
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
var/nsd = CONFIG_GET(number/note_stale_days)
|
||||
var/nfd = CONFIG_GET(number/note_fresh_days)
|
||||
if (agegate && type == "note" && isnum(nsd) && isnum(nfd) && nsd > nfd)
|
||||
var/alpha = Clamp(100 - (age - nfd) * (85 / (nsd - nfd)), 15, 100)
|
||||
var/alpha = CLAMP(100 - (age - nfd) * (85 / (nsd - nfd)), 15, 100)
|
||||
if (alpha < 100)
|
||||
if (alpha <= 15)
|
||||
if (skipped)
|
||||
|
||||
@@ -1943,7 +1943,7 @@
|
||||
return
|
||||
|
||||
var/list/offset = splittext(href_list["offset"],",")
|
||||
var/number = Clamp(text2num(href_list["object_count"]), 1, 100)
|
||||
var/number = CLAMP(text2num(href_list["object_count"]), 1, 100)
|
||||
var/X = offset.len > 0 ? text2num(offset[1]) : 0
|
||||
var/Y = offset.len > 1 ? text2num(offset[2]) : 0
|
||||
var/Z = offset.len > 2 ? text2num(offset[3]) : 0
|
||||
|
||||
@@ -435,7 +435,7 @@
|
||||
else if(expression[start + 1] == "\[" && islist(v))
|
||||
var/list/L = v
|
||||
var/index = SDQL_expression(source, expression[start + 2])
|
||||
if(isnum(index) && (!IsInteger(index) || L.len < index))
|
||||
if(isnum(index) && (!ISINTEGER(index) || L.len < index))
|
||||
to_chat(usr, "<span class='danger'>Invalid list index: [index]</span>")
|
||||
return null
|
||||
return L[index]
|
||||
|
||||
@@ -735,7 +735,7 @@ GLOBAL_PROTECT(LastAdminCalledProc)
|
||||
if(Rad.anchored)
|
||||
if(!Rad.loaded_tank)
|
||||
var/obj/item/tank/internals/plasma/Plasma = new/obj/item/tank/internals/plasma(Rad)
|
||||
ASSERT_GAS(/datum/gas/plasma, Plasma.air_contents)
|
||||
Plasma.air_contents.assert_gas(/datum/gas/plasma)
|
||||
Plasma.air_contents.gases[/datum/gas/plasma][MOLES] = 70
|
||||
Rad.drainratio = 0
|
||||
Rad.loaded_tank = Plasma
|
||||
|
||||
@@ -213,7 +213,9 @@ GLOBAL_PROTECT(VVpixelmovement)
|
||||
.["class"] = null
|
||||
return
|
||||
.["type"] = type
|
||||
.["value"] = new type()
|
||||
var/atom/newguy = new type()
|
||||
newguy.var_edited = TRUE
|
||||
.["value"] = newguy
|
||||
|
||||
if (VV_NEW_DATUM)
|
||||
var/type = pick_closest_path(FALSE, get_fancy_list_of_datum_types())
|
||||
@@ -221,7 +223,9 @@ GLOBAL_PROTECT(VVpixelmovement)
|
||||
.["class"] = null
|
||||
return
|
||||
.["type"] = type
|
||||
.["value"] = new type()
|
||||
var/datum/newguy = new type()
|
||||
newguy.var_edited = TRUE
|
||||
.["value"] = newguy
|
||||
|
||||
if (VV_NEW_TYPE)
|
||||
var/type = current_value
|
||||
@@ -237,7 +241,10 @@ GLOBAL_PROTECT(VVpixelmovement)
|
||||
.["class"] = null
|
||||
return
|
||||
.["type"] = type
|
||||
.["value"] = new type()
|
||||
var/datum/newguy = new type()
|
||||
if(istype(newguy))
|
||||
newguy.var_edited = TRUE
|
||||
.["value"] = newguy
|
||||
|
||||
|
||||
if (VV_NEW_LIST)
|
||||
|
||||
@@ -238,26 +238,17 @@
|
||||
if(agentcount < 3)
|
||||
return 0
|
||||
|
||||
var/nuke_code = random_nukecode()
|
||||
|
||||
var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list
|
||||
if(nuke)
|
||||
nuke.r_code = nuke_code
|
||||
|
||||
//Let's find the spawn locations
|
||||
var/leader_chosen = FALSE
|
||||
var/spawnpos = 1 //Decides where they'll spawn. 1=leader.
|
||||
|
||||
var/datum/team/nuclear/nuke_team
|
||||
for(var/mob/c in chosen)
|
||||
if(spawnpos > GLOB.nukeop_start.len)
|
||||
spawnpos = 1 //Ran out of spawns. Let's loop back to the first non-leader position
|
||||
var/mob/living/carbon/human/new_character=makeBody(c)
|
||||
if(!leader_chosen)
|
||||
leader_chosen = TRUE
|
||||
new_character.mind.make_Nuke(pick(GLOB.nukeop_leader_start), nuke_code, TRUE)
|
||||
var/datum/antagonist/nukeop/N = new_character.mind.add_antag_datum(/datum/antagonist/nukeop/leader)
|
||||
nuke_team = N.nuke_team
|
||||
else
|
||||
new_character.mind.make_Nuke(GLOB.nukeop_start[spawnpos], nuke_code)
|
||||
spawnpos++
|
||||
new_character.mind.add_antag_datum(/datum/antagonist/nukeop,nuke_team)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -317,12 +308,15 @@
|
||||
//Assign antag status and the mission
|
||||
SSticker.mode.traitors += Commando.mind
|
||||
Commando.mind.special_role = "deathsquad"
|
||||
|
||||
var/datum/objective/missionobj = new
|
||||
missionobj.owner = Commando.mind
|
||||
missionobj.explanation_text = mission
|
||||
missionobj.completed = 1
|
||||
Commando.mind.objectives += missionobj
|
||||
|
||||
Commando.mind.add_antag_datum(/datum/antagonist/auto_custom)
|
||||
|
||||
//Greet the commando
|
||||
to_chat(Commando, "<B><font size=3 color=red>You are the [numagents==1?"Deathsquad Officer":"Death Commando"].</font></B>")
|
||||
var/missiondesc = "Your squad is being sent on a mission to [station_name()] by Nanotrasen's Security Division."
|
||||
@@ -369,12 +363,15 @@
|
||||
//Assign antag status and the mission
|
||||
SSticker.mode.traitors += newmob.mind
|
||||
newmob.mind.special_role = "official"
|
||||
|
||||
var/datum/objective/missionobj = new
|
||||
missionobj.owner = newmob.mind
|
||||
missionobj.explanation_text = mission
|
||||
missionobj.completed = 1
|
||||
newmob.mind.objectives += missionobj
|
||||
|
||||
newmob.mind.add_antag_datum(/datum/antagonist/auto_custom)
|
||||
|
||||
if(CONFIG_GET(flag/enforce_human_authority))
|
||||
newmob.set_species(/datum/species/human)
|
||||
|
||||
@@ -474,12 +471,15 @@
|
||||
//Assign antag status and the mission
|
||||
SSticker.mode.traitors += ERTOperative.mind
|
||||
ERTOperative.mind.special_role = "ERT"
|
||||
|
||||
var/datum/objective/missionobj = new
|
||||
missionobj.owner = ERTOperative.mind
|
||||
missionobj.explanation_text = mission
|
||||
missionobj.completed = 1
|
||||
ERTOperative.mind.objectives += missionobj
|
||||
|
||||
ERTOperative.mind.add_antag_datum(/datum/antagonist/auto_custom)
|
||||
|
||||
//Greet the commando
|
||||
to_chat(ERTOperative, "<B><font size=3 color=red>You are [numagents==1?"the Emergency Response Team Commander":"an Emergency Response Officer"].</font></B>")
|
||||
var/missiondesc = "Your squad is being sent on a Code [alert] mission to [station_name()] by Nanotrasen's Security Division."
|
||||
|
||||
@@ -28,6 +28,7 @@ GLOBAL_VAR_INIT(highlander, FALSE)
|
||||
/mob/living/carbon/human/proc/make_scottish()
|
||||
SSticker.mode.traitors += mind
|
||||
mind.special_role = "highlander"
|
||||
|
||||
dna.species.species_traits |= NOGUNS //nice try jackass
|
||||
|
||||
var/datum/objective/steal/steal_objective = new
|
||||
@@ -40,6 +41,8 @@ GLOBAL_VAR_INIT(highlander, FALSE)
|
||||
hijack_objective.owner = mind
|
||||
mind.objectives += hijack_objective
|
||||
|
||||
mind.add_antag_datum(/datum/antagonist/auto_custom)
|
||||
|
||||
mind.announce_objectives()
|
||||
|
||||
for(var/obj/item/I in get_equipped_items())
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/vol = input(usr, "What volume would you like the sound to play at?",, 100) as null|num
|
||||
if(!vol)
|
||||
return
|
||||
vol = Clamp(vol, 1, 100)
|
||||
vol = CLAMP(vol, 1, 100)
|
||||
|
||||
var/sound/admin_sound = new()
|
||||
admin_sound.file = S
|
||||
|
||||
@@ -386,7 +386,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
A.equip_wizard()
|
||||
if("Syndicate")
|
||||
new_character.forceMove(pick(GLOB.nukeop_start))
|
||||
call(/datum/game_mode/proc/equip_syndicate)(new_character)
|
||||
var/datum/antagonist/nukeop/N = new_character.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE)
|
||||
N.equip_op()
|
||||
if("Space Ninja")
|
||||
var/list/ninja_spawn = list()
|
||||
for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
|
||||
@@ -522,7 +523,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Delete") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
if(isturf(D))
|
||||
var/turf/T = D
|
||||
T.ChangeTurf(T.baseturf)
|
||||
T.ScrapeAway()
|
||||
else
|
||||
qdel(D)
|
||||
|
||||
@@ -1206,7 +1207,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
|
||||
if(!holder)
|
||||
return
|
||||
|
||||
var/list/punishment_list = list(ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_FIREBALL)
|
||||
var/list/punishment_list = list(ADMIN_PUNISHMENT_LIGHTNING, ADMIN_PUNISHMENT_BRAINDAMAGE, ADMIN_PUNISHMENT_GIB, ADMIN_PUNISHMENT_BSA, ADMIN_PUNISHMENT_FIREBALL, ADMIN_PUNISHMENT_ROD)
|
||||
|
||||
var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list
|
||||
|
||||
@@ -1228,6 +1229,12 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
|
||||
bluespace_artillery(target)
|
||||
if(ADMIN_PUNISHMENT_FIREBALL)
|
||||
new /obj/effect/temp_visual/target(get_turf(target))
|
||||
if(ADMIN_PUNISHMENT_ROD)
|
||||
var/turf/T = get_turf(target)
|
||||
var/startside = pick(GLOB.cardinals)
|
||||
var/turf/startT = spaceDebrisStartLoc(startside, T.z)
|
||||
var/turf/endT = spaceDebrisFinishLoc(startside, T.z)
|
||||
new /obj/effect/immovablerod(startT, endT,target)
|
||||
|
||||
var/msg = "[key_name_admin(usr)] punished [key_name_admin(target)] with [punishment]."
|
||||
message_admins(msg)
|
||||
|
||||
Reference in New Issue
Block a user