Merge branch 'master' into upstream-merge-29105

This commit is contained in:
LetterJay
2017-09-02 07:11:32 -05:00
committed by GitHub
1577 changed files with 55829 additions and 215217 deletions

View File

@@ -1 +0,0 @@
garbage

View File

@@ -27,7 +27,7 @@ GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
return list(
/client/proc/invisimin, /*allows our mob to go invisible/visible*/
// /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage
/datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
/datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags_1*/
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
/client/proc/check_ai_laws, /*shows AI and borg laws*/
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
@@ -458,7 +458,7 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list(
mob.invisibility = INVISIBILITY_MAXIMUM //JUST IN CASE
mob.alpha = 0 //JUUUUST IN CASE
mob.name = " "
mob.mouse_opacity = 0
mob.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
log_admin("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]")
message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]")
SSblackbox.add_details("admin_verb","Stealth Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -12,7 +12,7 @@
var/static/list/create_object_forms = list(
/obj, /obj/structure, /obj/machinery, /obj/effect,
/obj/item, /obj/item/clothing, /obj/item/stack, /obj/item/device,
/obj/item/weapon, /obj/item/weapon/reagent_containers, /obj/item/weapon/gun)
/obj/item/weapon, /obj/item/reagent_containers, /obj/item/gun)
var/path = input("Select the path of the object you wish to create.", "Path", /obj) in create_object_forms
var/html_form = create_object_forms[path]

View File

@@ -1,7 +1,7 @@
/obj/effect/fun_balloon
name = "fun balloon"
desc = "This is going to be a laugh riot."
icon = 'icons/obj/weapons.dmi'
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "syndballoon"
anchored = TRUE
var/popped = FALSE
@@ -86,7 +86,7 @@
/obj/effect/station_crash
name = "station crash"
desc = "With no survivors!"
icon = 'icons/obj/weapons.dmi'
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "syndballoon"
anchored = TRUE
@@ -105,7 +105,7 @@
/obj/effect/shuttle_build
name = "shuttle_build"
desc = "Some assembly required"
icon = 'icons/obj/weapons.dmi'
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "syndballoon"
anchored = TRUE
@@ -139,7 +139,7 @@
L.forceMove(LA)
L.hallucination = 0
to_chat(L, "<span class='reallybig redtext'>The battle is won. Your bloodlust subsides.</span>")
for(var/obj/item/weapon/twohanded/required/chainsaw/doomslayer/chainsaw in L)
for(var/obj/item/twohanded/required/chainsaw/doomslayer/chainsaw in L)
qdel(chainsaw)
else
to_chat(L, "You are not yet worthy of passing. Drag a severed head to the barrier to be allowed entry to the hall of champions.")

View File

@@ -31,11 +31,11 @@ GLOBAL_PROTECT(admin_datums)
GLOB.admin_datums[ckey] = src
/datum/admins/proc/associate(client/C)
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin_private("[key_name(usr)][msg]")
return
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin_private("[key_name(usr)][msg]")
return
if(istype(C))
owner = C
owner.holder = src
@@ -66,7 +66,7 @@ GLOBAL_PROTECT(admin_datums)
return FALSE //nice try trialmin
/*
checks if usr is an admin with at least ONE of the flags in rights_required. (Note, they don't need all the flags)
checks if usr is an admin with at least ONE of the flags_1 in rights_required. (Note, they don't need all the flags_1)
if rights_required == 0, then it simply checks if they are an admin.
if it doesn't return 1 and show_msg=1 it will prints a message explaining why the check has failed
generally it would be used like so:
@@ -84,7 +84,7 @@ you will have to do something like if(client.rights & R_ADMIN) yourself.
return 1
else
if(show_msg)
to_chat(usr, "<font color='red'>Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].</font>")
to_chat(usr, "<font color='red'>Error: You do not have sufficient rights to do that. You require one of the following flags_1:[rights2text(rights_required," ")].</font>")
return 0
//probably a bit iffy - will hopefully figure out a better solution

View File

@@ -77,7 +77,7 @@
if (!SSipintel.enabled)
return
var/list/http[] = world.Export("http://[config.ipintel_domain]/check.php?ip=[ip]&contact=[config.ipintel_email]&format=json&flags=f")
var/list/http[] = world.Export("http://[config.ipintel_domain]/check.php?ip=[ip]&contact=[config.ipintel_email]&format=json&flags_1=f")
if (http)
var/status = text2num(http["STATUS"])

View File

@@ -86,7 +86,7 @@
admin_id = text2num(query_get_admin.item[1])
if(new_admin)
var/datum/DBQuery/query_add_admin = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin")]` (`id`, `ckey`, `rank`, `level`, `flags`) VALUES (null, '[adm_ckey]', '[new_rank]', -1, 0)")
var/datum/DBQuery/query_add_admin = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin")]` (`id`, `ckey`, `rank`, `level`, `flags_1`) VALUES (null, '[adm_ckey]', '[new_rank]', -1, 0)")
if(!query_add_admin.warn_execute())
return
var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');")
@@ -119,7 +119,7 @@
if(!adm_ckey || !istext(adm_ckey) || !isnum(new_permission))
return
var/datum/DBQuery/query_get_perms = SSdbcore.NewQuery("SELECT id, flags FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'")
var/datum/DBQuery/query_get_perms = SSdbcore.NewQuery("SELECT id, flags_1 FROM [format_table_name("admin")] WHERE ckey = '[adm_ckey]'")
if(!query_get_perms.warn_execute())
return
@@ -130,7 +130,7 @@
if(!admin_id)
return
var/datum/DBQuery/query_change_perms = SSdbcore.NewQuery("UPDATE `[format_table_name("admin")]` SET flags = [new_permission] WHERE id = [admin_id]")
var/datum/DBQuery/query_change_perms = SSdbcore.NewQuery("UPDATE `[format_table_name("admin")]` SET flags_1 = [new_permission] WHERE id = [admin_id]")
if(!query_change_perms.warn_execute())
return
var/datum/DBQuery/query_change_perms_log = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edit permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');")

View File

@@ -396,7 +396,7 @@
dat += "<tr><td><i><a href='?_src_=vars;Vars=\ref[N]'>[N.name]([N.key])</a> Nuclear Operative Body destroyed!</i></td>"
dat += "<td><A href='?priv_msg=[N.key]'>PM</A></td></tr>"
dat += "</table><br><table><tr><td><B>Nuclear Disk(s)</B></td></tr>"
for(var/obj/item/weapon/disk/nuclear/N in GLOB.poi_list)
for(var/obj/item/disk/nuclear/N in GLOB.poi_list)
dat += "<tr><td>[N.name], "
var/atom/disk_loc = N.loc
while(!isturf(disk_loc))

View File

@@ -410,7 +410,7 @@
H.equip_to_slot_or_del(I, slot_w_uniform)
qdel(olduniform)
if(droptype == "Yes")
I.flags |= NODROP
I.flags_1 |= NODROP_1
else
to_chat(H, "You're not kawaii enough for this.")

View File

@@ -1702,7 +1702,7 @@
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.")
return
var/obj/item/weapon/reagent_containers/food/snacks/cookie/cookie = new(H)
var/obj/item/reagent_containers/food/snacks/cookie/cookie = new(H)
if(H.put_in_hands(cookie))
H.update_inv_hands()
else
@@ -1771,7 +1771,7 @@
else if(href_list["reject_custom_name"])
if(!check_rights(R_ADMIN))
return
var/obj/item/weapon/station_charter/charter = locate(href_list["reject_custom_name"])
var/obj/item/station_charter/charter = locate(href_list["reject_custom_name"])
if(istype(charter))
charter.reject_proposed(usr)
else if(href_list["jumpto"])

View File

@@ -10,7 +10,7 @@
-- Will change all the tube lights to green
UPDATE /obj/machinery/light IN world SET color = "#0F0" WHERE icon_state == "tube1"
-- Will delete all pickaxes. "IN world" is not required.
DELETE /obj/item/weapon/pickaxe
DELETE /obj/item/pickaxe
-- Will flicker the lights once, then turn all mobs green. The semicolon is important to separate the consecutive querys, but is not required for standard one-query use
CALL flicker(1) ON /obj/machinery/light; UPDATE /mob SET color = "#00cc00"

View File

@@ -3,8 +3,8 @@
/proc/_abs(A)
return abs(A)
/*/proc/_animate(atom/A, set_vars, time = 10, loop = 1, easing = LINEAR_EASING, flags = null)
animate(A, set_vars, time, loop, easing, flags)
/*/proc/_animate(atom/A, set_vars, time = 10, loop = 1, easing = LINEAR_EASING, flags_1 = null)
animate(A, set_vars, time, loop, easing, flags_1)
Borked. If anyone wants to fix this be my guest.*/
/proc/_acrccos(A)
@@ -112,8 +112,8 @@
/proc/_range(Dist, Center = usr)
return range(Dist, Center)
/proc/_regex(pattern, flags)
return regex(pattern, flags)
/proc/_regex(pattern, flags_1)
return regex(pattern, flags_1)
/proc/_REGEX_QUOTE(text)
return REGEX_QUOTE(text)

View File

@@ -24,7 +24,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
QDEL_NULL(cstatclick)
QDEL_NULL(rstatclick)
return ..()
/datum/admin_help_tickets/proc/TicketByID(id)
var/list/lists = list(active_tickets, closed_tickets, resolved_tickets)
for(var/I in lists)
@@ -185,8 +185,6 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
TimeoutVerb()
var/parsed_message = keywords_lookup(msg)
statclick = new(null, src)
_interactions = list()
@@ -194,7 +192,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
AddInteraction("<font color='blue'>[key_name_admin(usr)] PM'd [LinkedReplyName()]</font>")
message_admins("<font color='blue'>Ticket [TicketHref("#[id]")] created</font>")
else
MessageNoRecipient(msg, parsed_message)
MessageNoRecipient(msg)
//send it to irc if nobody is on and tell us how many were on
var/admin_number_present = send2irc_adminless_only(initiator_ckey, "Ticket #[id]: [name]")
@@ -249,13 +247,13 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
//message from the initiator without a target, all admins will see this
//won't bug irc
/datum/admin_help/proc/MessageNoRecipient(msg, parsed_msg)
/datum/admin_help/proc/MessageNoRecipient(msg)
var/ref_src = "\ref[src]"
//Message to be sent to all admins
var/admin_msg = "<span class='adminnotice'><span class='adminhelp'>Ticket [TicketHref("#[id]", ref_src)]</span><b>: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]:</b> [parsed_msg]</span>"
var/admin_msg = "<span class='adminnotice'><span class='adminhelp'>Ticket [TicketHref("#[id]", ref_src)]</span><b>: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]:</b> [keywords_lookup(msg)]</span>"
AddInteraction("<font color='red'>[LinkedReplyName(ref_src)]: [msg]</font>")
//send this msg to all admins
for(var/client/X in GLOB.admins)
if(X.prefs.toggles & SOUND_ADMINHELP)

View File

@@ -348,11 +348,10 @@ GLOBAL_PROTECT(AdminProcCallCount)
/obj/effect/decal/cleanable = "CLEANABLE",
/obj/item/device/radio/headset = "HEADSET",
/obj/item/clothing/head/helmet/space = "SPESSHELMET",
/obj/item/weapon/book/manual = "MANUAL",
/obj/item/weapon/reagent_containers/food/drinks = "DRINK", //longest paths comes first
/obj/item/weapon/reagent_containers/food = "FOOD",
/obj/item/weapon/reagent_containers = "REAGENT_CONTAINERS",
/obj/item/weapon = "WEAPON",
/obj/item/book/manual = "MANUAL",
/obj/item/reagent_containers/food/drinks = "DRINK", //longest paths comes first
/obj/item/reagent_containers/food = "FOOD",
/obj/item/reagent_containers = "REAGENT_CONTAINERS",
/obj/machinery/atmospherics = "ATMOS_MECH",
/obj/machinery/portable_atmospherics = "PORT_ATMOS",
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK",
@@ -442,14 +441,14 @@ GLOBAL_PROTECT(AdminProcCallCount)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/worn = H.wear_id
var/obj/item/weapon/card/id/id = null
var/obj/item/card/id/id = null
if(worn)
id = worn.GetID()
if(id)
id.icon_state = "gold"
id.access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
else
id = new /obj/item/weapon/card/id/gold(H.loc)
id = new /obj/item/card/id/gold(H.loc)
id.access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
id.registered_name = H.real_name
id.assignment = "Captain"
@@ -460,8 +459,8 @@ GLOBAL_PROTECT(AdminProcCallCount)
var/obj/item/device/pda/PDA = worn
PDA.id = id
id.forceMove(PDA)
else if(istype(worn, /obj/item/weapon/storage/wallet))
var/obj/item/weapon/storage/wallet/W = worn
else if(istype(worn, /obj/item/storage/wallet))
var/obj/item/storage/wallet/W = worn
W.front_id = id
id.forceMove(W)
W.update_icon()
@@ -505,12 +504,13 @@ GLOBAL_PROTECT(AdminProcCallCount)
var/list/areas_with_LS = list()
var/list/areas_with_intercom = list()
var/list/areas_with_camera = list()
var/list/station_areas_blacklist = typecacheof(list(/area/holodeck/rec_center, /area/shuttle, /area/engine/supermatter, /area/science/test_area, /area/space, /area/solar, /area/mine, /area/ruin))
for(var/area/A in world)
if(on_station)
var/turf/picked = safepick(get_area_turfs(A.type))
if(picked && (picked.z == ZLEVEL_STATION))
if(!(A.type in areas_all))
if(!(A.type in areas_all) && !is_type_in_typecache(A, station_areas_blacklist))
areas_all.Add(A.type)
else if(!(A.type in areas_all))
areas_all.Add(A.type)
@@ -705,7 +705,7 @@ GLOBAL_PROTECT(AdminProcCallCount)
for(var/obj/machinery/power/rad_collector/Rad in GLOB.machines)
if(Rad.anchored)
if(!Rad.loaded_tank)
var/obj/item/weapon/tank/internals/plasma/Plasma = new/obj/item/weapon/tank/internals/plasma(Rad)
var/obj/item/tank/internals/plasma/Plasma = new/obj/item/tank/internals/plasma(Rad)
Plasma.air_contents.assert_gas("plasma")
Plasma.air_contents.gases["plasma"][MOLES] = 70
Rad.drainratio = 0

View File

@@ -3,7 +3,7 @@
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)
for(var/obj/item/stock_parts/P in M.component_parts)
P.rating = new_rating
M.RefreshParts()

View File

@@ -16,11 +16,11 @@
organ.Insert(C)
if("add implant")
for(var/path in subtypesof(/obj/item/weapon/implant))
var/dat = replacetext("[path]", "/obj/item/weapon/implant/", ":")
for(var/path in subtypesof(/obj/item/implant))
var/dat = replacetext("[path]", "/obj/item/implant/", ":")
organs[dat] = path
var/obj/item/weapon/implant/organ = input("Select implant type:", "Organ Manipulation", null) in organs
var/obj/item/implant/organ = input("Select implant type:", "Organ Manipulation", null) in organs
organ = organs[organ]
organ = new organ
organ.implant(C)
@@ -31,14 +31,14 @@
organs["[I.name] ([I.type])"] = I
for(var/X in C.implants)
var/obj/item/weapon/implant/I = X
var/obj/item/implant/I = X
organs["[I.name] ([I.type])"] = I
var/obj/item/organ = input("Select organ/implant:", "Organ Manipulation", null) in organs
organ = organs[organ]
if(!organ) return
var/obj/item/organ/O
var/obj/item/weapon/implant/I
var/obj/item/implant/I
if(isorgan(organ))
O = organ
@@ -52,7 +52,7 @@
if(operation == "remove organ/implant")
qdel(organ)
else if(I) // Put the implant in case.
var/obj/item/weapon/implantcase/case = new(get_turf(C))
var/obj/item/implantcase/case = new(get_turf(C))
case.imp = I
I.loc = case
case.update_icon()

View File

@@ -7,7 +7,7 @@ GLOBAL_VAR_INIT(highlander, FALSE)
send_to_playing_players("<span class='boldannounce'><font size=6>THERE CAN BE ONLY ONE</font></span>")
for(var/obj/item/weapon/disk/nuclear/N in GLOB.poi_list)
for(var/obj/item/disk/nuclear/N in GLOB.poi_list)
N.relocate() //Gets it out of bags and such
for(var/mob/living/carbon/human/H in GLOB.player_list)
@@ -50,26 +50,26 @@ GLOBAL_VAR_INIT(highlander, FALSE)
equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(src), slot_ears)
equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(src), slot_head)
equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(src), slot_shoes)
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_l_store)
for(var/obj/item/weapon/pinpointer/P in src)
equip_to_slot_or_del(new /obj/item/pinpointer(src), slot_l_store)
for(var/obj/item/pinpointer/P in src)
P.attack_self(src)
var/obj/item/weapon/card/id/W = new(src)
var/obj/item/card/id/W = new(src)
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_all_centcom_access()
W.assignment = "Highlander"
W.registered_name = real_name
W.flags |= NODROP
W.flags_1 |= NODROP_1
W.update_label(real_name)
equip_to_slot_or_del(W, slot_wear_id)
var/obj/item/weapon/claymore/highlander/H1 = new(src)
var/obj/item/claymore/highlander/H1 = new(src)
if(!GLOB.highlander)
H1.admin_spawned = TRUE //To prevent announcing
put_in_hands(H1)
H1.pickup(src) //For the stun shielding
var/obj/item/weapon/bloodcrawl/antiwelder = new(src)
var/obj/item/bloodcrawl/antiwelder = new(src)
antiwelder.name = "compulsion of honor"
antiwelder.desc = "You are unable to hold anything in this hand until you're the last one left!"
antiwelder.icon_state = "bloodhand_right"
@@ -108,10 +108,10 @@ GLOBAL_VAR_INIT(highlander, FALSE)
var/obj/item/slot_item_hand = H.get_item_for_held_index(2)
H.dropItemToGround(slot_item_hand)
var /obj/item/weapon/multisword/multi = new(H)
var /obj/item/multisword/multi = new(H)
H.put_in_hands_or_del(multi)
var/obj/item/weapon/card/id/W = new(H)
var/obj/item/card/id/W = new(H)
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_all_centcom_access()

