mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-14 00:23:29 +01:00
fixes merge conflict
This commit is contained in:
@@ -1,26 +1,28 @@
|
||||
//Blocks an attempt to connect before even creating our client datum thing.
|
||||
world/IsBanned(key,address,computer_id)
|
||||
if(!key || !address || !computer_id)
|
||||
log_access("Failed Login (invalid data): [key] [address]-[computer_id]")
|
||||
log_adminwarn("Failed Login (invalid data): [key] [address]-[computer_id]")
|
||||
return list("reason"="invalid login data", "desc"="Error: Could not check ban status, please try again. Error message: Your computer provided invalid or blank information to the server on connection (BYOND Username, IP, and Computer ID). Provided information for reference: Username: '[key]' IP: '[address]' Computer ID: '[computer_id]'. If you continue to get this error, please restart byond or contact byond support.")
|
||||
|
||||
if(text2num(computer_id) == 2147483647) //this cid causes stickybans to go haywire
|
||||
log_access("Failed Login (invalid cid): [key] [address]-[computer_id]")
|
||||
log_adminwarn("Failed Login (invalid cid): [key] [address]-[computer_id]")
|
||||
return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided an invalid Computer ID.")
|
||||
var/admin = 0
|
||||
var/ckey = ckey(key)
|
||||
if((ckey in admin_datums) || (ckey in deadmins))
|
||||
admin = 1
|
||||
var/datum/admins/A = admin_datums[ckey]
|
||||
if(A.rights & R_ADMIN)
|
||||
admin = 1
|
||||
|
||||
//Guest Checking
|
||||
if(!guests_allowed && IsGuestKey(key))
|
||||
log_access("Failed Login: [key] [computer_id] [address] - Guests not allowed")
|
||||
log_adminwarn("Failed Login: [key] [computer_id] [address] - Guests not allowed")
|
||||
// message_admins("<span class='notice'>Failed Login: [key] - Guests not allowed</span>")
|
||||
return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a BYOND account.")
|
||||
|
||||
//check if the IP address is a known Tor node
|
||||
if(config.ToRban && ToRban_isbanned(address))
|
||||
log_access("Failed Login: [key] [computer_id] [address] - Banned: Tor")
|
||||
log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned: Tor")
|
||||
message_admins("<span class='adminnotice'>Failed Login: [key] - Banned: Tor</span>")
|
||||
//ban their computer_id and ckey for posterity
|
||||
AddBan(ckey(key), computer_id, "Use of Tor", "Automated Ban", 0, 0)
|
||||
@@ -39,14 +41,13 @@ world/IsBanned(key,address,computer_id)
|
||||
message_admins("<span class='adminnotice'>The admin [key] has been allowed to bypass a matching ban on [.["key"]]</span>")
|
||||
addclientmessage(ckey,"<span class='adminnotice'>You have been allowed to bypass a matching ban on [.["key"]].</span>")
|
||||
else
|
||||
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
|
||||
log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
|
||||
return .
|
||||
else
|
||||
var/ckeytext = ckey(key)
|
||||
|
||||
if(!establish_db_connection())
|
||||
log_to_dd("Ban database connection failure. Key [ckeytext] not checked")
|
||||
diary << "Ban database connection failure. Key [ckeytext] not checked"
|
||||
log_world("Ban database connection failure. Key [ckeytext] not checked")
|
||||
return
|
||||
|
||||
var/ipquery = ""
|
||||
@@ -98,7 +99,7 @@ world/IsBanned(key,address,computer_id)
|
||||
|
||||
. = list("reason"="[bantype]", "desc"="[desc]")
|
||||
|
||||
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
|
||||
log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
|
||||
return .
|
||||
|
||||
. = ..() //default pager ban stuff
|
||||
@@ -112,6 +113,6 @@ world/IsBanned(key,address,computer_id)
|
||||
addclientmessage(ckey,"<span class='adminnotice'>You have been allowed to bypass a matching host/sticky ban.</span>")
|
||||
return null
|
||||
else
|
||||
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["message"]]")
|
||||
log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned [.["message"]]")
|
||||
|
||||
return .
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
/proc/ToRban_update()
|
||||
spawn(0)
|
||||
diary << "Downloading updated ToR data..."
|
||||
log_world("Downloading updated ToR data...")
|
||||
var/http[] = world.Export("http://exitlist.torproject.org/exit-addresses")
|
||||
|
||||
var/list/rawlist = file2list(http["CONTENT"])
|
||||
@@ -36,11 +36,11 @@
|
||||
if(!cleaned) continue
|
||||
F[cleaned] << 1
|
||||
to_chat(F["last_update"], world.realtime)
|
||||
diary << "ToR data updated!"
|
||||
log_world("ToR data updated!")
|
||||
if(usr)
|
||||
to_chat(usr, "ToRban updated.")
|
||||
return 1
|
||||
diary << "ToR data update aborted: no data."
|
||||
log_world("ToR data update aborted: no data.")
|
||||
return 0
|
||||
|
||||
/client/proc/ToRban(task in list("update","toggle","show","remove","remove all","find"))
|
||||
|
||||
@@ -4,14 +4,12 @@ var/global/nologevent = 0
|
||||
////////////////////////////////
|
||||
/proc/message_admins(var/msg)
|
||||
msg = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
|
||||
log_adminwarn(msg)
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
if(C.prefs && !(C.prefs.toggles & CHAT_NO_ADMINLOGS))
|
||||
to_chat(C, msg)
|
||||
|
||||
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
|
||||
log_attack(text)
|
||||
if(!nologevent)
|
||||
var/rendered = "<span class=\"admin\"><span class=\"prefix\">ATTACK:</span> <span class=\"message\">[text]</span></span>"
|
||||
for(var/client/C in admins)
|
||||
@@ -866,13 +864,13 @@ var/global/nologevent = 0
|
||||
for(var/mob/living/silicon/S in mob_list)
|
||||
ai_number++
|
||||
if(isAI(S))
|
||||
to_chat(usr, "<b>AI [key_name(S, usr)]'s laws:</b>")
|
||||
to_chat(usr, "<b>AI [key_name(S, TRUE)]'s laws:</b>")
|
||||
else if(isrobot(S))
|
||||
var/mob/living/silicon/robot/R = S
|
||||
to_chat(usr, "<b>CYBORG [key_name(S, usr)]'s [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"] laws:</b>")
|
||||
to_chat(usr, "<b>CYBORG [key_name(S, TRUE)]'s [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"] laws:</b>")
|
||||
else if(ispAI(S))
|
||||
var/mob/living/silicon/pai/P = S
|
||||
to_chat(usr, "<b>pAI [key_name(S, usr)]'s laws:</b>")
|
||||
to_chat(usr, "<b>pAI [key_name(S, TRUE)]'s laws:</b>")
|
||||
to_chat(usr, "[P.pai_law0]")
|
||||
if(P.pai_laws)
|
||||
to_chat(usr, "[P.pai_laws]")
|
||||
|
||||
@@ -40,8 +40,8 @@
|
||||
|
||||
if("hrefs") //persistant logs and stuff
|
||||
if(config && config.log_hrefs)
|
||||
if(href_logfile)
|
||||
src << browse(href_logfile,"window=investigate[subject];size=800x300")
|
||||
if(GLOB.world_href_log)
|
||||
src << browse(file(GLOB.world_href_log), "window=investigate[subject];size=800x300")
|
||||
else
|
||||
to_chat(src, "<font color='red'>Error: admin_investigate: No href logfile found.</font>")
|
||||
return
|
||||
|
||||
@@ -104,8 +104,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
|
||||
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
log_to_dd("Failed to connect to database in load_admins(). Reverting to legacy system.")
|
||||
diary << "Failed to connect to database in load_admins(). Reverting to legacy system."
|
||||
log_world("Failed to connect to database in load_admins(). Reverting to legacy system.")
|
||||
config.admin_legacy_system = 1
|
||||
load_admins()
|
||||
return
|
||||
@@ -124,8 +123,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
|
||||
//find the client for a ckey if they are connected and associate them with the new admin datum
|
||||
D.associate(directory[ckey])
|
||||
if(!admin_datums)
|
||||
log_to_dd("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.")
|
||||
diary << "The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system."
|
||||
log_world("The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system.")
|
||||
config.admin_legacy_system = 1
|
||||
load_admins()
|
||||
return
|
||||
|
||||
@@ -19,17 +19,13 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/resetcolorooc, /*allows us to set a reset our ooc color*/
|
||||
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
|
||||
/client/proc/toggle_view_range, /*changes how far we can see*/
|
||||
/datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/
|
||||
/datum/admins/proc/view_atk_log, /*shows the server combat-log, doesn't do anything presently*/
|
||||
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
||||
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
|
||||
/client/proc/cmd_admin_pm_by_key_panel, /*admin-pm list by key*/
|
||||
/client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/
|
||||
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
|
||||
/client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/
|
||||
/client/proc/giveruntimelog, /*allows us to give access to runtime logs to somebody*/
|
||||
/client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/
|
||||
/client/proc/getserverlog, /*allows us to fetch server logs (diary) for other days*/
|
||||
/client/proc/getserverlogs, /*allows us to fetch server logs (diary) for other days*/
|
||||
/client/proc/jumptocoord, /*we ghost and jump to a coordinate*/
|
||||
/client/proc/Getmob, /*teleports a mob to our location*/
|
||||
/client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/
|
||||
@@ -159,8 +155,8 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/restart_controller,
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/qdel_toggle,
|
||||
/client/proc/cmd_display_del_log,
|
||||
/client/proc/cmd_display_del_log_simple,
|
||||
/client/proc/debugNatureMapGenerator,
|
||||
/client/proc/check_bomb_impacts,
|
||||
/client/proc/test_movable_UI,
|
||||
@@ -830,8 +826,8 @@ var/list/admin_verbs_ticket = list(
|
||||
if(!istype(H))
|
||||
if(istype(H, /mob/living/carbon/brain))
|
||||
var/mob/living/carbon/brain/B = H
|
||||
if(istype(B.container, /obj/item/device/mmi/posibrain/ipc))
|
||||
var/obj/item/device/mmi/posibrain/ipc/C = B.container
|
||||
if(istype(B.container, /obj/item/mmi/posibrain/ipc))
|
||||
var/obj/item/mmi/posibrain/ipc/C = B.container
|
||||
var/obj/item/organ/internal/brain/mmi_holder/posibrain/P = C.loc
|
||||
if(istype(P.owner, /mob/living/carbon/human))
|
||||
H = P.owner
|
||||
@@ -856,8 +852,8 @@ var/list/admin_verbs_ticket = list(
|
||||
if(!istype(H))
|
||||
if(istype(H, /mob/living/carbon/brain))
|
||||
var/mob/living/carbon/brain/B = H
|
||||
if(istype(B.container, /obj/item/device/mmi/posibrain/ipc))
|
||||
var/obj/item/device/mmi/posibrain/ipc/C = B.container
|
||||
if(istype(B.container, /obj/item/mmi/posibrain/ipc))
|
||||
var/obj/item/mmi/posibrain/ipc/C = B.container
|
||||
var/obj/item/organ/internal/brain/mmi_holder/posibrain/P = C.loc
|
||||
if(istype(P.owner, /mob/living/carbon/human))
|
||||
H = P.owner
|
||||
@@ -976,6 +972,7 @@ var/list/admin_verbs_ticket = list(
|
||||
|
||||
to_chat(T, "<span class='notice'><b><font size=3>Man up and deal with it.</font></b></span>")
|
||||
to_chat(T, "<span class='notice'>Move on.</span>")
|
||||
T << 'sound/voice/ManUp1.ogg'
|
||||
|
||||
log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.")
|
||||
message_admins("[key_name_admin(usr)] told [key_name(T)] to man up and deal with it.")
|
||||
|
||||
@@ -52,8 +52,7 @@ DEBUG
|
||||
log_admin("appearance_keylist was empty")
|
||||
else
|
||||
if(!establish_db_connection())
|
||||
log_to_dd("Database connection failed. Reverting to the legacy ban system.")
|
||||
diary << "Database connection failed. Reverting to the legacy ban system."
|
||||
log_world("Database connection failed. Reverting to the legacy ban system.")
|
||||
config.ban_legacy_system = 1
|
||||
appearance_loadbanfile()
|
||||
return
|
||||
|
||||
@@ -78,8 +78,7 @@ DEBUG
|
||||
log_runtime(EXCEPTION("Skipping malformed job ban: [s]"))
|
||||
else
|
||||
if(!establish_db_connection())
|
||||
log_to_dd("Database connection failed. Reverting to the legacy ban system.")
|
||||
diary << "Database connection failed. Reverting to the legacy ban system."
|
||||
log_world("Database connection failed. Reverting to the legacy ban system.")
|
||||
config.ban_legacy_system = 1
|
||||
jobban_loadbanfile()
|
||||
return
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
var/create_object_html = null
|
||||
var/list/create_object_forms = list(/obj, /obj/structure, /obj/machinery, /obj/effect, /obj/item, /obj/mecha, /obj/item/weapon, /obj/item/clothing, /obj/item/stack, /obj/item/device, /obj/item/weapon/reagent_containers, /obj/item/weapon/gun)
|
||||
var/list/create_object_forms = list(/obj, /obj/structure, /obj/machinery, /obj/effect, /obj/item, /obj/mecha, /obj/item/clothing, /obj/item/stack, /obj/item/reagent_containers, /obj/item/gun)
|
||||
|
||||
/datum/admins/proc/create_object(var/mob/user)
|
||||
if(!create_object_html)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
var/new_rating = input("Enter new rating:","Num") as num
|
||||
if(!isnull(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()
|
||||
|
||||
|
||||
@@ -427,7 +427,7 @@
|
||||
else
|
||||
dat += "<tr><td><i>Nuclear Operative not found!</i></td></tr>"
|
||||
dat += "</table><br><table><tr><td><B>Nuclear Disk(s)</B></td></tr>"
|
||||
for(var/obj/item/weapon/disk/nuclear/N in poi_list)
|
||||
for(var/obj/item/disk/nuclear/N in poi_list)
|
||||
dat += "<tr><td>[N.name], "
|
||||
var/atom/disk_loc = N.loc
|
||||
while(!istype(disk_loc, /turf))
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
<A href='?src=[UID()];secretsadmin=showgm'>Show Game Mode</A>
|
||||
<A href='?src=[UID()];secretsadmin=manifest'>Show Crew Manifest</A><br>
|
||||
<A href='?src=[UID()];secretsadmin=check_antagonist'>Show current traitors and objectives</A><BR>
|
||||
<a href='?src=[UID()];secretsadmin=night_shift_set'>Set Night Shift Mode</a><br>
|
||||
<B>Bombs</b><br>
|
||||
<A href='?src=[UID()];secretsadmin=list_bombers'>Bombing List</A>
|
||||
<A href='?src=[UID()];secretsadmin=clear_bombs'>Remove all bombs currently in existence</A>
|
||||
|
||||
+63
-46
@@ -887,7 +887,8 @@
|
||||
else if(href_list["boot2"])
|
||||
var/mob/M = locate(href_list["boot2"])
|
||||
if(ismob(M))
|
||||
if(!check_if_greater_rights_than(M.client))
|
||||
if(M.client && M.client.holder && (M.client.holder.rights & R_BAN))
|
||||
to_chat(src, "<span class='warning'>[key_name_admin(M)] cannot be kicked from the server.</span>")
|
||||
return
|
||||
to_chat(M, "<span class='warning'>You have been kicked from the server</span>")
|
||||
log_admin("[key_name(usr)] booted [key_name(M)].")
|
||||
@@ -960,8 +961,6 @@
|
||||
var/mob/M = locate(href_list["newban"])
|
||||
if(!ismob(M)) return
|
||||
|
||||
if(M.client && M.client.holder) return //admins cannot be banned. Even if they could, the ban doesn't affect them anyway
|
||||
|
||||
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
|
||||
if("Yes")
|
||||
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
|
||||
@@ -1577,19 +1576,19 @@
|
||||
log_admin("Admin [key_name_admin(usr)] has unlocked the Cult's next objective.")
|
||||
|
||||
else if(href_list["cult_mindspeak"])
|
||||
var/input = stripped_input(usr, "Communicate to all the cultists with the voice of [ticker.mode.cultdat.entity_name]", "Voice of [ticker.mode.cultdat.entity_name]", "")
|
||||
var/input = stripped_input(usr, "Communicate to all the cultists with the voice of [ticker.cultdat.entity_name]", "Voice of [ticker.cultdat.entity_name]", "")
|
||||
if(!input)
|
||||
return
|
||||
|
||||
for(var/datum/mind/H in ticker.mode.cult)
|
||||
if (H.current)
|
||||
to_chat(H.current, "<span class='danger'>[ticker.mode.cultdat.entity_name]</span> murmurs, <span class='cultlarge'>[input]</span></span>")
|
||||
to_chat(H.current, "<span class='danger'>[ticker.cultdat.entity_name]</span> murmurs, <span class='cultlarge'>[input]</span></span>")
|
||||
|
||||
for(var/mob/dead/observer/O in player_list)
|
||||
to_chat(O, "<span class='danger'>[ticker.mode.cultdat.entity_name]</span> murmurs, <span class='cultlarge'>[input]</span></span>")
|
||||
to_chat(O, "<span class='danger'>[ticker.cultdat.entity_name]</span> murmurs, <span class='cultlarge'>[input]</span></span>")
|
||||
|
||||
message_admins("Admin [key_name_admin(usr)] has talked with the Voice of [ticker.mode.cultdat.entity_name].")
|
||||
log_admin("[key_name(usr)] Voice of [ticker.mode.cultdat.entity_name]: [input]")
|
||||
message_admins("Admin [key_name_admin(usr)] has talked with the Voice of [ticker.cultdat.entity_name].")
|
||||
log_admin("[key_name(usr)] Voice of [ticker.cultdat.entity_name]: [input]")
|
||||
|
||||
else if(href_list["adminplayerobservecoodjump"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
@@ -1618,10 +1617,10 @@
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
return
|
||||
|
||||
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookie(H), slot_l_hand )
|
||||
if(!(istype(H.l_hand,/obj/item/weapon/reagent_containers/food/snacks/cookie)))
|
||||
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookie(H), slot_r_hand )
|
||||
if(!(istype(H.r_hand,/obj/item/weapon/reagent_containers/food/snacks/cookie)))
|
||||
H.equip_to_slot_or_del( new /obj/item/reagent_containers/food/snacks/cookie(H), slot_l_hand )
|
||||
if(!(istype(H.l_hand,/obj/item/reagent_containers/food/snacks/cookie)))
|
||||
H.equip_to_slot_or_del( new /obj/item/reagent_containers/food/snacks/cookie(H), slot_r_hand )
|
||||
if(!(istype(H.r_hand,/obj/item/reagent_containers/food/snacks/cookie)))
|
||||
log_admin("[key_name(H)] has their hands full, so they did not receive their cookie, spawned by [key_name(src.owner)].")
|
||||
message_admins("[key_name_admin(H)] has their hands full, so they did not receive their cookie, spawned by [key_name_admin(src.owner)].")
|
||||
return
|
||||
@@ -1680,7 +1679,7 @@
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
return
|
||||
if(!istype(H.l_ear, /obj/item/device/radio/headset) && !istype(H.r_ear, /obj/item/device/radio/headset))
|
||||
if(!istype(H.l_ear, /obj/item/radio/headset) && !istype(H.r_ear, /obj/item/radio/headset))
|
||||
to_chat(usr, "The person you are trying to contact is not wearing a headset")
|
||||
return
|
||||
|
||||
@@ -1706,7 +1705,7 @@
|
||||
var/customname = input(src.owner, "Pick a title for the evil fax.", "Fax Title") as text|null
|
||||
if(!customname)
|
||||
customname = "paper"
|
||||
var/obj/item/weapon/paper/evilfax/P = new /obj/item/weapon/paper/evilfax(null)
|
||||
var/obj/item/paper/evilfax/P = new /obj/item/paper/evilfax(null)
|
||||
var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"])
|
||||
|
||||
P.name = "Central Command - [customname]"
|
||||
@@ -1726,7 +1725,7 @@
|
||||
stampoverlay.pixel_x = P.x
|
||||
stampoverlay.pixel_y = P.y
|
||||
P.stamped = list()
|
||||
P.stamped += /obj/item/weapon/stamp/centcom
|
||||
P.stamped += /obj/item/stamp/centcom
|
||||
if(!P.ico)
|
||||
P.ico = new
|
||||
P.ico += "paper_stamp-[stampvalue]"
|
||||
@@ -1735,7 +1734,7 @@
|
||||
P.update_icon()
|
||||
//fax.receivefax(P) // this does not work, it does not preserve the type, we have to physically teleport the fax paper instead
|
||||
P.loc = fax.loc
|
||||
if(istype(H) && H.stat == CONSCIOUS && (istype(H.l_ear, /obj/item/device/radio/headset) || istype(H.r_ear, /obj/item/device/radio/headset)))
|
||||
if(istype(H) && H.stat == CONSCIOUS && (istype(H.l_ear, /obj/item/radio/headset) || istype(H.r_ear, /obj/item/radio/headset)))
|
||||
to_chat(H, "Your headset pings, notifying you that a reply to your fax has arrived.")
|
||||
to_chat(src.owner, "You sent a [eviltype] fax to [H]")
|
||||
log_admin("[key_name(src.owner)] sent [key_name(H)] a [eviltype] fax")
|
||||
@@ -1793,7 +1792,7 @@
|
||||
H.gene_stability = 100
|
||||
logmsg = "superpowers."
|
||||
if("Scarab Guardian")
|
||||
var/obj/item/weapon/guardiancreator/biological/scarab = new /obj/item/weapon/guardiancreator/biological(H)
|
||||
var/obj/item/guardiancreator/biological/scarab = new /obj/item/guardiancreator/biological(H)
|
||||
var/list/possible_guardians = list("Chaos", "Standard", "Ranged", "Support", "Explosive", "Random")
|
||||
var/typechoice = input("Select Guardian Type", "Type") as null|anything in possible_guardians
|
||||
if(isnull(typechoice))
|
||||
@@ -1893,7 +1892,7 @@
|
||||
H.makeCluwne()
|
||||
logmsg = "cluwned."
|
||||
if("Mutagen Cookie")
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/weapon/reagent_containers/food/snacks/cookie
|
||||
var/obj/item/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/reagent_containers/food/snacks/cookie
|
||||
evilcookie.reagents.add_reagent("mutagen", 10)
|
||||
evilcookie.desc = "It has a faint green glow."
|
||||
evilcookie.bitesize = 100
|
||||
@@ -1902,7 +1901,7 @@
|
||||
H.equip_to_slot_or_del(evilcookie, slot_l_hand)
|
||||
logmsg = "a mutagen cookie."
|
||||
if("Hellwater Cookie")
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/weapon/reagent_containers/food/snacks/cookie
|
||||
var/obj/item/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/reagent_containers/food/snacks/cookie
|
||||
evilcookie.reagents.add_reagent("hell_water", 25)
|
||||
evilcookie.desc = "Sulphur-flavored."
|
||||
evilcookie.bitesize = 100
|
||||
@@ -1984,7 +1983,7 @@
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
return
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(null)
|
||||
var/obj/item/paper/P = new /obj/item/paper(null)
|
||||
var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"])
|
||||
P.name = "Central Command - paper"
|
||||
var/stypes = list("Handle it yourselves!","Illegible fax","Fax not signed","Not Right Now","You are wasting our time", "Keep up the good work", "ERT Instructions")
|
||||
@@ -2019,7 +2018,7 @@
|
||||
stampoverlay.pixel_x = P.x
|
||||
stampoverlay.pixel_y = P.y
|
||||
P.stamped = list()
|
||||
P.stamped += /obj/item/weapon/stamp/centcom
|
||||
P.stamped += /obj/item/stamp/centcom
|
||||
if(!P.ico)
|
||||
P.ico = new
|
||||
P.ico += "paper_stamp-[stampvalue]"
|
||||
@@ -2027,7 +2026,7 @@
|
||||
P.stamps += "<HR><img src=large_stamp-[stampvalue].png>"
|
||||
P.update_icon()
|
||||
fax.receivefax(P)
|
||||
if(istype(H) && H.stat == CONSCIOUS && (istype(H.l_ear, /obj/item/device/radio/headset) || istype(H.r_ear, /obj/item/device/radio/headset)))
|
||||
if(istype(H) && H.stat == CONSCIOUS && (istype(H.l_ear, /obj/item/radio/headset) || istype(H.r_ear, /obj/item/radio/headset)))
|
||||
to_chat(H, "Your headset pings, notifying you that a reply to your fax has arrived.")
|
||||
to_chat(src.owner, "You sent a standard '[stype]' fax to [H]")
|
||||
log_admin("[key_name(src.owner)] sent [key_name(H)] a standard '[stype]' fax")
|
||||
@@ -2043,7 +2042,7 @@
|
||||
if(H.stat != 0)
|
||||
to_chat(usr, "The person you are trying to contact is not conscious.")
|
||||
return
|
||||
if(!istype(H.l_ear, /obj/item/device/radio/headset) && !istype(H.r_ear, /obj/item/device/radio/headset))
|
||||
if(!istype(H.l_ear, /obj/item/radio/headset) && !istype(H.r_ear, /obj/item/radio/headset))
|
||||
to_chat(usr, "The person you are trying to contact is not wearing a headset")
|
||||
return
|
||||
var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from The Syndicate", "")
|
||||
@@ -2058,7 +2057,7 @@
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
return
|
||||
if(!istype(H.l_ear, /obj/item/device/radio/headset) && !istype(H.r_ear, /obj/item/device/radio/headset))
|
||||
if(!istype(H.l_ear, /obj/item/radio/headset) && !istype(H.r_ear, /obj/item/radio/headset))
|
||||
to_chat(usr, "The person you are trying to contact is not wearing a headset")
|
||||
return
|
||||
|
||||
@@ -2081,7 +2080,7 @@
|
||||
if(H.stat != 0)
|
||||
to_chat(usr, "The person you are trying to contact is not conscious.")
|
||||
return
|
||||
if(!istype(H.l_ear, /obj/item/device/radio/headset) && !istype(H.r_ear, /obj/item/device/radio/headset))
|
||||
if(!istype(H.l_ear, /obj/item/radio/headset) && !istype(H.r_ear, /obj/item/radio/headset))
|
||||
to_chat(usr, "The person you are trying to contact is not wearing a headset")
|
||||
return
|
||||
|
||||
@@ -2100,17 +2099,17 @@
|
||||
return
|
||||
|
||||
var/obj/item/fax = locate(href_list["AdminFaxView"])
|
||||
if(istype(fax, /obj/item/weapon/paper))
|
||||
var/obj/item/weapon/paper/P = fax
|
||||
if(istype(fax, /obj/item/paper))
|
||||
var/obj/item/paper/P = fax
|
||||
P.show_content(usr,1)
|
||||
else if(istype(fax, /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/H = fax
|
||||
else if(istype(fax, /obj/item/photo))
|
||||
var/obj/item/photo/H = fax
|
||||
H.show(usr)
|
||||
else if(istype(fax, /obj/item/weapon/paper_bundle))
|
||||
else if(istype(fax, /obj/item/paper_bundle))
|
||||
//having multiple people turning pages on a paper_bundle can cause issues
|
||||
//open a browse window listing the contents instead
|
||||
var/data = ""
|
||||
var/obj/item/weapon/paper_bundle/B = fax
|
||||
var/obj/item/paper_bundle/B = fax
|
||||
|
||||
for(var/page = 1, page <= B.amount + 1, page++)
|
||||
var/obj/pageobj = B.contents[page]
|
||||
@@ -2125,15 +2124,15 @@
|
||||
return
|
||||
|
||||
var/page = text2num(href_list["AdminFaxViewPage"])
|
||||
var/obj/item/weapon/paper_bundle/bundle = locate(href_list["paper_bundle"])
|
||||
var/obj/item/paper_bundle/bundle = locate(href_list["paper_bundle"])
|
||||
|
||||
if(!bundle) return
|
||||
|
||||
if(istype(bundle.contents[page], /obj/item/weapon/paper))
|
||||
var/obj/item/weapon/paper/P = bundle.contents[page]
|
||||
if(istype(bundle.contents[page], /obj/item/paper))
|
||||
var/obj/item/paper/P = bundle.contents[page]
|
||||
P.show_content(usr, 1)
|
||||
else if(istype(bundle.contents[page], /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/H = bundle.contents[page]
|
||||
else if(istype(bundle.contents[page], /obj/item/photo))
|
||||
var/obj/item/photo/H = bundle.contents[page]
|
||||
H.show(usr)
|
||||
return
|
||||
|
||||
@@ -2148,7 +2147,7 @@
|
||||
var/destination
|
||||
var/notify
|
||||
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(null) //hopefully the null loc won't cause trouble for us
|
||||
var/obj/item/paper/P = new /obj/item/paper(null) //hopefully the null loc won't cause trouble for us
|
||||
|
||||
if(!fax)
|
||||
var/list/departmentoptions = alldepartments + "All Departments"
|
||||
@@ -2237,14 +2236,14 @@
|
||||
if(stamptype == "icon")
|
||||
if(!P.stamped)
|
||||
P.stamped = new
|
||||
P.stamped += /obj/item/weapon/stamp/centcom
|
||||
P.stamped += /obj/item/stamp/centcom
|
||||
P.overlays += stampoverlay
|
||||
P.stamps += "<HR><img src=large_stamp-[stampvalue].png>"
|
||||
|
||||
else if(stamptype == "text")
|
||||
if(!P.stamped)
|
||||
P.stamped = new
|
||||
P.stamped += /obj/item/weapon/stamp
|
||||
P.stamped += /obj/item/stamp
|
||||
P.overlays += stampoverlay
|
||||
P.stamps += "<HR><i>[stampvalue]</i>"
|
||||
|
||||
@@ -2275,7 +2274,7 @@
|
||||
to_chat(src.owner, "<span class='notice'>Message transmitted successfully.</span>")
|
||||
if(notify == "Yes")
|
||||
var/mob/living/carbon/human/H = sender
|
||||
if(istype(H) && H.stat == CONSCIOUS && (istype(H.l_ear, /obj/item/device/radio/headset) || istype(H.r_ear, /obj/item/device/radio/headset)))
|
||||
if(istype(H) && H.stat == CONSCIOUS && (istype(H.l_ear, /obj/item/radio/headset) || istype(H.r_ear, /obj/item/radio/headset)))
|
||||
to_chat(sender, "Your headset pings, notifying you that a reply to your fax has arrived.")
|
||||
if(sender)
|
||||
log_admin("[key_name(src.owner)] replied to a fax message from [key_name(sender)]: [input]")
|
||||
@@ -2617,13 +2616,13 @@
|
||||
continue
|
||||
H.Paralyse(5)
|
||||
if(H.wear_id)
|
||||
var/obj/item/weapon/card/id/id = H.get_idcard()
|
||||
var/obj/item/card/id/id = H.get_idcard()
|
||||
for(var/A in id.access)
|
||||
if(A == access_security)
|
||||
security++
|
||||
if(!security)
|
||||
//strip their stuff before they teleport into a cell :downs:
|
||||
for(var/obj/item/weapon/W in H)
|
||||
for(var/obj/item/W in H)
|
||||
if(istype(W, /obj/item/organ/external))
|
||||
continue
|
||||
//don't strip organs
|
||||
@@ -2831,7 +2830,7 @@
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","FG")
|
||||
for(var/obj/item/W in world)
|
||||
if(istype(W, /obj/item/clothing) || istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/weapon/disk) || istype(W, /obj/item/weapon/tank))
|
||||
if(istype(W, /obj/item/clothing) || istype(W, /obj/item/card/id) || istype(W, /obj/item/disk) || istype(W, /obj/item/tank))
|
||||
continue
|
||||
W.icon = 'icons/obj/guns/projectile.dmi'
|
||||
W.icon_state = "revolver"
|
||||
@@ -3024,6 +3023,24 @@
|
||||
dat += "<tr><td>[H]</td><td>H.dna = null</td></tr>"
|
||||
dat += "</table>"
|
||||
usr << browse(dat, "window=fingerprints;size=440x410")
|
||||
if("night_shift_set")
|
||||
var/val = alert(usr, "What do you want to set night shift to? This will override the automatic system until set to automatic again.", "Night Shift", "On", "Off", "Automatic")
|
||||
switch(val)
|
||||
if("Automatic")
|
||||
if(config.enable_night_shifts)
|
||||
SSnightshift.can_fire = TRUE
|
||||
SSnightshift.fire()
|
||||
else
|
||||
SSnightshift.update_nightshift(FALSE, TRUE)
|
||||
to_chat(usr, "<span class='notice'>Night shift set to automatic.</span>")
|
||||
if("On")
|
||||
SSnightshift.can_fire = FALSE
|
||||
SSnightshift.update_nightshift(TRUE, FALSE)
|
||||
to_chat(usr, "<span class='notice'>Night shift forced on.</span>")
|
||||
if("Off")
|
||||
SSnightshift.can_fire = FALSE
|
||||
SSnightshift.update_nightshift(FALSE, FALSE)
|
||||
to_chat(usr, "<span class='notice'>Night shift forced off.</span>")
|
||||
else
|
||||
if(usr)
|
||||
log_admin("[key_name(usr)] used secret [href_list["secretsadmin"]]")
|
||||
@@ -3390,14 +3407,14 @@
|
||||
var/mob/living/carbon/human/hunter_mob = new /mob/living/carbon/human(pick(latejoin))
|
||||
hunter_mind.transfer_to(hunter_mob)
|
||||
hunter_mob.equipOutfit(O, FALSE)
|
||||
var/obj/item/weapon/pinpointer/advpinpointer/N = new /obj/item/weapon/pinpointer/advpinpointer(hunter_mob)
|
||||
var/obj/item/pinpointer/advpinpointer/N = new /obj/item/pinpointer/advpinpointer(hunter_mob)
|
||||
hunter_mob.equip_to_slot_or_del(N, slot_in_backpack)
|
||||
N.active = 1
|
||||
N.mode = 2
|
||||
N.target = H
|
||||
N.point_at(N.target)
|
||||
if(!locate(/obj/item/weapon/implant/dust, hunter_mob))
|
||||
var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(hunter_mob)
|
||||
if(!locate(/obj/item/implant/dust, hunter_mob))
|
||||
var/obj/item/implant/dust/D = new /obj/item/implant/dust(hunter_mob)
|
||||
D.implant(hunter_mob)
|
||||
if(killthem)
|
||||
var/datum/objective/assassinate/kill_objective = new
|
||||
|
||||
@@ -7,7 +7,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"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// Give this a string and a location to create the object. Examples of using
|
||||
// this function:
|
||||
/*
|
||||
CALL global.json_to_object_arbitrary_vars("{'type':'/obj/item/weapon/crowbar', 'color':'#FF0000','force':5000,'name':'Greytides Gravedigger'}", loc) ON /mob/living/carbon/human WHERE ckey == 'crazylemon'".
|
||||
CALL global.json_to_object_arbitrary_vars("{'type':'/obj/item/crowbar', 'color':'#FF0000','force':5000,'name':'Greytides Gravedigger'}", loc) ON /mob/living/carbon/human WHERE ckey == 'crazylemon'".
|
||||
*/
|
||||
// This is a bit more flexible than the serialization interface because that interface
|
||||
// expects a rigid structure for the data
|
||||
|
||||
@@ -109,7 +109,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
|
||||
switch(selected_type)
|
||||
if("Mentorhelp")
|
||||
msg = "<span class='mentorhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""] (<A HREF='?_src_=holder;take_question=[mob.UID()];is_mhelp=1'>TAKE</A>) :</span> <span class='mentorhelp'>[msg]</span>"
|
||||
msg = "<span class='mentorhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, TRUE, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""] (<A HREF='?_src_=holder;take_question=[mob.UID()];is_mhelp=1'>TAKE</A>) :</span> <span class='mentorhelp'>[msg]</span>"
|
||||
for(var/client/X in mentorholders + modholders + adminholders)
|
||||
if(X.prefs.sound & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
@@ -123,7 +123,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
T.addResponse(usr.client, msg)
|
||||
else
|
||||
ticketNum = globAdminTicketHolder.getTicketCounter() // ticketNum is the ticket ready to be assigned.
|
||||
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;openadminticket=[ticketNum]'>TICKET</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""] :</span> <span class='adminhelp'>[msg]</span>"
|
||||
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, TRUE, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;openadminticket=[ticketNum]'>TICKET</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""](<A HREF='?_src_=holder;take_question=[mob.UID()]'>TAKE</A>) :</span> <span class='adminhelp'>[msg]</span>"
|
||||
//Open a new adminticket and inform the user.
|
||||
globAdminTicketHolder.newTicket(src, prunedmsg, msg)
|
||||
for(var/client/X in modholders + adminholders)
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
//get message text, limit it's length.and clean/escape html
|
||||
if(!msg)
|
||||
msg = input(src,"Message:", "Private message to [key_name(C, 0, 0)]") as text|null
|
||||
msg = input(src,"Message:", "Private message to [holder ? key_name(C, FALSE) : key_name_hidden(C, FALSE)]") as text|null
|
||||
|
||||
if(!msg)
|
||||
return
|
||||
@@ -152,9 +152,9 @@
|
||||
|
||||
|
||||
var/emoji_msg = "<span class='emoji_enabled'>[msg]</span>"
|
||||
recieve_message = "<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type][key_name(src, C, C.holder ? 1 : 0, type)]</b>: [emoji_msg]</span>"
|
||||
recieve_message = "<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type][C.holder ? key_name(src, TRUE, type) : key_name_hidden(src, TRUE, type)]</b>: [emoji_msg]</span>"
|
||||
to_chat(C, recieve_message)
|
||||
to_chat(src, "<font color='blue'>[send_pm_type][type] to-<b>[key_name(C, src, holder ? 1 : 0, type)]</b>: [emoji_msg]</font>")
|
||||
to_chat(src, "<font color='blue'>[send_pm_type][type] to-<b>[holder ? key_name(C, TRUE, type) : key_name_hidden(C, TRUE, type)]</b>: [emoji_msg]</font>")
|
||||
|
||||
/*if(holder && !C.holder)
|
||||
C.last_pm_recieved = world.time
|
||||
@@ -175,13 +175,13 @@
|
||||
switch(type)
|
||||
if("Mentorhelp")
|
||||
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob))
|
||||
to_chat(X, "<span class='mentorhelp'>[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [emoji_msg]</span>")
|
||||
to_chat(X, "<span class='mentorhelp'>[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]</span>")
|
||||
if("Adminhelp")
|
||||
if(check_rights(R_ADMIN|R_MOD, 0, X.mob))
|
||||
to_chat(X, "<span class='adminhelp'>[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [emoji_msg]</span>")
|
||||
to_chat(X, "<span class='adminhelp'>[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]</span>")
|
||||
else
|
||||
if(check_rights(R_ADMIN|R_MOD, 0, X.mob))
|
||||
to_chat(X, "<span class='boldnotice'>[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: [emoji_msg]</span>")
|
||||
to_chat(X, "<span class='boldnotice'>[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]</span>")
|
||||
|
||||
//Check if the mob being PM'd has any open admin tickets.
|
||||
var/tickets = list()
|
||||
@@ -226,4 +226,4 @@
|
||||
if(X == src)
|
||||
continue
|
||||
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob))
|
||||
to_chat(X, "<B><font color='blue'>PM: [key_name(src, X, 0)]->IRC-Admins:</B> <span class='notice'>[msg]</span></font>")
|
||||
to_chat(X, "<B><font color='blue'>PM: [key_name(src, TRUE, 0)]->IRC-Admins:</B> <span class='notice'>[msg]</span></font>")
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
|
||||
if(!msg) return
|
||||
|
||||
log_admin("[key_name(src)] : [msg]")
|
||||
log_adminsay(msg, src)
|
||||
|
||||
if(check_rights(R_ADMIN,0))
|
||||
for(var/client/C in admins)
|
||||
@@ -25,14 +25,20 @@
|
||||
return
|
||||
|
||||
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
|
||||
log_admin("MENTOR: [key_name(src)] : [msg]")
|
||||
log_mentorsay(msg, src)
|
||||
|
||||
if(!msg)
|
||||
return
|
||||
|
||||
for(var/client/C in admins)
|
||||
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, C.mob))
|
||||
to_chat(C, "<span class='[check_rights(R_ADMIN, 0) ? "mentor_channel_admin" : "mentor_channel"]'>MENTOR: <span class='name'>[key_name(usr, 1)]</span> ([admin_jump_link(mob)]): <span class='message'>[msg]</span></span>")
|
||||
var/display_name = key
|
||||
if(holder.fakekey)
|
||||
if(C.holder && C.holder.rights & R_ADMIN)
|
||||
display_name = "[holder.fakekey]/([key])"
|
||||
else
|
||||
display_name = holder.fakekey
|
||||
to_chat(C, "<span class='[check_rights(R_ADMIN, 0) ? "mentor_channel_admin" : "mentor_channel"]'>MENTOR: <span class='name'>[display_name]</span> ([admin_jump_link(mob)]): <span class='message'>[msg]</span></span>")
|
||||
|
||||
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
to_chat(M, "<font color='#960018'><span class='ooc'><span class='prefix'>AOOC:</span> <EM>[display_name]:</EM> <span class='message'>[msg]</span></span></font>")
|
||||
|
||||
|
||||
log_ooc("(ANTAG) [key] : [msg]")
|
||||
log_aooc(msg, src)
|
||||
|
||||
@@ -269,7 +269,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank him out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No")
|
||||
if(confirm != "Yes")
|
||||
return 0
|
||||
var/obj/item/device/paicard/card = new(T)
|
||||
var/obj/item/paicard/card = new(T)
|
||||
var/mob/living/silicon/pai/pai = new(card)
|
||||
pai.name = input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text
|
||||
pai.real_name = pai.name
|
||||
@@ -405,14 +405,14 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.wear_id)
|
||||
var/obj/item/weapon/card/id/id = H.wear_id
|
||||
if(istype(H.wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/pda = H.wear_id
|
||||
var/obj/item/card/id/id = H.wear_id
|
||||
if(istype(H.wear_id, /obj/item/pda))
|
||||
var/obj/item/pda/pda = H.wear_id
|
||||
id = pda.id
|
||||
id.icon_state = "gold"
|
||||
id:access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
|
||||
else
|
||||
var/obj/item/weapon/card/id/id = new/obj/item/weapon/card/id(M);
|
||||
var/obj/item/card/id/id = new/obj/item/card/id(M);
|
||||
id.icon_state = "gold"
|
||||
id:access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
|
||||
id.registered_name = H.real_name
|
||||
@@ -507,7 +507,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
continue
|
||||
areas_with_LS |= A.type
|
||||
|
||||
for(var/obj/item/device/radio/intercom/I in world)
|
||||
for(var/obj/item/radio/intercom/I in world)
|
||||
var/area/A = get_area(I)
|
||||
if(!A)
|
||||
continue
|
||||
@@ -577,7 +577,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/list/choices = list(
|
||||
"strip",
|
||||
"as job...",
|
||||
"emergency response team member",
|
||||
"emergency response team member",
|
||||
"emergency response team leader"
|
||||
)
|
||||
|
||||
@@ -611,7 +611,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
feedback_add_details("admin_verb", "SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
if(dostrip)
|
||||
for(var/obj/item/I in M)
|
||||
if(istype(I, /obj/item/weapon/implant))
|
||||
if(istype(I, /obj/item/implant))
|
||||
continue
|
||||
if(istype(I, /obj/item/organ))
|
||||
continue
|
||||
@@ -642,7 +642,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if(dresscode == "emergency response team leader")
|
||||
equip_team.equip_officer("Commander", M)
|
||||
else
|
||||
switch(alert("Loadout Type", "Emergency Response Team", "Security", "Engineer", "Medic"))
|
||||
var/list/ert_outfits = list("Security", "Engineer", "Medic", "Janitor", "Paranormal")
|
||||
var/echoice = input("Loadout Type", "Emergency Response Team") as null|anything in ert_outfits
|
||||
if(!echoice)
|
||||
return
|
||||
switch(echoice)
|
||||
if("Commander")
|
||||
equip_team.equip_officer("Commander", M)
|
||||
if("Security")
|
||||
@@ -651,6 +655,10 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
equip_team.equip_officer("Engineer", M)
|
||||
if("Medic")
|
||||
equip_team.equip_officer("Medic", M)
|
||||
if("Janitor")
|
||||
equip_team.equip_officer("Janitor", M)
|
||||
if("Paranormal")
|
||||
equip_team.equip_officer("Paranormal", M)
|
||||
else
|
||||
to_chat(src, "Invalid ERT Loadout selected")
|
||||
|
||||
@@ -701,7 +709,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
for(var/obj/machinery/power/rad_collector/Rad in machines)
|
||||
if(Rad.anchored)
|
||||
if(!Rad.P)
|
||||
var/obj/item/weapon/tank/plasma/Plasma = new/obj/item/weapon/tank/plasma(Rad)
|
||||
var/obj/item/tank/plasma/Plasma = new/obj/item/tank/plasma(Rad)
|
||||
Plasma.air_contents.toxins = 70
|
||||
Rad.drainratio = 0
|
||||
Rad.P = Plasma
|
||||
@@ -740,6 +748,65 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if("Respawnable Mobs")
|
||||
to_chat(usr, jointext(respawnable_list,","))
|
||||
|
||||
/client/proc/cmd_display_del_log()
|
||||
set category = "Debug"
|
||||
set name = "Display del() Log"
|
||||
set desc = "Display del's log of everything that's passed through it."
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
var/list/dellog = list("<B>List of things that have gone through qdel this round</B><BR><BR><ol>")
|
||||
sortTim(SSgarbage.items, cmp=/proc/cmp_qdel_item_time, associative = TRUE)
|
||||
for(var/path in SSgarbage.items)
|
||||
var/datum/qdel_item/I = SSgarbage.items[path]
|
||||
dellog += "<li><u>[path]</u><ul>"
|
||||
if(I.failures)
|
||||
dellog += "<li>Failures: [I.failures]</li>"
|
||||
dellog += "<li>qdel() Count: [I.qdels]</li>"
|
||||
dellog += "<li>Destroy() Cost: [I.destroy_time]ms</li>"
|
||||
if(I.hard_deletes)
|
||||
dellog += "<li>Total Hard Deletes [I.hard_deletes]</li>"
|
||||
dellog += "<li>Time Spent Hard Deleting: [I.hard_delete_time]ms</li>"
|
||||
if(I.slept_destroy)
|
||||
dellog += "<li>Sleeps: [I.slept_destroy]</li>"
|
||||
if(I.no_respect_force)
|
||||
dellog += "<li>Ignored force: [I.no_respect_force]</li>"
|
||||
if(I.no_hint)
|
||||
dellog += "<li>No hint: [I.no_hint]</li>"
|
||||
dellog += "</ul></li>"
|
||||
|
||||
dellog += "</ol>"
|
||||
|
||||
usr << browse(dellog.Join(), "window=dellog")
|
||||
|
||||
/client/proc/cmd_display_del_log_simple()
|
||||
set category = "Debug"
|
||||
set name = "Display Simple del() Log"
|
||||
set desc = "Display a compacted del's log."
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
var/dat = "<B>List of things that failed to GC this round</B><BR><BR>"
|
||||
for(var/path in SSgarbage.items)
|
||||
var/datum/qdel_item/I = SSgarbage.items[path]
|
||||
if(I.failures)
|
||||
dat += "[I] - [I.failures] times<BR>"
|
||||
|
||||
dat += "<B>List of paths that did not return a qdel hint in Destroy()</B><BR><BR>"
|
||||
for(var/path in SSgarbage.items)
|
||||
var/datum/qdel_item/I = SSgarbage.items[path]
|
||||
if(I.no_hint)
|
||||
dat += "[I]<BR>"
|
||||
|
||||
dat += "<B>List of paths that slept in Destroy()</B><BR><BR>"
|
||||
for(var/path in SSgarbage.items)
|
||||
var/datum/qdel_item/I = SSgarbage.items[path]
|
||||
if(I.slept_destroy)
|
||||
dat += "[I]<BR>"
|
||||
|
||||
usr << browse(dat, "window=simpledellog")
|
||||
|
||||
/client/proc/cmd_admin_toggle_block(var/mob/M,var/block)
|
||||
if(!check_rights(R_SPAWN))
|
||||
@@ -765,7 +832,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
set desc = "Force the client to redownload NanoUI Resources"
|
||||
|
||||
// Close open NanoUIs.
|
||||
nanomanager.close_user_uis(usr)
|
||||
SSnanoui.close_user_uis(usr)
|
||||
|
||||
// Re-load the assets.
|
||||
var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui)
|
||||
|
||||
@@ -118,7 +118,7 @@ var/global/list/frozen_mob_list = list()
|
||||
M.addVerb(/obj/mecha/verb/eject)
|
||||
to_chat(M.occupant, "<b><font color= red>You have been unfrozen by <a href='?priv_msg=\ref[usr.client]'>[key]</a></b></font>")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] unfroze [key_name(M.occupant)] in a [M.name]</span>")
|
||||
log_admin("[key_name(usr)] unfroze [M.occupant.name]/[M.occupant.ckey] in a [M.name]")
|
||||
log_admin("[key_name(usr)] unfroze [key_name(M.occupant)] in a [M.name]")
|
||||
else
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] unfroze an empty [M.name]</span>")
|
||||
log_admin("[key_name(usr)] unfroze an empty [M.name]")
|
||||
|
||||
@@ -14,56 +14,11 @@
|
||||
*/
|
||||
|
||||
|
||||
//This proc allows Game Masters to grant a client access to the .getruntimelog verb
|
||||
//Permissions expire at the end of each round.
|
||||
//Runtimes can be used to meta or spot game-crashing exploits so it's advised to only grant coders that
|
||||
//you trust access. Also, it may be wise to ensure that they are not going to play in the current round.
|
||||
/client/proc/giveruntimelog()
|
||||
set name = ".giveruntimelog"
|
||||
set desc = "Give somebody access to any session logfiles saved to the /log/runtime/ folder."
|
||||
set category = null
|
||||
|
||||
if(!src.holder)
|
||||
to_chat(src, "<font color='red'>Only Admins may use this command.</font>")
|
||||
return
|
||||
|
||||
var/client/target = input(src,"Choose somebody to grant access to the server's runtime logs (permissions expire at the end of each round):","Grant Permissions",null) as null|anything in clients
|
||||
if(!istype(target,/client))
|
||||
to_chat(src, "<font color='red'>Error: giveruntimelog(): Client not found.</font>")
|
||||
return
|
||||
|
||||
target.verbs |= /client/proc/getruntimelog
|
||||
to_chat(target, "<font color='red'>You have been granted access to runtime logs. Please use them responsibly or risk being banned.</font>")
|
||||
return
|
||||
|
||||
|
||||
//This proc allows download of runtime logs saved within the data/logs/ folder by dreamdeamon.
|
||||
//It works similarly to show-server-log.
|
||||
/client/proc/getruntimelog()
|
||||
set name = ".getruntimelog"
|
||||
set desc = "Retrieve any session logfiles saved by dreamdeamon."
|
||||
set category = null
|
||||
|
||||
var/path = browse_files("data/logs/runtime/")
|
||||
if(!path)
|
||||
return
|
||||
|
||||
if(file_spam_check())
|
||||
return
|
||||
|
||||
message_admins("[key_name_admin(src)] accessed file: [path]")
|
||||
src << ftp(file(path))
|
||||
|
||||
to_chat(src, "Attempting to send file, this may take a fair few minutes if the file is very large.")
|
||||
return
|
||||
|
||||
|
||||
//This proc allows download of past server logs saved within the data/logs/ folder.
|
||||
//It works similarly to show-server-log.
|
||||
/client/proc/getserverlog()
|
||||
set name = ".getserverlog"
|
||||
set desc = "Fetch logfiles from data/logs"
|
||||
set category = null
|
||||
/client/proc/getserverlogs()
|
||||
set name = "Get Server Logs"
|
||||
set desc = "View/retrieve logfiles."
|
||||
set category = "Admin"
|
||||
|
||||
var/path = browse_files("data/logs/")
|
||||
if(!path)
|
||||
@@ -73,44 +28,14 @@
|
||||
return
|
||||
|
||||
message_admins("[key_name_admin(src)] accessed file: [path]")
|
||||
src << ftp(file(path))
|
||||
|
||||
to_chat(src, "Attempting to send file, this may take a fair few minutes if the file is very large.")
|
||||
return
|
||||
|
||||
|
||||
//Other log stuff put here for the sake of organisation
|
||||
|
||||
//Shows today's server log
|
||||
/datum/admins/proc/view_txt_log()
|
||||
set category = "Admin"
|
||||
set name = "Show Server Log"
|
||||
set desc = "Shows today's server log."
|
||||
|
||||
var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")].log"
|
||||
if( fexists(path) )
|
||||
src << ftp(file(path))
|
||||
|
||||
else
|
||||
to_chat(src, "<font color='red'>Error: view_txt_log(): File not found/Invalid path([path]).</font>")
|
||||
return
|
||||
feedback_add_details("admin_verb","VTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
//Shows today's attack log
|
||||
/datum/admins/proc/view_atk_log()
|
||||
set category = "Admin"
|
||||
set name = "Show Server Attack Log"
|
||||
set desc = "Shows today's server attack log."
|
||||
|
||||
var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")] Attack.log"
|
||||
if( fexists(path) )
|
||||
src << ftp(file(path))
|
||||
|
||||
else
|
||||
to_chat(src, "<font color='red'>Error: view_atk_log(): File not found/Invalid path([path]).</font>")
|
||||
return
|
||||
usr << run(file(path))
|
||||
|
||||
feedback_add_details("admin_verb","SSAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
switch(alert("View (in game), Open (in your system's text editor), or Download?", path, "View", "Open", "Download"))
|
||||
if ("View")
|
||||
src << browse("<pre style='word-wrap: break-word;'>[html_encode(file2text(file(path)))]</pre>", list2params(list("window" = "viewfile.[path]")))
|
||||
if ("Open")
|
||||
src << run(file(path))
|
||||
if ("Download")
|
||||
src << ftp(file(path))
|
||||
else
|
||||
return
|
||||
to_chat(src, "Attempting to send [path], this may take a fair few minutes if the file is very large.")
|
||||
return
|
||||
@@ -100,11 +100,11 @@ var/global/sent_honksquad = 0
|
||||
|
||||
/mob/living/carbon/human/proc/equip_honksquad(honk_leader_selected = 0)
|
||||
|
||||
var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src)
|
||||
var/obj/item/radio/R = new /obj/item/radio/headset(src)
|
||||
R.set_frequency(1442)
|
||||
equip_to_slot_or_del(R, slot_l_ear)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/clown(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/storage/backpack/clown(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/storage/box/survival(src), slot_in_backpack)
|
||||
if(src.gender == FEMALE)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sexyclown(src), slot_wear_mask)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/under/sexyclown(src), slot_w_uniform)
|
||||
@@ -112,22 +112,22 @@ var/global/sent_honksquad = 0
|
||||
equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(src), slot_w_uniform)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(src), slot_wear_mask)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(src), slot_shoes)
|
||||
equip_to_slot_or_del(new /obj/item/device/pda/clown(src), slot_wear_pda)
|
||||
equip_to_slot_or_del(new /obj/item/pda/clown(src), slot_wear_pda)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(src), slot_wear_mask)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/bikehorn(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/reagent_containers/food/snacks/grown/banana(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/bikehorn(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/stamp/clown(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/spray/waterflower(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/reagent_containers/spray/waterflower(src), slot_in_backpack)
|
||||
if(prob(50))
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/energy/clown(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/gun/energy/clown(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/throw/piecannon(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/gun/throw/piecannon(src), slot_in_backpack)
|
||||
src.mutations.Add(CLUMSY)
|
||||
|
||||
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(src)
|
||||
var/obj/item/card/id/W = new(src)
|
||||
W.name = "[real_name]'s ID Card"
|
||||
W.icon_state = "centcom_old"
|
||||
W.access = list(access_clown)//They get full station access.
|
||||
|
||||
@@ -159,12 +159,12 @@ var/global/sent_syndicate_infiltration_team = 0
|
||||
|
||||
/mob/living/carbon/human/proc/equip_syndicate_infiltrator(syndicate_leader_selected = 0, num_tc, flag_mgmt)
|
||||
// Storage items
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/storage/backpack(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/storage/box/survival(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/under/chameleon(src), slot_w_uniform)
|
||||
if(!flag_mgmt)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/flashlight(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/storage/belt/utility/full/multitool(src), slot_belt)
|
||||
|
||||
var/obj/item/clothing/gloves/combat/G = new /obj/item/clothing/gloves/combat(src)
|
||||
G.name = "black gloves"
|
||||
@@ -172,26 +172,26 @@ var/global/sent_syndicate_infiltration_team = 0
|
||||
|
||||
// Implants:
|
||||
// Uplink
|
||||
var/obj/item/weapon/implant/uplink/U = new /obj/item/weapon/implant/uplink(src)
|
||||
var/obj/item/implant/uplink/U = new /obj/item/implant/uplink(src)
|
||||
U.implant(src)
|
||||
if (flag_mgmt)
|
||||
U.hidden_uplink.uses = 500
|
||||
else
|
||||
U.hidden_uplink.uses = num_tc
|
||||
// Dust
|
||||
var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(src)
|
||||
var/obj/item/implant/dust/D = new /obj/item/implant/dust(src)
|
||||
D.implant(src)
|
||||
|
||||
// Radio & PDA
|
||||
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/syndteam(src)
|
||||
var/obj/item/radio/R = new /obj/item/radio/headset/syndicate/syndteam(src)
|
||||
R.set_frequency(SYNDTEAM_FREQ)
|
||||
equip_to_slot_or_del(R, slot_l_ear)
|
||||
equip_or_collect(new /obj/item/device/pda(src), slot_in_backpack)
|
||||
equip_or_collect(new /obj/item/pda(src), slot_in_backpack)
|
||||
|
||||
// Other gear
|
||||
equip_to_slot_or_del(new /obj/item/clothing/shoes/syndigaloshes(src), slot_shoes)
|
||||
|
||||
var/obj/item/weapon/card/id/syndicate/W = new(src)
|
||||
var/obj/item/card/id/syndicate/W = new(src)
|
||||
if (flag_mgmt)
|
||||
W.icon_state = "commander"
|
||||
else
|
||||
|
||||
@@ -118,7 +118,7 @@ var/intercom_range_display_status = 0
|
||||
qdel(M)
|
||||
|
||||
if(intercom_range_display_status)
|
||||
for(var/obj/item/device/radio/intercom/I in world)
|
||||
for(var/obj/item/radio/intercom/I in world)
|
||||
for(var/turf/T in orange(7,I))
|
||||
var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
|
||||
if(!(F in view(7,I.loc)))
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
if(rejected)
|
||||
to_chat(src, "[rejected] out of [count] objects rejected your edit")
|
||||
|
||||
log_to_dd("### MassVarEdit by [src]: [O.type] (A/R [accepted]/[rejected]) [variable]=[html_encode("[O.vars[variable]]")]([list2params(value)])")
|
||||
log_world("### MassVarEdit by [src]: [O.type] (A/R [accepted]/[rejected]) [variable]=[html_encode("[O.vars[variable]]")]([list2params(value)])")
|
||||
log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)")
|
||||
message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)")
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
var/list/VVlocked = list("vars", "var_edited", "client", "firemut", "ishulk", "telekinesis", "xray", "ka", "virus", "viruses", "cuffed", "last_eaten", "unlock_content") // R_DEBUG
|
||||
var/list/VVicon_edit_lock = list("icon", "icon_state", "overlays", "underlays", "resize") // R_EVENT | R_DEBUG
|
||||
var/list/VVckey_edit = list("key", "ckey") // R_EVENT | R_DEBUG
|
||||
var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width", "bound_x", "bound_y") // R_DEBUG + warning
|
||||
var/list/VVpixelmovement = list("step_x", "step_y", "step_size", "bound_height", "bound_width", "bound_x", "bound_y") // R_DEBUG + warning
|
||||
/client/proc/vv_get_class(var/var_value)
|
||||
if(isnull(var_value))
|
||||
. = VV_NULL
|
||||
@@ -342,7 +342,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width
|
||||
if(!O.vv_edit_var(objectvar, L))
|
||||
to_chat(src, "Your edit was rejected by the object.")
|
||||
return
|
||||
log_to_dd("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: ADDED=[var_value]")
|
||||
log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: ADDED=[var_value]")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]")
|
||||
|
||||
@@ -385,7 +385,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width
|
||||
if(!O.vv_edit_var(objectvar, L))
|
||||
to_chat(src, "Your edit was rejected by the object.")
|
||||
return
|
||||
log_to_dd("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR NULLS")
|
||||
log_world("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR NULLS")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: CLEAR NULLS")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: CLEAR NULLS")
|
||||
return
|
||||
@@ -395,7 +395,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width
|
||||
if(!O.vv_edit_var(objectvar, L))
|
||||
to_chat(src, "Your edit was rejected by the object.")
|
||||
return
|
||||
log_to_dd("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR DUPES")
|
||||
log_world("### ListVarEdit by [src]: [O.type] [objectvar]: CLEAR DUPES")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: CLEAR DUPES")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: CLEAR DUPES")
|
||||
return
|
||||
@@ -405,7 +405,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width
|
||||
if(!O.vv_edit_var(objectvar, L))
|
||||
to_chat(src, "Your edit was rejected by the object.")
|
||||
return
|
||||
log_to_dd("### ListVarEdit by [src]: [O.type] [objectvar]: SHUFFLE")
|
||||
log_world("### ListVarEdit by [src]: [O.type] [objectvar]: SHUFFLE")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: SHUFFLE")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s list [objectvar]: SHUFFLE")
|
||||
return
|
||||
@@ -482,7 +482,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width
|
||||
if(!O.vv_edit_var(objectvar, L))
|
||||
to_chat(src, "Your edit was rejected by the object.")
|
||||
return
|
||||
log_to_dd("### ListVarEdit by [src]: [O.type] [objectvar]: REMOVED=[html_encode("[original_var]")]")
|
||||
log_world("### ListVarEdit by [src]: [O.type] [objectvar]: REMOVED=[html_encode("[original_var]")]")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]")
|
||||
return
|
||||
@@ -501,7 +501,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width
|
||||
if(!O.vv_edit_var(objectvar, L))
|
||||
to_chat(src, "Your edit was rejected by the object.")
|
||||
return
|
||||
log_to_dd("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: [original_var]=[new_var]")
|
||||
log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: [original_var]=[new_var]")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: [original_var]=[new_var]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s varlist [objectvar]: [original_var]=[new_var]")
|
||||
|
||||
@@ -612,7 +612,7 @@ var/list/VVpixelmovement = list("step_x", "step_y", "bound_height", "bound_width
|
||||
if(!O.vv_edit_var(variable, var_new))
|
||||
to_chat(src, "Your edit was rejected by the object.")
|
||||
return
|
||||
log_to_dd("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_new]")]")
|
||||
log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_new]")]")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [variable] to [var_new]")
|
||||
var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [var_new]"
|
||||
message_admins(msg)
|
||||
message_admins(msg)
|
||||
|
||||
@@ -240,7 +240,7 @@ client/proc/one_click_antag()
|
||||
var/nuke_code = "[rand(10000, 99999)]"
|
||||
|
||||
if(nuke_spawn)
|
||||
var/obj/item/weapon/paper/P = new
|
||||
var/obj/item/paper/P = new
|
||||
P.info = "Sadly, the Syndicate could not get you a nuclear bomb. We have, however, acquired the arming code for the station's onboard nuke. The nuclear authorization code is: <b>[nuke_code]</b>"
|
||||
P.name = "nuclear bomb code and instructions"
|
||||
P.loc = nuke_spawn.loc
|
||||
@@ -516,7 +516,7 @@ client/proc/one_click_antag()
|
||||
limb.status &= ~ORGAN_ROBOT
|
||||
|
||||
//Now apply cortical stack.
|
||||
var/obj/item/weapon/implant/cortical/I = new(new_vox)
|
||||
var/obj/item/implant/cortical/I = new(new_vox)
|
||||
I.implant(new_vox)
|
||||
cortical_stacks += I
|
||||
|
||||
|
||||
@@ -28,20 +28,20 @@
|
||||
obj_count++
|
||||
|
||||
for(var/obj/item/I in H)
|
||||
if(istype(I, /obj/item/weapon/implant))
|
||||
if(istype(I, /obj/item/implant))
|
||||
continue
|
||||
if(istype(I, /obj/item/organ))
|
||||
continue
|
||||
qdel(I)
|
||||
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/claymore/highlander(H), slot_r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/claymore/highlander(H), slot_r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(H.loc), slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/pinpointer(H.loc), slot_l_store)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(H)
|
||||
var/obj/item/card/id/W = new(H)
|
||||
W.name = "[H.real_name]'s ID Card"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
@@ -84,10 +84,10 @@
|
||||
var/obj/item/slot_item_hand = H.get_item_by_slot(slot_r_hand)
|
||||
H.unEquip(slot_item_hand)
|
||||
|
||||
var /obj/item/weapon/multisword/pure_evil/multi = new(H)
|
||||
var /obj/item/multisword/pure_evil/multi = new(H)
|
||||
H.equip_to_slot_or_del(multi, slot_r_hand)
|
||||
|
||||
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()
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
A.copy_to(H)
|
||||
|
||||
for(var/obj/item/I in H)
|
||||
if(istype(I, /obj/item/weapon/implant))
|
||||
if(istype(I, /obj/item/implant))
|
||||
continue
|
||||
if(istype (I, /obj/item/organ))
|
||||
continue
|
||||
@@ -24,15 +24,15 @@
|
||||
|
||||
to_chat(H, "<B>You are part of the [station_name()] dodgeball tournament. Throw dodgeballs at crewmembers wearing a different color than you. OOC: Use THROW on an EMPTY-HAND to catch thrown dodgeballs.</B>")
|
||||
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/beach_ball/dodgeball(H), slot_r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/beach_ball/dodgeball(H), slot_r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
|
||||
if(!team_toggle)
|
||||
team_alpha += H
|
||||
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/red/dodgeball(H), slot_w_uniform)
|
||||
var/obj/item/weapon/card/id/W = new(H)
|
||||
var/obj/item/card/id/W = new(H)
|
||||
W.name = "[H.real_name]'s ID Card"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
@@ -45,7 +45,7 @@
|
||||
team_bravo += H
|
||||
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/blue/dodgeball(H), slot_w_uniform)
|
||||
var/obj/item/weapon/card/id/W = new(H)
|
||||
var/obj/item/card/id/W = new(H)
|
||||
W.name = "[H.real_name]'s ID Card"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
@@ -62,14 +62,14 @@
|
||||
log_admin("[key_name(usr)] used dodgeball.")
|
||||
nologevent = 1
|
||||
|
||||
/obj/item/weapon/beach_ball/dodgeball
|
||||
/obj/item/beach_ball/dodgeball
|
||||
name = "dodgeball"
|
||||
icon = 'icons/obj/basketball.dmi'
|
||||
icon_state = "dodgeball"
|
||||
item_state = "basketball"
|
||||
desc = "Used for playing the most violent and degrading of childhood games."
|
||||
|
||||
/obj/item/weapon/beach_ball/dodgeball/throw_impact(atom/hit_atom)
|
||||
/obj/item/beach_ball/dodgeball/throw_impact(atom/hit_atom)
|
||||
..()
|
||||
if((ishuman(hit_atom)))
|
||||
var/mob/living/carbon/human/H = hit_atom
|
||||
|
||||
@@ -93,7 +93,7 @@ var/list/sounds_cache = list()
|
||||
ignore_power = 1
|
||||
|
||||
for(var/O in global_intercoms)
|
||||
var/obj/item/device/radio/intercom/I = O
|
||||
var/obj/item/radio/intercom/I = O
|
||||
if(!is_station_level(I.z) && !ignore_z)
|
||||
continue
|
||||
if(!I.on && !ignore_power)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
cross = image('icons/obj/storage.dmi',"tome")
|
||||
font_color = "red"
|
||||
prayer_type = "CULTIST PRAYER"
|
||||
deity = ticker.mode.cultdat.entity_name
|
||||
deity = ticker.cultdat.entity_name
|
||||
|
||||
msg = "<span class='notice'>[bicon(cross)]<b><font color=[font_color]>[prayer_type][deity ? " (to [deity])" : ""]:</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=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>) (<A HREF='?_src_=holder;Bless=[UID()]'>BLESS</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b> [msg]</span>"
|
||||
|
||||
|
||||
@@ -576,7 +576,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
command_announcement.Announce(input, customname, MsgSound[beepsound], , , type)
|
||||
print_command_report(input, "[command_name()] Update")
|
||||
else if("No")
|
||||
if("No")
|
||||
//same thing as the blob stuff - it's not public, so it's classified, dammit
|
||||
command_announcer.autosay("A classified message has been printed out at all communication consoles.");
|
||||
print_command_report(input, "Classified [command_name()] Update")
|
||||
@@ -763,6 +763,11 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
|
||||
if(confirm != "Yes") return
|
||||
|
||||
if(alert("Set Shuttle Recallable (Select Yes unless you know what this does)", "Recallable?", "Yes", "No") == "Yes")
|
||||
shuttle_master.emergency.canRecall = TRUE
|
||||
else
|
||||
shuttle_master.emergency.canRecall = FALSE
|
||||
|
||||
shuttle_master.emergency.request()
|
||||
|
||||
feedback_add_details("admin_verb","CSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -781,7 +786,18 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(shuttle_master.emergency.mode >= SHUTTLE_DOCKED)
|
||||
return
|
||||
|
||||
shuttle_master.emergency.cancel()
|
||||
if(shuttle_master.emergency.canRecall == FALSE)
|
||||
if(alert("Shuttle is currently set to be nonrecallable. Recalling may break things. Respect Recall Status?", "Override Recall Status?", "Yes", "No") == "Yes")
|
||||
return
|
||||
else
|
||||
var/keepStatus = alert("Maintain recall status on future shuttle calls?", "Maintain Status?", "Yes", "No") == "Yes" //Keeps or drops recallability
|
||||
shuttle_master.emergency.canRecall = TRUE // must be true for cancel proc to work
|
||||
shuttle_master.emergency.cancel()
|
||||
if(keepStatus)
|
||||
shuttle_master.emergency.canRecall = FALSE // restores original status
|
||||
else
|
||||
shuttle_master.emergency.cancel()
|
||||
|
||||
feedback_add_details("admin_verb","CCSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] admin-recalled the emergency shuttle.")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] admin-recalled the emergency shuttle.</span>")
|
||||
|
||||
@@ -101,12 +101,12 @@ var/global/sent_strike_team = 0
|
||||
//Spawns the rest of the commando gear.
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(L.name == "Commando_Manual")
|
||||
//new /obj/item/weapon/gun/energy/pulse_rifle(L.loc)
|
||||
var/obj/item/weapon/paper/P = new(L.loc)
|
||||
//new /obj/item/gun/energy/pulse_rifle(L.loc)
|
||||
var/obj/item/paper/P = new(L.loc)
|
||||
P.info = "<p><b>Good morning soldier!</b>. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:<br>#1 Work as a team.<br>#2 Accomplish your objective at all costs.<br>#3 Leave no witnesses.<br>You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.<br>If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.</p><p>In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations <b>LEADER</b> is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.</p><p>Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.<br>First and foremost, <b>DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.</b> Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.<br>To make the device functional:<br>#1 Place bomb in designated detonation zone<br> #2 Extend and anchor bomb (attack with hand).<br>#3 Insert Nuclear Auth. Disk into slot.<br>#4 Type numeric code into keypad ([nuke_code]).<br>Note: If you make a mistake press R to reset the device.<br>#5 Press the E button to log onto the device.<br>You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.<br>Note: Toggle off the <b>SAFETY</b>.<br>Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>Note: <b>THE BOMB IS STILL SET AND WILL DETONATE</b><br>Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.</p><p>The nuclear authorization code is: <b>[nuke_code ? nuke_code : "None provided"]</b></p><p><b>Good luck, soldier!</b></p>"
|
||||
P.name = "Spec. Ops Manual"
|
||||
P.icon = "pamphlet-ds"
|
||||
var/obj/item/weapon/stamp/centcom/stamp = new
|
||||
var/obj/item/stamp/centcom/stamp = new
|
||||
P.stamp(stamp)
|
||||
qdel(stamp)
|
||||
|
||||
@@ -145,7 +145,7 @@ var/global/sent_strike_team = 0
|
||||
|
||||
/mob/living/carbon/human/proc/equip_death_commando(is_leader = FALSE)
|
||||
|
||||
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/alt(src)
|
||||
var/obj/item/radio/R = new /obj/item/radio/headset/alt(src)
|
||||
R.set_frequency(DTH_FREQ)
|
||||
equip_to_slot_or_del(R, slot_l_ear)
|
||||
if(is_leader)
|
||||
@@ -159,32 +159,33 @@ var/global/sent_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(src), slot_wear_mask)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(src), slot_glasses)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/storage/backpack/security(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/storage/box(src), slot_in_backpack)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/ammo_box/a357(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/combat/nanites(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/storage/box/flashbangs(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/flashlight(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/pinpointer(src), slot_in_backpack)
|
||||
if(is_leader)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/disk/nuclear(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/shield/energy(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse(src), slot_r_hand)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/melee/energy/sword/saber(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/shield/energy(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/tank/emergency_oxygen/double/full(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/gun/projectile/revolver/mateba(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/gun/energy/pulse(src), slot_r_hand)
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/brain/anti_drop/O = new /obj/item/organ/internal/cyberimp/brain/anti_drop()
|
||||
O.insert(src)
|
||||
|
||||
var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(src)
|
||||
var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(src)
|
||||
L.implant(src)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(src)
|
||||
var/obj/item/card/id/W = new(src)
|
||||
W.name = "[real_name]'s ID Card"
|
||||
W.icon_state = "deathsquad"
|
||||
W.assignment = "Death Commando"
|
||||
|
||||
@@ -110,7 +110,7 @@ var/global/sent_syndicate_strike_team = 0
|
||||
|
||||
/mob/living/carbon/human/proc/equip_syndicate_commando(is_leader = FALSE)
|
||||
|
||||
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt/syndteam(src)
|
||||
var/obj/item/radio/R = new /obj/item/radio/headset/syndicate/alt/syndteam(src)
|
||||
R.set_frequency(SYNDTEAM_FREQ)
|
||||
equip_to_slot_or_del(R, slot_l_ear)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(src), slot_w_uniform)
|
||||
@@ -127,28 +127,27 @@ var/global/sent_syndicate_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(src), slot_wear_mask)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(src), slot_glasses)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/storage/backpack/security(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/ammo_box/magazine/mm556x45)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m45(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/reagent_containers/hypospray/combat/nanites(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/flashlight(src), slot_in_backpack)
|
||||
if(is_leader)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/pinpointer(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/disk/nuclear(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/card/emag(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/melee/energy/sword/saber(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/grenade/empgrenade(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/tank/emergency_oxygen/double/full(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/gun/projectile/automatic/pistol/m1911(src), slot_belt)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/empgrenade(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol/m1911(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/gun/projectile/automatic/l6_saw(src), slot_r_hand)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/l6_saw(src), slot_r_hand)
|
||||
|
||||
var/obj/item/weapon/card/id/syndicate/W = new(src) //Untrackable by AI
|
||||
var/obj/item/card/id/syndicate/W = new(src) //Untrackable by AI
|
||||
W.name = "[real_name]'s ID Card"
|
||||
W.icon_state = "syndie"
|
||||
W.access = get_all_accesses()//They get full station access because obviously the syndicate has HAAAX, and can make special IDs for their most elite members.
|
||||
|
||||
@@ -2,7 +2,7 @@ var/global/vox_tick = 1
|
||||
|
||||
/mob/living/carbon/human/proc/equip_vox_raider()
|
||||
|
||||
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate(src)
|
||||
var/obj/item/radio/R = new /obj/item/radio/headset/syndicate(src)
|
||||
R.set_frequency(SYND_FREQ) //Same frequency as the syndicate team in Nuke mode.
|
||||
equip_to_slot_or_del(R, slot_l_ear)
|
||||
|
||||
@@ -14,45 +14,45 @@ var/global/vox_tick = 1
|
||||
if(1) // Vox raider!
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/melee/classic_baton/telescopic(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
|
||||
equip_to_slot_or_del(new /obj/item/device/chameleon(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/chameleon(src), slot_l_store)
|
||||
|
||||
var/obj/item/weapon/gun/projectile/automatic/spikethrower/W = new(src)
|
||||
var/obj/item/gun/projectile/automatic/spikethrower/W = new(src)
|
||||
equip_to_slot_or_del(W, slot_r_hand)
|
||||
|
||||
|
||||
if(2) // Vox engineer!
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/pressure(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/pressure(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box/emps(src), slot_r_hand)
|
||||
equip_to_slot_or_del(new /obj/item/device/multitool(src), slot_l_hand)
|
||||
equip_to_slot_or_del(new /obj/item/storage/box/emps(src), slot_r_hand)
|
||||
equip_to_slot_or_del(new /obj/item/multitool(src), slot_l_hand)
|
||||
|
||||
|
||||
if(3) // Vox saboteur!
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/stealth(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/stealth(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
|
||||
equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/dartgun/vox/raider(src), slot_r_hand)
|
||||
equip_to_slot_or_del(new /obj/item/device/multitool(src), slot_l_hand)
|
||||
equip_to_slot_or_del(new /obj/item/card/emag(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/gun/dartgun/vox/raider(src), slot_r_hand)
|
||||
equip_to_slot_or_del(new /obj/item/multitool(src), slot_l_hand)
|
||||
|
||||
if(4) // Vox medic!
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/medic(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/medic(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt) // Who needs actual surgical tools?
|
||||
equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(src), slot_belt) // Who needs actual surgical tools?
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE.
|
||||
equip_to_slot_or_del(new /obj/item/weapon/circular_saw(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/dartgun/vox/medical, slot_r_hand)
|
||||
equip_to_slot_or_del(new /obj/item/circular_saw(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/gun/dartgun/vox/medical, slot_r_hand)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/breath/vox(src), slot_wear_mask)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/tank/nitrogen(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/flashlight(src), slot_r_store)
|
||||
|
||||
var/obj/item/weapon/card/id/syndicate/vox/W = new(src)
|
||||
var/obj/item/card/id/syndicate/vox/W = new(src)
|
||||
W.name = "[real_name]'s Legitimate Human ID Card"
|
||||
W.assignment = "Trader"
|
||||
W.registered_name = real_name
|
||||
|
||||
@@ -60,15 +60,15 @@
|
||||
return
|
||||
|
||||
/obj/machinery/arcade/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if(istype(O, /obj/item/weapon/screwdriver) && anchored)
|
||||
if(istype(O, /obj/item/screwdriver) && anchored)
|
||||
playsound(src.loc, O.usesound, 50, 1)
|
||||
panel_open = !panel_open
|
||||
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
|
||||
update_icon()
|
||||
return
|
||||
if(!freeplay)
|
||||
if(istype(O, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/C = O
|
||||
if(istype(O, /obj/item/card/id))
|
||||
var/obj/item/card/id/C = O
|
||||
if(pay_with_card(C))
|
||||
tokens += 1
|
||||
return
|
||||
@@ -77,7 +77,7 @@
|
||||
if(pay_with_cash(C, user))
|
||||
tokens += 1
|
||||
return
|
||||
if(panel_open && component_parts && istype(O, /obj/item/weapon/crowbar))
|
||||
if(panel_open && component_parts && istype(O, /obj/item/crowbar))
|
||||
default_deconstruction_crowbar(O)
|
||||
|
||||
/obj/machinery/arcade/update_icon()
|
||||
@@ -91,7 +91,7 @@
|
||||
cashmoney.use(token_price)
|
||||
return 1
|
||||
|
||||
/obj/machinery/arcade/proc/pay_with_card(var/obj/item/weapon/card/id/I, var/mob/user)
|
||||
/obj/machinery/arcade/proc/pay_with_card(var/obj/item/card/id/I, var/mob/user)
|
||||
visible_message("<span class='info'>[usr] swipes a card through [src].</span>")
|
||||
var/datum/money_account/customer_account = attempt_account_access_nosec(I.associated_account_number)
|
||||
if(!customer_account)
|
||||
@@ -131,7 +131,7 @@
|
||||
T.amount = "[token_price]"
|
||||
T.source_terminal = src.name
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.time = station_time_timestamp()
|
||||
customer_account.transaction_log.Add(T)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
update_icon()
|
||||
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/clawgame(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/circuitboard/clawgame(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/stack/cable_coil(null, 5)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null, 1)
|
||||
RefreshParts()
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
/obj/machinery/arcade/claw/RefreshParts()
|
||||
var/bin_upgrades = 0
|
||||
for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts)
|
||||
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
|
||||
bin_upgrades = B.rating
|
||||
bonus_prize_chance = bin_upgrades * 5 //equals +5% chance per matter bin rating level (+20% with rating 4)
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
icon_keyboard = null
|
||||
density = 0
|
||||
anchored = 1
|
||||
var/obj/item/weapon/nanomob_card/card
|
||||
var/obj/item/nanomob_card/card
|
||||
var/datum/mob_hunt/mob_info
|
||||
var/obj/effect/nanomob/battle/avatar
|
||||
var/ready = 0
|
||||
@@ -55,10 +55,10 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/mob_battle_terminal/attackby(obj/item/O, mob/user)
|
||||
if(istype(O, /obj/item/weapon/nanomob_card))
|
||||
if(istype(O, /obj/item/nanomob_card))
|
||||
insert_card(O, user)
|
||||
|
||||
/obj/machinery/computer/mob_battle_terminal/proc/insert_card(obj/item/weapon/nanomob_card/new_card, mob/user)
|
||||
/obj/machinery/computer/mob_battle_terminal/proc/insert_card(obj/item/nanomob_card/new_card, mob/user)
|
||||
if(!new_card)
|
||||
return
|
||||
if(card)
|
||||
@@ -261,10 +261,10 @@
|
||||
dir = EAST
|
||||
|
||||
/obj/machinery/computer/mob_healer_terminal/attackby(obj/item/O, mob/user)
|
||||
if(istype(O, /obj/item/weapon/nanomob_card))
|
||||
if(istype(O, /obj/item/nanomob_card))
|
||||
heal_card(O, user)
|
||||
|
||||
/obj/machinery/computer/mob_healer_terminal/proc/heal_card(obj/item/weapon/nanomob_card/patient, mob/user)
|
||||
/obj/machinery/computer/mob_healer_terminal/proc/heal_card(obj/item/nanomob_card/patient, mob/user)
|
||||
if(!patient)
|
||||
return
|
||||
if(!patient.mob_data)
|
||||
|
||||
@@ -37,18 +37,18 @@
|
||||
add_alt_appearance("nanomob_avatar", avatar)
|
||||
|
||||
/obj/effect/nanomob/attackby(obj/item/O, mob/user)
|
||||
if(istype(O, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/P = O
|
||||
if(istype(O, /obj/item/pda))
|
||||
var/obj/item/pda/P = O
|
||||
attempt_capture(P, -20) //attempting a melee capture reduces the mob's effective run_chance by 20% to balance the risk of triggering a trap mob
|
||||
return 1
|
||||
|
||||
/obj/effect/nanomob/hitby(atom/movable/AM)
|
||||
if(istype(AM, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/P = AM
|
||||
if(istype(AM, /obj/item/pda))
|
||||
var/obj/item/pda/P = AM
|
||||
attempt_capture(P) //attempting a ranged capture does not affect the mob's effective run_chance but does prevent you from being shocked by a trap mob
|
||||
return 1
|
||||
|
||||
/obj/effect/nanomob/proc/attempt_capture(obj/item/device/pda/P, catch_mod = 0) //negative catch_mods lower effective run chance,
|
||||
/obj/effect/nanomob/proc/attempt_capture(obj/item/pda/P, catch_mod = 0) //negative catch_mods lower effective run chance,
|
||||
if(!P || !P.current_app || !istype(P.current_app, /datum/data/pda/app/mob_hunter_game) || !P.cartridge)
|
||||
return
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
else
|
||||
icon_state = mob_info.icon_state_normal
|
||||
|
||||
/obj/effect/nanomob/battle/attempt_capture(obj/item/device/pda/P, catch_mod = 0)
|
||||
/obj/effect/nanomob/battle/attempt_capture(obj/item/pda/P, catch_mod = 0)
|
||||
//you can't capture battle avatars, since they belong to someone already
|
||||
return
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
//Standard Cards
|
||||
/obj/item/weapon/nanomob_card
|
||||
/obj/item/nanomob_card
|
||||
name = "Nano-Mob Hunter Trading Card"
|
||||
desc = "A blank Nano-Mob Hunter Trading Card. Worthless!"
|
||||
icon = 'icons/obj/card.dmi'
|
||||
@@ -10,7 +10,7 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/datum/mob_hunt/mob_data
|
||||
|
||||
/obj/item/weapon/nanomob_card/proc/update_info()
|
||||
/obj/item/nanomob_card/proc/update_info()
|
||||
if(!mob_data)
|
||||
return
|
||||
if(mob_data.is_shiny)
|
||||
@@ -22,22 +22,22 @@
|
||||
desc = "A trading card containing a level [mob_data.level] [mob_data.mob_name]!"
|
||||
|
||||
//Booster Pack Cards (random mob data)
|
||||
/obj/item/weapon/nanomob_card/booster
|
||||
/obj/item/nanomob_card/booster
|
||||
name = "Nano-Mob Hunter Booster Pack Card"
|
||||
desc = "A random Nano-Mob Trading Card from a Booster Pack. Wonder what it is?"
|
||||
|
||||
/obj/item/weapon/nanomob_card/booster/New()
|
||||
/obj/item/nanomob_card/booster/New()
|
||||
var/datum/mob_hunt/mob_info = pick(subtypesof(/datum/mob_hunt))
|
||||
mob_data = new mob_info(0,null,1)
|
||||
update_info()
|
||||
|
||||
//Booster Packs (Box of booster pack cards)
|
||||
/obj/item/weapon/storage/box/nanomob_booster_pack
|
||||
/obj/item/storage/box/nanomob_booster_pack
|
||||
name = "Nano-Mob Hunter Trading Card Booster Pack"
|
||||
desc = "Contains 6 random Nano-Mob Hunter Trading Cards. May contain a holographic card!"
|
||||
can_hold = list(/obj/item/weapon/nanomob_card)
|
||||
can_hold = list(/obj/item/nanomob_card)
|
||||
|
||||
/obj/item/weapon/storage/box/nanomob_booster_pack/New()
|
||||
/obj/item/storage/box/nanomob_booster_pack/New()
|
||||
..()
|
||||
for(var/i in 1 to 6)
|
||||
new /obj/item/weapon/nanomob_card/booster(src)
|
||||
new /obj/item/nanomob_card/booster(src)
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
/obj/machinery/prize_counter/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/prize_counter(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/circuitboard/prize_counter(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/stack/cable_coil(null, 1)
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/prize_counter/update_icon()
|
||||
@@ -40,16 +40,16 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [T] seems stuck to your hand!</span>")
|
||||
return
|
||||
if(istype(O, /obj/item/weapon/screwdriver) && anchored)
|
||||
if(istype(O, /obj/item/screwdriver) && anchored)
|
||||
playsound(src.loc, O.usesound, 50, 1)
|
||||
panel_open = !panel_open
|
||||
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
|
||||
update_icon()
|
||||
return
|
||||
if(panel_open)
|
||||
if(istype(O, /obj/item/weapon/wrench))
|
||||
if(istype(O, /obj/item/wrench))
|
||||
default_unfasten_wrench(user, O)
|
||||
if(component_parts && istype(O, /obj/item/weapon/crowbar))
|
||||
if(component_parts && istype(O, /obj/item/crowbar))
|
||||
if(tickets) //save the tickets!
|
||||
print_tickets()
|
||||
default_deconstruction_crowbar(O)
|
||||
|
||||
@@ -46,13 +46,13 @@ var/global/datum/prizes/global_prizes = new
|
||||
/datum/prize_item/crayons
|
||||
name = "Box of Crayons"
|
||||
desc = "A six-pack of crayons, just like back in kindergarten."
|
||||
typepath = /obj/item/weapon/storage/fancy/crayons
|
||||
typepath = /obj/item/storage/fancy/crayons
|
||||
cost = 35
|
||||
|
||||
/datum/prize_item/snappops
|
||||
name = "Snap-Pops"
|
||||
desc = "A box of exploding snap-pop fireworks."
|
||||
typepath = /obj/item/weapon/storage/box/snappops
|
||||
typepath = /obj/item/storage/box/snappops
|
||||
cost = 20
|
||||
|
||||
/datum/prize_item/spinningtoy
|
||||
@@ -70,7 +70,7 @@ var/global/datum/prizes/global_prizes = new
|
||||
/datum/prize_item/dice
|
||||
name = "Dice set"
|
||||
desc = "A set of assorted dice."
|
||||
typepath = /obj/item/weapon/storage/box/dice
|
||||
typepath = /obj/item/storage/box/dice
|
||||
cost = 20
|
||||
|
||||
/datum/prize_item/cards
|
||||
@@ -82,7 +82,7 @@ var/global/datum/prizes/global_prizes = new
|
||||
/datum/prize_item/wallet
|
||||
name = "Colored Wallet"
|
||||
desc = "Brightly colored and big enough for standard issue ID cards."
|
||||
typepath = /obj/item/weapon/storage/wallet/color
|
||||
typepath = /obj/item/storage/wallet/color
|
||||
cost = 50
|
||||
|
||||
/datum/prize_item/pet_rock
|
||||
@@ -106,28 +106,28 @@ var/global/datum/prizes/global_prizes = new
|
||||
/datum/prize_item/id_sticker
|
||||
name = "Prisoner ID Sticker"
|
||||
desc = "A sticker that can make any ID look like a prisoner ID."
|
||||
typepath = /obj/item/weapon/id_decal/prisoner
|
||||
typepath = /obj/item/id_decal/prisoner
|
||||
cost = 50
|
||||
|
||||
/datum/prize_item/id_sticker/silver
|
||||
name = "Silver ID Sticker"
|
||||
desc = "A sticker that can make any ID look like a silver ID."
|
||||
typepath = /obj/item/weapon/id_decal/silver
|
||||
typepath = /obj/item/id_decal/silver
|
||||
|
||||
/datum/prize_item/id_sticker/gold
|
||||
name = "Gold ID Sticker"
|
||||
desc = "A sticker that can make any ID look like a golden ID."
|
||||
typepath = /obj/item/weapon/id_decal/gold
|
||||
typepath = /obj/item/id_decal/gold
|
||||
|
||||
/datum/prize_item/id_sticker/centcom
|
||||
name = "Centcomm ID Sticker"
|
||||
desc = "A sticker that can make any ID look like a Central Command ID."
|
||||
typepath = /obj/item/weapon/id_decal/centcom
|
||||
typepath = /obj/item/id_decal/centcom
|
||||
|
||||
/datum/prize_item/id_sticker/emag
|
||||
name = "Suspicious ID Sticker"
|
||||
desc = "A sticker that can make any ID look like something suspicious..."
|
||||
typepath = /obj/item/weapon/id_decal/emag
|
||||
typepath = /obj/item/id_decal/emag
|
||||
|
||||
/datum/prize_item/carp_plushie
|
||||
name = "Random Carp Plushie"
|
||||
@@ -174,7 +174,7 @@ var/global/datum/prizes/global_prizes = new
|
||||
/datum/prize_item/crossbow
|
||||
name = "Foam Dart Crossbow"
|
||||
desc = "A toy crossbow that fires foam darts."
|
||||
typepath = /obj/item/weapon/gun/projectile/shotgun/toy/crossbow
|
||||
typepath = /obj/item/gun/projectile/shotgun/toy/crossbow
|
||||
cost = 100
|
||||
|
||||
|
||||
@@ -187,25 +187,25 @@ var/global/datum/prizes/global_prizes = new
|
||||
/datum/prize_item/fakespell
|
||||
name = "Fake Spellbook"
|
||||
desc = "Perform magic! Astound your friends! Get mistaken for an enemy of the corporation!"
|
||||
typepath = /obj/item/weapon/spellbook/oneuse/fake_gib
|
||||
typepath = /obj/item/spellbook/oneuse/fake_gib
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/nanomob_booster
|
||||
name = "Nano-Mob Hunter Trading Card Booster Pack"
|
||||
desc = "Contains 6 random Nano-Mob Hunter Trading Cards. May contain a holographic card!"
|
||||
typepath = /obj/item/weapon/storage/box/nanomob_booster_pack
|
||||
typepath = /obj/item/storage/box/nanomob_booster_pack
|
||||
cost = 100
|
||||
|
||||
/datum/prize_item/capgun
|
||||
name = "Capgun Revolver"
|
||||
desc = "Do you feel lucky... punk?"
|
||||
typepath = /obj/item/weapon/gun/projectile/revolver/capgun
|
||||
typepath = /obj/item/gun/projectile/revolver/capgun
|
||||
cost = 75
|
||||
|
||||
/datum/prize_item/confetti
|
||||
name = "Confetti Grenade"
|
||||
desc = "Party time!"
|
||||
typepath = /obj/item/weapon/grenade/confetti
|
||||
typepath = /obj/item/grenade/confetti
|
||||
cost = 65
|
||||
|
||||
/datum/prize_item/magic_conch
|
||||
@@ -259,7 +259,7 @@ var/global/datum/prizes/global_prizes = new
|
||||
/datum/prize_item/tommygun
|
||||
name = "Tommygun"
|
||||
desc = "A replica tommygun that fires foam darts."
|
||||
typepath = /obj/item/weapon/gun/projectile/shotgun/toy/tommygun
|
||||
typepath = /obj/item/gun/projectile/shotgun/toy/tommygun
|
||||
cost = 175
|
||||
|
||||
/datum/prize_item/esword
|
||||
@@ -283,13 +283,13 @@ var/global/datum/prizes/global_prizes = new
|
||||
/datum/prize_item/chainsaw
|
||||
name = "Toy Chainsaw"
|
||||
desc = "A full-scale model chainsaw, based on that massacre in Space Texas."
|
||||
typepath = /obj/item/weapon/twohanded/toy/chainsaw
|
||||
typepath = /obj/item/twohanded/toy/chainsaw
|
||||
cost = 200
|
||||
|
||||
/datum/prize_item/spacesuit
|
||||
name = "Fake Spacesuit"
|
||||
desc = "A replica spacesuit. Not actually spaceworthy."
|
||||
typepath = /obj/item/weapon/storage/box/fakesyndiesuit
|
||||
typepath = /obj/item/storage/box/fakesyndiesuit
|
||||
cost = 180
|
||||
|
||||
/datum/prize_item/fakespace
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/assembly
|
||||
/obj/item/assembly
|
||||
name = "assembly"
|
||||
desc = "A small electronic device that should never exist."
|
||||
icon = 'icons/obj/assemblies/new_assemblies.dmi'
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
var/secured = 1
|
||||
var/list/attached_overlays = null
|
||||
var/obj/item/device/assembly_holder/holder = null
|
||||
var/obj/item/assembly_holder/holder = null
|
||||
var/cooldown = 0//To prevent spam
|
||||
var/wires = WIRE_RECEIVE | WIRE_PULSE
|
||||
var/datum/wires/connected = null // currently only used by timer/signaler
|
||||
@@ -64,8 +64,8 @@
|
||||
return 1
|
||||
|
||||
Destroy()
|
||||
if(istype(src.loc, /obj/item/device/assembly_holder) || istype(holder))
|
||||
var/obj/item/device/assembly_holder/A = src.loc
|
||||
if(istype(src.loc, /obj/item/assembly_holder) || istype(holder))
|
||||
var/obj/item/assembly_holder/A = src.loc
|
||||
if(A.a_left == src)
|
||||
A.a_left = null
|
||||
else if(A.a_right == src)
|
||||
@@ -91,8 +91,8 @@
|
||||
// if(radio && (wires & WIRE_RADIO_PULSE))
|
||||
//Not sure what goes here quite yet send signal?
|
||||
|
||||
if(istype(loc,/obj/item/weapon/grenade)) // This is a hack. Todo: Manage this better -Sayu
|
||||
var/obj/item/weapon/grenade/G = loc
|
||||
if(istype(loc,/obj/item/grenade)) // This is a hack. Todo: Manage this better -Sayu
|
||||
var/obj/item/grenade/G = loc
|
||||
G.prime() // Adios, muchachos
|
||||
|
||||
|
||||
@@ -113,21 +113,21 @@
|
||||
return secured
|
||||
|
||||
|
||||
attach_assembly(var/obj/item/device/assembly/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
attach_assembly(var/obj/item/assembly/A, var/mob/user)
|
||||
holder = new/obj/item/assembly_holder(get_turf(src))
|
||||
if(holder.attach(A,src,user))
|
||||
to_chat(user, "<span class='notice'>You attach \the [A] to \the [src]!</span>")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(isassembly(W))
|
||||
var/obj/item/device/assembly/A = W
|
||||
var/obj/item/assembly/A = W
|
||||
if((!A.secured) && (!secured))
|
||||
attach_assembly(A,user)
|
||||
return
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(toggle_secure())
|
||||
to_chat(user, "<span class='notice'>\The [src] is ready!</span>")
|
||||
else
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/onetankbomb
|
||||
/obj/item/onetankbomb
|
||||
name = "bomb"
|
||||
icon = 'icons/obj/tank.dmi'
|
||||
item_state = "assembly"
|
||||
@@ -8,15 +8,15 @@
|
||||
throw_range = 4
|
||||
flags = CONDUCT //Copied this from old code, so this may or may not be necessary
|
||||
var/status = 0 //0 - not readied //1 - bomb finished with welder
|
||||
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
|
||||
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a plasma tank
|
||||
var/obj/item/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
|
||||
var/obj/item/tank/bombtank = null //the second part of the bomb is a plasma tank
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
|
||||
/obj/item/device/onetankbomb/examine(mob/user)
|
||||
/obj/item/onetankbomb/examine(mob/user)
|
||||
..(user)
|
||||
user.examinate(bombtank)
|
||||
|
||||
/obj/item/device/onetankbomb/update_icon()
|
||||
/obj/item/onetankbomb/update_icon()
|
||||
if(bombtank)
|
||||
icon_state = bombtank.icon_state
|
||||
if(bombassembly)
|
||||
@@ -24,11 +24,11 @@
|
||||
overlays += bombassembly.overlays
|
||||
overlays += "bomb_assembly"
|
||||
|
||||
/obj/item/device/onetankbomb/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/device/analyzer))
|
||||
/obj/item/onetankbomb/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/analyzer))
|
||||
bombtank.attackby(W, user, params)
|
||||
return
|
||||
if(istype(W, /obj/item/weapon/wrench) && !status) //This is basically bomb assembly code inverted. apparently it works.
|
||||
if(istype(W, /obj/item/wrench) && !status) //This is basically bomb assembly code inverted. apparently it works.
|
||||
|
||||
to_chat(user, "<span class='notice'>You disassemble [src].</span>")
|
||||
|
||||
@@ -42,11 +42,12 @@
|
||||
|
||||
qdel(src)
|
||||
return
|
||||
if((istype(W, /obj/item/weapon/weldingtool) && W:welding))
|
||||
if((istype(W, /obj/item/weldingtool) && W:welding))
|
||||
if(!status)
|
||||
status = 1
|
||||
bombers += "[key_name(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]"
|
||||
msg_admin_attack("[key_name_admin(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]")
|
||||
log_game("[key_name(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature - T0C]")
|
||||
to_chat(user, "<span class='notice'>A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.</span>")
|
||||
else
|
||||
status = 0
|
||||
@@ -55,12 +56,12 @@
|
||||
add_fingerprint(user)
|
||||
..()
|
||||
|
||||
/obj/item/device/onetankbomb/attack_self(mob/user as mob) //pressing the bomb accesses its assembly
|
||||
/obj/item/onetankbomb/attack_self(mob/user as mob) //pressing the bomb accesses its assembly
|
||||
bombassembly.attack_self(user, 1)
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/device/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here.
|
||||
/obj/item/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here.
|
||||
visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*")
|
||||
sleep(10)
|
||||
if(!src)
|
||||
@@ -70,37 +71,37 @@
|
||||
else
|
||||
bombtank.release()
|
||||
|
||||
/obj/item/device/onetankbomb/HasProximity(atom/movable/AM as mob|obj)
|
||||
/obj/item/onetankbomb/HasProximity(atom/movable/AM as mob|obj)
|
||||
if(bombassembly)
|
||||
bombassembly.HasProximity(AM)
|
||||
|
||||
/obj/item/device/onetankbomb/Crossed(atom/movable/AM as mob|obj) //for mousetraps
|
||||
/obj/item/onetankbomb/Crossed(atom/movable/AM as mob|obj) //for mousetraps
|
||||
if(bombassembly)
|
||||
bombassembly.Crossed(AM)
|
||||
|
||||
/obj/item/device/onetankbomb/on_found(mob/finder as mob) //for mousetraps
|
||||
/obj/item/onetankbomb/on_found(mob/finder as mob) //for mousetraps
|
||||
if(bombassembly)
|
||||
bombassembly.on_found(finder)
|
||||
|
||||
/obj/item/device/onetankbomb/hear_talk(mob/living/M as mob, msg)
|
||||
/obj/item/onetankbomb/hear_talk(mob/living/M as mob, msg)
|
||||
if(bombassembly)
|
||||
bombassembly.hear_talk(M, msg)
|
||||
|
||||
/obj/item/device/onetankbomb/hear_message(mob/living/M as mob, msg)
|
||||
/obj/item/onetankbomb/hear_message(mob/living/M as mob, msg)
|
||||
if(bombassembly)
|
||||
bombassembly.hear_message(M, msg)
|
||||
|
||||
// ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ----------
|
||||
|
||||
/obj/item/weapon/tank/proc/bomb_assemble(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb
|
||||
var/obj/item/device/assembly_holder/S = W
|
||||
/obj/item/tank/proc/bomb_assemble(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb
|
||||
var/obj/item/assembly_holder/S = W
|
||||
var/mob/M = user
|
||||
if(!S.secured) //Check if the assembly is secured
|
||||
return
|
||||
if(isigniter(S.a_left) == isigniter(S.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it
|
||||
return
|
||||
|
||||
var/obj/item/device/onetankbomb/R = new /obj/item/device/onetankbomb(loc)
|
||||
var/obj/item/onetankbomb/R = new /obj/item/onetankbomb(loc)
|
||||
|
||||
M.drop_item() //Remove the assembly from your hands
|
||||
M.remove_from_mob(src) //Remove the tank from your character,in case you were holding it
|
||||
@@ -116,7 +117,7 @@
|
||||
R.update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/tank/proc/detonate() //This happens when a bomb is told to explode
|
||||
/obj/item/tank/proc/detonate() //This happens when a bomb is told to explode
|
||||
var/fuel_moles = air_contents.toxins + air_contents.oxygen/6
|
||||
var/strength = 1
|
||||
|
||||
@@ -165,7 +166,7 @@
|
||||
qdel(master)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/tank/proc/release() //This happens when the bomb is not welded. Tank contents are just spat out.
|
||||
/obj/item/tank/proc/release() //This happens when the bomb is not welded. Tank contents are just spat out.
|
||||
var/datum/gas_mixture/removed = air_contents.remove(air_contents.total_moles())
|
||||
var/turf/simulated/T = get_turf(src)
|
||||
if(!T)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/assembly/health
|
||||
/obj/item/assembly/health
|
||||
name = "health sensor"
|
||||
desc = "Used for scanning and monitoring health."
|
||||
icon_state = "health"
|
||||
@@ -12,12 +12,12 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/device/assembly/health/activate()
|
||||
/obj/item/assembly/health/activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
toggle_scan()
|
||||
return 0
|
||||
|
||||
/obj/item/device/assembly/health/toggle_secure()
|
||||
/obj/item/assembly/health/toggle_secure()
|
||||
secured = !secured
|
||||
if(secured && scanning)
|
||||
processing_objects.Add(src)
|
||||
@@ -27,8 +27,8 @@
|
||||
update_icon()
|
||||
return secured
|
||||
|
||||
/obj/item/device/assembly/health/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
/obj/item/assembly/health/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/multitool))
|
||||
if(alarm_health == 0)
|
||||
alarm_health = -90
|
||||
user.show_message("You toggle [src] to \"detect death\" mode.")
|
||||
@@ -39,7 +39,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/device/assembly/health/process()
|
||||
/obj/item/assembly/health/process()
|
||||
if(!scanning || !secured)
|
||||
return
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/device/assembly/health/proc/toggle_scan()
|
||||
/obj/item/assembly/health/proc/toggle_scan()
|
||||
if(!secured) return 0
|
||||
scanning = !scanning
|
||||
if(scanning)
|
||||
@@ -69,7 +69,7 @@
|
||||
processing_objects.Remove(src)
|
||||
return
|
||||
|
||||
/obj/item/device/assembly/health/interact(mob/user as mob)//TODO: Change this to the wires thingy
|
||||
/obj/item/assembly/health/interact(mob/user as mob)//TODO: Change this to the wires thingy
|
||||
if(!secured)
|
||||
user.show_message("<span class='warning'>The [name] is unsecured!</span>")
|
||||
return 0
|
||||
@@ -83,7 +83,7 @@
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/assembly/health/Topic(href, href_list)
|
||||
/obj/item/assembly/health/Topic(href, href_list)
|
||||
..()
|
||||
if(!ismob(usr))
|
||||
return
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
/proc/isassembly(O)
|
||||
if(istype(O, /obj/item/device/assembly))
|
||||
if(istype(O, /obj/item/assembly))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/isigniter(O)
|
||||
if(istype(O, /obj/item/device/assembly/igniter))
|
||||
if(istype(O, /obj/item/assembly/igniter))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/isinfared(O)
|
||||
if(istype(O, /obj/item/device/assembly/infra))
|
||||
if(istype(O, /obj/item/assembly/infra))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/isprox(O)
|
||||
if(istype(O, /obj/item/device/assembly/prox_sensor))
|
||||
if(istype(O, /obj/item/assembly/prox_sensor))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/issignaler(O)
|
||||
if(istype(O, /obj/item/device/assembly/signaler))
|
||||
if(istype(O, /obj/item/assembly/signaler))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/istimer(O)
|
||||
if(istype(O, /obj/item/device/assembly/timer))
|
||||
if(istype(O, /obj/item/assembly/timer))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/assembly_holder
|
||||
/obj/item/assembly_holder
|
||||
name = "Assembly"
|
||||
icon = 'icons/obj/assemblies/new_assemblies.dmi'
|
||||
icon_state = "holder"
|
||||
@@ -10,13 +10,13 @@
|
||||
throw_range = 10
|
||||
|
||||
var/secured = 0
|
||||
var/obj/item/device/assembly/a_left = null
|
||||
var/obj/item/device/assembly/a_right = null
|
||||
var/obj/item/assembly/a_left = null
|
||||
var/obj/item/assembly/a_right = null
|
||||
|
||||
proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
|
||||
proc/attach(var/obj/item/D, var/obj/item/D2, var/mob/user)
|
||||
return
|
||||
|
||||
proc/process_activation(var/obj/item/device/D)
|
||||
proc/process_activation(var/obj/item/D)
|
||||
return
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
a_right.holder = null
|
||||
return ..()
|
||||
|
||||
attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
|
||||
attach(var/obj/item/D, var/obj/item/D2, var/mob/user)
|
||||
if((!D)||(!D2)) return 0
|
||||
if((!isassembly(D))||(!isassembly(D2))) return 0
|
||||
if((D:secured)||(D2:secured)) return 0
|
||||
@@ -137,8 +137,8 @@
|
||||
return
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(!a_left || !a_right)
|
||||
to_chat(user, "<span class='warning'>BUG:Assembly part missing, please report this!</span>")
|
||||
return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/assembly/igniter
|
||||
/obj/item/assembly/igniter
|
||||
name = "igniter"
|
||||
desc = "A small electronic device able to ignite combustable substances."
|
||||
icon_state = "igniter"
|
||||
@@ -6,31 +6,31 @@
|
||||
origin_tech = "magnets=1"
|
||||
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
|
||||
|
||||
/obj/item/device/assembly/igniter/New()
|
||||
/obj/item/assembly/igniter/New()
|
||||
..()
|
||||
sparks.set_up(2, 0, src)
|
||||
sparks.attach(src)
|
||||
|
||||
/obj/item/device/assembly/igniter/Destroy()
|
||||
/obj/item/assembly/igniter/Destroy()
|
||||
QDEL_NULL(sparks)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/device/assembly/igniter/describe()
|
||||
/obj/item/assembly/igniter/describe()
|
||||
return "The igniter is [secured?"secured.":"unsecured."]"
|
||||
|
||||
|
||||
/obj/item/device/assembly/igniter/activate()
|
||||
/obj/item/assembly/igniter/activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
var/turf/location = get_turf(loc)
|
||||
if(location) location.hotspot_expose(1000,1000)
|
||||
if(istype(src.loc,/obj/item/device/assembly_holder))
|
||||
if(istype(src.loc,/obj/item/assembly_holder))
|
||||
if(istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
|
||||
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
|
||||
if(tank)
|
||||
tank.boom()
|
||||
if(istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/))
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc
|
||||
if(istype(src.loc.loc, /obj/item/reagent_containers/glass/beaker/))
|
||||
var/obj/item/reagent_containers/glass/beaker/beakerbomb = src.loc.loc
|
||||
if(beakerbomb)
|
||||
beakerbomb.heat_beaker()
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/assembly/igniter/attack_self(mob/user as mob)
|
||||
/obj/item/assembly/igniter/attack_self(mob/user as mob)
|
||||
activate()
|
||||
add_fingerprint(user)
|
||||
return
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/assembly/infra
|
||||
/obj/item/assembly/infra
|
||||
name = "infrared emitter"
|
||||
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
|
||||
icon_state = "infrared"
|
||||
@@ -7,41 +7,60 @@
|
||||
|
||||
bomb_name = "tripwire mine"
|
||||
|
||||
secured = 0 // toggle_secure()'ed in New() for correct adding to processing_objects, won't work otherwise
|
||||
dir = EAST
|
||||
var/on = 0
|
||||
var/visible = 0
|
||||
var/visible = 1
|
||||
var/obj/effect/beam/i_beam/first = null
|
||||
var/obj/effect/beam/i_beam/last = null
|
||||
var/max_nesting_level = 10
|
||||
var/turf/fire_location
|
||||
var/emission_cycles = 0
|
||||
var/emission_cap = 20
|
||||
|
||||
/obj/item/device/assembly/infra/Destroy()
|
||||
/obj/item/assembly/infra/Destroy()
|
||||
if(first)
|
||||
QDEL_NULL(first)
|
||||
last = null
|
||||
fire_location = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/assembly/infra/describe()
|
||||
return "The infrared trigger is [on?"on":"off"]."
|
||||
/obj/item/assembly/infra/describe()
|
||||
return "The assembly is [secured ? "secure" : "not secure"]. The infrared trigger is [on ? "on" : "off"]."
|
||||
|
||||
/obj/item/device/assembly/infra/activate()
|
||||
/obj/item/assembly/infra/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, describe())
|
||||
|
||||
/obj/item/assembly/infra/activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
on = !on
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/item/device/assembly/infra/toggle_secure()
|
||||
/obj/item/assembly/infra/toggle_secure()
|
||||
secured = !secured
|
||||
if(secured)
|
||||
processing_objects.Add(src)
|
||||
else
|
||||
on = 0
|
||||
if(first) qdel(first)
|
||||
if(first)
|
||||
qdel(first)
|
||||
processing_objects.Remove(src)
|
||||
update_icon()
|
||||
return secured
|
||||
|
||||
/obj/item/device/assembly/infra/update_icon()
|
||||
/obj/item/assembly/infra/New()
|
||||
..()
|
||||
if(!secured)
|
||||
toggle_secure()
|
||||
|
||||
/obj/item/assembly/infra/proc/arm() // Forces the device to arm no matter its current state.
|
||||
if(!secured) // Checked because arm() might be called sometime after the object is spawned.
|
||||
toggle_secure()
|
||||
on = 1
|
||||
|
||||
/obj/item/assembly/infra/update_icon()
|
||||
overlays.Cut()
|
||||
attached_overlays = list()
|
||||
if(on)
|
||||
@@ -51,38 +70,22 @@
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
|
||||
/obj/item/device/assembly/infra/proc/get_valid_loc(atom/A, atom/prev, level = 0)
|
||||
if(!A)
|
||||
A = loc
|
||||
if(!prev)
|
||||
prev = src
|
||||
if(level > max_nesting_level)
|
||||
return null
|
||||
else if(isturf(A))
|
||||
return A
|
||||
else if(isobj(A))
|
||||
var/obj/O = A
|
||||
if(isassembly(A) || O.IsAssemblyHolder() || istype(A, /obj/item/device/onetankbomb))
|
||||
return .(A.loc, A, level + 1)
|
||||
else if(ismob(A))
|
||||
var/mob/user = A
|
||||
if(user.get_active_hand() == prev || user.get_inactive_hand() == prev)
|
||||
return .(A.loc, A, level + 1)
|
||||
return null
|
||||
|
||||
/obj/item/device/assembly/infra/process()
|
||||
if(!on || fire_location != get_turf(loc))
|
||||
if(first)
|
||||
qdel(first)
|
||||
return
|
||||
/obj/item/assembly/infra/process()
|
||||
var/turf/T = get_turf(src)
|
||||
if(first && (!on || !fire_location || fire_location != T || emission_cycles >= emission_cap))
|
||||
qdel(first)
|
||||
return
|
||||
if(!on)
|
||||
return
|
||||
if(!secured)
|
||||
return
|
||||
if(first && last)
|
||||
last.process()
|
||||
emission_cycles++
|
||||
return
|
||||
var/turf/T = get_valid_loc()
|
||||
if(T)
|
||||
fire_location = T
|
||||
emission_cycles = 0
|
||||
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(T)
|
||||
I.master = src
|
||||
I.density = 1
|
||||
@@ -96,39 +99,41 @@
|
||||
I.limit = 8
|
||||
I.process()
|
||||
|
||||
/obj/item/device/assembly/infra/attack_hand()
|
||||
/obj/item/assembly/infra/attack_hand()
|
||||
qdel(first)
|
||||
..()
|
||||
|
||||
/obj/item/device/assembly/infra/Move()
|
||||
/obj/item/assembly/infra/Move()
|
||||
var/t = dir
|
||||
..()
|
||||
dir = t
|
||||
qdel(first)
|
||||
|
||||
/obj/item/device/assembly/infra/holder_movement()
|
||||
/obj/item/assembly/infra/holder_movement()
|
||||
if(!holder) return 0
|
||||
qdel(first)
|
||||
return 1
|
||||
|
||||
/obj/item/device/assembly/infra/equipped(var/mob/user, var/slot)
|
||||
/obj/item/assembly/infra/equipped(var/mob/user, var/slot)
|
||||
qdel(first)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/assembly/infra/pickup(mob/user)
|
||||
/obj/item/assembly/infra/pickup(mob/user)
|
||||
qdel(first)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/assembly/infra/proc/trigger_beam()
|
||||
/obj/item/assembly/infra/proc/trigger_beam()
|
||||
if(!secured || !on || cooldown > 0)
|
||||
return 0
|
||||
pulse(0)
|
||||
audible_message("[bicon(src)] *beep* *beep*", null, 3)
|
||||
if(first)
|
||||
qdel(first)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
process_cooldown()
|
||||
|
||||
/obj/item/device/assembly/infra/interact(mob/user as mob)//TODO: change this this to the wire control panel
|
||||
/obj/item/assembly/infra/interact(mob/user as mob)//TODO: change this this to the wire control panel
|
||||
if(!secured) return
|
||||
user.set_machine(src)
|
||||
var/dat = {"<TT><B>Infrared Laser</B>
|
||||
@@ -143,7 +148,7 @@
|
||||
popup.open(0)
|
||||
onclose(user, "infra")
|
||||
|
||||
/obj/item/device/assembly/infra/Topic(href, href_list)
|
||||
/obj/item/assembly/infra/Topic(href, href_list)
|
||||
..()
|
||||
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
||||
usr << browse(null, "window=infra")
|
||||
@@ -164,7 +169,7 @@
|
||||
if(usr)
|
||||
attack_self(usr)
|
||||
|
||||
/obj/item/device/assembly/infra/verb/rotate()//This could likely be better
|
||||
/obj/item/assembly/infra/verb/rotate()//This could likely be better
|
||||
set name = "Rotate Infrared Laser"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
@@ -177,6 +182,21 @@
|
||||
if(usr.machine == src)
|
||||
interact(usr)
|
||||
|
||||
if(first)
|
||||
qdel(first)
|
||||
|
||||
|
||||
|
||||
/obj/item/assembly/infra/armed/New()
|
||||
..()
|
||||
spawn(3)
|
||||
if(holder)
|
||||
if(holder.master)
|
||||
dir = holder.master.dir
|
||||
arm()
|
||||
|
||||
/obj/item/assembly/infra/armed/stealth
|
||||
visible = 0
|
||||
|
||||
|
||||
/***************************IBeam*********************************/
|
||||
@@ -187,10 +207,12 @@
|
||||
icon_state = "ibeam"
|
||||
var/obj/effect/beam/i_beam/next = null
|
||||
var/obj/effect/beam/i_beam/previous = null
|
||||
var/obj/item/device/assembly/infra/master = null
|
||||
var/obj/item/assembly/infra/master = null
|
||||
var/limit = null
|
||||
var/visible = 0.0
|
||||
var/left = null
|
||||
var/life_cycles = 0
|
||||
var/life_cap = 20
|
||||
anchored = 1.0
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
|
||||
@@ -209,7 +231,8 @@
|
||||
transform = turn(matrix(), dir2angle(dir))
|
||||
|
||||
/obj/effect/beam/i_beam/process()
|
||||
if((loc.density || !(master)))
|
||||
life_cycles++
|
||||
if(loc.density || !master || life_cycles >= life_cap)
|
||||
qdel(src)
|
||||
return
|
||||
if(left > 0)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/assembly/mousetrap
|
||||
/obj/item/assembly/mousetrap
|
||||
name = "mousetrap"
|
||||
desc = "A handy little spring-loaded trap for catching pesty rodents."
|
||||
icon_state = "mousetrap"
|
||||
@@ -53,7 +53,7 @@
|
||||
affecting = H.get_organ(type)
|
||||
H.Stun(3)
|
||||
if(affecting)
|
||||
affecting.take_damage(1, 0)
|
||||
affecting.receive_damage(1, 0)
|
||||
H.updatehealth()
|
||||
else if(ismouse(target))
|
||||
var/mob/living/simple_animal/mouse/M = target
|
||||
@@ -128,12 +128,12 @@
|
||||
triggered(null)
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/armed
|
||||
/obj/item/assembly/mousetrap/armed
|
||||
icon_state = "mousetraparmed"
|
||||
armed = 1
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/verb/hide_under()
|
||||
/obj/item/assembly/mousetrap/verb/hide_under()
|
||||
set src in oview(1)
|
||||
set name = "Hide"
|
||||
set category = "Object"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/assembly/prox_sensor
|
||||
/obj/item/assembly/prox_sensor
|
||||
name = "proximity sensor"
|
||||
desc = "Used for scanning and alerting when someone enters a certain proximity."
|
||||
icon_state = "prox"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "shock_kit"
|
||||
var/obj/item/clothing/head/helmet/part1 = null
|
||||
var/obj/item/device/radio/electropack/part2 = null
|
||||
var/obj/item/radio/electropack/part2 = null
|
||||
var/status = 0
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
flags = CONDUCT
|
||||
@@ -14,8 +14,8 @@
|
||||
QDEL_NULL(part2)
|
||||
return ..()
|
||||
|
||||
/obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weapon/wrench) && !status)
|
||||
/obj/item/assembly/shock_kit/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/wrench) && !status)
|
||||
var/turf/T = loc
|
||||
if(ismob(T))
|
||||
T = T.loc
|
||||
@@ -27,7 +27,7 @@
|
||||
part2 = null
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
status = !status
|
||||
to_chat(user, "<span class='notice'>[src] is now [status ? "secured" : "unsecured"]!</span>")
|
||||
add_fingerprint(user)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/assembly/signaler
|
||||
/obj/item/assembly/signaler
|
||||
name = "remote signaling device"
|
||||
desc = "Used to remotely activate devices."
|
||||
icon_state = "signaller"
|
||||
@@ -18,24 +18,25 @@
|
||||
var/datum/radio_frequency/radio_connection
|
||||
var/airlock_wire = null
|
||||
|
||||
/obj/item/device/assembly/signaler/New()
|
||||
/obj/item/assembly/signaler/New()
|
||||
..()
|
||||
if(radio_controller)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/item/device/assembly/signaler/initialize()
|
||||
/obj/item/assembly/signaler/initialize()
|
||||
if(radio_controller)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/item/device/assembly/signaler/Destroy()
|
||||
/obj/item/assembly/signaler/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src,frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/assembly/signaler/describe()
|
||||
/obj/item/assembly/signaler/describe()
|
||||
return "\The [src]'s power light is [receiving?"on":"off"]"
|
||||
|
||||
/obj/item/device/assembly/signaler/activate()
|
||||
/obj/item/assembly/signaler/activate()
|
||||
if(cooldown > 0) return 0
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
@@ -44,12 +45,12 @@
|
||||
signal()
|
||||
return 1
|
||||
|
||||
/obj/item/device/assembly/signaler/update_icon()
|
||||
/obj/item/assembly/signaler/update_icon()
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
return
|
||||
|
||||
/obj/item/device/assembly/signaler/interact(mob/user as mob, flag1)
|
||||
/obj/item/assembly/signaler/interact(mob/user as mob, flag1)
|
||||
var/t1 = "-------"
|
||||
// if((src.b_stat && !( flag1 )))
|
||||
// t1 = text("-------<BR>\nGreen Wire: []<BR>\nRed Wire: []<BR>\nBlue Wire: []<BR>\n", (src.wires & 4 ? "<A href='?src=[UID()];wires=4'>Cut Wire</A>" : "<A href='?src=[UID()];wires=4'>Mend Wire</A>"), (src.wires & 2 ? "<A href='?src=[UID()];wires=2'>Cut Wire</A>" : "<A href='?src=[UID()];wires=2'>Mend Wire</A>"), (src.wires & 1 ? "<A href='?src=[UID()];wires=1'>Cut Wire</A>" : "<A href='?src=[UID()];wires=1'>Mend Wire</A>"))
|
||||
@@ -88,7 +89,7 @@
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/assembly/signaler/Topic(href, href_list)
|
||||
/obj/item/assembly/signaler/Topic(href, href_list)
|
||||
..()
|
||||
|
||||
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
||||
@@ -119,7 +120,7 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/assembly/signaler/proc/signal()
|
||||
/obj/item/assembly/signaler/proc/signal()
|
||||
if(!radio_connection) return
|
||||
|
||||
var/datum/signal/signal = new
|
||||
@@ -135,13 +136,13 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/assembly/signaler/pulse(var/radio = 0)
|
||||
/obj/item/assembly/signaler/pulse(var/radio = 0)
|
||||
if(src.connected && src.wires)
|
||||
connected.Pulse(src)
|
||||
else
|
||||
return ..(radio)
|
||||
|
||||
/obj/item/device/assembly/signaler/receive_signal(datum/signal/signal)
|
||||
/obj/item/assembly/signaler/receive_signal(datum/signal/signal)
|
||||
if( !receiving || !signal )
|
||||
return 0
|
||||
|
||||
@@ -155,7 +156,7 @@
|
||||
O.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2)
|
||||
return
|
||||
|
||||
/obj/item/device/assembly/signaler/proc/set_frequency(new_frequency)
|
||||
/obj/item/assembly/signaler/proc/set_frequency(new_frequency)
|
||||
if(!radio_controller)
|
||||
sleep(20)
|
||||
if(!radio_controller)
|
||||
@@ -166,17 +167,17 @@
|
||||
return
|
||||
|
||||
// Embedded signaller used in anomalies.
|
||||
/obj/item/device/assembly/signaler/anomaly
|
||||
/obj/item/assembly/signaler/anomaly
|
||||
name = "anomaly core"
|
||||
desc = "The neutralized core of an anomaly. It'd probably be valuable for research."
|
||||
icon_state = "anomaly core"
|
||||
item_state = "electronic"
|
||||
receiving = 1
|
||||
|
||||
/obj/item/device/assembly/signaler/anomaly/receive_signal(datum/signal/signal)
|
||||
/obj/item/assembly/signaler/anomaly/receive_signal(datum/signal/signal)
|
||||
..()
|
||||
for(var/obj/effect/anomaly/A in orange(0, src))
|
||||
A.anomalyNeutralize()
|
||||
|
||||
/obj/item/device/assembly/signaler/anomaly/attack_self()
|
||||
/obj/item/assembly/signaler/anomaly/attack_self()
|
||||
return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/assembly/timer
|
||||
/obj/item/assembly/timer
|
||||
name = "timer"
|
||||
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
|
||||
icon_state = "timer"
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
if(href_list["time"])
|
||||
timing = !timing
|
||||
if(timing && istype(holder, /obj/item/device/transfer_valve))
|
||||
if(timing && istype(holder, /obj/item/transfer_valve))
|
||||
message_admins("[key_name_admin(usr)] activated [src] attachment on [holder].")
|
||||
bombers += "[key_name(usr)] activated [src] attachment for [loc]"
|
||||
log_game("[key_name(usr)] activated [src] attachment for [loc]")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/assembly/voice
|
||||
/obj/item/assembly/voice
|
||||
name = "voice analyzer"
|
||||
desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated."
|
||||
icon_state = "voice"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_screen = "area_atmos"
|
||||
icon_keyboard = "atmos_key"
|
||||
circuit = /obj/item/weapon/circuitboard/atmos_automation
|
||||
circuit = /obj/item/circuitboard/atmos_automation
|
||||
req_one_access_txt = "24;10"
|
||||
Mtoollink = 1
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
if(corpseback)
|
||||
M.equip_to_slot_or_del(new corpseback(M), slot_back)
|
||||
if(corpseid == 1)
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
var/obj/item/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
var/datum/job/jobdatum
|
||||
for(var/jobtype in typesof(/datum/job))
|
||||
@@ -103,10 +103,10 @@
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseshoes = /obj/item/clothing/shoes/combat
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpseradio = /obj/item/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/swat
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseback = /obj/item/storage/backpack
|
||||
corpseid = 1
|
||||
corpseidjob = "Operative"
|
||||
corpseidaccess = "Syndicate"
|
||||
@@ -117,13 +117,13 @@
|
||||
name = "Syndicate Commando"
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/space/hardsuit/syndi
|
||||
corpseshoes = /obj/item/clothing/shoes/combat
|
||||
corpseshoes = /obj/item/clothing/shoes/magboots/syndie
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpseradio = /obj/item/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/syndicate
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi
|
||||
corpseback = /obj/item/weapon/tank/jetpack/oxygen
|
||||
corpsepocket1 = /obj/item/weapon/tank/emergency_oxygen
|
||||
corpseback = /obj/item/tank/jetpack/oxygen
|
||||
corpsepocket1 = /obj/item/tank/emergency_oxygen
|
||||
corpseid = 1
|
||||
corpseidjob = "Operative"
|
||||
corpseidaccess = "Syndicate"
|
||||
@@ -138,8 +138,8 @@
|
||||
corpsesuit = /obj/item/clothing/suit/chef/classic
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpsehelmet = /obj/item/clothing/head/chefhat
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpseback = /obj/item/storage/backpack
|
||||
corpseradio = /obj/item/radio/headset
|
||||
corpseid = 1
|
||||
corpseidjob = "Chef"
|
||||
corpseidaccess = "Chef"
|
||||
@@ -147,11 +147,11 @@
|
||||
|
||||
/obj/effect/landmark/corpse/doctor
|
||||
name = "Doctor"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_med
|
||||
corpseradio = /obj/item/radio/headset/headset_med
|
||||
corpseuniform = /obj/item/clothing/under/rank/medical
|
||||
corpsesuit = /obj/item/clothing/suit/storage/labcoat
|
||||
corpseback = /obj/item/weapon/storage/backpack/medic
|
||||
corpsepocket1 = /obj/item/device/flashlight/pen
|
||||
corpseback = /obj/item/storage/backpack/medic
|
||||
corpsepocket1 = /obj/item/flashlight/pen
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseid = 1
|
||||
corpseidjob = "Medical Doctor"
|
||||
@@ -159,11 +159,11 @@
|
||||
|
||||
/obj/effect/landmark/corpse/engineer
|
||||
name = "Engineer"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_eng
|
||||
corpseradio = /obj/item/radio/headset/headset_eng
|
||||
corpseuniform = /obj/item/clothing/under/rank/engineer
|
||||
corpseback = /obj/item/weapon/storage/backpack/industrial
|
||||
corpseback = /obj/item/storage/backpack/industrial
|
||||
corpseshoes = /obj/item/clothing/shoes/workboots
|
||||
corpsebelt = /obj/item/weapon/storage/belt/utility/full
|
||||
corpsebelt = /obj/item/storage/belt/utility/full
|
||||
corpsegloves = /obj/item/clothing/gloves/color/yellow
|
||||
corpsehelmet = /obj/item/clothing/head/hardhat
|
||||
corpseid = 1
|
||||
@@ -183,10 +183,10 @@
|
||||
corpseuniform = /obj/item/clothing/under/officeruniform
|
||||
corpsesuit = /obj/item/clothing/suit/officercoat
|
||||
corpseshoes = /obj/item/clothing/shoes/clown_shoes
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpseradio = /obj/item/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/clown_hat
|
||||
corpsepocket1 = /obj/item/weapon/bikehorn
|
||||
corpseback = /obj/item/weapon/storage/backpack/clown
|
||||
corpsepocket1 = /obj/item/bikehorn
|
||||
corpseback = /obj/item/storage/backpack/clown
|
||||
corpsehelmet = /obj/item/clothing/head/naziofficer
|
||||
corpseid = 1
|
||||
corpseidjob = "Clown Officer"
|
||||
@@ -197,10 +197,10 @@
|
||||
corpseuniform = /obj/item/clothing/under/soldieruniform
|
||||
corpsesuit = /obj/item/clothing/suit/soldiercoat
|
||||
corpseshoes = /obj/item/clothing/shoes/clown_shoes
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpseradio = /obj/item/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/clown_hat
|
||||
corpsepocket1 = /obj/item/weapon/bikehorn
|
||||
corpseback = /obj/item/weapon/storage/backpack/clown
|
||||
corpsepocket1 = /obj/item/bikehorn
|
||||
corpseback = /obj/item/storage/backpack/clown
|
||||
corpsehelmet = /obj/item/clothing/head/stalhelm
|
||||
corpseid = 1
|
||||
corpseidjob = "Clown Soldier"
|
||||
@@ -211,11 +211,11 @@
|
||||
name = "Clown King"
|
||||
corpseuniform = /obj/item/clothing/under/rank/clown
|
||||
corpseshoes = /obj/item/clothing/shoes/clown_shoes
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpseradio = /obj/item/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/clown_hat
|
||||
corpsehelmet = /obj/item/clothing/head/crown
|
||||
corpsepocket1 = /obj/item/weapon/bikehorn
|
||||
corpseback = /obj/item/weapon/bedsheet/clown
|
||||
corpsepocket1 = /obj/item/bikehorn
|
||||
corpseback = /obj/item/bedsheet/clown
|
||||
corpseid = 1
|
||||
corpseidjob = "Clown King"
|
||||
corpseidaccess = "Clown"
|
||||
@@ -226,9 +226,9 @@
|
||||
name = "Mime"
|
||||
corpseuniform = /obj/item/clothing/under/mime
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpseradio = /obj/item/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/mime
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseback = /obj/item/storage/backpack
|
||||
corpseid = 1
|
||||
corpseidjob = "Mime"
|
||||
corpseidaccess = "Mime"
|
||||
@@ -236,20 +236,20 @@
|
||||
|
||||
/obj/effect/landmark/corpse/scientist
|
||||
name = "Scientist"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_sci
|
||||
corpseradio = /obj/item/radio/headset/headset_sci
|
||||
corpseuniform = /obj/item/clothing/under/rank/scientist
|
||||
corpsesuit = /obj/item/clothing/suit/storage/labcoat/science
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseback = /obj/item/storage/backpack
|
||||
corpseshoes = /obj/item/clothing/shoes/white
|
||||
corpseid = 1
|
||||
corpseidjob = "Scientist"
|
||||
corpseidaccess = "Scientist"
|
||||
|
||||
/obj/effect/landmark/corpse/miner
|
||||
corpseradio = /obj/item/device/radio/headset/headset_cargo
|
||||
corpseradio = /obj/item/radio/headset/headset_cargo
|
||||
corpseuniform = /obj/item/clothing/under/rank/miner
|
||||
corpsegloves = /obj/item/clothing/gloves/fingerless
|
||||
corpseback = /obj/item/weapon/storage/backpack/industrial
|
||||
corpseback = /obj/item/storage/backpack/industrial
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseid = 1
|
||||
corpseidjob = "Shaft Miner"
|
||||
@@ -265,7 +265,7 @@
|
||||
|
||||
/obj/effect/landmark/corpse/bridgeofficer
|
||||
name = "Bridge Officer"
|
||||
corpseradio = /obj/item/device/radio/headset/heads/hop
|
||||
corpseradio = /obj/item/radio/headset/heads/hop
|
||||
corpseuniform = /obj/item/clothing/under/rank/centcom_officer
|
||||
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
@@ -278,13 +278,13 @@
|
||||
name = "Commander"
|
||||
corpseuniform = /obj/item/clothing/under/rank/centcom_commander
|
||||
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
|
||||
corpseradio = /obj/item/device/radio/headset/heads/captain
|
||||
corpseradio = /obj/item/radio/headset/heads/captain
|
||||
corpseglasses = /obj/item/clothing/glasses/eyepatch
|
||||
corpsemask = /obj/item/clothing/mask/cigarette/cigar/cohiba
|
||||
corpsehelmet = /obj/item/clothing/head/centhat
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseshoes = /obj/item/clothing/shoes/combat
|
||||
corpsepocket1 = /obj/item/weapon/lighter/zippo
|
||||
corpsepocket1 = /obj/item/lighter/zippo
|
||||
corpseid = 1
|
||||
corpseidjob = "Commander"
|
||||
corpseidaccess = "Captain"
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
//Exile implants will allow you to use the station gate, but not return home.
|
||||
//This will allow security to exile badguys/for badguys to exile their kill targets
|
||||
|
||||
/obj/item/weapon/implant/exile
|
||||
/obj/item/implant/exile
|
||||
name = "exile implant"
|
||||
desc = "Prevents you from returning from away missions"
|
||||
origin_tech = "materials=2;biotech=3;magnets=2;bluespace=3"
|
||||
activated = 0
|
||||
|
||||
/obj/item/weapon/implant/exile/get_data()
|
||||
/obj/item/implant/exile/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Nanotrasen Employee Exile Implant<BR>
|
||||
<b>Implant Details:</b> The onboard gateway system has been modified to reject entry by individuals containing this implant<BR>"}
|
||||
return dat
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/exile
|
||||
/obj/item/implanter/exile
|
||||
name = "implanter (exile)"
|
||||
|
||||
/obj/item/weapon/implanter/exile/New()
|
||||
imp = new /obj/item/weapon/implant/exile( src )
|
||||
/obj/item/implanter/exile/New()
|
||||
imp = new /obj/item/implant/exile( src )
|
||||
..()
|
||||
|
||||
/obj/item/weapon/implantcase/exile
|
||||
/obj/item/implantcase/exile
|
||||
name = "implant case - 'Exile'"
|
||||
desc = "A glass case containing an exile implant."
|
||||
|
||||
/obj/item/weapon/implantcase/exile/New()
|
||||
imp = new /obj/item/weapon/implant/exile(src)
|
||||
/obj/item/implantcase/exile/New()
|
||||
imp = new /obj/item/implant/exile(src)
|
||||
..()
|
||||
|
||||
|
||||
@@ -36,9 +36,9 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/exile/New()
|
||||
..()
|
||||
new /obj/item/weapon/implanter/exile(src)
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/implanter/exile(src)
|
||||
new /obj/item/implantcase/exile(src)
|
||||
new /obj/item/implantcase/exile(src)
|
||||
new /obj/item/implantcase/exile(src)
|
||||
new /obj/item/implantcase/exile(src)
|
||||
new /obj/item/implantcase/exile(src)
|
||||
@@ -152,8 +152,8 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/gateway/centerstation/attackby(obj/item/device/W as obj, mob/user as mob, params)
|
||||
if(istype(W,/obj/item/device/multitool))
|
||||
/obj/machinery/gateway/centerstation/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W,/obj/item/multitool))
|
||||
to_chat(user, "The gate is already calibrated, there is no work for you to do here.")
|
||||
return
|
||||
|
||||
@@ -252,14 +252,14 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
|
||||
M.dir = SOUTH
|
||||
|
||||
/obj/machinery/gateway/centeraway/proc/exilecheck(var/mob/living/carbon/M)
|
||||
for(var/obj/item/weapon/implant/exile/E in M)//Checking that there is an exile implant in the contents
|
||||
for(var/obj/item/implant/exile/E in M)//Checking that there is an exile implant in the contents
|
||||
if(E.imp_in == M)//Checking that it's actually implanted vs just in their pocket
|
||||
to_chat(M, "<span class='notice'>The station gate has detected your exile implant and is blocking your entry.</span>")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/gateway/centeraway/attackby(obj/item/device/W as obj, mob/user as mob, params)
|
||||
if(istype(W,/obj/item/device/multitool))
|
||||
/obj/machinery/gateway/centeraway/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W,/obj/item/multitool))
|
||||
if(calibrated)
|
||||
to_chat(user, "<span class='notice'>The gate is already calibrated, there is no work for you to do here.</span>")
|
||||
return
|
||||
|
||||
@@ -584,7 +584,7 @@ proc/SwapMaps_CreateFromTemplate(template_id)
|
||||
else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[template_id].txt"))
|
||||
text=1
|
||||
else
|
||||
log_to_dd("SwapMaps error in SwapMaps_CreateFromTemplate(): map_[template_id] file not found.")
|
||||
log_world("SwapMaps error in SwapMaps_CreateFromTemplate(): map_[template_id] file not found.")
|
||||
return
|
||||
if(text)
|
||||
S=new
|
||||
@@ -611,7 +611,7 @@ proc/SwapMaps_LoadChunk(chunk_id,turf/locorner)
|
||||
else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[chunk_id].txt"))
|
||||
text=1
|
||||
else
|
||||
log_to_dd("SwapMaps error in SwapMaps_LoadChunk(): map_[chunk_id] file not found.")
|
||||
log_world("SwapMaps error in SwapMaps_LoadChunk(): map_[chunk_id] file not found.")
|
||||
return
|
||||
if(text)
|
||||
S=new
|
||||
@@ -629,9 +629,9 @@ proc/SwapMaps_LoadChunk(chunk_id,turf/locorner)
|
||||
|
||||
proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2)
|
||||
if(!corner1 || !corner2)
|
||||
log_to_dd("SwapMaps error in SwapMaps_SaveChunk():")
|
||||
if(!corner1) log_to_dd(" corner1 turf is null")
|
||||
if(!corner2) log_to_dd(" corner2 turf is null")
|
||||
log_world("SwapMaps error in SwapMaps_SaveChunk():")
|
||||
if(!corner1) log_world(" corner1 turf is null")
|
||||
if(!corner2) log_world(" corner2 turf is null")
|
||||
return
|
||||
var/swapmap/M=new
|
||||
M.id=chunk_id
|
||||
@@ -658,7 +658,7 @@ proc/SwapMaps_GetSize(id)
|
||||
else if(swapmaps_mode!=SWAPMAPS_TEXT && fexists("map_[id].txt"))
|
||||
text=1
|
||||
else
|
||||
log_to_dd("SwapMaps error in SwapMaps_GetSize(): map_[id] file not found.")
|
||||
log_world("SwapMaps error in SwapMaps_GetSize(): map_[id] file not found.")
|
||||
return
|
||||
if(text)
|
||||
S=new
|
||||
|
||||
@@ -136,13 +136,13 @@
|
||||
// Objects loop
|
||||
if(!(flags & DMM_IGNORE_OBJS))
|
||||
for(var/obj/O in model.contents)
|
||||
if(O.dont_save || !isnull(O.gcDestroyed))
|
||||
if(O.dont_save || QDELETED(O))
|
||||
continue
|
||||
obj_template += "[O.type][check_attributes(O,use_json=use_json)],"
|
||||
|
||||
// Mobs Loop
|
||||
for(var/mob/M in model.contents)
|
||||
if(M.dont_save || !isnull(M.gcDestroyed))
|
||||
if(M.dont_save || QDELETED(M))
|
||||
continue
|
||||
if(M.client)
|
||||
if(!(flags & DMM_IGNORE_PLAYERS))
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
requires_power = 0
|
||||
tele_proof = 1
|
||||
|
||||
/obj/item/weapon/paper/terrorspiders1
|
||||
/obj/item/paper/terrorspiders1
|
||||
name = "paper - 'Sealed Facility'"
|
||||
info = {"<b>SEALED FACILITY</b><br>
|
||||
<br>
|
||||
@@ -87,7 +87,7 @@
|
||||
Any surviving personnel are to evacuate immediately via the gateway.<br>
|
||||
"}
|
||||
|
||||
/obj/item/weapon/paper/terrorspiders2
|
||||
/obj/item/paper/terrorspiders2
|
||||
name = "paper - 'The Trio of Terror'"
|
||||
info = {"<b>Status Report on the 'Terrors'</b><br>
|
||||
<br>
|
||||
@@ -109,7 +109,7 @@
|
||||
"}
|
||||
|
||||
|
||||
/obj/item/weapon/paper/terrorspiders3
|
||||
/obj/item/paper/terrorspiders3
|
||||
name = "paper - 'Final Report'"
|
||||
info = {"FROM: Field Agent 0738<br>
|
||||
TO: Syndicate #873589<br>
|
||||
@@ -125,7 +125,7 @@
|
||||
I don't imagine the staff have very long to live once the Queen declares war on this place.<br>
|
||||
"}
|
||||
|
||||
/obj/item/weapon/paper/terrorspiders4
|
||||
/obj/item/paper/terrorspiders4
|
||||
name = "paper - 'Prescription for Jones, David'"
|
||||
info = {"PRESCRIPTION FOR: David Jones<br>
|
||||
RANK: Miner<br>
|
||||
@@ -135,7 +135,7 @@
|
||||
TREATMENT PLAN: Take as needed. See Dr. Phloxi in one week if symptoms persist. <br>
|
||||
"}
|
||||
|
||||
/obj/item/weapon/paper/terrorspiders5
|
||||
/obj/item/paper/terrorspiders5
|
||||
name = "paper - 'A Study in Terror'"
|
||||
info = {"<b>Findings Overview</b><br>
|
||||
<br>
|
||||
@@ -150,7 +150,7 @@
|
||||
<p>Queen<br>Unable to contain. Present south of Cargo before contact was lost. Presumed ruler of the local hive.</p>
|
||||
"}
|
||||
|
||||
/obj/item/weapon/paper/terrorspiders6
|
||||
/obj/item/paper/terrorspiders6
|
||||
name = "paper - 'A Study in Venom'"
|
||||
info = {"<b>Initial Report - Black Widow Venom</b><br>
|
||||
<br>
|
||||
@@ -159,7 +159,7 @@
|
||||
One test monkey went from perfect health to death in under 60 seconds - from 3 bites.<br>
|
||||
I am so very glad I'm not responsible for keeping these things contained."}
|
||||
|
||||
/obj/item/weapon/paper/terrorspiders7
|
||||
/obj/item/paper/terrorspiders7
|
||||
name = "paper - 'Security Orders'"
|
||||
info = {"<b>Directives for Officer James</b><br>
|
||||
<br>
|
||||
@@ -169,7 +169,7 @@
|
||||
Good luck, Officer.<br>
|
||||
"}
|
||||
|
||||
/obj/item/weapon/paper/terrorspiders8
|
||||
/obj/item/paper/terrorspiders8
|
||||
name = "paper - 'Last Words'"
|
||||
info = {"<b>The Last Words of Nurse Barnes</b><br>
|
||||
<br>
|
||||
@@ -179,12 +179,12 @@
|
||||
(the writing trails off, as if the writer was interrupted)<br>
|
||||
"}
|
||||
|
||||
/obj/item/weapon/paper/terrorspiders9
|
||||
/obj/item/paper/terrorspiders9
|
||||
name = "paper - 'Research Notes'"
|
||||
info = "<b>The notes appear gibberish to you. Perhaps a destructive analyser in R&D could make sense of them.</b>"
|
||||
origin_tech = "combat=4;materials=4;engineering=4;biotech=4"
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/awaymission_aeg
|
||||
/obj/item/gun/energy/laser/awaymission_aeg
|
||||
name = "Wireless Energy Gun"
|
||||
desc = "An energy gun that recharges wirelessly during away missions. Does not work on the main station."
|
||||
force = 10
|
||||
@@ -193,7 +193,7 @@
|
||||
can_charge = 0
|
||||
var/inawaymission = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/awaymission_aeg/process()
|
||||
/obj/item/gun/energy/laser/awaymission_aeg/process()
|
||||
var/turf/my_loc = get_turf(src)
|
||||
if(is_away_level(my_loc.z))
|
||||
if(inawaymission)
|
||||
@@ -211,10 +211,10 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/terror_black_toxin
|
||||
/obj/item/reagent_containers/glass/beaker/terror_black_toxin
|
||||
name = "beaker 'Black Terror Venom'"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/terror_black_toxin/New()
|
||||
/obj/item/reagent_containers/glass/beaker/terror_black_toxin/New()
|
||||
..()
|
||||
reagents.add_reagent("terror_black_toxin", 50)
|
||||
update_icon()
|
||||
@@ -229,8 +229,8 @@
|
||||
var/door_to_open = "UO71_Start"
|
||||
|
||||
/obj/machinery/computer/id_upgrader/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/D = I
|
||||
if(istype(I, /obj/item/card/id))
|
||||
var/obj/item/card/id/D = I
|
||||
if(!access_to_give.len)
|
||||
to_chat(user, "<span class='notice'>This machine appears to be configured incorrectly.</span>")
|
||||
return
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
//centcomAway items
|
||||
|
||||
/obj/item/weapon/paper/pamphlet/ccaInfo
|
||||
/obj/item/paper/pamphlet/ccaInfo
|
||||
name = "Visitor Info Pamphlet"
|
||||
info = "<b> XCC-P5831 Visitor Information </b><br>\
|
||||
Greetings, visitor, to XCC-P5831! As you may know, this outpost was once \
|
||||
@@ -48,7 +48,7 @@
|
||||
and the thrilling pay-per-view broadcasts of <i>PLASTEEL CHEF</i> and <i>THUNDERDOME LIVE</i>.<br> \
|
||||
We hope you enjoy your stay!"
|
||||
|
||||
/obj/item/weapon/paper/ccaMemo
|
||||
/obj/item/paper/ccaMemo
|
||||
name = "Memo to XCC-P5831 QM"
|
||||
info = "<b>From: XCC-P5831 Management Office</b><br>\
|
||||
<b>To: Rolf Ingram, XCC-P5831 Quartermaster</b><br>\
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
/obj/item/weapon/paper/journal_scrap_1
|
||||
/obj/item/paper/journal_scrap_1
|
||||
name = "survivor's journal page 1"
|
||||
info = "Coal again.<br> \
|
||||
Every year, coal in my stockings when this stupid holiday comes around.<br> \
|
||||
Not this year though. This year will be different. I'm going to find that fat man, I swear.<br> \
|
||||
He'll have to give me all the good presents, if he wants to live long enough to get any cookies."
|
||||
|
||||
/obj/item/weapon/paper/journal_scrap_2
|
||||
/obj/item/paper/journal_scrap_2
|
||||
name = "survivor's journal page 9"
|
||||
info = "The North Pole... You'd think it was a part of his legend, but he actually lives there!<br> \
|
||||
The elves and village are a lie though. Not sure where the toys come from yet, but I'll get them.<br> \
|
||||
Not much out here, a couple little shacks and a big igloo in the center... Bet he's inside that.<br> \
|
||||
On an unrelated note, great packing snow. Built a snowman today."
|
||||
|
||||
/obj/item/weapon/paper/journal_scrap_3
|
||||
/obj/item/paper/journal_scrap_3
|
||||
name = "survivor's journal page 25"
|
||||
info = "Oh man... This is bad...<br> \
|
||||
Not even my Syndicate training was a match for him. Barely made it out with my life.<br> \
|
||||
|
||||
@@ -17,40 +17,40 @@
|
||||
icon = 'icons/testing/turf_analysis.dmi'
|
||||
icon_state = "arrow"
|
||||
|
||||
/obj/item/weapon/paper/crumpled/hotel_scrap_1
|
||||
/obj/item/paper/crumpled/hotel_scrap_1
|
||||
name = "paper scrap"
|
||||
info = "I can't believe this shitty hotel assigned me a purple-themed room. <i>Why does the shower dump grape drink everywhere??</i>"
|
||||
|
||||
/obj/item/weapon/paper/hotel_scrap_2
|
||||
/obj/item/paper/hotel_scrap_2
|
||||
name = "Journal Entry #2"
|
||||
info = "<h3>Day 7:</h3>Today, I stepped into my bathroom, only to discover that it had become a mountainside wilderness. I tried to wash my hands with snow, but it didn't particularly pan out.<br>I contacting the front desk regarding the issue, but the receptionist just stared at me with dead eyes and spouted unrepeatable curses at me. However, I convinced them to reassign me to an upgraded suite."
|
||||
|
||||
/obj/item/weapon/paper/hotel_scrap_3
|
||||
/obj/item/paper/hotel_scrap_3
|
||||
name = "Journal Entry #3"
|
||||
info = "<h3>Day 26:</h3>Well, that sucked royally. The queen-sized bed was nice, but the hottub in my room was, well, my wife described it as \"a portal to hell\". I don't know, I guess the lava and weird blood gave it that impression, but it was pretty nicely warm.<br>However, <i>\"we\"</i> decided to get assigned to a new room. Whatever."
|
||||
|
||||
/obj/item/weapon/paper/hotel_scrap_4
|
||||
/obj/item/paper/hotel_scrap_4
|
||||
name = "Diary Page"
|
||||
info = "<b>Day 7 of Bad Vacation</b><br>Thanks Qzxor this shit vacation is ending today. The novelty of the trashy pool wore off 2 days in and I'm not allowed in the bar. The tiny box they called a room that, we had to cram into, just had a poster and a couple of beds. Only one bedsheet to spare. Shower had brown water and sink just dumped its water back out the ceiling, somehow.<br><br>PS: The receptionist isn't paying attention to us when we try to check out. Apparently, we're staying another day."
|
||||
|
||||
/obj/item/weapon/paper/hotel_scrap_5
|
||||
/obj/item/paper/hotel_scrap_5
|
||||
name = "Journal Entry #5"
|
||||
info = "<h3>Day 185:</h3>I feel like the restaurant's chef is just making random dishes to mess with me. I request something from the menu, and he throws out something nobody asked for on the counter. The bartender isn't much better. At least both of them can make some nice food and drinks. I would complain to the management... but they never seem to care."
|
||||
|
||||
/obj/item/weapon/paper/crumpled/hotel_scrap_6
|
||||
/obj/item/paper/crumpled/hotel_scrap_6
|
||||
name = "Journal Entry #6"
|
||||
info = "<h3>Day 386:</h3><span style='font-family: wingdings; color: red'>AMBGAT MEZLBNU</span>. Something wrong. Can't stop hugging plushies."
|
||||
|
||||
/obj/item/weapon/paper/crumpled/hotel_scrap_7
|
||||
/obj/item/paper/crumpled/hotel_scrap_7
|
||||
name = "Journal Entry #8"
|
||||
info = "<span style='font-family: wingdings; color: red'>ASGATDHU NAMSPA KER OKS O OKDOFLI OSDSFKO OASKDAFO AOSDKF OINAIS ISJDDEF OSKFEREAODIK OSI ODIFOSA OEKRRO ASODFKAO PSSDOF SDFK OSDKF OSDKFSASPODFIOSASD UHGU DFYG FPO ASDFOS DFOASSD FAPSO FSPDFOIER OPWASDSA PS DODIOF OSDI</span> pizza <span style='font-family: wingdings; color: red'>OKSDFO AL OKEWORK CVBUASO SDFO AOE RAOWEIK SODDFI</span>"
|
||||
|
||||
/obj/item/weapon/paper/hotel_scrap_8
|
||||
/obj/item/paper/hotel_scrap_8
|
||||
name = "Mysterious Note"
|
||||
icon_state = "paper_talisman"
|
||||
info = "<div style='text-align: center; color: red; font: 24pt comic sans ms'>There is only one way to leave.</div>"
|
||||
|
||||
/obj/item/weapon/paper/pamphlet/hotel
|
||||
/obj/item/paper/pamphlet/hotel
|
||||
name = "space hotel pamphlet"
|
||||
info = "<h3>Welcome to Deep Space Hotel 419!</h3>Thank you for choosing our hotel. Simply hand your credit or debit card to the concierge and get your room key! To check out, hand your credit card back.<small><h4>Conditions:</h4><ul><li>The hotel is not responsible for any losses due to time or space anomalies.<li>The hotel is not responsible for events that occur outside of the hotel station, including, but not limited to, events that occur inside of dimensional pockets.<li>The hotel is not responsible for overcharging your account.<li>The hotel is not responsible for missing persons.<li>The hotel is not responsible for mind-altering effects due to drugs, magic, demons, or space worms.</ul></small>"
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
var/doorClose = 'sound/machines/airlock_close.ogg'
|
||||
var/doorDeni = 'sound/machines/DeniedBeep.ogg'
|
||||
var/id // the room number, eg 101
|
||||
var/obj/item/weapon/card/hotel_card/card// room's key card
|
||||
var/obj/item/card/hotel_card/card// room's key card
|
||||
var/mob/living/occupant = null // the current room occupant
|
||||
var/datum/money_account/account // Account we're pulling from
|
||||
var/roomtimer // timer PS handle for updating room
|
||||
@@ -124,7 +124,7 @@
|
||||
to_chat(user, "This room is currently [occupant ? "" : "un"]occupied.")
|
||||
|
||||
/obj/machinery/door/unpowered/hotel_door/allowed(mob/living/carbon/user)
|
||||
for(var/obj/item/weapon/card/hotel_card/C in user.get_all_slots())
|
||||
for(var/obj/item/card/hotel_card/C in user.get_all_slots())
|
||||
if(C == card && occupant)
|
||||
atom_say("Welcome, [occupant.real_name]!")
|
||||
return 1
|
||||
@@ -160,13 +160,13 @@
|
||||
H.controller.deploy_sec(user)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/hotel_card
|
||||
/obj/item/card/hotel_card
|
||||
name = "Key Card"
|
||||
icon_state = "guest"
|
||||
color = "#0CF"
|
||||
var/id
|
||||
|
||||
/obj/item/weapon/card/hotel_card/New(loc, ID)
|
||||
/obj/item/card/hotel_card/New(loc, ID)
|
||||
..()
|
||||
if(ID)
|
||||
id = ID
|
||||
@@ -174,7 +174,7 @@
|
||||
name = "Key Card - [id]"
|
||||
desc = "A key card to room [id]. Use it to open the door."
|
||||
|
||||
/obj/item/weapon/card/hotel_card/Destroy()
|
||||
/obj/item/card/hotel_card/Destroy()
|
||||
var/mob/user = get(loc, /mob)
|
||||
if(user)
|
||||
to_chat(user, "\The [src] suddenly disappears in a flash!")
|
||||
@@ -194,7 +194,7 @@
|
||||
var/list/vacant_rooms[0] // list of vacant room doors
|
||||
var/list/guests[0] // assoc list of [guest mob]=room id
|
||||
|
||||
var/obj/item/device/radio/radio // for shouting at deadbeats
|
||||
var/obj/item/radio/radio // for shouting at deadbeats
|
||||
|
||||
/obj/effect/hotel_controller/New()
|
||||
..()
|
||||
@@ -224,7 +224,7 @@
|
||||
return ..()
|
||||
|
||||
// to check a person into a room; no financial stuff; returns the keycard
|
||||
/obj/effect/hotel_controller/proc/checkin(roomid, mob/living/carbon/occupant, obj/item/weapon/card/id/id)
|
||||
/obj/effect/hotel_controller/proc/checkin(roomid, mob/living/carbon/occupant, obj/item/card/id/id)
|
||||
if(!istype(occupant))
|
||||
return null
|
||||
var/obj/machinery/door/unpowered/hotel_door/D = room_doors["[roomid]"]
|
||||
@@ -242,7 +242,7 @@
|
||||
vacant_rooms -= D
|
||||
guests[occupant] = roomid
|
||||
|
||||
var/obj/item/weapon/card/hotel_card/C = new(ID = roomid)
|
||||
var/obj/item/card/hotel_card/C = new(ID = roomid)
|
||||
D.card = C
|
||||
return C
|
||||
|
||||
|
||||
@@ -17,6 +17,26 @@
|
||||
/mob/living/carbon/human/interactive/away/hotel/guard/doSetup()
|
||||
..("Guard")
|
||||
|
||||
// anti-pinata cheese
|
||||
var/obj/item/implant/dust/D = new /obj/item/implant/dust(src)
|
||||
D.implant(src)
|
||||
|
||||
for(var/obj/item/I in get_all_slots())
|
||||
I.flags |= NODROP
|
||||
|
||||
// FIXME(crazylemon) a hack to prevent guards from running around with an
|
||||
// extra security jumpsuit like a goof
|
||||
for(var/obj/item/clothing/under/U in get_all_slots())
|
||||
if(w_uniform != U)
|
||||
qdel(U)
|
||||
|
||||
/mob/living/carbon/human/interactive/away/hotel/guard/KnockOut()
|
||||
// you'll never take me alive (this triggers the implant)
|
||||
emote("deathgasp")
|
||||
if(stat != DEAD)
|
||||
// mission failed. we'll get em next time
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/interactive/away/hotel/chef
|
||||
default_job = /datum/job/chef
|
||||
away_area = /area/awaymission/spacehotel/kitchen
|
||||
@@ -31,17 +51,17 @@
|
||||
away_area = /area/awaymission/spacehotel/reception
|
||||
var/list/known_guests[0]
|
||||
var/obj/effect/hotel_controller/hotel
|
||||
var/obj/item/weapon/card/id/last_seen_id = null
|
||||
var/obj/item/card/id/last_seen_id = null
|
||||
|
||||
/mob/living/carbon/human/interactive/away/hotel/concierge/random()
|
||||
..()
|
||||
equip_or_collect(new /obj/item/weapon/clipboard(src), slot_l_hand)
|
||||
equip_or_collect(new /obj/item/clipboard(src), slot_l_hand)
|
||||
|
||||
/mob/living/carbon/human/interactive/away/hotel/concierge/doSetup()
|
||||
..("Concierge")
|
||||
|
||||
/mob/living/carbon/human/interactive/away/hotel/concierge/setup_job()
|
||||
favoured_types = list(/obj/item/weapon/paper, /obj/item/weapon/clipboard)
|
||||
favoured_types = list(/obj/item/paper, /obj/item/clipboard)
|
||||
functions += list("stamping", "concierge")
|
||||
restrictedJob = 1
|
||||
|
||||
@@ -69,9 +89,9 @@
|
||||
say("Welcome to [hotel], [nouns_generic]! Please check in by [ing_verb(verbs_move)] and [ing_verb(verbs_use)] your [adjective_objects] ID onto the table.")
|
||||
return
|
||||
|
||||
var/obj/item/weapon/card/id
|
||||
var/obj/item/card/id
|
||||
var/id_seen = 0
|
||||
for(var/obj/item/weapon/card/id/I in get_area(src))
|
||||
for(var/obj/item/card/id/I in get_area(src))
|
||||
id_seen = 1
|
||||
if(I != last_seen_id)
|
||||
id = I
|
||||
@@ -111,7 +131,7 @@
|
||||
// Check in
|
||||
say("$100 per 10 minutes. The cost will be automatically [past_verb(verbs_touch)] while you're checked in.")
|
||||
|
||||
var/obj/item/weapon/card/hotel_card/K = hotel.checkin(D.id, id_owner, id)
|
||||
var/obj/item/card/hotel_card/K = hotel.checkin(D.id, id_owner, id)
|
||||
if(K)
|
||||
K.forceMove(idloc)
|
||||
else
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
name = "Safecode hint spawner"
|
||||
|
||||
/obj/effect/landmark/sc_bible_spawner/New()
|
||||
var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible/booze(src.loc)
|
||||
var/obj/item/storage/bible/B = new /obj/item/storage/bible/booze(src.loc)
|
||||
B.name = "The Holy book of the Geometer"
|
||||
B.deity_name = "Narsie"
|
||||
B.icon_state = "melted"
|
||||
B.item_state = "melted"
|
||||
new /obj/item/weapon/paper/sc_safehint_paper_bible(B)
|
||||
new /obj/item/weapon/pen(B)
|
||||
new /obj/item/paper/sc_safehint_paper_bible(B)
|
||||
new /obj/item/pen(B)
|
||||
qdel(src)
|
||||
|
||||
/*
|
||||
* Guns - I'm making these specifically so that I dont spawn a pile of fully loaded weapons on the map.
|
||||
*/
|
||||
//Captain's retro laser - Fires practice laser shots instead.
|
||||
obj/item/weapon/gun/energy/laser/retro/sc_retro
|
||||
obj/item/gun/energy/laser/retro/sc_retro
|
||||
desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser/practice)
|
||||
clumsy_check = 0 //No sense in having a harmless gun blow up in the clowns face
|
||||
|
||||
//Syndicate sub-machine guns.
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r
|
||||
/obj/item/gun/projectile/automatic/c20r/sc_c20r
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r/New()
|
||||
/obj/item/gun/projectile/automatic/c20r/sc_c20r/New()
|
||||
..()
|
||||
for(var/ammo in magazine.stored_ammo)
|
||||
if(prob(95)) //95% chance
|
||||
magazine.stored_ammo -= ammo
|
||||
|
||||
//Barman's shotgun
|
||||
/obj/item/weapon/gun/projectile/shotgun/sc_pump
|
||||
/obj/item/gun/projectile/shotgun/sc_pump
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/sc_pump/New()
|
||||
/obj/item/gun/projectile/shotgun/sc_pump/New()
|
||||
..()
|
||||
for(var/ammo in magazine.stored_ammo)
|
||||
if(prob(95)) //95% chance
|
||||
magazine.stored_ammo -= ammo
|
||||
|
||||
//Lasers
|
||||
/obj/item/weapon/gun/energy/laser/practice/sc_laser
|
||||
/obj/item/gun/energy/laser/practice/sc_laser
|
||||
name = "Old laser"
|
||||
desc = "A once potent weapon, years of dust have collected in the chamber and lens of this weapon, weakening the beam significantly."
|
||||
clumsy_check = 0
|
||||
@@ -101,30 +101,30 @@ var/sc_safecode4 = "[rand(0,9)]"
|
||||
var/sc_safecode5 = "[rand(0,9)]"
|
||||
|
||||
//Pieces of paper actually containing the hints
|
||||
/obj/item/weapon/paper/sc_safehint_paper_prison
|
||||
/obj/item/paper/sc_safehint_paper_prison
|
||||
name = "smudged paper"
|
||||
|
||||
/obj/item/weapon/paper/sc_safehint_paper_prison/New()
|
||||
/obj/item/paper/sc_safehint_paper_prison/New()
|
||||
info = "<i>The ink is smudged, you can only make out a couple numbers:</i> '[sc_safecode1]**[sc_safecode4]*'"
|
||||
|
||||
/obj/item/weapon/paper/sc_safehint_paper_hydro
|
||||
/obj/item/paper/sc_safehint_paper_hydro
|
||||
name = "shredded paper"
|
||||
/obj/item/weapon/paper/sc_safehint_paper_hydro/New()
|
||||
/obj/item/paper/sc_safehint_paper_hydro/New()
|
||||
info = "<i>Although the paper is shredded, you can clearly see the number:</i> '[sc_safecode2]'"
|
||||
|
||||
/obj/item/weapon/paper/sc_safehint_paper_caf
|
||||
/obj/item/paper/sc_safehint_paper_caf
|
||||
name = "blood-soaked paper"
|
||||
//This does not have to be in New() because it is a constant. There are no variables in it i.e. [sc_safcode]
|
||||
info = "<font color=red><i>This paper is soaked in blood, it is impossible to read any text.</i></font>"
|
||||
|
||||
/obj/item/weapon/paper/sc_safehint_paper_bible
|
||||
/obj/item/paper/sc_safehint_paper_bible
|
||||
name = "hidden paper"
|
||||
/obj/item/weapon/paper/sc_safehint_paper_bible/New()
|
||||
/obj/item/paper/sc_safehint_paper_bible/New()
|
||||
info = {"<i>It would appear that the pen hidden with the paper had leaked ink over the paper.
|
||||
However you can make out the last three digits:</i>'[sc_safecode3][sc_safecode4][sc_safecode5]'
|
||||
"}
|
||||
|
||||
/obj/item/weapon/paper/sc_safehint_paper_shuttle
|
||||
/obj/item/paper/sc_safehint_paper_shuttle
|
||||
info = {"<b>Target:</b> Research-station Epsilon<br>
|
||||
<b>Objective:</b> Prototype weaponry. The captain likely keeps them locked in her safe.<br>
|
||||
<br>
|
||||
@@ -140,19 +140,19 @@ var/sc_safecode5 = "[rand(0,9)]"
|
||||
/*
|
||||
* Captain's safe
|
||||
*/
|
||||
/obj/item/weapon/storage/secure/safe/sc_ssafe
|
||||
/obj/item/storage/secure/safe/sc_ssafe
|
||||
name = "Captain's secure safe"
|
||||
|
||||
/obj/item/weapon/storage/secure/safe/sc_ssafe/New()
|
||||
/obj/item/storage/secure/safe/sc_ssafe/New()
|
||||
..()
|
||||
l_code = "[sc_safecode1][sc_safecode2][sc_safecode3][sc_safecode4][sc_safecode5]"
|
||||
l_set = 1
|
||||
new /obj/item/weapon/gun/energy/mindflayer(src)
|
||||
new /obj/item/device/soulstone(src)
|
||||
new /obj/item/gun/energy/mindflayer(src)
|
||||
new /obj/item/soulstone(src)
|
||||
new /obj/item/clothing/head/helmet/space/cult(src)
|
||||
new /obj/item/clothing/suit/space/cult(src)
|
||||
//new /obj/item/weapon/teleportation_scroll(src)
|
||||
new /obj/item/weapon/ore/diamond(src)
|
||||
//new /obj/item/teleportation_scroll(src)
|
||||
new /obj/item/ore/diamond(src)
|
||||
|
||||
/*
|
||||
* Modified Nar-Sie
|
||||
|
||||
@@ -215,4 +215,77 @@
|
||||
to_chat(C, "<span class='notice'>You have regenerated.</span>")
|
||||
C.visible_message("<span class='warning'>[usr] appears to wake from the dead, having healed all wounds.</span>")
|
||||
C.update_canmove()
|
||||
return 1
|
||||
return 1
|
||||
|
||||
/obj/item/wildwest_communicator
|
||||
name = "Syndicate Comms Device"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "gangtool-red"
|
||||
item_state = "walkietalkie"
|
||||
desc = "Use to communicate with the syndicate base commander."
|
||||
var/used = FALSE
|
||||
|
||||
/obj/item/wildwest_communicator/attack_self(mob/living/user)
|
||||
|
||||
if(!is_away_level(user.z))
|
||||
to_chat(user, "<span class='warning'>The communicator emits a faint beep. Perhaps it is out of range?</span>")
|
||||
return
|
||||
|
||||
if(used)
|
||||
to_chat(user, "<span class='warning'>The communicator buzzes, and then dies. Apparently nobody is responding.</span>")
|
||||
return
|
||||
|
||||
var/initial_question = "<span class='warning'>The communicator buzzes, and you hear a voice on the line, almost lost in the static. 'Hello? Who is this?'.</span>"
|
||||
to_chat(user, initial_question)
|
||||
|
||||
var/const/option_explorer = "(TRUTH) Explorers."
|
||||
var/const/option_bluff = "(BLUFF) Weapons delivery."
|
||||
var/const/option_threat = "(THREAT) NT, here to kick your ass!"
|
||||
var/const/option_syndicate = "(SYNDI) Agent reporting in..."
|
||||
var/list/response_choices = list(option_explorer, option_bluff, option_threat)
|
||||
|
||||
if(istype(user, /mob/living) && user.mind)
|
||||
if(user.mind.special_role == "Traitor")
|
||||
response_choices |= option_syndicate
|
||||
|
||||
var/selected_choice = input(user, "How do you respond on the comms device?", "Response to Syndicate") as null|anything in response_choices
|
||||
|
||||
if(!selected_choice)
|
||||
return
|
||||
switch(selected_choice)
|
||||
if(option_explorer)
|
||||
to_chat(user, "<span class='warning'>The communicator buzzes, and you hear the voice again: 'Hah! You sure picked the wrong asteroid to explore. Get em, boys!'</span>")
|
||||
if(option_bluff)
|
||||
to_chat(user, "<span class='warning'>The communicator buzzes, and you hear the voice again: 'Really? I think not. Get them!'</span>")
|
||||
if(option_threat)
|
||||
to_chat(user, "<span class='warning'>The communicator buzzes, and you hear the voice again: 'Oh really now?' You hear a clicking sound. 'Team, get back here. We have trouble'. Then the line goes dead.</span>")
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(L.name == "wildwest_syndipod")
|
||||
var/obj/spacepod/syndi/P = new /obj/spacepod/syndi(get_turf(L))
|
||||
P.name = "Syndi Recon Pod"
|
||||
if(L.name == "wildwest_syndibackup")
|
||||
var/mob/living/simple_animal/hostile/syndicate/ranged/space/R = new /mob/living/simple_animal/hostile/syndicate/ranged/space(get_turf(L))
|
||||
R.name = "Syndi Recon Team"
|
||||
if(option_syndicate)
|
||||
to_chat(user, "<span class='warning'>The communicator buzzes, and you hear the voice again: 'Well, I'll be damned. An agent out here? You must be off-mission! Leave my troops alone, and they will do the same for you. Our Commander will handle you himself.'</span>")
|
||||
stand_down()
|
||||
used = TRUE
|
||||
|
||||
/obj/item/wildwest_communicator/proc/stand_down()
|
||||
for(var/mob/living/simple_animal/hostile/syndicate/ranged/wildwest/W in living_mob_list)
|
||||
W.on_alert = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/wildwest
|
||||
var/on_alert = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/wildwest/ListTargets()
|
||||
if(on_alert)
|
||||
return ..()
|
||||
return list()
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/wildwest/death(gibbed)
|
||||
if(!on_alert)
|
||||
say("How could you betray the Syndicate?")
|
||||
for(var/mob/living/simple_animal/hostile/syndicate/ranged/wildwest/W in living_mob_list)
|
||||
W.on_alert = TRUE
|
||||
..(gibbed)
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/paper/pamphlet
|
||||
/obj/item/paper/pamphlet
|
||||
name = "pamphlet"
|
||||
icon_state = "pamphlet"
|
||||
info = "<b>Welcome to the Nanotrasen Gateway project...</b><br>\
|
||||
@@ -34,5 +34,5 @@
|
||||
environs."
|
||||
|
||||
//we don't want the silly text overlay!
|
||||
/obj/item/weapon/paper/pamphlet/update_icon()
|
||||
/obj/item/paper/pamphlet/update_icon()
|
||||
return
|
||||
@@ -9,8 +9,8 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
|
||||
smoothTurfs = turfs
|
||||
|
||||
log_debug("Setting up atmos")
|
||||
if(air_master)
|
||||
air_master.setup_allturfs(turfs)
|
||||
if(SSair)
|
||||
SSair.setup_allturfs(turfs)
|
||||
log_debug("\tTook [stop_watch(subtimer)]s")
|
||||
|
||||
subtimer = start_watch()
|
||||
@@ -57,7 +57,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
|
||||
maploader.load_map(file, z_offset = zlev)
|
||||
late_setup_level(block(locate(1, 1, zlev), locate(world.maxx, world.maxy, zlev)))
|
||||
space_manager.remove_dirt(zlev)
|
||||
log_to_dd(" Away mission loaded: [map]")
|
||||
log_world(" Away mission loaded: [map]")
|
||||
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(L.name != "awaystart")
|
||||
@@ -88,7 +88,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
|
||||
maploader.load_map(file, z_offset = zlev)
|
||||
late_setup_level(block(locate(1, 1, zlev), locate(world.maxx, world.maxy, zlev)))
|
||||
space_manager.remove_dirt(zlev)
|
||||
log_to_dd(" Away mission loaded: [map]")
|
||||
log_world(" Away mission loaded: [map]")
|
||||
|
||||
//map_transition_config.Add(AWAY_MISSION_LIST)
|
||||
|
||||
@@ -168,7 +168,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
|
||||
if(!valid)
|
||||
continue
|
||||
|
||||
log_to_dd(" Ruin \"[ruin.name]\" loaded in [stop_watch(watch)]s at ([T.x], [T.y], [T.z]).")
|
||||
log_world(" Ruin \"[ruin.name]\" loaded in [stop_watch(watch)]s at ([T.x], [T.y], [T.z]).")
|
||||
|
||||
var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T)
|
||||
R.Load(ruins,ruin)
|
||||
@@ -179,13 +179,13 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
|
||||
|
||||
|
||||
if(initialbudget == budget) //Kill me
|
||||
log_to_dd(" No ruins loaded.")
|
||||
log_world(" No ruins loaded.")
|
||||
|
||||
|
||||
/obj/effect/ruin_loader
|
||||
name = "random ruin"
|
||||
desc = "If you got lucky enough to see this..."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "syndballoon"
|
||||
invisibility = 0
|
||||
|
||||
|
||||
@@ -20,6 +20,13 @@
|
||||
|
||||
var/adminhelped = 0
|
||||
|
||||
var/gc_destroyed //Time when this object was destroyed.
|
||||
|
||||
#ifdef TESTING
|
||||
var/running_find_references
|
||||
var/last_find_references = 0
|
||||
#endif
|
||||
|
||||
///////////////
|
||||
//SOUND STUFF//
|
||||
///////////////
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
//search the href for script injection
|
||||
if( findtext(href,"<script",1,0) )
|
||||
log_to_dd("Attempted use of scripts within a topic call, by [src]")
|
||||
log_world("Attempted use of scripts within a topic call, by [src]")
|
||||
log_runtime(EXCEPTION("Attempted use of scripts within a topic call, by [src]"), src)
|
||||
message_admins("Attempted use of scripts within a topic call, by [src]")
|
||||
return
|
||||
@@ -94,8 +94,8 @@
|
||||
|
||||
|
||||
//Logs all hrefs
|
||||
if(config && config.log_hrefs && href_logfile)
|
||||
to_chat(href_logfile, "<small>[time2text(world.timeofday,"hh:mm")] [src] (usr:[usr])</small> || [hsrc ? "[hsrc] " : ""][href]<br>")
|
||||
if(config && config.log_hrefs)
|
||||
log_href("[src] (usr:[usr]\[[COORD(usr)]\]) : [hsrc ? "[hsrc] " : ""][href]")
|
||||
|
||||
if(href_list["karmashop"])
|
||||
if(config.disable_karma)
|
||||
@@ -418,6 +418,8 @@
|
||||
preferences_datums[ckey] = prefs
|
||||
prefs.last_ip = address //these are gonna be used for banning
|
||||
prefs.last_id = computer_id //these are gonna be used for banning
|
||||
if(world.byond_version >= 511 && byond_version >= 511 && prefs.clientfps)
|
||||
fps = prefs.clientfps
|
||||
|
||||
spawn() // Goonchat does some non-instant checks in start()
|
||||
chatOutput.start()
|
||||
@@ -476,6 +478,8 @@
|
||||
if(!tooltips)
|
||||
tooltips = new /datum/tooltip(src)
|
||||
|
||||
Master.UpdateTickRate()
|
||||
|
||||
//////////////
|
||||
//DISCONNECT//
|
||||
//////////////
|
||||
@@ -485,6 +489,7 @@
|
||||
admins -= src
|
||||
directory -= ckey
|
||||
clients -= src
|
||||
Master.UpdateTickRate()
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -554,7 +559,7 @@
|
||||
|
||||
//Log all the alts
|
||||
if(related_accounts_cid.len)
|
||||
log_access("Alts: [key_name(src)]:[jointext(related_accounts_cid, " - ")]")
|
||||
log_admin("[key_name(src)] alts:[jointext(related_accounts_cid, " - ")]")
|
||||
|
||||
|
||||
var/watchreason = check_watchlist(ckey)
|
||||
@@ -663,7 +668,7 @@
|
||||
cidcheck_failedckeys[ckey] = TRUE
|
||||
note_randomizer_user()
|
||||
|
||||
log_access("Failed Login: [key] [computer_id] [address] - CID randomizer confirmed (oldcid: [oldcid])")
|
||||
log_adminwarn("Failed Login: [key] [computer_id] [address] - CID randomizer confirmed (oldcid: [oldcid])")
|
||||
|
||||
del(src)
|
||||
return TRUE
|
||||
@@ -705,7 +710,7 @@
|
||||
/client/proc/cid_check_reconnect()
|
||||
var/token = md5("[rand(0,9999)][world.time][rand(0,9999)][ckey][rand(0,9999)][address][rand(0,9999)][computer_id][rand(0,9999)]")
|
||||
. = token
|
||||
log_access("Failed Login: [key] [computer_id] [address] - CID randomizer check")
|
||||
log_adminwarn("Failed Login: [key] [computer_id] [address] - CID randomizer check")
|
||||
var/url = winget(src, null, "url")
|
||||
//special javascript to make them reconnect under a new window.
|
||||
src << browse("<a id='link' href='byond://[url]?token=[token]'>\
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
/datum/gear/lipstick
|
||||
display_name = "lipstick, black"
|
||||
path = /obj/item/weapon/lipstick/black
|
||||
path = /obj/item/lipstick/black
|
||||
sort_category = "Cosmetics"
|
||||
|
||||
/datum/gear/lipstick/jade
|
||||
display_name = "lipstick, jade"
|
||||
path = /obj/item/weapon/lipstick/jade
|
||||
path = /obj/item/lipstick/jade
|
||||
|
||||
/datum/gear/lipstick/purple
|
||||
display_name = "lipstick, purple"
|
||||
path = /obj/item/weapon/lipstick/purple
|
||||
path = /obj/item/lipstick/purple
|
||||
|
||||
/datum/gear/lipstick/red
|
||||
display_name = "lipstick, red"
|
||||
path = /obj/item/weapon/lipstick
|
||||
path = /obj/item/lipstick
|
||||
|
||||
/datum/gear/monocle
|
||||
display_name = "monocle"
|
||||
|
||||
@@ -25,14 +25,6 @@
|
||||
path = /obj/item/clothing/suit/furcoat
|
||||
cost = 2
|
||||
|
||||
/datum/gear/donor/lord_admiral
|
||||
display_name = "Lord Admiral Coat"
|
||||
path = /obj/item/clothing/suit/lordadmiral
|
||||
|
||||
/datum/gear/donor/lord_admiral_hat
|
||||
display_name = "Lord Admiral Hat"
|
||||
path = /obj/item/clothing/head/lordadmiralhat
|
||||
|
||||
/datum/gear/donor/kamina
|
||||
display_name = "Spiky Orange-tinted Shades"
|
||||
path = /obj/item/clothing/glasses/fluff/kamina
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
/datum/gear/dice
|
||||
display_name = "a d20"
|
||||
path = /obj/item/weapon/dice/d20
|
||||
path = /obj/item/dice/d20
|
||||
|
||||
/datum/gear/uplift
|
||||
display_name = "a pack of Uplifts"
|
||||
path = /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift
|
||||
path = /obj/item/storage/fancy/cigarettes/cigpack_uplift
|
||||
|
||||
/datum/gear/robust
|
||||
display_name = "a pack of Robusts"
|
||||
path = /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust
|
||||
path = /obj/item/storage/fancy/cigarettes/cigpack_robust
|
||||
|
||||
/datum/gear/carp
|
||||
display_name = "a pack of Carps"
|
||||
path = /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp
|
||||
path = /obj/item/storage/fancy/cigarettes/cigpack_carp
|
||||
|
||||
/datum/gear/midori
|
||||
display_name = "a pack of Midoris"
|
||||
path = /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori
|
||||
path = /obj/item/storage/fancy/cigarettes/cigpack_midori
|
||||
|
||||
/datum/gear/lighter
|
||||
display_name = "a cheap lighter"
|
||||
path = /obj/item/weapon/lighter
|
||||
path = /obj/item/lighter
|
||||
|
||||
/datum/gear/rock
|
||||
display_name = "a pet rock"
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
/datum/gear/matches
|
||||
display_name = "a box of matches"
|
||||
path = /obj/item/weapon/storage/box/matches
|
||||
path = /obj/item/storage/box/matches
|
||||
|
||||
/datum/gear/cards
|
||||
display_name = "a deck of cards"
|
||||
@@ -77,5 +77,56 @@
|
||||
|
||||
/datum/gear/mob_hunt_game
|
||||
display_name = "Nano-Mob Hunter GO! Cartridge"
|
||||
path = /obj/item/weapon/cartridge/mob_hunt_game
|
||||
path = /obj/item/cartridge/mob_hunt_game
|
||||
cost = 2
|
||||
|
||||
//////////////////////
|
||||
// Mugs //
|
||||
//////////////////////
|
||||
|
||||
/datum/gear/mug
|
||||
display_name = "random coffee mug"
|
||||
description = "A randomly colored coffee mug. You'll need to supply your own beverage though."
|
||||
path = /obj/item/reagent_containers/food/drinks/mug
|
||||
sort_category = "Mugs"
|
||||
|
||||
/datum/gear/novelty_mug
|
||||
display_name = "novelty coffee mug"
|
||||
description = "A random novelty coffee mug. You'll need to supply your own beverage though."
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/novelty
|
||||
cost = 2
|
||||
sort_category = "Mugs"
|
||||
|
||||
/datum/gear/mug/department
|
||||
subtype_path = /datum/gear/mug/department
|
||||
sort_category = "Mugs"
|
||||
subtype_cost_overlap = FALSE
|
||||
|
||||
/datum/gear/mug/department/eng
|
||||
display_name = "engineer coffee mug"
|
||||
description = "An engineer's coffee mug, emblazoned in the colors of the Engineering department."
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist")
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/eng
|
||||
|
||||
/datum/gear/mug/department/med
|
||||
display_name = "doctor coffee mug"
|
||||
description = "A doctor's coffee mug, emblazoned in the colors of the Medical department."
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Coroner")
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/med
|
||||
|
||||
/datum/gear/mug/department/sci
|
||||
display_name = "scientist coffee mug"
|
||||
description = "A scientist's coffee mug, emblazoned in the colors of the Science department."
|
||||
allowed_roles = list("Research Director", "Scientist", "Roboticist")
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/sci
|
||||
|
||||
/datum/gear/mug/department/sec
|
||||
display_name = "officer coffee mug"
|
||||
description = "An officer's coffee mug, emblazoned in the colors of the Security department."
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot", "Brig Physician", "Internal Affairs Agent")
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/sec
|
||||
|
||||
/datum/gear/mug/department/serv
|
||||
display_name = "crewmember coffee mug"
|
||||
description = "A crewmember's coffee mug, emblazoned in the colors of the Service department."
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/serv
|
||||
|
||||
@@ -152,7 +152,3 @@
|
||||
/datum/gear/hat/flowerpin
|
||||
display_name = "hair flower"
|
||||
path = /obj/item/clothing/head/hairflower
|
||||
|
||||
/datum/gear/hat/flowerpinpurp
|
||||
display_name = "hair flower, purple"
|
||||
path = /obj/item/clothing/head/hairflower/purple
|
||||
@@ -26,19 +26,16 @@
|
||||
display_name = "hi-tech veil"
|
||||
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races."
|
||||
path = /obj/item/clothing/glasses/tajblind/sci
|
||||
allowed_roles = list("Scientist", "Research Director", "Robotocist")
|
||||
|
||||
/datum/gear/racial/tajeng
|
||||
display_name = "industrial veil"
|
||||
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races."
|
||||
path = /obj/item/clothing/glasses/tajblind/eng
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist")
|
||||
|
||||
/datum/gear/racial/tajcargo
|
||||
display_name = "khaki veil"
|
||||
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. It is light and comfy!"
|
||||
path = /obj/item/clothing/glasses/tajblind/cargo
|
||||
allowed_roles = list("Quartermaster","Cargo Technician", "Miner")
|
||||
|
||||
/datum/gear/racial/footwraps
|
||||
display_name = "cloth footwraps"
|
||||
|
||||
@@ -17,12 +17,12 @@
|
||||
|
||||
/datum/gear/shoes/fancysandals
|
||||
display_name = "sandals, fancy"
|
||||
cost = 5
|
||||
cost = 2
|
||||
path = /obj/item/clothing/shoes/sandal/fancy
|
||||
|
||||
/datum/gear/shoes/dressshoes
|
||||
display_name = "dress shoes"
|
||||
cost = 5
|
||||
cost = 2
|
||||
path = /obj/item/clothing/shoes/centcom
|
||||
|
||||
/datum/gear/shoes/cowboyboots
|
||||
|
||||
@@ -68,6 +68,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
#define TAB_GEAR 2
|
||||
|
||||
/datum/preferences
|
||||
var/client/parent
|
||||
//doohickeys for savefiles
|
||||
// var/path
|
||||
var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used
|
||||
@@ -94,6 +95,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
var/UI_style_color = "#ffffff"
|
||||
var/UI_style_alpha = 255
|
||||
var/windowflashing = TRUE
|
||||
var/clientfps = 0
|
||||
|
||||
//ghostly preferences
|
||||
var/ghost_anonsay = 0
|
||||
@@ -203,6 +205,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
var/gear_tab = "General"
|
||||
|
||||
/datum/preferences/New(client/C)
|
||||
parent = C
|
||||
b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
|
||||
|
||||
max_gear_slots = config.max_loadout_points
|
||||
@@ -444,11 +447,11 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
dat += "<b>Donator Publicity:</b> <a href='?_src_=prefs;preference=donor_public'><b>[(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]</b></a><br>"
|
||||
|
||||
dat += "<b>Randomized character slot:</b> <a href='?_src_=prefs;preference=randomslot'><b>[randomslot ? "Yes" : "No"]</b></a><br>"
|
||||
dat += "<b>Ghost ears:</b> <a href='?_src_=prefs;preference=ghost_ears'><b>[(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]</b></a><br>"
|
||||
dat += "<b>Ghost sight:</b> <a href='?_src_=prefs;preference=ghost_sight'><b>[(toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]</b></a><br>"
|
||||
dat += "<b>Ghost radio:</b> <a href='?_src_=prefs;preference=ghost_radio'><b>[(toggles & CHAT_GHOSTRADIO) ? "Nearest Speakers" : "All Chatter"]</b></a><br>"
|
||||
dat += "<b>Ghost ears:</b> <a href='?_src_=prefs;preference=ghost_ears'><b>[(toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]</b></a><br>"
|
||||
dat += "<b>Ghost sight:</b> <a href='?_src_=prefs;preference=ghost_sight'><b>[(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]</b></a><br>"
|
||||
dat += "<b>Ghost radio:</b> <a href='?_src_=prefs;preference=ghost_radio'><b>[(toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]</b></a><br>"
|
||||
dat += "<b>Deadchat anonymity:</b> <a href='?_src_=prefs;preference=ghost_anonsay'><b>[ghost_anonsay ? "Anonymous" : "Not Anonymous"]</b></a><br>"
|
||||
|
||||
dat += "<b>FPS:</b> <a href='?_src_=prefs;preference=clientfps;task=input'>[clientfps]</a><br>"
|
||||
dat += "</td><td width='300px' height='300px' valign='top'>"
|
||||
dat += "<h2>Special Role Settings</h2>"
|
||||
if(jobban_isbanned(user, "Syndicate"))
|
||||
@@ -1887,6 +1890,18 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
if("Mechanical")
|
||||
organ_data[organ] = "mechanical"
|
||||
|
||||
if("clientfps")
|
||||
var/version_message
|
||||
if(user.client && user.client.byond_version < 511)
|
||||
version_message = "\nYou need to be using byond version 511 or later to take advantage of this feature, your version of [user.client.byond_version] is too low"
|
||||
if(world.byond_version < 511)
|
||||
version_message += "\nThis server does not currently support client side fps. You can set now for when it does."
|
||||
var/desiredfps = input(user, "Choose your desired fps.[version_message]\n(0 = synced with server tick rate (currently:[world.fps]))", "Character Preference", clientfps) as null|num
|
||||
if(!isnull(desiredfps))
|
||||
clientfps = desiredfps
|
||||
if(world.byond_version >= 511 && user.client && user.client.byond_version >= 511)
|
||||
parent.fps = clientfps
|
||||
|
||||
/*
|
||||
if("skin_style")
|
||||
var/skin_style_name = input(user, "Select a new skin style") as null|anything in list("default1", "default2", "default3")
|
||||
@@ -1932,7 +1947,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
|
||||
if("hear_adminhelps")
|
||||
sound ^= SOUND_ADMINHELP
|
||||
|
||||
if("ui")
|
||||
switch(UI_style)
|
||||
if("Midnight")
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
lastchangelog,
|
||||
windowflashing,
|
||||
ghost_anonsay,
|
||||
exp
|
||||
exp,
|
||||
clientfps
|
||||
FROM [format_table_name("player")]
|
||||
WHERE ckey='[C.ckey]'"}
|
||||
)
|
||||
@@ -46,6 +47,7 @@
|
||||
windowflashing = text2num(query.item[14])
|
||||
ghost_anonsay = text2num(query.item[15])
|
||||
exp = query.item[16]
|
||||
clientfps = text2num(query.item[17])
|
||||
|
||||
//Sanitize
|
||||
ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor))
|
||||
@@ -63,6 +65,7 @@
|
||||
windowflashing = sanitize_integer(windowflashing, 0, 1, initial(windowflashing))
|
||||
ghost_anonsay = sanitize_integer(ghost_anonsay, 0, 1, initial(ghost_anonsay))
|
||||
exp = sanitize_text(exp, initial(exp))
|
||||
clientfps = sanitize_integer(clientfps, 0, 1000, initial(clientfps))
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/save_preferences(client/C)
|
||||
@@ -89,7 +92,8 @@
|
||||
show_ghostitem_attack='[show_ghostitem_attack]',
|
||||
lastchangelog='[lastchangelog]',
|
||||
windowflashing='[windowflashing]',
|
||||
ghost_anonsay='[ghost_anonsay]'
|
||||
ghost_anonsay='[ghost_anonsay]',
|
||||
clientfps='[clientfps]'
|
||||
WHERE ckey='[C.ckey]'"}
|
||||
)
|
||||
|
||||
|
||||
@@ -198,8 +198,8 @@ BLIND // can't see anything
|
||||
/obj/item/clothing/gloves/proc/Touch(atom/A, proximity)
|
||||
return 0 // return 1 to cancel attack_hand()
|
||||
|
||||
/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
/obj/item/clothing/gloves/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wirecutters))
|
||||
if(!clipped)
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] snips the fingertips off [src].</span>","<span class='warning'>You snip the fingertips off [src].</span>")
|
||||
@@ -383,8 +383,8 @@ BLIND // can't see anything
|
||||
)
|
||||
|
||||
/obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/match) && src.loc == user)
|
||||
var/obj/item/weapon/match/M = I
|
||||
if(istype(I, /obj/item/match) && src.loc == user)
|
||||
var/obj/item/match/M = I
|
||||
if(!M.lit) // Match isn't lit, but isn't burnt.
|
||||
M.lit = 1
|
||||
M.icon_state = "match_lit"
|
||||
@@ -399,7 +399,7 @@ BLIND // can't see anything
|
||||
to_chat(user, "<span class='notice'>The [M] has already been extinguished.</span>")
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/weapon/wirecutters))
|
||||
if(istype(I, /obj/item/wirecutters))
|
||||
if(can_cut_open)
|
||||
if(!cut_open)
|
||||
playsound(src.loc, I.usesound, 100, 1)
|
||||
@@ -443,7 +443,7 @@ BLIND // can't see anything
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
name = "suit"
|
||||
var/fire_resist = T0C+100
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen)
|
||||
allowed = list(/obj/item/tank/emergency_oxygen)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
slot_flags = SLOT_OCLOTHING
|
||||
var/blood_overlay_type = "suit"
|
||||
@@ -484,7 +484,7 @@ BLIND // can't see anything
|
||||
if(user.canUnEquip(src)) //Checks to see if the item can be unequipped. If so, lets shred. Otherwise, struggle and fail.
|
||||
if(contents) //If the suit's got any storage capability...
|
||||
for(var/obj/item/O in contents) //AVOIDING ITEM LOSS. Check through everything that's stored in the jacket and see if one of the items is a pocket.
|
||||
if(istype(O, /obj/item/weapon/storage/internal)) //If it's a pocket...
|
||||
if(istype(O, /obj/item/storage/internal)) //If it's a pocket...
|
||||
if(O.contents) //Check to see if the pocket's got anything in it.
|
||||
for(var/obj/item/I in O.contents) //Dump the pocket out onto the floor below the user.
|
||||
user.unEquip(I,1)
|
||||
@@ -550,7 +550,7 @@ BLIND // can't see anything
|
||||
permeability_coefficient = 0.02
|
||||
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank)
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank)
|
||||
slowdown = 1
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 50)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
prescription = 1
|
||||
name = "prescription [name]"
|
||||
return
|
||||
if(prescription && istype(O, /obj/item/weapon/screwdriver))
|
||||
if(prescription && istype(O, /obj/item/screwdriver))
|
||||
var/obj/item/clothing/glasses/regular/G = locate() in src
|
||||
if(!G)
|
||||
G = new(get_turf(H))
|
||||
@@ -497,7 +497,7 @@
|
||||
flags_cover = null
|
||||
invis_view = SEE_INVISIBLE_MINIMUM
|
||||
|
||||
/obj/item/clothing/glasses/godeye/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
/obj/item/clothing/glasses/godeye/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, src) && W != src && W.loc == user)
|
||||
if(W.icon_state == "godeye")
|
||||
W.icon_state = "doublegodeye"
|
||||
|
||||
@@ -74,8 +74,8 @@
|
||||
/obj/item/clothing/gloves/color/black/thief
|
||||
pickpocket = 1
|
||||
|
||||
/obj/item/clothing/gloves/color/black/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
/obj/item/clothing/gloves/color/black/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/wirecutters))
|
||||
if(can_be_cut && icon_state == initial(icon_state))//only if not dyed
|
||||
var/confirm = alert("Do you want to cut off the gloves fingertips? Warning: It might destroy their functionality.","Cut tips?","Yes","No")
|
||||
if(get_dist(user, src) > 1)
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
/obj/item/clothing/gloves/color/yellow/stun
|
||||
name = "stun gloves"
|
||||
desc = "Horrendous and awful. It smells like cancer. The fact it has wires attached to it is incidental."
|
||||
var/obj/item/weapon/stock_parts/cell/cell = null
|
||||
var/obj/item/stock_parts/cell/cell = null
|
||||
var/stun_strength = 5
|
||||
var/stun_cost = 2000
|
||||
|
||||
@@ -113,8 +113,8 @@
|
||||
if(cell)
|
||||
overlays += "gloves_cell"
|
||||
|
||||
/obj/item/clothing/gloves/color/yellow/stun/attackby(obj/item/weapon/W, mob/living/user, params)
|
||||
if(istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
/obj/item/clothing/gloves/color/yellow/stun/attackby(obj/item/W, mob/living/user, params)
|
||||
if(istype(W, /obj/item/stock_parts/cell))
|
||||
if(!cell)
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "<span class='warning'>[W] is stuck to you!</span>")
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
name = "hat"
|
||||
desc = "Someone who wears this will look very smart."
|
||||
icon_state = "detective"
|
||||
allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn, /obj/item/weapon/pen)
|
||||
allowed = list(/obj/item/reagent_containers/food/snacks/candy/candy_corn, /obj/item/pen)
|
||||
armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
//Mime
|
||||
|
||||
@@ -14,11 +14,6 @@
|
||||
desc = "Smells nice."
|
||||
item_state = "hairflower"
|
||||
|
||||
/obj/item/clothing/head/hairflower/purple
|
||||
icon_state = "hairflowerp"
|
||||
item_state = "hairflowerp"
|
||||
item_state = "that"
|
||||
|
||||
/obj/item/clothing/head/powdered_wig
|
||||
name = "powdered wig"
|
||||
desc = "A powdered wig."
|
||||
|
||||
@@ -131,6 +131,7 @@
|
||||
desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
|
||||
icon_state = "clown"
|
||||
item_state = "clown_hat"
|
||||
flags = NODROP
|
||||
|
||||
/obj/item/clothing/mask/gas/sexyclown
|
||||
name = "sexy-clown wig and mask"
|
||||
@@ -379,8 +380,8 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>It's broken.</span>")
|
||||
|
||||
/obj/item/clothing/mask/gas/sechailer/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
/obj/item/clothing/mask/gas/sechailer/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
switch(aggressiveness)
|
||||
if(1)
|
||||
to_chat(user, "<span class='notice'>You set the aggressiveness restrictor to the second position.</span>")
|
||||
@@ -400,7 +401,7 @@
|
||||
phrase = 1
|
||||
if(5)
|
||||
to_chat(user, "<span class='warning'>You adjust the restrictor but nothing happens, probably because its broken.</span>")
|
||||
else if(istype(W, /obj/item/weapon/wirecutters))
|
||||
else if(istype(W, /obj/item/wirecutters))
|
||||
if(aggressiveness != 5)
|
||||
to_chat(user, "<span class='warning'>You broke it!</span>")
|
||||
aggressiveness = 5
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
return FALSE
|
||||
|
||||
/obj/item/clothing/mask/muzzle/proc/do_unlock(mob/living/carbon/human/user)
|
||||
if(istype(user.get_inactive_hand(), /obj/item/weapon/card/emag))
|
||||
if(istype(user.get_inactive_hand(), /obj/item/card/emag))
|
||||
to_chat(user, "<span class='warning'>The lock vibrates as the card forces its locking system open.</span>")
|
||||
do_break()
|
||||
return TRUE
|
||||
@@ -94,6 +94,7 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resist_time = 150
|
||||
mute = MUTE_MUFFLE
|
||||
flags = DROPDEL
|
||||
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin", "Grey")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
@@ -109,9 +110,8 @@
|
||||
R.loc = T
|
||||
transfer_fingerprints_to(R)
|
||||
playsound(src,'sound/items/poster_ripped.ogg',40,1)
|
||||
spawn(0) // Because of how dropping is done, if the muzzle gets deleted now, icons won't properly update and the whole unEquip() proc will break stuff.
|
||||
qdel(src) // This makes sure it gets deleted AFTER all that has to be done is done.
|
||||
user.emote("scream")
|
||||
user.emote("scream")
|
||||
. = ..()
|
||||
|
||||
/obj/item/clothing/mask/muzzle/safety
|
||||
name = "safety muzzle"
|
||||
|
||||
@@ -91,13 +91,13 @@
|
||||
if(src.chained)
|
||||
src.chained = null
|
||||
src.slowdown = SHOES_SLOWDOWN
|
||||
new /obj/item/weapon/restraints/handcuffs( user.loc )
|
||||
new /obj/item/restraints/handcuffs( user.loc )
|
||||
src.icon_state = "orange"
|
||||
return
|
||||
|
||||
/obj/item/clothing/shoes/orange/attackby(obj/H, loc, params)
|
||||
..()
|
||||
if(istype(H, /obj/item/weapon/restraints/handcuffs) && !chained && !(H.flags & NODROP))
|
||||
if(istype(H, /obj/item/restraints/handcuffs) && !chained && !(H.flags & NODROP))
|
||||
if(src.icon_state != "orange") return
|
||||
qdel(H)
|
||||
src.chained = 1
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
// Can't be equipped by any other species due to bone structure and vox cybernetics.
|
||||
/obj/item/clothing/suit/space/vox
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank)
|
||||
armor = list(melee = 40, bullet = 40, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
|
||||
|
||||
@@ -194,7 +194,7 @@ var/global/list/breach_burn_descriptors = list(
|
||||
repair_breaches(BURN, ( istype(P,/obj/item/stack/sheet/plastic) ? 3 : 5), user)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||
else if(istype(W, /obj/item/weldingtool))
|
||||
|
||||
if(istype(src.loc,/mob/living))
|
||||
to_chat(user, "<span class='warning'>How do you intend to patch a hardsuit while someone is wearing it?</span>")
|
||||
@@ -204,7 +204,7 @@ var/global/list/breach_burn_descriptors = list(
|
||||
to_chat(user, "There is no structural damage on \the [src] to repair.")
|
||||
return
|
||||
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
var/obj/item/weldingtool/WT = W
|
||||
if(!WT.remove_fuel(5))
|
||||
to_chat(user, "<span class='warning'>You need more welding fuel to repair this suit.</span>")
|
||||
return
|
||||
|
||||
@@ -34,12 +34,12 @@
|
||||
icon_state = "ert_commander"
|
||||
item_state = "suit-command"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank)
|
||||
armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \
|
||||
/obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/device/multitool, \
|
||||
/obj/item/device/radio, /obj/item/device/analyzer, /obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/pulse, \
|
||||
/obj/item/weapon/gun/energy/gun/advtaser, /obj/item/weapon/melee/baton, /obj/item/weapon/gun/energy/gun)
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank, /obj/item/t_scanner, /obj/item/rcd, /obj/item/crowbar, \
|
||||
/obj/item/screwdriver, /obj/item/weldingtool, /obj/item/wirecutters, /obj/item/wrench, /obj/item/multitool, \
|
||||
/obj/item/radio, /obj/item/analyzer, /obj/item/gun/energy/laser, /obj/item/gun/energy/pulse, \
|
||||
/obj/item/gun/energy/gun/advtaser, /obj/item/melee/baton, /obj/item/gun/energy/gun)
|
||||
strip_delay = 130
|
||||
species_fit = list("Drask")
|
||||
sprite_sheets = list(
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/New()
|
||||
..()
|
||||
new /obj/item/weapon/nullrod(src)
|
||||
new /obj/item/nullrod(src)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor
|
||||
name = "inquisitor's helmet"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state = "eng_helm"
|
||||
hardsuit_restrict_helmet = 1
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
|
||||
allowed = list(/obj/item/device/flashlight)
|
||||
allowed = list(/obj/item/flashlight)
|
||||
var/brightness_on = 4 //luminosity when on
|
||||
var/on = 0
|
||||
item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite)
|
||||
@@ -67,7 +67,7 @@
|
||||
icon_state = "hardsuit-engineering"
|
||||
item_state = "eng_hardsuit"
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/t_scanner, /obj/item/rcd)
|
||||
siemens_coefficient = 0
|
||||
|
||||
species_restricted = list("exclude","Diona","Wryn")
|
||||
@@ -92,7 +92,7 @@
|
||||
can_breach = 0
|
||||
|
||||
//Component/device holders.
|
||||
var/obj/item/weapon/stock_parts/gloves = null // Basic capacitor allows insulation, upgrades allow shock gloves etc.
|
||||
var/obj/item/stock_parts/gloves = null // Basic capacitor allows insulation, upgrades allow shock gloves etc.
|
||||
|
||||
var/attached_boots = 1 // Can't wear boots if some are attached
|
||||
var/obj/item/clothing/shoes/magboots/boots = null // Deployable boots, if any.
|
||||
@@ -194,7 +194,7 @@
|
||||
if(!isliving(user))
|
||||
return
|
||||
|
||||
if(istype(W,/obj/item/weapon/screwdriver) && can_modify(user))
|
||||
if(istype(W,/obj/item/screwdriver) && can_modify(user))
|
||||
if(!helmet)
|
||||
to_chat(user, "\The [src] does not have a helmet installed.")
|
||||
else
|
||||
@@ -261,7 +261,7 @@
|
||||
icon_state = "hardsuit-engineering"
|
||||
item_state = "eng_hardsuit"
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/t_scanner, /obj/item/rcd)
|
||||
|
||||
//Chief Engineer's hardsuit
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/elite
|
||||
@@ -298,7 +298,7 @@
|
||||
desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating."
|
||||
item_state = "mining_hardsuit"
|
||||
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe)
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/storage/bag/ore,/obj/item/pickaxe)
|
||||
|
||||
|
||||
//Syndicate hardsuit
|
||||
@@ -366,7 +366,7 @@
|
||||
var/on = 1
|
||||
actions_types = list(/datum/action/item_action/toggle_hardsuit_mode)
|
||||
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/syndi/update_icon()
|
||||
icon_state = "hardsuit[on]-[item_color]"
|
||||
@@ -473,7 +473,7 @@
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
unacidable = 1
|
||||
armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 35, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank)
|
||||
allowed = list(/obj/item/teleportation_scroll,/obj/item/tank)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
|
||||
unacidable = 1
|
||||
@@ -496,7 +496,7 @@
|
||||
name = "medical hardsuit"
|
||||
desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort."
|
||||
item_state = "medical_hardsuit"
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/device/rad_laser)
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/storage/firstaid,/obj/item/healthanalyzer,/obj/item/stack/medical,/obj/item/rad_laser)
|
||||
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
|
||||
|
||||
//Security
|
||||
@@ -514,7 +514,7 @@
|
||||
desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
|
||||
item_state = "sec_hardsuit"
|
||||
armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/melee/baton,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/restraints/handcuffs)
|
||||
allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/melee/baton,/obj/item/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/restraints/handcuffs)
|
||||
|
||||
|
||||
//Atmospherics hardsuit (BS12)
|
||||
@@ -577,7 +577,7 @@
|
||||
name = "shielded hardsuit"
|
||||
desc = "A hardsuit with built in energy shielding. Will rapidly recharge when not under fire."
|
||||
icon_state = "hardsuit-hos"
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank, /obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank, /obj/item/gun,/obj/item/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs)
|
||||
armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50)
|
||||
var/current_charges = 3
|
||||
var/max_charges = 3 //How many charges total the shielding has
|
||||
@@ -630,7 +630,7 @@
|
||||
item_state = "syndie_hardsuit"
|
||||
item_color = "syndi"
|
||||
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank)
|
||||
slowdown = 0
|
||||
sprite_sheets = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
icon_state = "caparmor"
|
||||
item_state = "capspacesuit"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
allowed = list(/obj/item/weapon/tank, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
|
||||
allowed = list(/obj/item/tank, /obj/item/flashlight,/obj/item/gun/energy, /obj/item/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton,/obj/item/restraints/handcuffs)
|
||||
armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
|
||||
species_restricted = list("exclude", "Diona", "Wryn")
|
||||
species_fit = list("Vox")
|
||||
@@ -56,7 +56,7 @@
|
||||
desc = "A heavily armored, advanced space suit that protects against most forms of damage."
|
||||
icon_state = "deathsquad"
|
||||
item_state = "swat_suit"
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/kitchen/knife/combat)
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/tank,/obj/item/kitchen/knife/combat)
|
||||
armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100)
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
|
||||
unacidable = 1
|
||||
@@ -68,7 +68,7 @@
|
||||
desc = "Space-proof tactical SWAT armor."
|
||||
icon_state = "heavy"
|
||||
item_state = "swat_suit"
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/kitchen/knife/combat)
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/tank,/obj/item/kitchen/knife/combat)
|
||||
armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 50, bio = 90, rad = 20)
|
||||
strip_delay = 120
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
icon_state = "pirate"
|
||||
item_state = "pirate"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/tank)
|
||||
slowdown = 0
|
||||
armor = list(melee = 30, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
strip_delay = 40
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/obj/item/clothing/suit/space/eva/plasmaman
|
||||
name = "plasmaman suit"
|
||||
desc = "A special containment suit designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies."
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
allowed = list(/obj/item/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank)
|
||||
slowdown = 0
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/attackby(var/obj/item/A as obj, mob/user as mob, params)
|
||||
..()
|
||||
if(istype(A, /obj/item/weapon/plasmensuit_cartridge)) //This suit can only be reloaded by the appropriate cartridges, and only if it's got no more extinguishes left.
|
||||
if(istype(A, /obj/item/plasmensuit_cartridge)) //This suit can only be reloaded by the appropriate cartridges, and only if it's got no more extinguishes left.
|
||||
if(!extinguishes_left)
|
||||
extinguishes_left = max_extinguishes //Full replenishment from the cartridge.
|
||||
to_chat(user, "<span class='notice'>You replenish \the [src] with the cartridge.</span>")
|
||||
@@ -52,7 +52,7 @@
|
||||
..(user)
|
||||
to_chat(user, "<span class='info'>There are [extinguishes_left] extinguisher canisters left in this suit.</span>")
|
||||
|
||||
/obj/item/weapon/plasmensuit_cartridge //Can be used to refill Plasmaman suits when they run out of autoextinguishes.
|
||||
/obj/item/plasmensuit_cartridge //Can be used to refill Plasmaman suits when they run out of autoextinguishes.
|
||||
name = "auto-extinguisher cartridge"
|
||||
desc = "A tiny and light fibreglass-framed auto-extinguisher cartridge."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
@@ -391,7 +391,7 @@
|
||||
name = "blood red plasmaman suit"
|
||||
icon_state = "plasmaman_Nukeops"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs)
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear
|
||||
name = "blood red plasmaman helmet"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
icon_state = "flash"
|
||||
interface_name = "mounted flash"
|
||||
interface_desc = "Stuns your target by blinding them with a bright light."
|
||||
device_type = /obj/item/device/flash
|
||||
device_type = /obj/item/flash
|
||||
|
||||
/obj/item/rig_module/grenade_launcher
|
||||
|
||||
@@ -30,9 +30,9 @@
|
||||
var/fire_distance = 10
|
||||
|
||||
charges = list(
|
||||
list("flashbang", "flashbang", /obj/item/weapon/grenade/flashbang, 3),
|
||||
list("smoke bomb", "smoke bomb", /obj/item/weapon/grenade/smokebomb, 3),
|
||||
list("EMP grenade", "EMP grenade", /obj/item/weapon/grenade/empgrenade, 3),
|
||||
list("flashbang", "flashbang", /obj/item/grenade/flashbang, 3),
|
||||
list("smoke bomb", "smoke bomb", /obj/item/grenade/smokebomb, 3),
|
||||
list("EMP grenade", "EMP grenade", /obj/item/grenade/empgrenade, 3),
|
||||
)
|
||||
|
||||
/obj/item/rig_module/grenade_launcher/accepts_item(var/obj/item/input_device, var/mob/living/user)
|
||||
@@ -84,7 +84,7 @@
|
||||
return 0
|
||||
|
||||
charge.charges--
|
||||
var/obj/item/weapon/grenade/new_grenade = new charge.product_type(get_turf(H))
|
||||
var/obj/item/grenade/new_grenade = new charge.product_type(get_turf(H))
|
||||
H.visible_message("<span class='danger'>[H] launches \a [new_grenade]!</span>")
|
||||
new_grenade.throw_at(target,fire_force,fire_distance)
|
||||
new_grenade.prime()
|
||||
@@ -103,8 +103,8 @@
|
||||
interface_name = "mounted laser cannon"
|
||||
interface_desc = "A shoulder-mounted cell-powered laser cannon."
|
||||
|
||||
var/gun_type = /obj/item/weapon/gun/energy/lasercannon/mounted
|
||||
var/obj/item/weapon/gun/gun
|
||||
var/gun_type = /obj/item/gun/energy/lasercannon/mounted
|
||||
var/obj/item/gun/gun
|
||||
|
||||
/obj/item/rig_module/mounted/New()
|
||||
..()
|
||||
@@ -131,7 +131,7 @@
|
||||
interface_name = "mounted energy gun"
|
||||
interface_desc = "A forearm-mounted suit-powered energy gun."
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/gun/mounted
|
||||
gun_type = /obj/item/gun/energy/gun/mounted
|
||||
|
||||
/obj/item/rig_module/mounted/taser
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
interface_name = "mounted energy gun"
|
||||
interface_desc = "A shoulder-mounted cell-powered energy gun."
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/taser/mounted
|
||||
gun_type = /obj/item/gun/energy/taser/mounted
|
||||
|
||||
/obj/item/rig_module/mounted/energy_blade
|
||||
|
||||
@@ -168,12 +168,12 @@
|
||||
active_power_cost = 10
|
||||
passive_power_cost = 0
|
||||
|
||||
gun_type = /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/ninja
|
||||
gun_type = /obj/item/gun/energy/kinetic_accelerator/crossbow/ninja
|
||||
|
||||
/obj/item/rig_module/mounted/energy_blade/process()
|
||||
|
||||
if(holder && holder.wearer)
|
||||
if(!(locate(/obj/item/weapon/melee/energy/blade) in holder.wearer))
|
||||
if(!(locate(/obj/item/melee/energy/blade) in holder.wearer))
|
||||
deactivate()
|
||||
return 0
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
deactivate()
|
||||
return
|
||||
|
||||
var/obj/item/weapon/melee/energy/blade/blade = new(M)
|
||||
var/obj/item/melee/energy/blade/blade = new(M)
|
||||
M.put_in_hands(blade)
|
||||
|
||||
/obj/item/rig_module/mounted/energy_blade/deactivate()
|
||||
@@ -202,7 +202,7 @@
|
||||
if(!M)
|
||||
return
|
||||
|
||||
for(var/obj/item/weapon/melee/energy/blade/blade in M.contents)
|
||||
for(var/obj/item/melee/energy/blade/blade in M.contents)
|
||||
M.unEquip(blade)
|
||||
qdel(blade)
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
/obj/item/rig_module/ai_container/process()
|
||||
if(integrated_ai)
|
||||
var/obj/item/weapon/rig/rig = get_rig()
|
||||
var/obj/item/rig/rig = get_rig()
|
||||
if(rig && rig.ai_override_enabled)
|
||||
integrated_ai.get_rig_stats = 1
|
||||
else
|
||||
@@ -74,14 +74,14 @@
|
||||
else
|
||||
target_ai = locate(/mob/living/silicon/ai) in input_device.contents
|
||||
|
||||
var/obj/item/device/aicard/card = ai_card
|
||||
var/obj/item/aicard/card = ai_card
|
||||
|
||||
// Downloading from/loading to a terminal.
|
||||
if(istype(input_device,/obj/machinery/computer/aifixer) || istype(input_device,/mob/living/silicon/ai) || istype(input_device,/obj/structure/AIcore/deactivated))
|
||||
|
||||
// If we're stealing an AI, make sure we have a card for it.
|
||||
if(!card)
|
||||
card = new /obj/item/device/aicard(src)
|
||||
card = new /obj/item/aicard(src)
|
||||
|
||||
// Terminal interaction only works with an intellicarded AI.
|
||||
if(!istype(card))
|
||||
@@ -99,10 +99,10 @@
|
||||
update_verb_holder()
|
||||
return 1
|
||||
|
||||
if(istype(input_device,/obj/item/device/aicard))
|
||||
if(istype(input_device,/obj/item/aicard))
|
||||
// We are carding the AI in our suit.
|
||||
if(integrated_ai)
|
||||
var/obj/item/device/aicard/ext_card = input_device
|
||||
var/obj/item/aicard/ext_card = input_device
|
||||
ext_card.afterattack(integrated_ai, user, 1)
|
||||
// If the transfer was successful, we can clear out our vars.
|
||||
if(integrated_ai.loc != src)
|
||||
@@ -116,7 +116,7 @@
|
||||
return 1
|
||||
|
||||
// Okay, it wasn't a terminal being touched, check for all the simple insertions.
|
||||
if(input_device.type in list(/obj/item/device/paicard, /obj/item/device/mmi, /obj/item/device/mmi/posibrain))
|
||||
if(input_device.type in list(/obj/item/paicard, /obj/item/mmi, /obj/item/mmi/posibrain))
|
||||
if(integrated_ai)
|
||||
integrated_ai.attackby(input_device,user)
|
||||
// If the transfer was successful, we can clear out our vars.
|
||||
@@ -138,7 +138,7 @@
|
||||
|
||||
if(!target)
|
||||
if(ai_card)
|
||||
if(istype(ai_card,/obj/item/device/aicard))
|
||||
if(istype(ai_card,/obj/item/aicard))
|
||||
ai_card.ui_interact(H, state = deep_inventory_state)
|
||||
else
|
||||
eject_ai(H)
|
||||
@@ -157,7 +157,7 @@
|
||||
/obj/item/rig_module/ai_container/proc/eject_ai(var/mob/user)
|
||||
|
||||
if(ai_card)
|
||||
if(istype(ai_card, /obj/item/device/aicard))
|
||||
if(istype(ai_card, /obj/item/aicard))
|
||||
if(integrated_ai && !integrated_ai.stat)
|
||||
if(user)
|
||||
to_chat(user, "<span class='danger'>You cannot eject your currently stored AI. Purge it manually.</span>")
|
||||
@@ -182,14 +182,14 @@
|
||||
var/mob/living/ai_mob = locate(/mob/living) in ai.contents
|
||||
if(ai_mob)
|
||||
if(ai_mob.key && ai_mob.client)
|
||||
if(istype(ai, /obj/item/device/aicard))
|
||||
if(istype(ai, /obj/item/aicard))
|
||||
var/mob/living/silicon/ai/ROBUTT = ai_mob
|
||||
if(istype(ROBUTT))
|
||||
if(!ai_card)
|
||||
ai_card = new /obj/item/device/aicard(src)
|
||||
ai_card = new /obj/item/aicard(src)
|
||||
|
||||
var/obj/item/device/aicard/source_card = ai
|
||||
var/obj/item/device/aicard/target_card = ai_card
|
||||
var/obj/item/aicard/source_card = ai
|
||||
var/obj/item/aicard/target_card = ai_card
|
||||
if(istype(source_card) && istype(target_card))
|
||||
ROBUTT.forceMove(target_card)
|
||||
ROBUTT.aiRestorePowerRoutine = 0//So the AI initially has power.
|
||||
@@ -251,9 +251,9 @@
|
||||
|
||||
/obj/item/rig_module/datajack/accepts_item(var/obj/item/input_device, var/mob/living/user)
|
||||
|
||||
if(istype(input_device,/obj/item/weapon/disk/tech_disk))
|
||||
if(istype(input_device,/obj/item/disk/tech_disk))
|
||||
to_chat(user, "You slot the disk into [src].")
|
||||
var/obj/item/weapon/disk/tech_disk/disk = input_device
|
||||
var/obj/item/disk/tech_disk/disk = input_device
|
||||
if(disk.stored)
|
||||
if(load_data(disk.stored))
|
||||
to_chat(user, "<font color='blue'>Download successful; disk erased.</font>")
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
deactivate_string = "Retract"
|
||||
|
||||
var/device_type
|
||||
var/obj/item/device
|
||||
var/obj/item
|
||||
|
||||
/obj/item/rig_module/handheld/activate()
|
||||
if(!..())
|
||||
@@ -47,4 +47,4 @@
|
||||
desc = "For tactical honking"
|
||||
interface_name = "mounted bikehorn"
|
||||
interface_desc = "Honks"
|
||||
device_type = /obj/item/weapon/bikehorn
|
||||
device_type = /obj/item/bikehorn
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
toolspeed = 1
|
||||
|
||||
var/damage = 0
|
||||
var/obj/item/weapon/rig/holder
|
||||
var/obj/item/rig/holder
|
||||
|
||||
var/module_cooldown = 10
|
||||
var/next_use = 0
|
||||
@@ -136,7 +136,7 @@
|
||||
stat_modules += new/stat_rig_module/charge(src)
|
||||
|
||||
// Called when the module is installed into a suit.
|
||||
/obj/item/rig_module/proc/installed(var/obj/item/weapon/rig/new_holder)
|
||||
/obj/item/rig_module/proc/installed(var/obj/item/rig/new_holder)
|
||||
holder = new_holder
|
||||
return
|
||||
|
||||
@@ -227,7 +227,7 @@
|
||||
/obj/item/rig_module/proc/accepts_item(var/obj/item/input_device)
|
||||
return 0
|
||||
|
||||
/mob/proc/SetupStat(var/obj/item/weapon/rig/R)
|
||||
/mob/proc/SetupStat(var/obj/item/rig/R)
|
||||
if(R && (R.flags & NODROP) && R.installed_modules.len && statpanel("Hardsuit Modules"))
|
||||
var/cell_status = R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "ERROR"
|
||||
stat("Suit charge", cell_status)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user