Merge Conflict Resolution

This commit is contained in:
SamCroswell
2016-07-11 13:04:30 -04:00
1112 changed files with 15283 additions and 13974 deletions
+16 -2
View File
@@ -17,6 +17,7 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration =
var/kickbannedckey //Defines whether this proc should kick the banned person, if they are connected (if banned_mob is defined).
//some ban types kick players after this proc passes (tempban, permaban), but some are specific to db_ban, so
//they should kick within this proc.
var/isjobban // For job bans, which need to be inserted into the job ban lists
switch(bantype)
if(BANTYPE_PERMA)
bantype_str = "PERMABAN"
@@ -31,9 +32,11 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration =
bantype_str = "JOB_PERMABAN"
duration = -1
bantype_pass = 1
isjobban = 1
if(BANTYPE_JOB_TEMP)
bantype_str = "JOB_TEMPBAN"
bantype_pass = 1
isjobban = 1
if(BANTYPE_APPEARANCE)
bantype_str = "APPEARANCE_BAN"
duration = -1
@@ -134,11 +137,15 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration =
if(banned_mob && banned_mob.client && banned_mob.client.ckey == banckey)
del(banned_mob.client)
if(isjobban)
jobban_client_fullban(ckey, job)
datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
if(!check_rights(R_BAN)) return
var/bantype_str
var/isjobban // For job bans, which need to be removed from the job ban lists
if(bantype)
var/bantype_pass = 0
switch(bantype)
@@ -151,9 +158,11 @@ datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
if(BANTYPE_JOB_PERMA)
bantype_str = "JOB_PERMABAN"
bantype_pass = 1
isjobban = 1
if(BANTYPE_JOB_TEMP)
bantype_str = "JOB_TEMPBAN"
bantype_pass = 1
isjobban = 1
if(BANTYPE_APPEARANCE)
bantype_str = "APPEARANCE_BAN"
bantype_pass = 1
@@ -206,6 +215,8 @@ datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
return
DB_ban_unban_by_id(ban_id)
if(isjobban)
jobban_unban_client(ckey, job)
datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
@@ -215,18 +226,20 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
to_chat(usr, "Cancelled")
return
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]")
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, duration, reason, job FROM [format_table_name("ban")] WHERE id = [banid]")
query.Execute()
var/eckey = usr.ckey //Editing admin ckey
var/pckey //(banned) Player ckey
var/duration //Old duration
var/reason //Old reason
var/job //Old job
if(query.NextRow())
pckey = query.item[1]
duration = query.item[2]
reason = query.item[3]
job = query.item[4]
else
to_chat(usr, "Invalid ban id. Contact the database admin")
return
@@ -259,6 +272,8 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
if("unban")
if(alert("Unban [pckey]?", "Unban?", "Yes", "No") == "Yes")
DB_ban_unban_by_id(banid)
if(job && length(job))
jobban_unban_client(pckey, job)
return
else
to_chat(usr, "Cancelled")
@@ -396,7 +411,6 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
output += "<br><input type='submit' value='search'><br>"
output += "<input type='checkbox' value='[match]' name='dbmatch' [match? "checked=\"1\"" : null]> Match(min. 3 characters to search by key or ip, and 7 to search by cid)<br>"
output += "</form>"
output += "Please note that all jobban bans or unbans are in-effect the following round.<br>"
output += "This search shows only last 100 bans."
if(adminckey || playerckey || playerip || playercid || dbbantype)
+9 -9
View File
@@ -1,10 +1,10 @@
//Blocks an attempt to connect before even creating our client datum thing.
world/IsBanned(key,address,computer_id)
if (!key || !address || !computer_id)
if(!key || !address || !computer_id)
log_access("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
if(text2num(computer_id) == 2147483647) //this cid causes stickybans to go haywire
log_access("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
@@ -34,7 +34,7 @@ world/IsBanned(key,address,computer_id)
//Ban Checking
. = CheckBan(ckey(key), computer_id, address)
if(.)
if (admin)
if(admin)
log_admin("The admin [key] has been allowed to bypass a matching ban on [.["key"]]")
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>")
@@ -71,13 +71,13 @@ world/IsBanned(key,address,computer_id)
var/duration = query.item[7]
var/bantime = query.item[8]
var/bantype = query.item[9]
if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN")
if(bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN")
//admin bans MUST match on ckey to prevent cid-spoofing attacks
// as well as dynamic ip abuse
if (pckey != ckey)
if(pckey != ckey)
continue
if (admin)
if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN")
if(admin)
if(bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN")
log_admin("The admin [key] is admin banned, and has been disallowed access")
message_admins("<span class='adminnotice'>The admin [key] is admin banned, and has been disallowed access</span>")
else
@@ -102,11 +102,11 @@ world/IsBanned(key,address,computer_id)
return .
. = ..() //default pager ban stuff
if (.)
if(.)
//byond will not trigger isbanned() for "global" host bans,
//ie, ones where the "apply to this game only" checkbox is not checked (defaults to not checked)
//So it's safe to let admins walk thru host/sticky bans here
if (admin)
if(admin)
log_admin("The admin [key] has been allowed to bypass a matching host/sticky ban")
message_admins("<span class='adminnotice'>The admin [key] has been allowed to bypass a matching host/sticky ban</span>")
addclientmessage(ckey,"<span class='adminnotice'>You have been allowed to bypass a matching host/sticky ban.</span>")
+22 -22
View File
@@ -15,8 +15,8 @@ var/savefile/Banlist
Banlist.cd = "/base"
if( "[ckey][id]" in Banlist.dir )
Banlist.cd = "[ckey][id]"
if (Banlist["temp"])
if (!GetExp(Banlist["minutes"]))
if(Banlist["temp"])
if(!GetExp(Banlist["minutes"]))
ClearTempbans()
return 0
else
@@ -27,7 +27,7 @@ var/savefile/Banlist
.["reason"] = "ckey/id"
return .
else
for (var/A in Banlist.dir)
for(var/A in Banlist.dir)
Banlist.cd = "/base/[A]"
var/matches
if( ckey == Banlist["key"] )
@@ -43,7 +43,7 @@ var/savefile/Banlist
if(matches)
if(Banlist["temp"])
if (!GetExp(Banlist["minutes"]))
if(!GetExp(Banlist["minutes"]))
ClearTempbans()
return 0
else
@@ -66,13 +66,13 @@ var/savefile/Banlist
Banlist = new("data/banlist.bdb")
log_admin("Loading Banlist")
if (!length(Banlist.dir)) log_admin("Banlist is empty.")
if(!length(Banlist.dir)) log_admin("Banlist is empty.")
if (!Banlist.dir.Find("base"))
if(!Banlist.dir.Find("base"))
log_admin("Banlist missing base dir.")
Banlist.dir.Add("base")
Banlist.cd = "/base"
else if (Banlist.dir.Find("base"))
else if(Banlist.dir.Find("base"))
Banlist.cd = "/base"
ClearTempbans()
@@ -82,16 +82,16 @@ var/savefile/Banlist
UpdateTime()
Banlist.cd = "/base"
for (var/A in Banlist.dir)
for(var/A in Banlist.dir)
Banlist.cd = "/base/[A]"
if (!Banlist["key"] || !Banlist["id"])
if(!Banlist["key"] || !Banlist["id"])
RemoveBan(A)
log_admin("Invalid Ban.")
message_admins("Invalid Ban.")
continue
if (!Banlist["temp"]) continue
if (CMinutes >= Banlist["minutes"]) RemoveBan(A)
if(!Banlist["temp"]) continue
if(CMinutes >= Banlist["minutes"]) RemoveBan(A)
return 1
@@ -100,12 +100,12 @@ var/savefile/Banlist
var/bantimestamp
if (temp)
if(temp)
UpdateTime()
bantimestamp = CMinutes + minutes
Banlist.cd = "/base"
if ( Banlist.dir.Find("[ckey][computerid]") )
if( Banlist.dir.Find("[ckey][computerid]") )
to_chat(usr, "<span class='danger'>Ban already exists.</span>")
return 0
else
@@ -117,7 +117,7 @@ var/savefile/Banlist
Banlist["reason"] << reason
Banlist["bannedby"] << bannedby
Banlist["temp"] << temp
if (temp)
if(temp)
Banlist["minutes"] << bantimestamp
if(!temp)
add_note(ckey, "Permanently banned - [reason]", null, bannedby, 0)
@@ -134,7 +134,7 @@ var/savefile/Banlist
Banlist["id"] >> id
Banlist.cd = "/base"
if (!Banlist.dir.Remove(foldername)) return 0
if(!Banlist.dir.Remove(foldername)) return 0
if(!usr)
log_admin("Ban Expired: [key]")
@@ -145,9 +145,9 @@ var/savefile/Banlist
message_admins("[key_name_admin(usr)] unbanned: [key]")
feedback_inc("ban_unban",1)
usr.client.holder.DB_ban_unban( ckey(key), BANTYPE_ANY_FULLBAN)
for (var/A in Banlist.dir)
for(var/A in Banlist.dir)
Banlist.cd = "/base/[A]"
if (key == Banlist["key"] /*|| id == Banlist["id"]*/)
if(key == Banlist["key"] /*|| id == Banlist["id"]*/)
Banlist.cd = "/base"
Banlist.dir.Remove(A)
continue
@@ -157,13 +157,13 @@ var/savefile/Banlist
/proc/GetExp(minutes as num)
UpdateTime()
var/exp = minutes - CMinutes
if (exp <= 0)
if(exp <= 0)
return 0
else
var/timeleftstring
if (exp >= 1440) //1440 = 1 day in minutes
if(exp >= 1440) //1440 = 1 day in minutes
timeleftstring = "[round(exp / 1440, 0.1)] Days"
else if (exp >= 60) //60 = 1 hour in minutes
else if(exp >= 60) //60 = 1 hour in minutes
timeleftstring = "[round(exp / 60, 0.1)] Hours"
else
timeleftstring = "[exp] Minutes"
@@ -174,7 +174,7 @@ var/savefile/Banlist
var/dat
//var/dat = "<HR><B>Unban Player:</B> \blue(U) = Unban , (E) = Edit Ban\green (Total<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >"
Banlist.cd = "/base"
for (var/A in Banlist.dir)
for(var/A in Banlist.dir)
count++
Banlist.cd = "/base/[A]"
var/ref = "\ref[src]"
@@ -228,6 +228,6 @@ var/savefile/Banlist
/proc/ClearAllBans()
Banlist.cd = "/base"
for (var/A in Banlist.dir)
for(var/A in Banlist.dir)
RemoveBan(A)
+28 -28
View File
@@ -103,7 +103,7 @@ var/global/nologevent = 0
<A href='?_src_=holder;subtlemessage=\ref[M]'>Subtle message</A>
"}
if (M.client)
if(M.client)
if(!istype(M, /mob/new_player))
body += "<br><br>"
body += "<b>Transformation:</b>"
@@ -191,7 +191,7 @@ var/global/nologevent = 0
<A href='?_src_=holder;simplemake=shade;mob=\ref[M]'>Shade</A>
"}
if (M.client)
if(M.client)
body += {"<br><br>
<b>Other actions:</b>
<br>
@@ -243,7 +243,7 @@ var/global/nologevent = 0
if(!check_rights(R_EVENT))
return
if (!istype(src,/datum/admins))
if(!istype(src,/datum/admins))
src = usr.client.holder
var/dat
@@ -576,7 +576,7 @@ var/global/nologevent = 0
return
config.looc_allowed = !(config.looc_allowed)
if (config.looc_allowed)
if(config.looc_allowed)
to_chat(world, "<B>The LOOC channel has been globally enabled!</B>")
else
to_chat(world, "<B>The LOOC channel has been globally disabled!</B>")
@@ -592,7 +592,7 @@ var/global/nologevent = 0
return
config.dsay_allowed = !(config.dsay_allowed)
if (config.dsay_allowed)
if(config.dsay_allowed)
to_chat(world, "<B>Deadchat has been globally enabled!</B>")
else
to_chat(world, "<B>Deadchat has been globally disabled!</B>")
@@ -643,7 +643,7 @@ var/global/nologevent = 0
return
enter_allowed = !( enter_allowed )
if (!( enter_allowed ))
if(!( enter_allowed ))
to_chat(world, "<B>New players may no longer enter the game.</B>")
else
to_chat(world, "<B>New players may now enter the game.</B>")
@@ -661,7 +661,7 @@ var/global/nologevent = 0
return
config.allow_ai = !( config.allow_ai )
if (!( config.allow_ai ))
if(!( config.allow_ai ))
to_chat(world, "<B>The AI job is no longer chooseable.</B>")
else
to_chat(world, "<B>The AI job is chooseable now.</B>")
@@ -679,7 +679,7 @@ var/global/nologevent = 0
return
abandon_allowed = !( abandon_allowed )
if (abandon_allowed)
if(abandon_allowed)
to_chat(world, "<B>You may now respawn.</B>")
else
to_chat(world, "<B>You may no longer respawn :(</B>")
@@ -709,13 +709,13 @@ var/global/nologevent = 0
if(!check_rights(R_SERVER))
return
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
if(!ticker || ticker.current_state != GAME_STATE_PREGAME)
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
return //alert("Round end delayed", null, null, null, null, null)
going = !( going )
if (!( going ))
if(!( going ))
to_chat(world, "<b>The game start has been delayed.</b>")
log_admin("[key_name(usr)] delayed the game.")
else
@@ -728,34 +728,34 @@ var/global/nologevent = 0
/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode
if(!ticker || !ticker.mode)
return 0
if (!istype(M))
if(!istype(M))
return 0
if((M.mind in ticker.mode.head_revolutionaries) || (M.mind in ticker.mode.revolutionaries))
if (ticker.mode.config_tag == "revolution")
if(ticker.mode.config_tag == "revolution")
return 2
return 1
if(M.mind in ticker.mode.cult)
if (ticker.mode.config_tag == "cult")
if(ticker.mode.config_tag == "cult")
return 2
return 1
if(M.mind in ticker.mode.malf_ai)
if (ticker.mode.config_tag == "malfunction")
if(ticker.mode.config_tag == "malfunction")
return 2
return 1
if(M.mind in ticker.mode.syndicates)
if (ticker.mode.config_tag == "nuclear")
if(ticker.mode.config_tag == "nuclear")
return 2
return 1
if(M.mind in ticker.mode.wizards)
if (ticker.mode.config_tag == "wizard")
if(ticker.mode.config_tag == "wizard")
return 2
return 1
if(M.mind in ticker.mode.changelings)
if (ticker.mode.config_tag == "changeling")
if(ticker.mode.config_tag == "changeling")
return 2
return 1
if(M.mind in ticker.mode.abductors)
if (ticker.mode.config_tag == "abduction")
if(ticker.mode.config_tag == "abduction")
return 2
return 1
if(isrobot(M))
@@ -829,7 +829,7 @@ var/global/nologevent = 0
return
guests_allowed = !( guests_allowed )
if (!( guests_allowed ))
if(!( guests_allowed ))
to_chat(world, "<B>Guests may no longer enter the game.</B>")
else
to_chat(world, "<B>Guests may now enter the game.</B>")
@@ -846,7 +846,7 @@ var/global/nologevent = 0
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>")
else if (ispAI(S))
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, "[P.pai_law0]")
@@ -856,7 +856,7 @@ var/global/nologevent = 0
else
to_chat(usr, "<b>SILICON [key_name(S, usr)]'s laws:</b>")
if (S.laws == null)
if(S.laws == null)
to_chat(usr, "[key_name(S, usr)]'s laws are null. Contact a coder.")
else
S.laws.show_laws(usr)
@@ -888,7 +888,7 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space
/proc/move_gamma_ship()
var/area/fromArea
var/area/toArea
if (gamma_ship_location == 1)
if(gamma_ship_location == 1)
fromArea = locate(/area/shuttle/gamma/space)
toArea = locate(/area/shuttle/gamma/station)
else
@@ -905,7 +905,7 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space
for(var/obj/machinery/alarm/A in toArea)
A.first_run()
if (gamma_ship_location)
if(gamma_ship_location)
gamma_ship_location = 0
else
gamma_ship_location = 1
@@ -955,18 +955,18 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space
return //extra sanity check to make sure only observers are shoved into things
//same as assume-direct-control perm requirements.
if (!check_rights(R_VAREDIT,0)) //no varedit, check if they have r_admin and r_debug
if(!check_rights(R_VAREDIT,0)) //no varedit, check if they have r_admin and r_debug
if(!check_rights(R_ADMIN|R_DEBUG,0)) //if they don't have r_admin and r_debug, return
return 0 //otherwise, if they have no varedit, but do have r_admin and r_debug, execute the rest of the code
if (!frommob.ckey)
if(!frommob.ckey)
return 0
if(istype(tothing, /obj/item))
var/mob/living/toitem = tothing
var/ask = alert("Are you sure you want to allow [frommob.name]([frommob.key]) to possess [toitem.name]?", "Place ghost in control of item?", "Yes", "No")
if (ask != "Yes")
if(ask != "Yes")
return 1
if(!frommob || !toitem) //make sure the mobs don't go away while we waited for a response
@@ -986,12 +986,12 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space
var/mob/living/tomob = tothing
var/question = ""
if (tomob.ckey)
if(tomob.ckey)
question = "This mob already has a user ([tomob.key]) in control of it! "
question += "Are you sure you want to place [frommob.name]([frommob.key]) in control of [tomob.name]?"
var/ask = alert(question, "Place ghost in control of mob?", "Yes", "No")
if (ask != "Yes")
if(ask != "Yes")
return 1
if(!frommob || !tomob) //make sure the mobs don't go away while we waited for a response
+9 -9
View File
@@ -615,7 +615,7 @@ var/list/admin_verbs_snpc = list(
var/message = input("What do you want the message to be?", "Make Sound") as text|null
if(!message)
return
for (var/mob/V in hearers(O))
for(var/mob/V in hearers(O))
V.show_message(message, 2)
log_admin("[key_name(usr)] made [O] at [O.x], [O.y], [O.z] make a sound")
message_admins("\blue [key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z] make a sound")
@@ -643,7 +643,7 @@ var/list/admin_verbs_snpc = list(
if(mob.control_object)
if(!msg)
return
for (var/mob/V in hearers(mob.control_object))
for(var/mob/V in hearers(mob.control_object))
V.show_message("<b>[mob.control_object.name]</b> says: \"" + msg + "\"", 2)
log_admin("[key_name(usr)] used oSay on [mob.control_object]: [msg]")
message_admins("[key_name_admin(usr)] used oSay on [mob.control_object]: [msg]")
@@ -857,14 +857,14 @@ var/list/admin_verbs_snpc = list(
return
var/list/jobs = list()
for (var/datum/job/J in job_master.occupations)
if (J.current_positions >= J.total_positions && J.total_positions != -1)
for(var/datum/job/J in job_master.occupations)
if(J.current_positions >= J.total_positions && J.total_positions != -1)
jobs += J.title
if (!jobs.len)
if(!jobs.len)
to_chat(usr, "There are no fully staffed jobs.")
return
var/job = input("Please select job slot to free", "Free Job Slot") as null|anything in jobs
if (job)
if(job)
job_master.FreeRole(job)
log_admin("[key_name(usr)] has freed a job slot for [job].")
message_admins("[key_name_admin(usr)] has freed a job slot for [job].")
@@ -878,7 +878,7 @@ var/list/admin_verbs_snpc = list(
prefs.toggles ^= CHAT_ATTACKLOGS
prefs.save_preferences(src)
if (prefs.toggles & CHAT_ATTACKLOGS)
if(prefs.toggles & CHAT_ATTACKLOGS)
to_chat(usr, "You now will get attack log messages")
else
to_chat(usr, "You now won't get attack log messages")
@@ -903,7 +903,7 @@ var/list/admin_verbs_snpc = list(
prefs.toggles ^= CHAT_DEBUGLOGS
prefs.save_preferences(src)
if (prefs.toggles & CHAT_DEBUGLOGS)
if(prefs.toggles & CHAT_DEBUGLOGS)
to_chat(usr, "You now will get debug log messages")
else
to_chat(usr, "You now won't get debug log messages")
@@ -933,7 +933,7 @@ var/list/admin_verbs_snpc = list(
var/confirm = alert("Are you sure you want to send the global message?", "Confirm Man Up Global", "Yes", "No")
if(confirm == "Yes")
for (var/mob/T as mob in mob_list)
for(var/mob/T as mob in mob_list)
to_chat(T, "<br><center><span class='notice'><b><font size=4>Man up.<br> Deal with it.</font></b><br>Move on.</span></center><br>")
T << 'sound/voice/ManUp1.ogg'
+4 -4
View File
@@ -4,12 +4,12 @@ var/appearanceban_runonce //Updates legacy bans with new info
var/appearance_keylist[0] //to store the keys
/proc/appearance_fullban(mob/M, reason)
if (!M || !M.key) return
if(!M || !M.key) return
appearance_keylist.Add(text("[M.ckey] ## [reason]"))
appearance_savebanfile()
/proc/appearance_client_fullban(ckey)
if (!ckey) return
if(!ckey) return
appearance_keylist.Add(text("[ckey]"))
appearance_savebanfile()
@@ -47,7 +47,7 @@ DEBUG
log_admin("Loading appearance_rank")
S["runonce"] >> appearanceban_runonce
if (!length(appearance_keylist))
if(!length(appearance_keylist))
appearance_keylist=list()
log_admin("appearance_keylist was empty")
else
@@ -86,7 +86,7 @@ DEBUG
/proc/appearance_remove(X)
for (var/i = 1; i <= length(appearance_keylist); i++)
for(var/i = 1; i <= length(appearance_keylist); i++)
if( findtext(appearance_keylist[i], "[X]") )
appearance_keylist.Remove(appearance_keylist[i])
appearance_savebanfile()
+71 -41
View File
@@ -1,38 +1,48 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
var/jobban_runonce // Updates legacy bans with new info
var/jobban_keylist[0] //to store the keys & ranks
var/jobban_keylist[0] // Linear list of jobban strings, kept around for the legacy system
var/jobban_assoclist[0] // Associative list, for efficiency
// Matches string-based jobbans into ckey, rank, and reason groups
var/regex/jobban_regex = regex("(\[\\S]+) - (\[^#]+\[^# ])(?: ## (.+))?")
/proc/jobban_assoc_insert(ckey, rank, reason)
if(!ckey || !rank)
return
if(!jobban_assoclist[ckey])
jobban_assoclist[ckey] = list()
jobban_assoclist[ckey][rank] = reason || "Reason Unspecified"
/proc/jobban_fullban(mob/M, rank, reason)
if (!M || !M.key) return
if(!M || !M.key)
return
jobban_keylist.Add(text("[M.ckey] - [rank] ## [reason]"))
jobban_savebanfile()
jobban_assoc_insert(M.ckey, rank, reason)
if(config.ban_legacy_system)
jobban_savebanfile()
/proc/jobban_client_fullban(ckey, rank)
if (!ckey || !rank) return
if(!ckey || !rank)
return
jobban_keylist.Add(text("[ckey] - [rank]"))
jobban_savebanfile()
jobban_assoc_insert(ckey, rank)
if(config.ban_legacy_system)
jobban_savebanfile()
//returns a reason if M is banned from rank, returns 0 otherwise
/proc/jobban_isbanned(mob/M, rank)
if(M && rank)
if(!M || !rank)
return 0
//if(_jobban_isbanned(M, rank)) return "Reason Unspecified" //for old jobban
if (guest_jobbans(rank))
if(config.guest_jobban && IsGuestKey(M.key))
return "Guest Job-ban"
// if(config.usewhitelist && !check_whitelist(M))
// return "Karma Job"
if(config.guest_jobban && guest_jobbans(rank))
if(IsGuestKey(M.key))
return "Guest Job-ban"
for (var/s in jobban_keylist)
if( findtext(s,"[M.ckey] - [rank]") == 1 )
var/startpos = findtext(s, "## ")+3
if(startpos && startpos<length(s))
var/text = copytext(s, startpos, 0)
if(text)
return text
return "Reason Unspecified"
return 0
if(jobban_assoclist[M.ckey])
return jobban_assoclist[M.ckey][rank]
else
return 0
/*
DEBUG
@@ -59,9 +69,15 @@ DEBUG
log_admin("Loading jobban_rank")
S["runonce"] >> jobban_runonce
if (!length(jobban_keylist))
if(!length(jobban_keylist))
jobban_keylist=list()
log_admin("jobban_keylist was empty")
for(var/s in jobban_keylist)
if(jobban_regex.Find(s))
jobban_assoc_insert(jobban_regex.group[1], jobban_regex.group[2], jobban_regex.group[3])
else
log_debug("Skipping malformed job ban: [s]")
else
if(!establish_db_connection())
log_to_dd("Database connection failed. Reverting to the legacy ban system.")
@@ -71,42 +87,56 @@ DEBUG
return
//Job permabans
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)")
query.Execute()
var/DBQuery/permabans = dbcon.NewQuery("SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)")
permabans.Execute()
// Job tempbans
var/DBQuery/tempbans = dbcon.NewQuery("SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()")
tempbans.Execute()
while(query.NextRow())
var/ckey = query.item[1]
var/job = query.item[2]
jobban_keylist.Add("[ckey] - [job]")
//Job tempbans
var/DBQuery/query1 = dbcon.NewQuery("SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()")
query1.Execute()
while(query1.NextRow())
var/ckey = query1.item[1]
var/job = query1.item[2]
while(TRUE)
var/ckey
var/job
if(permabans.NextRow())
ckey = permabans.item[1]
job = permabans.item[2]
else if(tempbans.NextRow())
ckey = tempbans.item[1]
job = tempbans.item[2]
else
break
jobban_keylist.Add("[ckey] - [job]")
jobban_assoc_insert(ckey, job)
/proc/jobban_savebanfile()
var/savefile/S=new("data/job_full.ban")
to_chat(S["keys[0]"], jobban_keylist)
S["keys[0]"] << jobban_keylist
/proc/jobban_unban(mob/M, rank)
jobban_remove("[M.ckey] - [rank]")
jobban_savebanfile()
/proc/jobban_unban_client(ckey, rank)
jobban_remove("[ckey] - [rank]")
/proc/ban_unban_log_save(var/formatted_log)
text2file(formatted_log,"data/ban_unban_log.txt")
/proc/jobban_remove(X)
for (var/i = 1; i <= length(jobban_keylist); i++)
for(var/i = 1; i <= length(jobban_keylist); i++)
if( findtext(jobban_keylist[i], "[X]") )
// This need to be here, instead of jobban_unban, due to direct calls to jobban_remove
if(jobban_regex.Find(X))
var/ckey = jobban_regex.group[1]
var/rank = jobban_regex.group[2]
if(jobban_assoclist[ckey] && jobban_assoclist[ckey][rank])
jobban_assoclist[ckey] -= rank
else
log_debug("Attempted to remove non-existent job ban: [X]")
else
log_debug("Failed to remove malformed job ban from associative list: [X]")
jobban_keylist.Remove(jobban_keylist[i])
jobban_savebanfile()
if(config.ban_legacy_system)
jobban_savebanfile()
return 1
return 0
+1 -1
View File
@@ -1,6 +1,6 @@
/var/create_mob_html = null
/datum/admins/proc/create_mob(var/mob/user)
if (!create_mob_html)
if(!create_mob_html)
var/mobjs = null
mobjs = jointext(typesof(/mob), ";")
create_mob_html = file2text('html/create_object.html')
+2 -2
View File
@@ -2,7 +2,7 @@ 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)
/datum/admins/proc/create_object(var/mob/user)
if (!create_object_html)
if(!create_object_html)
var/objectjs = null
objectjs = jointext(typesof(/obj), ";")
create_object_html = file2text('html/create_object.html')
@@ -14,7 +14,7 @@ var/list/create_object_forms = list(/obj, /obj/structure, /obj/machinery, /obj/e
var/path = input("Select the path of the object you wish to create.", "Path", /obj) in create_object_forms
var/html_form = create_object_forms[path]
if (!html_form)
if(!html_form)
var/objectjs = jointext(typesof(path), ";")
html_form = file2text('html/create_object.html')
html_form = replacetext(html_form, "null /* object types */", "\"[objectjs]\"")
+1 -1
View File
@@ -1,6 +1,6 @@
/var/create_turf_html = null
/datum/admins/proc/create_turf(var/mob/user)
if (!create_turf_html)
if(!create_turf_html)
var/turfjs = null
turfjs = jointext(typesof(/turf), ";")
create_turf_html = file2text('html/create_object.html')
-274
View File
@@ -1,274 +0,0 @@
var/savefile/Banlistjob
/proc/_jobban_isbanned(var/client/clientvar, var/rank)
if(!clientvar) return 1
ClearTempbansjob()
var/id = clientvar.computer_id
var/key = clientvar.ckey
if (guest_jobbans(rank))
if(config.guest_jobban && IsGuestKey(key))
return 1
Banlistjob.cd = "/base"
if (Banlistjob.dir.Find("[key][id][rank]"))
return 1
Banlistjob.cd = "/base"
for (var/A in Banlistjob.dir)
Banlistjob.cd = "/base/[A]"
if ((id == Banlistjob["id"] || key == Banlistjob["key"]) && rank == Banlistjob["rank"])
return 1
return 0
/proc/LoadBansjob()
Banlistjob = new("data/job_fullnew.bdb")
log_admin("Loading Banlistjob")
if (!length(Banlistjob.dir)) log_admin("Banlistjob is empty.")
if (!Banlistjob.dir.Find("base"))
log_admin("Banlistjob missing base dir.")
Banlistjob.dir.Add("base")
Banlistjob.cd = "/base"
else if (Banlistjob.dir.Find("base"))
Banlistjob.cd = "/base"
ClearTempbansjob()
return 1
/proc/ClearTempbansjob()
UpdateTime()
Banlistjob.cd = "/base"
for (var/A in Banlistjob.dir)
Banlistjob.cd = "/base/[A]"
//if (!Banlistjob["key"] || !Banlistjob["id"])
// RemoveBanjob(A, "full")
// log_admin("Invalid Ban.")
// message_admins("Invalid Ban.")
// continue
if (!Banlistjob["temp"]) continue
if (CMinutes >= Banlistjob["minutes"]) RemoveBanjob(A)
return 1
/proc/AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, rank)
UpdateTime()
var/bantimestamp
if (temp)
UpdateTime()
bantimestamp = CMinutes + minutes
if(rank == "Heads")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Personnel")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Captain")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
return 1
if(rank == "Security")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Warden")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Detective")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Security Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg")
return 1
if(rank == "Engineering")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Station Engineer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Life Support Specialist")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg")
return 1
if(rank == "Research")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Scientist")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
return 1
if(rank == "Medical")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Medical Doctor")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chemist")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg")
return 1
if(rank == "CE_Station_Engineer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Station Engineer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer")
return 1
if(rank == "CE_Atmospheric_Tech")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Life Support Specialist")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer")
return 1
if(rank == "CE_Shaft_Miner")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Shaft Miner")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer")
return 1
if(rank == "Chemist_RD_CMO")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chemist")
return 1
if(rank == "Geneticist_RD_CMO")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist")
return 1
if(rank == "MD_CMO")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Medical Doctor")
return 1
if(rank == "Scientist_RD")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Scientist")
return 1
if(rank == "AI_Cyborg")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "AI")
return 1
if(rank == "Detective_HoS")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Detective")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security")
return 1
if(rank == "Virologist_RD_CMO")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director")
AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Virologist")
return 1
Banlistjob.cd = "/base"
if ( Banlistjob.dir.Find("[ckey][computerid][rank]") )
to_chat(usr, text("\red Banjob already exists."))
return 0
else
Banlistjob.dir.Add("[ckey][computerid][rank]")
Banlistjob.cd = "/base/[ckey][computerid][rank]"
to_chat(Banlistjob["key"], ckey)
to_chat(Banlistjob["id"], computerid)
to_chat(Banlistjob["rank"], rank)
to_chat(Banlistjob["reason"], reason)
to_chat(Banlistjob["bannedby"], bannedby)
to_chat(Banlistjob["temp"], temp)
if (temp)
to_chat(Banlistjob["minutes"], bantimestamp)
return 1
/proc/RemoveBanjob(foldername)
var/key
var/id
var/rank
Banlistjob.cd = "/base/[foldername]"
Banlistjob["key"] >> key
Banlistjob["id"] >> id
Banlistjob["rank"] >> rank
Banlistjob.cd = "/base"
if (!Banlistjob.dir.Remove(foldername)) return 0
if(!usr)
log_admin("Banjob Expired: [key]")
message_admins("Banjob Expired: [key]")
else
log_admin("[key_name_admin(usr)] unjobbanned [key] from [rank]")
message_admins("[key_name_admin(usr)] unjobbanned:[key] from [rank]")
ban_unban_log_save("[key_name_admin(usr)] unjobbanned [key] from [rank]")
feedback_inc("ban_job_unban",1)
feedback_add_details("ban_job_unban","- [rank]")
for (var/A in Banlistjob.dir)
Banlistjob.cd = "/base/[A]"
if ((key == Banlistjob["key"] || id == Banlistjob["id"]) && (rank == Banlistjob["rank"]))
Banlistjob.cd = "/base"
Banlistjob.dir.Remove(A)
continue
return 1
/proc/GetBanExpjob(minutes as num)
UpdateTime()
var/exp = minutes - CMinutes
if (exp <= 0)
return 0
else
var/timeleftstring
if (exp >= 1440) //1440 = 1 day in minutes
timeleftstring = "[round(exp / 1440, 0.1)] Days"
else if (exp >= 60) //60 = 1 hour in minutes
timeleftstring = "[round(exp / 60, 0.1)] Hours"
else
timeleftstring = "[exp] Minutes"
return timeleftstring
/datum/admins/proc/unjobbanpanel()
var/count = 0
var/dat
//var/dat = "<HR><B>Unban Player:</B> \blue(U) = Unban , (E) = Edit Ban\green (Total<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >"
Banlistjob.cd = "/base"
for (var/A in Banlistjob.dir)
count++
Banlistjob.cd = "/base/[A]"
dat += text("<tr><td><A href='?src=\ref[src];unjobbanf=[Banlistjob["key"]][Banlistjob["id"]][Banlistjob["rank"]]'>(U)</A> Key: <B>[Banlistjob["key"]] </B>Rank: <B>[Banlistjob["rank"]]</B></td><td> ([Banlistjob["temp"] ? "[GetBanExpjob(Banlistjob["minutes"]) ? GetBanExpjob(Banlistjob["minutes"]) : "Removal pending" ]" : "Permaban"])</td><td>(By: [Banlistjob["bannedby"]])</td><td>(Reason: [Banlistjob["reason"]])</td></tr>")
dat += "</table>"
dat = "<HR><B>Bans:</B> <FONT COLOR=blue>(U) = Unban , </FONT> - <FONT COLOR=green>([count] Bans)</FONT><HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >[dat]"
usr << browse(dat, "window=unbanp;size=875x400")
/*/datum/admins/proc/permjobban(ckey, computerid, reason, bannedby, temp, minutes, rank)
if(AddBanjob(ckey, computerid, reason, usr.ckey, 0, 0, job))
to_chat(M, "\red<BIG><B>You have been banned from [job] by [usr.client.ckey].\nReason: [reason].</B></BIG>")
to_chat(M, "\red This is a permanent ban.")
if(config.banappeals)
to_chat(M, "\red To try to resolve this matter head to [config.banappeals]")
else
to_chat(M, "\red No ban appeals URL has been set.")
log_admin("[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("\blue[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.")
/datum/admins/proc/timejobban(ckey, computerid, reason, bannedby, temp, minutes, rank)
if(AddBanjob(ckey, computerid, reason, usr.ckey, 1, mins, job))
to_chat(M, "\red<BIG><B>You have been jobbanned from [job] by [usr.client.ckey].\nReason: [reason].</B></BIG>")
to_chat(M, "\red This is a temporary ban, it will be removed in [mins] minutes.")
if(config.banappeals)
to_chat(M, "\red To try to resolve this matter head to [config.banappeals]")
else
to_chat(M, "\red No ban appeals URL has been set.")
log_admin("[usr.client.ckey] has jobbanned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("\blue[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")*/
//////////////////////////////////// DEBUG ////////////////////////////////////
/proc/CreateBansjob()
UpdateTime()
var/i
var/last
for(i=0, i<1001, i++)
var/a = pick(1,0)
var/b = pick(1,0)
if(b)
Banlistjob.cd = "/base"
Banlistjob.dir.Add("trash[i]trashid[i]")
Banlistjob.cd = "/base/trash[i]trashid[i]"
to_chat(Banlistjob["key"], "trash[i]")
else
Banlistjob.cd = "/base"
Banlistjob.dir.Add("[last]trashid[i]")
Banlistjob.cd = "/base/[last]trashid[i]"
to_chat(Banlistjob["key"], last)
to_chat(Banlistjob["id"], "trashid[i]")
to_chat(Banlistjob["reason"], "Trashban[i].")
to_chat(Banlistjob["temp"], a)
to_chat(Banlistjob["minutes"], CMinutes + rand(1,2000))
to_chat(Banlistjob["bannedby"], "trashmin")
last = "trash[i]"
Banlistjob.cd = "/base"
/proc/ClearAllBansjob()
Banlistjob.cd = "/base"
for (var/A in Banlistjob.dir)
RemoveBanjob(A, "full")
@@ -156,7 +156,7 @@
/datum/admins/proc/updateranktodb(ckey,newrank)
establish_db_connection()
if (!dbcon.IsConnected())
if(!dbcon.IsConnected())
return
var/sql_ckey = sanitizeSQL(ckey)
var/sql_admin_rank = sanitizeSQL(newrank)
+8 -8
View File
@@ -1,6 +1,6 @@
/datum/admins/proc/player_panel_new()//The new one
if (!usr.client.holder)
if(!usr.client.holder)
return
var/dat = "<html><head><title>Admin Player Panel</title></head>"
@@ -29,7 +29,7 @@
var maintable_data = document.getElementById('maintable_data');
var ltr = maintable_data.getElementsByTagName("tr");
for ( var i = 0; i < ltr.length; ++i )
for( var i = 0; i < ltr.length; ++i )
{
try{
var tr = ltr\[i\];
@@ -42,7 +42,7 @@
var search = lsearch\[0\];
//var inner_span = li.getElementsByTagName("span")\[1\] //Should only ever contain one element.
//document.write("<p>"+search.innerText+"<br>"+filter+"<br>"+search.innerText.indexOf(filter))
if ( search.innerText.toLowerCase().indexOf(filter) == -1 )
if( search.innerText.toLowerCase().indexOf(filter) == -1 )
{
//document.write("a");
//ltr.removeChild(tr);
@@ -332,7 +332,7 @@
//The old one
/datum/admins/proc/player_panel_old()
if (!usr.client.holder)
if(!usr.client.holder)
return
var/dat = "<html><head><title>Player Menu</title></head>"
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name</th><th>Real Name</th><th>Assigned Job</th><th>Key</th><th>Options</th><th>PM</th><th>Traitor?</th></tr></B>"
@@ -406,10 +406,10 @@
/datum/admins/proc/check_antagonists()
if(!check_rights(R_ADMIN)) return
if (ticker && ticker.current_state >= GAME_STATE_PLAYING)
if(ticker && ticker.current_state >= GAME_STATE_PLAYING)
var/dat = "<html><head><title>Round Status</title></head><body><h1><B>Round Status</B></h1>"
dat += "Current Game Mode: <B>[ticker.mode.name]</B><BR>"
dat += "Round Duration: <B>[round(world.time / 36000)]:[add_zero(num2text(world.time / 600 % 60), 2)]:[add_zero(num2text(world.time / 10 % 60), 2)]</B><BR>"
dat += "Round Duration: <B>[round(ROUND_TIME / 36000)]:[add_zero(num2text(ROUND_TIME / 600 % 60), 2)]:[add_zero(num2text(ROUND_TIME / 10 % 60), 2)]</B><BR>"
dat += "<B>Emergency shuttle</B><BR>"
if(shuttle_master.emergency.mode < SHUTTLE_CALL)
dat += "<a href='?src=\ref[src];call_shuttle=1'>Call Shuttle</a><br>"
@@ -547,12 +547,12 @@
return txt
/datum/admins/proc/check_role_table_row(mob/M, show_objectives)
if (!istype(M))
if(!istype(M))
return "<tr><td><i>Not found!</i></td></tr>"
var/txt = check_antagonists_line(M, close = 0)
if (show_objectives)
if(show_objectives)
txt += {"
<td>
<a href='?src=\ref[src];traitor=\ref[M]'>Show Objective</a>
+3 -3
View File
@@ -14,7 +14,7 @@
dat += "</center>"
dat += "<HR>"
switch(current_tab)
if (0) // Debug
if(0) // Debug
if(check_rights(R_ADMIN,0))
dat += {"
<center><B><h2>Admin Secrets</h2></B>
@@ -67,7 +67,7 @@
</center>
"}
if (1)
if(1)
if(check_rights((R_EVENT|R_SERVER),0))
dat += {"
<center>
@@ -86,7 +86,7 @@
<BR>
</center>"}
if (2)
if(2)
if(check_rights((R_SERVER|R_EVENT),0))
dat += {"
<center>
+1 -1
View File
@@ -33,7 +33,7 @@
return
var/admin_sql_ckey = sanitizeSQL(adminckey)
if(!server)
if (config && config.server_name)
if(config && config.server_name)
server = config.server_name
server = sanitizeSQL(server)
var/DBQuery/query_noteadd = dbcon.NewQuery("INSERT INTO [format_table_name("notes")] (ckey, timestamp, notetext, adminckey, server) VALUES ('[target_sql_ckey]', '[timestamp]', '[notetext]', '[admin_sql_ckey]', '[server]')")
+42 -42
View File
@@ -2,32 +2,32 @@
if(!check_rights(R_BAN))
return
switch (action)
if ("show")
switch(action)
if("show")
stickyban_show()
return
if ("add")
if("add")
var/list/ban = list()
var/ckey
ban["admin"] = usr.key
ban["type"] = list("sticky")
ban["reason"] = "(InGameBan)([usr.key])" //this will be displayed in dd only
if (data["ckey"])
if(data["ckey"])
ckey = ckey(data["ckey"])
else
ckey = input(usr,"Ckey","Ckey","") as text|null
if (!ckey)
if(!ckey)
return
ckey = ckey(ckey)
if (get_stickyban_from_ckey(ckey))
if(get_stickyban_from_ckey(ckey))
to_chat(usr, "<span class='adminnotice'>Error: Can not add a stickyban: User already has a current sticky ban</span>")
if (data["reason"])
if(data["reason"])
ban["message"] = data["reason"]
else
var/reason = input(usr,"Reason","Reason","Ban Evasion") as text|null
if (!reason)
if(!reason)
return
ban["message"] = "[reason]"
@@ -36,18 +36,18 @@
log_admin("[key_name(usr)] has stickybanned [ckey].\nReason: [ban["message"]]")
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has stickybanned [ckey].\nReason: [ban["message"]]</span>")
if ("remove")
if (!data["ckey"])
if("remove")
if(!data["ckey"])
return
var/ckey = data["ckey"]
var/ban = get_stickyban_from_ckey(ckey)
if (!ban)
if(!ban)
to_chat(usr, "<span class='adminnotice'>Error: No sticky ban for [ckey] found!</span>")
return
if (alert("Are you sure you want to remove the sticky ban on [ckey]?","Are you sure","Yes","No") == "No")
if(alert("Are you sure you want to remove the sticky ban on [ckey]?","Are you sure","Yes","No") == "No")
return
if (!get_stickyban_from_ckey(ckey))
if(!get_stickyban_from_ckey(ckey))
to_chat(usr, "<span class='adminnotice'>Error: The ban disappeared.</span>")
return
world.SetConfig("ban", ckey, null)
@@ -55,46 +55,46 @@
log_admin("[key_name(usr)] removed [ckey]'s stickyban")
message_admins("<span class='adminnotice'>[key_name_admin(usr)] removed [ckey]'s stickyban</span>")
if ("remove_alt")
if (!data["ckey"])
if("remove_alt")
if(!data["ckey"])
return
var/ckey = data["ckey"]
if (!data["alt"])
if(!data["alt"])
return
var/alt = ckey(data["alt"])
var/ban = get_stickyban_from_ckey(ckey)
if (!ban)
if(!ban)
to_chat(usr, "<span class='adminnotice'>Error: No sticky ban for [ckey] found!</span>")
return
var/found = 0
//we have to do it this way because byond keeps the case in its sticky ban matches WHY!!!
for (var/key in ban["keys"])
if (ckey(key) == alt)
for(var/key in ban["keys"])
if(ckey(key) == alt)
found = 1
break
if (!found)
if(!found)
to_chat(usr, "<span class='adminnotice'>Error: [alt] is not linked to [ckey]'s sticky ban!</span>")
return
if (alert("Are you sure you want to disassociate [alt] from [ckey]'s sticky ban? \nNote: Nothing stops byond from re-linking them","Are you sure","Yes","No") == "No")
if(alert("Are you sure you want to disassociate [alt] from [ckey]'s sticky ban? \nNote: Nothing stops byond from re-linking them","Are you sure","Yes","No") == "No")
return
//we have to do this again incase something changes
ban = get_stickyban_from_ckey(ckey)
if (!ban)
if(!ban)
to_chat(usr, "<span class='adminnotice'>Error: The ban disappeared.</span>")
return
found = 0
for (var/key in ban["keys"])
if (ckey(key) == alt)
for(var/key in ban["keys"])
if(ckey(key) == alt)
ban["keys"] -= key
found = 1
break
if (!found)
if(!found)
to_chat(usr, "<span class='adminnotice'>Error: [alt] link to [ckey]'s sticky ban disappeared.</span>")
return
@@ -103,21 +103,21 @@
log_admin("[key_name(usr)] has disassociated [alt] from [ckey]'s sticky ban")
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has disassociated [alt] from [ckey]'s sticky ban</span>")
if ("edit")
if (!data["ckey"])
if("edit")
if(!data["ckey"])
return
var/ckey = data["ckey"]
var/ban = get_stickyban_from_ckey(ckey)
if (!ban)
if(!ban)
to_chat(usr, "<span class='adminnotice'>Error: No sticky ban for [ckey] found!")
return
var/oldreason = ban["message"]
var/reason = input(usr,"Reason","Reason","[ban["message"]]") as text|null
if (!reason || reason == oldreason)
if(!reason || reason == oldreason)
return
//we have to do this again incase something changed while we waited for input
ban = get_stickyban_from_ckey(ckey)
if (!ban)
if(!ban)
to_chat(usr, "<span class='adminnotice'>Error: The ban disappeared.</span>")
return
ban["message"] = "[reason]"
@@ -133,13 +133,13 @@
/datum/admins/proc/stickyban_gethtml(ckey, ban)
. = "<a href='?_src_=holder;stickyban=remove&ckey=[ckey]'>\[-\]</a><b>[ckey]</b><br />"
. += "[ban["message"]] <b><a href='?_src_=holder;stickyban=edit&ckey=[ckey]'>\[Edit\]</a></b><br />"
if (ban["admin"])
if(ban["admin"])
. += "[ban["admin"]]<br />"
else
. += "LEGACY<br />"
. += "Caught keys<br />\n<ol>"
for (var/key in ban["keys"])
if (ckey(key) == ckey)
for(var/key in ban["keys"])
if(ckey(key) == ckey)
continue
. += "<li><a href='?_src_=holder;stickyban=remove_alt&ckey=[ckey]&alt=[ckey(key)]'>\[-\]</a>[key]</li>"
. += "</ol>\n"
@@ -168,17 +168,17 @@
usr << browse(html,"window=stickybans;size=700x400")
/proc/get_stickyban_from_ckey(var/ckey)
if (!ckey)
if(!ckey)
return null
ckey = ckey(ckey)
. = null
for (var/key in world.GetConfig("ban"))
if (ckey(key) == ckey)
for(var/key in world.GetConfig("ban"))
if(ckey(key) == ckey)
. = stickyban2list(world.GetConfig("ban",key))
break
/proc/stickyban2list(var/ban)
if (!ban)
if(!ban)
return null
. = params2list(ban)
.["keys"] = splittext(.["keys"], ",")
@@ -187,16 +187,16 @@
.["computer_id"] = splittext(.["computer_id"], ",")
/proc/list2stickyban(var/list/ban)
if (!ban || !islist(ban))
if(!ban || !islist(ban))
return null
. = ban.Copy()
if (.["keys"])
if(.["keys"])
.["keys"] = jointext(.["keys"], ",")
if (.["type"])
if(.["type"])
.["type"] = jointext(.["type"], ",")
if (.["IP"])
if(.["IP"])
.["IP"] = jointext(.["IP"], ",")
if (.["computer_id"])
if(.["computer_id"])
.["computer_id"] = jointext(.["computer_id"], ",")
. = list2params(.)
+67 -63
View File
@@ -877,7 +877,7 @@
else if(href_list["boot2"])
var/mob/M = locate(href_list["boot2"])
if (ismob(M))
if(ismob(M))
if(!check_if_greater_rights_than(M.client))
return
to_chat(M, "\red You have been kicked from the server")
@@ -1094,7 +1094,7 @@
else if(href_list["c_mode2"])
if(!check_rights(R_ADMIN|R_SERVER)) return
if (ticker && ticker.mode)
if(ticker && ticker.mode)
return alert(usr, "The game has already started.", null, null, null, null)
master_mode = href_list["c_mode2"]
log_admin("[key_name(usr)] set the mode as [master_mode].")
@@ -1124,7 +1124,7 @@
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
if(alert(usr, "Confirm make monkey?", "Yes", "No") != "Yes")
if(alert(usr, "Confirm make monkey?",, "Yes", "No") != "Yes")
return
log_admin("[key_name(usr)] attempting to monkeyize [key_name(H)]")
@@ -1140,7 +1140,7 @@
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
if(alert(usr, "Confirm make corgi?", "Yes", "No") != "Yes")
if(alert(usr, "Confirm make corgi?",, "Yes", "No") != "Yes")
return
log_admin("[key_name(usr)] attempting to corgize [key_name(H)]")
@@ -1154,7 +1154,7 @@
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
if(alert(usr, "Confirm make pai?", "Yes", "No") != "Yes")
if(alert(usr, "Confirm make pai?",, "Yes", "No") != "Yes")
return
var/painame = "Default"
@@ -1414,7 +1414,7 @@
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
if(alert(usr, "Confirm make ai?", "Yes", "No") != "Yes")
if(alert(usr, "Confirm make ai?",, "Yes", "No") != "Yes")
return
message_admins("\red Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!", 1)
@@ -1425,7 +1425,7 @@
else if(href_list["makemask"])
if(!check_rights(R_SPAWN)) return
if(alert(usr, "Confirm make mask?", "Yes", "No") != "Yes")
if(alert(usr, "Confirm make mask?",, "Yes", "No") != "Yes")
return
var/mob/currentMob = locate(href_list["makemask"])
@@ -1441,7 +1441,7 @@
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
if(alert(usr, "Confirm make alien?", "Yes", "No") != "Yes")
if(alert(usr, "Confirm make alien?",, "Yes", "No") != "Yes")
return
usr.client.cmd_admin_alienize(H)
@@ -1453,7 +1453,7 @@
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
if(alert(usr, "Confirm make slime?", "Yes", "No") != "Yes")
if(alert(usr, "Confirm make slime?",, "Yes", "No") != "Yes")
return
usr.client.cmd_admin_slimeize(H)
@@ -1466,7 +1466,7 @@
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
if(alert(usr, "Confirm make superhero?", "Yes", "No") != "Yes")
if(alert(usr, "Confirm make superhero?",, "Yes", "No") != "Yes")
return
usr.client.cmd_admin_super(H)
@@ -1478,7 +1478,7 @@
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
if(alert(usr, "Confirm make robot?", "Yes", "No") != "Yes")
if(alert(usr, "Confirm make robot?",, "Yes", "No") != "Yes")
return
usr.client.cmd_admin_robotize(H)
@@ -1490,7 +1490,7 @@
if(istype(M, /mob/new_player))
to_chat(usr, "This cannot be used on instances of type /mob/new_player")
return
if(alert(usr, "Confirm make animal?", "Yes", "No") != "Yes")
if(alert(usr, "Confirm make animal?",, "Yes", "No") != "Yes")
return
usr.client.cmd_admin_animalize(M)
@@ -1592,10 +1592,10 @@
if(isliving(M))
var/mob/living/L = M
var/status
switch (M.stat)
if (0) status = "Alive"
if (1) status = "<font color='orange'><b>Unconscious</b></font>"
if (2) status = "<font color='red'><b>Dead</b></font>"
switch(M.stat)
if(0) status = "Alive"
if(1) status = "<font color='orange'><b>Unconscious</b></font>"
if(2) status = "<font color='red'><b>Dead</b></font>"
health_description = "Status = [status]"
health_description += "<BR>Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getBrainLoss()]"
else
@@ -1707,7 +1707,7 @@
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
var/etypes = list("borging","corgifying","firedeath","braindeath","honktumor","demotion")
var/etypes = list("Borgification","Corgification","Death By Fire","Total Brain Death","Honk Tumor","Demotion Notice")
var/eviltype = input(src.owner, "Which type of evil fax do you wish to send [H]?","Its good to be baaaad...", "") as null|anything in etypes
if(!(eviltype in etypes))
return
@@ -1718,7 +1718,7 @@
var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"])
P.name = "Central Command - [customname]"
P.info = "<b>A reminder: per the terms of your contract, stupid faxes will get you demoted, or worse.</b>"
P.info = "<b>You <i>really</i> should've known better.</b>"
P.myeffect = eviltype
P.mytarget = H
if(alert("Do you want the Evil Fax to activate automatically if [H] tries to ignore it?",,"Yes", "No") == "Yes")
@@ -1758,19 +1758,23 @@
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(null)
var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"])
P.name = "Central Command - paper"
var/stypes = list("handle it yourself","illegible","not signed","sorry, not right now","stop wasting our time")
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")
var/stype = input(src.owner, "Which type of standard reply do you wish to send to [H]?","Choose your paperwork", "") as null|anything in stypes
var/tmsg = "<font face='Verdana' color='black'><center><img src = 'ntlogo.png'><BR><BR><BR><font size='4'><B>NanoTrasen Science Station Cyberiad</B></font><BR><BR><BR><font size='4'>NAS Trurl Communications Department Report</font></center><BR><BR>"
if(stype == "handle it yourself")
tmsg += "Greetings, esteemed crewmember. Your fax has been <B><I>DECLINED</I></B> automatically by NAS Trurl Fax Registration.<BR><BR>Please proceed in accordance with Standard Operating Procedure and/or Space Law. You are fully trained to handle this situation without Central Command intervention."
else if(stype == "illegible")
tmsg += "Greetings, esteemed crewmember. Your fax has been <B><I>DECLINED</I></B> automatically by NAS Trurl Fax Registration.<BR><BR>Your fax was too poorly written for our system to interpret."
else if(stype == "not signed")
tmsg += "Greetings, esteemed crewmember. Your fax has been <B><I>DECLINED</I></B> automatically by NAS Trurl Fax Registration.<BR><BR>Your fax was not properly signed and/or stamped."
else if(stype == "sorry, not right now")
tmsg += "Greetings, esteemed crewmember. Unfortunately, we are unable to spare the resources to assist you at this time."
else if(stype == "stop wasting our time")
tmsg += "Stop wasting our time."
if(stype == "Handle it yourselves!")
tmsg += "Greetings, esteemed crewmember. Your fax has been <B><I>DECLINED</I></B> automatically by NAS Trurl Fax Registration.<BR><BR>Please proceed in accordance with Standard Operating Procedure and/or Space Law. You are fully trained to handle this situation without Central Command intervention.<BR><BR><i><small>This is an automatic message.</small>"
else if(stype == "Illegible fax")
tmsg += "Greetings, esteemed crewmember. Your fax has been <B><I>DECLINED</I></B> automatically by NAS Trurl Fax Registration.<BR><BR>Your fax's grammar, syntax and/or typography are of a sub-par level and do not allow us to understand the contents of the message.<BR><BR>Please consult your nearest dictionary and/or thesaurus and try again.<BR><BR><i><small>This is an automatic message.</small>"
else if(stype == "Fax not signed")
tmsg += "Greetings, esteemed crewmember. Your fax has been <B><I>DECLINED</I></B> automatically by NAS Trurl Fax Registration.<BR><BR>Your fax has not been correctly signed and, as such, we cannot verify your identity.<BR><BR>Please sign your faxes before sending them so that we may verify your identity.<BR><BR><i><small>This is an automatic message.</small>"
else if(stype == "Not Right Now")
tmsg += "Greetings, esteemed crewmember. Your fax has been <B><I>DECLINED</I></B> automatically by NAS Trurl Fax Registration.<BR><BR>Due to pressing concerns of a matter above your current paygrade, we are unable to provide assistance in whatever matter your fax referenced.<BR><BR>This can be either due to a power outage, bureaucratic audit, pest infestation, Ascendance Event, corgi outbreak, or any other situation that would affect the proper functioning of the NAS Trurl.<BR><BR>Please try again later.<BR><BR><i><small>This is an automatic message.</small>"
else if(stype == "You are wasting our time")
tmsg += "Greetings, esteemed crewmember. Your fax has been <B><I>DECLINED</I></B> automatically by NAS Trurl Fax Registration.<BR><BR>In the interest of preventing further mismanagement of company resources, please avoid wasting our time with such petty drivel.<BR><BR>Do kindly remember that we expect our workforce to maintain at least a semi-decent level of profesionalism. Do not test our patience.<BR><BR><i><small>This is an automatic message.</i></small>"
else if(stype == "Keep up the good work")
tmsg += "Greetings, esteemed crewmember. Your fax has been received successfully by NAS Trurl Fax Registration.<BR><BR>We at the NAS Trurl appreciate the good work that you have done here, and sincerely recommend that you continue such a display of dedication to the company.<BR><BR><i><small>This is absolutely not an automated message.</i></small>"
else if(stype == "ERT Instructions")
tmsg += "Greetings, esteemed crewmember. Your fax has been <B><I>DECLINED</I></B> automatically by NAS Trurl Fax Registration.<BR><BR>Please utilize the Card Swipers if you wish to call for an ERT.<BR><BR><i><small>This is an automated message.</i></small>"
else
return
tmsg += "</font>"
@@ -1854,7 +1858,7 @@
var/input = input(src.owner, "Please enter a reason for denying [key_name(H)]'s ERT request.","Outgoing message from CentComm", "")
if(!input) return
ert_request_answered = 1
to_chat(src.owner, "You sent [input] to [H] via a secure channel.")
log_admin("[src.owner] denied [key_name(H)]'s ERT request with the message [input].")
to_chat(H, "You hear something crackle in your headset for a moment before a voice speaks. \"Your ERT request has been denied for the following reasons: [input]. Message ends.\"")
@@ -1867,19 +1871,19 @@
return
var/obj/item/fax = locate(href_list["AdminFaxView"])
if (istype(fax, /obj/item/weapon/paper))
if(istype(fax, /obj/item/weapon/paper))
var/obj/item/weapon/paper/P = fax
P.show_content(usr,1)
else if (istype(fax, /obj/item/weapon/photo))
else if(istype(fax, /obj/item/weapon/photo))
var/obj/item/weapon/photo/H = fax
H.show(usr)
else if (istype(fax, /obj/item/weapon/paper_bundle))
else if(istype(fax, /obj/item/weapon/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
for (var/page = 1, page <= B.amount + 1, page++)
for(var/page = 1, page <= B.amount + 1, page++)
var/obj/pageobj = B.contents[page]
data += "<A href='?src=\ref[src];AdminFaxViewPage=[page];paper_bundle=\ref[B]'>Page [page] - [pageobj.name]</A><BR>"
@@ -1887,19 +1891,19 @@
else
to_chat(usr, "\red The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]")
else if (href_list["AdminFaxViewPage"])
else if(href_list["AdminFaxViewPage"])
if(!check_rights(R_ADMIN))
return
var/page = text2num(href_list["AdminFaxViewPage"])
var/obj/item/weapon/paper_bundle/bundle = locate(href_list["paper_bundle"])
if (!bundle) return
if(!bundle) return
if (istype(bundle.contents[page], /obj/item/weapon/paper))
if(istype(bundle.contents[page], /obj/item/weapon/paper))
var/obj/item/weapon/paper/P = bundle.contents[page]
P.show_content(usr, 1)
else if (istype(bundle.contents[page], /obj/item/weapon/photo))
else if(istype(bundle.contents[page], /obj/item/weapon/photo))
var/obj/item/weapon/photo/H = bundle.contents[page]
H.show(usr)
return
@@ -2124,9 +2128,9 @@
var/atom/loc = usr.loc
var/dirty_paths
if (istext(href_list["object_list"]))
if(istext(href_list["object_list"]))
dirty_paths = list(href_list["object_list"])
else if (istype(href_list["object_list"], /list))
else if(istype(href_list["object_list"], /list))
dirty_paths = href_list["object_list"]
var/paths = list()
@@ -2160,22 +2164,22 @@
var/atom/target //Where the object will be spawned
var/where = href_list["object_where"]
if (!( where in list("onfloor","inhand","inmarked") ))
if(!( where in list("onfloor","inhand","inmarked") ))
where = "onfloor"
switch(where)
if("inhand")
if (!iscarbon(usr) && !isrobot(usr))
if(!iscarbon(usr) && !isrobot(usr))
to_chat(usr, "Can only spawn in hand when you're a carbon mob or cyborg.")
where = "onfloor"
target = usr
if("onfloor")
switch(href_list["offset_type"])
if ("absolute")
if("absolute")
target = locate(0 + X,0 + Y,0 + Z)
if ("relative")
if("relative")
target = locate(loc.x + X,loc.y + Y,loc.z + Z)
if("inmarked")
if(!marked_datum)
@@ -2188,8 +2192,8 @@
target = marked_datum
if(target)
for (var/path in paths)
for (var/i = 0; i < number; i++)
for(var/path in paths)
for(var/i = 0; i < number; i++)
if(path in typesof(/turf))
var/turf/O = target
var/turf/N = O.ChangeTurf(path)
@@ -2217,7 +2221,7 @@
R.activate_module(I)
R.module.fix_modules()
if (number == 1)
if(number == 1)
log_admin("[key_name(usr)] created a [english_list(paths)]")
for(var/path in paths)
if(ispath(path, /mob))
@@ -2287,7 +2291,7 @@
/* for(var/obj/machinery/vehicle/pod/O in world)
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
if(M.client)
M.client.perspective = MOB_PERSPECTIVE
M.client.eye = M
qdel(O)
@@ -2385,9 +2389,9 @@
continue
//don't strip organs
H.unEquip(W)
if (H.client)
if(H.client)
H.client.screen -= W
if (W)
if(W)
W.loc = H.loc
W.dropped(H)
W.layer = initial(W.layer)
@@ -2439,9 +2443,9 @@
feedback_add_details("admin_secrets_fun_used","BC")
var/newBombCap = input(usr,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be between 4 and 128)", "New Bomb Cap", MAX_EX_LIGHT_RANGE) as num|null
if (newBombCap < 4)
if(newBombCap < 4)
return
if (newBombCap > 128)
if(newBombCap > 128)
newBombCap = 128
MAX_EX_DEVESTATION_RANGE = round(newBombCap/4)
@@ -2728,7 +2732,7 @@
if(usr)
log_admin("[key_name(usr)] used secret [href_list["secretsfun"]]")
if (ok)
if(ok)
to_chat(world, text("<B>A secret has been activated by []!</B>", usr.key))
else if(href_list["secretsadmin"])
@@ -2768,7 +2772,7 @@
if("showgm")
if(!ticker)
alert("The game hasn't started yet!")
else if (ticker.mode)
else if(ticker.mode)
alert("The game mode is [ticker.mode.name]")
else alert("For some reason there's a ticker, but not a game mode")
if("manifest")
@@ -2803,9 +2807,9 @@
dat += "</table>"
usr << browse(dat, "window=fingerprints;size=440x410")
else
if (usr)
if(usr)
log_admin("[key_name(usr)] used secret [href_list["secretsadmin"]]")
if (ok)
if(ok)
to_chat(world, text("<B>A secret has been activated by []!</B>", usr.key))
else if(href_list["secretscoder"])
@@ -2821,12 +2825,12 @@
usr << browse(dat, "window=admin_log")
if("maint_access_brig")
for(var/obj/machinery/door/airlock/maintenance/M in world)
if (access_maint_tunnels in M.req_access)
if(access_maint_tunnels in M.req_access)
M.req_access = list(access_brig)
message_admins("[key_name_admin(usr)] made all maint doors brig access-only.")
if("maint_access_engiebrig")
for(var/obj/machinery/door/airlock/maintenance/M in world)
if (access_maint_tunnels in M.req_access)
if(access_maint_tunnels in M.req_access)
M.req_access = list()
M.req_one_access = list(access_brig,access_engine)
message_admins("[key_name_admin(usr)] made all maint doors engineering and brig access-only.")
@@ -2843,7 +2847,7 @@
else if(href_list["ac_set_channel_name"])
src.admincaster_feed_channel.channel_name = strip_html_simple(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", ""))
while (findtext(src.admincaster_feed_channel.channel_name," ") == 1)
while(findtext(src.admincaster_feed_channel.channel_name," ") == 1)
src.admincaster_feed_channel.channel_name = copytext(src.admincaster_feed_channel.channel_name,2,lentext(src.admincaster_feed_channel.channel_name)+1)
src.access_news_network()
@@ -2882,7 +2886,7 @@
else if(href_list["ac_set_new_message"])
src.admincaster_feed_message.body = adminscrub(input(usr, "Write your Feed story", "Network Channel Handler", ""))
while (findtext(src.admincaster_feed_message.body," ") == 1)
while(findtext(src.admincaster_feed_message.body," ") == 1)
src.admincaster_feed_message.body = copytext(src.admincaster_feed_message.body,2,lentext(src.admincaster_feed_message.body)+1)
src.access_news_network()
@@ -2936,13 +2940,13 @@
else if(href_list["ac_set_wanted_name"])
src.admincaster_feed_message.author = adminscrub(input(usr, "Provide the name of the Wanted person", "Network Security Handler", ""))
while (findtext(src.admincaster_feed_message.author," ") == 1)
while(findtext(src.admincaster_feed_message.author," ") == 1)
src.admincaster_feed_message.author = copytext(admincaster_feed_message.author,2,lentext(admincaster_feed_message.author)+1)
src.access_news_network()
else if(href_list["ac_set_wanted_desc"])
src.admincaster_feed_message.body = adminscrub(input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler", ""))
while (findtext(src.admincaster_feed_message.body," ") == 1)
while(findtext(src.admincaster_feed_message.body," ") == 1)
src.admincaster_feed_message.body = copytext(src.admincaster_feed_message.body,2,lentext(src.admincaster_feed_message.body)+1)
src.access_news_network()
@@ -3025,7 +3029,7 @@
else if(href_list["ac_setScreen"]) //Brings us to the main menu and resets all fields~
src.admincaster_screen = text2num(href_list["ac_setScreen"])
if (src.admincaster_screen == 0)
if(src.admincaster_screen == 0)
if(src.admincaster_feed_channel)
src.admincaster_feed_channel = new /datum/feed_channel
if(src.admincaster_feed_message)
+2 -2
View File
@@ -412,7 +412,7 @@
else if(expression[start + 1] == "\[" && islist(v))
var/list/L = v
var/index = SDQL_expression(source, expression[start + 2])
if (isnum(index) && (!IsInteger(index) || L.len < index))
if(isnum(index) && (!IsInteger(index) || L.len < index))
to_chat(world, "<span class='danger'>Invalid list index: [index]</span>")
return null
return L[index]
@@ -424,7 +424,7 @@
for(var/arg in arguments)
new_args[++new_args.len] = SDQL_expression(source, arg)
if (object == world) // Global proc.
if(object == world) // Global proc.
procname = "/proc/[procname]"
return call(procname)(arglist(new_args))
@@ -358,7 +358,7 @@
else if(token(i + 1) == "\[") // list index
var/list/expression = list()
i = expression(i + 2, expression)
if (token(i) != "]")
if(token(i) != "]")
parse_error("Missing ] at the end of list access.")
L += "\["
+1 -1
View File
@@ -99,7 +99,7 @@
adminhelp(msg) //admin we are replying to has vanished, adminhelp instead
return
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
return
//clean the message if it's not sent by a high-rank admin
+1 -1
View File
@@ -27,7 +27,7 @@
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
log_admin("MOD: [key_name(src)] : [msg]")
if (!msg)
if(!msg)
return
var/spanclass = "mod_channel"
+9 -9
View File
@@ -12,18 +12,18 @@
to_chat(usr, "Checking for disconnected pipes...")
//all plumbing - yes, some things might get stated twice, doesn't matter.
for (var/obj/machinery/atmospherics/plumbing in world)
if (plumbing.nodealert)
for(var/obj/machinery/atmospherics/plumbing in world)
if(plumbing.nodealert)
to_chat(usr, "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])")
//Manifolds
for (var/obj/machinery/atmospherics/pipe/manifold/pipe in world)
if (!pipe.node1 || !pipe.node2 || !pipe.node3)
for(var/obj/machinery/atmospherics/pipe/manifold/pipe in world)
if(!pipe.node1 || !pipe.node2 || !pipe.node3)
to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])")
//Pipes
for (var/obj/machinery/atmospherics/pipe/simple/pipe in world)
if (!pipe.node1 || !pipe.node2)
for(var/obj/machinery/atmospherics/pipe/simple/pipe in world)
if(!pipe.node1 || !pipe.node2)
to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])")
to_chat(usr, "Checking for overlapping pipes...")
@@ -47,13 +47,13 @@
return
feedback_add_details("admin_verb","CPOW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
for (var/datum/powernet/PN in powernets)
if (!PN.nodes || !PN.nodes.len)
for(var/datum/powernet/PN in powernets)
if(!PN.nodes || !PN.nodes.len)
if(PN.cables && (PN.cables.len > 1))
var/obj/structure/cable/C = PN.cables[1]
to_chat(usr, "Powernet with no nodes! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]")
if (!PN.cables || (PN.cables.len < 10))
if(!PN.cables || (PN.cables.len < 10))
if(PN.cables && (PN.cables.len > 1))
var/obj/structure/cable/C = PN.cables[1]
to_chat(usr, "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]")
+5 -5
View File
@@ -17,24 +17,24 @@
to_chat(src, "<span class='warning'>You have deadchat muted.</span>")
return
if (handle_spam_prevention(msg,MUTE_DEADCHAT))
if(handle_spam_prevention(msg,MUTE_DEADCHAT))
return
var/stafftype = null
if (check_rights(R_MENTOR, 0))
if(check_rights(R_MENTOR, 0))
stafftype = "MENTOR"
if (check_rights(R_MOD, 0))
if(check_rights(R_MOD, 0))
stafftype = "MOD"
if (check_rights(R_ADMIN, 0))
if(check_rights(R_ADMIN, 0))
stafftype = "ADMIN"
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
log_admin("[key_name(src)] : [msg]")
if (!msg)
if(!msg)
return
var/prefix = "[stafftype] ([src.key])"
+20 -20
View File
@@ -194,7 +194,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return
var/turf/T = mob.loc
if (!( istype(T, /turf) ))
if(!( istype(T, /turf) ))
return
var/datum/gas_mixture/env = T.return_air()
@@ -399,12 +399,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!check_rights(R_EVENT))
return
if (!ticker)
if(!ticker)
alert("Wait until the game starts")
return
if (istype(M, /mob/living/carbon/human))
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if (H.wear_id)
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
@@ -616,32 +616,32 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(isnull(dostrip))
return
var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks
if (isnull(dresscode))
if(isnull(dresscode))
return
var/datum/job/jobdatum
if (dresscode == "as job...")
if(dresscode == "as job...")
var/jobname = input("Select job", "Robust quick dress shop") as null|anything in get_all_jobs()
jobdatum = job_master.GetJob(jobname)
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))
for(var/obj/item/I in M)
if(istype(I, /obj/item/weapon/implant))
continue
if(istype(I, /obj/item/organ))
continue
qdel(I)
switch(dresscode)
if ("strip")
if("strip")
//do nothing
if ("as job...")
if("as job...")
if(jobdatum)
dresscode = "[jobdatum.title]"
jobdatum.equip(M)
if ("standard space gear")
if("standard space gear")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
@@ -652,7 +652,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
J.toggle()
M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask)
J.Topic(null, list("stat" = 1))
if ("Engineer RIG","CE RIG","Mining RIG","Syndi RIG","Wizard RIG","Medical RIG","Atmos RIG")
if("Engineer RIG","CE RIG","Mining RIG","Syndi RIG","Wizard RIG","Medical RIG","Atmos RIG")
if(dresscode=="Engineer RIG")
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig(M), slot_head)
@@ -680,8 +680,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask)
J.Topic(null, list("stat" = 1))
if ("tournament standard red","tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0
if (dresscode=="tournament standard red")
if("tournament standard red","tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0
if(dresscode=="tournament standard red")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform)
else
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/green(M), slot_w_uniform)
@@ -695,7 +695,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/smokebomb(M), slot_r_store)
if ("tournament gangster") //gangster are supposed to fight each other. --rastaf0
if("tournament gangster") //gangster are supposed to fight each other. --rastaf0
M.equip_to_slot_or_del(new /obj/item/clothing/under/det(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
@@ -707,7 +707,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/proto(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store)
if ("tournament chef") //Steven Seagal FTW
if("tournament chef") //Steven Seagal FTW
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
@@ -718,7 +718,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_s_store)
if ("tournament janitor")
if("tournament janitor")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
var/obj/item/weapon/storage/backpack/backpack = new(M)
@@ -741,14 +741,14 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
if ("pirate")
if("pirate")
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
if ("space pirate")
if("space pirate")
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/pirate(M), slot_wear_suit)
@@ -757,7 +757,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
if ("soviet soldier")
if("soviet soldier")
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head)
+6 -6
View File
@@ -83,20 +83,20 @@
"_default" = "NO_FILTER"
)
var/output = "<b>Radio Report</b><hr>"
for (var/fq in radio_controller.frequencies)
for(var/fq in radio_controller.frequencies)
output += "<b>Freq: [fq]</b><br>"
var/list/datum/radio_frequency/fqs = radio_controller.frequencies[fq]
if (!fqs)
if(!fqs)
output += "&nbsp;&nbsp;<b>ERROR</b><br>"
continue
for (var/filter in fqs.devices)
for(var/filter in fqs.devices)
var/list/f = fqs.devices[filter]
if (!f)
if(!f)
output += "&nbsp;&nbsp;[filters[filter]]: ERROR<br>"
continue
output += "&nbsp;&nbsp;[filters[filter]]: [f.len]<br>"
for (var/device in f)
if (isobj(device))
for(var/device in f)
if(isobj(device))
output += "&nbsp;&nbsp;&nbsp;&nbsp;[device] ([device:x],[device:y],[device:z] in area [get_area(device:loc)])<br>"
else
output += "&nbsp;&nbsp;&nbsp;&nbsp;[device]<br>"
+1 -1
View File
@@ -93,7 +93,7 @@ var/global/list/frozen_mob_list = list()
return
else
if(usr)
if (usr.client)
if(usr.client)
if(usr.client.holder)
var/adminomaly = new/obj/effect/overlay/adminoverlay
if(M.can_move == 1)
+1 -1
View File
@@ -50,7 +50,7 @@ var/global/sent_honksquad = 0
//Spawns HONKsquad and equips them.
for(var/obj/effect/landmark/L in landmarks_list)
if(honksquad_number<=0) break
if (L.name == "HONKsquad")
if(L.name == "HONKsquad")
honk_leader_selected = honksquad_number == 1?1:0
var/mob/living/carbon/human/new_honksquad = create_honksquad(L, honk_leader_selected)
+2 -2
View File
@@ -86,7 +86,7 @@ var/intercom_range_display_status = 0
if(!(locate(/obj/structure/grille,T)))
var/window_check = 0
for(var/obj/structure/window/W in T)
if (W.dir == turn(C1.dir,180) || W.is_fulltile() )
if(W.dir == turn(C1.dir,180) || W.is_fulltile() )
window_check = 1
break
if(!window_check)
@@ -115,7 +115,7 @@ var/intercom_range_display_status = 0
for(var/obj/item/device/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)))
if(!(F in view(7,I.loc)))
qdel(F)
feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+38 -38
View File
@@ -34,7 +34,7 @@
return
var/list/names = list()
for (var/V in O.vars)
for(var/V in O.vars)
names += V
names = sortList(names)
@@ -123,7 +123,7 @@
var/original_name
if (!istype(O, /atom))
if(!istype(O, /atom))
original_name = "\ref[O] ([O])"
else
original_name = O:name
@@ -135,33 +135,33 @@
if(method)
if(istype(O, /mob))
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
if( istype(M , O.type) )
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
if(M.type == O.type)
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
if(A.type == O.type)
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
if(A.type == O.type)
A.vars[variable] = O.vars[variable]
if("edit referenced object")
@@ -175,32 +175,32 @@
if(method)
if(istype(O, /mob))
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
if( istype(M , O.type) )
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
if(M.type == O.type)
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
if(A.type == O.type)
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
if(A.type == O.type)
A.vars[variable] = O.vars[variable]
if("num")
@@ -216,7 +216,7 @@
if(method)
if(istype(O, /mob))
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
if( istype(M , O.type) )
if(variable=="light_range")
M.set_light(new_value)
else
@@ -224,7 +224,7 @@
else if(istype(O, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
if(variable=="light_range")
A.set_light(new_value)
else
@@ -232,7 +232,7 @@
else if(istype(O, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
if(variable=="light_range")
A.set_light(new_value)
else
@@ -241,7 +241,7 @@
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
if(M.type == O.type)
if(variable=="light_range")
M.set_light(new_value)
else
@@ -249,7 +249,7 @@
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
if(A.type == O.type)
if(variable=="light_range")
A.set_light(new_value)
else
@@ -257,7 +257,7 @@
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
if(A.type == O.type)
if(variable=="light_range")
A.set_light(new_value)
else
@@ -271,32 +271,32 @@
if(method)
if(istype(O, /mob))
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
if( istype(M , O.type) )
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
if(M.type == O.type)
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
if(A.type == O.type)
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
if(A.type == O.type)
A.vars[variable] = O.vars[variable]
if("file")
@@ -307,32 +307,32 @@
if(method)
if(istype(O, /mob))
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
if( istype(M , O.type) )
M.vars[variable] = O.vars[variable]
else if(istype(O.type, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
else if(istype(O.type, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
if(M.type == O.type)
M.vars[variable] = O.vars[variable]
else if(istype(O.type, /obj))
for(var/obj/A in world)
if (A.type == O.type)
if(A.type == O.type)
A.vars[variable] = O.vars[variable]
else if(istype(O.type, /turf))
for(var/turf/A in world)
if (A.type == O.type)
if(A.type == O.type)
A.vars[variable] = O.vars[variable]
if("icon")
@@ -342,33 +342,33 @@
if(method)
if(istype(O, /mob))
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
if( istype(M , O.type) )
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
if( istype(A , O.type) )
A.vars[variable] = O.vars[variable]
else
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
if(M.type == O.type)
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
if(A.type == O.type)
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
if(A.type == O.type)
A.vars[variable] = O.vars[variable]
log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]")
+3 -3
View File
@@ -17,7 +17,7 @@ var/list/forbidden_varedit_object_types = list(
set category = "Debug"
set name = "Edit Ticker Variables"
if (ticker == null)
if(ticker == null)
to_chat(src, "Game hasn't started yet.")
else
src.modify_variables(ticker)
@@ -308,7 +308,7 @@ var/list/forbidden_varedit_object_types = list(
else
var/list/names = list()
for (var/V in O.vars)
for(var/V in O.vars)
names += V
names = sortList(names)
@@ -347,7 +347,7 @@ var/list/forbidden_varedit_object_types = list(
var/original_name
if (!istype(O, /atom))
if(!istype(O, /atom))
original_name = "\ref[O] ([O])"
else
original_name = O:name
+13 -13
View File
@@ -62,7 +62,7 @@ client/proc/one_click_antag()
if(player_old_enough_antag(applicant.client,ROLE_TRAITOR))
if(!applicant.stat)
if(applicant.mind)
if (!applicant.mind.special_role)
if(!applicant.mind.special_role)
if(!jobban_isbanned(applicant, "traitor") && !jobban_isbanned(applicant, "Syndicate"))
if(!(applicant.mind.assigned_role in temp.restricted_jobs))
if(!(applicant.client.prefs.species in temp.protected_species))
@@ -96,7 +96,7 @@ client/proc/one_click_antag()
if(player_old_enough_antag(applicant.client,ROLE_CHANGELING))
if(!applicant.stat)
if(applicant.mind)
if (!applicant.mind.special_role)
if(!applicant.mind.special_role)
if(!jobban_isbanned(applicant, "changeling") && !jobban_isbanned(applicant, "Syndicate"))
if(!(applicant.mind.assigned_role in temp.restricted_jobs))
if(!(applicant.client.prefs.species in temp.protected_species))
@@ -277,13 +277,13 @@ client/proc/one_click_antag()
if(closet_spawn)
new /obj/structure/closet/syndicate/nuclear(closet_spawn.loc)
for (var/obj/effect/landmark/A in /area/syndicate_station/start)//Because that's the only place it can BE -Sieve
if (A.name == "Syndicate-Gear-Closet")
for(var/obj/effect/landmark/A in /area/syndicate_station/start)//Because that's the only place it can BE -Sieve
if(A.name == "Syndicate-Gear-Closet")
new /obj/structure/closet/syndicate/personal(A.loc)
qdel(A)
continue
if (A.name == "Syndicate-Bomb")
if(A.name == "Syndicate-Bomb")
new /obj/effect/spawner/newbomb/timer/syndicate(A.loc)
qdel(A)
continue
@@ -303,7 +303,7 @@ client/proc/one_click_antag()
var/I = image('icons/mob/mob.dmi', loc = synd_mind_1.current, icon_state = "synd")
synd_mind.current.client.images += I
for (var/obj/machinery/nuclearbomb/bomb in world)
for(var/obj/machinery/nuclearbomb/bomb in world)
bomb.r_code = nuke_code // All the nukes are set to this code.
return 1
@@ -356,10 +356,10 @@ client/proc/one_click_antag()
if(candidates.len)
var/numagents = 6
//Spawns commandos and equips them.
for (var/obj/effect/landmark/L in /area/syndicate_mothership/elite_squad)
for(var/obj/effect/landmark/L in /area/syndicate_mothership/elite_squad)
if(numagents<=0)
break
if (L.name == "Syndicate-Commando")
if(L.name == "Syndicate-Commando")
syndicate_leader_selected = numagents == 1?1:0
var/mob/living/carbon/human/new_syndicate_commando = create_syndicate_death_commando(L, syndicate_leader_selected)
@@ -386,8 +386,8 @@ client/proc/one_click_antag()
if(numagents >= 6)
return 0
for (var/obj/effect/landmark/L in /area/shuttle/syndicate_elite)
if (L.name == "Syndicate-Commando-Bomb")
for(var/obj/effect/landmark/L in /area/shuttle/syndicate_elite)
if(L.name == "Syndicate-Commando-Bomb")
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
return 1
@@ -469,7 +469,7 @@ client/proc/one_click_antag()
var/max_raiders = 1
var/raiders = max_raiders
//Spawns vox raiders and equips them.
for (var/obj/effect/landmark/L in world)
for(var/obj/effect/landmark/L in world)
if(L.name == "voxstart")
if(raiders<=0)
break
@@ -551,7 +551,7 @@ client/proc/one_click_antag()
if(player_old_enough_antag(applicant.client,ROLE_VAMPIRE))
if(!applicant.stat)
if(applicant.mind)
if (!applicant.mind.special_role)
if(!applicant.mind.special_role)
if(!jobban_isbanned(applicant, "vampire") && !jobban_isbanned(applicant, "Syndicate"))
if(!(applicant.job in temp.restricted_jobs))
if(!(applicant.client.prefs.species in temp.protected_species))
@@ -600,7 +600,7 @@ client/proc/one_click_antag()
var/teamOneMembers = 5
var/teamTwoMembers = 5
var/datum/preferences/A = new()
for (var/obj/effect/landmark/L in world)
for(var/obj/effect/landmark/L in world)
if(L.name == "tdome1")
if(teamOneMembers<=0)
break
+2 -2
View File
@@ -27,8 +27,8 @@
to_chat(H, "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]")
obj_count++
for (var/obj/item/I in H)
if (istype(I, /obj/item/weapon/implant))
for(var/obj/item/I in H)
if(istype(I, /obj/item/weapon/implant))
continue
if(istype(I, /obj/item/organ))
continue
+2 -2
View File
@@ -15,8 +15,8 @@
var/datum/preferences/A = new() // Randomize appearance
A.copy_to(H)
for (var/obj/item/I in H)
if (istype(I, /obj/item/weapon/implant))
for(var/obj/item/I in H)
if(istype(I, /obj/item/weapon/implant))
continue
if(istype (I, /obj/item/organ))
continue
+4 -2
View File
@@ -50,9 +50,11 @@
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
/proc/ERT_Announce(var/text , var/mob/Sender)
/proc/ERT_Announce(var/text , var/mob/Sender, var/repeat_warning)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "\blue <b><font color=orange>ERT REQUEST: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, "holder")]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;ErtReply=\ref[Sender]'>REPLY</A>):</b> [msg]"
msg = "<span class='adminnotice'><b><font color=orange>ERT REQUEST: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, "holder")]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;ErtReply=\ref[Sender]'>RESPOND</A>):</b> [msg]</span>"
if(repeat_warning)
msg += "<BR><span class='adminnotice'><b>WARNING: ERT request has gone 5 minutes with no reply!</b></span>"
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
+14 -14
View File
@@ -23,7 +23,7 @@
if(!check_rights(R_ADMIN))
return
if (ismob(M))
if(ismob(M))
if(istype(M, /mob/living/silicon/ai))
alert("The AI can't be sent to prison you jerk!", null, null, null, null, null)
return
@@ -56,10 +56,10 @@
var/msg = input("Message:", text("Subtle PM to [M.key]")) as text
if (!msg)
if(!msg)
return
if(usr)
if (usr.client)
if(usr.client)
if(usr.client.holder)
to_chat(M, "\bold You hear a voice in your head... \italic [msg]")
@@ -108,7 +108,7 @@
var/msg = input("Message:", text("Enter the text you wish to appear to everyone:")) as text
if (!msg)
if(!msg)
return
to_chat(world, "[msg]")
log_admin("GlobalNarrate: [key_name(usr)] : [msg]")
@@ -561,7 +561,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if("No")
to_chat(world, "\red [from] available at all communications consoles.")
for (var/obj/machinery/computer/communications/C in machines)
for(var/obj/machinery/computer/communications/C in machines)
if(! (C.stat & (BROKEN|NOPOWER) ) )
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
P.name = "[from]"
@@ -581,7 +581,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if("No")
to_chat(world, "\red New Nanotrasen Update available at all communication consoles.")
for (var/obj/machinery/computer/communications/C in machines)
for(var/obj/machinery/computer/communications/C in machines)
if(! (C.stat & (BROKEN|NOPOWER) ) )
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
P.name = "'[command_name()] Update.'"
@@ -603,7 +603,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!check_rights(R_ADMIN))
return
if (alert(src, "Are you sure you want to delete:\n[O]\nat ([O.x], [O.y], [O.z])?", "Confirmation", "Yes", "No") == "Yes")
if(alert(src, "Are you sure you want to delete:\n[O]\nat ([O.x], [O.y], [O.z])?", "Confirmation", "Yes", "No") == "Yes")
log_admin("[key_name(usr)] deleted [O] at ([O.x],[O.y],[O.z])")
message_admins("[key_name_admin(usr)] deleted [O] at ([O.x],[O.y],[O.z])", 1)
feedback_add_details("admin_verb","DEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -643,9 +643,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/flames = input("Range of flames. -1 to none", text("Input")) as num|null
if(flames == null) return
if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1) || (flames != -1))
if ((devastation > 20) || (heavy > 20) || (light > 20) || (flames > 20))
if (alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No")
if((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1) || (flames != -1))
if((devastation > 20) || (heavy > 20) || (light > 20) || (flames > 20))
if(alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No")
return
explosion(O, devastation, heavy, light, flash, null, null,flames)
@@ -668,7 +668,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/light = input("Range of light pulse.", text("Input")) as num|null
if(light == null) return
if (heavy || light)
if(heavy || light)
empulse(O, heavy, light)
log_admin("[key_name(usr)] created an EM pulse ([heavy], [light]) at ([O.x],[O.y],[O.z])")
@@ -710,7 +710,7 @@ 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")
if (istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere
if(istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere
return
else
mob.gib()
@@ -791,7 +791,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Admin"
set name = "Toggle Deny Shuttle"
if (!ticker)
if(!ticker)
return
if(!check_rights(R_ADMIN))
@@ -824,7 +824,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!check_rights(R_SERVER|R_EVENT))
return
if (ticker && ticker.mode)
if(ticker && ticker.mode)
to_chat(usr, "Nope you can't do this, the game's already started. This only works before rounds!")
return
+7 -7
View File
@@ -55,7 +55,7 @@ var/global/sent_strike_team = 0
//Spawns commandos and equips them.
for(var/obj/effect/landmark/L in landmarks_list)
if(commando_number<=0) break
if (L.name == "Commando")
if(L.name == "Commando")
leader_selected = commando_number == 1?1:0
var/mob/living/carbon/human/new_commando = create_death_commando(L, leader_selected)
@@ -76,8 +76,8 @@ var/global/sent_strike_team = 0
commando_number--
//Spawns the rest of the commando gear.
for (var/obj/effect/landmark/L in landmarks_list)
if (L.name == "Commando_Manual")
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)
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>"
@@ -87,8 +87,8 @@ var/global/sent_strike_team = 0
P.stamp(stamp)
qdel(stamp)
for (var/obj/effect/landmark/L in landmarks_list)
if (L.name == "Commando-Bomb")
for(var/obj/effect/landmark/L in landmarks_list)
if(L.name == "Commando-Bomb")
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
qdel(L)
@@ -125,7 +125,7 @@ var/global/sent_strike_team = 0
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/alt(src)
R.set_frequency(DTH_FREQ)
equip_to_slot_or_del(R, slot_l_ear)
if (leader_selected == 0)
if(leader_selected == 0)
equip_to_slot_or_del(new /obj/item/clothing/under/color/green(src), slot_w_uniform)
else
equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(src), slot_w_uniform)
@@ -143,7 +143,7 @@ var/global/sent_strike_team = 0
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)
if (!leader_selected)
if(!leader_selected)
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
else
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
@@ -32,7 +32,7 @@ var/global/sent_syndicate_strike_team = 0
sent_syndicate_strike_team = 1
//if (emergency_shuttle.can_recall())
//if(emergency_shuttle.can_recall())
// emergency_shuttle.recall() //why, exactly? Admins can do this themselves.
var/syndicate_commando_number = syndicate_commandos_possible //for selecting a leader
@@ -62,7 +62,7 @@ var/global/sent_syndicate_strike_team = 0
//Spawns commandos and equips them.
for(var/obj/effect/landmark/L in landmarks_list)
if(syndicate_commando_number<=0) break
if (L.name == "Syndicate-Commando")
if(L.name == "Syndicate-Commando")
syndicate_leader_selected = syndicate_commando_number == 1?1:0
var/mob/living/carbon/human/new_syndicate_commando = create_syndicate_death_commando(L, syndicate_leader_selected)
@@ -83,15 +83,15 @@ var/global/sent_syndicate_strike_team = 0
syndicate_commando_number--
//Spawns the rest of the commando gear.
// for (var/obj/effect/landmark/L)
// if (L.name == "Commando_Manual")
// for(var/obj/effect/landmark/L)
// if(L.name == "Commando_Manual")
//new /obj/item/weapon/gun/energy/pulse_rifle(L.loc)
// var/obj/item/weapon/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"
for (var/obj/effect/landmark/L in landmarks_list)
if (L.name == "Syndicate-Commando-Bomb")
for(var/obj/effect/landmark/L in landmarks_list)
if(L.name == "Syndicate-Commando-Bomb")
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
qdel(L)
@@ -131,12 +131,12 @@ var/global/sent_syndicate_strike_team = 0
equip_to_slot_or_del(R, slot_l_ear)
equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(src), slot_w_uniform)
equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/syndie/advance(src), slot_shoes)
if (!syndicate_leader_selected)
if(!syndicate_leader_selected)
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/strike(src), slot_wear_suit)
else
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/red/strike(src), slot_wear_suit)
equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(src), slot_gloves)
if (!syndicate_leader_selected)
if(!syndicate_leader_selected)
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/strike(src), slot_head)
else
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/red/strike(src), slot_head)
@@ -150,7 +150,7 @@ var/global/sent_syndicate_strike_team = 0
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/c4(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
if (!syndicate_leader_selected)
if(!syndicate_leader_selected)
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_in_backpack)
else
+1 -1
View File
@@ -75,6 +75,6 @@ var/global/vox_tick = 1
*/
vox_tick++
if (vox_tick > 4) vox_tick = 1
if(vox_tick > 4) vox_tick = 1
return 1
+1 -1
View File
@@ -54,7 +54,7 @@
return alarms
/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm)
if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len)
if((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len)
alarms -= alarm
alarms_assoc -= alarm.origin
on_alarm_change(alarm, ALARM_CLEARED)
+1 -1
View File
@@ -97,7 +97,7 @@
/obj/machinery/arcade/proc/pay_with_card(var/obj/item/weapon/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)
if(!customer_account)
to_chat(user, "Error: Unable to access account. Please contact technical support if problem persists.")
return 0
+1 -1
View File
@@ -67,7 +67,7 @@
throwforce = 0
throw_speed = 1
throw_range = 1
w_class = 1.0
w_class = 1
max_amount = 9999 //Dang that's a lot of tickets
/obj/item/stack/tickets/New(var/loc, var/amount=null)
+1 -1
View File
@@ -171,7 +171,7 @@ td.cost.toomuch {
if(href_list["eject"])
print_tickets()
if (href_list["buy"])
if(href_list["buy"])
var/itemID = text2num(href_list["buy"])
var/datum/prize_item/item = global_prizes.prizes[itemID]
var/sure = alert(usr,"Are you sure you wish to purchase [item.name] for [item.cost] tickets?","You sure?","Yes","No") in list("Yes","No")
+1 -1
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = ""
flags = CONDUCT
w_class = 2.0
w_class = 2
materials = list(MAT_METAL=100)
throwforce = 2
throw_speed = 3
+3 -3
View File
@@ -3,7 +3,7 @@
icon = 'icons/obj/tank.dmi'
item_state = "assembly"
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 2
throw_range = 4
flags = CONDUCT //Copied this from old code, so this may or may not be necessary
@@ -141,7 +141,7 @@
if(strength >=1)
explosion(ground_zero, 0, round(strength,1), round(strength*2,1), round(strength*3,1))
else if (strength >=0.5)
else if(strength >=0.5)
explosion(ground_zero, -1, 0, 1, 2)
else
ground_zero.assume_air(air_contents)
@@ -150,7 +150,7 @@
else if(air_contents.temperature > (T0C + 100))
strength = (fuel_moles/25)
if (strength >=1)
if(strength >=1)
explosion(ground_zero, -1, 0, round(strength,1), round(strength*3,1))
else
ground_zero.assume_air(air_contents)
+5 -5
View File
@@ -5,7 +5,7 @@
item_state = "assembly"
flags = CONDUCT
throwforce = 5
w_class = 2.0
w_class = 2
throw_speed = 3
throw_range = 10
@@ -68,8 +68,8 @@
examine(mob/user)
..(user)
if ((in_range(src, user) || src.loc == user))
if (src.secured)
if((in_range(src, user) || src.loc == user))
if(src.secured)
to_chat(user, "\The [src] is ready!")
else
to_chat(user, "\The [src] can be attached!")
@@ -202,11 +202,11 @@
qdel(src)
return
if(2.0)
if (prob(50))
if(prob(50))
qdel(src)
return
if(3.0)
if (prob(25))
if(prob(25))
qdel(src)
return
return
+4 -4
View File
@@ -25,12 +25,12 @@
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.loc, /obj/structure/reagent_dispensers/fueltank/))
if(istype(src.loc,/obj/item/device/assembly_holder))
if(istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
if (tank)
if(tank)
tank.boom()
if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/))
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(beakerbomb)
beakerbomb.heat_beaker()
+2 -2
View File
@@ -42,8 +42,8 @@
HasProximity(atom/movable/AM as mob|obj)
if (istype(AM, /obj/effect/beam)) return
if (AM.move_speed < 12) sense()
if(istype(AM, /obj/effect/beam)) return
if(AM.move_speed < 12) sense()
return
+1 -1
View File
@@ -6,7 +6,7 @@
var/obj/item/clothing/head/helmet/part1 = null
var/obj/item/device/radio/electropack/part2 = null
var/status = 0
w_class = 5.0
w_class = 5
flags = CONDUCT
/obj/item/assembly/shock_kit/Destroy()
+2 -2
View File
@@ -51,7 +51,7 @@
/obj/item/device/assembly/signaler/interact(mob/user as mob, flag1)
var/t1 = "-------"
// if ((src.b_stat && !( flag1 )))
// if((src.b_stat && !( flag1 )))
// t1 = text("-------<BR>\nGreen Wire: []<BR>\nRed Wire: []<BR>\nBlue Wire: []<BR>\n", (src.wires & 4 ? text("<A href='?src=\ref[];wires=4'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=4'>Mend Wire</A>", src)), (src.wires & 2 ? text("<A href='?src=\ref[];wires=2'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=2'>Mend Wire</A>", src)), (src.wires & 1 ? text("<A href='?src=\ref[];wires=1'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=1'>Mend Wire</A>", src)))
// else
// t1 = "-------" Speaker: [src.listening ? "<A href='byond://?src=\ref[src];listen=0'>Engaged</A>" : "<A href='byond://?src=\ref[src];listen=1'>Disengaged</A>"]<BR>
@@ -94,7 +94,7 @@
onclose(usr, "radio")
return
if (href_list["freq"])
if(href_list["freq"])
var/new_frequency = (frequency + text2num(href_list["freq"]))
if(new_frequency < RADIO_LOW_FREQ || new_frequency > RADIO_HIGH_FREQ)
new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
+1 -1
View File
@@ -61,7 +61,7 @@
if(!(A.returntype in valid_returntypes))
continue
choices[A.name]=A
if (choices.len==0)
if(choices.len==0)
testing("Unable to find automations with returntype in [english_list(valid_returntypes)]!")
return 0
var/label=input(user, "Select new automation:", "Automations", "Cancel") as null|anything in choices
@@ -32,7 +32,7 @@
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
if(!ui)
ui = new(user, src, ui_key, "bluespace_artillery.tmpl", "Bluespace Control", 400, 260)
ui.set_initial_data(data)
ui.open()
+2 -2
View File
@@ -236,10 +236,10 @@ obj/machinery/gateway/centerstation/process()
if(!ready) return
if(!active) return
if(istype(M, /mob/living/carbon))
if (exilecheck(M)) return
if(exilecheck(M)) return
if(istype(M, /obj))
for(var/mob/living/carbon/F in M)
if (exilecheck(F)) return
if(exilecheck(F)) return
M.forceMove(get_step(stationgate.loc, SOUTH))
M.dir = SOUTH
@@ -230,19 +230,15 @@
// 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)
if(!istype(occupant))
world << "no occupant"
return null
var/obj/machinery/door/unpowered/hotel_door/D = room_doors["[roomid]"]
if(!D || D.occupant || (occupant in guests))
world << "room occupied"
return null
D.account = get_card_account(id, occupant)
if(!D.account)
world << "no account"
return null
if(!D.account.charge(100, transaction_purpose = "10 minutes", dest_name = name))
world << "xaction failed"
return null
D.occupant = occupant
@@ -175,7 +175,7 @@ var/sc_safecode5 = "[rand(0,9)]"
/obj/singularity/narsie/sc_Narsie/consume(var/atom/A)
if(is_type_in_list(A, uneatable))
return 0
if (istype(A,/mob/living))
if(istype(A,/mob/living))
var/mob/living/L = A
L.gib()
else if(istype(A,/obj/))
@@ -65,7 +65,7 @@
else if(is_special_character(user))
to_chat(user, "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away.")
else if (!insistinga)
else if(!insistinga)
to_chat(user, "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?")
insistinga++
+7 -7
View File
@@ -30,27 +30,27 @@
Lines = file2list("config/example/away_mission_config.txt")
if(!Lines.len) return
for (var/t in Lines)
if (!t)
for(var/t in Lines)
if(!t)
continue
t = trim(t)
if (length(t) == 0)
if(length(t) == 0)
continue
else if (copytext(t, 1, 2) == "#")
else if(copytext(t, 1, 2) == "#")
continue
var/pos = findtext(t, " ")
var/name = null
// var/value = null
if (pos)
if(pos)
name = lowertext(copytext(t, 1, pos))
// value = copytext(t, pos + 1)
else
name = lowertext(t)
if (!name)
if(!name)
continue
potentialRandomZlevels.Add(t)
@@ -68,7 +68,7 @@
log_to_dd(" Away mission loaded: [map]")
for(var/obj/effect/landmark/L in landmarks_list)
if (L.name != "awaystart")
if(L.name != "awaystart")
continue
awaydestinations.Add(L)
+11 -11
View File
@@ -46,10 +46,10 @@ You can set verify to TRUE if you want send() to sleep until the client has the
client << browse_rsc(asset_cache[asset_name], asset_name)
if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip.
if (client)
if(client)
client.cache += asset_name
return 1
if (!client)
if(!client)
return 0
client.sending |= asset_name
@@ -91,17 +91,17 @@ You can set verify to TRUE if you want send() to sleep until the client has the
var/list/unreceived = asset_list - (client.cache + client.sending)
if(!unreceived || !unreceived.len)
return 0
if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT)
if(unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT)
to_chat(client, "Sending Resources...")
for(var/asset in unreceived)
if (asset in asset_cache)
if(asset in asset_cache)
client << browse_rsc(asset_cache[asset], asset)
if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip.
if (client)
if(client)
client.cache += unreceived
return 1
if (!client)
if(!client)
return 0
client.sending |= unreceived
var/job = ++client.last_asset_job
@@ -129,9 +129,9 @@ You can set verify to TRUE if you want send() to sleep until the client has the
//The proc calls procs that sleep for long times.
proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE)
for(var/file in files)
if (!client)
if(!client)
break
if (register_asset)
if(register_asset)
register_asset(file,files[file])
send_asset(client,file)
sleep(-1) //queuing calls like this too quickly can cause issues in some client versions
@@ -159,7 +159,7 @@ proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE)
//get a assetdatum or make a new one
/proc/get_asset_datum(var/type)
if (!(type in asset_datums))
if(!(type in asset_datums))
return new type()
return asset_datums[type]
@@ -240,14 +240,14 @@ proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE)
/datum/asset/nanoui/register()
// Crawl the directories to find files.
for (var/path in common_dirs)
for(var/path in common_dirs)
var/list/filenames = flist(path)
for(var/filename in filenames)
if(copytext(filename, length(filename)) != "/") // Ignore directories.
if(fexists(path + filename))
common[filename] = fcopy_rsc(path + filename)
register_asset(filename, common[filename])
for (var/path in uncommon_dirs)
for(var/path in uncommon_dirs)
var/list/filenames = flist(path)
for(var/filename in filenames)
if(copytext(filename, length(filename)) != "/") // Ignore directories.
+9 -5
View File
@@ -8,6 +8,8 @@
#define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen?
#define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing.
//I would just like the code ready should it ever need to be used.
#define SUGGESTED_CLIENT_VERSION 510 // only integers (e.g: 510, 511) useful here. Does not properly handle minor versions (e.g: 510.58, 511.848)
/*
When somebody clicks a link in game, this Topic is called first.
It does the stuff in this proc and then is redirected to the Topic() proc for the src=[0xWhatever]
@@ -208,7 +210,7 @@
switch(href_list["action"])
if ("openLink")
if("openLink")
src << link(href_list["link"])
..() //redirect to hsrc.Topic()
@@ -258,8 +260,10 @@
if(connection != "seeker") //Invalid connection type.
return null
if(byond_version < MIN_CLIENT_VERSION) //Out of date client.
if(byond_version < MIN_CLIENT_VERSION) // Too out of date to play at all. Unfortunately, we can't send them a message here.
return null
if(byond_version < SUGGESTED_CLIENT_VERSION) // Update is suggested, but not required.
to_chat(src,"<span class='userdanger'>Your BYOND client (v: [byond_version]) is out of date. This can cause glitches. We highly suggest you download the latest client from http://www.byond.com/ before playing. </span>")
if(IsGuestKey(key))
alert(src,"This server doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK")
@@ -317,8 +321,8 @@
log_client_to_db()
if (ckey in clientmessages)
for (var/message in clientmessages[ckey])
if(ckey in clientmessages)
for(var/message in clientmessages[ckey])
to_chat(src, message)
clientmessages.Remove(ckey)
@@ -358,7 +362,7 @@
/client/proc/log_client_to_db()
if ( IsGuestKey(src.key) )
if( IsGuestKey(src.key) )
return
establish_db_connection()
+2 -2
View File
@@ -2,8 +2,8 @@ var/list/clientmessages = list()
proc/addclientmessage(var/ckey, var/message)
ckey = ckey(ckey)
if (!ckey || !message)
if(!ckey || !message)
return
if (!(ckey in clientmessages))
if(!(ckey in clientmessages))
clientmessages[ckey] = list()
clientmessages[ckey] += message
@@ -0,0 +1,113 @@
/datum/gear_tweak/proc/get_contents(var/metadata)
return
/datum/gear_tweak/proc/get_metadata(var/user, var/metadata)
return
/datum/gear_tweak/proc/get_default()
return
/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data)
return
/datum/gear_tweak/proc/tweak_item(var/obj/item/I, var/metadata)
return
/*
* Color adjustment
*/
var/datum/gear_tweak/color/gear_tweak_free_color_choice = new()
/datum/gear_tweak/color
var/list/valid_colors
/datum/gear_tweak/color/New(var/list/colors)
valid_colors = colors
..()
/datum/gear_tweak/color/get_contents(var/metadata)
return "Color: <font color='[metadata]'>&#9899;</font>"
/datum/gear_tweak/color/get_default()
return valid_colors ? valid_colors[1] : COLOR_GRAY
/datum/gear_tweak/color/get_metadata(var/user, var/metadata)
if(valid_colors)
return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors
return input(user, "Choose an item color.", "Global Preference", metadata) as color|null
/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata)
if(valid_colors && !(metadata in valid_colors))
return
I.color = metadata
/*
* Path adjustment
*/
/datum/gear_tweak/path
var/list/valid_paths
/datum/gear_tweak/path/New(var/list/paths)
valid_paths = paths
..()
/datum/gear_tweak/path/get_contents(var/metadata)
return "Type: [metadata]"
/datum/gear_tweak/path/get_default()
return valid_paths[1]
/datum/gear_tweak/path/get_metadata(var/user, var/metadata)
return input(user, "Choose a type.", "Character Preference", metadata) as null|anything in valid_paths
/datum/gear_tweak/path/tweak_gear_data(var/metadata, var/datum/gear_data/gear_data)
if(!(metadata in valid_paths))
return
gear_data.path = valid_paths[metadata]
/*
* Content adjustment
*/
/datum/gear_tweak/contents
var/list/valid_contents
/datum/gear_tweak/contents/New()
valid_contents = args.Copy()
..()
/datum/gear_tweak/contents/get_contents(var/metadata)
return "Contents: [english_list(metadata, and_text = ", ")]"
/datum/gear_tweak/contents/get_default()
. = list()
for(var/i = 1 to valid_contents.len)
. += "Random"
/datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata)
. = list()
for(var/i = metadata.len to valid_contents.len)
metadata += "Random"
for(var/i = 1 to valid_contents.len)
var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None"))
if(entry)
. += entry
else
return metadata
/datum/gear_tweak/contents/tweak_item(var/obj/item/I, var/list/metadata)
if(metadata.len != valid_contents.len)
return
for(var/i = 1 to valid_contents.len)
var/path
var/list/contents = valid_contents[i]
if(metadata[i] == "Random")
path = pick(contents)
path = contents[path]
else if(metadata[i] == "None")
continue
else
path = contents[metadata[i]]
new path(I)
@@ -0,0 +1,79 @@
var/list/loadout_categories = list()
var/list/gear_datums = list()
/datum/loadout_category
var/category = ""
var/list/gear = list()
/datum/loadout_category/New(cat)
category = cat
..()
/hook/startup/proc/populate_gear_list()
//create a list of gear datums to sort
for(var/geartype in subtypesof(/datum/gear))
var/datum/gear/G = geartype
var/use_name = initial(G.display_name)
var/use_category = initial(G.sort_category)
if(G == initial(G.subtype_path))
continue
if(!use_name)
error("Loadout - Missing display name: [G]")
continue
if(!initial(G.cost))
error("Loadout - Missing cost: [G]")
continue
if(!initial(G.path))
error("Loadout - Missing path definition: [G]")
continue
if(!loadout_categories[use_category])
loadout_categories[use_category] = new /datum/loadout_category(use_category)
var/datum/loadout_category/LC = loadout_categories[use_category]
gear_datums[use_name] = new geartype
LC.gear[use_name] = gear_datums[use_name]
loadout_categories = sortAssoc(loadout_categories)
for(var/loadout_category in loadout_categories)
var/datum/loadout_category/LC = loadout_categories[loadout_category]
LC.gear = sortAssoc(LC.gear)
return 1
/datum/gear
var/display_name //Name/index. Must be unique.
var/description //Description of this gear. If left blank will default to the description of the pathed item.
var/path //Path to item.
var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points.
var/slot //Slot to equip to.
var/list/allowed_roles //Roles that can spawn with this item.
var/whitelisted //Term to check the whitelist for..
var/sort_category = "General"
var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned.
var/subtype_path = /datum/gear //for skipping organizational subtypes (optional)
var/subtype_cost_overlap = TRUE //if subtypes can take points at the same time
/datum/gear/New()
..()
if(!description)
var/obj/O = path
description = initial(O.desc)
/datum/gear_data
var/path
var/location
/datum/gear_data/New(npath, nlocation)
path = npath
location = nlocation
/datum/gear/proc/spawn_item(location, metadata)
var/datum/gear_data/gd = new(path, location)
for(var/datum/gear_tweak/gt in gear_tweaks)
gt.tweak_gear_data(metadata["[gt]"], gd)
var/item = new gd.path(gd.location)
for(var/datum/gear_tweak/gt in gear_tweaks)
gt.tweak_item(item, metadata["[gt]"])
return item
@@ -0,0 +1,64 @@
/datum/gear/accessory
subtype_path = /datum/gear/accessory
slot = slot_tie
sort_category = "Accessories"
/datum/gear/accessory/scarf
display_name = "scarf"
path = /obj/item/clothing/accessory/scarf
/datum/gear/accessory/scarf/red
display_name = "scarf, red"
path = /obj/item/clothing/accessory/scarf/red
/datum/gear/accessory/scarf/green
display_name = "scarf, green"
path = /obj/item/clothing/accessory/scarf/green
/datum/gear/accessory/scarf/darkblue
display_name = "scarf, dark blue"
path = /obj/item/clothing/accessory/scarf/darkblue
/datum/gear/accessory/scarf/purple
display_name = "scarf, purple"
path = /obj/item/clothing/accessory/scarf/purple
/datum/gear/accessory/scarf/yellow
display_name = "scarf, yellow"
path = /obj/item/clothing/accessory/scarf/yellow
/datum/gear/accessory/scarf/orange
display_name = "scarf, orange"
path = /obj/item/clothing/accessory/scarf/orange
/datum/gear/accessory/scarf/lightblue
display_name = "scarf, light blue"
path = /obj/item/clothing/accessory/scarf/lightblue
/datum/gear/accessory/scarf/white
display_name = "scarf, white"
path = /obj/item/clothing/accessory/scarf/white
/datum/gear/accessory/scarf/black
display_name = "scarf, black"
path = /obj/item/clothing/accessory/scarf/black
/datum/gear/accessory/scarf/zebra
display_name = "scarf, zebra"
path = /obj/item/clothing/accessory/scarf/zebra
/datum/gear/accessory/scarf/christmas
display_name = "scarf, christmas"
path = /obj/item/clothing/accessory/scarf/christmas
/datum/gear/accessory/scarf/stripedred
display_name = "scarf, striped red"
path = /obj/item/clothing/accessory/stripedredscarf
/datum/gear/accessory/scarf/stripedgreen
display_name = "scarf, striped green"
path = /obj/item/clothing/accessory/stripedgreenscarf
/datum/gear/accessory/scarf/stripedblue
display_name = "scarf, striped blue"
path = /obj/item/clothing/accessory/stripedbluescarf
@@ -0,0 +1,20 @@
/datum/gear/lipstick
display_name = "lipstick, black"
path = /obj/item/weapon/lipstick/black
sort_category = "Cosmetics"
/datum/gear/lipstick/jade
display_name = "lipstick, jade"
path = /obj/item/weapon/lipstick/jade
/datum/gear/lipstick/purple
display_name = "lipstick, purple"
path = /obj/item/weapon/lipstick/purple
/datum/gear/lipstick/red
display_name = "lipstick, red"
path = /obj/item/weapon/lipstick
/datum/gear/monocle
display_name = "monocle"
path = /obj/item/clothing/glasses/monocle
@@ -0,0 +1,3 @@
/datum/gear/dice
display_name = "d20"
path = /obj/item/weapon/dice/d20
@@ -0,0 +1,99 @@
// Uniform slot
/datum/gear/uniform
subtype_path = /datum/gear/uniform
slot = slot_w_uniform
sort_category = "Uniforms and Casual Dress"
/datum/gear/uniform/skirt
subtype_path = /datum/gear/uniform/skirt
/datum/gear/uniform/skirt/blue
display_name = "plaid skirt, blue"
path = /obj/item/clothing/under/dress/plaid_blue
/datum/gear/uniform/skirt/purple
display_name = "plaid skirt, purple"
path = /obj/item/clothing/under/dress/plaid_purple
/datum/gear/uniform/skirt/red
display_name = "plaid skirt, red"
path = /obj/item/clothing/under/dress/plaid_red
/datum/gear/uniform/skirt/black
display_name = "skirt, black"
path = /obj/item/clothing/under/blackskirt
/datum/gear/uniform/skirt/job
cost = 3
subtype_path = /datum/gear/uniform/skirt/job
subtype_cost_overlap = FALSE
/datum/gear/uniform/skirt/job/ce
display_name = "skirt, ce"
path = /obj/item/clothing/under/rank/chief_engineer/skirt
allowed_roles = list("Chief Engineer")
/datum/gear/uniform/skirt/job/atmos
display_name = "skirt, atmos"
path = /obj/item/clothing/under/rank/atmospheric_technician/skirt
allowed_roles = list("Chief Engineer","Atmospheric Technician")
/datum/gear/uniform/skirt/job/eng
display_name = "skirt, engineer"
path = /obj/item/clothing/under/rank/engineer/skirt
allowed_roles = list("Chief Engineer","Station Engineer")
/datum/gear/uniform/skirt/job/roboticist
display_name = "skirt, roboticist"
path = /obj/item/clothing/under/rank/roboticist/skirt
allowed_roles = list("Research Director","Roboticist")
/datum/gear/uniform/skirt/job/cmo
display_name = "skirt, cmo"
path = /obj/item/clothing/under/rank/chief_medical_officer
allowed_roles = list("Chief Medical Officer")
/datum/gear/uniform/skirt/job/chem
display_name = "skirt, chemist"
path = /obj/item/clothing/under/rank/chemist/skirt
allowed_roles = list("Chief Medical Officer","Chemist")
/datum/gear/uniform/skirt/job/viro
display_name = "skirt, virologist"
path = /obj/item/clothing/under/rank/virologist/skirt
allowed_roles = list("Chief Medical Officer","Medical Doctor")
/datum/gear/uniform/skirt/job/med
display_name = "skirt, medical"
path = /obj/item/clothing/under/rank/medical/skirt
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic")
/datum/gear/uniform/skirt/job/sci
display_name = "skirt, scientist"
path = /obj/item/clothing/under/rank/scientist/skirt
allowed_roles = list("Research Director","Scientist")
/datum/gear/uniform/skirt/job/cargo
display_name = "skirt, cargo"
path = /obj/item/clothing/under/rank/cargotech/skirt
allowed_roles = list("Quartermaster","Cargo Technician")
/datum/gear/uniform/skirt/job/qm
display_name = "skirt, QM"
path = /obj/item/clothing/under/rank/cargo/skirt
allowed_roles = list("Quartermaster")
/datum/gear/uniform/skirt/job/warden
display_name = "skirt, warden"
path = /obj/item/clothing/under/rank/warden/skirt
allowed_roles = list("Head of Security", "Warden")
/datum/gear/uniform/skirt/job/security
display_name = "skirt, security"
path = /obj/item/clothing/under/rank/security/skirt
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
/datum/gear/uniform/skirt/job/head_of_security
display_name = "skirt, hos"
path = /obj/item/clothing/under/rank/head_of_security/skirt
allowed_roles = list("Head of Security")
File diff suppressed because it is too large Load Diff
@@ -59,7 +59,7 @@
/datum/preferences/proc/save_preferences(client/C)
// Might as well scrub out any malformed be_special list entries while we're here
for (var/role in be_special)
for(var/role in be_special)
if(!(role in special_roles))
log_to_dd("[C.key] had a malformed role entry: '[role]'. Removing!")
be_special -= role
@@ -158,7 +158,8 @@
nanotrasen_relation,
speciesprefs,
socks,
body_accessory
body_accessory,
gear
FROM [format_table_name("characters")] WHERE ckey='[C.ckey]' AND slot='[slot]'"})
if(!query.Execute())
var/err = query.ErrorMsg()
@@ -236,6 +237,7 @@
//socks
socks = query.item[58]
body_accessory = query.item[59]
gear = params2list(query.item[60])
//Sanitize
metadata = sanitize_text(metadata, initial(metadata))
@@ -298,6 +300,7 @@
if(!player_alt_titles) player_alt_titles = new()
if(!organ_data) src.organ_data = list()
if(!rlimb_data) src.rlimb_data = list()
if(!gear) gear = list()
return 1
@@ -305,12 +308,15 @@
var/organlist
var/rlimblist
var/playertitlelist
var/gearlist
if(!isemptylist(organ_data))
organlist = list2params(organ_data)
if(!isemptylist(rlimb_data))
rlimblist = list2params(rlimb_data)
if(!isemptylist(player_alt_titles))
playertitlelist = list2params(player_alt_titles)
if(!isemptylist(gear))
gearlist = list2params(gear)
var/DBQuery/firstquery = dbcon.NewQuery("SELECT slot FROM [format_table_name("characters")] WHERE ckey='[C.ckey]' ORDER BY slot")
firstquery.Execute()
@@ -374,7 +380,8 @@
nanotrasen_relation='[nanotrasen_relation]',
speciesprefs='[speciesprefs]',
socks='[socks]',
body_accessory='[body_accessory]'
body_accessory='[body_accessory]',
gear='[gearlist]'
WHERE ckey='[C.ckey]'
AND slot='[default_slot]'"}
)
@@ -405,7 +412,7 @@
flavor_text, med_record, sec_record, gen_record,
player_alt_titles,
disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs,
socks, body_accessory)
socks, body_accessory, gear)
VALUES
('[C.ckey]', '[default_slot]', '[sql_sanitize_text(metadata)]', '[sql_sanitize_text(real_name)]', '[be_random_name]','[gender]',
@@ -426,7 +433,7 @@
'[sql_sanitize_text(html_encode(flavor_text))]', '[sql_sanitize_text(html_encode(med_record))]', '[sql_sanitize_text(html_encode(sec_record))]', '[sql_sanitize_text(html_encode(gen_record))]',
'[playertitlelist]',
'[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]',
'[socks]', '[body_accessory]')
'[socks]', '[body_accessory]', '[gearlist]')
"}
)
@@ -1,216 +1,216 @@
//toggles
/client/verb/toggle_ghost_ears()
set name = "Show/Hide GhostEars"
set category = "Preferences"
set desc = ".Toggle Between seeing all mob speech, and only speech of nearby mobs"
prefs.toggles ^= CHAT_GHOSTEARS
to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"].")
prefs.save_preferences(src)
feedback_add_details("admin_verb","TGE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggle_ghost_sight()
set name = "Show/Hide GhostSight"
set category = "Preferences"
set desc = ".Toggle Between seeing all mob emotes, and only emotes of nearby mobs"
prefs.toggles ^= CHAT_GHOSTSIGHT
to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"].")
prefs.save_preferences(src)
feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggle_ghost_radio()
set name = "Enable/Disable GhostRadio"
set category = "Preferences"
set desc = ".Toggle between hearing all radio chatter, or only from nearby speakers"
prefs.toggles ^= CHAT_GHOSTRADIO
to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTRADIO) ? "hear all radio chat in the world" : "only hear from nearby speakers"].")
prefs.save_preferences(src)
feedback_add_details("admin_verb","TGR")
/client/proc/toggle_hear_radio()
set name = "Show/Hide RadioChatter"
set category = "Preferences"
set desc = "Toggle seeing radiochatter from radios and speakers"
if(!holder) return
prefs.toggles ^= CHAT_RADIO
prefs.save_preferences(src)
to_chat(usr, "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from radios or speakers")
feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggleadminhelpsound()
set name = "Hear/Silence Adminhelps"
set category = "Preferences"
set desc = "Toggle hearing a notification when admin PMs are recieved"
if(!holder) return
prefs.sound ^= SOUND_ADMINHELP
prefs.save_preferences(src)
to_chat(usr, "You will [(prefs.sound & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive.")
feedback_add_details("admin_verb","AHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/deadchat() // Deadchat toggle is usable by anyone.
set name = "Show/Hide Deadchat"
set category = "Preferences"
set desc ="Toggles seeing deadchat"
prefs.toggles ^= CHAT_DEAD
prefs.save_preferences(src)
if(src.holder)
to_chat(src, "You will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.")
else
to_chat(src, "As a ghost, you will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.")
feedback_add_details("admin_verb","TDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggleprayers()
set name = "Show/Hide Prayers"
set category = "Preferences"
set desc = "Toggles seeing prayers"
prefs.toggles ^= CHAT_PRAYER
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat.")
feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/togglescoreboard()
set name = "Hide/Display End Round Scoreboard"
set category = "Preferences"
set desc = "Toggles displaying end of round scoreboard"
prefs.toggles ^= DISABLE_SCOREBOARD
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles & DISABLE_SCOREBOARD) ? "no longer" : "now"] see the end of round scoreboard.")
feedback_add_details("admin_verb","TScoreboard") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/togglekarmareminder()
set name = "Hide/Display End Round Karma Reminder"
set category = "Preferences"
set desc = "Toggles displaying end of round karma reminder"
prefs.toggles ^= DISABLE_KARMA_REMINDER
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles & DISABLE_KARMA_REMINDER) ? "no longer" : "now"] see the end of round karma reminder.")
feedback_add_details("admin_verb","TKarmabugger") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggletitlemusic()
set name = "Hear/Silence LobbyMusic"
set category = "Preferences"
set desc = "Toggles hearing the GameLobby music"
prefs.sound ^= SOUND_LOBBY
prefs.save_preferences(src)
if(prefs.sound & SOUND_LOBBY)
to_chat(src, "You will now hear music in the game lobby.")
if(istype(mob, /mob/new_player))
playtitlemusic()
else
to_chat(src, "You will no longer hear music in the game lobby.")
if(istype(mob, /mob/new_player))
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)// stop the jamsz
feedback_add_details("admin_verb","TLobby") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/togglemidis()
set name = "Hear/Silence Midis"
set category = "Preferences"
set desc = "Toggles hearing sounds uploaded by admins"
prefs.sound ^= SOUND_MIDI
prefs.save_preferences(src)
if(prefs.sound & SOUND_MIDI)
to_chat(src, "You will now hear any sounds uploaded by admins.")
else
var/sound/break_sound = sound(null, repeat = 0, wait = 0, channel = 777)
break_sound.priority = 250
src << break_sound//breaks the client's sound output on channel 777
to_chat(src, "You will no longer hear sounds uploaded by admins; any currently playing midis have been disabled.")
feedback_add_details("admin_verb","TMidi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/listen_ooc()
set name = "Show/Hide OOC"
set category = "Preferences"
set desc = "Toggles seeing OutOfCharacter chat"
prefs.toggles ^= CHAT_OOC
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel.")
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/listen_looc()
set name = "Show/Hide LOOC"
set category = "Preferences"
set desc = "Toggles seeing Local OutOfCharacter chat"
prefs.toggles ^= CHAT_LOOC
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel.")
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful
set name = "Hear/Silence Ambience"
set category = "Preferences"
set desc = "Toggles hearing ambient sound effects"
prefs.sound ^= SOUND_AMBIENCE
prefs.save_preferences(src)
if(prefs.sound & SOUND_AMBIENCE)
to_chat(src, "You will now hear ambient sounds.")
else
to_chat(src, "You will no longer hear ambient sounds.")
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1)
feedback_add_details("admin_verb","TAmbi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/Toggle_Buzz() //No more headaches because headphones bump up shipambience.ogg to insanity levels.
set name = "Hear/Silence White Noise"
set category = "Preferences"
set desc = "Toggles hearing ambient white noise"
prefs.sound ^= SOUND_BUZZ
prefs.save_preferences(src)
if(prefs.sound & SOUND_BUZZ)
to_chat(src, "You will now hear ambient white noise.")
else
to_chat(src, "You will no longer hear ambient white noise.")
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2)
feedback_add_details("admin_verb","TBuzz") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/Toggle_Heartbeat() //to toggle off heartbeat sounds, in case they get too annoying
set name = "Hear/Silence Heartbeat"
set category = "Preferences"
set desc = "Toggles hearing heart beating sound effects"
prefs.sound ^= SOUND_HEARTBEAT
prefs.save_preferences(src)
if(prefs.sound & SOUND_HEARTBEAT)
to_chat(src, "You will now hear heartbeat sounds.")
else
to_chat(src, "You will no longer hear heartbeat sounds.")
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1)
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2)
feedback_add_details("admin_verb","Thb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
// This needs a toggle because you people are awful and spammed terrible music
/client/verb/toggle_instruments()
set name = "Hear/Silence Instruments"
set category = "Preferences"
set desc = "Toggles hearing musical instruments like the violin and piano"
prefs.sound ^= SOUND_INSTRUMENTS
prefs.save_preferences(src)
if(prefs.sound & SOUND_INSTRUMENTS)
to_chat(src, "You will now hear people playing musical instruments.")
else
to_chat(src, "You will no longer hear musical instruments.")
feedback_add_details("admin_verb","TInstru") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggle_media()
set name = "Hear/Silence Streaming"
set category = "Preferences"
set desc = "Toggle hearing streaming media (radios, jukeboxes, etc)"
prefs.sound ^= SOUND_STREAMING
prefs.save_preferences(src)
to_chat(usr, "You will [(prefs.sound & SOUND_STREAMING) ? "now" : "no longer"] hear streamed media.")
if(!media) return
if(prefs.sound & SOUND_STREAMING)
media.update_music()
else
media.stop_music()
/client/verb/setup_character()
set name = "Game Preferences"
set category = "Preferences"
set desc = "Allows you to access the Setup Character screen. Changes to your character won't take effect until next round, but other changes will."
prefs.current_tab = 1
//toggles
/client/verb/toggle_ghost_ears()
set name = "Show/Hide GhostEars"
set category = "Preferences"
set desc = ".Toggle Between seeing all mob speech, and only speech of nearby mobs"
prefs.toggles ^= CHAT_GHOSTEARS
to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"].")
prefs.save_preferences(src)
feedback_add_details("admin_verb","TGE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggle_ghost_sight()
set name = "Show/Hide GhostSight"
set category = "Preferences"
set desc = ".Toggle Between seeing all mob emotes, and only emotes of nearby mobs"
prefs.toggles ^= CHAT_GHOSTSIGHT
to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"].")
prefs.save_preferences(src)
feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggle_ghost_radio()
set name = "Enable/Disable GhostRadio"
set category = "Preferences"
set desc = ".Toggle between hearing all radio chatter, or only from nearby speakers"
prefs.toggles ^= CHAT_GHOSTRADIO
to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTRADIO) ? "hear all radio chat in the world" : "only hear from nearby speakers"].")
prefs.save_preferences(src)
feedback_add_details("admin_verb","TGR")
/client/proc/toggle_hear_radio()
set name = "Show/Hide RadioChatter"
set category = "Preferences"
set desc = "Toggle seeing radiochatter from radios and speakers"
if(!holder) return
prefs.toggles ^= CHAT_RADIO
prefs.save_preferences(src)
to_chat(usr, "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from radios or speakers")
feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggleadminhelpsound()
set name = "Hear/Silence Adminhelps"
set category = "Preferences"
set desc = "Toggle hearing a notification when admin PMs are recieved"
if(!holder) return
prefs.sound ^= SOUND_ADMINHELP
prefs.save_preferences(src)
to_chat(usr, "You will [(prefs.sound & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive.")
feedback_add_details("admin_verb","AHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/deadchat() // Deadchat toggle is usable by anyone.
set name = "Show/Hide Deadchat"
set category = "Preferences"
set desc ="Toggles seeing deadchat"
prefs.toggles ^= CHAT_DEAD
prefs.save_preferences(src)
if(src.holder)
to_chat(src, "You will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.")
else
to_chat(src, "As a ghost, you will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.")
feedback_add_details("admin_verb","TDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggleprayers()
set name = "Show/Hide Prayers"
set category = "Preferences"
set desc = "Toggles seeing prayers"
prefs.toggles ^= CHAT_PRAYER
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat.")
feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/togglescoreboard()
set name = "Hide/Display End Round Scoreboard"
set category = "Preferences"
set desc = "Toggles displaying end of round scoreboard"
prefs.toggles ^= DISABLE_SCOREBOARD
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles & DISABLE_SCOREBOARD) ? "no longer" : "now"] see the end of round scoreboard.")
feedback_add_details("admin_verb","TScoreboard") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/togglekarmareminder()
set name = "Hide/Display End Round Karma Reminder"
set category = "Preferences"
set desc = "Toggles displaying end of round karma reminder"
prefs.toggles ^= DISABLE_KARMA_REMINDER
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles & DISABLE_KARMA_REMINDER) ? "no longer" : "now"] see the end of round karma reminder.")
feedback_add_details("admin_verb","TKarmabugger") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggletitlemusic()
set name = "Hear/Silence LobbyMusic"
set category = "Preferences"
set desc = "Toggles hearing the GameLobby music"
prefs.sound ^= SOUND_LOBBY
prefs.save_preferences(src)
if(prefs.sound & SOUND_LOBBY)
to_chat(src, "You will now hear music in the game lobby.")
if(istype(mob, /mob/new_player))
playtitlemusic()
else
to_chat(src, "You will no longer hear music in the game lobby.")
if(istype(mob, /mob/new_player))
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)// stop the jamsz
feedback_add_details("admin_verb","TLobby") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/togglemidis()
set name = "Hear/Silence Midis"
set category = "Preferences"
set desc = "Toggles hearing sounds uploaded by admins"
prefs.sound ^= SOUND_MIDI
prefs.save_preferences(src)
if(prefs.sound & SOUND_MIDI)
to_chat(src, "You will now hear any sounds uploaded by admins.")
else
var/sound/break_sound = sound(null, repeat = 0, wait = 0, channel = 777)
break_sound.priority = 250
src << break_sound //breaks the client's sound output on channel 777
to_chat(src, "You will no longer hear sounds uploaded by admins; any currently playing midis have been disabled.")
feedback_add_details("admin_verb","TMidi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/listen_ooc()
set name = "Show/Hide OOC"
set category = "Preferences"
set desc = "Toggles seeing OutOfCharacter chat"
prefs.toggles ^= CHAT_OOC
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel.")
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/listen_looc()
set name = "Show/Hide LOOC"
set category = "Preferences"
set desc = "Toggles seeing Local OutOfCharacter chat"
prefs.toggles ^= CHAT_LOOC
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel.")
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful
set name = "Hear/Silence Ambience"
set category = "Preferences"
set desc = "Toggles hearing ambient sound effects"
prefs.sound ^= SOUND_AMBIENCE
prefs.save_preferences(src)
if(prefs.sound & SOUND_AMBIENCE)
to_chat(src, "You will now hear ambient sounds.")
else
to_chat(src, "You will no longer hear ambient sounds.")
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1)
feedback_add_details("admin_verb","TAmbi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/Toggle_Buzz() //No more headaches because headphones bump up shipambience.ogg to insanity levels.
set name = "Hear/Silence White Noise"
set category = "Preferences"
set desc = "Toggles hearing ambient white noise"
prefs.sound ^= SOUND_BUZZ
prefs.save_preferences(src)
if(prefs.sound & SOUND_BUZZ)
to_chat(src, "You will now hear ambient white noise.")
else
to_chat(src, "You will no longer hear ambient white noise.")
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2)
feedback_add_details("admin_verb","TBuzz") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/Toggle_Heartbeat() //to toggle off heartbeat sounds, in case they get too annoying
set name = "Hear/Silence Heartbeat"
set category = "Preferences"
set desc = "Toggles hearing heart beating sound effects"
prefs.sound ^= SOUND_HEARTBEAT
prefs.save_preferences(src)
if(prefs.sound & SOUND_HEARTBEAT)
to_chat(src, "You will now hear heartbeat sounds.")
else
to_chat(src, "You will no longer hear heartbeat sounds.")
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1)
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2)
feedback_add_details("admin_verb","Thb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
// This needs a toggle because you people are awful and spammed terrible music
/client/verb/toggle_instruments()
set name = "Hear/Silence Instruments"
set category = "Preferences"
set desc = "Toggles hearing musical instruments like the violin and piano"
prefs.sound ^= SOUND_INSTRUMENTS
prefs.save_preferences(src)
if(prefs.sound & SOUND_INSTRUMENTS)
to_chat(src, "You will now hear people playing musical instruments.")
else
to_chat(src, "You will no longer hear musical instruments.")
feedback_add_details("admin_verb","TInstru") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggle_media()
set name = "Hear/Silence Streaming"
set category = "Preferences"
set desc = "Toggle hearing streaming media (radios, jukeboxes, etc)"
prefs.sound ^= SOUND_STREAMING
prefs.save_preferences(src)
to_chat(usr, "You will [(prefs.sound & SOUND_STREAMING) ? "now" : "no longer"] hear streamed media.")
if(!media) return
if(prefs.sound & SOUND_STREAMING)
media.update_music()
else
media.stop_music()
/client/verb/setup_character()
set name = "Game Preferences"
set category = "Preferences"
set desc = "Allows you to access the Setup Character screen. Changes to your character won't take effect until next round, but other changes will."
prefs.current_tab = 1
prefs.ShowChoices(usr)
+51 -46
View File
@@ -31,7 +31,7 @@
/obj/item/clothing/mob_can_equip(M as mob, slot)
//if we can equip the item anyway, don't bother with species_restricted (aslo cuts down on spam)
if (!..())
if(!..())
return 0
if(species_restricted && istype(M,/mob/living/carbon/human))
@@ -66,12 +66,12 @@
species_restricted = list(target_species)
//Set icon
if (sprite_sheets && (target_species in sprite_sheets))
if(sprite_sheets && (target_species in sprite_sheets))
icon_override = sprite_sheets[target_species]
else
icon_override = initial(icon_override)
if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
if(sprite_sheets_obj && (target_species in sprite_sheets_obj))
icon = sprite_sheets_obj[target_species]
else
icon = initial(icon)
@@ -79,14 +79,14 @@
//Ears: currently only used for headsets and earmuffs
/obj/item/clothing/ears
name = "ears"
w_class = 1.0
w_class = 1
throwforce = 2
slot_flags = SLOT_EARS
/obj/item/clothing/ears/attack_hand(mob/user as mob)
if (!user) return
if(!user) return
if (src.loc != user || !istype(user,/mob/living/carbon/human))
if(src.loc != user || !istype(user,/mob/living/carbon/human))
..()
return
@@ -110,7 +110,7 @@
user.unEquip(src)
if (O)
if(O)
user.put_in_hands(O)
O.add_fingerprint(user)
@@ -119,7 +119,7 @@
/obj/item/clothing/ears/offear
name = "Other ear"
w_class = 5.0
w_class = 5
icon = 'icons/mob/screen_gen.dmi'
icon_state = "block"
slot_flags = SLOT_EARS | SLOT_TWOEARS
@@ -144,7 +144,7 @@
/obj/item/clothing/glasses
name = "glasses"
icon = 'icons/obj/clothing/glasses.dmi'
w_class = 2.0
w_class = 2
flags = GLASSESCOVERSEYES
slot_flags = SLOT_EYES
materials = list(MAT_GLASS = 250)
@@ -171,7 +171,7 @@ BLIND // can't see anything
/obj/item/clothing/gloves
name = "gloves"
gender = PLURAL //Carn: for grammarically correct text-parsing
w_class = 2.0
w_class = 2
icon = 'icons/obj/clothing/gloves.dmi'
siemens_coefficient = 0.50
body_parts_covered = HANDS
@@ -212,8 +212,8 @@ BLIND // can't see anything
/obj/item/clothing/under/proc/set_sensors(mob/user as mob)
var/mob/M = user
if (istype(M, /mob/dead/)) return
if (user.stat || user.restrained()) return
if(istype(M, /mob/dead/)) return
if(user.stat || user.restrained()) return
if(has_sensor >= 2)
to_chat(user, "The controls are locked.")
return 0
@@ -228,7 +228,7 @@ BLIND // can't see anything
return
sensor_mode = modes.Find(switchMode) - 1
if (src.loc == user)
if(src.loc == user)
switch(sensor_mode)
if(0)
to_chat(user, "You disable your suit's remote sensing equipment.")
@@ -243,7 +243,7 @@ BLIND // can't see anything
if(H.w_uniform == src)
H.update_suit_sensors()
else if (istype(src.loc, /mob))
else if(istype(src.loc, /mob))
switch(sensor_mode)
if(0)
for(var/mob/V in viewers(user, 1))
@@ -316,14 +316,13 @@ BLIND // can't see anything
flags |= MASKCOVERSMOUTH
if(initial(flags) & AIRTIGHT) //If the mask is airtight and thus, one that you'd be able to run internals from yet can't because it was adjusted, make it airtight again.
flags |= AIRTIGHT
if(H.head == src)
if(flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
user.unEquip(src)
else //Otherwise, put it in an available hand, the active one preferentially.
src.loc = user
H.head = null
user.put_in_hands(src)
if(H.head == src && flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
user.unEquip(src)
else //Otherwise, put it in an available hand, the active one preferentially.
src.loc = user
H.head = null
user.put_in_hands(src)
else
icon_state += "_up"
to_chat(user, "You push \the [src] out of the way.")
@@ -332,13 +331,10 @@ BLIND // can't see anything
mask_adjusted = 1
if(adjusted_flags)
slot_flags = adjusted_flags
if(ishuman(user))
if(H.internal)
if(user.wear_mask == src) /*If the user was wearing the mask providing internals on their face at the time it was adjusted, turn off internals.
Otherwise, they adjusted it while it was in their hands or some such so we won't be needing to turn off internals.*/
if(H.internals)
H.internals.icon_state = "internal0"
H.internal = null
if(ishuman(user) && H.internal && user.wear_mask == src && H.internals) /*If the user was wearing the mask providing internals on their face at the time it was adjusted, turn off internals.
Otherwise, they adjusted it while it was in their hands or some such so we won't be needing to turn off internals.*/
H.internals.icon_state = "internal0"
H.internal = null
if(flags_inv & HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
flags_inv &= ~HIDEFACE /*Done after the above to avoid having to do a check for initial(src.flags_inv == HIDEFACE).
This reveals the user's face since the bandana will now be going on their head.*/
@@ -346,14 +342,13 @@ BLIND // can't see anything
flags &= ~MASKCOVERSMOUTH
if(flags & AIRTIGHT) //If the mask was airtight, it won't be anymore since you just pushed it off your face.
flags &= ~AIRTIGHT
if(user.wear_mask == src)
if(initial(flags_inv) == HIDEFACE) //Means that you won't have to take off and put back on simple things like breath masks which, realistically, can just be pulled down off your face.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
user.unEquip(src)
else //Otherwise, put it in an available hand, the active one preferentially.
src.loc = user
user.wear_mask = null
user.put_in_hands(src)
if(user.wear_mask == src && initial(flags_inv) == HIDEFACE) //Means that you won't have to take off and put back on simple things like breath masks which, realistically, can just be pulled down off your face.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
user.unEquip(src)
else //Otherwise, put it in an available hand, the active one preferentially.
src.loc = user
user.wear_mask = null
user.put_in_hands(src)
usr.update_inv_wear_mask()
usr.update_inv_head()
@@ -452,6 +447,7 @@ BLIND // can't see anything
var/suit_adjusted = 0
var/ignore_suitadjust = 1
var/adjust_flavour = null
var/list/hide_tail_by_species = null
//Proc that opens and closes jackets.
/obj/item/clothing/suit/proc/adjustsuit(var/mob/user)
@@ -496,6 +492,15 @@ BLIND // can't see anything
else
to_chat(user, "<span class='notice'>You attempt to button up the velcro on \the [src], before promptly realising how retarded you are.</span>")
/obj/item/clothing/suit/equipped(var/mob/living/carbon/human/user, var/slot) //Handle tail-hiding on a by-species basis.
if(ishuman(user) && hide_tail_by_species && slot == slot_wear_suit)
if(user.species.name in hide_tail_by_species)
if(!(flags_inv & HIDETAIL)) //Hide the tail if the user's species is in the hide_tail_by_species list and the tail isn't already hidden.
flags_inv |= HIDETAIL
else
if(!(initial(flags_inv) & HIDETAIL) && (flags_inv & HIDETAIL)) //Otherwise, remove the HIDETAIL flag if it wasn't already in the flags_inv to start with.
flags_inv &= ~HIDETAIL
/obj/item/clothing/suit/verb/openjacket(var/mob/user) //The verb you can use to adjust jackets.
set name = "Open/Close Jacket"
set category = "Object"
@@ -521,7 +526,7 @@ BLIND // can't see anything
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
item_state = "s_helmet"
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
@@ -543,8 +548,8 @@ BLIND // can't see anything
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank)
slowdown = 2
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
slowdown = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
@@ -561,7 +566,7 @@ BLIND // can't see anything
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
permeability_coefficient = 0.90
slot_flags = SLOT_ICLOTHING
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/uniform.dmi',
@@ -586,7 +591,7 @@ BLIND // can't see anything
return 0
if(accessories.len && (A.slot in list("utility","armband")))
for(var/obj/item/clothing/accessory/AC in accessories)
if (AC.slot == A.slot)
if(AC.slot == A.slot)
return 0
/obj/item/clothing/under/attackby(obj/item/I, mob/user, params)
@@ -619,18 +624,18 @@ BLIND // can't see anything
A.attack_hand(user)
return
if (ishuman(usr) && src.loc == user) //make it harder to accidentally undress yourself
if(ishuman(usr) && src.loc == user) //make it harder to accidentally undress yourself
return
..()
/obj/item/clothing/under/MouseDrop(obj/over_object as obj)
if (ishuman(usr))
if(ishuman(usr))
//makes sure that the clothing is equipped so that we can't drag it into our hand from miles away.
if (!(src.loc == usr))
if(!(src.loc == usr))
return
if (!( usr.restrained() ) && !( usr.stat ) && ( over_object ))
if(!( usr.restrained() ) && !( usr.stat ) && ( over_object ))
switch(over_object.name)
if("r_hand")
usr.unEquip(src)
+6 -3
View File
@@ -1,7 +1,7 @@
/obj/item/clothing/glasses
name = "glasses"
icon = 'icons/obj/clothing/glasses.dmi'
//w_class = 2.0
//w_class = 2
//flags = GLASSESCOVERSEYES
//slot_flags = SLOT_EYES
//var/vision_flags = 0
@@ -18,7 +18,7 @@
name = "prescription [name]"
/obj/item/clothing/glasses/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (user.stat || user.restrained() || !ishuman(user))
if(user.stat || user.restrained() || !ishuman(user))
return ..()
var/mob/living/carbon/human/H = user
if(prescription_upgradable)
@@ -158,6 +158,7 @@
desc = "Such a dapper eyepiece!"
icon_state = "monocle"
item_state = "headset" // lol
prescription_upgradable = 1
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi',
@@ -220,6 +221,7 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
)
prescription_upgradable = 1
/obj/item/clothing/glasses/sunglasses
desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes."
@@ -424,6 +426,7 @@
desc = "Used for seeing walls, floors, and stuff through anything."
icon_state = "meson"
origin_tech = "magnets=3;syndicate=4"
prescription_upgradable = 1
/obj/item/clothing/glasses/thermal/monocle
name = "Thermoncle"
@@ -499,4 +502,4 @@
desc = "Just who the hell do you think I am?!"
name = "gar glasses"
icon_state = "gar"
item_state = "gar"
item_state = "gar"
+3 -2
View File
@@ -73,7 +73,6 @@
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records."
icon_state = "securityhud"
var/global/list/jobs[0]
flash_protect = 1
HUDType = DATA_HUD_SECURITY_ADVANCED
species_fit = list("Vox")
sprite_sheets = list(
@@ -84,11 +83,12 @@
/obj/item/clothing/glasses/hud/security/chameleon
name = "Chamleon Security HUD"
desc = "A stolen security HUD integrated with Syndicate chameleon technology. Toggle to disguise the HUD. Provides flash protection."
flash_protect = 1
/obj/item/clothing/glasses/hud/security/chameleon/attack_self(mob/user)
chameleon(user)
/obj/item/clothing/glasses/hud/security/jensenshades
/obj/item/clothing/glasses/hud/security/sunglasses/jensenshades
name = "augmented shades"
desc = "Polarized bioneural eyewear, designed to augment your vision."
icon_state = "jensenshades"
@@ -109,6 +109,7 @@
desc = "Sunglasses with a HUD."
icon_state = "sunhud"
darkness_view = 1
flash_protect = 1
tint = 1
prescription_upgradable = 1
@@ -47,4 +47,11 @@
name = "batgloves"
icon_state = "bmgloves"
item_state = "bmgloves"
item_color="bmgloves"
item_color="bmgloves"
/obj/item/clothing/gloves/cursedclown
name = "cursed white gloves"
desc = "These things smell terrible, and they're all lumpy. Gross."
icon_state = "latex"
item_state = "lgloves"
flags = NODROP
+1 -1
View File
@@ -7,7 +7,7 @@
var/brightness_on = 4 //luminosity when on
var/on = 0
item_color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite)
armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
armor = list(melee = 15, bullet = 5, laser = 20, energy = 10, bomb = 20, bio = 10, rad = 20)
flags_inv = 0
action_button_name = "Toggle Helmet Light"
+13 -14
View File
@@ -4,7 +4,7 @@
icon_state = "helmetmaterials"
flags = HEADCOVERSEYES | HEADBANGPROTECT
item_state = "helmetmaterials"
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
cold_protection = HEAD
min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT
@@ -69,7 +69,7 @@
desc = "A bulletproof helmet that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent."
icon_state = "swat"
item_state = "swat-alt"
armor = list(melee = 25, bullet = 80, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0)
armor = list(melee = 15, bullet = 40, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0)
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/helmet.dmi',
@@ -82,7 +82,7 @@
icon_state = "riot"
item_state = "helmet"
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | HEADBANGPROTECT
armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 41, bullet = 15, laser = 5, energy = 5, bomb = 5, bio = 2, rad = 0)
flags_inv = HIDEEARS
strip_delay = 80
@@ -91,9 +91,8 @@
desc = "A classic metal helmet."
icon_state = "knight_green"
item_state = "knight_green"
flags = BLOCKHAIR | HEADCOVERSEYES | HEADCOVERSMOUTH
armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
flags_inv = HIDEMASK | HIDEEARS | HIDEEYES | HIDEFACE
flags = BLOCKHAIR|HEADCOVERSEYES|HEADCOVERSMOUTH
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
/obj/item/clothing/head/helmet/justice
name = "helmet of justice"
@@ -120,7 +119,7 @@
icon_state = "swat"
flags = HEADCOVERSEYES
item_state = "swat"
armor = list(melee = 80, bullet = 60, laser = 50, energy = 25, bomb = 50, bio = 10, rad = 0)
armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 50, bio = 90, rad = 20)
flags_inv = HIDEEARS|HIDEEYES
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
@@ -145,7 +144,7 @@
icon_state = "thunderdome"
flags = HEADCOVERSEYES
item_state = "thunderdome"
armor = list(melee = 80, bullet = 60, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0)
armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0)
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
heat_protection = HEAD
@@ -181,7 +180,7 @@ obj/item/clothing/head/helmet/redtaghelm
icon_state = "redtaghelm"
flags = HEADCOVERSEYES
item_state = "redtaghelm"
armor = list(melee = 30, bullet = 10, laser = 20, energy = 10, bomb = 20, bio = 0, rad = 0)
armor = list(melee = 15, bullet = 10, laser = 20, energy = 10, bomb = 20, bio = 0, rad = 0)
// Offer about the same protection as a hardhat.
flags_inv = HIDEEARS|HIDEEYES
@@ -191,7 +190,7 @@ obj/item/clothing/head/helmet/bluetaghelm
icon_state = "bluetaghelm"
flags = HEADCOVERSEYES
item_state = "bluetaghelm"
armor = list(melee = 30, bullet = 10, laser = 20, energy = 10, bomb = 20, bio = 0, rad = 0)
armor = list(melee = 15, bullet = 10, laser = 20, energy = 10, bomb = 20, bio = 0, rad = 0)
// Offer about the same protection as a hardhat.
flags_inv = HIDEEARS|HIDEEYES
@@ -203,19 +202,19 @@ obj/item/clothing/head/blob
flags = HEADCOVERSEYES|HEADCOVERSMOUTH
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
/obj/item/clothing/head/helmet/knight/blue
/obj/item/clothing/head/helmet/riot/knight/blue
icon_state = "knight_blue"
item_state = "knight_blue"
/obj/item/clothing/head/helmet/knight/yellow
/obj/item/clothing/head/helmet/riot/knight/yellow
icon_state = "knight_yellow"
item_state = "knight_yellow"
/obj/item/clothing/head/helmet/knight/red
/obj/item/clothing/head/helmet/riot/knight/red
icon_state = "knight_red"
item_state = "knight_red"
/obj/item/clothing/head/helmet/knight/templar
/obj/item/clothing/head/helmet/riot/knight/templar
name = "crusader helmet"
desc = "Deus Vult."
icon_state = "knight_templar"
+9 -8
View File
@@ -15,7 +15,7 @@
icon_state = "captain"
desc = "It's good being the king."
item_state = "caphat"
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
strip_delay = 60
//Captain: no longer space-worthy
@@ -29,7 +29,7 @@
name = "head of personnel's cap"
icon_state = "hopcap"
desc = "The symbol of true bureaucratic micromanagement."
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
//Nanotrasen Representative
/obj/item/clothing/head/ntrep
@@ -57,7 +57,7 @@
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)
armor = list(melee = 50, bullet = 5, laser = 25,energy = 10, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
//Mime
/obj/item/clothing/head/beret
@@ -70,7 +70,7 @@
name = "head of security cap"
desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge."
icon_state = "hoscap"
armor = list(melee = 80, bullet = 60, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0)
armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0)
strip_delay = 80
/obj/item/clothing/head/HoS/beret
@@ -82,7 +82,7 @@
name = "warden's police hat"
desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts."
icon_state = "policehelm"
armor = list(melee = 60, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
armor = list(melee = 30, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
strip_delay = 60
/obj/item/clothing/head/officer
@@ -90,20 +90,21 @@
desc = "A red cap with an old-fashioned badge on the front for establishing that you are, in fact, the law."
icon_state = "customshelm"
item_state = "customshelm"
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
strip_delay = 60
/obj/item/clothing/head/beret/sec
name = "security beret"
desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety."
icon_state = "beret_officer"
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
strip_delay = 60
/obj/item/clothing/head/beret/sec/warden
name = "warden's beret"
desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class."
icon_state = "beret_warden"
armor = list(melee = 60, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
armor = list(melee = 30, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/head/beret/eng
name = "engineering beret"
+2 -2
View File
@@ -5,7 +5,7 @@
icon_state = "centcom"
desc = "It's good to be emperor."
item_state = "centhat"
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0)
strip_delay = 80
/obj/item/clothing/head/hairflower
@@ -325,7 +325,7 @@
throwforce = 3.0
throw_speed = 2
throw_range = 5
w_class = 2.0
w_class = 2
attack_verb = list("warned", "cautioned", "smashed")
/obj/item/clothing/head/griffin
+5 -5
View File
@@ -20,7 +20,7 @@
materials = list(MAT_METAL=1750, MAT_GLASS=400)
flash_protect = 2
tint = 2
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
action_button_name = "flip welding helmet"
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin")
@@ -96,13 +96,13 @@
if(M.l_hand == src || M.r_hand == src || M.head == src)
location = M.loc
if (istype(location, /turf))
if(istype(location, /turf))
location.hotspot_expose(700, 1)
/obj/item/clothing/head/cakehat/attack_self(mob/user as mob)
if(status > 1) return
src.onfire = !( src.onfire )
if (src.onfire)
if(src.onfire)
src.force = 3
src.damtype = "fire"
src.icon_state = "cake1"
@@ -149,7 +149,7 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
action_button_name = "Toggle Pumpkin Light"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
brightness_on = 2 //luminosity when on
@@ -161,7 +161,7 @@
item_color = "reindeer"
flags_inv = 0
action_button_name = "Toggle Nose Light"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
brightness_on = 1 //luminosity when on
+1 -1
View File
@@ -90,7 +90,7 @@
desc = "It's baseball hat in tasteful red colour."
icon_state = "secsoft"
item_color = "sec"
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
strip_delay = 60
/obj/item/clothing/head/soft/sec/corp
+4 -4
View File
@@ -4,7 +4,7 @@
icon_state = "gas_alt"
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
w_class = 3.0
w_class = 3
item_state = "gas_alt"
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
@@ -27,7 +27,7 @@
materials = list(MAT_METAL=4000, MAT_GLASS=2000)
flash_protect = 2
tint = 2
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
origin_tech = "materials=2;engineering=2"
action_button_name = "Toggle Welding Helmet"
@@ -66,7 +66,7 @@
icon_state = "bane_mask"
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
w_class = 3.0
w_class = 3
item_state = "bane_mask"
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
@@ -78,7 +78,7 @@
desc = "A modernised version of the classic design, this mask will not only filter out toxins but it can also be connected to an air supply."
icon_state = "plaguedoctor"
item_state = "gas_mask"
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 2, energy = 2, bomb = 0, bio = 75, rad = 0)
/obj/item/clothing/mask/gas/swat
name = "\improper SWAT mask"
+26 -1
View File
@@ -63,7 +63,7 @@
flags = MASKCOVERSMOUTH
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 25, rad = 0)
action_button_name = "Adjust Sterile Mask"
ignore_maskadjust = 0
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin")
@@ -275,3 +275,28 @@ obj/item/clothing/mask/bandana/purple
icon_state = "bandblack"
item_color = "black"
desc = "It's a black bandana."
/obj/item/clothing/mask/cursedclown
name = "cursed clown mask"
desc = "This is a very, very odd looking mask."
icon = 'icons/goonstation/objects/clothing/mask.dmi'
icon_state = "cursedclown"
item_state = "cclown_hat"
icon_override = 'icons/goonstation/mob/clothing/mask.dmi'
lefthand_file = 'icons/goonstation/mob/inhands/clothing_lefthand.dmi'
righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi'
flags = NODROP
/obj/item/clothing/mask/cursedclown/equipped(mob/user, slot)
..()
var/mob/living/carbon/human/H = user
if(istype(H) && slot == slot_wear_mask)
to_chat(H, "<span class='danger'>[src] grips your face!</span>")
if(H.mind && H.mind.assigned_role != "Cluwne")
H.makeCluwne()
/obj/item/clothing/mask/cursedclown/suicide_act(mob/user)
user.visible_message("<span class='danger'>[user] gazes into the eyes of [src]. [src] gazes back!</span>")
spawn(10)
user.gib()
return BRUTELOSS
+3 -3
View File
@@ -88,7 +88,7 @@
item_color = "orange"
/obj/item/clothing/shoes/orange/attack_self(mob/user as mob)
if (src.chained)
if(src.chained)
src.chained = null
src.slowdown = SHOES_SLOWDOWN
new /obj/item/weapon/restraints/handcuffs( user.loc )
@@ -97,8 +97,8 @@
/obj/item/clothing/shoes/orange/attackby(obj/H, loc, params)
..()
if (istype(H, /obj/item/weapon/restraints/handcuffs) && !chained && !(H.flags & NODROP))
if (src.icon_state != "orange") return
if(istype(H, /obj/item/weapon/restraints/handcuffs) && !chained && !(H.flags & NODROP))
if(src.icon_state != "orange") return
qdel(H)
src.chained = 1
src.slowdown = 15
+13 -2
View File
@@ -21,7 +21,7 @@
can_cut_open = 1
icon_state = "jackboots"
item_state = "jackboots"
armor = list(melee = 50, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 10, rad = 0)
armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 10, rad = 0)
species_restricted = null //Syndicate tech means even Tajarans can kick ass with these
strip_delay = 70
@@ -29,7 +29,7 @@
name = "\improper SWAT shoes"
desc = "High speed, no drag combat boots."
permeability_coefficient = 0.01
armor = list(melee = 80, bullet = 60, laser = 50, energy = 50, bomb = 50, bio = 30, rad = 30)
armor = list(melee = 40, bullet = 30, laser = 25, energy = 25, bomb = 50, bio = 30, rad = 30)
flags = NOSLIP
/obj/item/clothing/shoes/sandal
@@ -207,3 +207,14 @@
item_color = "fancysandal"
species_restricted = null
/obj/item/clothing/shoes/cursedclown
name = "cursed clown shoes"
desc = "Moldering clown flip flops. They're neon green for some reason."
icon = 'icons/goonstation/objects/clothing/feet.dmi'
icon_state = "cursedclown"
item_state = "cclown_shoes"
icon_override = 'icons/goonstation/mob/clothing/feet.dmi'
lefthand_file = 'icons/goonstation/mob/inhands/clothing_lefthand.dmi'
righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi'
flags = NODROP
shoe_sound = "clownstep"
+4 -20
View File
@@ -2,8 +2,6 @@
/obj/item/clothing/head/helmet/space/skrell
name = "Skrellian helmet"
desc = "Smoothly contoured and polished to a shine. Still looks like a fishbowl."
armor = list(melee = 20, bullet = 20, laser = 50,energy = 50, bomb = 50, bio = 100, rad = 100)
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
species_restricted = list("Skrell","Human")
/obj/item/clothing/head/helmet/space/skrell/white
@@ -19,10 +17,6 @@
/obj/item/clothing/suit/space/skrell
name = "Skrellian hardsuit"
desc = "Seems like a wetsuit with reinforced plating seamlessly attached to it. Very chic."
armor = list(melee = 20, bullet = 20, laser = 50,energy = 50, bomb = 50, bio = 100, rad = 100)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
species_restricted = list("Skrell","Human")
/obj/item/clothing/suit/space/skrell/white
@@ -37,9 +31,6 @@
//Unathi space gear. Huge and restrictive.
/obj/item/clothing/head/helmet/space/unathi
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
heat_protection = HEAD
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
species_restricted = list("Unathi")
/obj/item/clothing/head/helmet/space/unathi/helmet_cheap
@@ -50,10 +41,6 @@
item_color = "unathi_helm_cheap"
/obj/item/clothing/suit/space/unathi
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
species_restricted = list("Unathi")
/obj/item/clothing/suit/space/unathi/rig_cheap
@@ -61,7 +48,6 @@
desc = "A cheap NT knock-off of a Unathi battle-rig. Looks like a fish, moves like a fish, steers like a cow."
icon_state = "rig-unathi-cheap"
item_state = "rig-unathi-cheap"
slowdown = 3
/obj/item/clothing/head/helmet/space/unathi/breacher
name = "breacher helm"
@@ -76,15 +62,13 @@
icon_state = "unathi_breacher"
item_state = "unathi_breacher"
item_color = "unathi_breacher"
slowdown = 1
// Vox space gear (vaccuum suit, low pressure armour)
// Can't be equipped by any other species due to bone structure and vox cybernetics.
/obj/item/clothing/suit/space/vox
w_class = 3
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)
slowdown = 2
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
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
species_restricted = list("Vox", "Vox Armalis")
@@ -94,7 +78,7 @@
)
/obj/item/clothing/head/helmet/space/vox
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
armor = list(melee = 40, bullet = 40, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
flags = HEADCOVERSEYES|STOPSPRESSUREDMAGE
species_restricted = list("Vox","Vox Armalis")
sprite_sheets = list(
@@ -211,7 +195,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
if (H.shoes != src)
if(H.shoes != src)
to_chat(user, "You will have to put on the [src] before you can do that.")
return
@@ -233,7 +217,7 @@
/obj/item/clothing/shoes/magboots/vox/examine(mob/user)
..(user)
if (magpulse)
if(magpulse)
to_chat(user, "It would be hard to take these off without relaxing your grip first.")//theoretically this message should only be seen by the wearer when the claws are equipped.
+3 -3
View File
@@ -106,7 +106,7 @@ var/global/list/breach_burn_descriptors = list(
if(existing.damtype != damtype)
continue
if (existing.class < 5)
if(existing.class < 5)
var/needs = 5 - existing.class
if(amount < needs)
existing.class += amount
@@ -120,7 +120,7 @@ var/global/list/breach_burn_descriptors = list(
else if(existing.damtype == BURN)
T.visible_message("<span class = 'warning'>\The [existing.descriptor] on [src] widens!</span>")
if (amount)
if(amount)
//Spawn a new breach.
var/datum/breach/B = new()
breaches += B
@@ -200,7 +200,7 @@ var/global/list/breach_burn_descriptors = list(
to_chat(user, "\red How do you intend to patch a hardsuit while someone is wearing it?")
return
if (!damage || ! brute_damage)
if(!damage || ! brute_damage)
to_chat(user, "There is no structural damage on \the [src] to repair.")
return
@@ -23,7 +23,6 @@
icon_state = "chronosuit"
item_state = "chronosuit"
action_button_name = "Toggle Chronosuit"
slowdown = 2
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90)
var/obj/item/clothing/head/helmet/space/chronos/helmet = null
var/obj/effect/chronos_cam/camera = null
+2 -3
View File
@@ -4,7 +4,7 @@
desc = "A helmet worn by members of the Nanotrasen Emergency Response Team. Armoured and space ready."
icon_state = "rig0-ert_commander"
item_state = "helm-command"
armor = list(melee = 50, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 60)
armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50)
rig_restrict_helmet = 0 // ERT helmets can be taken on and off at will.
var/obj/machinery/camera/camera
strip_delay = 130
@@ -30,8 +30,7 @@
item_state = "suit-command"
w_class = 3
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)
slowdown = 1
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 60)
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, \
@@ -6,7 +6,7 @@
desc = "A special helmet designed for only the most fashionable of military figureheads."
flags_inv = HIDEFACE
permeability_coefficient = 0.01
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
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")
sprite_sheets = list(
@@ -14,10 +14,13 @@
"Drask" = 'icons/mob/species/drask/helmet.dmi'
)
/obj/item/clothing/head/helmet/space/capspace/equipped(var/mob/living/carbon/human/user, var/slot)
if (ishuman(user) && user.species.name == "Vox")
flags &= ~BLOCKHAIR
else
flags |= BLOCKHAIR
if(ishuman(user) && slot == slot_head)
if(user.species.name == "Vox")
if(flags & BLOCKHAIR)
flags &= ~BLOCKHAIR
else
if((initial(flags) & BLOCKHAIR) && !(flags & BLOCKHAIR))
flags |= BLOCKHAIR
/obj/item/clothing/suit/space/captain
name = "captain's space suit"
@@ -26,8 +29,7 @@
item_state = "capspacesuit"
w_class = 4
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)
slowdown = 1
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
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")
sprite_sheets = list(
@@ -56,8 +58,7 @@
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)
armor = list(melee = 80, bullet = 80, laser = 50,energy = 50, bomb = 100, bio = 100, rad = 100)
slowdown = 1
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
strip_delay = 130
@@ -69,14 +70,14 @@
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)
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 50, bio = 90, rad = 20)
strip_delay = 120
/obj/item/clothing/head/helmet/space/deathsquad/beret
name = "officer's beret"
desc = "An armored beret commonly used by special operations officers."
icon_state = "beret_officer"
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
armor = list(melee = 65, bullet = 55, laser = 35, energy = 20, bomb = 30, bio = 30, rad = 30)
/obj/item/clothing/suit/space/deathsquad/officer
name = "officer jacket"
@@ -101,7 +102,8 @@
icon_state = "santa"
item_state = "santa"
slowdown = 0
flags = ONESIZEFITSALL | STOPSPRESSUREDMAGE
flags = STOPSPRESSUREDMAGE
flags_size = ONESIZEFITSALL
allowed = list(/obj/item) //for stuffing exta special presents
@@ -111,7 +113,7 @@
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
armor = list(melee = 30, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
strip_delay = 40
put_on_delay = 20
@@ -124,7 +126,7 @@
w_class = 3
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)
slowdown = 0
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
armor = list(melee = 30, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
strip_delay = 40
put_on_delay = 20
@@ -146,8 +148,7 @@
icon_state = "spacenew"
item_state = "s_suit"
desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies."
slowdown = 1
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
/obj/item/clothing/head/helmet/space/eva
name = "EVA helmet"
@@ -155,7 +156,7 @@
item_state = "s_helmet"
desc = "A lightweight space helmet with the basic ability to protect the wearer from the vacuum of space during emergencies."
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20)
flash_protect = 0
//Mime's Hardsuit
@@ -192,7 +193,7 @@
desc = "An advanced, space-proof helmet. It appears to be modeled after an old-world eagle."
icon_state = "griffinhat"
item_state = "griffinhat"
armor = list(melee = 40, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100)
armor = list(melee = 20, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100)
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
unacidable = 1
strip_delay = 130
@@ -203,8 +204,7 @@
icon_state = "freedom"
item_state = "freedom"
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)
armor = list(melee = 40, bullet = 40, laser = 30,energy = 25, bomb = 100, bio = 100, rad = 100)
slowdown = 1
armor = list(melee = 20, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100)
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
unacidable = 1
strip_delay = 130
@@ -5,13 +5,13 @@
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)
slowdown = 0
armor = list(melee = 0, bullet = 0, laser = 0 ,energy = 0, bomb = 0, bio = 100, rad = 20)
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
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
species_restricted = list("Plasmaman")
flags = STOPSPRESSUREDMAGE | PLASMAGUARD
flags = STOPSPRESSUREDMAGE
icon_state = "plasmaman_suit"
item_state = "plasmaman_suit"
@@ -38,7 +38,7 @@
/obj/item/clothing/head/helmet/space/eva/plasmaman
name = "plasmaman helmet"
desc = "A special containment helmet designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies."
flags = STOPSPRESSUREDMAGE | PLASMAGUARD
flags = STOPSPRESSUREDMAGE
species_restricted = list("Plasmaman")
icon_state = "plasmaman_helmet0"
@@ -185,14 +185,14 @@
/obj/item/clothing/suit/space/eva/plasmaman/miner
name = "plasmaman miner suit"
icon_state = "plasmamanMiner_suit"
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
slowdown = 2
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
slowdown = 1
/obj/item/clothing/head/helmet/space/eva/plasmaman/miner
name = "plasmaman miner helmet"
icon_state = "plasmamanMiner_helmet0"
base_state = "plasmamanMiner_helmet"
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
// MEDSCI
@@ -266,13 +266,13 @@
/obj/item/clothing/suit/space/eva/plasmaman/security
name = "plasmaman security suit"
icon_state = "plasmamanSecurity_suit"
armor = list(melee = 30, bullet = 15, laser = 30,energy = 10, bomb = 10, bio = 100, rad = 50)
armor = list(melee = 15, bullet = 15, laser = 15, energy = 10, bomb = 10, bio = 100, rad = 50)
/obj/item/clothing/head/helmet/space/eva/plasmaman/security
name = "plasmaman security helmet"
icon_state = "plasmamanSecurity_helmet0"
base_state = "plasmamanSecurity_helmet"
armor = list(melee = 30, bullet = 15, laser = 30,energy = 10, bomb = 10, bio = 100, rad = 50)
armor = list(melee = 15, bullet = 15, laser = 15, energy = 10, bomb = 10, bio = 100, rad = 50)
/obj/item/clothing/suit/space/eva/plasmaman/security/hos
name = "plasmaman head of security suit"
+107 -16
View File
@@ -55,7 +55,6 @@
desc = "A special space suit for environments that might pose hazards beyond just the vacuum of space. Provides more protection than a standard space suit."
icon_state = "rig-engineering"
item_state = "eng_hardsuit"
slowdown = 2
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)
siemens_coefficient = 0
@@ -247,7 +246,6 @@
desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
icon_state = "rig-engineering"
item_state = "eng_hardsuit"
slowdown = 2
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)
@@ -279,14 +277,14 @@
item_state = "mining_helm"
item_color = "mining"
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
/obj/item/clothing/suit/space/rig/mining
icon_state = "rig-mining"
name = "mining hardsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating."
item_state = "mining_hardsuit"
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
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)
@@ -297,7 +295,7 @@
icon_state = "hardsuit1-syndi"
item_state = "syndie_helm"
item_color = "syndi"
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
on = 1
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
action_button_name = "Toggle Helmet Mode"
@@ -339,11 +337,10 @@
icon_state = "hardsuit1-syndi"
item_state = "syndie_hardsuit"
item_color = "syndi"
slowdown = 1
w_class = 3
var/on = 1
action_button_name = "Toggle Hardsuit Mode"
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
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)
/obj/item/clothing/suit/space/rig/syndi/update_icon()
@@ -379,7 +376,7 @@
desc = "An elite version of the syndicate helmet, with improved armour and fire shielding. It is in travel mode. Property of Gorlex Marauders."
icon_state = "hardsuit0-syndielite"
item_color = "syndielite"
armor = list(melee = 80, bullet = 70, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70)
armor = list(melee = 60, bullet = 60, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70)
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
sprite_sheets = null
@@ -398,7 +395,7 @@
desc = "An elite version of the syndicate hardsuit, with improved armour and fire shielding. It is in travel mode."
icon_state = "hardsuit0-syndielite"
item_color = "syndielite"
armor = list(melee = 80, bullet = 70, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70)
armor = list(melee = 60, bullet = 60, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
sprite_sheets = null
@@ -420,7 +417,7 @@
item_state = "wiz_helm"
item_color = "wiz"
unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles!
armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60)
armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 35, bio = 100, rad = 50)
heat_protection = HEAD //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
unacidable = 1
@@ -431,10 +428,9 @@
name = "gem-encrusted hardsuit"
desc = "A bizarre gem-encrusted suit that radiates magical energies."
item_state = "wiz_hardsuit"
slowdown = 1
w_class = 3
unacidable = 1
armor = list(melee = 40, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 100, rad = 50)
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)
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
@@ -458,7 +454,6 @@
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"
slowdown = 1
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)
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
@@ -469,7 +464,7 @@
icon_state = "rig0-sec"
item_state = "sec_helm"
item_color = "sec"
armor = list(melee = 30, bullet = 15, laser = 30,energy = 10, bomb = 10, bio = 100, rad = 50)
armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50)
/obj/item/clothing/suit/space/rig/security
icon_state = "rig-sec"
@@ -507,7 +502,7 @@
icon_state = "rig0-singuloth"
item_state = "singuloth_helm"
item_color = "singuloth"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 100)
armor = list(melee = 40, bullet = 5, laser = 20, energy = 5, bomb = 25, bio = 100, rad = 100)
/obj/item/clothing/suit/space/rig/singuloth
icon_state = "rig-singuloth"
@@ -515,4 +510,100 @@
desc = "This is a ceremonial armor from the chapter of the Singuloth Knights. It's made of pure forged adamantium."
item_state = "singuloth_hardsuit"
flags = STOPSPRESSUREDMAGE
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 100)
armor = list(melee = 40, bullet = 5, laser = 20, energy = 5, bomb = 25, bio = 100, rad = 100)
/obj/item/clothing/head/helmet/space/rig/security/hos
name = "head of security's hardsuit helmet"
desc = "a special bulky helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor."
icon_state = "hardsuit0-hos"
item_color = "hos"
armor = list(melee = 45, bullet = 25, laser = 30,energy = 10, bomb = 25, bio = 100, rad = 50)
sprite_sheets = null
/obj/item/clothing/suit/space/rig/security/hos
icon_state = "hardsuit-hos"
name = "head of security's hardsuit"
desc = "A special bulky suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50)
sprite_sheets = null
/////////////SHIELDED//////////////////////////////////
/obj/item/clothing/suit/space/rig/shielded
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)
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
var/recharge_delay = 200 //How long after we've been shot before we can start recharging. 20 seconds here
var/recharge_cooldown = 0 //Time since we've last been shot
var/recharge_rate = 1 //How quickly the shield recharges once it starts charging
var/shield_state = "shield-old"
var/shield_on = "shield-old"
sprite_sheets = null
/obj/item/clothing/suit/space/rig/shielded/hit_reaction(mob/living/carbon/human/owner, attack_text)
if(current_charges > 0)
var/datum/effect/system/spark_spread/s = new
s.set_up(2, 1, src)
s.start()
owner.visible_message("<span class='danger'>[owner]'s shields deflect [attack_text] in a shower of sparks!</span>")
current_charges--
recharge_cooldown = world.time + recharge_delay
processing_objects |= src
if(current_charges <= 0)
owner.visible_message("[owner]'s shield overloads!")
shield_state = "broken"
owner.update_inv_wear_suit()
return 1
return 0
/obj/item/clothing/suit/space/rig/shielded/Destroy()
processing_objects.Remove(src)
return ..()
/obj/item/clothing/suit/space/rig/shielded/process()
if(world.time > recharge_cooldown && current_charges < max_charges)
current_charges = Clamp((current_charges + recharge_rate), 0, max_charges)
playsound(loc, 'sound/magic/Charge.ogg', 50, 1)
if(current_charges == max_charges)
playsound(loc, 'sound/machines/ding.ogg', 50, 1)
processing_objects.Remove(src)
shield_state = "[shield_on]"
if(istype(loc, /mob/living/carbon/human))
var/mob/living/carbon/human/C = loc
C.update_inv_wear_suit()
//////Syndicate Version
/obj/item/clothing/suit/space/rig/shielded/syndi
name = "blood-red hardsuit"
desc = "An advanced hardsuit with built in energy shielding."
icon_state = "hardsuit1-syndi"
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)
slowdown = 0
sprite_sheets = list(
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
"Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
"Skrell" = 'icons/mob/species/skrell/suit.dmi',
"Vox" = 'icons/mob/species/vox/suit.dmi',
"Vulpkanin" = 'icons/mob/species/vulpkanin/suit.dmi',
"Drask" = 'icons/mob/species/drask/suit.dmi'
)
/obj/item/clothing/head/helmet/space/rig/shielded/syndi
name = "blood-red hardsuit helmet"
desc = "An advanced hardsuit helmet with built in energy shielding."
icon_state = "hardsuit1-syndi"
item_state = "syndie_helm"
item_color = "syndi"
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
+4 -4
View File
@@ -17,7 +17,7 @@
w_class = 4
// These values are passed on to all component pieces.
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20)
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
siemens_coefficient = 0.2
@@ -431,7 +431,7 @@
if(!offline)
if(istype(wearer))
if(flags & NODROP)
if (offline_slowdown < 3)
if(offline_slowdown < 3)
to_chat(wearer, "<span class='danger'>Your suit beeps stridently, and suddenly goes dead.</span>")
else
to_chat(wearer, "<span class='danger'>Your suit beeps stridently, and suddenly you're wearing a leaden mass of metal and plastic composites instead of a powered suit.</span>")
@@ -576,7 +576,7 @@
data["modules"] = module_list
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
if(!ui)
ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = nano_state)
ui.set_initial_data(data)
ui.open()
@@ -819,7 +819,7 @@
take_hit((100/severity_class), "electrical pulse", 1)
/obj/item/weapon/rig/proc/shock(mob/user)
if (electrocute_mob(user, cell, src)) //electrocute_mob() handles removing charge from the cell, no need to do that here.
if(electrocute_mob(user, cell, src)) //electrocute_mob() handles removing charge from the cell, no need to do that here.
spark_system.start()
if(user.stunned)
return 1
@@ -3,13 +3,13 @@
desc = "A cheap NT knock-off of an Unathi battle-rig. Looks like a fish, moves like a fish, steers like a cow."
suit_type = "NT breacher"
icon_state = "breacher_rig_cheap"
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 70, bio = 100, rad = 50)
armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 45, bio = 100, rad = 50)
emp_protection = -20
slowdown = 6
offline_slowdown = 10
vision_restriction = 1
offline_vision_restriction = 2
chest_type = /obj/item/clothing/suit/space/new_rig
helm_type = /obj/item/clothing/head/helmet/space/new_rig/unathi
boot_type = /obj/item/clothing/shoes/magboots/rig/unathi
@@ -19,7 +19,7 @@
desc = "An authentic Unathi breacher chassis. Huge, bulky and absurdly heavy. It must be like wearing a tank."
suit_type = "breacher chassis"
icon_state = "breacher_rig"
armor = list(melee = 90, bullet = 90, laser = 90, energy = 90, bomb = 90, bio = 100, rad = 80) //Takes TEN TIMES as much damage to stop someone in a breacher. In exchange, it's slow.
armor = list(melee = 45, bullet = 45, laser = 45, energy = 45, bomb = 45, bio = 100, rad = 75) //Takes TEN TIMES as much damage to stop someone in a breacher. In exchange, it's slow. //Whoever made this was on meth
vision_restriction = 0
/obj/item/clothing/head/helmet/space/new_rig/unathi
@@ -27,6 +27,6 @@
/obj/item/clothing/suit/space/new_rig/unathi
species_restricted = list("Unathi")
/obj/item/clothing/shoes/magboots/rig/unathi
species_restricted = list("Unathi")
@@ -5,7 +5,7 @@
desc = "A sleek and dangerous hardsuit for active combat."
icon_state = "security_rig"
suit_type = "combat hardsuit"
armor = list(melee = 80, bullet = 65, laser = 50, energy = 15, bomb = 80, bio = 100, rad = 60)
armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100)
slowdown = 1
offline_slowdown = 3
offline_vision_restriction = 1
@@ -10,7 +10,7 @@
req_access = list(access_cent_specops)
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
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/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
@@ -27,7 +27,6 @@
desc = "A suit worn by the engineering division of an Emergency Response Team. Has orange highlights. Armoured and space ready."
suit_type = "ERT engineer"
icon_state = "ert_engineer_rig"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
siemens_coefficient = 0
initial_modules = list(
@@ -68,7 +67,6 @@
desc = "A heavy suit worn by the highest level of Asset Protection, don't mess with the person wearing this. Armoured and space ready."
suit_type = "heavy asset protection"
icon_state = "asset_protection_rig"
armor = list(melee = 60, bullet = 50, laser = 50,energy = 40, bomb = 40, bio = 100, rad = 100)
initial_modules = list(
/obj/item/rig_module/ai_container,
@@ -5,7 +5,6 @@
icon_state = "ninja_rig"
suit_type = "light suit"
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/stock_parts/cell)
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
emp_protection = 10
slowdown = 0
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
@@ -5,7 +5,7 @@
desc = "A blood-red hardsuit featuring some fairly illegal technology."
icon_state = "merc_rig"
suit_type = "crimson hardsuit"
armor = list(melee = 80, bullet = 65, laser = 50, energy = 15, bomb = 80, bio = 100, rad = 60)
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
slowdown = 1
offline_slowdown = 3
offline_vision_restriction = 1
@@ -15,7 +15,7 @@
suit_type = "augmented suit"
desc = "Prepare for paperwork."
icon_state = "internalaffairs_rig"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
slowdown = 0
offline_slowdown = 0
@@ -51,7 +51,7 @@
suit_type = "industrial hardsuit"
desc = "A heavy, powerful rig used by construction crews and mining corporations."
icon_state = "engineering_rig"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 50)
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
slowdown = 3
offline_slowdown = 10
offline_vision_restriction = 2
@@ -80,7 +80,6 @@
suit_type = "EVA hardsuit"
desc = "A light rig for repairs and maintenance to the outside of habitats and vessels."
icon_state = "eva_rig"
armor = list(melee = 30, bullet = 10, laser = 20,energy = 25, bomb = 20, bio = 100, rad = 100)
slowdown = 0
offline_slowdown = 1
offline_vision_restriction = 1
@@ -108,7 +107,7 @@
suit_type = "advanced voidsuit"
desc = "An advanced voidsuit that protects against hazardous, low pressure environments. Shines with a high polish."
icon_state = "ce_rig"
armor = list(melee = 40, bullet = 10, laser = 30,energy = 25, bomb = 40, bio = 100, rad = 100)
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 90)
slowdown = 0
offline_slowdown = 0
offline_vision_restriction = 0
@@ -150,7 +149,6 @@
suit_type = "hazmat hardsuit"
desc = "An Anomalous Material Interaction hardsuit that protects against the strangest energies the universe can throw at it."
icon_state = "science_rig"
armor = list(melee = 45, bullet = 5, laser = 45, energy = 80, bomb = 60, bio = 100, rad = 100)
slowdown = 1
offline_vision_restriction = 1
@@ -179,7 +177,7 @@
suit_type = "rescue hardsuit"
desc = "A durable suit designed for medical rescue in high risk areas."
icon_state = "medical_rig"
armor = list(melee = 30, bullet = 15, laser = 20, energy = 60, bomb = 30, bio = 100, rad = 100)
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
slowdown = 1
offline_vision_restriction = 1
@@ -204,7 +202,7 @@
suit_type = "hazard hardsuit"
desc = "A Security hardsuit designed for prolonged EVA in dangerous environments."
icon_state = "hazard_rig"
armor = list(melee = 60, bullet = 40, laser = 30, energy = 15, bomb = 60, bio = 100, rad = 30)
armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50)
slowdown = 1
offline_slowdown = 3
offline_vision_restriction = 1
+2 -3
View File
@@ -5,7 +5,7 @@
icon_state = "syndicate"
item_state = "syndicate"
desc = "Has a tag: Totally not property of an enemy corporation, honest."
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
/obj/item/clothing/suit/space/syndicate
name = "red space suit"
@@ -14,8 +14,7 @@
desc = "Has a tag on it: Totally not property of of a hostile corporation, honest!"
w_class = 3
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)
slowdown = 1
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
//Green syndicate space suit
-1
View File
@@ -11,5 +11,4 @@
icon_state = "void"
item_state = "void"
desc = "A high tech, NASA Centcom branch designed, dark red Space suit. Used for AI satellite maintenance."
slowdown = 1
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/multitool)
+5
View File
@@ -1,4 +1,9 @@
//Unathi clothing.
/obj/item/clothing/suit/unathi/
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
)
/obj/item/clothing/suit/unathi/robe
name = "roughspun robes"

Some files were not shown because too many files have changed in this diff Show More