mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into mycomputerismadewithoverlayswhyisntyours
Conflicts: icons/obj/chemical.dmi
This commit is contained in:
@@ -10,6 +10,7 @@ var/list/admin_verbs_default = list(
|
||||
/client/proc/deadchat, /*toggles deadchat on/off*/
|
||||
/client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
|
||||
/client/proc/toggleprayers, /*toggles prayers on/off*/
|
||||
/client/verb/toggleprayersounds, /*Toggles prayer sounds (HALLELUJAH!)*/
|
||||
/client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
|
||||
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
|
||||
/client/proc/secrets,
|
||||
@@ -120,7 +121,9 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/SDQL2_query,
|
||||
/client/proc/test_movable_UI,
|
||||
/client/proc/test_snap_UI,
|
||||
/client/proc/debugNatureMapGenerator
|
||||
/client/proc/debugNatureMapGenerator,
|
||||
/client/proc/check_bomb_impacts,
|
||||
/proc/machine_upgrade
|
||||
)
|
||||
var/list/admin_verbs_possess = list(
|
||||
/proc/possess,
|
||||
@@ -547,7 +550,7 @@ var/list/admin_verbs_hideable = list(
|
||||
var/list/Lines = file2list("config/admins.txt")
|
||||
for(var/line in Lines)
|
||||
var/list/splitline = text2list(line, " = ")
|
||||
if(splitline[1] == ckey)
|
||||
if(lowertext(splitline[1]) == ckey)
|
||||
if(splitline.len >= 2)
|
||||
rank = ckeyEx(splitline[2])
|
||||
break
|
||||
|
||||
@@ -307,7 +307,7 @@
|
||||
if(ratio)
|
||||
config.midround_antag_life_check = ratio/100
|
||||
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] edited the midround antagonist living crew ratio to [ratio * 100]% alive.</span>")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] edited the midround antagonist living crew ratio to [ratio]% alive.</span>")
|
||||
check_antagonists()
|
||||
|
||||
else if(href_list["toggle_noncontinuous_behavior"])
|
||||
@@ -1605,6 +1605,7 @@
|
||||
message_admins("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]")
|
||||
feedback_inc("admin_cookies_spawned",1)
|
||||
H << "<span class='adminnotice'>Your prayers have been answered!! You received the <b>best cookie</b>!</span>"
|
||||
H << 'sound/effects/pray_chaplain.ogg'
|
||||
|
||||
else if(href_list["BlueSpaceArtillery"])
|
||||
var/mob/living/M = locate(href_list["BlueSpaceArtillery"])
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
#define BASIC_BUILDMODE 1
|
||||
#define ADV_BUILDMODE 2
|
||||
#define VAR_BUILDMODE 3
|
||||
#define THROW_BUILDMODE 4
|
||||
#define AREA_BUILDMODE 5
|
||||
#define NUM_BUILDMODES 5
|
||||
|
||||
/proc/togglebuildmode(mob/M as mob in player_list)
|
||||
set name = "Toggle Build Mode"
|
||||
set category = "Special Verbs"
|
||||
@@ -35,7 +42,7 @@
|
||||
M.client.screen += D
|
||||
H.cl = M.client
|
||||
|
||||
/obj/effect/bmode//Cleaning up the tree a bit
|
||||
/obj/effect/bmode //Cleaning up the tree a bit
|
||||
density = 1
|
||||
anchored = 1
|
||||
layer = 20
|
||||
@@ -68,7 +75,7 @@
|
||||
|
||||
/obj/effect/bmode/buildhelp/Click()
|
||||
switch(master.cl.buildmode)
|
||||
if(1)
|
||||
if(BASIC_BUILDMODE)
|
||||
usr << "\blue ***********************************************************"
|
||||
usr << "\blue Left Mouse Button = Construct / Upgrade"
|
||||
usr << "\blue Right Mouse Button = Deconstruct / Delete / Downgrade"
|
||||
@@ -78,7 +85,7 @@
|
||||
usr << "\blue Use the button in the upper left corner to"
|
||||
usr << "\blue change the direction of built objects."
|
||||
usr << "\blue ***********************************************************"
|
||||
if(2)
|
||||
if(ADV_BUILDMODE)
|
||||
usr << "\blue ***********************************************************"
|
||||
usr << "\blue Right Mouse Button on buildmode button = Set object type"
|
||||
usr << "\blue Left Mouse Button on turf/obj = Place objects"
|
||||
@@ -87,17 +94,23 @@
|
||||
usr << "\blue Use the button in the upper left corner to"
|
||||
usr << "\blue change the direction of built objects."
|
||||
usr << "\blue ***********************************************************"
|
||||
if(3)
|
||||
if(VAR_BUILDMODE)
|
||||
usr << "\blue ***********************************************************"
|
||||
usr << "\blue Right Mouse Button on buildmode button = Select var(type) & value"
|
||||
usr << "\blue Left Mouse Button on turf/obj/mob = Set var(type) & value"
|
||||
usr << "\blue Right Mouse Button on turf/obj/mob = Reset var's value"
|
||||
usr << "\blue ***********************************************************"
|
||||
if(4)
|
||||
if(THROW_BUILDMODE)
|
||||
usr << "\blue ***********************************************************"
|
||||
usr << "\blue Left Mouse Button on turf/obj/mob = Select"
|
||||
usr << "\blue Right Mouse Button on turf/obj/mob = Throw"
|
||||
usr << "\blue ***********************************************************"
|
||||
if(AREA_BUILDMODE)
|
||||
usr << "\blue ***********************************************************"
|
||||
usr << "\blue Left Mouse Button on turf/obj/mob = Select corner"
|
||||
usr << "\blue Right Mouse Button on buildmode button = Select generator"
|
||||
usr << "\blue ***********************************************************"
|
||||
|
||||
return 1
|
||||
|
||||
/obj/effect/bmode/buildquit
|
||||
@@ -117,6 +130,13 @@
|
||||
var/obj/effect/bmode/buildmode/buildmode = null
|
||||
var/obj/effect/bmode/buildquit/buildquit = null
|
||||
var/atom/movable/throw_atom = null
|
||||
var/turf/cornerA = null
|
||||
var/turf/cornerB = null
|
||||
var/generator_path = null
|
||||
|
||||
/obj/effect/bmode/buildholder/proc/Reset()//Reset temporary variables
|
||||
cornerA = null
|
||||
cornerB = null
|
||||
|
||||
/obj/effect/bmode/buildmode
|
||||
icon_state = "buildmode1"
|
||||
@@ -129,25 +149,15 @@
|
||||
var/list/pa = params2list(params)
|
||||
|
||||
if(pa.Find("left"))
|
||||
switch(master.cl.buildmode)
|
||||
if(1)
|
||||
master.cl.buildmode = 2
|
||||
src.icon_state = "buildmode2"
|
||||
if(2)
|
||||
master.cl.buildmode = 3
|
||||
src.icon_state = "buildmode3"
|
||||
if(3)
|
||||
master.cl.buildmode = 4
|
||||
src.icon_state = "buildmode4"
|
||||
if(4)
|
||||
master.cl.buildmode = 1
|
||||
src.icon_state = "buildmode1"
|
||||
master.cl.buildmode = (master.cl.buildmode % NUM_BUILDMODES) +1
|
||||
master.Reset()
|
||||
src.icon_state = "buildmode[master.cl.buildmode]"
|
||||
|
||||
else if(pa.Find("right"))
|
||||
switch(master.cl.buildmode)
|
||||
if(1)
|
||||
if(BASIC_BUILDMODE)
|
||||
return 1
|
||||
if(2)
|
||||
if(ADV_BUILDMODE)
|
||||
objholder = text2path(input(usr,"Enter typepath:" ,"Typepath","/obj/structure/closet"))
|
||||
if(!ispath(objholder))
|
||||
objholder = /obj/structure/closet
|
||||
@@ -155,7 +165,7 @@
|
||||
else
|
||||
if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0))
|
||||
objholder = /obj/structure/closet
|
||||
if(3)
|
||||
if(VAR_BUILDMODE)
|
||||
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
|
||||
|
||||
master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
|
||||
@@ -174,6 +184,16 @@
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
|
||||
if("turf-reference")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
|
||||
if(AREA_BUILDMODE)
|
||||
var/list/gen_paths = typesof(/datum/mapGenerator) - /datum/mapGenerator
|
||||
|
||||
var/type = input(usr,"Select Generator Type","Type") as null|anything in gen_paths
|
||||
if(!type) return
|
||||
|
||||
master.generator_path = type
|
||||
master.cornerA = null
|
||||
master.cornerB = null
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -186,8 +206,11 @@
|
||||
if(!holder) return
|
||||
var/list/pa = params2list(params)
|
||||
|
||||
if(istype(object,/obj/effect/bmode))
|
||||
return
|
||||
|
||||
switch(buildmode)
|
||||
if(1)
|
||||
if(BASIC_BUILDMODE)
|
||||
if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") )
|
||||
var/turf/T = object
|
||||
if(istype(object,/turf/space))
|
||||
@@ -233,7 +256,7 @@
|
||||
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
|
||||
WIN.dir = NORTHWEST
|
||||
log_admin("Build Mode: [key_name(usr)] built a window at ([object.x],[object.y],[object.z])")
|
||||
if(2)
|
||||
if(ADV_BUILDMODE)
|
||||
if(pa.Find("left"))
|
||||
if(ispath(holder.buildmode.objholder,/turf))
|
||||
var/turf/T = get_turf(object)
|
||||
@@ -248,7 +271,7 @@
|
||||
log_admin("Build Mode: [key_name(usr)] deleted [object] at ([object.x],[object.y],[object.z])")
|
||||
qdel(object)
|
||||
|
||||
if(3)
|
||||
if(VAR_BUILDMODE)
|
||||
if(pa.Find("left")) //I cant believe this shit actually compiles.
|
||||
if(object.vars.Find(holder.buildmode.varholder))
|
||||
log_admin("Build Mode: [key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
|
||||
@@ -262,7 +285,7 @@
|
||||
else
|
||||
usr << "<span class='warning'>[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'</span>"
|
||||
|
||||
if(4)
|
||||
if(THROW_BUILDMODE)
|
||||
if(pa.Find("left"))
|
||||
if(isturf(object))
|
||||
return
|
||||
@@ -271,4 +294,35 @@
|
||||
if(holder.throw_atom)
|
||||
holder.throw_atom.throw_at(object, 10, 1)
|
||||
log_admin("Build Mode: [key_name(usr)] threw [holder.throw_atom] at [object] ([object.x],[object.y],[object.z])")
|
||||
|
||||
if(AREA_BUILDMODE)
|
||||
if(!holder.cornerA)
|
||||
holder.cornerA = get_turf(object)
|
||||
return
|
||||
if(holder.cornerA && !holder.cornerB)
|
||||
holder.cornerB = get_turf(object)
|
||||
|
||||
if(pa.Find("left")) //rectangular
|
||||
if(holder.cornerA && holder.cornerB)
|
||||
if(!holder.generator_path)
|
||||
usr << "<span class='warning'>Select generator type first.</span>"
|
||||
var/datum/mapGenerator/G = new holder.generator_path
|
||||
G.defineRegion(holder.cornerA,holder.cornerB,1)
|
||||
G.generate()
|
||||
holder.cornerA = null
|
||||
holder.cornerB = null
|
||||
return
|
||||
/* Something wrong with this, will check later
|
||||
if(pa.Find("right")) // circular
|
||||
if(holder.cornerA && holder.cornerB)
|
||||
if(!holder.generator_path)
|
||||
usr << "<span class='warning'>Select generator type first.</span>"
|
||||
var/datum/mapGenerator/G = new holder.generator_path
|
||||
G.defineCircularRegion(holder.cornerA,holder.cornerB,1)
|
||||
G.generate()
|
||||
holder.cornerA = null
|
||||
holder.cornerB = null
|
||||
return
|
||||
*/
|
||||
//Something wrong - Reset
|
||||
holder.cornerA = null
|
||||
holder.cornerB = null
|
||||
@@ -1091,6 +1091,8 @@ var/global/list/g_fancy_list_of_types = null
|
||||
|
||||
usr << browse(dat, "window=dellog")
|
||||
|
||||
|
||||
|
||||
//Deathsquad
|
||||
/proc/equip_deathsquad(var/mob/living/carbon/human/M, var/officer)
|
||||
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/headset_cent/alt(M)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
/proc/machine_upgrade(obj/machinery/M as obj in world)
|
||||
set name = "Tweak Component Ratings"
|
||||
set category = "Debug"
|
||||
var/new_rating = input("Enter new rating:","Num") as num
|
||||
if(new_rating && M.component_parts)
|
||||
for(var/obj/item/weapon/stock_parts/P in M.component_parts)
|
||||
P.rating = new_rating
|
||||
M.RefreshParts()
|
||||
|
||||
feedback_add_details("admin_verb","MU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -142,15 +142,33 @@ var/list/VVckey_edit = list("key", "ckey")
|
||||
if(confirm != "Continue")
|
||||
return
|
||||
|
||||
var/list/names = sortList(L)
|
||||
var/assoc = 0
|
||||
if(L.len > 0)
|
||||
var/a = L[1]
|
||||
if(istext(a) && L[a] != null)
|
||||
assoc = 1 //This is pretty weak test but i can't think of anything else
|
||||
usr << "List appears to be associative."
|
||||
|
||||
var/variable = input("Which var?","Var") as null|anything in names + "(ADD VAR)"
|
||||
var/list/names = null
|
||||
if(!assoc)
|
||||
names = sortList(L)
|
||||
|
||||
var/variable
|
||||
var/assoc_key
|
||||
if(assoc)
|
||||
variable = input("Which var?","Var") as null|anything in L + "(ADD VAR)"
|
||||
else
|
||||
variable = input("Which var?","Var") as null|anything in names + "(ADD VAR)"
|
||||
|
||||
if(variable == "(ADD VAR)")
|
||||
mod_list_add(L, O, original_name, objectvar)
|
||||
return
|
||||
|
||||
if(!variable)
|
||||
if(assoc)
|
||||
assoc_key = variable
|
||||
variable = L[assoc_key]
|
||||
|
||||
if(!assoc && !variable || assoc && !assoc_key)
|
||||
return
|
||||
|
||||
var/default
|
||||
@@ -240,7 +258,12 @@ var/list/VVckey_edit = list("key", "ckey")
|
||||
if(holder.marked_datum && class == "marked datum ([holder.marked_datum.type])")
|
||||
class = "marked datum"
|
||||
|
||||
var/original_var = L[L.Find(variable)]
|
||||
var/original_var
|
||||
if(assoc)
|
||||
original_var = L[assoc_key]
|
||||
else
|
||||
original_var = L[L.Find(variable)]
|
||||
|
||||
var/new_var
|
||||
switch(class) //Spits a runtime error if you try to modify an entry in the contents list. Dunno how to fix it, yet.
|
||||
|
||||
@@ -249,7 +272,10 @@ var/list/VVckey_edit = list("key", "ckey")
|
||||
|
||||
if("restore to default")
|
||||
new_var = initial(variable)
|
||||
L[L.Find(variable)] = new_var
|
||||
if(assoc)
|
||||
L[assoc_key] = new_var
|
||||
else
|
||||
L[L.Find(variable)] = new_var
|
||||
|
||||
if("edit referenced object")
|
||||
modify_variables(variable)
|
||||
@@ -263,35 +289,59 @@ var/list/VVckey_edit = list("key", "ckey")
|
||||
|
||||
if("text")
|
||||
new_var = input("Enter new text:","Text") as text
|
||||
L[L.Find(variable)] = new_var
|
||||
if(assoc)
|
||||
L[assoc_key] = new_var
|
||||
else
|
||||
L[L.Find(variable)] = new_var
|
||||
|
||||
if("num")
|
||||
new_var = input("Enter new number:","Num") as num
|
||||
L[L.Find(variable)] = new_var
|
||||
if(assoc)
|
||||
L[assoc_key] = new_var
|
||||
else
|
||||
L[L.Find(variable)] = new_var
|
||||
|
||||
if("type")
|
||||
new_var = input("Enter type:","Type") in typesof(/obj,/mob,/area,/turf)
|
||||
L[L.Find(variable)] = new_var
|
||||
if(assoc)
|
||||
L[assoc_key] = new_var
|
||||
else
|
||||
L[L.Find(variable)] = new_var
|
||||
|
||||
if("reference")
|
||||
new_var = input("Select reference:","Reference") as mob|obj|turf|area in world
|
||||
L[L.Find(variable)] = new_var
|
||||
if(assoc)
|
||||
L[assoc_key] = new_var
|
||||
else
|
||||
L[L.Find(variable)] = new_var
|
||||
|
||||
if("mob reference")
|
||||
new_var = input("Select reference:","Reference") as mob in world
|
||||
L[L.Find(variable)] = new_var
|
||||
if(assoc)
|
||||
L[assoc_key] = new_var
|
||||
else
|
||||
L[L.Find(variable)] = new_var
|
||||
|
||||
if("file")
|
||||
new_var = input("Pick file:","File") as file
|
||||
L[L.Find(variable)] = new_var
|
||||
if(assoc)
|
||||
L[assoc_key] = new_var
|
||||
else
|
||||
L[L.Find(variable)] = new_var
|
||||
|
||||
if("icon")
|
||||
new_var = input("Pick icon:","Icon") as icon
|
||||
L[L.Find(variable)] = new_var
|
||||
if(assoc)
|
||||
L[assoc_key] = new_var
|
||||
else
|
||||
L[L.Find(variable)] = new_var
|
||||
|
||||
if("marked datum")
|
||||
new_var = holder.marked_datum
|
||||
L[L.Find(variable)] = new_var
|
||||
if(assoc)
|
||||
L[assoc_key] = new_var
|
||||
else
|
||||
L[L.Find(variable)] = new_var
|
||||
|
||||
world.log << "### ListVarEdit by [src]: [O.type] [objectvar]: [original_var]=[new_var]"
|
||||
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: [original_var]=[new_var]")
|
||||
@@ -539,4 +589,4 @@ var/list/VVckey_edit = list("key", "ckey")
|
||||
|
||||
world.log << "### VarEdit by [src]: [O.type] [variable]=[html_encode("[O.vars[variable]]")]"
|
||||
log_admin("[key_name(src)] modified [original_name]'s [variable] to [O.vars[variable]]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]")
|
||||
|
||||
@@ -17,11 +17,21 @@
|
||||
return
|
||||
|
||||
var/image/cross = image('icons/obj/storage.dmi',"bible")
|
||||
msg = "<span class='adminnotice'>\icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;traitor=\ref[src]'>TP</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]</span>"
|
||||
|
||||
if(usr.job == "Chaplain")
|
||||
cross = image('icons/obj/storage.dmi',"kingyellow")
|
||||
msg = "<span class='adminnotice'>\icon[cross] <b><font color=blue>CHAPLAIN PRAYER: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;traitor=\ref[src]'>TP</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]</span>"
|
||||
else if(iscultist(usr))
|
||||
cross = image('icons/obj/storage.dmi',"tome")
|
||||
msg = "<span class='adminnotice'>\icon[cross] <b><font color=red>CULTIST PRAYER: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;traitor=\ref[src]'>TP</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]</span>"
|
||||
else
|
||||
cross = image('icons/obj/storage.dmi',"bible")
|
||||
msg = "<span class='adminnotice'>\icon[cross] <b><font color=purple>PRAYER: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;traitor=\ref[src]'>TP</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]</span>"
|
||||
for(var/client/C in admins)
|
||||
if(C.prefs.chat_toggles & CHAT_PRAYER)
|
||||
C << msg
|
||||
if(C.prefs.toggles & SOUND_PRAYERS)
|
||||
if(usr.job == "Chaplain")
|
||||
C << 'sound/effects/pray.ogg'
|
||||
usr << "Your prayers have been received by the gods."
|
||||
|
||||
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
Reference in New Issue
Block a user