View File

@@ -9,6 +9,11 @@
freq = pick(0.5, 0.7, 0.8, 0.85, 0.9, 0.95, 1.1, 1.2, 1.4, 1.6, 2.0, 2.5)
to_chat(src, "You feel the Honkmother messing with your song...")
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)
var/sound/admin_sound = new()
admin_sound.file = S
admin_sound.priority = 250
@@ -17,7 +22,8 @@
admin_sound.wait = 1
admin_sound.repeat = 0
admin_sound.status = SOUND_STREAM
admin_sound.volume = vol
var/res = alert(usr, "Show the title of this song to the players?",, "No", "Yes", "Cancel")
switch(res)
if("Yes")

View File

@@ -652,7 +652,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
change_view(input("Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,128))
else
change_view(world.view)
log_admin("[key_name(usr)] changed their view range to [view].")
//message_admins("\blue [key_name_admin(usr)] changed their view range to [view].") //why? removed by order of XSI
@@ -1156,7 +1155,6 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
/client/proc/toggle_hub()
set category = "Server"
set name = "Toggle Hub"
world.update_hub_visibility(!GLOB.hub_visibility)
log_admin("[key_name(usr)] has toggled the server's hub status for the round, it is now [(GLOB.hub_visibility?"on":"off")] the hub.")