This commit is contained in:
FalseIncarnate
2016-12-29 21:13:00 -05:00
841 changed files with 33426 additions and 30013 deletions
+8 -8
View File
@@ -354,8 +354,8 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
output += "<td width='65%' align='center' bgcolor='#f9f9f9'>"
output += "<form method='GET' action='?src=\ref[src]'><b>Add custom ban:</b> (ONLY use this if you can't ban through any other method)"
output += "<input type='hidden' name='src' value='\ref[src]'>"
output += "<form method='GET' action='?src=[UID()]'><b>Add custom ban:</b> (ONLY use this if you can't ban through any other method)"
output += "<input type='hidden' name='src' value='[UID()]'>"
output += "<table width='100%'><tr>"
output += "<td width='50%' align='right'><b>Ban type:</b><select name='dbbanaddtype'>"
output += "<option value=''>--</option>"
@@ -392,8 +392,8 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
output += "</tr>"
output += "</table>"
output += "<form method='GET' action='?src=\ref[src]'><table width='60%'><tr><td colspan='2' align='left'><b>Search:</b>"
output += "<input type='hidden' name='src' value='\ref[src]'></td></tr>"
output += "<form method='GET' action='?src=[UID()]'><table width='60%'><tr><td colspan='2' align='left'><b>Search:</b>"
output += "<input type='hidden' name='src' value='[UID()]'></td></tr>"
output += "<tr><td width='50%' align='right'><b>Ckey:</b> <input type='text' name='dbsearchckey' value='[playerckey]'></td>"
output += "<td width='50%' align='right'><b>Admin ckey:</b> <input type='text' name='dbsearchadmin' value='[adminckey]'></td></tr>"
output += "<tr><td width='50%' align='right'><b>IP:</b> <input type='text' name='dbsearchip' value='[playerip]'></td>"
@@ -512,7 +512,7 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
if("PERMABAN")
typedesc = "<font color='red'><b>PERMABAN</b></font>"
if("TEMPBAN")
typedesc = "<b>TEMPBAN</b><br><font size='2'>([duration] minutes [(unbanned) ? "" : "(<a href=\"byond://?src=\ref[src];dbbanedit=duration;dbbanid=[banid]\">Edit</a>))"]<br>Expires [expiration]</font>"
typedesc = "<b>TEMPBAN</b><br><font size='2'>([duration] minutes [(unbanned) ? "" : "(<a href=\"byond://?src=[UID()];dbbanedit=duration;dbbanid=[banid]\">Edit</a>))"]<br>Expires [expiration]</font>"
if("JOB_PERMABAN")
typedesc = "<b>JOBBAN</b><br><font size='2'>([job])"
if("JOB_TEMPBAN")
@@ -522,21 +522,21 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
if("ADMIN_PERMABAN")
typedesc = "<b>ADMIN PERMABAN</b>"
if("ADMIN_TEMPBAN")
typedesc = "<b>ADMIN TEMPBAN</b><br><font size='2'>([duration] minutes [(unbanned) ? "" : "(<a href=\"byond://?src=\ref[src];dbbanedit=duration;dbbanid=[banid]\">Edit</a>))"]<br>Expires [expiration]</font>"
typedesc = "<b>ADMIN TEMPBAN</b><br><font size='2'>([duration] minutes [(unbanned) ? "" : "(<a href=\"byond://?src=[UID()];dbbanedit=duration;dbbanid=[banid]\">Edit</a>))"]<br>Expires [expiration]</font>"
output += "<tr bgcolor='[dcolor]'>"
output += "<td align='center'>[typedesc]</td>"
output += "<td align='center'><b>[ckey]</b></td>"
output += "<td align='center'>[bantime]</td>"
output += "<td align='center'><b>[ackey]</b></td>"
output += "<td align='center'>[(unbanned) ? "" : "<b><a href=\"byond://?src=\ref[src];dbbanedit=unban;dbbanid=[banid]\">Unban</a></b>"]</td>"
output += "<td align='center'>[(unbanned) ? "" : "<b><a href=\"byond://?src=[UID()];dbbanedit=unban;dbbanid=[banid]\">Unban</a></b>"]</td>"
output += "</tr>"
output += "<tr bgcolor='[dcolor]'>"
output += "<td align='center' colspan='2' bgcolor=''><b>IP:</b> [ip]</td>"
output += "<td align='center' colspan='3' bgcolor=''><b>CIP:</b> [cid]</td>"
output += "</tr>"
output += "<tr bgcolor='[lcolor]'>"
output += "<td align='center' colspan='5'><b>Reason: [(unbanned) ? "" : "(<a href=\"byond://?src=\ref[src];dbbanedit=reason;dbbanid=[banid]\">Edit</a>)"]</b> <cite>\"[reason]\"</cite></td>"
output += "<td align='center' colspan='5'><b>Reason: [(unbanned) ? "" : "(<a href=\"byond://?src=[UID()];dbbanedit=reason;dbbanid=[banid]\">Edit</a>)"]</b> <cite>\"[reason]\"</cite></td>"
output += "</tr>"
if(edits)
output += "<tr bgcolor='[dcolor]'>"
+1 -1
View File
@@ -177,7 +177,7 @@ var/savefile/Banlist
for(var/A in Banlist.dir)
count++
Banlist.cd = "/base/[A]"
var/ref = "\ref[src]"
var/ref = UID()
var/key = Banlist["key"]
var/id = Banlist["id"]
var/ip = Banlist["ip"]
+76 -58
View File
@@ -1,6 +1,5 @@
var/global/BSACooldown = 0
var/global/floorIsLava = 0
var/global/nologevent = 0
////////////////////////////////
@@ -50,11 +49,11 @@ var/global/nologevent = 0
body += " \[<A href='?_src_=holder;revive=\ref[M]'>Heal</A>\] "
body += "<br><br>\[ "
body += "<a href='?_src_=vars;Vars=\ref[M]'>VV</a> - "
body += "<a href='?_src_=vars;Vars=[M.UID()]'>VV</a> - "
body += "<a href='?_src_=holder;traitor=\ref[M]'>TP</a> - "
body += "<a href='?src=\ref[usr];priv_msg=\ref[M]'>PM</a> - "
body += "<a href='?src=[usr.UID()];priv_msg=\ref[M]'>PM</a> - "
body += "<a href='?_src_=holder;subtlemessage=\ref[M]'>SM</a> - "
body += "[admin_jump_link(M, src)]\] </b><br>"
body += "[admin_jump_link(M)]\] </b><br>"
body += "<b>Mob type:</b> [M.type]<br>"
if(M.client)
@@ -257,12 +256,12 @@ var/global/nologevent = 0
<BR>Note that this panel allows full freedom over the news network, there are no constrictions except the few basic ones. Don't break things!</FONT>
"}
if(news_network.wanted_issue)
dat+= "<HR><A href='?src=\ref[src];ac_view_wanted=1'>Read Wanted Issue</A>"
dat+= "<HR><A href='?src=[UID()];ac_view_wanted=1'>Read Wanted Issue</A>"
dat+= {"<HR><BR><A href='?src=\ref[src];ac_create_channel=1'>Create Feed Channel</A>
<BR><A href='?src=\ref[src];ac_view=1'>View Feed Channels</A>
<BR><A href='?src=\ref[src];ac_create_feed_story=1'>Submit new Feed story</A>
<BR><BR><A href='?src=\ref[usr];mach_close=newscaster_main'>Exit</A>
dat+= {"<HR><BR><A href='?src=[UID()];ac_create_channel=1'>Create Feed Channel</A>
<BR><A href='?src=[UID()];ac_view=1'>View Feed Channels</A>
<BR><A href='?src=[UID()];ac_create_feed_story=1'>Submit new Feed story</A>
<BR><BR><A href='?src=[usr.UID()];mach_close=newscaster_main'>Exit</A>
"}
var/wanted_already = 0
@@ -270,10 +269,10 @@ var/global/nologevent = 0
wanted_already = 1
dat+={"<HR><B>Feed Security functions:</B><BR>
<BR><A href='?src=\ref[src];ac_menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>
<BR><A href='?src=\ref[src];ac_menu_censor_story=1'>Censor Feed Stories</A>
<BR><A href='?src=\ref[src];ac_menu_censor_channel=1'>Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel.</A>
<BR><HR><A href='?src=\ref[src];ac_set_signature=1'>The newscaster recognises you as:<BR> <FONT COLOR='green'>[src.admincaster_signature]</FONT></A>
<BR><A href='?src=[UID()];ac_menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>
<BR><A href='?src=[UID()];ac_menu_censor_story=1'>Censor Feed Stories</A>
<BR><A href='?src=[UID()];ac_menu_censor_channel=1'>Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel.</A>
<BR><HR><A href='?src=[UID()];ac_set_signature=1'>The newscaster recognises you as:<BR> <FONT COLOR='green'>[src.admincaster_signature]</FONT></A>
"}
if(1)
dat+= "Station Feed Channels<HR>"
@@ -282,38 +281,38 @@ var/global/nologevent = 0
else
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
if(CHANNEL.is_admin_channel)
dat+="<B><FONT style='BACKGROUND-COLOR: LightGreen'><A href='?src=\ref[src];ac_show_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A></FONT></B><BR>"
dat+="<B><FONT style='BACKGROUND-COLOR: LightGreen'><A href='?src=[UID()];ac_show_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A></FONT></B><BR>"
else
dat+="<B><A href='?src=\ref[src];ac_show_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR></B>"
dat+={"<BR><HR><A href='?src=\ref[src];ac_refresh=1'>Refresh</A>
<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Back</A>
dat+="<B><A href='?src=[UID()];ac_show_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR></B>"
dat+={"<BR><HR><A href='?src=[UID()];ac_refresh=1'>Refresh</A>
<BR><A href='?src=[UID()];ac_setScreen=[0]'>Back</A>
"}
if(2)
dat+={"
Creating new Feed Channel...
<HR><B><A href='?src=\ref[src];ac_set_channel_name=1'>Channel Name</A>:</B> [src.admincaster_feed_channel.channel_name]<BR>
<B><A href='?src=\ref[src];ac_set_signature=1'>Channel Author</A>:</B> <FONT COLOR='green'>[src.admincaster_signature]</FONT><BR>
<B><A href='?src=\ref[src];ac_set_channel_lock=1'>Will Accept Public Feeds</A>:</B> [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]<BR><BR>
<BR><A href='?src=\ref[src];ac_submit_new_channel=1'>Submit</A><BR><BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A><BR>
<HR><B><A href='?src=[UID()];ac_set_channel_name=1'>Channel Name</A>:</B> [src.admincaster_feed_channel.channel_name]<BR>
<B><A href='?src=[UID()];ac_set_signature=1'>Channel Author</A>:</B> <FONT COLOR='green'>[src.admincaster_signature]</FONT><BR>
<B><A href='?src=[UID()];ac_set_channel_lock=1'>Will Accept Public Feeds</A>:</B> [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]<BR><BR>
<BR><A href='?src=[UID()];ac_submit_new_channel=1'>Submit</A><BR><BR><A href='?src=[UID()];ac_setScreen=[0]'>Cancel</A><BR>
"}
if(3)
dat+={"
Creating new Feed Message...
<HR><B><A href='?src=\ref[src];ac_set_channel_receiving=1'>Receiving Channel</A>:</B> [src.admincaster_feed_channel.channel_name]<BR>
<HR><B><A href='?src=[UID()];ac_set_channel_receiving=1'>Receiving Channel</A>:</B> [src.admincaster_feed_channel.channel_name]<BR>
<B>Message Author:</B> <FONT COLOR='green'>[src.admincaster_signature]</FONT><BR>
<B><A href='?src=\ref[src];ac_set_new_message=1'>Message Body</A>:</B> [src.admincaster_feed_message.body] <BR>
<BR><A href='?src=\ref[src];ac_submit_new_message=1'>Submit</A><BR><BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A><BR>
<B><A href='?src=[UID()];ac_set_new_message=1'>Message Body</A>:</B> [src.admincaster_feed_message.body] <BR>
<BR><A href='?src=[UID()];ac_submit_new_message=1'>Submit</A><BR><BR><A href='?src=[UID()];ac_setScreen=[0]'>Cancel</A><BR>
"}
if(4)
dat+={"
Feed story successfully submitted to [src.admincaster_feed_channel.channel_name].<BR><BR>
<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Return</A><BR>
<BR><A href='?src=[UID()];ac_setScreen=[0]'>Return</A><BR>
"}
if(5)
dat+={"
Feed Channel [src.admincaster_feed_channel.channel_name] created successfully.<BR><BR>
<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Return</A><BR>
<BR><A href='?src=[UID()];ac_setScreen=[0]'>Return</A><BR>
"}
if(6)
dat+="<B><FONT COLOR='maroon'>ERROR: Could not submit Feed story to Network.</B></FONT><HR><BR>"
@@ -321,7 +320,7 @@ var/global/nologevent = 0
dat+="<FONT COLOR='maroon'>•Invalid receiving channel name.</FONT><BR>"
if(src.admincaster_feed_message.body == "" || src.admincaster_feed_message.body == "\[REDACTED\]")
dat+="<FONT COLOR='maroon'>•Invalid message body.</FONT><BR>"
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[3]'>Return</A><BR>"
dat+="<BR><A href='?src=[UID()];ac_setScreen=[3]'>Return</A><BR>"
if(7)
dat+="<B><FONT COLOR='maroon'>ERROR: Could not submit Feed Channel to Network.</B></FONT><HR><BR>"
if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]")
@@ -333,7 +332,7 @@ var/global/nologevent = 0
break
if(check)
dat+="<FONT COLOR='maroon'>•Channel name already in use.</FONT><BR>"
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[2]'>Return</A><BR>"
dat+="<BR><A href='?src=[UID()];ac_setScreen=[2]'>Return</A><BR>"
if(9)
dat+="<B>[src.admincaster_feed_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.admincaster_feed_channel.author]</FONT>\]</FONT><HR>"
if(src.admincaster_feed_channel.censored)
@@ -354,8 +353,8 @@ var/global/nologevent = 0
dat+="<img src='tmp_photo[i].png' width = '180'><BR><BR>"
dat+="<FONT SIZE=1>\[Story by <FONT COLOR='maroon'>[MESSAGE.author]</FONT>\]</FONT><BR>"
dat+={"
<BR><HR><A href='?src=\ref[src];ac_refresh=1'>Refresh</A>
<BR><A href='?src=\ref[src];ac_setScreen=[1]'>Back</A>
<BR><HR><A href='?src=[UID()];ac_refresh=1'>Refresh</A>
<BR><A href='?src=[UID()];ac_setScreen=[1]'>Back</A>
"}
if(10)
dat+={"
@@ -368,8 +367,8 @@ var/global/nologevent = 0
dat+="<I>No feed channels found active...</I><BR>"
else
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
dat+="<A href='?src=\ref[src];ac_pick_censor_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A>"
dat+="<A href='?src=[UID()];ac_pick_censor_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
dat+="<BR><A href='?src=[UID()];ac_setScreen=[0]'>Cancel</A>"
if(11)
dat+={"
<B>Nanotrasen D-Notice Handler</B><HR>
@@ -381,13 +380,13 @@ var/global/nologevent = 0
dat+="<I>No feed channels found active...</I><BR>"
else
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
dat+="<A href='?src=\ref[src];ac_pick_d_notice=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
dat+="<A href='?src=[UID()];ac_pick_d_notice=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Back</A>"
dat+="<BR><A href='?src=[UID()];ac_setScreen=[0]'>Back</A>"
if(12)
dat+={"
<B>[src.admincaster_feed_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[src.admincaster_feed_channel.author]</FONT> \]</FONT><BR>
<FONT SIZE=2><A href='?src=\ref[src];ac_censor_channel_author=\ref[src.admincaster_feed_channel]'>[(src.admincaster_feed_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]</A></FONT><HR>
<FONT SIZE=2><A href='?src=[UID()];ac_censor_channel_author=\ref[src.admincaster_feed_channel]'>[(src.admincaster_feed_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]</A></FONT><HR>
"}
if( isemptylist(src.admincaster_feed_channel.messages) )
dat+="<I>No feed messages found in channel...</I><BR>"
@@ -395,13 +394,13 @@ var/global/nologevent = 0
for(var/datum/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
dat+={"
-[MESSAGE.body] <BR><FONT SIZE=1>\[Story by <FONT COLOR='maroon'>[MESSAGE.author]</FONT>\]</FONT><BR>
<FONT SIZE=2><A href='?src=\ref[src];ac_censor_channel_story_body=\ref[MESSAGE]'>[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")]</A> - <A href='?src=\ref[src];ac_censor_channel_story_author=\ref[MESSAGE]'>[(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]</A></FONT><BR>
<FONT SIZE=2><A href='?src=[UID()];ac_censor_channel_story_body=\ref[MESSAGE]'>[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")]</A> - <A href='?src=[UID()];ac_censor_channel_story_author=\ref[MESSAGE]'>[(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]</A></FONT><BR>
"}
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[10]'>Back</A>"
dat+="<BR><A href='?src=[UID()];ac_setScreen=[10]'>Back</A>"
if(13)
dat+={"
<B>[src.admincaster_feed_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[src.admincaster_feed_channel.author]</FONT> \]</FONT><BR>
Channel messages listed below. If you deem them dangerous to the station, you can <A href='?src=\ref[src];ac_toggle_d_notice=\ref[src.admincaster_feed_channel]'>Bestow a D-Notice upon the channel</A>.<HR>
Channel messages listed below. If you deem them dangerous to the station, you can <A href='?src=[UID()];ac_toggle_d_notice=\ref[src.admincaster_feed_channel]'>Bestow a D-Notice upon the channel</A>.<HR>
"}
if(src.admincaster_feed_channel.censored)
dat+={"
@@ -415,7 +414,7 @@ var/global/nologevent = 0
for(var/datum/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
dat+="-[MESSAGE.body] <BR><FONT SIZE=1>\[Story by <FONT COLOR='maroon'>[MESSAGE.author]</FONT>\]</FONT><BR>"
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[11]'>Back</A>"
dat+="<BR><A href='?src=[UID()];ac_setScreen=[11]'>Back</A>"
if(14)
dat+="<B>Wanted Issue Handler:</B>"
var/wanted_already = 0
@@ -427,21 +426,21 @@ var/global/nologevent = 0
dat+="<FONT SIZE=2><BR><I>A wanted issue is already in Feed Circulation. You can edit or cancel it below.</FONT></I>"
dat+={"
<HR>
<A href='?src=\ref[src];ac_set_wanted_name=1'>Criminal Name</A>: [src.admincaster_feed_message.author] <BR>
<A href='?src=\ref[src];ac_set_wanted_desc=1'>Description</A>: [src.admincaster_feed_message.body] <BR>
<A href='?src=[UID()];ac_set_wanted_name=1'>Criminal Name</A>: [src.admincaster_feed_message.author] <BR>
<A href='?src=[UID()];ac_set_wanted_desc=1'>Description</A>: [src.admincaster_feed_message.body] <BR>
"}
if(wanted_already)
dat+="<B>Wanted Issue created by:</B><FONT COLOR='green'> [news_network.wanted_issue.backup_author]</FONT><BR>"
else
dat+="<B>Wanted Issue will be created under prosecutor:</B><FONT COLOR='green'> [src.admincaster_signature]</FONT><BR>"
dat+="<BR><A href='?src=\ref[src];ac_submit_wanted=[end_param]'>[(wanted_already) ? ("Edit Issue") : ("Submit")]</A>"
dat+="<BR><A href='?src=[UID()];ac_submit_wanted=[end_param]'>[(wanted_already) ? ("Edit Issue") : ("Submit")]</A>"
if(wanted_already)
dat+="<BR><A href='?src=\ref[src];ac_cancel_wanted=1'>Take down Issue</A>"
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A>"
dat+="<BR><A href='?src=[UID()];ac_cancel_wanted=1'>Take down Issue</A>"
dat+="<BR><A href='?src=[UID()];ac_setScreen=[0]'>Cancel</A>"
if(15)
dat+={"
<FONT COLOR='green'>Wanted issue for [src.admincaster_feed_message.author] is now in Network Circulation.</FONT><BR><BR>
<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Return</A><BR>
<BR><A href='?src=[UID()];ac_setScreen=[0]'>Return</A><BR>
"}
if(16)
dat+="<B><FONT COLOR='maroon'>ERROR: Wanted Issue rejected by Network.</B></FONT><HR><BR>"
@@ -449,11 +448,11 @@ var/global/nologevent = 0
dat+="<FONT COLOR='maroon'>•Invalid name for person wanted.</FONT><BR>"
if(src.admincaster_feed_message.body == "" || src.admincaster_feed_message.body == "\[REDACTED\]")
dat+="<FONT COLOR='maroon'>•Invalid description.</FONT><BR>"
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Return</A><BR>"
dat+="<BR><A href='?src=[UID()];ac_setScreen=[0]'>Return</A><BR>"
if(17)
dat+={"
<B>Wanted Issue successfully deleted from Circulation</B><BR>
<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Return</A><BR>
<BR><A href='?src=[UID()];ac_setScreen=[0]'>Return</A><BR>
"}
if(18)
dat+={"
@@ -467,11 +466,11 @@ var/global/nologevent = 0
dat+="<BR><img src='tmp_photow.png' width = '180'>"
else
dat+="None"
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Back</A><BR>"
dat+="<BR><A href='?src=[UID()];ac_setScreen=[0]'>Back</A><BR>"
if(19)
dat+={"
<FONT COLOR='green'>Wanted issue for [src.admincaster_feed_message.author] successfully edited.</FONT><BR><BR>
<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Return</A><BR>
<BR><A href='?src=[UID()];ac_setScreen=[0]'>Return</A><BR>
"}
else
dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com"
@@ -490,7 +489,7 @@ var/global/nologevent = 0
var/r = t
if( findtext(r,"##") )
r = copytext( r, 1, findtext(r,"##") )//removes the description
dat += text("<tr><td>[t] (<A href='?src=\ref[src];removejobban=[r]'>unban</A>)</td></tr>")
dat += text("<tr><td>[t] (<A href='?src=[UID()];removejobban=[r]'>unban</A>)</td></tr>")
dat += "</table>"
usr << browse(dat, "window=ban;size=400x400")
@@ -500,17 +499,17 @@ var/global/nologevent = 0
var/dat = {"
<center><B>Game Panel</B></center><hr>\n
<A href='?src=\ref[src];c_mode=1'>Change Game Mode</A><br>
<A href='?src=[UID()];c_mode=1'>Change Game Mode</A><br>
"}
if(master_mode == "secret")
dat += "<A href='?src=\ref[src];f_secret=1'>(Force Secret Mode)</A><br>"
dat += "<A href='?src=[UID()];f_secret=1'>(Force Secret Mode)</A><br>"
dat += {"
<BR>
<A href='?src=\ref[src];create_object=1'>Create Object</A><br>
<A href='?src=\ref[src];quick_create_object=1'>Quick Create Object</A><br>
<A href='?src=\ref[src];create_turf=1'>Create Turf</A><br>
<A href='?src=\ref[src];create_mob=1'>Create Mob</A><br>
<A href='?src=[UID()];create_object=1'>Create Object</A><br>
<A href='?src=[UID()];quick_create_object=1'>Quick Create Object</A><br>
<A href='?src=[UID()];create_turf=1'>Create Turf</A><br>
<A href='?src=[UID()];create_mob=1'>Create Mob</A><br>
"}
usr << browse(dat, "window=admin2;size=210x280")
@@ -540,9 +539,9 @@ var/global/nologevent = 0
world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", delay)
/datum/admins/proc/announce()
set category = "Special Verbs"
set category = "Admin"
set name = "Announce"
set desc="Announce your desires to the world"
set desc = "Announce your desires to the world"
if(!check_rights(R_ADMIN))
return
@@ -1002,3 +1001,22 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space
qdel(frommob)
return 1
// Returns a list of the number of admins in various categories
// result[1] is the number of staff that match the rank mask and are active
// result[2] is the number of staff that do not match the rank mask
// result[3] is the number of staff that match the rank mask and are inactive
/proc/staff_countup(rank_mask = R_BAN)
var/list/result = list(0, 0, 0)
for(var/client/X in admins)
if(rank_mask && !check_rights_for(X, rank_mask))
result[2]++
continue
if(X.holder.fakekey)
result[2]++
continue
if(X.is_afk())
result[3]++
continue
result[1]++
return result
+6 -4
View File
@@ -52,7 +52,7 @@ var/list/admin_verbs_admin = list(
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
/client/proc/cmd_admin_say, /*admin-only ooc chat*/
/datum/admins/proc/PlayerNotes,
/client/proc/cmd_mod_say,
/client/proc/cmd_mentor_say,
/datum/admins/proc/show_player_notes,
/client/proc/free_slot, /*frees slot for chosen job*/
/client/proc/toggleattacklogs,
@@ -74,7 +74,8 @@ var/list/admin_verbs_admin = list(
/client/proc/change_human_appearance_self, /* Allows the human-based mob itself change its basic appearance */
/client/proc/debug_variables,
/client/proc/show_snpc_verbs,
/client/proc/reset_all_tcs /*resets all telecomms scripts*/
/client/proc/reset_all_tcs, /*resets all telecomms scripts*/
/client/proc/toggle_mentor_chat
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
@@ -183,7 +184,7 @@ var/list/admin_verbs_mod = list(
/client/proc/cmd_admin_pm_by_key_panel, /*admin-pm list by key*/
/datum/admins/proc/PlayerNotes,
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
/client/proc/cmd_mod_say,
/client/proc/cmd_mentor_say,
/datum/admins/proc/show_player_notes,
/client/proc/player_panel_new,
/client/proc/dsay,
@@ -195,6 +196,7 @@ var/list/admin_verbs_mentor = list(
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
/client/proc/cmd_admin_pm_by_key_panel /*admin-pm list by key*/
// cmd_mentor_say is added/removed by the toggle_mentor_chat verb
)
var/list/admin_verbs_proccall = list(
/client/proc/callproc,
@@ -532,7 +534,7 @@ var/list/admin_verbs_snpc = list(
#undef AUTOBANTIME
/client/proc/drop_bomb() // Some admin dickery that can probably be done better -- TLE
set category = "Special Verbs"
set category = "Event"
set name = "Drop Bomb"
set desc = "Cause an explosion of varying strength at your location."
+3 -2
View File
@@ -396,7 +396,8 @@
/proc/togglebuildmode(mob/M as mob in player_list)
set name = "Toggle Build Mode"
set category = "Special Verbs"
set category = "Event"
if(M.client)
if(istype(M.client.click_intercept,/datum/click_intercept/buildmode))
var/datum/click_intercept/buildmode/B = M.client.click_intercept
@@ -404,7 +405,7 @@
log_admin("[key_name(usr)] has left build mode.")
else
new/datum/click_intercept/buildmode(M.client)
message_admins("[key_name(usr)] has entered build mode.")
message_admins("[key_name_admin(usr)] has entered build mode.")
log_admin("[key_name(usr)] has entered build mode.")
/datum/click_intercept/buildmode/InterceptClickOn(user,params,atom/object) //Click Intercept
+1 -1
View File
@@ -6,4 +6,4 @@
create_mob_html = file2text('html/create_object.html')
create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"")
user << browse(replacetext(create_mob_html, "/* ref src */", "\ref[src]"), "window=create_mob;size=425x475")
user << browse(replacetext(create_mob_html, "/* ref src */", UID()), "window=create_mob;size=425x475")
+2 -2
View File
@@ -8,7 +8,7 @@ var/list/create_object_forms = list(/obj, /obj/structure, /obj/machinery, /obj/e
create_object_html = file2text('html/create_object.html')
create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"")
user << browse(replacetext(create_object_html, "/* ref src */", "\ref[src]"), "window=create_object;size=425x475")
user << browse(replacetext(create_object_html, "/* ref src */", UID()), "window=create_object;size=425x475")
/datum/admins/proc/quick_create_object(var/mob/user)
var/path = input("Select the path of the object you wish to create.", "Path", /obj) in create_object_forms
@@ -20,4 +20,4 @@ var/list/create_object_forms = list(/obj, /obj/structure, /obj/machinery, /obj/e
html_form = replacetext(html_form, "null /* object types */", "\"[objectjs]\"")
create_object_forms[path] = html_form
user << browse(replacetext(html_form, "/* ref src */", "\ref[src]"), "window=qco[path];size=425x475")
user << browse(replacetext(html_form, "/* ref src */", UID()), "window=qco[path];size=425x475")
+1 -1
View File
@@ -6,4 +6,4 @@
create_turf_html = file2text('html/create_object.html')
create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"")
user << browse(replacetext(create_turf_html, "/* ref src */", "\ref[src]"), "window=create_turf;size=425x475")
user << browse(replacetext(create_turf_html, "/* ref src */", UID()), "window=create_turf;size=425x475")
@@ -20,7 +20,7 @@
<body onload='selectTextField();updateSearch();'>
<div id='main'><table id='searchable' cellspacing='0'>
<tr class='title'>
<th style='width:125px;text-align:right;'>CKEY <a class='small' href='?src=\ref[src];editrights=add'>\[+\]</a></th>
<th style='width:125px;text-align:right;'>CKEY <a class='small' href='?src=[UID()];editrights=add'>\[+\]</a></th>
<th style='width:125px;'>RANK</th><th style='width:100%;'>PERMISSIONS</th>
</tr>
"}
@@ -32,15 +32,15 @@
var/rights = rights2text(D.rights," ")
if(!rights) rights = "*none*"
output += {"<tr>
<td style='text-align:right;'>[adm_ckey] <a class='small' href='?src=\ref[src];editrights=remove;ckey=[adm_ckey]'>\[-\]</a></td>
<td><a href='?src=\ref[src];editrights=rank;ckey=[adm_ckey]'>[rank]</a></td>
<td><a class='small' href='?src=\ref[src];editrights=permissions;ckey=[adm_ckey]'>[rights]</a></font></td>
<td style='text-align:right;'>[adm_ckey] <a class='small' href='?src=[UID()];editrights=remove;ckey=[adm_ckey]'>\[-\]</a></td>
<td><a href='?src=[UID()];editrights=rank;ckey=[adm_ckey]'>[rank]</a></td>
<td><a class='small' href='?src=[UID()];editrights=permissions;ckey=[adm_ckey]'>[rights]</a></font></td>
</tr>"}
/*output += "<tr>"
output += "<td style='text-align:right;'>[adm_ckey] <a class='small' href='?src=\ref[src];editrights=remove;ckey=[adm_ckey]'>\[-\]</a></td>"
output += "<td><a href='?src=\ref[src];editrights=rank;ckey=[adm_ckey]'>[rank]</a></td>"
output += "<td><a class='small' href='?src=\ref[src];editrights=permissions;ckey=[adm_ckey]'>[rights]</a></font></td>"
output += "<td style='text-align:right;'>[adm_ckey] <a class='small' href='?src=[UID()];editrights=remove;ckey=[adm_ckey]'>\[-\]</a></td>"
output += "<td><a href='?src=[UID()];editrights=rank;ckey=[adm_ckey]'>[rank]</a></td>"
output += "<td><a class='small' href='?src=[UID()];editrights=permissions;ckey=[adm_ckey]'>[rights]</a></font></td>"
output += "</tr>"*/
output += {"
+20 -20
View File
@@ -75,18 +75,18 @@
body += "</td><td align='center'>";
body += "<a href='?src=\ref[src];adminplayeropts="+ref+"'>PP</a> - "
body += "<a href='?src=\ref[src];shownoteckey="+key+"'>N</a> - "
body += "<a href='?src=[UID()];adminplayeropts="+ref+"'>PP</a> - "
body += "<a href='?src=[UID()];shownoteckey="+key+"'>N</a> - "
body += "<a href='?_src_=vars;Vars="+ref+"'>VV</a> - "
body += "<a href='?src=\ref[src];traitor="+ref+"'>TP</a> - "
body += "<a href='?src=\ref[usr];priv_msg=\ref"+ref+"'>PM</a> - "
body += "<a href='?src=\ref[src];subtlemessage="+ref+"'>SM</a> - "
body += "<a href='?src=\ref[src];adminplayerobservefollow="+ref+"'>FLW</a>"
body += "<a href='?src=[UID()];traitor="+ref+"'>TP</a> - "
body += "<a href='?src=[usr.UID()];priv_msg=\ref"+ref+"'>PM</a> - "
body += "<a href='?src=[UID()];subtlemessage="+ref+"'>SM</a> - "
body += "<a href='?src=[UID()];adminplayerobservefollow="+ref+"'>FLW</a>"
if(eyeref)
body += "|<a href='?src=\ref[src];adminplayerobservefollow="+eyeref+"'>EYE</a>"
body += "|<a href='?src=[UID()];adminplayerobservefollow="+eyeref+"'>EYE</a>"
body += "<br>"
if(antagonist > 0)
body += "<font size='2'><a href='?src=\ref[src];check_antagonist=1'><font color='red'><b>Antagonist</b></font></a></font>";
body += "<font size='2'><a href='?src=[UID()];check_antagonist=1'><font color='red'><b>Antagonist</b></font></a></font>";
body += "</td></tr></table>";
@@ -197,7 +197,7 @@
<tr id='title_tr'>
<td align='center'>
<font size='5'><b>Player panel</b></font><br>
Hover over a line to see more information | [check_rights(R_ADMIN,0) ? "<a href='?src=\ref[src];check_antagonist=1'>Check antagonists</a> | Kick <a href='?_src_=holder;kick_all_from_lobby=1;afkonly=0'>everyone</a>/<a href='?_src_=holder;kick_all_from_lobby=1;afkonly=1'>AFKers</a> in lobby" : "" ]
Hover over a line to see more information | [check_rights(R_ADMIN,0) ? "<a href='?src=[UID()];check_antagonist=1'>Check antagonists</a> | Kick <a href='?_src_=holder;kick_all_from_lobby=1;afkonly=0'>everyone</a>/<a href='?_src_=holder;kick_all_from_lobby=1;afkonly=1'>AFKers</a> in lobby" : "" ]
<p>
</td>
</tr>
@@ -377,16 +377,16 @@
dat += {"<td>[(M.client ? "[M.client]" : "No client")]</td>
<td align=center><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>X</A></td>
<td align=center><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>
<td align=center><A HREF='?src=[UID()];adminplayeropts=\ref[M]'>X</A></td>
<td align=center><A href='?src=[usr.UID()];priv_msg=\ref[M]'>PM</A></td>
"}
switch(is_special_character(M))
if(0)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'>Traitor?</A></td>"}
dat += {"<td align=center><A HREF='?src=[UID()];traitor=\ref[M]'>Traitor?</A></td>"}
if(1)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
dat += {"<td align=center><A HREF='?src=[UID()];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
if(2)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
dat += {"<td align=center><A HREF='?src=[UID()];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
dat += "</table></body></html>"
@@ -401,8 +401,8 @@
else
logout_status = M.client ? "" : " <i>(logged out)</i>"
return {"<tr><td><a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a><b>[caption]</b>[logout_status][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>
<td><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>[close ? "</tr>" : ""]"}
return {"<tr><td><a href='?src=[UID()];adminplayeropts=\ref[M]'>[M.real_name]</a><b>[caption]</b>[logout_status][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>
<td><A href='?src=[usr.UID()];priv_msg=\ref[M]'>PM</A></td>[close ? "</tr>" : ""]"}
/datum/admins/proc/check_antagonists()
if(!check_rights(R_ADMIN)) return
@@ -412,7 +412,7 @@
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>"
dat += "<a href='?src=[UID()];call_shuttle=1'>Call Shuttle</a><br>"
else
var/timeleft = shuttle_master.emergency.timeLeft()
if(shuttle_master.emergency.mode < SHUTTLE_DOCKED)
@@ -421,7 +421,7 @@
else
dat += "ETA: <a href='?_src_=holder;edit_shuttle_time=1'>[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]</a><BR>"
dat += "<a href='?src=\ref[src];delay_round_end=1'>[ticker.delay_end ? "End Round Normally" : "Delay Round End"]</a><br>"
dat += "<a href='?src=[UID()];delay_round_end=1'>[ticker.delay_end ? "End Round Normally" : "Delay Round End"]</a><br>"
if(ticker.mode.syndicates.len)
dat += "<br><table cellspacing=5><tr><td><B>Syndicates</B></td><td></td></tr>"
for(var/datum/mind/N in ticker.mode.syndicates)
@@ -437,7 +437,7 @@
while(!istype(disk_loc, /turf))
if(istype(disk_loc, /mob))
var/mob/M = disk_loc
dat += "carried by <a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a> "
dat += "carried by <a href='?src=[UID()];adminplayeropts=\ref[M]'>[M.real_name]</a> "
if(istype(disk_loc, /obj))
var/obj/O = disk_loc
dat += "in \a [O.name] "
@@ -551,7 +551,7 @@
if(show_objectives)
txt += {"
<td>
<a href='?src=\ref[src];traitor=\ref[M]'>Show Objective</a>
<a href='?src=[UID()];traitor=\ref[M]'>Show Objective</a>
</td>
"}
+62 -62
View File
@@ -7,9 +7,9 @@
if(!check_rights(0)) return
var/dat = "<html><body><center>"
dat += "<a href='?src=\ref[src];secretsmenu=tab;tab=0' [current_tab == 0 ? "class='linkOn'" : ""]>Debug</a>"
dat += "<a href='?src=\ref[src];secretsmenu=tab;tab=1' [current_tab == 1 ? "class='linkOn'" : ""]>IC Events</a>"
dat += "<a href='?src=\ref[src];secretsmenu=tab;tab=2' [current_tab == 2 ? "class='linkOn'" : ""]>OOC Events</a>"
dat += "<a href='?src=[UID()];secretsmenu=tab;tab=0' [current_tab == 0 ? "class='linkOn'" : ""]>Debug</a>"
dat += "<a href='?src=[UID()];secretsmenu=tab;tab=1' [current_tab == 1 ? "class='linkOn'" : ""]>IC Events</a>"
dat += "<a href='?src=[UID()];secretsmenu=tab;tab=2' [current_tab == 2 ? "class='linkOn'" : ""]>OOC Events</a>"
dat += "</center>"
dat += "<HR>"
@@ -19,44 +19,44 @@
dat += {"
<center><B><h2>Admin Secrets</h2></B>
<B>Game</b><br>
<A href='?src=\ref[src];secretsadmin=showailaws'>Show AI Laws</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsadmin=showgm'>Show Game Mode</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsadmin=manifest'>Show Crew Manifest</A><br>
<A href='?src=\ref[src];secretsadmin=check_antagonist'>Show current traitors and objectives</A><BR>
<A href='?src=[UID()];secretsadmin=showailaws'>Show AI Laws</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsadmin=showgm'>Show Game Mode</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsadmin=manifest'>Show Crew Manifest</A><br>
<A href='?src=[UID()];secretsadmin=check_antagonist'>Show current traitors and objectives</A><BR>
<B>Bombs</b><br>
<A href='?src=\ref[src];secretsadmin=list_bombers'>Bombing List</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsadmin=clear_bombs'>Remove all bombs currently in existence</A>
[check_rights(R_SERVER, 0) ? "&nbsp;&nbsp;<A href='?src=\ref[src];secretsfun=togglebombcap'>Toggle bomb cap</A><br>" : "<br>"]
<A href='?src=[UID()];secretsadmin=list_bombers'>Bombing List</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsadmin=clear_bombs'>Remove all bombs currently in existence</A>
[check_rights(R_SERVER, 0) ? "&nbsp;&nbsp;<A href='?src=[UID()];secretsfun=togglebombcap'>Toggle bomb cap</A><br>" : "<br>"]
<B>Lists</b><br>
<A href='?src=\ref[src];secretsadmin=list_signalers'>Show last [length(lastsignalers)] signalers</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsadmin=list_lawchanges'>Show last [length(lawchanges)] law changes</A><BR>
<A href='?src=\ref[src];secretsadmin=DNA'>List DNA (Blood)</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsadmin=fingerprints'>List Fingerprints</A><BR>
<A href='?src=[UID()];secretsadmin=list_signalers'>Show last [length(lastsignalers)] signalers</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsadmin=list_lawchanges'>Show last [length(lawchanges)] law changes</A><BR>
<A href='?src=[UID()];secretsadmin=DNA'>List DNA (Blood)</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsadmin=fingerprints'>List Fingerprints</A><BR>
<B>Power</b><br>
<A href='?src=\ref[src];secretsfun=blackout'>Break all lights</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=whiteout'>Fix all lights</A><BR>
<A href='?src=\ref[src];secretsfun=power'>Make all areas powered</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=unpower'>Make all areas unpowered</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=quickpower'>Power all SMES</A><BR>
<A href='?src=[UID()];secretsfun=blackout'>Break all lights</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=whiteout'>Fix all lights</A><BR>
<A href='?src=[UID()];secretsfun=power'>Make all areas powered</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=unpower'>Make all areas unpowered</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=quickpower'>Power all SMES</A><BR>
</center>
"}
else if(check_rights(R_SERVER,0)) //only add this if admin secrets are unavailiable; otherwise, it's added inline
dat += "<center><b>Bomb cap: </b><A href='?src=\ref[src];secretsfun=togglebombcap'>Toggle bomb cap</A><BR></center>"
dat += "<center><b>Bomb cap: </b><A href='?src=[UID()];secretsfun=togglebombcap'>Toggle bomb cap</A><BR></center>"
dat += "<BR>"
if(check_rights(R_DEBUG,0))
dat += {"
<center>
<B>Security Level Elevated</B><BR>
<BR>
<A href='?src=\ref[src];secretscoder=maint_access_engiebrig'>Change all maintenance doors to engie/brig access only</A><BR>
<A href='?src=\ref[src];secretscoder=maint_access_brig'>Change all maintenance doors to brig access only</A><BR>
<A href='?src=\ref[src];secretscoder=infinite_sec'>Remove cap on security officers</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretscoder=maint_access_engiebrig'>Change all maintenance doors to engie/brig access only</A><BR>
<A href='?src=[UID()];secretscoder=maint_access_brig'>Change all maintenance doors to brig access only</A><BR>
<A href='?src=[UID()];secretscoder=infinite_sec'>Remove cap on security officers</A>&nbsp;&nbsp;
<BR>
<B>Coder Secrets</B><BR>
<BR>
<A href='?src=\ref[src];secretsadmin=list_job_debug'>Show Job Debug</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretscoder=spawn_objects'>Admin Log</A><BR>
<A href='?src=[UID()];secretsadmin=list_job_debug'>Show Job Debug</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretscoder=spawn_objects'>Admin Log</A><BR>
<BR>
</center>
"}
@@ -67,20 +67,20 @@
<center>
<h2><B>IC Events</B></h2>
<b>Teams</b><br>
<A href='?src=\ref[src];secretsfun=infiltrators_syndicate'>Send SIT - Syndicate Infiltration Team</A>&nbsp;&nbsp;
<BR><A href='?src=\ref[src];secretsfun=striketeam'>Send in the Deathsquad</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=striketeam_syndicate'>Send in a Syndie Strike Team</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=honksquad'>Send in a HONKsquad</A><BR>
<A href='?src=[UID()];secretsfun=infiltrators_syndicate'>Send SIT - Syndicate Infiltration Team</A>&nbsp;&nbsp;
<BR><A href='?src=[UID()];secretsfun=striketeam'>Send in the Deathsquad</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=striketeam_syndicate'>Send in a Syndie Strike Team</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=honksquad'>Send in a HONKsquad</A><BR>
<b>Change Security Level</b><BR>
<A href='?src=\ref[src];secretsfun=securitylevel0'>Security Level - Green</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=securitylevel1'>Security Level - Blue</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=securitylevel2'>Security Level - Red</A><br>
<A href='?src=\ref[src];secretsfun=securitylevel3'>Security Level - Gamma</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=securitylevel4'>Security Level - Epsilon</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=securitylevel5'>Security Level - Delta</A><BR>
<A href='?src=[UID()];secretsfun=securitylevel0'>Security Level - Green</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=securitylevel1'>Security Level - Blue</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=securitylevel2'>Security Level - Red</A><br>
<A href='?src=[UID()];secretsfun=securitylevel3'>Security Level - Gamma</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=securitylevel4'>Security Level - Epsilon</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=securitylevel5'>Security Level - Delta</A><BR>
<b>Create Weather</b><BR>
<A href='?src=\ref[src];secretsfun=weatherashstorm'>Weather - Ash Storm</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=weatherdarkness'>Weather - Advanced Darkness</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=weatherashstorm'>Weather - Ash Storm</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=weatherdarkness'>Weather - Advanced Darkness</A>&nbsp;&nbsp;
<BR>
</center>"}
@@ -90,38 +90,38 @@
<center>
<h2><B>OOC Events</B></h2>
<b>Thunderdome</b><br>
<A href='?src=\ref[src];secretsfun=tdomestart'>Start a Thunderdome match</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=tdomereset'>Reset Thunderdome to default state</A><BR><br>
<A href='?src=[UID()];secretsfun=tdomestart'>Start a Thunderdome match</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=tdomereset'>Reset Thunderdome to default state</A><BR><br>
<b>Clothing</b><br>
<A href='?src=\ref[src];secretsfun=sec_clothes'>Remove 'internal' clothing</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=sec_all_clothes'>Remove ALL clothing</A><BR>
<A href='?src=[UID()];secretsfun=sec_clothes'>Remove 'internal' clothing</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=sec_all_clothes'>Remove ALL clothing</A><BR>
<b>TDM</b><br>
<A href='?src=\ref[src];secretsfun=traitor_all'>Everyone is the traitor</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=onlyone'>There can only be one!</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=onlyme'>There can only be me!</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=onlyoneteam'>Dodgeball (TDM)!</A><BR>
<A href='?src=[UID()];secretsfun=traitor_all'>Everyone is the traitor</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=onlyone'>There can only be one!</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=onlyme'>There can only be me!</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=onlyoneteam'>Dodgeball (TDM)!</A><BR>
<b>Round-enders</b><br>
<A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (DANGEROUS: extremely lame)</A><BR>
<A href='?src=\ref[src];secretsfun=fakelava'>The floor is fake-lava! (non-harmful)</A><BR>
<A href='?src=\ref[src];secretsfun=monkey'>Turn all humans into monkeys</A><BR>
<A href='?src=\ref[src];secretsfun=fakeguns'>Make all items look like guns</A><BR>
<A href='?src=\ref[src];secretsfun=prisonwarp'>Warp all Players to Prison</A><BR>
<A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR>
<A href='?src=[UID()];secretsfun=floorlava'>The floor is lava! (DANGEROUS: extremely lame)</A><BR>
<A href='?src=[UID()];secretsfun=fakelava'>The floor is fake-lava! (non-harmful)</A><BR>
<A href='?src=[UID()];secretsfun=monkey'>Turn all humans into monkeys</A><BR>
<A href='?src=[UID()];secretsfun=fakeguns'>Make all items look like guns</A><BR>
<A href='?src=[UID()];secretsfun=prisonwarp'>Warp all Players to Prison</A><BR>
<A href='?src=[UID()];secretsfun=retardify'>Make all players retarded</A><BR>
<b>Misc</b><br>
<A href='?src=\ref[src];secretsfun=sec_classic1'>Remove firesuits, grilles, and pods</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=tripleAI'>Triple AI mode (needs to be used in the lobby)</A><BR>
<A href='?src=\ref[src];secretsfun=flicklights'>Ghost Mode</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=schoolgirl'>Japanese Animes Mode</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=eagles'>Egalitarian Station Mode</A><BR>
<A href='?src=\ref[src];secretsfun=guns'>Summon Guns</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=magic'>Summon Magic</A>
<A href='?src=[UID()];secretsfun=sec_classic1'>Remove firesuits, grilles, and pods</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=tripleAI'>Triple AI mode (needs to be used in the lobby)</A><BR>
<A href='?src=[UID()];secretsfun=flicklights'>Ghost Mode</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=schoolgirl'>Japanese Animes Mode</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=eagles'>Egalitarian Station Mode</A><BR>
<A href='?src=[UID()];secretsfun=guns'>Summon Guns</A>&nbsp;&nbsp;
<A href='?src=[UID()];secretsfun=magic'>Summon Magic</A>
<BR>
<A href='?src=\ref[src];secretsfun=rolldice'>Roll the Dice</A><BR>
<A href='?src=[UID()];secretsfun=rolldice'>Roll the Dice</A><BR>
<BR>
<BR>
<A href='?src=\ref[src];secretsfun=moveferry'>Move Ferry</A><BR>
<A href='?src=\ref[src];secretsfun=moveminingshuttle'>Move Mining Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=movelaborshuttle'>Move Labor Shuttle</A><BR>
<A href='?src=[UID()];secretsfun=moveferry'>Move Ferry</A><BR>
<A href='?src=[UID()];secretsfun=moveminingshuttle'>Move Mining Shuttle</A><BR>
<A href='?src=[UID()];secretsfun=movelaborshuttle'>Move Labor Shuttle</A><BR>
<BR>
</center>"}
dat += "</center></body></html>"
+61 -75
View File
@@ -447,7 +447,7 @@
feedback_inc("ban_appearance",1)
DB_ban_record(BANTYPE_APPEARANCE, M, -1, reason)
appearance_fullban(M, "[reason]; By [usr.ckey] on [time2text(world.realtime)]")
add_note(M.ckey, "Appearance banned - [reason]", null, usr, 0)
add_note(M.ckey, "Appearance banned - [reason]", null, usr.ckey, 0)
message_admins("\blue [key_name_admin(usr)] appearance banned [key_name_admin(M)]", 1)
to_chat(M, "\red<BIG><B>You have been appearance banned by [usr.client.ckey].</B></BIG>")
to_chat(M, "<span class='danger'>The reason is: [reason]</span>")
@@ -488,17 +488,17 @@
//Regular jobs
//Command (Blue)
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr align='center' bgcolor='ccccff'><th colspan='[length(command_positions)]'><a href='?src=\ref[src];jobban3=commanddept;jobban4=\ref[M]'>Command Positions</a></th></tr><tr align='center'>"
jobs += "<tr align='center' bgcolor='ccccff'><th colspan='[length(command_positions)]'><a href='?src=[UID()];jobban3=commanddept;jobban4=\ref[M]'>Command Positions</a></th></tr><tr align='center'>"
for(var/jobPos in command_positions)
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
if(jobban_isbanned(M, job.title))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 6) //So things dont get squiiiiished!
@@ -509,17 +509,17 @@
//Security (Red)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='ffddf0'><th colspan='[length(security_positions)]'><a href='?src=\ref[src];jobban3=securitydept;jobban4=\ref[M]'>Security Positions</a></th></tr><tr align='center'>"
jobs += "<tr bgcolor='ffddf0'><th colspan='[length(security_positions)]'><a href='?src=[UID()];jobban3=securitydept;jobban4=\ref[M]'>Security Positions</a></th></tr><tr align='center'>"
for(var/jobPos in security_positions)
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
if(jobban_isbanned(M, job.title))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -530,17 +530,17 @@
//Engineering (Yellow)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='fff5cc'><th colspan='[length(engineering_positions)]'><a href='?src=\ref[src];jobban3=engineeringdept;jobban4=\ref[M]'>Engineering Positions</a></th></tr><tr align='center'>"
jobs += "<tr bgcolor='fff5cc'><th colspan='[length(engineering_positions)]'><a href='?src=[UID()];jobban3=engineeringdept;jobban4=\ref[M]'>Engineering Positions</a></th></tr><tr align='center'>"
for(var/jobPos in engineering_positions)
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
if(jobban_isbanned(M, job.title))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -551,17 +551,17 @@
//Medical (White)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='ffeef0'><th colspan='[length(medical_positions)]'><a href='?src=\ref[src];jobban3=medicaldept;jobban4=\ref[M]'>Medical Positions</a></th></tr><tr align='center'>"
jobs += "<tr bgcolor='ffeef0'><th colspan='[length(medical_positions)]'><a href='?src=[UID()];jobban3=medicaldept;jobban4=\ref[M]'>Medical Positions</a></th></tr><tr align='center'>"
for(var/jobPos in medical_positions)
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
if(jobban_isbanned(M, job.title))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -572,17 +572,17 @@
//Science (Purple)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='e79fff'><th colspan='[length(science_positions)]'><a href='?src=\ref[src];jobban3=sciencedept;jobban4=\ref[M]'>Science Positions</a></th></tr><tr align='center'>"
jobs += "<tr bgcolor='e79fff'><th colspan='[length(science_positions)]'><a href='?src=[UID()];jobban3=sciencedept;jobban4=\ref[M]'>Science Positions</a></th></tr><tr align='center'>"
for(var/jobPos in science_positions)
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
if(jobban_isbanned(M, job.title))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -593,17 +593,17 @@
//Support (Grey)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='dddddd'><th colspan='[length(support_positions)]'><a href='?src=\ref[src];jobban3=supportdept;jobban4=\ref[M]'>Support Positions</a></th></tr><tr align='center'>"
jobs += "<tr bgcolor='dddddd'><th colspan='[length(support_positions)]'><a href='?src=[UID()];jobban3=supportdept;jobban4=\ref[M]'>Support Positions</a></th></tr><tr align='center'>"
for(var/jobPos in support_positions)
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
if(jobban_isbanned(M, job.title))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -614,17 +614,17 @@
//Non-Human (Green)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='ccffcc'><th colspan='[length(nonhuman_positions)+1]'><a href='?src=\ref[src];jobban3=nonhumandept;jobban4=\ref[M]'>Non-human Positions</a></th></tr><tr align='center'>"
jobs += "<tr bgcolor='ccffcc'><th colspan='[length(nonhuman_positions)+1]'><a href='?src=[UID()];jobban3=nonhumandept;jobban4=\ref[M]'>Non-human Positions</a></th></tr><tr align='center'>"
for(var/jobPos in nonhuman_positions)
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
if(jobban_isbanned(M, job.title))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -633,29 +633,29 @@
//Drone
if(jobban_isbanned(M, "Drone"))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Drone;jobban4=\ref[M]'><font color=red>Drone</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=Drone;jobban4=\ref[M]'><font color=red>Drone</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Drone;jobban4=\ref[M]'>Drone</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=Drone;jobban4=\ref[M]'>Drone</a></td>"
//pAI
if(jobban_isbanned(M, "pAI"))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=pAI;jobban4=\ref[M]'><font color=red>pAI</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=pAI;jobban4=\ref[M]'><font color=red>pAI</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=pAI;jobban4=\ref[M]'>pAI</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=pAI;jobban4=\ref[M]'>pAI</a></td>"
jobs += "</tr></table>"
//Antagonist (Orange)
var/isbanned_dept = jobban_isbanned(M, "Syndicate")
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='ffeeaa'><th colspan='10'><a href='?src=\ref[src];jobban3=Syndicate;jobban4=\ref[M]'>Antagonist Positions</a></th></tr><tr align='center'>"
jobs += "<tr bgcolor='ffeeaa'><th colspan='10'><a href='?src=[UID()];jobban3=Syndicate;jobban4=\ref[M]'>Antagonist Positions</a></th></tr><tr align='center'>"
counter = 0
for(var/role in antag_roles)
if(jobban_isbanned(M, role) || isbanned_dept)
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[role];jobban4=\ref[M]'><font color=red>[replacetext(role, " ", "&nbsp")]</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[role];jobban4=\ref[M]'><font color=red>[replacetext(role, " ", "&nbsp")]</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[role];jobban4=\ref[M]'>[replacetext(role, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[role];jobban4=\ref[M]'>[replacetext(role, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -670,9 +670,9 @@
counter = 0
for(var/role in other_roles)
if(jobban_isbanned(M, role) || isbanned_dept)
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[role];jobban4=\ref[M]'><font color=red>[replacetext(role, " ", "&nbsp")]</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[role];jobban4=\ref[M]'><font color=red>[replacetext(role, " ", "&nbsp")]</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[role];jobban4=\ref[M]'>[replacetext(role, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[role];jobban4=\ref[M]'>[replacetext(role, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -683,17 +683,17 @@
//Whitelisted positions
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='dddddd'><th colspan='[length(whitelisted_positions)]'><a href='?src=\ref[src];jobban3=whitelistdept;jobban4=\ref[M]'>Whitelisted Positions</a></th></tr><tr align='center'>"
jobs += "<tr bgcolor='dddddd'><th colspan='[length(whitelisted_positions)]'><a href='?src=[UID()];jobban3=whitelistdept;jobban4=\ref[M]'>Whitelisted Positions</a></th></tr><tr align='center'>"
for(var/jobPos in whitelisted_positions)
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
if(jobban_isbanned(M, job.title))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -811,7 +811,7 @@
msg = job
else
msg += ", [job]"
add_note(M.ckey, "Banned from [msg] - [reason]", null, usr, 0)
add_note(M.ckey, "Banned from [msg] - [reason]", null, usr.ckey, 0)
message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes", 1)
to_chat(M, "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>")
to_chat(M, "<span class='danger'>The reason is: [reason]</span>")
@@ -831,7 +831,7 @@
jobban_fullban(M, job, "[reason]; By [usr.ckey] on [time2text(world.realtime)]")
if(!msg) msg = job
else msg += ", [job]"
add_note(M.ckey, "Banned from [msg] - [reason]", null, usr, 0)
add_note(M.ckey, "Banned from [msg] - [reason]", null, usr.ckey, 0)
message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1)
to_chat(M, "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>")
to_chat(M, "<span class='danger'>The reason is: [reason]</span>")
@@ -1067,9 +1067,9 @@
return alert(usr, "The game has already started.", null, null, null, null)
var/dat = {"<B>What mode do you wish to play?</B><HR>"}
for(var/mode in config.modes)
dat += {"<A href='?src=\ref[src];c_mode2=[mode]'>[config.mode_names[mode]]</A><br>"}
dat += {"<A href='?src=\ref[src];c_mode2=secret'>Secret</A><br>"}
dat += {"<A href='?src=\ref[src];c_mode2=random'>Random</A><br>"}
dat += {"<A href='?src=[UID()];c_mode2=[mode]'>[config.mode_names[mode]]</A><br>"}
dat += {"<A href='?src=[UID()];c_mode2=secret'>Secret</A><br>"}
dat += {"<A href='?src=[UID()];c_mode2=random'>Random</A><br>"}
dat += {"Now: [master_mode]"}
usr << browse(dat, "window=c_mode")
@@ -1082,8 +1082,8 @@
return alert(usr, "The game mode has to be secret!", null, null, null, null)
var/dat = {"<B>What game mode do you want to force secret to be? Use this if you want to change the game mode, but want the players to believe it's secret. This will only work if the current game mode is secret.</B><HR>"}
for(var/mode in config.modes)
dat += {"<A href='?src=\ref[src];f_secret2=[mode]'>[config.mode_names[mode]]</A><br>"}
dat += {"<A href='?src=\ref[src];f_secret2=secret'>Random (default)</A><br>"}
dat += {"<A href='?src=[UID()];f_secret2=[mode]'>[config.mode_names[mode]]</A><br>"}
dat += {"<A href='?src=[UID()];f_secret2=secret'>Random (default)</A><br>"}
dat += {"Now: [secret_force_mode]"}
usr << browse(dat, "window=f_secret")
@@ -1597,11 +1597,11 @@
to_chat(usr, "This can only be used on instances of type /mob/living")
return
if(alert(src.owner, "Are you sure you wish to hit [key_name(M)] with Bluespace Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes")
if(alert(owner, "Are you sure you wish to hit [key_name(M)] with Bluespace Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes")
return
if(BSACooldown)
to_chat(src.owner, "Standby. Reload cycle in progress. Gunnery crews ready in five seconds!")
to_chat(owner, "Standby. Reload cycle in progress. Gunnery crews ready in five seconds!")
return
BSACooldown = 1
@@ -1609,28 +1609,23 @@
BSACooldown = 0
to_chat(M, "You've been hit by bluespace artillery!")
log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [key_name(src.owner)]")
message_admins("[key_name_admin(M)] has been hit by Bluespace Artillery fired by [key_name_admin(src.owner)]")
var/obj/effect/stop/S
S = new /obj/effect/stop
S.victim = M
S.loc = M.loc
spawn(20)
qdel(S)
log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [key_name(owner)]")
message_admins("[key_name_admin(M)] has been hit by Bluespace Artillery fired by [key_name_admin(owner)]")
var/turf/simulated/floor/T = get_turf(M)
if(istype(T))
if(prob(80)) T.break_tile_to_plating()
else T.break_tile()
if(prob(80))
T.break_tile_to_plating()
else
T.break_tile()
if(M.health == 1)
if(M.health <= 1)
M.gib()
else
M.adjustBruteLoss( min( 99 , (M.health - 1) ) )
M.adjustBruteLoss(min(99,(M.health - 1)))
M.Stun(20)
M.Weaken(20)
M.stuttering = 20
M.Stuttering(20)
else if(href_list["CentcommReply"])
if(!check_rights(R_ADMIN))
@@ -1837,7 +1832,7 @@
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>"
data += "<A href='?src=[UID()];AdminFaxViewPage=[page];paper_bundle=\ref[B]'>Page [page] - [pageobj.name]</A><BR>"
usr << browse(data, "window=[B.name]")
else
@@ -2240,14 +2235,6 @@
qdel(O)
for(var/obj/structure/grille/O in world)
qdel(O)
/* for(var/obj/machinery/vehicle/pod/O in world)
for(var/mob/M in src)
M.loc = src.loc
if(M.client)
M.client.perspective = MOB_PERSPECTIVE
M.client.eye = M
qdel(O)
ok = 1*/
if("monkey")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","M")
@@ -2491,18 +2478,20 @@
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","LO")
message_admins("[key_name_admin(usr)] has broke a lot of lights", 1)
lightsout(1,2)
var/datum/event/electrical_storm/E = new /datum/event/electrical_storm
E.lightsoutAmount = 2
if("blackout")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","BO")
message_admins("[key_name_admin(usr)] broke all lights", 1)
lightsout(0,0)
for(var/obj/machinery/light/L in machines)
L.broken()
if("whiteout")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","WO")
for(var/obj/machinery/light/L in world)
L.fix()
message_admins("[key_name_admin(usr)] fixed all lights", 1)
for(var/obj/machinery/light/L in machines)
L.fix()
if("floorlava")
feedback_inc("admin_secrets_fun_used", 1)
feedback_add_details("admin_secrets_fun_used", "LF")
@@ -3005,13 +2994,10 @@
else
error_viewer.showTo(usr, null, href_list["viewruntime_linear"])
/proc/admin_jump_link(var/atom/target, var/source)
/proc/admin_jump_link(var/atom/target)
if(!target) return
// The way admin jump links handle their src is weirdly inconsistent...
if(istype(source, /datum/admins))
source = "src=\ref[source]"
else
source = "_src_=holder"
var/source = "_src_=holder"
if(isAI(target)) // AI core/eye follow links
var/mob/living/silicon/ai/A = target
+6 -1
View File
@@ -94,7 +94,7 @@
if("select")
var/text = ""
for(var/datum/t in objs)
text += "<A HREF='?_src_=vars;Vars=\ref[t]'>\ref[t]</A>"
text += "<A HREF='?_src_=vars;Vars=[t.UID()]'>\ref[t]</A>"
if(istype(t, /atom))
var/atom/a = t
@@ -252,6 +252,11 @@
if(istype(d, type))
out += d
else if(location == world)
for(var/datum/d)
if(istype(d, type))
out += d
else
for(var/datum/d in location)
if(istype(d, type))
+3 -3
View File
@@ -24,7 +24,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(!msg)
return
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
if(handle_spam_prevention(msg, MUTE_ADMINHELP, OOC_COOLDOWN))
return
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
@@ -109,13 +109,13 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
switch(selected_type)
if("Mentorhelp")
msg = "<span class='mentorhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob, "holder")]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</span> <span class='mentorhelp'>[msg]</span>"
msg = "<span class='mentorhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</span> <span class='mentorhelp'>[msg]</span>"
for(var/client/X in mentorholders + modholders + adminholders)
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
to_chat(X, msg)
if("Adminhelp")
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob, "holder")]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</span> <span class='adminhelp'>[msg]</span>"
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</span> <span class='adminhelp'>[msg]</span>"
for(var/client/X in modholders + adminholders)
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
+2 -2
View File
@@ -67,7 +67,7 @@
if(istext(whom))
if(cmptext(copytext(whom,1,2),"@"))
whom = findStealthKey(whom)
C = directory[C]
C = directory[whom]
else if(istype(whom,/client))
C = whom
@@ -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(handle_spam_prevention(msg, MUTE_ADMINHELP, OOC_COOLDOWN))
return
//clean the message if it's not sent by a high-rank admin
+41 -11
View File
@@ -1,5 +1,5 @@
/client/proc/cmd_admin_say(msg as text)
set category = "Special Verbs"
set category = "Admin"
set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite
set hidden = 1
if(!check_rights(R_ADMIN)) return
@@ -12,29 +12,59 @@
if(check_rights(R_ADMIN,0))
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
to_chat(C, "<span class='admin_channel'>ADMIN: <span class='name'>[key_name(usr, 1)]</span> ([admin_jump_link(mob, "holder")]): <span class='message'>[msg]</span></span>")
to_chat(C, "<span class='admin_channel'>ADMIN: <span class='name'>[key_name(usr, 1)]</span> ([admin_jump_link(mob)]): <span class='message'>[msg]</span></span>")
feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_mod_say(msg as text)
set category = "Special Verbs"
/client/proc/cmd_mentor_say(msg as text)
set category = "Admin"
set name = "Msay"
set hidden = 1
if(!check_rights(R_ADMIN|R_MOD))
if(!check_rights(R_ADMIN|R_MOD|R_MENTOR))
return
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
log_admin("MOD: [key_name(src)] : [msg]")
log_admin("MENTOR: [key_name(src)] : [msg]")
if(!msg)
return
var/spanclass = "mod_channel"
if(check_rights(R_ADMIN, 0))
spanclass = "mod_channel_admin"
for(var/client/C in admins)
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, C.mob))
to_chat(C, "<span class='[check_rights(R_ADMIN, 0) ? "mentor_channel_admin" : "mentor_channel"]'>MENTOR: <span class='name'>[key_name(usr, 1)]</span> ([admin_jump_link(mob)]): <span class='message'>[msg]</span></span>")
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggle_mentor_chat()
set category = "Server"
set name = "Toggle Mentor Chat"
set desc = "Toggle whether mentors have access to the msay command"
if(!check_rights(R_ADMIN))
return
var/enabling
var/msay = /client/proc/cmd_mentor_say
if(msay in admin_verbs_mentor)
enabling = FALSE
admin_verbs_mentor -= msay
else
enabling = TRUE
admin_verbs_mentor += msay
for(var/client/C in admins)
if(check_rights(R_ADMIN|R_MOD, 0, C.mob))
to_chat(C, "<span class='[spanclass]'>MOD: <span class='name'>[key_name(usr, 1)]</span> ([admin_jump_link(mob, C.holder)]): <span class='message'>[msg]</span></span>")
continue
if(!check_rights(R_MENTOR, 0, C.mob))
continue
if(enabling)
C.verbs += msay
to_chat(C, "<b>Mentor chat has been enabled.</b> Use 'msay' to speak in it.")
else
C.verbs -= msay
to_chat(C, "<b>Mentor chat has been disabled.</b>")
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
admin_log_and_message_admins("toggled mentor chat [enabling ? "on" : "off"].")
feedback_add_details("admin_verb", "TMC")
+1 -1
View File
@@ -1,5 +1,5 @@
/client/proc/dsay(msg as text)
set category = "Special Verbs"
set category = "Admin"
set name = "Dsay" //Gave this shit a shorter name so you only have to time out "dsay" rather than "dead say" to use it --NeoFite
set hidden = 1
+7 -7
View File
@@ -92,7 +92,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]")
returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc
to_chat(usr, "<font color='blue'>[procname] returned: [returnval ? returnval : "null"]</font>")
to_chat(usr, "<font color='blue'>[procname] returned: [!isnull(returnval) ? returnval : "null"]</font>")
feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/callproc_datum(var/A as null|area|mob|obj|turf)
@@ -122,7 +122,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
spawn()
var/returnval = call(A,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
to_chat(usr, "<span class='notice'>[procname] returned: [returnval ? returnval : "null"]</span>")
to_chat(usr, "<span class='notice'>[procname] returned: [!isnull(returnval) ? returnval : "null"]</span>")
feedback_add_details("admin_verb","DPC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -934,11 +934,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
for(var/obj/item/briefcase_item in sec_briefcase)
qdel(briefcase_item)
for(var/i=3, i>0, i--)
sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000
sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
sec_briefcase.contents += new /obj/item/ammo_box/a357
sec_briefcase.contents += new /obj/item/weapon/grenade/plastic/c4
sec_briefcase.handle_item_insertion(new /obj/item/weapon/spacecash/c1000, 1)
sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, 1)
sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/projectile/revolver/mateba, 1)
sec_briefcase.handle_item_insertion(new /obj/item/ammo_box/a357, 1)
sec_briefcase.handle_item_insertion(new /obj/item/weapon/grenade/plastic/c4, 1)
// briefcase must be unlocked by setting the code.
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M)
+15 -12
View File
@@ -7,13 +7,15 @@
////////////////////////////////////////////////////////////////////////////////
var/global/list/frozen_mob_list = list()
/client/proc/freeze(var/mob/living/M as mob in mob_list)
set category = "Special Verbs"
set category = "Admin"
set name = "Freeze"
if(!holder)
to_chat(src, "<font color='red'>Error: Freeze: Only administrators may use this command.</font>")
if(!check_rights(R_ADMIN))
return
if(!istype(M)) return
if(!check_rights(R_ADMIN)) return
if(!istype(M))
return
if(M in frozen_mob_list)
M.admin_unFreeze(src)
else
@@ -36,7 +38,7 @@ var/global/list/frozen_mob_list = list()
anchored = 1
frozen = AO
admin_prev_sleeping = sleeping
sleeping += 20000
AdjustSleeping(20000)
if(!(src in frozen_mob_list))
frozen_mob_list += src
@@ -49,7 +51,7 @@ var/global/list/frozen_mob_list = list()
anchored = 0
overlays -= frozen
frozen = null
sleeping = admin_prev_sleeping
SetSleeping(admin_prev_sleeping)
admin_prev_sleeping = null
if(src in frozen_mob_list)
frozen_mob_list -= src
@@ -83,14 +85,15 @@ var/global/list/frozen_mob_list = list()
//////////////////////////Freeze Mech
/client/proc/freezemecha(var/obj/mecha/O as obj in mechas_list)
set category = "Special Verbs"
set category = "Admin"
set name = "Freeze Mech"
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
if(!check_rights(R_ADMIN))
return
var/obj/mecha/M = O
if(!istype(M,/obj/mecha))
to_chat(src, "<span class='danger'>This can only be used on Mechs!</span>")
to_chat(src, "<span class='danger'>This can only be used on mechs!</span>")
return
else
if(usr)
@@ -21,8 +21,8 @@ var/global/sent_syndicate_infiltration_team = 0
var/pick_manually = 0
if(alert("Pick the team members manually? If you select yes, you pick from ghosts. If you select no, ghosts get offered the chance to join.",,"Yes","No")=="Yes")
pick_manually = 1
var/list/teamsizeoptions = list(1,2,3,4,5)
var/teamsize = input(src, "How many team members, not counting the team leader?") as null|anything in teamsizeoptions
var/list/teamsizeoptions = list(2,3,4,5,6)
var/teamsize = input(src, "How many team members, including the team leader?") as null|anything in teamsizeoptions
if(!(teamsize in teamsizeoptions))
alert("Invalid team size specified. Aborting.")
return
@@ -102,11 +102,11 @@ var/global/sent_syndicate_infiltration_team = 0
to_chat(new_syndicate_infiltrator, "<span class='danger'>As team leader, it is up to you to organize your team! Give the job to someone else if you can't handle it. Only your ID opens the exit door.</span>")
else
to_chat(new_syndicate_infiltrator, "<span class='danger'>Your team leader is: [team_leader]. They are in charge!</span>")
teamsize--
teamsize--
to_chat(new_syndicate_infiltrator, "<span class='notice'>You have more helpful information stored in your Notes.</span>")
new_syndicate_infiltrator.mind.store_memory("<B>Mission:</B> [input] ")
new_syndicate_infiltrator.mind.store_memory("<B>Team Leader:</B> [team_leader] ")
new_syndicate_infiltrator.mind.store_memory("<B>Starting Equipment:</B> <BR>- Chameleon Jumpsuit ((right click to Change Color))<BR> - Agent ID card ((disguise as another job))<BR> - Uplink Implant ((top left of screen)) <BR> - Dust Implant ((destroys your body on death)) <BR> - Combat Gloves ((insulated, disguised as black gloves)) <BR> - Anything bought with your uplink implant")
new_syndicate_infiltrator.mind.store_memory("<B>Starting Equipment:</B> <BR>- Syndicate Headset ((.h for your radio))<BR>- Chameleon Jumpsuit ((right click to Change Color))<BR> - Agent ID card ((disguise as another job))<BR> - Uplink Implant ((top left of screen)) <BR> - Dust Implant ((destroys your body on death)) <BR> - Combat Gloves ((insulated, disguised as black gloves)) <BR> - Anything bought with your uplink implant")
var/datum/atom_hud/antag/opshud = huds[ANTAG_HUD_OPS]
opshud.join_hud(new_syndicate_infiltrator.mind.current)
ticker.mode.set_antag_hud(new_syndicate_infiltrator.mind.current, "hudoperative")
@@ -145,8 +145,7 @@ var/global/sent_syndicate_infiltration_team = 0
var/datum/preferences/A = new() //Randomize appearance
A.real_name = syndicate_infiltrator_name
A.copy_to(new_syndicate_infiltrator)
new_syndicate_infiltrator.dna.ready_dna(new_syndicate_infiltrator) //Creates DNA.
new_syndicate_infiltrator.dna.ready_dna(new_syndicate_infiltrator)
//Creates mind stuff.
new_syndicate_infiltrator.mind_initialize()
@@ -154,7 +153,6 @@ var/global/sent_syndicate_infiltration_team = 0
new_syndicate_infiltrator.mind.special_role = "Syndicate Infiltrator"
ticker.mode.traitors |= new_syndicate_infiltrator.mind //Adds them to extra antag list
new_syndicate_infiltrator.equip_syndicate_infiltrator(syndicate_leader_selected, uplink_tc, is_mgmt)
qdel(spawn_location)
return new_syndicate_infiltrator
// ---------------------------------------------------------------------------------------------------------
@@ -180,23 +178,20 @@ var/global/sent_syndicate_infiltration_team = 0
U.hidden_uplink.uses = 500
else
U.hidden_uplink.uses = num_tc
// Storage
//var/obj/item/weapon/implant/storage/T = new /obj/item/weapon/implant/storage(src)
//T.implant(src)
// Dust
var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(src)
D.implant(src)
// Radio & PDA
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate(src)
R.set_frequency(SYND_FREQ) //Same frequency as the syndicate team in Nuke mode.
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/syndteam(src)
R.set_frequency(SYNDTEAM_FREQ)
equip_to_slot_or_del(R, slot_l_ear)
equip_or_collect(new /obj/item/device/pda(src), slot_in_backpack)
// Other gear
equip_to_slot_or_del(new /obj/item/clothing/shoes/syndigaloshes(src), slot_shoes)
var/obj/item/weapon/card/id/syndicate/W = new(src) //Untrackable by AI
var/obj/item/weapon/card/id/syndicate/W = new(src)
if (flag_mgmt)
W.icon_state = "commander"
else
+14 -10
View File
@@ -13,14 +13,14 @@ client/proc/one_click_antag()
/datum/admins/proc/one_click_antag()
var/dat = {"<B>One-click Antagonist</B><br>
<a href='?src=\ref[src];makeAntag=1'>Make Traitors</a><br>
<a href='?src=\ref[src];makeAntag=2'>Make Changelings</a><br>
<a href='?src=\ref[src];makeAntag=3'>Make Revolutionaries</a><br>
<a href='?src=\ref[src];makeAntag=4'>Make Cult</a><br>
<a href='?src=\ref[src];makeAntag=5'>Make Wizard (Requires Ghosts)</a><br>
<a href='?src=\ref[src];makeAntag=6'>Make Vampires</a><br>
<a href='?src=\ref[src];makeAntag=7'>Make Vox Raiders (Requires Ghosts)</a><br>
<a href='?src=\ref[src];makeAntag=8'>Make Abductor Team (Requires Ghosts)</a><br>
<a href='?src=[UID()];makeAntag=1'>Make Traitors</a><br>
<a href='?src=[UID()];makeAntag=2'>Make Changelings</a><br>
<a href='?src=[UID()];makeAntag=3'>Make Revolutionaries</a><br>
<a href='?src=[UID()];makeAntag=4'>Make Cult</a><br>
<a href='?src=[UID()];makeAntag=5'>Make Wizard (Requires Ghosts)</a><br>
<a href='?src=[UID()];makeAntag=6'>Make Vampires</a><br>
<a href='?src=[UID()];makeAntag=7'>Make Vox Raiders (Requires Ghosts)</a><br>
<a href='?src=[UID()];makeAntag=8'>Make Abductor Team (Requires Ghosts)</a><br>
"}
usr << browse(dat, "window=oneclickantag;size=400x400")
return
@@ -269,8 +269,12 @@ client/proc/one_click_antag()
return 1
/datum/admins/proc/makeAliens()
alien_infestation(3)
return 1
var/datum/event/alien_infestation/E = new /datum/event/alien_infestation
E.spawncount = 3
// TODO The fact we have to do this rather than just have events start
// when we ask them to, is bad.
E.processing = TRUE
return TRUE
/*
/datum/admins/proc/makeSpaceNinja()
+7 -7
View File
@@ -9,11 +9,11 @@
if(usr.client.prefs.muted & MUTE_PRAY)
to_chat(usr, "\red You cannot pray (muted).")
return
if(src.client.handle_spam_prevention(msg,MUTE_PRAY))
if(client.handle_spam_prevention(msg, MUTE_PRAY, OOC_COOLDOWN))
return
var/image/cross = image('icons/obj/storage.dmi',"bible")
msg = "\blue [bicon(cross)] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src, "holder")]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
msg = "\blue [bicon(cross)] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
@@ -25,7 +25,7 @@
/proc/Centcomm_announce(var/text , var/mob/Sender)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "<span class='boldnotice'><font color=orange>CENTCOMM: </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;CentcommReply=\ref[Sender]'>RPLY</A>):</span> [msg]"
msg = "<span class='boldnotice'><font color=orange>CENTCOMM: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=[Sender.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</span> [msg]"
for(var/client/X in admins)
if(R_EVENT & X.holder.rights)
to_chat(X, msg)
@@ -34,7 +34,7 @@
/proc/Syndicate_announce(var/text , var/mob/Sender)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "<span class='boldnotice'><font color='#DC143C'>SYNDICATE: </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;SyndicateReply=\ref[Sender]'>REPLY</A>):</span> [msg]"
msg = "<span class='boldnotice'><font color='#DC143C'>SYNDICATE: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=[Sender.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>REPLY</A>):</span> [msg]"
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
@@ -43,7 +43,7 @@
/proc/HONK_announce(var/text , var/mob/Sender)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "<span class='boldnotice'><font color=pink>HONK: </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;HONKReply=\ref[Sender]'>RPLY</A>):</span> [msg]"
msg = "<span class='boldnotice'><font color=pink>HONK: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=[Sender.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;HONKReply=\ref[Sender]'>RPLY</A>):</span> [msg]"
for(var/client/X in admins)
if(R_EVENT & X.holder.rights)
to_chat(X, msg)
@@ -52,7 +52,7 @@
/proc/ERT_Announce(var/text , var/mob/Sender, var/repeat_warning)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
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>"
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=[Sender.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender)]) (<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)
@@ -64,7 +64,7 @@
/proc/Nuke_request(text , mob/Sender)
var/nuke_code = get_nuke_code()
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "<span class='adminnotice'><b><font color=orange>NUKE CODE REQUEST: </font>[key_name(Sender)] (<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;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]</span>"
msg = "<span class='adminnotice'><b><font color=orange>NUKE CODE REQUEST: </font>[key_name(Sender)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=[Sender.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]</span>"
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
+9 -9
View File
@@ -139,7 +139,7 @@
feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_godmode(mob/M as mob in mob_list)
set category = "Special Verbs"
set category = "Admin"
set name = "Godmode"
if(!check_rights(R_ADMIN))
@@ -287,7 +287,7 @@ Works kind of like entering the game with a new character. Character receives a
Traitors and the like can also be revived with the previous role mostly intact.
/N */
/client/proc/respawn_character()
set category = "Special Verbs"
set category = "Event"
set name = "Respawn Character"
set desc = "Respawn a person that has been gibbed/dusted/killed. They must be a ghost for this to work and preferably should not have a body to go back into."
@@ -520,7 +520,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
feedback_add_details("admin_verb","IONC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_rejuvenate(mob/living/M as mob in mob_list)
set category = "Special Verbs"
set category = "Event"
set name = "Rejuvenate"
if(!check_rights(R_REJUVINATE))
@@ -659,7 +659,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
return
/client/proc/cmd_admin_emp(atom/O as obj|mob|turf in view())
set category = "Special Verbs"
set category = "Event"
set name = "EM Pulse"
if(!check_rights(R_DEBUG|R_EVENT))
@@ -682,7 +682,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
return
/client/proc/cmd_admin_gib(mob/M as mob in mob_list)
set category = "Special Verbs"
set category = "Admin"
set name = "Gib"
if(!check_rights(R_ADMIN|R_EVENT))
@@ -722,7 +722,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_check_contents(mob/living/M as mob in mob_list)
set category = "Special Verbs"
set category = "Admin"
set name = "Check Contents"
if(!check_rights(R_ADMIN))
@@ -734,7 +734,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
feedback_add_details("admin_verb","CC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggle_view_range()
set category = "Special Verbs"
set category = "Admin"
set name = "Change View Range"
set desc = "switches between 1x and custom views"
@@ -806,7 +806,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("[key_name_admin(usr)] has [shuttle_master.emergencyNoEscape ? "denied" : "allowed"] the shuttle to be called.")
/client/proc/cmd_admin_attack_log(mob/M as mob in mob_list)
set category = "Special Verbs"
set category = "Admin"
set name = "Attack Log"
if(!check_rights(R_ADMIN))
@@ -875,7 +875,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set name = "Reset Telecomms Scripts"
set desc = "Blanks all telecomms scripts from all telecomms servers"
if(!check_rights(R_ADMIN, 1, src))
if(!check_rights(R_ADMIN))
return
var/confirm = alert(src, "You sure you want to blank all NTSL scripts?", "Confirm", "Yes", "No")
@@ -82,14 +82,6 @@ var/global/sent_syndicate_strike_team = 0
new_syndicate_commando.faction += "syndicate"
syndicate_commando_number--
//Spawns the rest of the commando gear.
// 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")
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
@@ -126,8 +118,8 @@ var/global/sent_syndicate_strike_team = 0
/mob/living/carbon/human/proc/equip_syndicate_commando(syndicate_leader_selected = 0)
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt(src)
R.set_frequency(SYND_FREQ) //Same frequency as the syndicate team in Nuke mode.
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt/syndteam(src)
R.set_frequency(SYNDTEAM_FREQ)
equip_to_slot_or_del(R, slot_l_ear)
equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(src), slot_w_uniform)
equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/syndie/advance(src), slot_shoes)
+5 -4
View File
@@ -16,9 +16,10 @@
/obj/machinery/arcade/New()
..()
var/choice = pick(subtypesof(/obj/machinery/arcade))
new choice(loc)
qdel(src)
if(type == /obj/machinery/arcade) //if you spawn the base-type, it will replace itself with a random subtype for randomness
var/choice = pick(subtypesof(/obj/machinery/arcade))
new choice(loc)
qdel(src)
/obj/machinery/arcade/examine(mob/user)
..(user)
@@ -76,7 +77,7 @@
if(pay_with_cash(C, user))
tokens += 1
return
if(panel_open&& component_parts && istype(O, /obj/item/weapon/crowbar))
if(panel_open && component_parts && istype(O, /obj/item/weapon/crowbar))
default_deconstruction_crowbar(O)
/obj/machinery/arcade/update_icon()
+1 -1
View File
@@ -67,7 +67,7 @@
user << browse_rsc('page.css')
for(var/i=1, i<=img_resources.len, i++)
user << browse_rsc(img_resources[i])
var/my_game_html = replacetext(claw_game_html, "/* ref src */", "\ref[src]")
var/my_game_html = replacetext(claw_game_html, "/* ref src */", UID())
user << browse(my_game_html, "window=[window_name];size=700x600")
/obj/machinery/arcade/claw/Topic(href, list/href_list)
+2 -2
View File
@@ -116,7 +116,7 @@ td.cost.toomuch {
</style>
</head>
<body>
<p style="float:right"><b>Tickets:</b> [tickets] | <a href='byond://?src=\ref[src];eject=1'>Eject Tickets</a></p>
<p style="float:right"><b>Tickets:</b> [tickets] | <a href='byond://?src=[UID()];eject=1'>Eject Tickets</a></p>
<h1>Arcade Ticket Exchange</h1>
<p>
<b>Exchange that pile of tickets for a pile of cool prizes!</b>
@@ -148,7 +148,7 @@ td.cost.toomuch {
"}
dat += {"
<td class="cost [cost_class]">
<a href="byond://?src=\ref[src];buy=[itemID]">[item.cost] Tickets</a>
<a href="byond://?src=[UID()];buy=[itemID]">[item.cost] Tickets</a>
</td>
</tr>
"}
+1 -1
View File
@@ -73,7 +73,7 @@
if(!secured)
user.show_message("<span class='warning'>The [name] is unsecured!</span>")
return 0
var/dat = text("<TT><B>Health Sensor</B> <A href='?src=\ref[src];scanning=1'>[scanning?"On":"Off"]</A>")
var/dat = text("<TT><B>Health Sensor</B> <A href='?src=[UID()];scanning=1'>[scanning?"On":"Off"]</A>")
if(scanning && health_scan)
dat += "<BR>Health: [health_scan]"
var/datum/browser/popup = new(user, "hscan", name, 400, 400)
+5 -5
View File
@@ -133,12 +133,12 @@
if(!secured) return
user.set_machine(src)
var/dat = {"<TT><B>Infrared Laser</B>
<B>Status</B>: [on ? "<A href='?src=\ref[src];state=0'>On</A>" : "<A href='?src=\ref[src];state=1'>Off</A>"]<BR>
<B>Visibility</B>: [visible ? "<A href='?src=\ref[src];visible=0'>Visible</A>" : "<A href='?src=\ref[src];visible=1'>Invisible</A>"]<BR>
<B>Current Direction</B>: <A href='?src=\ref[src];rotate=1'>[capitalize(dir2text(dir))]</A><BR>
<B>Status</B>: [on ? "<A href='?src=[UID()];state=0'>On</A>" : "<A href='?src=[UID()];state=1'>Off</A>"]<BR>
<B>Visibility</B>: [visible ? "<A href='?src=[UID()];visible=0'>Visible</A>" : "<A href='?src=[UID()];visible=1'>Invisible</A>"]<BR>
<B>Current Direction</B>: <A href='?src=[UID()];rotate=1'>[capitalize(dir2text(dir))]</A><BR>
</TT>
<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>
<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"}
<BR><BR><A href='?src=[UID()];refresh=1'>Refresh</A>
<BR><BR><A href='?src=[UID()];close=1'>Close</A>"}
var/datum/browser/popup = new(user, "infra", name, 400, 400)
popup.set_content(dat)
popup.open(0)
+4 -4
View File
@@ -113,10 +113,10 @@
return 0
var/second = time % 60
var/minute = (time - second) / 60
var/dat = text("<TT><B>Proximity Sensor</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (timing ? text("<A href='?src=\ref[];time=0'>Arming</A>", src) : text("<A href='?src=\ref[];time=1'>Not Arming</A>", src)), minute, second, src, src, src, src)
dat += "<BR><A href='?src=\ref[src];scanning=1'>[scanning?"Armed":"Unarmed"]</A> (Movement sensor active when armed!)"
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
var/dat = text("<TT><B>Proximity Sensor</B>\n[] []:[]\n<A href='?src=[UID()];tp=-30'>-</A> <A href='?src=[UID()];tp=-1'>-</A> <A href='?src=[UID()];tp=1'>+</A> <A href='?src=[UID()];tp=30'>+</A>\n</TT>", (timing ? "<A href='?src=[UID()];time=0'>Arming</A>" : "<A href='?src=[UID()];time=1'>Not Arming</A>"), minute, second)
dat += "<BR><A href='?src=[UID()];scanning=1'>[scanning?"Armed":"Unarmed"]</A> (Movement sensor active when armed!)"
dat += "<BR><BR><A href='?src=[UID()];refresh=1'>Refresh</A>"
dat += "<BR><BR><A href='?src=[UID()];close=1'>Close</A>"
var/datum/browser/popup = new(user, "prox", name, 400, 400)
popup.set_content(dat)
popup.open(0)
+12 -12
View File
@@ -52,32 +52,32 @@
/obj/item/device/assembly/signaler/interact(mob/user as mob, flag1)
var/t1 = "-------"
// if((src.b_stat && !( flag1 )))
// t1 = text("-------<BR>\nGreen Wire: []<BR>\nRed Wire: []<BR>\nBlue Wire: []<BR>\n", (src.wires & 4 ? 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)))
// t1 = text("-------<BR>\nGreen Wire: []<BR>\nRed Wire: []<BR>\nBlue Wire: []<BR>\n", (src.wires & 4 ? "<A href='?src=[UID()];wires=4'>Cut Wire</A>" : "<A href='?src=[UID()];wires=4'>Mend Wire</A>"), (src.wires & 2 ? "<A href='?src=[UID()];wires=2'>Cut Wire</A>" : "<A href='?src=[UID()];wires=2'>Mend Wire</A>"), (src.wires & 1 ? "<A href='?src=[UID()];wires=1'>Cut Wire</A>" : "<A href='?src=[UID()];wires=1'>Mend Wire</A>"))
// 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>
// t1 = "-------" Speaker: [src.listening ? "<A href='byond://?src=[UID()];listen=0'>Engaged</A>" : "<A href='byond://?src=[UID()];listen=1'>Disengaged</A>"]<BR>
var/dat = {"
<TT>
"}
if(!flag1)
dat += {"
<A href='byond://?src=\ref[src];send=1'>Send Signal</A><BR>
Reciever is <A href='byond://?src=\ref[src];receive=1'>[receiving?"on":"off"]</A><BR>
<A href='byond://?src=[UID()];send=1'>Send Signal</A><BR>
Reciever is <A href='byond://?src=[UID()];receive=1'>[receiving?"on":"off"]</A><BR>
"}
dat += {"
<B>Frequency/Code</B> for signaler:<BR>
Frequency:
<A href='byond://?src=\ref[src];freq=-10'>-</A>
<A href='byond://?src=\ref[src];freq=-2'>-</A>
<A href='byond://?src=[UID()];freq=-10'>-</A>
<A href='byond://?src=[UID()];freq=-2'>-</A>
[format_frequency(src.frequency)]
<A href='byond://?src=\ref[src];freq=2'>+</A>
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
<A href='byond://?src=[UID()];freq=2'>+</A>
<A href='byond://?src=[UID()];freq=10'>+</A><BR>
Code:
<A href='byond://?src=\ref[src];code=-5'>-</A>
<A href='byond://?src=\ref[src];code=-1'>-</A>
<A href='byond://?src=[UID()];code=-5'>-</A>
<A href='byond://?src=[UID()];code=-1'>-</A>
[src.code]
<A href='byond://?src=\ref[src];code=1'>+</A>
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
<A href='byond://?src=[UID()];code=1'>+</A>
<A href='byond://?src=[UID()];code=5'>+</A><BR>
[t1]
</TT>
"}
+5 -5
View File
@@ -86,16 +86,16 @@
var/dat = {"
<TT>
<center><h2>Timing Unit</h2>
[minute]:[second] <a href='?src=\ref[src];time=1'>[timing?"Stop":"Start"]</a> <a href='?src=\ref[src];reset=1'>Reset</a><br>
Repeat: <a href='?src=\ref[src];repeat=1'>[repeat?"On":"Off"]</a><br>
[minute]:[second] <a href='?src=[UID()];time=1'>[timing?"Stop":"Start"]</a> <a href='?src=[UID()];reset=1'>Reset</a><br>
Repeat: <a href='?src=[UID()];repeat=1'>[repeat?"On":"Off"]</a><br>
Timer set for
<A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> [set_minute]:[set_second] <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>
<A href='?src=[UID()];tp=-30'>-</A> <A href='?src=[UID()];tp=-1'>-</A> [set_minute]:[set_second] <A href='?src=[UID()];tp=1'>+</A> <A href='?src=[UID()];tp=30'>+</A>
</center>
</TT>
<BR><BR>
<A href='?src=\ref[src];refresh=1'>Refresh</A>
<A href='?src=[UID()];refresh=1'>Refresh</A>
<BR><BR>
<A href='?src=\ref[src];close=1'>Close</A>"}
<A href='?src=[UID()];close=1'>Close</A>"}
var/datum/browser/popup = new(user, "timer", name, 400, 400)
popup.set_content(dat)
popup.open(0)
+10 -10
View File
@@ -73,31 +73,31 @@
var/out=..()
if(on)
out += "<a href=\"?src=\ref[src];on=1\" style=\"font-size:large;font-weight:bold;color:red;\">RUNNING</a>"
out += "<a href=\"?src=[UID()];on=1\" style=\"font-size:large;font-weight:bold;color:red;\">RUNNING</a>"
else
out += "<a href=\"?src=\ref[src];on=1\" style=\"font-size:large;font-weight:bold;color:green;\">STOPPED</a>"
out += "<a href=\"?src=[UID()];on=1\" style=\"font-size:large;font-weight:bold;color:green;\">STOPPED</a>"
out += {"
<h2>Automations</h2>
<p>\[
<a href="?src=\ref[src];add=1">
<a href="?src=[UID()];add=1">
Add
</a>
|
<a href="?src=\ref[src];reset=*">
<a href="?src=[UID()];reset=*">
Reset All
</a>
|
<a href="?src=\ref[src];remove=*">
<a href="?src=[UID()];remove=*">
Clear
</a>
\]</p>
<p>\[
<a href="?src=\ref[src];dump=1">
<a href="?src=[UID()];dump=1">
Export
</a>
|
<a href="?src=\ref[src];read=1">
<a href="?src=[UID()];read=1">
Import
</a>
\]</p>"}
@@ -108,9 +108,9 @@
out += {"
<fieldset>
<legend>
<a href="?src=\ref[src];label=\ref[A]">[A.label]</a>
(<a href="?src=\ref[src];reset=\ref[A]">Reset</a> |
<a href="?src=\ref[src];remove=\ref[A]">&times;</a>)
<a href="?src=[UID()];label=\ref[A]">[A.label]</a>
(<a href="?src=[UID()];reset=\ref[A]">Reset</a> |
<a href="?src=[UID()];remove=\ref[A]">&times;</a>)
</legend>
[A.GetText()]
</fieldset>
@@ -22,7 +22,7 @@
return 0
GetText()
return "Set digital valve <a href=\"?src=\ref[src];set_subject=1\">[fmtString(valve)]</a> to <a href=\"?src=\ref[src];set_state=1\">[state?"open":"closed"]</a>."
return "Set digital valve <a href=\"?src=[UID()];set_subject=1\">[fmtString(valve)]</a> to <a href=\"?src=[UID()];set_state=1\">[state?"open":"closed"]</a>."
Topic(href,href_list)
if(..())
@@ -20,7 +20,7 @@
return 0
GetText()
return "Set emitter <a href=\"?src=\ref[src];set_subject=1\">[fmtString(emitter)]</a> to <a href=\"?src=\ref[src];set_power=1\">[on?"on":"off"]</a>."
return "Set emitter <a href=\"?src=[UID()];set_subject=1\">[fmtString(emitter)]</a> to <a href=\"?src=[UID()];set_power=1\">[on?"on":"off"]</a>."
Topic(href,href_list)
if(..())
@@ -24,7 +24,7 @@
return 0
GetText()
return "Set injector <a href=\"?src=\ref[src];set_injector=1\">[fmtString(injector)]</a> power to <a href=\"?src=\ref[src];toggle_state=1\">[state ? "on" : "off"]</a>."
return "Set injector <a href=\"?src=[UID()];set_injector=1\">[fmtString(injector)]</a> power to <a href=\"?src=[UID()];toggle_state=1\">[state ? "on" : "off"]</a>."
Topic(href,href_list)
if(..())
@@ -64,7 +64,7 @@
return 0
GetText()
return "Set injector <a href=\"?src=\ref[src];set_injector=1\">[fmtString(injector)]</a> transfer rate to <a href=\"?src=\ref[src];set_rate=1\">[rate]</a> L/s."
return "Set injector <a href=\"?src=[UID()];set_injector=1\">[fmtString(injector)]</a> transfer rate to <a href=\"?src=[UID()];set_rate=1\">[rate]</a> L/s."
Topic(href,href_list)
if(..())
@@ -25,7 +25,7 @@
return 0
GetText()
return "Set Scrubber <a href=\"?src=\ref[src];set_scrubber=1\">[fmtString(scrubber)]</a> mode to <a href=\"?src=\ref[src];set_mode=1\">[mode?"Scrubbing":"Syphoning"]</a>."
return "Set Scrubber <a href=\"?src=[UID()];set_scrubber=1\">[fmtString(scrubber)]</a> mode to <a href=\"?src=[UID()];set_mode=1\">[mode?"Scrubbing":"Syphoning"]</a>."
Topic(href,href_list)
if(..()) return
@@ -67,7 +67,7 @@
parent.send_signal(list ("tag" = scrubber, "sigtype"="command", "power"=state),filter = RADIO_FROM_AIRALARM)
GetText()
return "Set Scrubber <a href=\"?src=\ref[src];set_scrubber=1\">[fmtString(scrubber)]</a> power to <a href=\"?src=\ref[src];set_power=1\">[state ? "on" : "off"]</a>."
return "Set Scrubber <a href=\"?src=[UID()];set_scrubber=1\">[fmtString(scrubber)]</a> power to <a href=\"?src=[UID()];set_power=1\">[state ? "on" : "off"]</a>."
Topic(href,href_list)
if(..()) return
@@ -129,9 +129,9 @@ var/global/list/gas_labels=list(
parent.send_signal(data,filter = RADIO_FROM_AIRALARM)
GetText()
var/txt = "Set Scrubber <a href=\"?src=\ref[src];set_scrubber=1\">[fmtString(scrubber)]</a> to scrub "
var/txt = "Set Scrubber <a href=\"?src=[UID()];set_scrubber=1\">[fmtString(scrubber)]</a> to scrub "
for(var/gas in gasses)
txt += " [gas_labels[gas]] (<a href=\"?src=\ref[src];tog_gas=[gas]\">[gasses[gas] ? "on" : "off"]</a>),"
txt += " [gas_labels[gas]] (<a href=\"?src=[UID()];tog_gas=[gas]\">[gasses[gas] ? "on" : "off"]</a>),"
return txt
Topic(href,href_list)
@@ -27,7 +27,7 @@
return 0
GetText()
return "<a href=\"?src=\ref[src];set_field=1\">[fmtString(field)]</a> from sensor <a href=\"?src=\ref[src];set_sensor=1\">[fmtString(sensor)]</a>"
return "<a href=\"?src=[UID()];set_field=1\">[fmtString(field)]</a> from sensor <a href=\"?src=[UID()];set_sensor=1\">[fmtString(sensor)]</a>"
Topic(href,href_list)
if(..())
@@ -27,7 +27,7 @@
return 0
GetText()
return "Set <a href=\"?src=\ref[src];toggle_type=1\">[vent_type ? "Dual-Port" : "Unary"]</a> vent pump <a href=\"?src=\ref[src];set_vent_pump=1\">[fmtString(vent_pump)]</a> mode to <a href=\"?src=\ref[src];set_mode=1\">[mode]</a>."
return "Set <a href=\"?src=[UID()];toggle_type=1\">[vent_type ? "Dual-Port" : "Unary"]</a> vent pump <a href=\"?src=[UID()];set_vent_pump=1\">[fmtString(vent_pump)]</a> mode to <a href=\"?src=[UID()];set_mode=1\">[mode]</a>."
Topic(href,href_list)
if(..())
@@ -84,7 +84,7 @@
parent.send_signal(list ("tag" = vent_pump, "power" = state), filter = (mode ? RADIO_ATMOSIA : RADIO_FROM_AIRALARM))
GetText()
return "Set <a href=\"?src=\ref[src];toggle_mode=1\">[mode ? "Dual-Port" : "Unary"]</a> vent pump <a href=\"?src=\ref[src];set_vent_pump=1\">[fmtString(vent_pump)]</a> power to <a href=\"?src=\ref[src];set_power=1\">[state ? "on" : "off"]</a>."
return "Set <a href=\"?src=[UID()];toggle_mode=1\">[mode ? "Dual-Port" : "Unary"]</a> vent pump <a href=\"?src=[UID()];set_vent_pump=1\">[fmtString(vent_pump)]</a> power to <a href=\"?src=[UID()];set_power=1\">[state ? "on" : "off"]</a>."
Topic(href,href_list)
if(..())
@@ -168,15 +168,15 @@
GetText()
if(mode)//DP vent
return {"Set <a href=\"?src=\ref[src];swap_modes=1\">dual-port</a> vent pump <a href=\"?src=\ref[src];set_vent_pump=1\">[fmtString(vent_pump)]</a>
pressure bounds: internal outwards: <a href=\"?src=\ref[src];set_intpressure_out=1">[fmtString(intpressureout)]</a>
internal inwards: <a href=\"?src=\ref[src];set_intpressure_in=1">[fmtString(intpressurein)]</a>
external: <a href=\"?src=\ref[src];set_external=1">[fmtString(extpressure)]</a>
return {"Set <a href=\"?src=[UID()];swap_modes=1\">dual-port</a> vent pump <a href=\"?src=[UID()];set_vent_pump=1\">[fmtString(vent_pump)]</a>
pressure bounds: internal outwards: <a href=\"?src=[UID()];set_intpressure_out=1">[fmtString(intpressureout)]</a>
internal inwards: <a href=\"?src=[UID()];set_intpressure_in=1">[fmtString(intpressurein)]</a>
external: <a href=\"?src=[UID()];set_external=1">[fmtString(extpressure)]</a>
"}//well that was a lot to type
else
return {"Set <a href=\"?src=\ref[src];swap_modes=1\">unary</a> vent pump <a href=\"?src=\ref[src];set_vent_pump=1\">[fmtString(vent_pump)]</a>
pressure bounds: internal: <a href=\"?src=\ref[src];set_intpressure_out=1">[fmtString(intpressureout)]</a>
external: <a href=\"?src=\ref[src];set_external=1">[fmtString(extpressure)]</a>
return {"Set <a href=\"?src=[UID()];swap_modes=1\">unary</a> vent pump <a href=\"?src=[UID()];set_vent_pump=1\">[fmtString(vent_pump)]</a>
pressure bounds: internal: <a href=\"?src=[UID()];set_intpressure_out=1">[fmtString(intpressureout)]</a>
external: <a href=\"?src=[UID()];set_external=1">[fmtString(extpressure)]</a>
"}//copy paste FTW
Topic(href, href_list)
@@ -260,15 +260,15 @@ checks bitflags
GetText()
if(mode)
return {"Set <a href=\"?src=\ref[src];swap_modes=1\">dual-port</a> vent pump <a href=\"?src=\ref[src];set_vent_pump=1\">[fmtString(vent_pump)]</a> pressure checks to:
external <a href=\"?src=\ref[src];togglecheck=1\">[checks&1 ? "Enabled" : "Disabled"]</a>
internal inwards <a href=\"?src=\ref[src];togglecheck=2\">[checks&2 ? "Enabled" : "Disabled"]</a>
internal outwards <a href=\"?src=\ref[src];togglecheck=4\">[checks&4 ? "Enabled" : "Disabled"]</a>
return {"Set <a href=\"?src=[UID()];swap_modes=1\">dual-port</a> vent pump <a href=\"?src=[UID()];set_vent_pump=1\">[fmtString(vent_pump)]</a> pressure checks to:
external <a href=\"?src=[UID()];togglecheck=1\">[checks&1 ? "Enabled" : "Disabled"]</a>
internal inwards <a href=\"?src=[UID()];togglecheck=2\">[checks&2 ? "Enabled" : "Disabled"]</a>
internal outwards <a href=\"?src=[UID()];togglecheck=4\">[checks&4 ? "Enabled" : "Disabled"]</a>
"}
else
return {"Set <a href=\"?src=\ref[src];swap_modes=1\">unary</a> vent pump <a href=\"?src=\ref[src];set_vent_pump=1\">[fmtString(vent_pump)]</a> pressure checks to:
external: <a href=\"?src=\ref[src];togglecheck=1\">[checks&1 ? "Enabled" : "Disabled"]</a>,
internal: <a href=\"?src=\ref[src];togglecheck=2\">[checks&2 ? "Enabled" : "Disabled"]</a>
return {"Set <a href=\"?src=[UID()];swap_modes=1\">unary</a> vent pump <a href=\"?src=[UID()];set_vent_pump=1\">[fmtString(vent_pump)]</a> pressure checks to:
external: <a href=\"?src=[UID()];togglecheck=1\">[checks&1 ? "Enabled" : "Disabled"]</a>,
internal: <a href=\"?src=[UID()];togglecheck=2\">[checks&2 ? "Enabled" : "Disabled"]</a>
"}
Topic(href, href_list)
+17 -17
View File
@@ -101,7 +101,7 @@ var/global/automation_types = subtypesof(/datum/automation)
return str
/datum/automation/Topic(href,href_list)
if(parent.Topic("src=\ref[parent]", list("src" = parent)))//dumb hack to check sanity, empty topic shouldn't trigger a 1 on anything but sanity checks
if(parent.Topic("src=[parent.UID()]", list("src" = parent)))//dumb hack to check sanity, empty topic shouldn't trigger a 1 on anything but sanity checks
return 1
if(href_list["add"])
@@ -159,13 +159,13 @@ var/global/automation_types = subtypesof(/datum/automation)
return 1
GetText()
var/out="AND (<a href=\"?src=\ref[src];add=1\">Add</a>)"
var/out="AND (<a href=\"?src=[UID()];add=1\">Add</a>)"
if(children.len>0)
out += "<ul>"
for(var/datum/automation/stmt in children)
out += {"<li>
\[<a href="?src=\ref[src];reset=\ref[stmt]">Reset</a> |
<a href="?src=\ref[src];remove=\ref[stmt]">&times;</a>\]
\[<a href="?src=[UID()];reset=\ref[stmt]">Reset</a> |
<a href="?src=[UID()];remove=\ref[stmt]">&times;</a>\]
[stmt.GetText()]
</li>"}
out += "</ul>"
@@ -190,13 +190,13 @@ var/global/automation_types = subtypesof(/datum/automation)
return 0
GetText()
var/out="OR (<a href=\"?src=\ref[src];add=1\">Add</a>)"
var/out="OR (<a href=\"?src=[UID()];add=1\">Add</a>)"
if(children.len>0)
out += "<ul>"
for(var/datum/automation/stmt in children)
out += {"<li>
\[<a href="?src=\ref[src];reset=\ref[stmt]">Reset</a> |
<a href="?src=\ref[src];remove=\ref[stmt]">&times;</a>\]
\[<a href="?src=[UID()];reset=\ref[stmt]">Reset</a> |
<a href="?src=[UID()];remove=\ref[stmt]">&times;</a>\]
[stmt.GetText()]
</li>"}
out += "</ul>"
@@ -244,31 +244,31 @@ var/global/automation_types = subtypesof(/datum/automation)
condition = unpackChild(json["condition"])
GetText()
var/out="<b>IF</b> (<a href=\"?src=\ref[src];set_condition=1\">SET</a>):<blockquote>"
var/out="<b>IF</b> (<a href=\"?src=[UID()];set_condition=1\">SET</a>):<blockquote>"
if(condition)
out += condition.GetText()
else
out += "<i>Not set</i>"
out += "</blockquote>"
out += "<b>THEN:</b> (<a href=\"?src=\ref[src];add=then\">Add</a>)"
out += "<b>THEN:</b> (<a href=\"?src=[UID()];add=then\">Add</a>)"
if(children_then.len>0)
out += "<ul>"
for(var/datum/automation/stmt in children_then)
out += {"<li>
\[<a href="?src=\ref[src];reset=\ref[stmt];context=then">Reset</a> |
<a href="?src=\ref[src];remove=\ref[stmt];context=then">&times;</a>\]
\[<a href="?src=[UID()];reset=\ref[stmt];context=then">Reset</a> |
<a href="?src=[UID()];remove=\ref[stmt];context=then">&times;</a>\]
[stmt.GetText()]
</li>"}
out += "</ul>"
else
out += "<blockquote><i>(No statements to run)</i></blockquote>"
out += "<b>ELSE:</b> (<a href=\"?src=\ref[src];add=else\">Add</a>)"
out += "<b>ELSE:</b> (<a href=\"?src=[UID()];add=else\">Add</a>)"
if(children_then.len>0)
out += "<ul>"
for(var/datum/automation/stmt in children_else)
out += {"<li>
\[<a href="?src=\ref[src];reset=\ref[stmt];context=else">Reset</a> |
<a href="?src=\ref[src];remove=\ref[stmt];context=else">&times;</a>\]
\[<a href="?src=[UID()];reset=\ref[stmt];context=else">Reset</a> |
<a href="?src=[UID()];remove=\ref[stmt];context=else">&times;</a>\]
[stmt.GetText()]
</li>"}
out += "</ul>"
@@ -395,13 +395,13 @@ var/global/automation_types = subtypesof(/datum/automation)
var/datum/automation/left =children[1]
var/datum/automation/right=children[2]
var/out = "<a href=\"?src=\ref[src];set_field=1\">(Set Left)</a> ("
var/out = "<a href=\"?src=[UID()];set_field=1\">(Set Left)</a> ("
if(left==null)
out += "-----"
else
out += left.GetText()
out += ") is <a href=\"?src=\ref[src];set_comparator=left\">[comparator]</a>: <a href=\"?src=\ref[src];set_field=2\">(Set Right)</a> ("
out += ") is <a href=\"?src=[UID()];set_comparator=left\">[comparator]</a>: <a href=\"?src=[UID()];set_field=2\">(Set Right)</a> ("
if(right==null)
out += "-----"
@@ -448,7 +448,7 @@ var/global/automation_types = subtypesof(/datum/automation)
value = text2num(json["value"])
GetText()
return "<a href=\"?src=\ref[src];set_value=1\">[value]</a>"
return "<a href=\"?src=[UID()];set_value=1\">[value]</a>"
Topic(href,href_list)
if(href_list["set_value"])
+18 -16
View File
@@ -7,18 +7,26 @@
var/last_fire = 0
var/reload_cooldown = 180 // 3 minute cooldown
var/area/targetarea
light_color = LIGHT_COLOR_LIGHTBLUE
/obj/machinery/computer/artillerycontrol/attack_ai(user as mob)
to_chat(user, "<span class='warning'>Access denied.</span>")
return
/obj/machinery/computer/artillerycontrol/attack_hand(user as mob)
ui_interact(user)
/obj/machinery/computer/artillerycontrol/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "bluespace_artillery.tmpl", "Bluespace Control", 400, 260)
ui.open()
ui.set_auto_update(1)
/obj/machinery/computer/artillerycontrol/ui_data(mob/user, datum/topic_state/state = default_state)
var/data[0]
var/time_to_wait = round(reload_cooldown - ((world.time / 10) - last_fire), 1)
var/mins = round(time_to_wait / 60)
var/seconds = time_to_wait - (60*mins)
@@ -30,32 +38,26 @@
else
data["target"] = "No Lock"
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
return data
if(!ui)
ui = new(user, src, ui_key, "bluespace_artillery.tmpl", "Bluespace Control", 400, 260)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
/obj/machinery/computer/artillerycontrol/Topic(href, href_list)
if(..())
return 1
if(href_list["area"])
if(href_list["area"])
var/A
A = input("Select the target area.", "Select Area", A) in ghostteleportlocs|null
var/area/thearea = ghostteleportlocs[A]
if(..() || !istype(thearea))
return
targetarea = thearea
if(href_list["fire"])
var/delta = (world.time / 10) - last_fire
if(reload_cooldown > delta)
return 1
command_announcement.Announce("Bluespace artillery fire detected. Brace for impact.")
message_admins("[key_name_admin(usr)] has launched an artillery strike.", 1)
var/list/L = list()
@@ -64,7 +66,7 @@
var/loc = pick(L)
explosion(loc,2,5,11)
last_fire = world.time / 10
nanomanager.update_uis(src)
/obj/structure/artilleryplaceholder
@@ -43,6 +43,8 @@ var/global/dmm_suite/preloader/_preloader = new
if(isfile(tfile))
fname = "[tfile]"
tfile = file2text(tfile)
if(length(tfile) == 0)
throw EXCEPTION("Map path '[fname]' does not exist!")
if(!x_offset)
x_offset = 1
@@ -126,6 +128,7 @@ var/global/dmm_suite/preloader/_preloader = new
bounds[MAP_MAXY] = max(bounds[MAP_MAXY], min(ycrd, world.maxy))
var/maxx = xcrdStart
log_debug("[xcrdStart]")
if(measureOnly)
for(var/line in gridLines)
maxx = max(maxx, xcrdStart + length(line) / key_len - 1)
@@ -152,7 +155,6 @@ var/global/dmm_suite/preloader/_preloader = new
maxx = max(maxx, xcrd)
++xcrd
--ycrd
bounds[MAP_MAXX] = max(bounds[MAP_MAXX], cropMap ? min(maxx, world.maxx) : maxx)
CHECK_TICK
@@ -164,7 +166,7 @@ var/global/dmm_suite/preloader/_preloader = new
log_debug("Loaded map in [stop_watch(watch)]s.")
qdel(LM)
if(bounds[MAP_MINX] == 1.#INF) // Shouldn't need to check every item
log_runtime(EXCEPTION("Bad Map bounds."), src, list(
log_runtime(EXCEPTION("Bad Map bounds in [fname]"), src, list(
"Min x: [bounds[MAP_MINX]]",
"Min y: [bounds[MAP_MINY]]",
"Min z: [bounds[MAP_MINZ]]",
+7 -3
View File
@@ -4,8 +4,9 @@
////////////////
var/datum/admins/holder = null
var/last_message = "" //Contains the last message sent by this client - used to protect against copy-paste spamming.
var/last_message_count = 0 //contins a number of how many times a message identical to last_message was sent.
var/last_message = "" //contains the last message sent by this client - used to protect against copy-paste spamming.
var/last_message_count = 0 //contains a number of how many times a message identical to last_message was sent.
var/last_message_time = 0 //holds the last time (based on world.time) a message was sent
/////////
//OTHER//
@@ -88,4 +89,7 @@
// Their chat window, sort of important.
// See /goon/code/datums/browserOutput.dm
var/datum/chatOutput/chatOutput
var/datum/chatOutput/chatOutput
// Donator stuff.
var/donator_level = DONATOR_LEVEL_NONE
+50 -13
View File
@@ -29,6 +29,16 @@
if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null
return
// src should always be a UID; if it isn't, warn instead of failing entirely
if(href_list["src"])
hsrc = locateUID(href_list["src"])
// If there's a ]_ in the src, it's a UID, so don't try to locate it
if(!hsrc && !findtext(href_list["src"], "]_"))
hsrc = locate(href_list["src"])
if(hsrc)
var/hsrc_info = datum_info_line(hsrc) || "[hsrc]"
log_runtime(EXCEPTION("Got \\ref-based src in topic from [src] for [hsrc_info], should be UID: [href]"))
#if defined(TOPIC_DEBUGGING)
to_chat(world, "[src]'s Topic: [href] destined for [hsrc].")
#endif
@@ -66,7 +76,9 @@
if(ismob(C)) //Old stuff can feed-in mobs instead of clients
var/mob/M = C
C = M.client
cmd_admin_pm(C,null, href_list["type"])
if(!C) // Might be a stealthmin ID, so pass it in straight
C = href_list["priv_msg"]
cmd_admin_pm(C, null, href_list["type"])
return
if(href_list["irc_msg"])
@@ -221,19 +233,25 @@
return 0
return 1
/client/proc/handle_spam_prevention(var/message, var/mute_type)
if(config.automute_on && !holder && src.last_message == message)
src.last_message_count++
if(src.last_message_count >= SPAM_TRIGGER_AUTOMUTE)
to_chat(src, "\red You have exceeded the spam filter limit for identical messages. An auto-mute was applied.")
cmd_admin_mute(src.mob, mute_type, 1)
/client/proc/handle_spam_prevention(var/message, var/mute_type, var/throttle = 0)
if(throttle)
if((last_message_time + throttle > world.time) && !check_rights(R_ADMIN, 0))
var/wait_time = round(((last_message_time + throttle) - world.time) / 10, 1)
to_chat(src, "<span class='danger'>You are sending messages to quickly. Please wait [wait_time] [wait_time == 1 ? "second" : "seconds"] before sending another message.</span>")
return 1
if(src.last_message_count >= SPAM_TRIGGER_WARNING)
to_chat(src, "\red You are nearing the spam filter limit for identical messages.")
last_message_time = world.time
if(config.automute_on && !check_rights(R_ADMIN, 0) && last_message == message)
last_message_count++
if(last_message_count >= SPAM_TRIGGER_AUTOMUTE)
to_chat(src, "<span class='danger'>You have exceeded the spam filter limit for identical messages. An auto-mute was applied.</span>")
cmd_admin_mute(mob, mute_type, 1)
return 1
if(last_message_count >= SPAM_TRIGGER_WARNING)
to_chat(src, "<span class='danger'>You are nearing the spam filter limit for identical messages.</span>")
return 0
else
last_message = message
src.last_message_count = 0
last_message_count = 0
return 0
//This stops files larger than UPLOAD_LIMIT being sent from client to server via input(), client.Import() etc.
@@ -287,6 +305,8 @@
admins += src
holder.owner = src
donator_check()
//preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum)
prefs = preferences_datums[ckey]
if(!prefs)
@@ -360,10 +380,27 @@
return ..()
/client/proc/donator_check()
if(IsGuestKey(key))
return
establish_db_connection()
if(!dbcon.IsConnected())
return
//Donator stuff.
var/DBQuery/query_donor_select = dbcon.NewQuery("SELECT ckey, tier, active FROM `[format_table_name("donators")]` WHERE ckey = '[ckey]'")
query_donor_select.Execute()
while(query_donor_select.NextRow())
if(!text2num(query_donor_select.item[3]))
// Inactive donator.
donator_level = DONATOR_LEVEL_NONE
return
donator_level = text2num(query_donor_select.item[2])
break
/client/proc/log_client_to_db()
if( IsGuestKey(src.key) )
if(IsGuestKey(key))
return
establish_db_connection()
@@ -400,7 +437,7 @@
var/watchreason = check_watchlist(ckey)
if(watchreason)
message_admins("<font color='red'><B>Notice: </B></font><font color='blue'>[key_name_admin(src)] is on the watchlist and has just connected - Reason: [watchreason]</font>")
send2adminirc("Watchlist - [key_name(src)] is on the watchlist and has just connected - Reason: [watchreason]")
send2irc(config.admin_notify_irc, "Watchlist - [key_name(src)] is on the watchlist and has just connected - Reason: [watchreason]")
//Just the standard check to see if it's actually a number
if(sql_id)
@@ -4,6 +4,7 @@ var/list/gear_datums = list()
/datum/loadout_category
var/category = ""
var/list/gear = list()
var/donor_only = FALSE
/datum/loadout_category/New(cat)
category = cat
@@ -33,6 +34,8 @@ var/list/gear_datums = list()
if(!loadout_categories[use_category])
loadout_categories[use_category] = new /datum/loadout_category(use_category)
var/datum/loadout_category/LC = loadout_categories[use_category]
if(initial(G.donor_only))
LC.donor_only = TRUE
gear_datums[use_name] = new geartype
LC.gear[use_name] = gear_datums[use_name]
@@ -54,6 +57,7 @@ var/list/gear_datums = list()
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
var/donor_only = FALSE // if it's only available to donors
/datum/gear/New()
..()
@@ -76,4 +80,4 @@ var/list/gear_datums = list()
var/item = new gd.path(gd.location)
for(var/datum/gear_tweak/gt in gear_tweaks)
gt.tweak_item(item, metadata["[gt]"])
return item
return item
@@ -0,0 +1,90 @@
/datum/gear/donor
donor_only = TRUE
sort_category = "Donor"
subtype_path = /datum/gear/donor
/datum/gear/donor/furgloves
display_name = "Fur Gloves"
path = /obj/item/clothing/gloves/furgloves
/datum/gear/donor/furboots
display_name = "Fur Boots"
path = /obj/item/clothing/shoes/furboots
/datum/gear/donor/noble_boot
display_name = "Noble Boots"
path = /obj/item/clothing/shoes/fluff/noble_boot
/datum/gear/donor/furcape
display_name = "Fur Cape"
path = /obj/item/clothing/suit/furcape
cost = 2
/datum/gear/donor/furcoat
display_name = "Fur Coat"
path = /obj/item/clothing/suit/furcoat
cost = 2
/datum/gear/donor/lord_admiral
display_name = "Lord Admiral Coat"
path = /obj/item/clothing/suit/lordadmiral
/datum/gear/donor/lord_admiral_hat
display_name = "Lord Admiral Hat"
path = /obj/item/clothing/head/lordadmiralhat
/datum/gear/donor/kamina
display_name = "Spiky Orange-tinted Shades"
path = /obj/item/clothing/glasses/fluff/kamina
/datum/gear/donor/green
display_name = "Spiky Green-tinted Shades"
path = /obj/item/clothing/glasses/fluff/kamina/green
/datum/gear/donor/hipster
display_name = "Hipster Glasses"
path = /obj/item/clothing/glasses/regular/hipster
/datum/gear/donor/threedglasses
display_name = "Threed Glasses"
path = /obj/item/clothing/glasses/threedglasses
/datum/gear/donor/blacksombrero
display_name = "Black Sombrero"
path = /obj/item/clothing/head/fluff/blacksombrero
/datum/gear/donor/guardhelm
display_name = "Plastic Guard helm"
path = /obj/item/clothing/head/fluff/guardhelm
/datum/gear/donor/goldtophat
display_name = "Gold-trimmed Top Hat"
path = /obj/item/clothing/head/fluff/goldtophat
/datum/gear/donor/goldtophat/red
display_name = "Red Gold-trimmed Top Hat"
path = /obj/item/clothing/head/fluff/goldtophat/red
/datum/gear/donor/goldtophat/blue
display_name = "Blue Gold-trimmed Top Hat"
path = /obj/item/clothing/head/fluff/goldtophat/blue
/datum/gear/donor/mushhat
display_name = "Mushroom Hat"
path = /obj/item/clothing/head/fluff/mushhat
/datum/gear/donor/furcap
display_name = "Fur Cap"
path = /obj/item/clothing/head/furcap
/datum/gear/donor/mouse
display_name = "Mouse Headband"
path = /obj/item/clothing/head/kitty/mouse
/datum/gear/donor/fawkes
display_name = "Guy Fawkes mask"
path = /obj/item/clothing/mask/fawkes
/datum/gear/donor/noble_clothes
display_name = "Noble Clothes"
path = /obj/item/clothing/under/noble_clothes
+423 -219
View File
@@ -61,7 +61,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
#define MAX_SAVE_SLOTS 20 // Save slots for regular players
#define MAX_SAVE_SLOTS_MEMBER 20 // Save slots for BYOND members
#define MAX_GEAR_COST config.max_loadout_points
#define TAB_CHAR 0
#define TAB_GAME 1
@@ -73,6 +72,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used
// var/savefile_version = 0
var/max_save_slots = MAX_SAVE_SLOTS
var/max_gear_slots = 0
//non-preference stuff
var/warns = 0
@@ -108,18 +108,30 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/r_headacc = 0 //Head accessory colour
var/g_headacc = 0 //Head accessory colour
var/b_headacc = 0 //Head accessory colour
var/m_style = "None" //Marking style
var/r_markings = 0 //Marking colour
var/g_markings = 0 //Marking colour
var/b_markings = 0 //Marking colour
var/list/m_styles = list(
"head" = "None",
"body" = "None",
"tail" = "None"
) //Marking styles.
var/list/m_colours = list(
"head" = "#000000",
"body" = "#000000",
"tail" = "#000000"
) //Marking colours.
var/h_style = "Bald" //Hair type
var/r_hair = 0 //Hair color
var/g_hair = 0 //Hair color
var/b_hair = 0 //Hair color
var/f_style = "Shaved" //Face hair type
var/r_facial = 0 //Face hair color
var/g_facial = 0 //Face hair color
var/b_facial = 0 //Face hair color
var/r_hair_sec = 0 //Secondary hair color
var/g_hair_sec = 0 //Secondary hair color
var/b_hair_sec = 0 //Secondary hair color
var/f_style = "Shaved" //Facial hair type
var/r_facial = 0 //Facial hair color
var/g_facial = 0 //Facial hair color
var/b_facial = 0 //Facial hair color
var/r_facial_sec = 0 //Secondary facial hair color
var/g_facial_sec = 0 //Secondary facial hair color
var/b_facial_sec = 0 //Secondary facial hair color
var/s_tone = 0 //Skin tone
var/r_skin = 0 //Skin color
var/g_skin = 0 //Skin color
@@ -127,6 +139,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/r_eyes = 0 //Eye color
var/g_eyes = 0 //Eye color
var/b_eyes = 0 //Eye color
var/alt_head = "None" //Alt head style.
var/species = "Human"
var/language = "None" //Secondary language
@@ -199,11 +212,16 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
/datum/preferences/New(client/C)
b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
max_gear_slots = config.max_loadout_points
if(istype(C))
if(!IsGuestKey(C.key))
unlock_content = C.IsByondMember()
if(unlock_content)
max_save_slots = MAX_SAVE_SLOTS_MEMBER
if(C.donator_level >= DONATOR_LEVEL_ONE)
max_gear_slots += 5
var/loaded_preferences_successfully = load_preferences(C)
if(loaded_preferences_successfully)
if(load_character(C))
@@ -236,7 +254,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
switch(current_tab)
if(TAB_CHAR) // Character Settings
dat += "<div class='statusDisplay' style='max-width: 128px; position: absolute; left: 150px; top: 150px'><img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64></div>"
dat += "<div class='statusDisplay' style='max-width: 128px; position: absolute; left: 150px; top: 150px'><img src=previewicon.png class='charPreview'><img src=previewicon2.png class='charPreview'></div>"
dat += "<table width='100%'><tr><td width='405px' height='25px' valign='top'>"
dat += "<b>Name: </b>"
dat += "<a href='?_src_=prefs;preference=name;task=input'><b>[real_name]</b></a>"
@@ -245,9 +263,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "</td><td width='405px' height='25px' valign='left'>"
dat += "<center>"
dat += "Slot <b>[slot_name]</b> - "
dat += "<a href=\"byond://?src=\ref[user];preference=open_load_dialog\">Load slot</a> - "
dat += "<a href=\"byond://?src=\ref[user];preference=save\">Save slot</a> - "
dat += "<a href=\"byond://?src=\ref[user];preference=reload\">Reload slot</a>"
dat += "<a href=\"byond://?src=[user.UID()];preference=open_load_dialog\">Load slot</a> - "
dat += "<a href=\"byond://?src=[user.UID()];preference=save\">Save slot</a> - "
dat += "<a href=\"byond://?src=[user.UID()];preference=reload\">Reload slot</a>"
dat += "</center>"
dat += "</td></tr></table>"
dat += "<table width='100%'><tr><td width='405px' height='200px' valign='top'>"
@@ -268,7 +286,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<b>Skin Tone:</b> <a href='?_src_=prefs;preference=s_tone;task=input'>[species == "Vox" ? "[s_tone]" : "[-s_tone + 35]/220"]</a><br>"
dat += "<b>Disabilities:</b> <a href='?_src_=prefs;preference=disabilities'>\[Set\]</a><br>"
dat += "<b>Nanotrasen Relation:</b> <a href ='?_src_=prefs;preference=nt_relation;task=input'>[nanotrasen_relation]</a><br>"
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=input'>Set Flavor Text</a><br>"
dat += "<a href='byond://?src=[user.UID()];preference=flavor_text;task=input'>Set Flavor Text</a><br>"
if(lentext(flavor_text) <= 40)
if(!lentext(flavor_text)) dat += "\[...\]<br>"
else dat += "[flavor_text]<br>"
@@ -284,18 +302,35 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<a href='?_src_=prefs;preference=ha_style;task=input'>[ha_style]</a> "
dat += "<a href='?_src_=prefs;preference=headaccessory;task=input'>Color</a> [color_square(r_headacc, g_headacc, b_headacc)]<br>"
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have body markings.
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
dat += "<b>Head Markings:</b> "
dat += "<a href='?_src_=prefs;preference=m_style_head;task=input'>[m_styles["head"]]</a>"
dat += "<a href='?_src_=prefs;preference=m_head_colour;task=input'>Color</a> [color_square(color2R(m_colours["head"]), color2G(m_colours["head"]), color2B(m_colours["head"]))]<br>"
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings/tattoos.
dat += "<b>Body Markings:</b> "
dat += "<a href='?_src_=prefs;preference=m_style;task=input'>[m_style]</a>"
dat += "<a href='?_src_=prefs;preference=markings;task=input'>Color</a> [color_square(r_markings, g_markings, b_markings)]<br>"
dat += "<a href='?_src_=prefs;preference=m_style_body;task=input'>[m_styles["body"]]</a>"
dat += "<a href='?_src_=prefs;preference=m_body_colour;task=input'>Color</a> [color_square(color2R(m_colours["body"]), color2G(m_colours["body"]), color2B(m_colours["body"]))]<br>"
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
dat += "<b>Tail Markings:</b> "
dat += "<a href='?_src_=prefs;preference=m_style_tail;task=input'>[m_styles["tail"]]</a>"
dat += "<a href='?_src_=prefs;preference=m_tail_colour;task=input'>Color</a> [color_square(color2R(m_colours["tail"]), color2G(m_colours["tail"]), color2B(m_colours["tail"]))]<br>"
dat += "<b>Hair:</b> "
dat += "<a href='?_src_=prefs;preference=h_style;task=input'>[h_style]</a>"
dat += "<a href='?_src_=prefs;preference=hair;task=input'>Color</a> [color_square(r_hair, g_hair, b_hair)]<br>"
dat += "<a href='?_src_=prefs;preference=hair;task=input'>Color</a> [color_square(r_hair, g_hair, b_hair)]"
var/datum/sprite_accessory/temp_hair_style = hair_styles_list[h_style]
if(temp_hair_style && temp_hair_style.secondary_theme && !temp_hair_style.no_sec_colour)
dat += " <a href='?_src_=prefs;preference=secondary_hair;task=input'>Color #2</a> [color_square(r_hair_sec, g_hair_sec, b_hair_sec)]"
dat += "<br>"
dat += "<b>Facial Hair:</b> "
dat += "<a href='?_src_=prefs;preference=f_style;task=input'>[f_style ? "[f_style]" : "Shaved"]</a>"
dat += "<a href='?_src_=prefs;preference=facial;task=input'>Color</a> [color_square(r_facial, g_facial, b_facial)]<br>"
dat += "<a href='?_src_=prefs;preference=facial;task=input'>Color</a> [color_square(r_facial, g_facial, b_facial)]"
var/datum/sprite_accessory/temp_facial_hair_style = facial_hair_styles_list[f_style]
if(temp_facial_hair_style && temp_facial_hair_style.secondary_theme && !temp_facial_hair_style.no_sec_colour)
dat += " <a href='?_src_=prefs;preference=secondary_facial;task=input'>Color #2</a> [color_square(r_facial_sec, g_facial_sec, b_facial_sec)]"
dat += "<br>"
if(species != "Machine")
dat += "<b>Eyes:</b> "
@@ -315,9 +350,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(jobban_isbanned(user, "Records"))
dat += "<b>You are banned from using character records.</b><br>"
else
dat += "<a href=\"byond://?src=\ref[user];preference=records;record=1\">Character Records</a><br>"
dat += "<a href=\"byond://?src=[user.UID()];preference=records;record=1\">Character Records</a><br>"
dat += "<h2>Limbs</h2>"
if(species in list("Unathi")) //Species with alt heads.
dat += "<b>Alternate Head:</b> "
dat += "<a href='?_src_=prefs;preference=alt_head;task=input'>[alt_head]</a><br>"
dat += "<b>Limbs and Parts:</b> <a href='?_src_=prefs;preference=limbs;task=input'>Adjust</a><br>"
if(species != "Slime People" && species != "Machine")
dat += "<b>Internal Organs:</b> <a href='?_src_=prefs;preference=organs;task=input'>Adjust</a><br>"
@@ -395,6 +433,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<b>OOC notes:</b> <a href='?_src_=prefs;preference=metadata;task=input'><b>Edit</b></a><br>"
if(unlock_content)
dat += "<b>BYOND Membership Publicity:</b> <a href='?_src_=prefs;preference=publicity'><b>[(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]</b></a><br>"
if(user.client.donator_level >= DONATOR_LEVEL_ONE)
dat += "<b>Donator Publicity:</b> <a href='?_src_=prefs;preference=donor_public'><b>[(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]</b></a><br>"
dat += "<b>Randomized character slot:</b> <a href='?_src_=prefs;preference=randomslot'><b>[randomslot ? "Yes" : "No"]</b></a><br>"
dat += "<b>Ghost ears:</b> <a href='?_src_=prefs;preference=ghost_ears'><b>[(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]</b></a><br>"
@@ -431,14 +471,18 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
total_cost += G.cost
var/fcolor = "#3366CC"
if(total_cost < MAX_GEAR_COST)
if(total_cost < max_gear_slots)
fcolor = "#E67300"
dat += "<table align='center' width='100%'>"
dat += "<tr><td colspan=4><center><b><font color='[fcolor]'>[total_cost]/[MAX_GEAR_COST]</font> loadout points spent.</b> \[<a href='?_src_=prefs;preference=gear;clear_loadout=1'>Clear Loadout</a>\]</center></td></tr>"
dat += "<tr><td colspan=4><center><b><font color='[fcolor]'>[total_cost]/[max_gear_slots]</font> loadout points spent.</b> \[<a href='?_src_=prefs;preference=gear;clear_loadout=1'>Clear Loadout</a>\]</center></td></tr>"
dat += "<tr><td colspan=4><center><b>"
var/firstcat = 1
for(var/category in loadout_categories)
var/datum/loadout_category/LC = loadout_categories[category]
if(LC.donor_only)
if(user.client.donator_level < DONATOR_LEVEL_TWO) // level two donators get the donator loadout, so don't show it to anyone with less than that
continue
if(firstcat)
firstcat = 0
else
@@ -600,7 +644,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
else
HTML += " <font color=red>\[No]</font></a>"
if(job.alt_titles)
HTML += "<br><b><a class='white' href=\"byond://?src=\ref[user];preference=job;task=alt_title;job=\ref[job]\">\[[GetPlayerAltTitle(job)]\]</a></b></td></tr>"
HTML += "<br><b><a class='white' href=\"byond://?src=[user.UID()];preference=job;task=alt_title;job=\ref[job]\">\[[GetPlayerAltTitle(job)]\]</a></b></td></tr>"
HTML += "</td></tr>"
continue
/*
@@ -616,7 +660,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
HTML += "<font color=[prefLevelColor]>[prefLevelLabel]</font></a>"
if(job.alt_titles)
HTML += "<br><b><a class='white' href=\"byond://?src=\ref[user];preference=job;task=alt_title;job=\ref[job]\">\[[GetPlayerAltTitle(job)]\]</a></b></td></tr>"
HTML += "<br><b><a class='white' href=\"byond://?src=[user.UID()];preference=job;task=alt_title;job=\ref[job]\">\[[GetPlayerAltTitle(job)]\]</a></b></td></tr>"
HTML += "</td></tr>"
@@ -784,21 +828,21 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
HTML += "<tt><center>"
HTML += "<b>Set Character Records</b><br>"
HTML += "<a href=\"byond://?src=\ref[user];preference=records;task=med_record\">Medical Records</a><br>"
HTML += "<a href=\"byond://?src=[user.UID()];preference=records;task=med_record\">Medical Records</a><br>"
if(lentext(med_record) <= 40)
HTML += "[med_record]"
else
HTML += "[copytext(med_record, 1, 37)]..."
HTML += "<br><br><a href=\"byond://?src=\ref[user];preference=records;task=gen_record\">Employment Records</a><br>"
HTML += "<br><br><a href=\"byond://?src=[user.UID()];preference=records;task=gen_record\">Employment Records</a><br>"
if(lentext(gen_record) <= 40)
HTML += "[gen_record]"
else
HTML += "[copytext(gen_record, 1, 37)]..."
HTML += "<br><br><a href=\"byond://?src=\ref[user];preference=records;task=sec_record\">Security Records</a><br>"
HTML += "<br><br><a href=\"byond://?src=[user.UID()];preference=records;task=sec_record\">Security Records</a><br>"
if(lentext(sec_record) <= 40)
HTML += "[sec_record]<br>"
@@ -806,7 +850,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
HTML += "[copytext(sec_record, 1, 37)]...<br>"
HTML += "<br>"
HTML += "<a href=\"byond://?src=\ref[user];preference=records;records=-1\">\[Done\]</a>"
HTML += "<a href=\"byond://?src=[user.UID()];preference=records;records=-1\">\[Done\]</a>"
HTML += "</center></tt>"
user << browse(null, "window=preferences")
@@ -1064,6 +1108,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(TG.display_name in gear)
gear -= TG.display_name
else
if(TG.donor_only)
if(user.client.donator_level < DONATOR_LEVEL_TWO) // donator items are locked to > tier 2
//they normally can't even get this far- but just in case of href exploits, we check them here
return
var/total_cost = 0
var/list/type_blacklist = list()
for(var/gear_name in gear)
@@ -1075,7 +1123,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
type_blacklist += G.subtype_path
total_cost += G.cost
if((total_cost + TG.cost) <= MAX_GEAR_COST)
if((total_cost + TG.cost) <= max_gear_slots)
gear += TG.display_name
else if(href_list["gear"] && href_list["tweak"])
@@ -1097,6 +1145,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
switch(href_list["task"])
if("random")
var/datum/robolimb/robohead
if(species == "Machine")
var/head_model = "[!rlimb_data["head"] ? "Morpheus Cyberkinetics" : rlimb_data["head"]]"
robohead = all_robolimbs[head_model]
switch(href_list["preference"])
if("name")
real_name = random_name(gender,species)
@@ -1107,23 +1159,59 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
r_hair = rand(0,255)
g_hair = rand(0,255)
b_hair = rand(0,255)
if("secondary_hair")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
r_hair_sec = rand(0,255)
g_hair_sec = rand(0,255)
b_hair_sec = rand(0,255)
if("h_style")
h_style = random_hair_style(gender, species)
h_style = random_hair_style(gender, species, robohead)
if("facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
r_facial = rand(0,255)
g_facial = rand(0,255)
b_facial = rand(0,255)
if("secondary_facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
r_facial_sec = rand(0,255)
g_facial_sec = rand(0,255)
b_facial_sec = rand(0,255)
if("f_style")
f_style = random_facial_hair_style(gender, species)
f_style = random_facial_hair_style(gender, species, robohead)
if("headaccessory")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
r_headacc = rand(0,255)
g_headacc = rand(0,255)
b_headacc = rand(0,255)
if("ha_style")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
ha_style = random_head_accessory(species)
if("m_style_head")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
m_styles["head"] = random_marking_style("head", species, robohead, null, alt_head)
if("m_head_colour")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
m_colours["head"] = rgb(rand(0,255), rand(0,255), rand(0,255))
if("m_style_body")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings.
m_styles["body"] = random_marking_style("body", species)
if("m_body_colour")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings.
m_colours["body"] = rgb(rand(0,255), rand(0,255), rand(0,255))
if("m_style_tail")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
m_styles["tail"] = random_marking_style("tail", species, null, body_accessory)
if("m_tail_colour")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
m_colours["tail"] = rgb(rand(0,255), rand(0,255), rand(0,255))
if("underwear")
underwear = random_underwear(gender)
underwear = random_underwear(gender, species)
ShowChoices(user)
if("undershirt")
undershirt = random_undershirt(gender)
undershirt = random_undershirt(gender, species)
ShowChoices(user)
if("socks")
socks = random_socks(gender)
socks = random_socks(gender, species)
ShowChoices(user)
if("eyes")
r_eyes = rand(0,255)
@@ -1148,7 +1236,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("name")
var/raw_name = input(user, "Choose your character's name:", "Character Preference") as text|null
if(!isnull(raw_name)) // Check to ensure that the user entered text (rather than cancel.)
var/new_name = reject_bad_name(raw_name)
var/new_name = reject_bad_name(raw_name, 1)
if(new_name)
real_name = new_name
else
@@ -1159,7 +1247,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(new_age)
age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN)
if("species")
var/list/new_species = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin")
var/prev_species = species
// var/whitelisted = 0
@@ -1177,43 +1264,41 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
species = input("Please select a species", "Character Generation", null) in new_species
if(prev_species != species)
var/datum/robolimb/robohead
if(species == "Machine")
var/head_model = "[!rlimb_data["head"] ? "Morpheus Cyberkinetics" : rlimb_data["head"]]"
robohead = all_robolimbs[head_model]
//grab one of the valid hair styles for the newly chosen species
var/list/valid_hairstyles = list()
for(var/hairstyle in hair_styles_list)
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(!(species in S.species_allowed))
continue
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
if(valid_hairstyles.len)
h_style = pick(valid_hairstyles)
else
//this shouldn't happen
h_style = hair_styles_list["Bald"]
h_style = random_hair_style(gender, species, robohead)
//grab one of the valid facial hair styles for the newly chosen species
var/list/valid_facialhairstyles = list()
for(var/facialhairstyle in facial_hair_styles_list)
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(!(species in S.species_allowed))
continue
f_style = random_facial_hair_style(gender, species, robohead)
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
if(valid_facialhairstyles.len)
f_style = pick(valid_facialhairstyles)
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
ha_style = random_head_accessory(species)
else
//this shouldn't happen
f_style = facial_hair_styles_list["Shaved"]
ha_style = "None" // No Vulp ears on Unathi
r_headacc = 0
g_headacc = 0
b_headacc = 0
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
m_styles["head"] = random_marking_style("head", species, robohead, null, alt_head)
else
m_styles["head"] = "None"
m_colours["head"] = "#000000"
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings/tattoos.
m_styles["body"] = random_marking_style("body", species)
else
m_styles["body"] = "None"
m_colours["body"] = "#000000"
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
m_styles["tail"] = random_marking_style("tail", species, null, body_accessory)
else
m_styles["tail"] = "None"
m_colours["tail"] = "#000000"
// Don't wear another species' underwear!
var/datum/sprite_accessory/S = underwear_list[underwear]
@@ -1228,20 +1313,18 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(!S || !(species in S.species_allowed))
socks = random_socks(gender, species)
//reset hair colour and skin colour
r_hair = 0//hex2num(copytext(new_hair, 2, 4))
g_hair = 0//hex2num(copytext(new_hair, 4, 6))
b_hair = 0//hex2num(copytext(new_hair, 6, 8))
s_tone = 0
//reset skin tone and colour
if(species in list("Human", "Drask", "Vox"))
random_skin_tone(species)
else
s_tone = 0
if(!(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")))
r_skin = 0
g_skin = 0
b_skin = 0
ha_style = "None" // No Vulp ears on Unathi
m_style = "None" // No Unathi markings on Tajara
alt_head = "None" //No alt heads on species that don't have them.
body_accessory = null //no vulptail on humans damnit
@@ -1288,39 +1371,44 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/input = "Choose your character's hair colour:"
var/new_hair = input(user, input, "Character Preference", rgb(r_hair, g_hair, b_hair)) as color|null
if(new_hair)
r_hair = hex2num(copytext(new_hair, 2, 4))
g_hair = hex2num(copytext(new_hair, 4, 6))
b_hair = hex2num(copytext(new_hair, 6, 8))
r_hair = color2R(new_hair)
g_hair = color2G(new_hair)
b_hair = color2B(new_hair)
if("secondary_hair")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
if(hair_style.secondary_theme && !hair_style.no_sec_colour)
var/new_hair = input(user, "Choose your character's secondary hair colour:", "Character Preference", rgb(r_hair_sec, g_hair_sec, b_hair_sec)) as color|null
if(new_hair)
r_hair_sec = color2R(new_hair)
g_hair_sec = color2G(new_hair)
b_hair_sec = color2B(new_hair)
if("h_style")
var/list/valid_hairstyles = list()
for(var/hairstyle in hair_styles_list)
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
if(species == "Machine") //Species that can use prosthetic heads.
var/obj/item/organ/external/head/H = new()
if(S.name == "Bald")
valid_hairstyles[hairstyle] = S
if(!rlimb_data["head"]) //Handle situations where the head is default.
H.model = "Morpheus Cyberkinetics"
else
H.model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[H.model]
if(species in S.species_allowed)
if(robohead.is_monitor && (robohead.company in S.models_allowed)) //If the Machine character has the default Morpheus screen head or another screen head
//and said head is in the hair style's allowed models list...
valid_hairstyles[hairstyle] = S //Allow them to select the hairstyle.
continue
else
if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human hairstyles).
continue
else if(!robohead.is_monitor && ("Human" in S.species_allowed))
valid_hairstyles[hairstyle] = S
continue
else
if(!(species in S.species_allowed))
continue
valid_hairstyles[hairstyle] = S
if(hairstyle == "Bald") //Just in case.
valid_hairstyles += hairstyle
continue
if(species == "Machine") //Species that can use prosthetic heads.
var/head_model
if(!rlimb_data["head"]) //Handle situations where the head is default.
head_model = "Morpheus Cyberkinetics"
else
head_model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[head_model]
if((species in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
valid_hairstyles += hairstyle //Give them their hairstyles if they do.
else
if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
But if the user has a robotic humanoid head and the hairstyle can fit humans, let them use it as a wig. */
valid_hairstyles += hairstyle
else //If the user is not a species who can have robotic heads, use the default handling.
if(species in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list.
valid_hairstyles += hairstyle
var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles
if(new_h_style)
@@ -1331,9 +1419,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/input = "Choose the colour of your your character's head accessory:"
var/new_head_accessory = input(user, input, "Character Preference", rgb(r_headacc, g_headacc, b_headacc)) as color|null
if(new_head_accessory)
r_headacc = hex2num(copytext(new_head_accessory, 2, 4))
g_headacc = hex2num(copytext(new_head_accessory, 4, 6))
b_headacc = hex2num(copytext(new_head_accessory, 6, 8))
r_headacc = color2R(new_head_accessory)
g_headacc = color2G(new_head_accessory)
b_headacc = color2B(new_head_accessory)
if("ha_style")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with head accessories.
@@ -1343,47 +1431,130 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(!(species in H.species_allowed))
continue
valid_head_accessory_styles[head_accessory_style] = head_accessory_styles_list[head_accessory_style]
valid_head_accessory_styles += head_accessory_style
var/new_head_accessory_style = input(user, "Choose the style of your character's head accessory:", "Character Preference") as null|anything in valid_head_accessory_styles
if(new_head_accessory_style)
ha_style = new_head_accessory_style
if("markings")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with markings.
var/input = "Choose the colour of your your character's markings:"
var/new_markings = input(user, input, "Character Preference", rgb(r_markings, g_markings, b_markings)) as color|null
if(new_markings)
r_markings = hex2num(copytext(new_markings, 2, 4))
g_markings = hex2num(copytext(new_markings, 4, 6))
b_markings = hex2num(copytext(new_markings, 6, 8))
if("m_style")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with markings.
var/list/valid_markings = list()
for(var/markingstyle in marking_styles_list)
var/datum/sprite_accessory/M = marking_styles_list[markingstyle]
if(!(species in M.species_allowed))
if("alt_head")
if(organ_data["head"] == "cyborg")
return
if(species in list("Unathi")) //Species with alt heads.
var/list/valid_alt_heads = list()
valid_alt_heads["None"] = alt_heads_list["None"] //The only null entry should be the "None" option
for(var/alternate_head in alt_heads_list)
var/datum/sprite_accessory/alt_heads/head = alt_heads_list[alternate_head]
if(!(species in head.species_allowed))
continue
valid_alt_heads += alternate_head
var/new_alt_head = input(user, "Choose your character's alternate head style:", "Character Preference") as null|anything in valid_alt_heads
if(new_alt_head)
alt_head = new_alt_head
if(m_styles["head"])
var/head_marking = m_styles["head"]
var/datum/sprite_accessory/body_markings/head/head_marking_style = marking_styles_list[head_marking]
if(!head_marking_style.heads_allowed || (!("All" in head_marking_style.heads_allowed) && !(alt_head in head_marking_style.heads_allowed)))
m_styles["head"] = "None"
if("m_style_head")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
var/list/valid_markings = list()
valid_markings["None"] = marking_styles_list["None"]
for(var/markingstyle in marking_styles_list)
var/datum/sprite_accessory/body_markings/head/M = marking_styles_list[markingstyle]
if(!(species in M.species_allowed))
continue
if(M.marking_location != "head")
continue
if(alt_head && alt_head != "None")
if(!("All" in M.heads_allowed) && !(alt_head in M.heads_allowed))
continue
else
if(M.heads_allowed && !("All" in M.heads_allowed))
continue
if(species == "Machine") //Species that can use prosthetic heads.
var/obj/item/organ/external/head/H = new()
var/head_model
if(!rlimb_data["head"]) //Handle situations where the head is default.
H.model = "Morpheus Cyberkinetics"
head_model = "Morpheus Cyberkinetics"
else
H.model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[H.model]
head_model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[head_model]
if(robohead.is_monitor && M.name != "None") //If the character can have prosthetic heads and they have the default Morpheus head (or another monitor-head), no optic markings.
continue
else if(!robohead.is_monitor && M.name != "None") //Otherwise, if they DON'T have the default head and the head's not a monitor but the head's not in the style's list of allowed models, skip.
if(!(robohead.company in M.models_allowed))
continue
valid_markings[markingstyle] = marking_styles_list[markingstyle]
valid_markings += markingstyle
var/new_marking_style = input(user, "Choose the style of your character's markings:", "Character Preference", m_style) as null|anything in valid_markings
var/new_marking_style = input(user, "Choose the style of your character's head markings:", "Character Preference", m_styles["head"]) as null|anything in valid_markings
if(new_marking_style)
m_style = new_marking_style
m_styles["head"] = new_marking_style
if("m_head_colour")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
var/input = "Choose the colour of your your character's head markings:"
var/new_markings = input(user, input, "Character Preference", m_colours["head"]) as color|null
if(new_markings)
m_colours["head"] = new_markings
if("m_style_body")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings/tattoos.
var/list/valid_markings = list()
valid_markings["None"] = marking_styles_list["None"]
for(var/markingstyle in marking_styles_list)
var/datum/sprite_accessory/M = marking_styles_list[markingstyle]
if(!(species in M.species_allowed))
continue
if(M.marking_location != "body")
continue
valid_markings += markingstyle
var/new_marking_style = input(user, "Choose the style of your character's body markings:", "Character Preference", m_styles["body"]) as null|anything in valid_markings
if(new_marking_style)
m_styles["body"] = new_marking_style
if("m_body_colour")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings/tattoos.
var/input = "Choose the colour of your your character's body markings:"
var/new_markings = input(user, input, "Character Preference", m_colours["body"]) as color|null
if(new_markings)
m_colours["body"] = new_markings
if("m_style_tail")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
var/list/valid_markings = list()
valid_markings["None"] = marking_styles_list["None"]
for(var/markingstyle in marking_styles_list)
var/datum/sprite_accessory/body_markings/tail/M = marking_styles_list[markingstyle]
if(M.marking_location != "tail")
continue
if(!(species in M.species_allowed))
continue
if(!body_accessory)
if(M.tails_allowed)
continue
else
if(!M.tails_allowed || !(body_accessory in M.tails_allowed))
continue
valid_markings += markingstyle
var/new_marking_style = input(user, "Choose the style of your character's tail markings:", "Character Preference", m_styles["tail"]) as null|anything in valid_markings
if(new_marking_style)
m_styles["tail"] = new_marking_style
if("m_tail_colour")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
var/input = "Choose the colour of your your character's tail markings:"
var/new_markings = input(user, input, "Character Preference", m_colours["tail"]) as color|null
if(new_markings)
m_colours["tail"] = new_markings
if("body_accessory")
var/list/possible_body_accessories = list()
@@ -1400,74 +1571,90 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/new_body_accessory = input(user, "Choose your body accessory:", "Character Preference") as null|anything in possible_body_accessories
if(new_body_accessory)
m_styles["tail"] = "None"
body_accessory = (new_body_accessory == "None") ? null : new_body_accessory
if("facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(r_facial, g_facial, b_facial)) as color|null
if(new_facial)
r_facial = hex2num(copytext(new_facial, 2, 4))
g_facial = hex2num(copytext(new_facial, 4, 6))
b_facial = hex2num(copytext(new_facial, 6, 8))
r_facial = color2R(new_facial)
g_facial = color2G(new_facial)
b_facial = color2B(new_facial)
if("secondary_facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
if(facial_hair_style.secondary_theme && !facial_hair_style.no_sec_colour)
var/new_facial = input(user, "Choose your character's secondary facial-hair colour:", "Character Preference", rgb(r_facial_sec, g_facial_sec, b_facial_sec)) as color|null
if(new_facial)
r_facial_sec = color2R(new_facial)
g_facial_sec = color2G(new_facial)
b_facial_sec = color2B(new_facial)
if("f_style")
var/list/valid_facialhairstyles = list()
var/list/valid_facial_hairstyles = list()
for(var/facialhairstyle in facial_hair_styles_list)
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
if(S.name == "Shaved")
valid_facialhairstyles[facialhairstyle] = S
if(facialhairstyle == "Shaved") //Just in case.
valid_facial_hairstyles += facialhairstyle
continue
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(species == "Machine") //Species that can use prosthetic heads.
var/obj/item/organ/external/head/H = new()
var/head_model
if(!rlimb_data["head"]) //Handle situations where the head is default.
H.model = "Morpheus Cyberkinetics"
head_model = "Morpheus Cyberkinetics"
else
H.model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[H.model]
if(species in S.species_allowed)
if(robohead.is_monitor) //If the Machine character has the default Morpheus screen head or another screen head and they're allowed to have the style, let them have it.
valid_facialhairstyles[facialhairstyle] = S
continue
head_model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[head_model]
if((species in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
valid_facial_hairstyles += facialhairstyle //Give them their facial hairstyles if they do.
else
if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human facial hairstyles).
continue
else if(!robohead.is_monitor && ("Human" in S.species_allowed))
valid_facialhairstyles[facialhairstyle] = S
continue
else
if(!(species in S.species_allowed))
continue
if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the facial hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
But if the user has a robotic humanoid head and the facial hairstyle can fit humans, let them use it as a wig. */
valid_facial_hairstyles += facialhairstyle
else //If the user is not a species who can have robotic heads, use the default handling.
if(species in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list.
valid_facial_hairstyles += facialhairstyle
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facialhairstyles
var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facial_hairstyles
if(new_f_style)
f_style = new_f_style
if("underwear")
var/list/underwear_options
if(gender == MALE)
underwear_options = underwear_m
else
underwear_options = underwear_f
var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in underwear_options
var/list/valid_underwear = list()
for(var/underwear in underwear_list)
var/datum/sprite_accessory/S = underwear_list[underwear]
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(!(species in S.species_allowed))
continue
valid_underwear[underwear] = underwear_list[underwear]
var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in valid_underwear
ShowChoices(user)
if(new_underwear)
underwear = new_underwear
ShowChoices(user)
if("undershirt")
var/new_undershirt
if(gender == MALE)
new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_m
else
new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_f
var/list/valid_undershirts = list()
for(var/undershirt in undershirt_list)
var/datum/sprite_accessory/S = undershirt_list[undershirt]
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(!(species in S.species_allowed))
continue
valid_undershirts[undershirt] = undershirt_list[undershirt]
var/new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in valid_undershirts
ShowChoices(user)
if(new_undershirt)
undershirt = new_undershirt
ShowChoices(user)
if("socks")
var/list/valid_sockstyles = list()
@@ -1488,9 +1675,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("eyes")
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(r_eyes, g_eyes, b_eyes)) as color|null
if(new_eyes)
r_eyes = hex2num(copytext(new_eyes, 2, 4))
g_eyes = hex2num(copytext(new_eyes, 4, 6))
b_eyes = hex2num(copytext(new_eyes, 6, 8))
r_eyes = color2R(new_eyes)
g_eyes = color2G(new_eyes)
b_eyes = color2B(new_eyes)
if("s_tone")
if(species == "Human" || species == "Drask")
@@ -1506,9 +1693,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user))
var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(r_skin, g_skin, b_skin)) as color|null
if(new_skin)
r_skin = hex2num(copytext(new_skin, 2, 4))
g_skin = hex2num(copytext(new_skin, 4, 6))
b_skin = hex2num(copytext(new_skin, 6, 8))
r_skin = color2R(new_skin)
g_skin = color2G(new_skin)
b_skin = color2B(new_skin)
if("ooccolor")
@@ -1594,8 +1781,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
switch(new_state)
if("Normal")
if(limb == "head")
m_style = "None"
h_style = random_hair_style(gender, species)
m_styles["head"] = "None"
h_style = hair_styles_list["Bald"]
f_style = facial_hair_styles_list["Shaved"]
organ_data[limb] = null
rlimb_data[limb] = null
@@ -1640,11 +1827,15 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models
if(subchoice)
choice = subchoice
if(limb == "head")
ha_style = "None"
h_style = hair_styles_list["Bald"]
f_style = facial_hair_styles_list["Shaved"]
m_style = "None"
if(limb in list("head", "chest", "groin"))
if(species != "Machine")
return
if(limb == "head")
ha_style = "None"
alt_head = null
h_style = hair_styles_list["Bald"]
f_style = facial_hair_styles_list["Shaved"]
m_styles["head"] = "None"
rlimb_data[limb] = choice
organ_data[limb] = "cyborg"
if(second_limb)
@@ -1655,7 +1846,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
else
rlimb_data[second_limb] = choice
organ_data[second_limb] = "cyborg"
if("organs")
var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes")
if(!organ_name) return
@@ -1700,6 +1890,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(unlock_content)
toggles ^= MEMBER_PUBLIC
if("donor_public")
if(user.client.donator_level >= DONATOR_LEVEL_ONE)
toggles ^= DONATOR_PUBLIC
if("gender")
if(gender == MALE)
gender = FEMALE
@@ -1847,16 +2041,27 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
//Head-specific
var/obj/item/organ/external/head/H = character.get_organ("head")
H.r_hair = r_hair
H.g_hair = g_hair
H.b_hair = b_hair
H.r_hair_sec = r_hair_sec
H.g_hair_sec = g_hair_sec
H.b_hair_sec = b_hair_sec
H.r_facial = r_facial
H.g_facial = g_facial
H.b_facial = b_facial
H.r_facial_sec = r_facial_sec
H.g_facial_sec = g_facial_sec
H.b_facial_sec = b_facial_sec
H.h_style = h_style
H.f_style = f_style
H.alt_head = alt_head
//End of head-specific.
character.r_skin = r_skin
@@ -1893,37 +2098,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
I.robotize()
character.dna.b_type = b_type
if(disabilities & DISABILITY_FLAG_FAT && character.species.flags & CAN_BE_FAT)
character.dna.SetSEState(FATBLOCK,1,1)
character.mutations += FAT
character.mutations += OBESITY
character.overeatduration = 600
if(disabilities & DISABILITY_FLAG_NEARSIGHTED)
character.dna.SetSEState(GLASSESBLOCK,1,1)
character.disabilities|=NEARSIGHTED
if(disabilities & DISABILITY_FLAG_EPILEPTIC)
character.dna.SetSEState(EPILEPSYBLOCK,1,1)
character.disabilities|=EPILEPSY
if(disabilities & DISABILITY_FLAG_DEAF)
character.dna.SetSEState(DEAFBLOCK,1,1)
character.disabilities|=DEAF
if(disabilities & DISABILITY_FLAG_BLIND)
character.dna.SetSEState(BLINDBLOCK,1,1)
character.disabilities|=BLIND
if(disabilities & DISABILITY_FLAG_MUTE)
character.dna.SetSEState(MUTEBLOCK,1,1)
character.disabilities |= MUTE
S.handle_dna(character)
if(character.dna.dirtySE)
character.dna.UpdateSE()
domutcheck(character)
// Wheelchair necessary?
var/obj/item/organ/external/l_foot = character.get_organ("l_foot")
@@ -1946,10 +2120,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
H.b_headacc = b_headacc
H.ha_style = ha_style
if(character.species.bodyflags & HAS_MARKINGS)
character.r_markings = r_markings
character.g_markings = g_markings
character.b_markings = b_markings
character.m_style = m_style
character.m_colours = m_colours
character.m_styles = m_styles
if(body_accessory)
character.body_accessory = body_accessory_by_name["[body_accessory]"]
@@ -1966,6 +2138,38 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.change_eye_color(r_eyes, g_eyes, b_eyes)
if(disabilities & DISABILITY_FLAG_FAT && character.species.flags & CAN_BE_FAT)
character.dna.SetSEState(FATBLOCK,1,1)
character.mutations += FAT
character.mutations += OBESITY
character.overeatduration = 600
if(disabilities & DISABILITY_FLAG_NEARSIGHTED)
character.dna.SetSEState(GLASSESBLOCK,1,1)
character.disabilities |= NEARSIGHTED
if(disabilities & DISABILITY_FLAG_EPILEPTIC)
character.dna.SetSEState(EPILEPSYBLOCK,1,1)
character.disabilities |= EPILEPSY
if(disabilities & DISABILITY_FLAG_DEAF)
character.dna.SetSEState(DEAFBLOCK,1,1)
character.disabilities |= DEAF
if(disabilities & DISABILITY_FLAG_BLIND)
character.dna.SetSEState(BLINDBLOCK,1,1)
character.disabilities |= BLIND
if(disabilities & DISABILITY_FLAG_MUTE)
character.dna.SetSEState(MUTEBLOCK,1,1)
character.disabilities |= MUTE
S.handle_dna(character)
if(character.dna.dirtySE)
character.dna.UpdateSE()
domutcheck(character, null, MUTCHK_FORCED)
character.dna.ready_dna(character, flatten_SE = 0)
character.sync_organ_dna(assimilate=1)
character.UpdateAppearance()
@@ -2000,7 +2204,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
name = null
dat += "<hr>"
dat += "<a href='byond://?src=\ref[user];preference=close_load_dialog'>Close</a><br>"
dat += "<a href='byond://?src=[user.UID()];preference=close_load_dialog'>Close</a><br>"
dat += "</center></tt>"
// user << browse(dat, "window=saves;size=300x390")
var/datum/browser/popup = new(user, "saves", "<div align='center'>Character Saves</div>", 300, 390)
@@ -110,23 +110,28 @@
hair_red,
hair_green,
hair_blue,
secondary_hair_red,
secondary_hair_green,
secondary_hair_blue,
facial_red,
facial_green,
facial_blue,
secondary_facial_red,
secondary_facial_green,
secondary_facial_blue,
skin_tone,
skin_red,
skin_green,
skin_blue,
markings_red,
markings_green,
markings_blue,
marking_colours,
head_accessory_red,
head_accessory_green,
head_accessory_blue,
hair_style_name,
facial_style_name,
marking_style_name,
marking_styles,
head_accessory_style_name,
alt_head_name,
eyes_red,
eyes_green,
eyes_blue,
@@ -181,52 +186,57 @@
r_hair = text2num(query.item[8])
g_hair = text2num(query.item[9])
b_hair = text2num(query.item[10])
r_facial = text2num(query.item[11])
g_facial = text2num(query.item[12])
b_facial = text2num(query.item[13])
s_tone = text2num(query.item[14])
r_skin = text2num(query.item[15])
g_skin = text2num(query.item[16])
b_skin = text2num(query.item[17])
r_markings = text2num(query.item[18])
g_markings = text2num(query.item[19])
b_markings = text2num(query.item[20])
r_headacc = text2num(query.item[21])
g_headacc = text2num(query.item[22])
b_headacc = text2num(query.item[23])
h_style = query.item[24]
f_style = query.item[25]
m_style = query.item[26]
ha_style = query.item[27]
r_eyes = text2num(query.item[28])
g_eyes = text2num(query.item[29])
b_eyes = text2num(query.item[30])
underwear = query.item[31]
undershirt = query.item[32]
backbag = text2num(query.item[33])
b_type = query.item[34]
r_hair_sec = text2num(query.item[11])
g_hair_sec = text2num(query.item[12])
b_hair_sec = text2num(query.item[13])
r_facial = text2num(query.item[14])
g_facial = text2num(query.item[15])
b_facial = text2num(query.item[16])
r_facial_sec = text2num(query.item[17])
g_facial_sec = text2num(query.item[18])
b_facial_sec = text2num(query.item[19])
s_tone = text2num(query.item[20])
r_skin = text2num(query.item[21])
g_skin = text2num(query.item[22])
b_skin = text2num(query.item[23])
m_colours = params2list(query.item[24])
r_headacc = text2num(query.item[25])
g_headacc = text2num(query.item[26])
b_headacc = text2num(query.item[27])
h_style = query.item[28]
f_style = query.item[29]
m_styles = params2list(query.item[30])
ha_style = query.item[31]
alt_head = query.item[32]
r_eyes = text2num(query.item[33])
g_eyes = text2num(query.item[34])
b_eyes = text2num(query.item[35])
underwear = query.item[36]
undershirt = query.item[37]
backbag = text2num(query.item[38])
b_type = query.item[39]
//Jobs
alternate_option = text2num(query.item[35])
job_support_high = text2num(query.item[36])
job_support_med = text2num(query.item[37])
job_support_low = text2num(query.item[38])
job_medsci_high = text2num(query.item[39])
job_medsci_med = text2num(query.item[40])
job_medsci_low = text2num(query.item[41])
job_engsec_high = text2num(query.item[42])
job_engsec_med = text2num(query.item[43])
job_engsec_low = text2num(query.item[44])
job_karma_high = text2num(query.item[45])
job_karma_med = text2num(query.item[46])
job_karma_low = text2num(query.item[47])
alternate_option = text2num(query.item[40])
job_support_high = text2num(query.item[41])
job_support_med = text2num(query.item[42])
job_support_low = text2num(query.item[43])
job_medsci_high = text2num(query.item[44])
job_medsci_med = text2num(query.item[45])
job_medsci_low = text2num(query.item[46])
job_engsec_high = text2num(query.item[47])
job_engsec_med = text2num(query.item[48])
job_engsec_low = text2num(query.item[49])
job_karma_high = text2num(query.item[50])
job_karma_med = text2num(query.item[51])
job_karma_low = text2num(query.item[52])
//Miscellaneous
flavor_text = query.item[48]
med_record = query.item[49]
sec_record = query.item[50]
gen_record = query.item[51]
flavor_text = query.item[53]
med_record = query.item[54]
sec_record = query.item[55]
gen_record = query.item[56]
// Apparently, the preceding vars weren't always encoded properly...
if(findtext(flavor_text, "<")) // ... so let's clumsily check for tags!
flavor_text = html_encode(flavor_text)
@@ -236,17 +246,17 @@
sec_record = html_encode(sec_record)
if(findtext(gen_record, "<"))
gen_record = html_encode(gen_record)
disabilities = text2num(query.item[52])
player_alt_titles = params2list(query.item[53])
organ_data = params2list(query.item[54])
rlimb_data = params2list(query.item[55])
nanotrasen_relation = query.item[56]
speciesprefs = text2num(query.item[57])
disabilities = text2num(query.item[57])
player_alt_titles = params2list(query.item[58])
organ_data = params2list(query.item[59])
rlimb_data = params2list(query.item[60])
nanotrasen_relation = query.item[61]
speciesprefs = text2num(query.item[62])
//socks
socks = query.item[58]
body_accessory = query.item[59]
gear = params2list(query.item[60])
socks = query.item[63]
body_accessory = query.item[64]
gear = params2list(query.item[65])
//Sanitize
metadata = sanitize_text(metadata, initial(metadata))
@@ -262,23 +272,30 @@
r_hair = sanitize_integer(r_hair, 0, 255, initial(r_hair))
g_hair = sanitize_integer(g_hair, 0, 255, initial(g_hair))
b_hair = sanitize_integer(b_hair, 0, 255, initial(b_hair))
r_hair_sec = sanitize_integer(r_hair_sec, 0, 255, initial(r_hair_sec))
g_hair_sec = sanitize_integer(g_hair_sec, 0, 255, initial(g_hair_sec))
b_hair_sec = sanitize_integer(b_hair_sec, 0, 255, initial(b_hair_sec))
r_facial = sanitize_integer(r_facial, 0, 255, initial(r_facial))
g_facial = sanitize_integer(g_facial, 0, 255, initial(g_facial))
b_facial = sanitize_integer(b_facial, 0, 255, initial(b_facial))
r_facial_sec = sanitize_integer(r_facial_sec, 0, 255, initial(r_facial_sec))
g_facial_sec = sanitize_integer(g_facial_sec, 0, 255, initial(g_facial_sec))
b_facial_sec = sanitize_integer(b_facial_sec, 0, 255, initial(b_facial_sec))
s_tone = sanitize_integer(s_tone, -185, 34, initial(s_tone))
r_skin = sanitize_integer(r_skin, 0, 255, initial(r_skin))
g_skin = sanitize_integer(g_skin, 0, 255, initial(g_skin))
b_skin = sanitize_integer(b_skin, 0, 255, initial(b_skin))
r_markings = sanitize_integer(r_markings, 0, 255, initial(r_markings))
g_markings = sanitize_integer(g_markings, 0, 255, initial(g_markings))
b_markings = sanitize_integer(b_markings, 0, 255, initial(b_markings))
for(var/marking_location in m_colours)
m_colours[marking_location] = sanitize_hexcolor(m_colours[marking_location], DEFAULT_MARKING_COLOURS[marking_location])
r_headacc = sanitize_integer(r_headacc, 0, 255, initial(r_headacc))
g_headacc = sanitize_integer(g_headacc, 0, 255, initial(g_headacc))
b_headacc = sanitize_integer(b_headacc, 0, 255, initial(b_headacc))
h_style = sanitize_inlist(h_style, hair_styles_list, initial(h_style))
f_style = sanitize_inlist(f_style, facial_hair_styles_list, initial(f_style))
m_style = sanitize_inlist(m_style, marking_styles_list, initial(m_style))
for(var/marking_location in m_styles)
m_styles[marking_location] = sanitize_inlist(m_styles[marking_location], marking_styles_list, DEFAULT_MARKING_STYLES[marking_location])
ha_style = sanitize_inlist(ha_style, head_accessory_styles_list, initial(ha_style))
alt_head = sanitize_inlist(alt_head, alt_heads_list, initial(alt_head))
r_eyes = sanitize_integer(r_eyes, 0, 255, initial(r_eyes))
g_eyes = sanitize_integer(g_eyes, 0, 255, initial(g_eyes))
b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes))
@@ -318,6 +335,9 @@
var/rlimblist
var/playertitlelist
var/gearlist
var/markingcolourslist = list2params(m_colours)
var/markingstyleslist = list2params(m_styles)
if(!isemptylist(organ_data))
organlist = list2params(organ_data)
if(!isemptylist(rlimb_data))
@@ -341,23 +361,28 @@
hair_red='[r_hair]',
hair_green='[g_hair]',
hair_blue='[b_hair]',
secondary_hair_red='[r_hair_sec]',
secondary_hair_green='[g_hair_sec]',
secondary_hair_blue='[b_hair_sec]',
facial_red='[r_facial]',
facial_green='[g_facial]',
facial_blue='[b_facial]',
secondary_facial_red='[r_facial_sec]',
secondary_facial_green='[g_facial_sec]',
secondary_facial_blue='[b_facial_sec]',
skin_tone='[s_tone]',
skin_red='[r_skin]',
skin_green='[g_skin]',
skin_blue='[b_skin]',
markings_red='[r_markings]',
markings_green='[g_markings]',
markings_blue='[b_markings]',
marking_colours='[sanitizeSQL(markingcolourslist)]',
head_accessory_red='[r_headacc]',
head_accessory_green='[g_headacc]',
head_accessory_blue='[b_headacc]',
hair_style_name='[sanitizeSQL(h_style)]',
facial_style_name='[sanitizeSQL(f_style)]',
marking_style_name='[sanitizeSQL(m_style)]',
marking_styles='[sanitizeSQL(markingstyleslist)]',
head_accessory_style_name='[sanitizeSQL(ha_style)]',
alt_head_name='[sanitizeSQL(alt_head)]',
eyes_red='[r_eyes]',
eyes_green='[g_eyes]',
eyes_blue='[b_eyes]',
@@ -406,14 +431,17 @@
INSERT INTO [format_table_name("characters")] (ckey, slot, OOC_Notes, real_name, name_is_always_random, gender,
age, species, language,
hair_red, hair_green, hair_blue,
secondary_hair_red, secondary_hair_green, secondary_hair_blue,
facial_red, facial_green, facial_blue,
secondary_facial_red, secondary_facial_green, secondary_facial_blue,
skin_tone, skin_red, skin_green, skin_blue,
markings_red, markings_green, markings_blue,
marking_colours,
head_accessory_red, head_accessory_green, head_accessory_blue,
hair_style_name,
facial_style_name,
marking_style_name,
marking_styles,
head_accessory_style_name,
alt_head_name,
eyes_red, eyes_green, eyes_blue,
underwear, undershirt,
backbag, b_type, alternate_option,
@@ -433,14 +461,17 @@
('[C.ckey]', '[default_slot]', '[sanitizeSQL(metadata)]', '[sanitizeSQL(real_name)]', '[be_random_name]','[gender]',
'[age]', '[sanitizeSQL(species)]', '[sanitizeSQL(language)]',
'[r_hair]', '[g_hair]', '[b_hair]',
'[r_hair_sec]', '[g_hair_sec]', '[b_hair_sec]',
'[r_facial]', '[g_facial]', '[b_facial]',
'[r_facial_sec]', '[g_facial_sec]', '[b_facial_sec]',
'[s_tone]', '[r_skin]', '[g_skin]', '[b_skin]',
'[r_markings]', '[g_markings]', '[b_markings]',
'[sanitizeSQL(markingcolourslist)]',
'[r_headacc]', '[g_headacc]', '[b_headacc]',
'[sanitizeSQL(h_style)]',
'[sanitizeSQL(f_style)]',
'[sanitizeSQL(m_style)]',
'[sanitizeSQL(markingstyleslist)]',
'[sanitizeSQL(ha_style)]',
'[sanitizeSQL(alt_head)]',
'[r_eyes]', '[g_eyes]', '[b_eyes]',
'[underwear]', '[undershirt]',
'[backbag]', '[b_type]', '[alternate_option]',
+9 -5
View File
@@ -148,11 +148,15 @@
flags = GLASSESCOVERSEYES
slot_flags = SLOT_EYES
materials = list(MAT_GLASS = 250)
var/emagged = 0
var/vision_flags = 0
var/darkness_view = 0//Base human is 2
var/invisa_view = 0
var/darkness_view = 0 //Base human is 2
var/invis_view = SEE_INVISIBLE_LIVING
var/invis_override = 0
var/emagged = 0
var/color_view = null//overrides client.color while worn
var/prescription = 0
var/prescription_upgradable = 0
strip_delay = 20 // but seperated to allow items to protect but not impair vision, like space helmets
put_on_delay = 25
burn_state = FIRE_PROOF
@@ -275,8 +279,8 @@ BLIND // can't see anything
var/blockTracking // Do we block AI tracking?
var/HUDType = null
var/darkness_view = 0
var/helmet_goggles_invis_view = 0
var/vision_flags = 0
var/see_darkness = 1
var/can_toggle = null
//Mask
@@ -343,6 +347,7 @@ BLIND // can't see anything
src.loc = user
user.wear_mask = null
user.put_in_hands(src)
H.wear_mask_update(src, toggle_off = mask_adjusted)
usr.update_inv_wear_mask()
usr.update_inv_head()
for(var/X in actions)
@@ -707,4 +712,3 @@ BLIND // can't see anything
for(var/obj/item/clothing/accessory/A in accessories)
A.emp_act(severity)
..()
+12 -23
View File
@@ -1,16 +1,3 @@
/obj/item/clothing/glasses
name = "glasses"
icon = 'icons/obj/clothing/glasses.dmi'
//w_class = 2
//flags = GLASSESCOVERSEYES
//slot_flags = SLOT_EYES
//var/vision_flags = 0
//var/darkness_view = 0//Base human is 2
//var/invisa_view = 0
var/prescription = 0
var/prescription_upgradable = 0
var/see_darkness = 1
/obj/item/clothing/glasses/New()
. = ..()
if(prescription_upgradable && prescription)
@@ -50,8 +37,8 @@
item_state = "glasses"
origin_tech = "magnets=2;engineering=2"
vision_flags = SEE_TURFS
invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these
prescription_upgradable = 1
see_darkness = 0 //don't render darkness while wearing mesons
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi',
@@ -113,7 +100,7 @@
icon_state = "nvpurple"
item_state = "glasses"
darkness_view = 8
see_darkness = 0
invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these
/obj/item/clothing/glasses/janitor
name = "Janitorial Goggles"
@@ -132,7 +119,7 @@
item_state = "glasses"
origin_tech = "magnets=2"
darkness_view = 8
see_darkness = 0
invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi',
@@ -360,7 +347,9 @@
to_chat(usr, "You push the [src] up out of your face.")
flash_protect = 0
tint = 0
usr.update_inv_glasses()
var/mob/living/carbon/user = usr
user.update_inv_glasses()
user.update_tint()
for(var/X in actions)
var/datum/action/A = X
@@ -399,7 +388,6 @@
item_state = "glasses"
origin_tech = "magnets=3"
vision_flags = SEE_MOBS
invisa_view = 2
flash_protect = -1
species_fit = list("Vox")
sprite_sheets = list(
@@ -411,11 +399,12 @@
var/mob/living/carbon/human/M = src.loc
to_chat(M, "\red The Optical Thermal Scanner overloads and blinds you!")
if(M.glasses == src)
M.eye_blind = 3
M.eye_blurry = 5
M.disabilities |= NEARSIGHTED
spawn(100)
M.disabilities &= ~NEARSIGHTED
M.EyeBlind(3)
M.EyeBlurry(5)
if(!(M.disabilities & NEARSIGHTED))
M.BecomeNearsighted()
spawn(100)
M.CureNearsighted()
..()
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
+4 -5
View File
@@ -47,7 +47,7 @@
icon_state = "healthhudnight"
item_state = "glasses"
darkness_view = 8
see_darkness = 0
invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these
prescription_upgradable = 0
/obj/item/clothing/glasses/hud/diagnostic
@@ -66,7 +66,7 @@
icon_state = "diagnostichudnight"
item_state = "glasses"
darkness_view = 8
see_darkness = 0
invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these
prescription_upgradable = 0
/obj/item/clothing/glasses/hud/security
@@ -95,14 +95,13 @@
icon_state = "jensenshades"
item_state = "jensenshades"
vision_flags = SEE_MOBS
invisa_view = 2
/obj/item/clothing/glasses/hud/security/night
name = "\improper Night Vision Security HUD"
desc = "An advanced heads-up display which provides id data and vision in complete darkness."
icon_state = "securityhudnight"
darkness_view = 8
see_darkness = 0
invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these
prescription_upgradable = 0
/obj/item/clothing/glasses/hud/security/sunglasses
@@ -133,5 +132,5 @@
icon_state = "hydroponichudnight"
item_state = "glasses"
darkness_view = 8
see_darkness = 0
invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these
prescription_upgradable = 0
+1 -1
View File
@@ -63,7 +63,7 @@
name = "night-vision helmet"
desc = "A helmet with a built-in pair of night vision goggles."
icon_state = "helmetNVG"
see_darkness = 0
helmet_goggles_invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these
/obj/item/clothing/head/helmet/alt
name = "bulletproof helmet"
@@ -67,6 +67,8 @@
to_chat(usr, "You push the [src] up out of your face.")
flash_protect = 0
tint = 0
var/mob/living/carbon/C = usr
C.update_tint()
usr.update_inv_head() //so our mob-overlays update
for(var/X in actions)
+21
View File
@@ -0,0 +1,21 @@
/*
Donator Glasses Loadout for Patreon
*/
//Kamina shades
/obj/item/clothing/glasses/fluff/kamina
name = "Spiky Orange-tinted Shades"
desc = "Row row!"
icon_state = "gar"
item_state = "gar"
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
)
//Green Kamina shades
/obj/item/clothing/glasses/fluff/kamina/green
name = "Spiky Green-tinted Shades"
desc = "Fight the power!"
icon_state = "garm"
item_state = "garm"
+63
View File
@@ -0,0 +1,63 @@
/*
Donator Loadout for Patreon
*/
//mushroom hat
/obj/item/clothing/head/fluff/mushhat
name = "Mushroom Hat"
desc = "A horrifying display of Nanotrasen's ruthless pursuit in being the forefront of fashion. Or genocide."
icon_state = "mushhat"
item_state = "mushhat"
flags = BLOCKHAIR
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi'
)
//gold top hat and recolours
/obj/item/clothing/head/fluff/goldtophat
name = "Gold-trimmed Top Hat"
desc = "Poshness incarnate."
icon_state = "goldtophat"
item_state = "goldtophat"
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi'
)
/obj/item/clothing/head/fluff/goldtophat/blue
name = "Gold-trimmed Blue Top Hat"
desc = "Poshness incarnate. With blue."
icon_state = "goldtophatblue"
item_state = "goldtophatblue"
/obj/item/clothing/head/fluff/goldtophat/red
name = "Gold-trimmed Red Top Hat"
desc = "Poshness incarnate. With red."
icon_state = "goldtophatred"
item_state = "goldtophatred"
//medieval guard helm
/obj/item/clothing/head/fluff/guardhelm
name = "Plastic Guard helm"
desc = "A plastic re-creation of a medieval-era headwear worn by extremely bored recruits of the local army. Kintergarden only."
icon_state = "guardhelm"
item_state = "guardhelm"
flags = BLOCKHAIR
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi'
)
//black sombrero
/obj/item/clothing/head/fluff/blacksombrero
name = "Black sombrero"
desc = "A rare identifying hat of the infamous ancient renegade gang known as 'El Loco Pocos'"
icon_state = "blacksombrero"
item_state = "blacksombrero"
flags = BLOCKHAIR
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi'
)
@@ -48,7 +48,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
unacidable = 1
vision_flags = SEE_MOBS
see_darkness = 0
helmet_goggles_invis_view = SEE_INVISIBLE_MINIMUM //don't render darkness while wearing these
HUDType = MEDHUD
strip_delay = 130
+11 -8
View File
@@ -189,15 +189,11 @@
to_chat(H, "<span class='notice'>You deploy your hardsuit helmet, sealing you off from the world.</span>")
H.update_inv_head()
/obj/item/clothing/suit/space/rig/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/clothing/suit/space/rig/attackby(obj/item/W, mob/user, params)
if(!isliving(user))
return
if(istype(src.loc,/mob/living))
to_chat(user, "How do you propose to modify a hardsuit while it is being worn?")
return
if(istype(W,/obj/item/weapon/screwdriver))
if(istype(W,/obj/item/weapon/screwdriver) && can_modify(user))
if(!helmet)
to_chat(user, "\The [src] does not have a helmet installed.")
else
@@ -213,7 +209,7 @@
boots = null
return
else if(istype(W,/obj/item/clothing/head/helmet/space))
else if(istype(W,/obj/item/clothing/head/helmet/space) && can_modify(user))
if(!attached_helmet)
to_chat(user, "\The [src] does not have a helmet mount.")
return
@@ -226,7 +222,7 @@
src.helmet = W
return
else if(istype(W,/obj/item/clothing/shoes/magboots))
else if(istype(W,/obj/item/clothing/shoes/magboots) && can_modify(user))
if(!attached_boots)
to_chat(user, "\The [src] does not have boot mounts.")
return
@@ -242,6 +238,13 @@
return ..()
..()
/obj/item/clothing/suit/space/rig/proc/can_modify(mob/living/user)
if(isliving(loc))
to_chat(user, "<span class='info'>You can not modify the hardsuit while it is being worn.</span>")
return 0
return 1
//Engineering rig
/obj/item/clothing/head/helmet/space/rig/engineering
+10 -13
View File
@@ -504,11 +504,18 @@
cell.use(cost*10)
return 1
/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/nano_state = inventory_state)
/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state)
if(!user)
return
var/list/data = list()
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = state)
ui.open()
ui.set_auto_update(1)
/obj/item/weapon/rig/ui_data(mob/user, datum/topic_state/state = inventory_state)
var/data[0]
data["primarysystem"] = null
if(selected_module)
@@ -575,12 +582,7 @@
if(module_list.len)
data["modules"] = module_list
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
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()
ui.set_auto_update(1)
return data
/obj/item/weapon/rig/update_icon(var/update_mob_icon)
@@ -936,11 +938,6 @@
if(wearer.notransform || !wearer.canmove)
return
if(locate(/obj/effect/stop/, wearer.loc))
for(var/obj/effect/stop/S in wearer.loc)
if(S.victim == wearer)
return
if(!wearer.lastarea)
wearer.lastarea = get_area(wearer.loc)
+1 -1
View File
@@ -38,7 +38,7 @@
item_state = "apron"
blood_overlay_type = "armor"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/fertilizer,/obj/item/weapon/minihoe)
allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle/fertilizer,/obj/item/weapon/minihoe)
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
+3 -3
View File
@@ -32,7 +32,7 @@
continue
dat += {"
<td>
<center><a href='?src=\ref[src];[fileop]=\ref[F]'>
<center><a href='?src=[UID()];[fileop]=\ref[F]'>
<img src=\ref[F.image]><br>
<span>[F.name]</span>
</a></center>
@@ -60,7 +60,7 @@
continue
dat += {"
<td>
<a href='?src=\ref[src];[peripheralop]=\ref[C]'>
<a href='?src=[UID()];[peripheralop]=\ref[C]'>
[bicon(C)]<br>
<span>[C.name]</span>
</a>
@@ -73,7 +73,7 @@
/datum/file/program/ntos/proc/window(var/title,var/buttonbar,var/content)
return {"
<div class='filewin'>
<div class='titlebar'>[title] <a href='?src=\ref[src];winclose'><img src=\ref['icons/ntos/tb_close.png']></a></div>
<div class='titlebar'>[title] <a href='?src=[UID()];winclose'><img src=\ref['icons/ntos/tb_close.png']></a></div>
<div class='buttonbar'>[buttonbar]</div>
<div class='contentpane'>[content]</div>
</div>"}
+1 -1
View File
@@ -77,7 +77,7 @@
user.unset_machine()
return null
user.reset_view(S.current)
user.reset_perspective(S.current)
return 1
/*
@@ -26,28 +26,28 @@
if(!interactable())
return
var/dat = "<h3>Current Loaded Programs</h3>"
dat += "<A href='?src=\ref[src];emptycourt'>((Empty Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];boxingcourt'>((Boxing Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];basketball'>((Basketball Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];thunderdomecourt'>((Thunderdome Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];beach'>((Beach)</font>)</A><BR>"
// dat += "<A href='?src=\ref[src];turnoff'>((Shutdown System)</font>)</A><BR>"
dat += "<A href='?src=[UID()];emptycourt'>((Empty Court)</font>)</A><BR>"
dat += "<A href='?src=[UID()];boxingcourt'>((Boxing Court)</font>)</A><BR>"
dat += "<A href='?src=[UID()];basketball'>((Basketball Court)</font>)</A><BR>"
dat += "<A href='?src=[UID()];thunderdomecourt'>((Thunderdome Court)</font>)</A><BR>"
dat += "<A href='?src=[UID()];beach'>((Beach)</font>)</A><BR>"
// dat += "<A href='?src=[UID()];turnoff'>((Shutdown System)</font>)</A><BR>"
dat += "<span class='notice'>Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.</span><BR>"
if(emagged)
dat += "<A href='?src=\ref[src];burntest'>(<font color=red>Begin Atmospheric Burn Simulation</font>)</A><BR>"
dat += "<A href='?src=[UID()];burntest'>(<font color=red>Begin Atmospheric Burn Simulation</font>)</A><BR>"
dat += "Ensure the holodeck is empty before testing.<BR>"
dat += "<BR>"
dat += "<A href='?src=\ref[src];wildlifecarp'>(<font color=red>Begin Wildlife Simulation</font>)</A><BR>"
dat += "<A href='?src=[UID()];wildlifecarp'>(<font color=red>Begin Wildlife Simulation</font>)</A><BR>"
dat += "Ensure the holodeck is empty before testing.<BR>"
dat += "<BR>"
if(issilicon(usr))
dat += "<A href='?src=\ref[src];AIoverride'>(<font color=green>Re-Enable Safety Protocols?</font>)</A><BR>"
dat += "<A href='?src=[UID()];AIoverride'>(<font color=green>Re-Enable Safety Protocols?</font>)</A><BR>"
dat += "Safety Protocols are <font class='bad'>DISABLED</font><BR>"
else
if(issilicon(usr))
dat += "<A href='?src=\ref[src];AIoverride'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
dat += "<A href='?src=[UID()];AIoverride'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
dat += "<BR>"
dat += "Safety Protocols are <font class='good'>ENABLED</font><BR>"
+5 -5
View File
@@ -237,7 +237,7 @@
computer.update_icon()
for(var/mob/living/L in viewers(1))
if(!istype(L,/mob/living/silicon/ai) && L.machine == src)
L.reset_view(null)
L.reset_perspective(null)
Reset()
@@ -245,7 +245,7 @@
current = null
for(var/mob/living/L in viewers(1))
if(!istype(L,/mob/living/silicon/ai) && L.machine == src)
L.reset_view(null)
L.reset_perspective(null)
interact()
if(!interactable())
@@ -265,7 +265,7 @@
return
if(computer.camnet.verify_machine(current))
usr.reset_view(current)
usr.reset_perspective(current)
if(world.time - last_camera_refresh > 50 || !camera_list)
last_camera_refresh = world.time
@@ -302,13 +302,13 @@
var/obj/machinery/camera/C = locate(href_list["show"])
if(istype(C) && C.status)
current = C
usr.reset_view(C)
usr.reset_perspective(C)
interact()
return
if("keyselect" in href_list)
current = null
usr.reset_view(null)
usr.reset_perspective(null)
key = input(usr,"Select a camera network key:", "Key Select", null) as null|anything in computer.list_files(/datum/file/camnet_key)
camera_list = null
update_icon()
+8 -8
View File
@@ -36,8 +36,8 @@
jobs_all += "<table><tr><td></td><td><b>Command</b></td>"
jobs_all += "</tr><tr height='20'><td><b>Special</b></font></td>"//Captain in special because he is head of heads ~Intercross21
jobs_all += "<td weight='100'><a href='?src=\ref[src];;assign=Captain'>Captain</a></td>"
jobs_all += "<td weight='100'><a href='?src=\ref[src];;assign=Custom'>Custom</a></td>"
jobs_all += "<td weight='100'><a href='?src=[UID()];;assign=Captain'>Captain</a></td>"
jobs_all += "<td weight='100'><a href='?src=[UID()];;assign=Custom'>Custom</a></td>"
counter = 0
jobs_all += "</tr><tr><td><font color='#A50000'><b>Security</b></font></td>"//Red
@@ -46,7 +46,7 @@
if(counter >= 6)
jobs_all += "</tr><tr height='20'><td></td><td></td>"
counter = 0
jobs_all += "<td height='20' weight='100'><a href='?src=\ref[src];assign=[job]'>[replacetext(job, " ", "&nbsp")]</a></td>"
jobs_all += "<td height='20' weight='100'><a href='?src=[UID()];assign=[job]'>[replacetext(job, " ", "&nbsp")]</a></td>"
counter = 0
jobs_all += "</tr><tr><td><font color='#FFA500'><b>Engineering</b></font></td>"//Orange
@@ -55,7 +55,7 @@
if(counter >= 6)
jobs_all += "</tr><tr height='20'><td></td><td></td>"
counter = 0
jobs_all += "<td height='20' weight='100'><a href='?src=\ref[src];assign=[job]'>[replacetext(job, " ", "&nbsp")]</a></td>"
jobs_all += "<td height='20' weight='100'><a href='?src=[UID()];assign=[job]'>[replacetext(job, " ", "&nbsp")]</a></td>"
counter = 0
jobs_all += "</tr><tr height='20'><td><font color='#008000'><b>Medical</b></font></td>"//Green
@@ -64,7 +64,7 @@
if(counter >= 6)
jobs_all += "</tr><tr height='20'><td></td><td></td>"
counter = 0
jobs_all += "<td weight='100'><a href='?src=\ref[src];assign=[job]'>[replacetext(job, " ", "&nbsp")]</a></td>"
jobs_all += "<td weight='100'><a href='?src=[UID()];assign=[job]'>[replacetext(job, " ", "&nbsp")]</a></td>"
counter = 0
jobs_all += "</tr><tr height='20'><td><font color='#800080'><b>Science</b></font></td>"//Purple
@@ -73,7 +73,7 @@
if(counter >= 6)
jobs_all += "</tr><tr height='20'><td></td><td></td>"
counter = 0
jobs_all += "<td weight='100'><a href='?src=\ref[src];assign=[job]'>[replacetext(job, " ", "&nbsp")]</a></td>"
jobs_all += "<td weight='100'><a href='?src=[UID()];assign=[job]'>[replacetext(job, " ", "&nbsp")]</a></td>"
counter = 0
jobs_all += "</tr><tr height='20'><td><font color='#808080'><b>Support</b></font></td>"//Grey
@@ -82,7 +82,7 @@
if(counter >= 6)
jobs_all += "</tr><tr height='20'><td></td><td></td>"
counter = 0
jobs_all += "<td weight='100'><a href='?src=\ref[src];assign=[job]'>[replacetext(job, " ", "&nbsp")]</a></td>"
jobs_all += "<td weight='100'><a href='?src=[UID()];assign=[job]'>[replacetext(job, " ", "&nbsp")]</a></td>"
dat = {"<script type="text/javascript">
function markRed(){
@@ -145,7 +145,7 @@
// form for renaming the ID
dat += "<form name='cardcomp' action='byond://' method='get'>"
dat += "<input type='hidden' name='src' value='\ref[src]'>"
dat += "<input type='hidden' name='src' value='[UID()]'>"
dat += "<b>registered_name:</b> <input type='text' id='namefield' name='reg' value='[writer.registered_name]' style='width:250px; background-color:white;' onchange='markRed()'>"
dat += "<input type='submit' value='Rename' onclick='markGreen()'>"
dat += "</form>"
@@ -66,16 +66,21 @@
if("main" in href_list)
state = STATE_DEFAULT
if("login" in href_list)
var/mob/M = usr
var/obj/item/I = M.get_active_hand()
if(!ishuman(usr))
to_chat(usr, "<span class='warning'>Access denied.</span>")
return
var/mob/living/carbon/human/H = usr
var/obj/item/I = H.get_active_hand()
if(I)
I = I.GetID()
if(istype(I,/obj/item/weapon/card/id) && check_access(I))
authenticated = 1
if(access_captain in I.GetAccess())
authenticated = 2
crew_announcement.announcer = GetNameAndAssignmentFromId(I)
var/obj/item/weapon/card/id = H.get_idcard(TRUE)
if(istype(id))
crew_announcement.announcer = GetNameAndAssignmentFromId(id)
if("logout" in href_list)
authenticated = 0
crew_announcement.announcer = ""
@@ -289,26 +294,26 @@
else
refresh = 0
if(authenticated)
dat += "<BR>\[ <A HREF='?src=\ref[src];logout'>Log Out</A> \]"
dat += "<BR>\[ <A HREF='?src=[UID()];logout'>Log Out</A> \]"
if(authenticated==2)
dat += "<BR>\[ <A HREF='?src=\ref[src];announce'>Make An Announcement</A> \]"
dat += "<BR>\[ <A HREF='?src=[UID()];announce'>Make An Announcement</A> \]"
if(computer.emagged == 0)
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageCentcomm'>Send an emergency message to Centcomm</A> \]"
dat += "<BR>\[ <A HREF='?src=[UID()];MessageCentcomm'>Send an emergency message to Centcomm</A> \]"
else
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
dat += "<BR>\[ <A HREF='?src=\ref[src];RestoreBackup'>Restore Backup Routing Data</A> \]"
dat += "<BR>\[ <A HREF='?src=[UID()];MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
dat += "<BR>\[ <A HREF='?src=[UID()];RestoreBackup'>Restore Backup Routing Data</A> \]"
dat += "<BR>\[ <A HREF='?src=\ref[src];changeseclevel'>Change alert level</A> \]"
dat += "<BR>\[ <A HREF='?src=[UID()];changeseclevel'>Change alert level</A> \]"
/*if(emergency_shuttle.location())
if(emergency_shuttle.online())
dat += "<BR>\[ <A HREF='?src=\ref[src];cancelshuttle'>Cancel Shuttle Call</A> \]"
dat += "<BR>\[ <A HREF='?src=[UID()];cancelshuttle'>Cancel Shuttle Call</A> \]"
else
dat += "<BR>\[ <A HREF='?src=\ref[src];callshuttle'>Call Emergency Shuttle</A> \]"*/
dat += "<BR>\[ <A HREF='?src=[UID()];callshuttle'>Call Emergency Shuttle</A> \]"*/
dat += "<BR>\[ <A HREF='?src=\ref[src];status'>Set Status Display</A> \]"
dat += "<BR>\[ <A HREF='?src=[UID()];status'>Set Status Display</A> \]"
else
dat += "<BR>\[ <A HREF='?src=\ref[src];login'>Log In</A> \]"
dat += "<BR>\[ <A HREF='?src=\ref[src];messagelist'>Message List</A> \]"
dat += "<BR>\[ <A HREF='?src=[UID()];login'>Log In</A> \]"
dat += "<BR>\[ <A HREF='?src=[UID()];messagelist'>Message List</A> \]"
return dat
proc/confirm_menu(var/prompt,var/yes_option)
@@ -330,49 +335,49 @@
if(STATE_CANCELSHUTTLE)
dat = confirm_menu("cancel the shuttle","cancelshuttle2")
if(STATE_MESSAGELIST)
dat += "\[ <A HREF='?src=\ref[src];main'>Back</A> \]<BR>"
dat += "\[ <A HREF='?src=[UID()];main'>Back</A> \]<BR>"
dat += "Messages:"
for(var/i = 1; i<=messagetitle.len; i++)
dat += "<BR><A HREF='?src=\ref[src];viewmessage;message-num=[i]'>[messagetitle[i]]</A>"
dat += "<BR><A HREF='?src=[UID()];viewmessage;message-num=[i]'>[messagetitle[i]]</A>"
if(STATE_VIEWMESSAGE)
if(currmsg)
dat += "<B>[messagetitle[currmsg]]</B><BR><BR>[messagetext[currmsg]]"
if(authenticated)
dat += "<BR><BR>\[ <A HREF='?src=\ref[src];delmessage'>Delete \]"
dat += "<BR><BR>\[ <A HREF='?src=[UID()];delmessage'>Delete \]"
else
state = STATE_MESSAGELIST
interact()
return
if(STATE_DELMESSAGE)
if(currmsg)
dat += "Are you sure you want to delete this message? \[ <A HREF='?src=\ref[src];delmessage2'>OK</A> | <A HREF='?src=\ref[src];viewmessage'>Cancel</A> \]"
dat += "Are you sure you want to delete this message? \[ <A HREF='?src=[UID()];delmessage2'>OK</A> | <A HREF='?src=[UID()];viewmessage'>Cancel</A> \]"
else
state = STATE_MESSAGELIST
interact()
return
if(STATE_STATUSDISPLAY)
dat += "\[ <A HREF='?src=\ref[src];main'>Back</A> \]<BR>"
dat += "\[ <A HREF='?src=[UID()];main'>Back</A> \]<BR>"
dat += "Set Status Displays<BR>"
dat += "\[ <A HREF='?src=\ref[src];setstat;statdisp=blank'>Clear</A> \]<BR>"
dat += "\[ <A HREF='?src=\ref[src];setstat;statdisp=shuttle'>Shuttle ETA</A> \]<BR>"
dat += "\[ <A HREF='?src=\ref[src];setstat;statdisp=message'>Message</A> \]"
dat += "<ul><li> Line 1: <A HREF='?src=\ref[src];setmsg1'>[ stat_msg1 ? stat_msg1 : "(none)"]</A>"
dat += "<li> Line 2: <A HREF='?src=\ref[src];setmsg2'>[ stat_msg2 ? stat_msg2 : "(none)"]</A></ul><br>"
dat += "\[ Alert: <A HREF='?src=\ref[src];setstat;statdisp=alert;alert=default'>None</A> |"
dat += " <A HREF='?src=\ref[src];setstat;statdisp=alert;alert=redalert'>Red Alert</A> |"
dat += " <A HREF='?src=\ref[src];setstat;statdisp=alert;alert=lockdown'>Lockdown</A> |"
dat += " <A HREF='?src=\ref[src];setstat;statdisp=alert;alert=biohazard'>Biohazard</A> \]<BR><HR>"
dat += "\[ <A HREF='?src=[UID()];setstat;statdisp=blank'>Clear</A> \]<BR>"
dat += "\[ <A HREF='?src=[UID()];setstat;statdisp=shuttle'>Shuttle ETA</A> \]<BR>"
dat += "\[ <A HREF='?src=[UID()];setstat;statdisp=message'>Message</A> \]"
dat += "<ul><li> Line 1: <A HREF='?src=[UID()];setmsg1'>[ stat_msg1 ? stat_msg1 : "(none)"]</A>"
dat += "<li> Line 2: <A HREF='?src=[UID()];setmsg2'>[ stat_msg2 ? stat_msg2 : "(none)"]</A></ul><br>"
dat += "\[ Alert: <A HREF='?src=[UID()];setstat;statdisp=alert;alert=default'>None</A> |"
dat += " <A HREF='?src=[UID()];setstat;statdisp=alert;alert=redalert'>Red Alert</A> |"
dat += " <A HREF='?src=[UID()];setstat;statdisp=alert;alert=lockdown'>Lockdown</A> |"
dat += " <A HREF='?src=[UID()];setstat;statdisp=alert;alert=biohazard'>Biohazard</A> \]<BR><HR>"
if(STATE_ALERT_LEVEL)
dat += "Current alert level: [get_security_level()]<BR>"
if(security_level == SEC_LEVEL_DELTA)
dat += "<font color='red'><b>The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate.</b></font>"
else
dat += "<A HREF='?src=\ref[src];securitylevel;newalertlevel=[SEC_LEVEL_BLUE]'>Blue</A><BR>"
dat += "<A HREF='?src=\ref[src];securitylevel;newalertlevel=[SEC_LEVEL_GREEN]'>Green</A>"
dat += "<A HREF='?src=[UID()];securitylevel;newalertlevel=[SEC_LEVEL_BLUE]'>Blue</A><BR>"
dat += "<A HREF='?src=[UID()];securitylevel;newalertlevel=[SEC_LEVEL_GREEN]'>Green</A>"
if(STATE_CONFIRM_LEVEL)
dat += "Current alert level: [get_security_level()]<BR>"
dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)]<BR>"
dat += "<A HREF='?src=\ref[src];swipeidseclevel'>Swipe ID</A> to confirm change.<BR>"
dat += "<A HREF='?src=[UID()];swipeidseclevel'>Swipe ID</A> to confirm change.<BR>"
popup.set_content(dat)
popup.open()
+2 -2
View File
@@ -15,8 +15,8 @@
scan()
var/t = "<TT><B>Crew Monitoring</B><HR>"
t += "<BR><A href='?src=\ref[src];update=1'>Refresh</A> "
t += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
t += "<BR><A href='?src=[UID()];update=1'>Refresh</A> "
t += "<A href='?src=[UID()];close=1'>Close</A><BR>"
t += "<table><tr><td width='40%'>Name</td><td width='20%'>Vitals</td><td width='40%'>Position</td></tr>"
var/list/logs = list()
for(var/obj/item/clothing/under/C in src.tracked)
+34 -35
View File
@@ -45,7 +45,6 @@
if(!computer.cardslot)
computer.Crash(MISSING_PERIPHERAL)
return
usr.set_machine(src)
scan = computer.cardslot.reader
if(!interactable())
return
@@ -55,11 +54,11 @@
var/dat
if(temp)
dat = text("<TT>[src.temp]</TT><BR><BR><A href='?src=\ref[src];temp=1'>Clear Screen</A>")
dat = text("<TT>[src.temp]</TT><BR><BR><A href='?src=[UID()];temp=1'>Clear Screen</A>")
else
dat = text("Confirm Identity (R): <A href='?src=\ref[];cardr=1'>[]</A><HR>", src, (scan ? text("[]", scan.name) : "----------"))
dat = text("Confirm Identity (R): <A href='?src=[UID()];cardr=1'>[]</A><HR>", (scan ? text("[]", scan.name) : "----------"))
if(computer.cardslot.dualslot)
dat += text("Check Identity (W): <A href='?src=\ref[];cardw=1'>[]</A><BR>", src, (scan2 ? text("[]", scan2.name) : "----------"))
dat += text("Check Identity (W): <A href='?src=[UID()];cardw=1'>[]</A><BR>", (scan2 ? text("[]", scan2.name) : "----------"))
if(scan2 && !scan)
dat += text("<div class='notice'>Insert card into reader slot to log in.</div><br>")
@@ -67,50 +66,50 @@
switch(src.screen)
if(1.0)
dat += {"
<A href='?src=\ref[src];search=1'>Search Records</A>
<BR><A href='?src=\ref[src];screen=2'>List Records</A>
<A href='?src=[UID()];search=1'>Search Records</A>
<BR><A href='?src=[UID()];screen=2'>List Records</A>
<BR>
<BR><A href='?src=\ref[src];screen=5'>Virus Database</A>
<BR><A href='?src=\ref[src];screen=6'>Medbot Tracking</A>
<BR><A href='?src=[UID()];screen=5'>Virus Database</A>
<BR><A href='?src=[UID()];screen=6'>Medbot Tracking</A>
<BR>
<BR><A href='?src=\ref[src];screen=3'>Record Maintenance</A>
<BR><A href='?src=\ref[src];logout=1'>{Log Out}</A><BR>
<BR><A href='?src=[UID()];screen=3'>Record Maintenance</A>
<BR><A href='?src=[UID()];logout=1'>{Log Out}</A><BR>
"}
if(2.0)
dat += "<B>Record List</B>:<HR>"
if(!isnull(data_core.general))
for(var/datum/data/record/R in sortRecord(data_core.general))
dat += text("<A href='?src=\ref[];d_rec=\ref[]'>[]: []<BR>", src, R, R.fields["id"], R.fields["name"])
dat += text("<A href='?src=[UID()];d_rec=\ref[]'>[]: []<BR>", R, R.fields["id"], R.fields["name"])
//Foreach goto(132)
dat += text("<HR><A href='?src=\ref[];screen=1'>Back</A>", src)
dat += "<HR><A href='?src=[UID()];screen=1'>Back</A>"
if(3.0)
dat += text("<B>Records Maintenance</B><HR>\n<A href='?src=\ref[];back=1'>Backup To Disk</A><BR>\n<A href='?src=\ref[];u_load=1'>Upload From disk</A><BR>\n<A href='?src=\ref[];del_all=1'>Delete All Records</A><BR>\n<BR>\n<A href='?src=\ref[];screen=1'>Back</A>", src, src, src, src)
dat += "<B>Records Maintenance</B><HR>\n<A href='?src=[UID()];back=1'>Backup To Disk</A><BR>\n<A href='?src=[UID()];u_load=1'>Upload From disk</A><BR>\n<A href='?src=[UID()];del_all=1'>Delete All Records</A><BR>\n<BR>\n<A href='?src=[UID()];screen=1'>Back</A>"
if(4.0)
dat += "<CENTER><B>Medical Record</B></CENTER><BR>"
if((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
dat += "<table><tr><td>Name: [active1.fields["name"]] \
ID: [active1.fields["id"]]<BR>\n \
Sex: <A href='?src=\ref[src];field=sex'>[active1.fields["sex"]]</A><BR>\n \
Age: <A href='?src=\ref[src];field=age'>[active1.fields["age"]]</A><BR>\n \
Fingerprint: <A href='?src=\ref[src];field=fingerprint'>[active1.fields["fingerprint"]]</A><BR>\n \
Physical Status: <A href='?src=\ref[src];field=p_stat'>[active1.fields["p_stat"]]</A><BR>\n \
Mental Status: <A href='?src=\ref[src];field=m_stat'>[active1.fields["m_stat"]]</A><BR></td><td align = center valign = top> \
Sex: <A href='?src=[UID()];field=sex'>[active1.fields["sex"]]</A><BR>\n \
Age: <A href='?src=[UID()];field=age'>[active1.fields["age"]]</A><BR>\n \
Fingerprint: <A href='?src=[UID()];field=fingerprint'>[active1.fields["fingerprint"]]</A><BR>\n \
Physical Status: <A href='?src=[UID()];field=p_stat'>[active1.fields["p_stat"]]</A><BR>\n \
Mental Status: <A href='?src=[UID()];field=m_stat'>[active1.fields["m_stat"]]</A><BR></td><td align = center valign = top> \
Photo:<br><img src=[active1.fields["photo-south"]] height=64 width=64 border=5> \
<img src=[active1.fields["photo-west"]] height=64 width=64 border=5></td></tr></table>"
else
dat += "<B>General Record Lost!</B><BR>"
if((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
dat += text("<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: <A href='?src=\ref[];field=b_type'>[]</A><BR>\nDNA: <A href='?src=\ref[];field=b_dna'>[]</A><BR>\n<BR>\nMinor Disabilities: <A href='?src=\ref[];field=mi_dis'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=mi_dis_d'>[]</A><BR>\n<BR>\nMajor Disabilities: <A href='?src=\ref[];field=ma_dis'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=ma_dis_d'>[]</A><BR>\n<BR>\nAllergies: <A href='?src=\ref[];field=alg'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=alg_d'>[]</A><BR>\n<BR>\nCurrent Diseases: <A href='?src=\ref[];field=cdi'>[]</A> (per disease info placed in log/comment section)<BR>\nDetails: <A href='?src=\ref[];field=cdi_d'>[]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=\ref[];field=notes'>[]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src, src.active2.fields["b_type"], src, src.active2.fields["b_dna"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, decode(src.active2.fields["notes"]))
dat += text("<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: <A href='?src=[UID()];field=b_type'>[]</A><BR>\nDNA: <A href='?src=[UID()];field=b_dna'>[]</A><BR>\n<BR>\nMinor Disabilities: <A href='?src=[UID()];field=mi_dis'>[]</A><BR>\nDetails: <A href='?src=[UID()];field=mi_dis_d'>[]</A><BR>\n<BR>\nMajor Disabilities: <A href='?src=[UID()];field=ma_dis'>[]</A><BR>\nDetails: <A href='?src=[UID()];field=ma_dis_d'>[]</A><BR>\n<BR>\nAllergies: <A href='?src=[UID()];field=alg'>[]</A><BR>\nDetails: <A href='?src=[UID()];field=alg_d'>[]</A><BR>\n<BR>\nCurrent Diseases: <A href='?src=[UID()];field=cdi'>[]</A> (per disease info placed in log/comment section)<BR>\nDetails: <A href='?src=[UID()];field=cdi_d'>[]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=[UID()];field=notes'>[]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src.active2.fields["b_type"], src.active2.fields["b_dna"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], decode(src.active2.fields["notes"]))
var/counter = 1
while(src.active2.fields[text("com_[]", counter)])
dat += text("[]<BR><A href='?src=\ref[];del_c=[]'>Delete Entry</A><BR><BR>", src.active2.fields[text("com_[]", counter)], src, counter)
dat += text("[]<BR><A href='?src=[UID()];del_c=[]'>Delete Entry</A><BR><BR>", src.active2.fields[text("com_[]", counter)], counter)
counter++
dat += text("<A href='?src=\ref[];add_c=1'>Add Entry</A><BR><BR>", src)
dat += text("<A href='?src=\ref[];del_r=1'>Delete Record (Medical Only)</A><BR><BR>", src)
dat += "<A href='?src=[UID()];add_c=1'>Add Entry</A><BR><BR>"
dat += "<A href='?src=[UID()];del_r=1'>Delete Record (Medical Only)</A><BR><BR>"
else
dat += "<B>Medical Record Lost!</B><BR>"
dat += text("<A href='?src=\ref[src];new=1'>New Record</A><BR><BR>")
dat += text("\n<A href='?src=\ref[];print_p=1'>Print Record</A><BR>\n<A href='?src=\ref[];screen=2'>Back</A><BR>", src, src)
dat += text("<A href='?src=[UID()];new=1'>New Record</A><BR><BR>")
dat += "\n<A href='?src=[UID()];print_p=1'>Print Record</A><BR>\n<A href='?src=[UID()];screen=2'>Back</A><BR>"
if(5.0)
dat += "<CENTER><B>Virus Database</B></CENTER>"
for(var/Dt in typesof(/datum/disease/))
@@ -119,11 +118,11 @@
continue // TODO (tm): Add advance diseases to the virus database which no one uses.
if(!Dis.desc)
continue
dat += "<br><a href='?src=\ref[src];vir=[Dt]'>[Dis.name]</a>"
dat += "<br><a href='?src=\ref[src];screen=1'>Back</a>"
dat += "<br><a href='?src=[UID()];vir=[Dt]'>[Dis.name]</a>"
dat += "<br><a href='?src=[UID()];screen=1'>Back</a>"
if(6.0)
dat += "<center><b>Medical Robot Monitor</b></center>"
dat += "<a href='?src=\ref[src];screen=1'>Back</a>"
dat += "<a href='?src=[UID()];screen=1'>Back</a>"
dat += "<br><b>Medical Robots:</b>"
var/bdat = null
for(var/mob/living/simple_animal/bot/medbot/M in world)
@@ -143,7 +142,7 @@
else
else
dat += text("<A href='?src=\ref[];login=1'>{Log In}</A>", src)
dat += "<A href='?src=[UID()];login=1'>{Log In}</A>"
popup.width = 600
popup.height = 400
popup.set_content(dat)
@@ -233,13 +232,13 @@
if(href_list["vir"])
var/datum/data/record/v = locate(href_list["vir"])
src.temp = "<center>GNAv2 based virus lifeform V-[v.fields["id"]]</center>"
src.temp += "<br><b>Name:</b> <A href='?src=\ref[src];field=vir_name;edit_vir=\ref[v]'>[v.fields["name"]]</A>"
src.temp += "<br><b>Name:</b> <A href='?src=[UID()];field=vir_name;edit_vir=\ref[v]'>[v.fields["name"]]</A>"
src.temp += "<br><b>Antigen:</b> [v.fields["antigen"]]"
src.temp += "<br><b>Spread:</b> [v.fields["spread type"]] "
src.temp += "<br><b>Details:</b><br> <A href='?src=\ref[src];field=vir_desc;edit_vir=\ref[v]'>[v.fields["description"]]</A>"
src.temp += "<br><b>Details:</b><br> <A href='?src=[UID()];field=vir_desc;edit_vir=\ref[v]'>[v.fields["description"]]</A>"
if(href_list["del_all"])
src.temp = text("Are you sure you wish to delete all records?<br>\n\t<A href='?src=\ref[];temp=1;del_all2=1'>Yes</A><br>\n\t<A href='?src=\ref[];temp=1'>No</A><br>", src, src)
src.temp = "Are you sure you wish to delete all records?<br>\n\t<A href='?src=[UID()];temp=1;del_all2=1'>Yes</A><br>\n\t<A href='?src=[UID()];temp=1'>No</A><br>"
if(href_list["del_all2"])
for(var/datum/data/record/R in data_core.medical)
@@ -326,13 +325,13 @@
src.active2.fields["notes"] = t1
if("p_stat")
if(istype(src.active1, /datum/data/record))
src.temp = text("<B>Physical Condition:</B><BR>\n\t<A href='?src=\ref[];temp=1;p_stat=deceased'>*Deceased*</A><BR>\n\t<A href='?src=\ref[];temp=1;p_stat=ssd'>*SSD*</A><BR>\n\t<A href='?src=\ref[];temp=1;p_stat=active'>Active</A><BR>\n\t<A href='?src=\ref[];temp=1;p_stat=unfit'>Physically Unfit</A><BR>\n\t<A href='?src=\ref[];temp=1;p_stat=disabled'>Disabled</A><BR>", src, src, src, src, src)
src.temp = "<B>Physical Condition:</B><BR>\n\t<A href='?src=[UID()];temp=1;p_stat=deceased'>*Deceased*</A><BR>\n\t<A href='?src=[UID()];temp=1;p_stat=ssd'>*SSD*</A><BR>\n\t<A href='?src=[UID()];temp=1;p_stat=active'>Active</A><BR>\n\t<A href='?src=[UID()];temp=1;p_stat=unfit'>Physically Unfit</A><BR>\n\t<A href='?src=[UID()];temp=1;p_stat=disabled'>Disabled</A><BR>"
if("m_stat")
if(istype(src.active1, /datum/data/record))
src.temp = text("<B>Mental Condition:</B><BR>\n\t<A href='?src=\ref[];temp=1;m_stat=insane'>*Insane*</A><BR>\n\t<A href='?src=\ref[];temp=1;m_stat=unstable'>*Unstable*</A><BR>\n\t<A href='?src=\ref[];temp=1;m_stat=watch'>*Watch*</A><BR>\n\t<A href='?src=\ref[];temp=1;m_stat=stable'>Stable</A><BR>", src, src, src, src)
src.temp = "<B>Mental Condition:</B><BR>\n\t<A href='?src=[UID()];temp=1;m_stat=insane'>*Insane*</A><BR>\n\t<A href='?src=[UID()];temp=1;m_stat=unstable'>*Unstable*</A><BR>\n\t<A href='?src=[UID()];temp=1;m_stat=watch'>*Watch*</A><BR>\n\t<A href='?src=[UID()];temp=1;m_stat=stable'>Stable</A><BR>"
if("b_type")
if(istype(src.active2, /datum/data/record))
src.temp = text("<B>Blood Type:</B><BR>\n\t<A href='?src=\ref[];temp=1;b_type=an'>A-</A> <A href='?src=\ref[];temp=1;b_type=ap'>A+</A><BR>\n\t<A href='?src=\ref[];temp=1;b_type=bn'>B-</A> <A href='?src=\ref[];temp=1;b_type=bp'>B+</A><BR>\n\t<A href='?src=\ref[];temp=1;b_type=abn'>AB-</A> <A href='?src=\ref[];temp=1;b_type=abp'>AB+</A><BR>\n\t<A href='?src=\ref[];temp=1;b_type=on'>O-</A> <A href='?src=\ref[];temp=1;b_type=op'>O+</A><BR>", src, src, src, src, src, src, src, src)
src.temp = "<B>Blood Type:</B><BR>\n\t<A href='?src=[UID()];temp=1;b_type=an'>A-</A> <A href='?src=[UID()];temp=1;b_type=ap'>A+</A><BR>\n\t<A href='?src=[UID()];temp=1;b_type=bn'>B-</A> <A href='?src=[UID()];temp=1;b_type=bp'>B+</A><BR>\n\t<A href='?src=[UID()];temp=1;b_type=abn'>AB-</A> <A href='?src=[UID()];temp=1;b_type=abp'>AB+</A><BR>\n\t<A href='?src=[UID()];temp=1;b_type=on'>O-</A> <A href='?src=[UID()];temp=1;b_type=op'>O+</A><BR>"
if("b_dna")
if(istype(src.active1, /datum/data/record))
var/t1 = sanitize(copytext(input("Please input DNA hash:", "Med. records", src.active1.fields["dna"], null) as text,1,MAX_MESSAGE_LEN))
@@ -405,7 +404,7 @@
if(href_list["del_r"])
if(src.active2)
src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?<br>\n\t<A href='?src=\ref[];temp=1;del_r2=1'>Yes</A><br>\n\t<A href='?src=\ref[];temp=1'>No</A><br>", src, src)
src.temp = "Are you sure you wish to delete the record (Medical Portion Only)?<br>\n\t<A href='?src=[UID()];temp=1;del_r2=1'>Yes</A><br>\n\t<A href='?src=[UID()];temp=1'>No</A><br>"
if(href_list["del_r2"])
if(src.active2)
+26 -26
View File
@@ -63,10 +63,10 @@
dat += "<center><h4><font color='blue'[message]</h5></center>"
if(auth)
dat += "<h4><dd><A href='?src=\ref[src];auth=1'>&#09;<font color='green'>\[Authenticated\]</font></a>&#09;/"
dat += " Server Power: <A href='?src=\ref[src];active=1'>[src.linkedServer && src.linkedServer.active ? "<font color='green'>\[On\]</font>":"<font color='red'>\[Off\]</font>"]</a></h4>"
dat += "<h4><dd><A href='?src=[UID()];auth=1'>&#09;<font color='green'>\[Authenticated\]</font></a>&#09;/"
dat += " Server Power: <A href='?src=[UID()];active=1'>[src.linkedServer && src.linkedServer.active ? "<font color='green'>\[On\]</font>":"<font color='red'>\[Off\]</font>"]</a></h4>"
else
dat += "<h4><dd><A href='?src=\ref[src];auth=1'>&#09;<font color='red'>\[Unauthenticated\]</font></a>&#09;/"
dat += "<h4><dd><A href='?src=[UID()];auth=1'>&#09;<font color='red'>\[Unauthenticated\]</font></a>&#09;/"
dat += " Server Power: <u>[src.linkedServer && src.linkedServer.active ? "<font color='green'>\[On\]</font>":"<font color='red'>\[Off\]</font>"]</u></h4>"
if(hacking || emag)
@@ -80,23 +80,23 @@
if(0)
//&#09; = TAB
var/i = 0
dat += "<dd><A href='?src=\ref[src];find=1'>&#09;[++i]. Link To A Server</a></dd>"
dat += "<dd><A href='?src=[UID()];find=1'>&#09;[++i]. Link To A Server</a></dd>"
if(auth)
if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN)))
dat += "<dd><A>&#09;ERROR: Server not found!</A><br></dd>"
else
dat += "<dd><A href='?src=\ref[src];view=1'>&#09;[++i]. View Message Logs </a><br></dd>"
dat += "<dd><A href='?src=\ref[src];viewr=1'>&#09;[++i]. View Request Console Logs </a></br></dd>"
dat += "<dd><A href='?src=\ref[src];clear=1'>&#09;[++i]. Clear Message Logs</a><br></dd>"
dat += "<dd><A href='?src=\ref[src];clearr=1'>&#09;[++i]. Clear Request Console Logs</a><br></dd>"
dat += "<dd><A href='?src=\ref[src];pass=1'>&#09;[++i]. Set Custom Key</a><br></dd>"
dat += "<dd><A href='?src=\ref[src];msg=1'>&#09;[++i]. Send Admin Message</a><br></dd>"
dat += "<dd><A href='?src=[UID()];view=1'>&#09;[++i]. View Message Logs </a><br></dd>"
dat += "<dd><A href='?src=[UID()];viewr=1'>&#09;[++i]. View Request Console Logs </a></br></dd>"
dat += "<dd><A href='?src=[UID()];clear=1'>&#09;[++i]. Clear Message Logs</a><br></dd>"
dat += "<dd><A href='?src=[UID()];clearr=1'>&#09;[++i]. Clear Request Console Logs</a><br></dd>"
dat += "<dd><A href='?src=[UID()];pass=1'>&#09;[++i]. Set Custom Key</a><br></dd>"
dat += "<dd><A href='?src=[UID()];msg=1'>&#09;[++i]. Send Admin Message</a><br></dd>"
else
for(var/n = ++i; n <= optioncount; n++)
dat += "<dd><font color='blue'>&#09;[n]. ---------------</font><br></dd>"
if((istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) && (usr.mind.special_role && usr.mind.original == usr))
//Malf/Traitor AIs can bruteforce into the system to gain the Key.
dat += "<dd><A href='?src=\ref[src];hack=1'><i><font color='Red'>*&@#. Bruteforce Key</font></i></font></a><br></dd>"
dat += "<dd><A href='?src=[UID()];hack=1'><i><font color='Red'>*&@#. Bruteforce Key</font></i></font></a><br></dd>"
else
dat += "<br>"
@@ -104,7 +104,7 @@
if(!auth)
dat += "<br><hr><dd><span class='notice'>Please authenticate with the server in order to show additional options.</span>"
else
dat += "<br><hr><dd><span class='warning'>Reg, #514 forbids sending messages to a Head of Staff containing Erotic Rendering Properties.</span>"
dat += "<br><hr><dd><span class='warning'>Reg, #514 forbids sending messages containing Erotic Rendering Properties.</span>"
//Message Logs
if(1)
@@ -112,7 +112,7 @@
//var/recipient = "Unspecified" //name of the person
//var/sender = "Unspecified" //name of the sender
//var/message = "Blank" //transferred message
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];refresh=1'>Refresh</center><hr>"
dat += "<center><A href='?src=[UID()];back=1'>Back</a> - <A href='?src=[UID()];refresh=1'>Refresh</center><hr>"
dat += "<table border='1' width='100%'><tr><th width = '5%'>X</th><th width='15%'>Sender</th><th width='15%'>Recipient</th><th width='300px' word-wrap: break-word>Message</th></tr>"
for(var/datum/data_pda_msg/pda in src.linkedServer.pda_msgs)
index++
@@ -120,7 +120,7 @@
break
// Del - Sender - Recepient - Message
// X - Al Green - Your Mom - WHAT UP!?
dat += "<tr><td width = '5%'><center><A href='?src=\ref[src];delete=\ref[pda]' style='color: rgb(255,0,0)'>X</a></center></td><td width='15%'>[pda.sender]</td><td width='15%'>[pda.recipient]</td><td width='300px'>[pda.message]</td></tr>"
dat += "<tr><td width = '5%'><center><A href='?src=[UID()];delete=\ref[pda]' style='color: rgb(255,0,0)'>X</a></center></td><td width='15%'>[pda.sender]</td><td width='15%'>[pda.recipient]</td><td width='300px'>[pda.message]</td></tr>"
dat += "</table>"
//Hacking screen.
if(2)
@@ -167,13 +167,13 @@
//Fake messages
if(3)
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];Reset=1'>Reset</a></center><hr>"
dat += "<center><A href='?src=[UID()];back=1'>Back</a> - <A href='?src=[UID()];Reset=1'>Reset</a></center><hr>"
dat += {"<table border='1' width='100%'>
<tr><td width='20%'><A href='?src=\ref[src];select=Sender'>Sender</a></td>
<td width='20%'><A href='?src=\ref[src];select=RecJob'>Sender's Job</a></td>
<td width='20%'><A href='?src=\ref[src];select=Recepient'>Recipient</a></td>
<td width='300px' word-wrap: break-word><A href='?src=\ref[src];select=Message'>Message</a></td></tr>"}
<tr><td width='20%'><A href='?src=[UID()];select=Sender'>Sender</a></td>
<td width='20%'><A href='?src=[UID()];select=RecJob'>Sender's Job</a></td>
<td width='20%'><A href='?src=[UID()];select=Recepient'>Recipient</a></td>
<td width='300px' word-wrap: break-word><A href='?src=[UID()];select=Message'>Message</a></td></tr>"}
//Sender - Sender's Job - Recepient - Message
//Al Green- Your Dad - Your Mom - WHAT UP!?
@@ -181,7 +181,7 @@
<td width='20%'>[customjob]</td>
<td width='20%'>[customrecepient ? customrecepient.owner : "NONE"]</td>
<td width='300px'>[custommessage]</td></tr>"}
dat += "</table><br><center><A href='?src=\ref[src];select=Send'>Send</a>"
dat += "</table><br><center><A href='?src=[UID()];select=Send'>Send</a>"
//Request Console Logs
if(4)
@@ -196,7 +196,7 @@
var/id_auth = "Unauthenticated" - 15%
var/priority = "Normal" - 10%
*/
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];refresh=1'>Refresh</center><hr>"
dat += "<center><A href='?src=[UID()];back=1'>Back</a> - <A href='?src=[UID()];refresh=1'>Refresh</center><hr>"
dat += {"<table border='1' width='100%'><tr><th width = '5%'>X</th><th width='15%'>Sending Dep.</th><th width='15%'>Receiving Dep.</th>
<th width='300px' word-wrap: break-word>Message</th><th width='15%'>Stamp</th><th width='15%'>ID Auth.</th><th width='15%'>Priority.</th></tr>"}
for(var/datum/data_rc_msg/rc in src.linkedServer.rc_msgs)
@@ -205,7 +205,7 @@
break
// Del - Sender - Recepient - Message
// X - Al Green - Your Mom - WHAT UP!?
dat += {"<tr><td width = '5%'><center><A href='?src=\ref[src];deleter=\ref[rc]' style='color: rgb(255,0,0)'>X</a></center></td><td width='15%'>[rc.send_dpt]</td>
dat += {"<tr><td width = '5%'><center><A href='?src=[UID()];deleter=\ref[rc]' style='color: rgb(255,0,0)'>X</a></center></td><td width='15%'>[rc.send_dpt]</td>
<td width='15%'>[rc.rec_dpt]</td><td width='300px'>[rc.message]</td><td width='15%'>[rc.stamp]</td><td width='15%'>[rc.id_auth]</td><td width='15%'>[rc.priority]</td></tr>"}
dat += "</table>"
@@ -407,14 +407,14 @@
//Sender isn't faking as someone who exists
if(isnull(PDARec))
src.linkedServer.send_pda_message("[customrecepient.owner]", "[customsender]","[custommessage]")
customrecepient.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[customrecepient];choice=Message;target=\ref[src]'>[customsender]</a> ([customjob]):</b></i><br>[custommessage]<br>"
customrecepient.tnote += "<i><b>&larr; From <a href='byond://?src=[customrecepient.UID()];choice=Message;target=\ref[src]'>[customsender]</a> ([customjob]):</b></i><br>[custommessage]<br>"
if(!customrecepient.silent)
playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1)
for(var/mob/O in hearers(3, customrecepient.loc))
O.show_message(text("[bicon(customrecepient)] *[customrecepient.ttone]*"))
if( customrecepient.loc && ishuman(customrecepient.loc) )
var/mob/living/carbon/human/H = customrecepient.loc
to_chat(H, "[bicon(customrecepient)] <b>Message from [customsender] ([customjob]), </b>\"[custommessage]\" (<a href='byond:)//?src=\ref[src];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
to_chat(H, "[bicon(customrecepient)] <b>Message from [customsender] ([customjob]), </b>\"[custommessage]\" (<a href='byond:)//?src=[UID()];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
log_pda("[usr] (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]")
customrecepient.overlays.Cut()
@@ -422,14 +422,14 @@
//Sender is faking as someone who exists
else
src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]")
customrecepient.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[customrecepient];choice=Message;target=\ref[PDARec]'>[PDARec.owner]</a> ([customjob]):</b></i><br>[custommessage]<br>"
customrecepient.tnote += "<i><b>&larr; From <a href='byond://?src=[customrecepient.UID()];choice=Message;target=\ref[PDARec]'>[PDARec.owner]</a> ([customjob]):</b></i><br>[custommessage]<br>"
if(!customrecepient.silent)
playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1)
for(var/mob/O in hearers(3, customrecepient.loc))
O.show_message(text("[bicon(customrecepient)] *[customrecepient.ttone]*"))
if( customrecepient.loc && ishuman(customrecepient.loc) )
var/mob/living/carbon/human/H = customrecepient.loc
to_chat(H, "[bicon(customrecepient)] <b>Message from [PDARec.owner] ([customjob]), </b>\"[custommessage]\" (<a href='byond:)//?src=\ref[customrecepient];choice=Message;skiprefresh=1;target=\ref[PDARec]'>Reply</a>)"
to_chat(H, "[bicon(customrecepient)] <b>Message from [PDARec.owner] ([customjob]), </b>\"[custommessage]\" (<a href='byond:)//?src=[customrecepient.UID()];choice=Message;skiprefresh=1;target=\ref[PDARec]'>Reply</a>)"
log_pda("[usr] (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]")
customrecepient.overlays.Cut()
+1 -1
View File
@@ -22,7 +22,7 @@
return
var/list/L = computer.net.get_machines(/obj/machinery/power/apc)
var/t = ""
t += "<A href='?src=\ref[src]'>Refresh</A><br /><br />"
t += "<A href='?src=[UID()]'>Refresh</A><br /><br />"
if(!L || !L.len)
t += "No connection"
else
+6 -6
View File
@@ -23,7 +23,7 @@
var/dat
dat += "<B>Prisoner Implant Manager System</B><BR>"
if(screen == 0)
dat += "<HR><A href='?src=\ref[src];lock=1'>Unlock Console</A>"
dat += "<HR><A href='?src=[UID()];lock=1'>Unlock Console</A>"
else if(screen == 1)
dat += "<HR>Chemical Implants<BR>"
var/turf/Tr = null
@@ -32,9 +32,9 @@
if((Tr) && (Tr.z != computer.z)) continue//Out of range
if(!C.implanted) continue
dat += "[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: "
dat += "<A href='?src=\ref[src];inject1=\ref[C]'>(<font color=red>(1)</font>)</A>"
dat += "<A href='?src=\ref[src];inject5=\ref[C]'>(<font color=red>(5)</font>)</A>"
dat += "<A href='?src=\ref[src];inject10=\ref[C]'>(<font color=red>(10)</font>)</A><BR>"
dat += "<A href='?src=[UID()];inject1=\ref[C]'>(<font color=red>(1)</font>)</A>"
dat += "<A href='?src=[UID()];inject5=\ref[C]'>(<font color=red>(5)</font>)</A>"
dat += "<A href='?src=[UID()];inject10=\ref[C]'>(<font color=red>(10)</font>)</A><BR>"
dat += "********************************<BR>"
dat += "<HR>Tracking Implants<BR>"
for(var/obj/item/weapon/implant/tracking/T in world)
@@ -47,9 +47,9 @@
var/turf/mob_loc = get_turf(M)
loc_display = mob_loc.loc
dat += "ID: [T.id] | Location: [loc_display]<BR>"
dat += "<A href='?src=\ref[src];warn=\ref[T]'>(<i>Send Message</i></font>)</A> |<BR>"
dat += "<A href='?src=[UID()];warn=\ref[T]'>(<i>Send Message</i></font>)</A> |<BR>"
dat += "********************************<BR>"
dat += "<HR><A href='?src=\ref[src];lock=1'>Lock Console</A>"
dat += "<HR><A href='?src=[UID()];lock=1'>Lock Console</A>"
popup.width = 400
popup.height = 500
+17 -17
View File
@@ -35,12 +35,12 @@
return
var/dat
if(src.temp)
dat = "<TT>[src.temp]</TT><BR><BR><A href='?src=\ref[src];temp=1'>Clear Screen</A>"
dat = "<TT>[src.temp]</TT><BR><BR><A href='?src=[UID()];temp=1'>Clear Screen</A>"
else
if(screen == 0)
//dat += "<h3>Cyborg Control Console</h3><BR>"
dat += "<A href='?src=\ref[src];screen=1'>1. Cyborg Status</A><BR>"
dat += "<A href='?src=\ref[src];screen=2'>2. Emergency Full Destruct</A><BR>"
dat += "<A href='?src=[UID()];screen=1'>1. Cyborg Status</A><BR>"
dat += "<A href='?src=[UID()];screen=2'>2. Emergency Full Destruct</A><BR>"
if(screen == 1)
for(var/mob/living/silicon/robot/R in mob_list)
if(istype(usr, /mob/living/silicon/ai))
@@ -74,28 +74,28 @@
dat += " Independent from AI |"
if(istype(usr, /mob/living/silicon))
if(issilicon(usr) && is_special_character(usr) && !R.emagged)
dat += "<A href='?src=\ref[src];magbot=\ref[R]'>(<i>Hack</i>)</A> "
dat += "<A href='?src=\ref[src];stopbot=\ref[R]'>(<i>[R.canmove ? "Lockdown" : "Release"]</i>)</A> "
dat += "<A href='?src=\ref[src];killbot=\ref[R]'>(<i>Destroy</i>)</A>"
dat += "<A href='?src=[UID()];magbot=\ref[R]'>(<i>Hack</i>)</A> "
dat += "<A href='?src=[UID()];stopbot=\ref[R]'>(<i>[R.canmove ? "Lockdown" : "Release"]</i>)</A> "
dat += "<A href='?src=[UID()];killbot=\ref[R]'>(<i>Destroy</i>)</A>"
dat += "<BR>"
dat += "<A href='?src=\ref[src];screen=0'>(Return to Main Menu)</A><BR>"
dat += "<A href='?src=[UID()];screen=0'>(Return to Main Menu)</A><BR>"
if(screen == 2)
if(!src.status)
dat += {"<BR><B>Emergency Robot Self-Destruct</B><HR>\nStatus: Off<BR>
\n<BR>
\nCountdown: [src.timeleft]/60 <A href='?src=\ref[src];reset=1'>\[Reset\]</A><BR>
\nCountdown: [src.timeleft]/60 <A href='?src=[UID()];reset=1'>\[Reset\]</A><BR>
\n<BR>
\n<A href='?src=\ref[src];killall'>Start Sequence</A><BR>
\n<A href='?src=[UID()];killall'>Start Sequence</A><BR>
\n<BR>
\n<A href='?src=\ref[usr];close'>Close</A>"}
\n<A href='?src=[usr.UID()];close'>Close</A>"}
else
dat = {"<B>Emergency Robot Self-Destruct</B><HR>\nStatus: Activated<BR>
\n<BR>
\nCountdown: [src.timeleft]/60 \[Reset\]<BR>
\n<BR>\n<A href='?src=\ref[src];stop=1'>Stop Sequence</A><BR>
\n<BR>\n<A href='?src=[UID()];stop=1'>Stop Sequence</A><BR>
\n<BR>
\n<A href='?src=\ref[usr];mach_close=computer'>Close</A>"}
dat += "<A href='?src=\ref[src];screen=0'>(Return to Main Menu)</A><BR>"
\n<A href='?src=[usr.UID()];mach_close=computer'>Close</A>"}
dat += "<A href='?src=[UID()];screen=0'>(Return to Main Menu)</A><BR>"
popup.set_content(dat)
popup.open()
@@ -107,8 +107,8 @@
if("killall" in href_list)
src.temp = {"Destroy Robots?<BR>
<BR><B><A href='?src=\ref[src];do_killall'>\[Swipe ID to initiate destruction sequence\]</A></B><BR>
<A href='?src=\ref[src];temp=1'>Cancel</A>"}
<BR><B><A href='?src=[UID()];do_killall'>\[Swipe ID to initiate destruction sequence\]</A></B><BR>
<A href='?src=[UID()];temp=1'>Cancel</A>"}
if("do_killall" in href_list)
var/obj/item/weapon/card/id/I = usr.get_active_hand()
@@ -130,8 +130,8 @@
if("stop" in href_list)
src.temp = {"
Stop Robot Destruction Sequence?<BR>
<BR><A href='?src=\ref[src];stop2=1'>Yes</A><BR>
<A href='?src=\ref[src];temp=1'>No</A>"}
<BR><A href='?src=[UID()];stop2=1'>Yes</A><BR>
<A href='?src=[UID()];temp=1'>No</A>"}
if("stop2" in href_list)
src.stop = 1
+40 -40
View File
@@ -1118,13 +1118,13 @@
if("mainmenu")
temp_html += "<h3>Main Menu</h3>"
if(viable_occupant) //is there REALLY someone in there who can be modified?
temp_html += text("<A href='?src=\ref[];screen=unimenu'>Modify Unique Identifier</A><br />", src)
temp_html += text("<A href='?src=\ref[];screen=strucmenu'>Modify Structural Enzymes</A><br /><br />", src)
temp_html += "<A href='?src=[UID()];screen=unimenu'>Modify Unique Identifier</A><br />"
temp_html += "<A href='?src=[UID()];screen=strucmenu'>Modify Structural Enzymes</A><br /><br />"
else
temp_html += "<span class='linkOff'>Modify Unique Identifier</span><br />"
temp_html += "<span class='linkOff'>Modify Structural Enzymes</span><br /><br />"
temp_html += text("<A href='?src=\ref[];screen=radsetmenu'>Radiation Emitter Settings</A><br /><br />", src)
temp_html += text("<A href='?src=\ref[];screen=buffermenu'>Transfer Buffer</A><br /><br />", src)
temp_html += "<A href='?src=[UID()];screen=radsetmenu'>Radiation Emitter Settings</A><br /><br />"
temp_html += "<A href='?src=[UID()];screen=buffermenu'>Transfer Buffer</A><br /><br />"
if("unimenu")
if(!viable_occupant)
@@ -1132,14 +1132,14 @@
popup.set_content(temp_html)
popup.open()
else
temp_html = "<A href='?src=\ref[src];screen=mainmenu'><< Main Menu</A><br />"
temp_html = "<A href='?src=[UID()];screen=mainmenu'><< Main Menu</A><br />"
temp_html += "<h3>Modify Unique Identifier</h3>"
temp_html += "<div align='center'>Unique Identifier:<br />[getblockstring(scanner.occupant.dna.uni_identity,ui_block,subblock,3, src,1)]<br /><br />"
temp_html += "Selected Block: <A href='?src=\ref[src];unimenuminus=1'><-</A> <B>[ui_block]</B> <A href='?src=\ref[src];unimenuplus=1'>-></A><br /><br />"
temp_html += "Selected Sub-Block: <A href='?src=\ref[src];unimenusubminus=1'><-</A> <B>[subblock]</B> <A href='?src=\ref[src];unimenusubplus=1'>-></A><br /><br />"
temp_html += "Selected Target: <A href='?src=\ref[src];unimenutargetminus=1'><-</A> <B>[unitargethex]</B> <A href='?src=\ref[src];unimenutargetplus=1'>-></A><br /><br />"
temp_html += "Selected Block: <A href='?src=[UID()];unimenuminus=1'><-</A> <B>[ui_block]</B> <A href='?src=[UID()];unimenuplus=1'>-></A><br /><br />"
temp_html += "Selected Sub-Block: <A href='?src=[UID()];unimenusubminus=1'><-</A> <B>[subblock]</B> <A href='?src=[UID()];unimenusubplus=1'>-></A><br /><br />"
temp_html += "Selected Target: <A href='?src=[UID()];unimenutargetminus=1'><-</A> <B>[unitargethex]</B> <A href='?src=[UID()];unimenutargetplus=1'>-></A><br /><br />"
temp_html += "<B>Modify Block</B><br />"
temp_html += "<A href='?src=\ref[src];unipulse=1'>Irradiate</A></div>"
temp_html += "<A href='?src=[UID()];unipulse=1'>Irradiate</A></div>"
if("strucmenu")
if(!viable_occupant)
@@ -1147,26 +1147,26 @@
popup.set_content(temp_html)
popup.open()
else
temp_html = "<A href='?src=\ref[src];screen=mainmenu'><< Main Menu</A><br />"
temp_html = "<A href='?src=[UID()];screen=mainmenu'><< Main Menu</A><br />"
temp_html += "<h3>Modify Structural Enzymes</h3>"
temp_html += "<div align='center'>Structural Enzymes: [getblockstring(scanner.occupant.dna.struc_enzymes,se_block,subblock,3,src,0)]<br /><br />"
temp_html += "Selected Block: <A href='?src=\ref[src];strucmenuminus=1'><-</A> <B>[se_block]</B> <A href='?src=\ref[src];strucmenuplus=1'>-></A><br /><br />"
temp_html += "Selected Sub-Block: <A href='?src=\ref[src];strucmenusubminus=1'><-</A> <B>[subblock]</B> <A href='?src=\ref[src];strucmenusubplus=1'>-></A><br /><br />"
temp_html += "Selected Block: <A href='?src=[UID()];strucmenuminus=1'><-</A> <B>[se_block]</B> <A href='?src=[UID()];strucmenuplus=1'>-></A><br /><br />"
temp_html += "Selected Sub-Block: <A href='?src=[UID()];strucmenusubminus=1'><-</A> <B>[subblock]</B> <A href='?src=[UID()];strucmenusubplus=1'>-></A><br /><br />"
temp_html += "<B>Modify Block</B><br />"
temp_html += "<A href='?src=\ref[src];strucpulse=1'>Irradiate</A></div>"
temp_html += "<A href='?src=[UID()];strucpulse=1'>Irradiate</A></div>"
if("radsetmenu")
temp_html = "<A href='?src=\ref[src];screen=mainmenu'><< Main Menu</A><br />"
temp_html = "<A href='?src=[UID()];screen=mainmenu'><< Main Menu</A><br />"
temp_html += "<h3>Radiation Emitter Settings</h3>"
if(viable_occupant)
temp_html += text("<A href='?src=\ref[];genpulse=1'>Pulse Radiation</A>", src)
temp_html += "<A href='?src=[UID()];genpulse=1'>Pulse Radiation</A>"
else
temp_html += "<span class='linkOff'>Pulse Radiation</span>"
temp_html += "<br /><br />Radiation Duration: <A href='?src=\ref[src];radleminus=1'>-</A> <font color='green'><B>[radduration]</B></FONT> <A href='?src=\ref[src];radleplus=1'>+</A><br />"
temp_html += "Radiation Intensity: <A href='?src=\ref[src];radinminus=1'>-</A> <font color='green'><B>[radstrength]</B></FONT> <A href='?src=\ref[src];radinplus=1'>+</A><br /><br />"
temp_html += "<br /><br />Radiation Duration: <A href='?src=[UID()];radleminus=1'>-</A> <font color='green'><B>[radduration]</B></FONT> <A href='?src=[UID()];radleplus=1'>+</A><br />"
temp_html += "Radiation Intensity: <A href='?src=[UID()];radinminus=1'>-</A> <font color='green'><B>[radstrength]</B></FONT> <A href='?src=[UID()];radinplus=1'>+</A><br /><br />"
if("buffermenu")
temp_html = "<A href='?src=\ref[src];screen=mainmenu'><< Main Menu</A><br />"
temp_html = "<A href='?src=[UID()];screen=mainmenu'><< Main Menu</A><br />"
temp_html += "<h3>Transfer Buffer</h3>"
temp_html += "<h4>Buffer 1:</h4>"
if(!(buffer1))
@@ -1175,12 +1175,12 @@
temp_html += text("Data: <font class='highlight'>[]</FONT><br />", buffer1)
temp_html += text("By: <font class='highlight'>[]</FONT><br />", buffer1owner)
temp_html += text("Label: <font class='highlight'>[]</FONT><br />", buffer1label)
if(viable_occupant) temp_html += text("Save : <A href='?src=\ref[];b1addui=1'>UI</A> - <A href='?src=\ref[];b1adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b1addse=1'>SE</A><br />", src, src, src)
if(buffer1) temp_html += text("Transfer to: <A href='?src=\ref[];b1transfer=1'>Occupant</A> - <A href='?src=\ref[];b1injector=1'>Injector</A><br />", src, src)
//if(buffer1) temp_html += text("<A href='?src=\ref[];b1iso=1'>Isolate Block</A><br />", src)
if(buffer1) temp_html += "Disk: <A href='?src=\ref[src];save_disk=1'>Save To</a> | <A href='?src=\ref[src];load_disk=1'>Load From</a><br />"
if(buffer1) temp_html += text("<A href='?src=\ref[];b1label=1'>Edit Label</A><br />", src)
if(buffer1) temp_html += text("<A href='?src=\ref[];b1clear=1'>Clear Buffer</A><br /><br />", src)
if(viable_occupant) temp_html += "Save : <A href='?src=[UID()];b1addui=1'>UI</A> - <A href='?src=[UID()];b1adduiue=1'>UI+UE</A> - <A href='?src=[UID()];b1addse=1'>SE</A><br />"
if(buffer1) temp_html += "Transfer to: <A href='?src=[UID()];b1transfer=1'>Occupant</A> - <A href='?src=[UID()];b1injector=1'>Injector</A><br />"
//if(buffer1) temp_html += "<A href='?src=[UID()];b1iso=1'>Isolate Block</A><br />"
if(buffer1) temp_html += "Disk: <A href='?src=[UID()];save_disk=1'>Save To</a> | <A href='?src=[UID()];load_disk=1'>Load From</a><br />"
if(buffer1) temp_html += "<A href='?src=[UID()];b1label=1'>Edit Label</A><br />"
if(buffer1) temp_html += "<A href='?src=[UID()];b1clear=1'>Clear Buffer</A><br /><br />"
if(!buffer1) temp_html += "<br />"
temp_html += "<h4>Buffer 2:</h4>"
if(!(buffer2))
@@ -1189,12 +1189,12 @@
temp_html += text("Data: <font class='highlight'>[]</FONT><br />", buffer2)
temp_html += text("By: <font class='highlight'>[]</FONT><br />", buffer2owner)
temp_html += text("Label: <font class='highlight'>[]</FONT><br />", buffer2label)
if(viable_occupant) temp_html += text("Save : <A href='?src=\ref[];b2addui=1'>UI</A> - <A href='?src=\ref[];b2adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b2addse=1'>SE</A><br />", src, src, src)
if(buffer2) temp_html += text("Transfer to: <A href='?src=\ref[];b2transfer=1'>Occupant</A> - <A href='?src=\ref[];b2injector=1'>Injector</A><br />", src, src)
//if(buffer2) temp_html += text("<A href='?src=\ref[];b2iso=1'>Isolate Block</A><br />", src)
if(buffer2) temp_html += "Disk: <A href='?src=\ref[src];save_disk=2'>Save To</a> | <A href='?src=\ref[src];load_disk=2'>Load From</a><br />"
if(buffer2) temp_html += text("<A href='?src=\ref[];b2label=1'>Edit Label</A><br />", src)
if(buffer2) temp_html += text("<A href='?src=\ref[];b2clear=1'>Clear Buffer</A><br /><br />", src)
if(viable_occupant) temp_html += "Save : <A href='?src=[UID()];b2addui=1'>UI</A> - <A href='?src=[UID()];b2adduiue=1'>UI+UE</A> - <A href='?src=[UID()];b2addse=1'>SE</A><br />"
if(buffer2) temp_html += "Transfer to: <A href='?src=[UID()];b2transfer=1'>Occupant</A> - <A href='?src=[UID()];b2injector=1'>Injector</A><br />"
//if(buffer2) temp_html += "<A href='?src=[UID()];b2iso=1'>Isolate Block</A><br />"
if(buffer2) temp_html += "Disk: <A href='?src=[UID()];save_disk=2'>Save To</a> | <A href='?src=[UID()];load_disk=2'>Load From</a><br />"
if(buffer2) temp_html += "<A href='?src=[UID()];b2label=1'>Edit Label</A><br />"
if(buffer2) temp_html += "<A href='?src=[UID()];b2clear=1'>Clear Buffer</A><br /><br />"
if(!buffer2) temp_html += "<br />"
temp_html += "<h4>Buffer 3:</h4>"
if(!(buffer3))
@@ -1203,12 +1203,12 @@
temp_html += text("Data: <font class='highlight'>[]</FONT><br />", buffer3)
temp_html += text("By: <font class='highlight'>[]</FONT><br />", buffer3owner)
temp_html += text("Label: <font class='highlight'>[]</FONT><br />", buffer3label)
if(viable_occupant) temp_html += text("Save : <A href='?src=\ref[];b3addui=1'>UI</A> - <A href='?src=\ref[];b3adduiue=1'>UI+UE</A> - <A href='?src=\ref[];b3addse=1'>SE</A><br />", src, src, src)
if(buffer3) temp_html += text("Transfer to: <A href='?src=\ref[];b3transfer=1'>Occupant</A> - <A href='?src=\ref[];b3injector=1'>Injector</A><br />", src, src)
//if(buffer3) temp_html += text("<A href='?src=\ref[];b3iso=1'>Isolate Block</A><br />", src)
if(buffer3) temp_html += "Disk: <A href='?src=\ref[src];save_disk=3'>Save To</a> | <A href='?src=\ref[src];load_disk=3'>Load From</a><br />"
if(buffer3) temp_html += text("<A href='?src=\ref[];b3label=1'>Edit Label</A><br />", src)
if(buffer3) temp_html += text("<A href='?src=\ref[];b3clear=1'>Clear Buffer</A><br /><br />", src)
if(viable_occupant) temp_html += "Save : <A href='?src=[UID()];b3addui=1'>UI</A> - <A href='?src=[UID()];b3adduiue=1'>UI+UE</A> - <A href='?src=[UID()];b3addse=1'>SE</A><br />"
if(buffer3) temp_html += "Transfer to: <A href='?src=[UID()];b3transfer=1'>Occupant</A> - <A href='?src=[UID()];b3injector=1'>Injector</A><br />"
//if(buffer3) temp_html += "<A href='?src=[UID()];b3iso=1'>Isolate Block</A><br />"
if(buffer3) temp_html += "Disk: <A href='?src=[UID()];save_disk=3'>Save To</a> | <A href='?src=[UID()];load_disk=3'>Load From</a><br />"
if(buffer3) temp_html += "<A href='?src=[UID()];b3label=1'>Edit Label</A><br />"
if(buffer3) temp_html += "<A href='?src=[UID()];b3clear=1'>Clear Buffer</A><br /><br />"
if(!buffer3) temp_html += "<br />"
temp_html += temp_footer_html
@@ -1249,12 +1249,12 @@
if(scanner.locked)
scanner_access_text = "Unlock Scanner"
dat += "<A href='?src=\ref[src];'>Scan</A> "
dat += "<A href='?src=[UID()];'>Scan</A> "
if(occupant && occupant.dna)
dat += "<A href='?src=\ref[src];locked=1'>[scanner_access_text]</A> "
dat += "<A href='?src=[UID()];locked=1'>[scanner_access_text]</A> "
if(human_occupant)
dat += "<A href='?src=\ref[src];rejuv=1'>Inject Rejuvenators</A><br />"
dat += "<A href='?src=[UID()];rejuv=1'>Inject Rejuvenators</A><br />"
else
dat += "<span class='linkOff'>Inject Rejuvenators</span><br />"
else
@@ -1262,7 +1262,7 @@
dat += "<span class='linkOff'>Inject Rejuvenators</span><br />"
if(!isnull(diskette))
dat += text("<A href='?src=\ref[];eject_disk=1'>Eject Disk</A><br />", src)
dat += "<A href='?src=[UID()];eject_disk=1'>Eject Disk</A><br />"
dat += "<br />"
+41 -42
View File
@@ -48,7 +48,6 @@
if(!computer.cardslot)
computer.Crash(MISSING_PERIPHERAL)
return
usr.set_machine(src)
scan = computer.cardslot.reader
if(computer.cardslot.dualslot)
@@ -63,11 +62,11 @@
var/dat
if(temp)
dat = text("<TT>[]</TT><BR><BR><A href='?src=\ref[];choice=Clear Screen'>Clear Screen</A>", temp, src)
dat = "<TT>[temp]</TT><BR><BR><A href='?src=[UID()];choice=Clear Screen'>Clear Screen</A>"
else
dat = text("Confirm Identity (R): <A href='?src=\ref[];choice=Confirm Identity R'>[]</A><HR>", src, (scan ? text("[]", scan.name) : "----------"))
dat = text("Confirm Identity (R): <A href='?src=[UID()];choice=Confirm Identity R'>[]</A><HR>", (scan ? text("[]", scan.name) : "----------"))
if(computer.cardslot.dualslot)
dat += text("Check Identity (W): <A href='?src=\ref[];choice=Confirm Identity W'>[]</A><BR>", src, (scan2 ? text("[]", scan2.name) : "----------"))
dat += text("Check Identity (W): <A href='?src=[UID()];choice=Confirm Identity W'>[]</A><BR>", (scan2 ? text("[]", scan2.name) : "----------"))
if(scan2 && !scan)
dat += text("<div class='notice'>Insert card into reader slot to log in.</div><br>")
if(authenticated)
@@ -75,8 +74,8 @@
if(1.0)
dat += {"
<p style='text-align:center;'>"}
dat += text("<A href='?src=\ref[];choice=Search Records'>Search Records</A><BR>", src)
dat += text("<A href='?src=\ref[];choice=New Record (General)'>New Record</A><BR>", src)
dat += "<A href='?src=[UID()];choice=Search Records'>Search Records</A><BR>"
dat += "<A href='?src=[UID()];choice=New Record (General)'>New Record</A><BR>"
dat += {"
</p>
<table style="text-align:center;" cellspacing="0" width="100%">
@@ -86,10 +85,10 @@
</table>
<table style="text-align:center;" border="1" cellspacing="0" width="100%">
<tr>
<th><A href='?src=\ref[src];choice=Sorting;sort=name'>Name</A></th>
<th><A href='?src=\ref[src];choice=Sorting;sort=id'>ID</A></th>
<th><A href='?src=\ref[src];choice=Sorting;sort=rank'>Rank</A></th>
<th><A href='?src=\ref[src];choice=Sorting;sort=fingerprint'>Fingerprints</A></th>
<th><A href='?src=[UID()];choice=Sorting;sort=name'>Name</A></th>
<th><A href='?src=[UID()];choice=Sorting;sort=id'>ID</A></th>
<th><A href='?src=[UID()];choice=Sorting;sort=rank'>Rank</A></th>
<th><A href='?src=[UID()];choice=Sorting;sort=fingerprint'>Fingerprints</A></th>
<th>Criminal Status</th>
</tr>"}
if(!isnull(data_core.general))
@@ -113,27 +112,27 @@
if("")
background = "'background-color:#00FF7F;'"
crimstat = "No Record."
dat += text("<tr style=[]><td><A href='?src=\ref[];choice=Browse Record;d_rec=\ref[]'>[]</a></td>", background, src, R, R.fields["name"])
dat += text("<tr style=[]><td><A href='?src=[UID()];choice=Browse Record;d_rec=\ref[]'>[]</a></td>", background, R, R.fields["name"])
dat += text("<td>[]</td>", R.fields["id"])
dat += text("<td>[]</td>", R.fields["rank"])
dat += text("<td>[]</td>", R.fields["fingerprint"])
dat += text("<td>[]</td></tr>", crimstat)
dat += "</table><hr width='75%' />"
dat += text("<A href='?src=\ref[];choice=Record Maintenance'>Record Maintenance</A><br><br>", src)
dat += text("<A href='?src=\ref[];choice=Log Out'>{Log Out}</A>",src)
dat += "<A href='?src=[UID()];choice=Record Maintenance'>Record Maintenance</A><br><br>"
dat += "<A href='?src=[UID()];choice=Log Out'>{Log Out}</A>"
if(2.0)
dat += "<B>Records Maintenance</B><HR>"
dat += "<BR><A href='?src=\ref[src];choice=Delete All Records'>Delete All Records</A><BR><BR><A href='?src=\ref[src];choice=Return'>Back</A>"
dat += "<BR><A href='?src=[UID()];choice=Delete All Records'>Delete All Records</A><BR><BR><A href='?src=[UID()];choice=Return'>Back</A>"
if(3.0)
dat += "<CENTER><B>Security Record</B></CENTER><BR>"
if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
dat += text("<table><tr><td> \
Name: <A href='?src=\ref[src];choice=Edit Field;field=name'>[active1.fields["name"]]</A><BR> \
ID: <A href='?src=\ref[src];choice=Edit Field;field=id'>[active1.fields["id"]]</A><BR>\n \
Sex: <A href='?src=\ref[src];choice=Edit Field;field=sex'>[active1.fields["sex"]]</A><BR>\n \
Age: <A href='?src=\ref[src];choice=Edit Field;field=age'>[active1.fields["age"]]</A><BR>\n \
Rank: <A href='?src=\ref[src];choice=Edit Field;field=rank'>[active1.fields["rank"]]</A><BR>\n \
Fingerprint: <A href='?src=\ref[src];choice=Edit Field;field=fingerprint'>[active1.fields["fingerprint"]]</A><BR>\n \
Name: <A href='?src=[UID()];choice=Edit Field;field=name'>[active1.fields["name"]]</A><BR> \
ID: <A href='?src=[UID()];choice=Edit Field;field=id'>[active1.fields["id"]]</A><BR>\n \
Sex: <A href='?src=[UID()];choice=Edit Field;field=sex'>[active1.fields["sex"]]</A><BR>\n \
Age: <A href='?src=[UID()];choice=Edit Field;field=age'>[active1.fields["age"]]</A><BR>\n \
Rank: <A href='?src=[UID()];choice=Edit Field;field=rank'>[active1.fields["rank"]]</A><BR>\n \
Fingerprint: <A href='?src=[UID()];choice=Edit Field;field=fingerprint'>[active1.fields["fingerprint"]]</A><BR>\n \
Physical Status: [active1.fields["p_stat"]]<BR>\n \
Mental Status: [active1.fields["m_stat"]]<BR></td> \
<td align = center valign = top>Photo:<br><img src=[active1.fields["photo-south"]] height=80 width=80 border=4> \
@@ -141,20 +140,20 @@
else
dat += "<B>General Record Lost!</B><BR>"
if((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
dat += text("<BR>\n<CENTER><B>Security Data</B></CENTER><BR>\nCriminal Status: <A href='?src=\ref[];choice=Edit Field;field=criminal'>[]</A><BR>\n<BR>\nMinor Crimes: <A href='?src=\ref[];choice=Edit Field;field=mi_crim'>[]</A><BR>\nDetails: <A href='?src=\ref[];choice=Edit Field;field=mi_crim_d'>[]</A><BR>\n<BR>\nMajor Crimes: <A href='?src=\ref[];choice=Edit Field;field=ma_crim'>[]</A><BR>\nDetails: <A href='?src=\ref[];choice=Edit Field;field=ma_crim_d'>[]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=\ref[];choice=Edit Field;field=notes'>[]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src, active2.fields["criminal"], src, active2.fields["mi_crim"], src, active2.fields["mi_crim_d"], src, active2.fields["ma_crim"], src, active2.fields["ma_crim_d"], src, decode(active2.fields["notes"]))
dat += text("<BR>\n<CENTER><B>Security Data</B></CENTER><BR>\nCriminal Status: <A href='?src=[UID()];choice=Edit Field;field=criminal'>[]</A><BR>\n<BR>\nMinor Crimes: <A href='?src=[UID()];choice=Edit Field;field=mi_crim'>[]</A><BR>\nDetails: <A href='?src=[UID()];choice=Edit Field;field=mi_crim_d'>[]</A><BR>\n<BR>\nMajor Crimes: <A href='?src=[UID()];choice=Edit Field;field=ma_crim'>[]</A><BR>\nDetails: <A href='?src=[UID()];choice=Edit Field;field=ma_crim_d'>[]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=[UID()];choice=Edit Field;field=notes'>[]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", active2.fields["criminal"], active2.fields["mi_crim"], active2.fields["mi_crim_d"], active2.fields["ma_crim"], active2.fields["ma_crim_d"], decode(active2.fields["notes"]))
var/counter = 1
while(active2.fields[text("com_[]", counter)])
dat += text("[]<BR><A href='?src=\ref[];choice=Delete Entry;del_c=[]'>Delete Entry</A><BR><BR>", active2.fields[text("com_[]", counter)], src, counter)
dat += text("[]<BR><A href='?src=[UID()];choice=Delete Entry;del_c=[]'>Delete Entry</A><BR><BR>", active2.fields[text("com_[]", counter)], counter)
counter++
dat += text("<A href='?src=\ref[];choice=Add Entry'>Add Entry</A><BR><BR>", src)
dat += text("<A href='?src=\ref[];choice=Delete Record (Security)'>Delete Record (Security Only)</A><BR><BR>", src)
dat += "<A href='?src=[UID()];choice=Add Entry'>Add Entry</A><BR><BR>"
dat += "<A href='?src=[UID()];choice=Delete Record (Security)'>Delete Record (Security Only)</A><BR><BR>"
else
dat += "<B>Security Record Lost!</B><BR>"
dat += text("<A href='?src=\ref[];choice=New Record (Security)'>New Security Record</A><BR><BR>", src)
dat += text("\n<A href='?src=\ref[];choice=Delete Record (ALL)'>Delete Record (ALL)</A><BR><BR>\n<A href='?src=\ref[];choice=Print Record'>Print Record</A><BR>\n<A href='?src=\ref[];choice=Return'>Back</A><BR>", src, src, src)
dat += "<A href='?src=[UID()];choice=New Record (Security)'>New Security Record</A><BR><BR>"
dat += "\n<A href='?src=[UID()];choice=Delete Record (ALL)'>Delete Record (ALL)</A><BR><BR>\n<A href='?src=[UID()];choice=Print Record'>Print Record</A><BR>\n<A href='?src=[UID()];choice=Return'>Back</A><BR>"
if(4.0)
if(!Perp.len)
dat += text("ERROR. String could not be located.<br><br><A href='?src=\ref[];choice=Return'>Back</A>", src)
dat += "ERROR. String could not be located.<br><br><A href='?src=[UID()];choice=Return'>Back</A>"
else
dat += {"
<table style="text-align:center;" cellspacing="0" width="100%">
@@ -192,16 +191,16 @@
if("")
background = "'background-color:#FFFFFF;'"
crimstat = "No Record."
dat += text("<tr style=[]><td><A href='?src=\ref[];choice=Browse Record;d_rec=\ref[]'>[]</a></td>", background, src, R, R.fields["name"])
dat += text("<tr style=[]><td><A href='?src=[UID()];choice=Browse Record;d_rec=\ref[]'>[]</a></td>", background, R, R.fields["name"])
dat += text("<td>[]</td>", R.fields["id"])
dat += text("<td>[]</td>", R.fields["rank"])
dat += text("<td>[]</td>", R.fields["fingerprint"])
dat += text("<td>[]</td></tr>", crimstat)
dat += "</table><hr width='75%' />"
dat += text("<br><A href='?src=\ref[];choice=Return'>Return to index.</A>", src)
dat += "<br><A href='?src=[UID()];choice=Return'>Return to index.</A>"
else
else
dat += text("<A href='?src=\ref[];choice=Log In'>{Log In}</A>", src)
dat += "<A href='?src=[UID()];choice=Log In'>{Log In}</A>"
popup.width = 600
popup.height = 400
popup.set_content(dat)
@@ -388,8 +387,8 @@ What a mess.*/
if("Delete All Records")
temp = ""
temp += "Are you sure you wish to delete all Security records?<br>"
temp += "<a href='?src=\ref[src];choice=Purge All Records'>Yes</a><br>"
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
temp += "<a href='?src=[UID()];choice=Purge All Records'>Yes</a><br>"
temp += "<a href='?src=[UID()];choice=Clear Screen'>No</a>"
if("Purge All Records")
for(var/datum/data/record/R in data_core.security)
@@ -411,14 +410,14 @@ What a mess.*/
if("Delete Record (ALL)")
if(active1)
temp = "<h5>Are you sure you wish to delete the record (ALL)?</h5>"
temp += "<a href='?src=\ref[src];choice=Delete Record (ALL) Execute'>Yes</a><br>"
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
temp += "<a href='?src=[UID()];choice=Delete Record (ALL) Execute'>Yes</a><br>"
temp += "<a href='?src=[UID()];choice=Clear Screen'>No</a>"
if("Delete Record (Security)")
if(active2)
temp = "<h5>Are you sure you wish to delete the record (Security Portion Only)?</h5>"
temp += "<a href='?src=\ref[src];choice=Delete Record (Security) Execute'>Yes</a><br>"
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
temp += "<a href='?src=[UID()];choice=Delete Record (Security) Execute'>Yes</a><br>"
temp += "<a href='?src=[UID()];choice=Clear Screen'>No</a>"
if("Delete Entry")
if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])]))
@@ -525,11 +524,11 @@ What a mess.*/
if(istype(active2, /datum/data/record))
temp = "<h5>Criminal Status:</h5>"
temp += "<ul>"
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=none'>None</a></li>"
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=arrest'>*Arrest*</a></li>"
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=incarcerated'>Incarcerated</a></li>"
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=parolled'>Parolled</a></li>"
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=released'>Released</a></li>"
temp += "<li><a href='?src=[UID()];choice=Change Criminal Status;criminal2=none'>None</a></li>"
temp += "<li><a href='?src=[UID()];choice=Change Criminal Status;criminal2=arrest'>*Arrest*</a></li>"
temp += "<li><a href='?src=[UID()];choice=Change Criminal Status;criminal2=incarcerated'>Incarcerated</a></li>"
temp += "<li><a href='?src=[UID()];choice=Change Criminal Status;criminal2=parolled'>Parolled</a></li>"
temp += "<li><a href='?src=[UID()];choice=Change Criminal Status;criminal2=released'>Released</a></li>"
temp += "</ul>"
if("rank")
var/list/L = list( "Head of Personnel", "Captain", "AI" )
@@ -538,7 +537,7 @@ What a mess.*/
temp = "<h5>Rank:</h5>"
temp += "<ul>"
for(var/rank in joblist)
temp += "<li><a href='?src=\ref[src];choice=Change Rank;rank=[rank]'>[rank]</a></li>"
temp += "<li><a href='?src=[UID()];choice=Change Rank;rank=[rank]'>[rank]</a></li>"
temp += "</ul>"
else
alert(usr, "You do not have the required rank to do this!")
@@ -11,11 +11,10 @@
var/alarms = list("Fire"=list(), "Atmosphere"=list(), "Power"=list())
interact(mob/user)
usr.set_machine(src)
if(!interactable())
return
var/dat = "<HEAD><TITLE>Current Station Alerts</TITLE><META HTTP-EQUIV='Refresh' CONTENT='10'></HEAD><BODY>\n"
dat += "<A HREF='?src=\ref[user];mach_close=alerts'>Close</A><br><br>"
dat += "<A HREF='?src=[user.UID()];mach_close=alerts'>Close</A><br><br>"
for(var/cat in src.alarms)
dat += text("<B>[]</B><BR>\n", cat)
var/list/L = src.alarms[cat]
+18 -18
View File
@@ -70,58 +70,58 @@
dat += "<center>Your comptuer will automatically be loaded with any programs you can use after the transaction is complete."
dat += "<center><b>Some programs will require additional components to be installed!</center></b><hr /><br>"
dat += "<center><b>HDD (Required)</b> : Added</center><br>"
dat += "<center><b>Card Reader</b> : <A href='?src=\ref[src];choice=single_add'>Single (50)</a> | <A href='?src=\ref[src];choice=dual_add'>Dual (125)</a><br>"
dat += "<center><b>Floppy Drive</b>: <A href='?src=\ref[src];choice=floppy_add'>Add (50)</a><br>"
dat += "<center><b>Radio Network card</b> <A href='?src=\ref[src];choice=radio_add'>Add (50)</a><br>"
dat += "<center><b>Camera Card</b> <A href='?src=\ref[src];choice=camnet_add'>Add (100)</a><br>"
dat += "<center><b> Network card</b> <A href='?src=\ref[src];choice=area_add'>Area (75)</a> <A href='?src=\ref[src];choice=prox_add'>Adjacent (50)</a><A href='?src=\ref[src];choice=cable_add'>Powernet (25)</a><br>"
dat += "<hr /><center> Power source upgrade</center> <A href='?src=\ref[src];choice=high_add'>Extended (175)</a> <A href='?src=\ref[src];choice=super_add'>Unreal (250)</a>"
dat += "<center><b>Card Reader</b> : <A href='?src=[UID()];choice=single_add'>Single (50)</a> | <A href='?src=[UID()];choice=dual_add'>Dual (125)</a><br>"
dat += "<center><b>Floppy Drive</b>: <A href='?src=[UID()];choice=floppy_add'>Add (50)</a><br>"
dat += "<center><b>Radio Network card</b> <A href='?src=[UID()];choice=radio_add'>Add (50)</a><br>"
dat += "<center><b>Camera Card</b> <A href='?src=[UID()];choice=camnet_add'>Add (100)</a><br>"
dat += "<center><b> Network card</b> <A href='?src=[UID()];choice=area_add'>Area (75)</a> <A href='?src=[UID()];choice=prox_add'>Adjacent (50)</a><A href='?src=[UID()];choice=cable_add'>Powernet (25)</a><br>"
dat += "<hr /><center> Power source upgrade</center> <A href='?src=[UID()];choice=high_add'>Extended (175)</a> <A href='?src=[UID()];choice=super_add'>Unreal (250)</a>"
if(vendmode == 0 || vendmode == 1)
dat += "<hr /><br><center>Cart</center><br>"
dat += "<b>Total: [total()]</b><br>"
if(cardreader == 1)
dat += "<A href='?src=\ref[src];choice=single_rem'>Card Reader: (single) (50)</a><br>"
dat += "<A href='?src=[UID()];choice=single_rem'>Card Reader: (single) (50)</a><br>"
else if(cardreader == 2)
dat += "<A href='?src=\ref[src];choice=dual_rem'>Card Reader: (double) (125)</a><br>"
dat += "<A href='?src=[UID()];choice=dual_rem'>Card Reader: (double) (125)</a><br>"
else
dat += "Card Reader: None<br>"
if(floppy == 0)
dat += "Floppy Drive: None<br>"
else
dat += "<A href='?src=\ref[src];choice=floppy_rem'>Floppy Drive: Added (50)</a><br>"
dat += "<A href='?src=[UID()];choice=floppy_rem'>Floppy Drive: Added (50)</a><br>"
if(radionet == 1)
dat += "<A href='?src=\ref[src];choice=radio_rem'>Radio Card: Added (50)</a><br>"
dat += "<A href='?src=[UID()];choice=radio_rem'>Radio Card: Added (50)</a><br>"
else
dat += "Radio Card: None<br>"
if(camera == 1)
dat += "<A href='?src=\ref[src];choice=camnet_rem'>Camera Card: Added (100)</a><br>"
dat += "<A href='?src=[UID()];choice=camnet_rem'>Camera Card: Added (100)</a><br>"
else
dat += "Camera Card: None<br>"
if(network == 1)
dat += "<A href='?src=\ref[src];choice=area_rem'>Network card: Area (75)</a><br>"
dat += "<A href='?src=[UID()];choice=area_rem'>Network card: Area (75)</a><br>"
else if(network == 2)
dat += "<A href='?src=\ref[src];choice=prox_rem'>Network card: Adjacent (50)</a><br>"
dat += "<A href='?src=[UID()];choice=prox_rem'>Network card: Adjacent (50)</a><br>"
else if(network == 3)
dat += "<A href='?src=\ref[src];choice=cable_rem'>Network card: Powernet (25)</a><br>"
dat += "<A href='?src=[UID()];choice=cable_rem'>Network card: Powernet (25)</a><br>"
else
dat += "Network card: None<br>"
if(power == 0)
dat += "Power source: Regular<br>"
else if(power == 1)
dat += "<A href='?src=\ref[src];choice=high_rem'>Power source: Extended (175)</a><br>"
dat += "<A href='?src=[UID()];choice=high_rem'>Power source: Extended (175)</a><br>"
else
dat += "<A href='?src=\ref[src];choice=super_rem'>Power source: Unreal (250)</a><br>"
dat += "<A href='?src=[UID()];choice=super_rem'>Power source: Unreal (250)</a><br>"
if(vendmode == 0)
dat += "<br><A href='?src=\ref[src];choice=vend'>Vend Laptop</a>"
dat += "<br><A href='?src=[UID()];choice=vend'>Vend Laptop</a>"
if(vendmode == 1)
dat += "Please swipe your card to complete the transaction"
if(vendmode == 3)
dat += "Please swipe your card to finish returning your computer<br>"
dat += "<a href='?src=\ref[src];choice=cancel'>Cancel</a>"
dat += "<a href='?src=[UID()];choice=cancel'>Cancel</a>"
+69
View File
@@ -0,0 +1,69 @@
/obj/effect/countdown
name = "countdown"
desc = "We're leaving together\n\
But still it's farewell\n\
And maybe we'll come back\n\
To earth, who can tell?"
var/displayed_text
var/atom/attached_to
color = "#ff0000"
var/text_size = 4
var/started = 0
invisibility = INVISIBILITY_OBSERVER
anchored = 1
layer = 5
/obj/effect/countdown/New(atom/A)
. = ..()
attach(A)
/obj/effect/countdown/proc/attach(atom/A)
attached_to = A
loc = get_turf(A)
/obj/effect/countdown/proc/start()
if(!started)
fast_processing += src
started = 1
/obj/effect/countdown/proc/stop()
if(started)
maptext = null
fast_processing -= src
started = 0
/obj/effect/countdown/proc/get_value()
// Get the value from our atom
return
/obj/effect/countdown/process()
if(!attached_to || qdeleted(attached_to))
qdel(src)
forceMove(get_turf(attached_to))
var/new_val = get_value()
if(new_val == displayed_text)
return
displayed_text = new_val
if(displayed_text)
maptext = "<font size = [text_size]>[displayed_text]</font>"
else
maptext = null
/obj/effect/countdown/Destroy()
attached_to = null
fast_processing -= src
return ..()
/obj/effect/countdown/clonepod
name = "cloning pod countdown"
text_size = 1
/obj/effect/countdown/clonepod/get_value()
var/obj/machinery/clonepod/C = attached_to
if(!istype(C))
return
else if(C.occupant)
var/completion = round(C.get_completion())
return completion
+3 -3
View File
@@ -233,11 +233,11 @@
if(busy)
dat += "<div class='statusDisplay'>Crafting in progress...</div>"
else
dat += "<A href='?src=\ref[src];backwardCat=1'><--</A>"
dat += "<A href='?src=[UID()];backwardCat=1'><--</A>"
dat += " [categories[prev_cat()]] |"
dat += " <B>[categories[viewing_category]]</B> "
dat += "| [categories[next_cat()]] "
dat += "<A href='?src=\ref[src];forwardCat=1'>--></A><BR><BR>"
dat += "<A href='?src=[UID()];forwardCat=1'>--></A><BR><BR>"
dat += "<div class='statusDisplay'>"
@@ -308,7 +308,7 @@
var/tool_text = ""
var/catalist_text = ""
if(check_contents(R, contents))
name_text ="<A href='?src=\ref[src];make=\ref[R]'>[R.name]</A>"
name_text ="<A href='?src=[UID()];make=\ref[R]'>[R.name]</A>"
else
name_text = "<span class='linkOff'>[R.name]</span>"
+3 -4
View File
@@ -71,12 +71,11 @@
/obj/item/clothing/suit/armor/vest = 1,
/obj/item/robot_parts/l_leg = 1,
/obj/item/robot_parts/r_leg = 1,
/obj/item/stack/sheet/metal = 5,
/obj/item/stack/cable_coil = 5,
/obj/item/stack/sheet/metal = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/gun/energy/gun/advtaser = 1,
/obj/item/weapon/stock_parts/cell = 1,
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/robot_parts/r_arm = 1)
/obj/item/device/assembly/prox_sensor = 1)
tools = list(/obj/item/weapon/weldingtool, /obj/item/weapon/screwdriver)
time = 60
category = CAT_ROBOT
+63 -13
View File
@@ -14,7 +14,7 @@
var/used = 0
/obj/item/device/fluff/tattoo_gun // Generic tattoo gun, make subtypes for different folks
name = "dispoable tattoo pen"
name = "disposable tattoo pen"
desc = "A cheap plastic tattoo application pen."
icon = 'icons/obj/custom_items.dmi'
icon_state = "tatgun"
@@ -22,7 +22,7 @@
throwforce = 0
w_class = 1
var/tattoo_name = "tiger stripe tattoo" // Tat name for visible messages
var/tattoo_icon = "Tiger Body" // body_accessory.dmi, new icons defined in sprite_accessories.dm
var/tattoo_icon = "Tiger-stripe Tattoo" // body_accessory.dmi, new icons defined in sprite_accessories.dm
var/tattoo_r = 1 // RGB values for the body markings
var/tattoo_g = 1
var/tattoo_b = 1
@@ -47,10 +47,15 @@
to_chat(user, "<span class= 'notice'>[target] has no skin, how do you expect to tattoo them?</span>")
return
if(target.m_style != "None")
if(target.m_styles["body"] != "None")
to_chat(user, "<span class= 'notice'>[target] already has body markings, any more would look silly!</span>")
return
var/datum/sprite_accessory/body_markings/tattoo/temp_tatt = marking_styles_list[tattoo_icon]
if(!(target.species.name in temp_tatt.species_allowed))
to_chat(user, "<span class= 'notice'>You can't think of a way to make the [tattoo_name] design work on [target == user ? "your" : "[target]'s"] body type.</span>")
return
if(target == user)
to_chat(user, "<span class= 'notice'>You use the [src] to apply a [tattoo_name] to yourself!</span>")
@@ -61,12 +66,8 @@
user.visible_message("<span class='notice'>[user] finishes the [tattoo_name] on [target].</span>", "<span class='notice'>You finish the [tattoo_name].</span>")
if(!used) // No exploiting do_after to tattoo multiple folks.
target.m_style = tattoo_icon
target.r_markings = tattoo_r
target.g_markings = tattoo_g
target.b_markings = tattoo_b
target.update_markings()
target.change_markings(tattoo_icon, "body")
target.change_marking_color(rgb(tattoo_r, tattoo_g, tattoo_b), "body")
playsound(src.loc, 'sound/items/Welder2.ogg', 20, 1)
used = 1
@@ -98,9 +99,9 @@
if(!used)
var/ink_color = input("Please select an ink color.", "Tattoo Ink Color", rgb(tattoo_r, tattoo_g, tattoo_b)) as color|null
if(ink_color && !(user.incapacitated() || used) )
tattoo_r = hex2num(copytext(ink_color, 2, 4))
tattoo_g = hex2num(copytext(ink_color, 4, 6))
tattoo_b = hex2num(copytext(ink_color, 6, 8))
tattoo_r = color2R(ink_color)
tattoo_g = color2G(ink_color)
tattoo_b = color2B(ink_color)
to_chat(user, "<span class='notice'>You change the color setting on the [src].</span>")
@@ -224,6 +225,28 @@
to_chat(target, "<span class='notice'>You comb your tail with the [src].</span>")
used = 1
/obj/item/device/fluff/cardgage_helmet_kit //captain cardgage: Richard Ulery
name = "welding helmet modkit"
desc = "Some spraypaint and a stencil, perfect for painting flames onto a welding helmet!"
icon_state = "modkit"
w_class = 2
force = 0
throwforce = 0
/obj/item/device/fluff/cardgage_helmet_kit/afterattack(atom/target, mob/user, proximity)
if(!proximity || !ishuman(user) || user.lying)
return
if(istype(target, /obj/item/clothing/head/welding))
to_chat(user, "<span class='notice'>You modify the appearance of [target].</span>")
var/obj/item/clothing/head/welding/flamedecal/P = new(get_turf(target))
transfer_fingerprints_to(P)
qdel(target)
qdel(src)
return
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
#define USED_MOD_HELM 1
#define USED_MOD_SUIT 2
@@ -335,7 +358,7 @@
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
if(H.head == src)
H.slurring = max(3, H.slurring) //always slur
H.Slur(3) //always slur
/obj/item/clothing/head/beret/fluff/linda //Epic_Charger: Linda Clark
name = "Green beret"
@@ -423,6 +446,11 @@
/obj/item/clothing/head/hood/fluff/linda //Epic_Charger: Linda Clark
icon_state = "greenhood"
/obj/item/clothing/suit/armor/shodanscoat // RazekPraxis: SHODAN
name = "SHODAN's Captain's Coat"
desc = "A black coat with gold trim and an old US Chevron printed on the back. Edgy."
icon_state = "shodancoat"
//////////// Uniforms ////////////
/obj/item/clothing/under/fluff/kharshai // Kharshai: Athena Castile
name = "Castile formal outfit"
@@ -432,6 +460,15 @@
item_state = "castile_dress"
item_color = "castile_dress"
/obj/item/clothing/under/fluff/elishirt // FlattestGuitar9: Eli Randolph
name = "casual dress shirt"
desc = "A soft, white dress shirt paired up with black suit pants. The set looks comfortable."
icon = 'icons/obj/custom_items.dmi'
icon_state = "elishirt"
item_state = "elishirt"
item_color = "elishirt"
displays_id = 0
/obj/item/clothing/under/psysuit/fluff/isaca_sirius_1 // Xilia: Isaca Sirius
name = "Isaca's suit"
desc = "Black, comfortable and nicely fitting suit. Made not to hinder the wearer in any way. Made of some exotic fabric. And some strange glowing jewel at the waist. Name labels says; Property of Isaca Sirius; The Seeder."
@@ -475,6 +512,14 @@
displays_id = 0
strip_delay = 100
/obj/item/clothing/under/fluff/aegis //PlagueWalker: A.E.G.I.S.
name = "gilded waistcoat"
desc = "This black, gold-trimmed, rather expensive-looking uniform laced with fine materials appears comfortable despite its stiffness."
icon_state = "aegisuniform"
item_state = "aegisuniform"
item_color = "aegisuniform"
displays_id = 0
//////////// Masks ////////////
/obj/item/clothing/mask/bandana/fluff/dar //sasanek12: Dar'Konr
@@ -610,3 +655,8 @@
suit_adjusted = 1
species_fit = null
sprite_sheets = null
/obj/item/weapon/storage/backpack/fluff/krich_back //lizardzsi: Krichahka
name = "Voxcaster"
desc = "Battered, Sol-made military radio backpack that had its speakers fried from playing Vox opera. The words 'Swift-Talon' are crudely scratched onto its side."
icon_state = "voxcaster_fluff"
+66 -62
View File
@@ -123,15 +123,13 @@ log transactions
to_chat(user, "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per Nanotrasen regulation #1005.")
return
if(get_dist(src,user) <= 1)
//check to see if the user has low security enabled
scan_user(user)
add_fingerprint(user)
//js replicated from obj/machinery/computer/card
var/dat = {"<h1>Nanotrasen Automatic Teller Machine</h1>
For all your monetary needs!<br>
<i>This terminal is</i> [machine_id]. <i>Report this code when contacting Nanotrasen IT Support</i><br/>
Card: <a href='?src=\ref[src];choice=insert_card'>[held_card ? held_card.name : "------"]</a><br><br>"}
Card: <a href='?src=[UID()];choice=insert_card'>[held_card ? held_card.name : "------"]</a><br><br>"}
if(ticks_left_locked_down > 0)
dat += "<span class='alert'>Maximum number of pin attempts exceeded! Access to this ATM has been temporarily disabled.</span>"
@@ -141,20 +139,20 @@ log transactions
dat += "Select a new security level for this account:<br><hr>"
var/text = "Zero - Either the account number or card is required to access this account. EFTPOS transactions will require a card and ask for a pin, but not verify the pin is correct."
if(authenticated_account.security_level != 0)
text = "<A href='?src=\ref[src];choice=change_security_level;new_security_level=0'>[text]</a>"
text = "<A href='?src=[UID()];choice=change_security_level;new_security_level=0'>[text]</a>"
dat += "[text]<hr>"
text = "One - An account number and pin must be manually entered to access this account and process transactions."
if(authenticated_account.security_level != 1)
text = "<A href='?src=\ref[src];choice=change_security_level;new_security_level=1'>[text]</a>"
text = "<A href='?src=[UID()];choice=change_security_level;new_security_level=1'>[text]</a>"
dat += "[text]<hr>"
text = "Two - In addition to account number and pin, a card is required to access this account and process transactions."
if(authenticated_account.security_level != 2)
text = "<A href='?src=\ref[src];choice=change_security_level;new_security_level=2'>[text]</a>"
text = "<A href='?src=[UID()];choice=change_security_level;new_security_level=2'>[text]</a>"
dat += {"[text]<hr><br>
<A href='?src=\ref[src];choice=view_screen;view_screen=0'>Back</a>"}
<A href='?src=[UID()];choice=view_screen;view_screen=0'>Back</a>"}
if(VIEW_TRANSACTION_LOGS)
dat += {"<b>Transaction logs</b><br>
<A href='?src=\ref[src];choice=view_screen;view_screen=0'>Back</a>
<A href='?src=[UID()];choice=view_screen;view_screen=0'>Back</a>
<table border=1 style='width:100%'>
<tr>
<td><b>Date</b></td>
@@ -176,9 +174,9 @@ log transactions
dat += "</table>"
if(TRANSFER_FUNDS)
dat += {"<b>Account balance:</b> $[authenticated_account.money]<br>
<A href='?src=\ref[src];choice=view_screen;view_screen=0'>Back</a><br><br>
<form name='transfer' action='?src=\ref[src]' method='get'>
<input type='hidden' name='src' value='\ref[src]'>
<A href='?src=[UID()];choice=view_screen;view_screen=0'>Back</a><br><br>
<form name='transfer' action='?src=[UID()]' method='get'>
<input type='hidden' name='src' value='[UID()]'>
<input type='hidden' name='choice' value='transfer'>
Target account number: <input type='text' name='target_acc_number' value='' style='width:200px; background-color:white;'><br>
Funds to transfer: <input type='text' name='funds_amount' value='' style='width:200px; background-color:white;'><br>
@@ -188,19 +186,19 @@ log transactions
else
dat += {"Welcome, <b>[authenticated_account.owner_name].</b><br/>
<b>Account balance:</b> $[authenticated_account.money]
<form name='withdrawal' action='?src=\ref[src]' method='get'>
<input type='hidden' name='src' value='\ref[src]'>
<form name='withdrawal' action='?src=[UID()]' method='get'>
<input type='hidden' name='src' value='[UID()]'>
<input type='hidden' name='choice' value='withdrawal'>
<input type='text' name='funds_amount' value='' style='width:200px; background-color:white;'><input type='submit' value='Withdraw funds'><br>
</form>
<A href='?src=\ref[src];choice=view_screen;view_screen=1'>Change account security level</a><br>
<A href='?src=\ref[src];choice=view_screen;view_screen=2'>Make transfer</a><br>
<A href='?src=\ref[src];choice=view_screen;view_screen=3'>View transaction log</a><br>
<A href='?src=\ref[src];choice=balance_statement'>Print balance statement</a><br>
<A href='?src=\ref[src];choice=logout'>Logout</a><br>"}
<A href='?src=[UID()];choice=view_screen;view_screen=1'>Change account security level</a><br>
<A href='?src=[UID()];choice=view_screen;view_screen=2'>Make transfer</a><br>
<A href='?src=[UID()];choice=view_screen;view_screen=3'>View transaction log</a><br>
<A href='?src=[UID()];choice=balance_statement'>Print balance statement</a><br>
<A href='?src=[UID()];choice=logout'>Logout</a><br>"}
else if(linked_db)
dat += {"<form name='atm_auth' action='?src=\ref[src]' method='get'>
<input type='hidden' name='src' value='\ref[src]'>
dat += {"<form name='atm_auth' action='?src=[UID()]' method='get'>
<input type='hidden' name='src' value='[UID()]'>
<input type='hidden' name='choice' value='attempt_auth'>
<b>Account:</b> <input type='text' id='account_num' name='account_num' style='width:250px; background-color:white;'><br>
<b>PIN:</b> <input type='text' id='account_pin' name='account_pin' style='width:250px; background-color:white;'><br>
@@ -252,55 +250,59 @@ log transactions
var/new_sec_level = max( min(text2num(href_list["new_security_level"]), 2), 0)
authenticated_account.security_level = new_sec_level
if("attempt_auth")
if(linked_db && !ticks_left_locked_down)
var/tried_account_num = text2num(href_list["account_num"])
if(!tried_account_num)
tried_account_num = held_card.associated_account_number
var/tried_pin = text2num(href_list["account_pin"])
if(linked_db)
// check if they have low security enabled
scan_user(usr)
if(!ticks_left_locked_down && held_card)
var/tried_account_num = text2num(href_list["account_num"])
if(!tried_account_num)
tried_account_num = held_card.associated_account_number
var/tried_pin = text2num(href_list["account_pin"])
authenticated_account = attempt_account_access(tried_account_num, tried_pin, held_card && held_card.associated_account_number == tried_account_num ? 2 : 1)
if(!authenticated_account)
number_incorrect_tries++
if(previous_account_number == tried_account_num)
if(number_incorrect_tries > max_pin_attempts)
//lock down the atm
ticks_left_locked_down = 30
playsound(src, 'sound/machines/buzz-two.ogg', 50, 1)
authenticated_account = attempt_account_access(tried_account_num, tried_pin, held_card && held_card.associated_account_number == tried_account_num ? 2 : 1)
if(!authenticated_account)
number_incorrect_tries++
if(previous_account_number == tried_account_num)
if(number_incorrect_tries > max_pin_attempts)
//lock down the atm
ticks_left_locked_down = 30
playsound(src, 'sound/machines/buzz-two.ogg', 50, 1)
//create an entry in the account transaction log
var/datum/money_account/failed_account = linked_db.get_account(tried_account_num)
if(failed_account)
var/datum/transaction/T = new()
T.target_name = failed_account.owner_name
T.purpose = "Unauthorised login attempt"
T.source_terminal = machine_id
T.date = current_date_string
T.time = worldtime2text()
failed_account.transaction_log.Add(T)
//create an entry in the account transaction log
var/datum/money_account/failed_account = linked_db.get_account(tried_account_num)
if(failed_account)
var/datum/transaction/T = new()
T.target_name = failed_account.owner_name
T.purpose = "Unauthorised login attempt"
T.source_terminal = machine_id
T.date = current_date_string
T.time = worldtime2text()
failed_account.transaction_log.Add(T)
else
to_chat(usr, "\red [bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.")
previous_account_number = tried_account_num
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1)
else
to_chat(usr, "\red [bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.")
previous_account_number = tried_account_num
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1)
to_chat(usr, "\red [bicon(src)] incorrect pin/account combination entered.")
number_incorrect_tries = 0
else
to_chat(usr, "\red [bicon(src)] incorrect pin/account combination entered.")
number_incorrect_tries = 0
else
playsound(src, 'sound/machines/twobeep.ogg', 50, 1)
ticks_left_timeout = 120
view_screen = NO_SCREEN
playsound(src, 'sound/machines/twobeep.ogg', 50, 1)
ticks_left_timeout = 120
view_screen = NO_SCREEN
//create a transaction log entry
var/datum/transaction/T = new()
T.target_name = authenticated_account.owner_name
T.purpose = "Remote terminal access"
T.source_terminal = machine_id
T.date = current_date_string
T.time = worldtime2text()
authenticated_account.transaction_log.Add(T)
//create a transaction log entry
var/datum/transaction/T = new()
T.target_name = authenticated_account.owner_name
T.purpose = "Remote terminal access"
T.source_terminal = machine_id
T.date = current_date_string
T.time = worldtime2text()
authenticated_account.transaction_log.Add(T)
to_chat(usr, "\blue [bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'")
to_chat(usr, "\blue [bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'")
previous_account_number = tried_account_num
previous_account_number = tried_account_num
if("withdrawal")
var/amount = max(text2num(href_list["funds_amount"]),0)
if(amount <= 0)
@@ -404,3 +406,5 @@ log transactions
T.date = current_date_string
T.time = worldtime2text()
authenticated_account.transaction_log.Add(T)
view_screen = NO_SCREEN
+10 -10
View File
@@ -182,13 +182,13 @@ var/global/list/all_money_accounts = list()
// AUTOFIXED BY fix_string_idiocy.py
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:171: dat += "<i>[machine_id]</i><br>"
dat += {"<i>[machine_id]</i><br>
Confirm identity: <a href='?src=\ref[src];choice=insert_card'>[held_card ? held_card : "-----"]</a><br>"}
Confirm identity: <a href='?src=[UID()];choice=insert_card'>[held_card ? held_card : "-----"]</a><br>"}
// END AUTOFIX
if(access_level > 0)
// AUTOFIXED BY fix_string_idiocy.py
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:175: dat += "<a href='?src=\ref[src];toggle_activated=1'>[activated ? "Disable" : "Enable"] remote access</a><br>"
dat += {"<a href='?src=\ref[src];toggle_activated=1'>[activated ? "Disable" : "Enable"] remote access</a><br>
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:175: dat += "<a href='?src=[UID()];toggle_activated=1'>[activated ? "Disable" : "Enable"] remote access</a><br>"
dat += {"<a href='?src=[UID()];toggle_activated=1'>[activated ? "Disable" : "Enable"] remote access</a><br>
You may not edit accounts at this terminal, only create and view them.<br>"}
// END AUTOFIX
if(creating_new_account)
@@ -196,9 +196,9 @@ var/global/list/all_money_accounts = list()
// AUTOFIXED BY fix_string_idiocy.py
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:178: dat += "<br>"
dat += {"<br>
<a href='?src=\ref[src];choice=view_accounts_list;'>Return to accounts list</a>
<form name='create_account' action='?src=\ref[src]' method='get'>
<input type='hidden' name='src' value='\ref[src]'>
<a href='?src=[UID()];choice=view_accounts_list;'>Return to accounts list</a>
<form name='create_account' action='?src=[UID()]' method='get'>
<input type='hidden' name='src' value='[UID()]'>
<input type='hidden' name='choice' value='finalise_create_account'>
<b>Holder name:</b> <input type='text' id='holder_name' name='holder_name' style='width:250px; background-color:white;'><br>
<b>Initial funds:</b> <input type='text' id='starting_funds' name='starting_funds' style='width:250px; background-color:white;'> (subtracted from station account)<br>
@@ -212,7 +212,7 @@ var/global/list/all_money_accounts = list()
// AUTOFIXED BY fix_string_idiocy.py
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:190: dat += "<br>"
dat += {"<br>
<a href='?src=\ref[src];choice=view_accounts_list;'>Return to accounts list</a><hr>
<a href='?src=[UID()];choice=view_accounts_list;'>Return to accounts list</a><hr>
<b>Account number:</b> #[detailed_account_view.account_number]<br>
<b>Account holder:</b> [detailed_account_view.owner_name]<br>
<b>Account balance:</b> $[detailed_account_view.money]<br>
@@ -243,8 +243,8 @@ var/global/list/all_money_accounts = list()
else
// AUTOFIXED BY fix_string_idiocy.py
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:215: dat += "<a href='?src=\ref[src];choice=create_account;'>Create new account</a><br><br>"
dat += {"<a href='?src=\ref[src];choice=create_account;'>Create new account</a><br><br>
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:215: dat += "<a href='?src=[UID()];choice=create_account;'>Create new account</a><br><br>"
dat += {"<a href='?src=[UID()];choice=create_account;'>Create new account</a><br><br>
<table border=1 style='width:100%'>"}
// END AUTOFIX
for(var/i=1, i<=all_money_accounts.len, i++)
@@ -255,7 +255,7 @@ var/global/list/all_money_accounts = list()
dat += {"<tr>
<td>#[D.account_number]</td>
<td>[D.owner_name]</td>
<td><a href='?src=\ref[src];choice=view_account_detail;account_index=[i]'>View in detail</a></td>
<td><a href='?src=[UID()];choice=view_account_detail;account_index=[i]'>View in detail</a></td>
</tr>"}
// END AUTOFIX
dat += "</table>"
+9 -7
View File
@@ -76,11 +76,17 @@
/obj/machinery/computer/account_database/attack_hand(mob/user as mob)
ui_interact(user)
/obj/machinery/computer/account_database/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1)
/obj/machinery/computer/account_database/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640)
ui.open()
/obj/machinery/computer/account_database/ui_data(mob/user, datum/topic_state/state = default_state)
var/data[0]
data["src"] = "\ref[src]"
data["src"] = UID()
data["id_inserted"] = !!held_card
data["id_card"] = held_card ? text("[held_card.registered_name], [held_card.assignment]") : "-----"
data["access_level"] = get_access_level(user)
@@ -122,11 +128,7 @@
if(accounts.len > 0)
data["accounts"] = accounts
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640)
ui.set_initial_data(data)
ui.open()
return data
/obj/machinery/computer/account_database/Topic(href, href_list)
if(..())
+11 -11
View File
@@ -70,8 +70,8 @@
if(transaction_locked)
// AUTOFIXED BY fix_string_idiocy.py
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\EFTPOS.dm:59: dat += "<a href='?src=\ref[src];choice=toggle_lock'>Reset[transaction_paid ? "" : " (authentication required)"]</a><br><br>"
dat += {"<a href='?src=\ref[src];choice=toggle_lock'>Reset[transaction_paid ? "" : " (authentication required)"]</a><br><br>
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\EFTPOS.dm:59: dat += "<a href='?src=[UID()];choice=toggle_lock'>Reset[transaction_paid ? "" : " (authentication required)"]</a><br><br>"
dat += {"<a href='?src=[UID()];choice=toggle_lock'>Reset[transaction_paid ? "" : " (authentication required)"]</a><br><br>
Transaction purpose: <b>[transaction_purpose]</b><br>
Value: <b>$[transaction_amount]</b><br>
Linked account: <b>[linked_account ? linked_account.owner_name : "None"]</b><hr>"}
@@ -83,19 +83,19 @@
// AUTOFIXED BY fix_string_idiocy.py
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\EFTPOS.dm:67: dat += "<i>Swipe your card below the line to finish this transaction.</i><hr>"
dat += {"<i>Swipe your card below the line to finish this transaction.</i><hr>
<a href='?src=\ref[src];choice=scan_card'>\[------\]</a>"}
<a href='?src=[UID()];choice=scan_card'>\[------\]</a>"}
// END AUTOFIX
else
// AUTOFIXED BY fix_string_idiocy.py
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\EFTPOS.dm:70: dat += "<a href='?src=\ref[src];choice=toggle_lock'>Lock in new transaction</a><br><br>"
dat += {"<a href='?src=\ref[src];choice=toggle_lock'>Lock in new transaction</a><br><br>
Transaction purpose: <a href='?src=\ref[src];choice=trans_purpose'>[transaction_purpose]</a><br>
Value: <a href='?src=\ref[src];choice=trans_value'>$[transaction_amount]</a><br>
Linked account: <a href='?src=\ref[src];choice=link_account'>[linked_account ? linked_account.owner_name : "None"]</a><hr>
<a href='?src=\ref[src];choice=change_code'>Change access code</a><br>
<a href='?src=\ref[src];choice=change_id'>Change EFTPOS ID</a><br>
Scan card to reset access code <a href='?src=\ref[src];choice=reset'>\[------\]</a>"}
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\EFTPOS.dm:70: dat += "<a href='?src=[UID()];choice=toggle_lock'>Lock in new transaction</a><br><br>"
dat += {"<a href='?src=[UID()];choice=toggle_lock'>Lock in new transaction</a><br><br>
Transaction purpose: <a href='?src=[UID()];choice=trans_purpose'>[transaction_purpose]</a><br>
Value: <a href='?src=[UID()];choice=trans_value'>$[transaction_amount]</a><br>
Linked account: <a href='?src=[UID()];choice=link_account'>[linked_account ? linked_account.owner_name : "None"]</a><hr>
<a href='?src=[UID()];choice=change_code'>Change access code</a><br>
<a href='?src=[UID()];choice=change_id'>Change EFTPOS ID</a><br>
Scan card to reset access code <a href='?src=[UID()];choice=reset'>\[------\]</a>"}
// END AUTOFIX
user << browse(dat,"window=eftpos")
else
+20 -20
View File
@@ -224,8 +224,8 @@ var/const/POS_HEADER = {"<html>
receipt += myArea.name
receipt += "</fieldset>"
receipt += {"<fieldset><legend>Order Data</legend>
<form action="?src=\ref[src]" method="get">
<input type="hidden" name="src" value="\ref[src]" />
<form action="?src=[UID()]" method="get">
<input type="hidden" name="src" value="[UID()]" />
<table>
<tr class=\"first\">
<th class=\"first\">Item</th>
@@ -241,10 +241,10 @@ var/const/POS_HEADER = {"<html>
var/linetotal=LI.units*LI.price
receipt += {"<tr class=\"[(i%2)?"even":"odd"]\">
<th>[LI.name]</th>
<td><a href="?src=\ref[src];setunits=[i]">[LI.units]</a></td>
<td><a href="?src=[UID()];setunits=[i]">[LI.units]</a></td>
<td>$[num2septext(LI.price)]</td>
<td>$[num2septext(linetotal)]</td>
<td><a href="?src=\ref[src];removefromorder=[i]" style="color:red;">&times;</a></td>
<td><a href="?src=[UID()];removefromorder=[i]" style="color:red;">&times;</a></td>
</tr>"}
subtotal += linetotal
var/taxes = POS_TAX_RATE*subtotal
@@ -280,8 +280,8 @@ var/const/POS_HEADER = {"<html>
/obj/machinery/pos/proc/ProductsScreen()
var/dat={"<fieldset><legend>Product List</legend>
<form action="?src=\ref[src]" method="get">
<input type="hidden" name="src" value="\ref[src]" />
<form action="?src=[UID()]" method="get">
<input type="hidden" name="src" value="[UID()]" />
<table>
<tr class=\"first\">
<th class=\"first\">Item</th>
@@ -292,17 +292,17 @@ var/const/POS_HEADER = {"<html>
for(var/i in products)
var/line_item/LI = products[i]
dat += {"<tr class=\"[(i%2)?"even":"odd"]\">
<th><a href="?src=\ref[src];setpname=[i]">[LI.name]</a></th>
<td><a href="?src=\ref[src];setprice=[i]">$[num2septext(LI.price)]</a></td>
<th><a href="?src=[UID()];setpname=[i]">[LI.name]</a></th>
<td><a href="?src=[UID()];setprice=[i]">$[num2septext(LI.price)]</a></td>
<td>[LI.units]</td>
<td><a href="?src=\ref[src];rmproduct=[i]" style="color:red;">&times;</a></td>
<td><a href="?src=[UID()];rmproduct=[i]" style="color:red;">&times;</a></td>
</tr>"}
dat += {"</table>
<b>New Product:</b><br />
<label for="name">Name:</label> <input type="textbox" name="name" value=""/><br />
<label for="name">Price:</label> $<input type="textbox" name="price" value="0.00" /><br />
<input type="submit" name="act" value="Add Product" /><br />
<a href="?src=\ref[src];screen=[POS_SCREEN_IMPORT]">Import</a> | <a href="?src=\ref[src];screen=[POS_SCREEN_EXPORT]">Export</a>
<a href="?src=[UID()];screen=[POS_SCREEN_IMPORT]">Import</a> | <a href="?src=[UID()];screen=[POS_SCREEN_EXPORT]">Export</a>
</form>
</fieldset>"}
return dat
@@ -314,15 +314,15 @@ var/const/POS_HEADER = {"<html>
var/line_item/LI = products[i]
dat += "[LI.name],[LI.price]\n"
dat += {"</textarea>
<a href="?src=\ref[src];screen=[POS_SCREEN_PRODUCTS]">OK</a>
<a href="?src=[UID()];screen=[POS_SCREEN_PRODUCTS]">OK</a>
</fieldset>"}
return dat
/obj/machinery/pos/proc/ImportScreen()
var/dat={"<fieldset>
<legend>Import Products as CSV</legend>
<form action="?src=\ref[src]" method="get">
<input type="hidden" name="src" value="\ref[src]" />
<form action="?src=[UID()]" method="get">
<input type="hidden" name="src" value="[UID()]" />
<textarea name="csv"></textarea>
<p>Data must be in the form of a CSV, with no headers or quotation marks.</p>
<p>First column must be product names, second must be prices as an unformatted number (####.##)</p>
@@ -333,11 +333,11 @@ var/const/POS_HEADER = {"<html>
return dat
/obj/machinery/pos/proc/FinalizeScreen()
return "<center><b>Waiting for Credit</b><br /><a href=\"?src=\ref[src];act=Reset\">Cancel</a></center>"
return "<center><b>Waiting for Credit</b><br /><a href=\"?src=[UID()];act=Reset\">Cancel</a></center>"
/obj/machinery/pos/proc/SettingsScreen()
var/dat={"<form action="?src=\ref[src]" method="get">
<input type="hidden" name="src" value="\ref[src]" />
var/dat={"<form action="?src=[UID()]" method="get">
<input type="hidden" name="src" value="[UID()]" />
<fieldset>
<legend>Account Settings</legend>
<div>
@@ -366,14 +366,14 @@ var/const/POS_HEADER = {"<html>
user.set_machine(src)
var/logindata=""
if(logged_in)
logindata={"<a href="?src=\ref[src];logout=1">[logged_in.name]</a>"}
logindata={"<a href="?src=[UID()];logout=1">[logged_in.name]</a>"}
var/dat = POS_HEADER + {"
<div class="navbar">
[worldtime2text()], [current_date_string]<br />
[logindata]
<a href="?src=\ref[src];screen=[POS_SCREEN_ORDER]">Order</a> |
<a href="?src=\ref[src];screen=[POS_SCREEN_PRODUCTS]">Products</a> |
<a href="?src=\ref[src];screen=[POS_SCREEN_SETTINGS]">Settings</a>
<a href="?src=[UID()];screen=[POS_SCREEN_ORDER]">Order</a> |
<a href="?src=[UID()];screen=[POS_SCREEN_PRODUCTS]">Products</a> |
<a href="?src=[UID()];screen=[POS_SCREEN_SETTINGS]">Settings</a>
</div>"}
switch(screen)
if(POS_SCREEN_LOGIN) dat += LoginScreen()
+8 -4
View File
@@ -141,9 +141,11 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = null
var/exception/exc
var/desc = ""
var/srcRef
var/srcUID
var/srcType
var/turf/srcLoc
var/usrRef
var/usrUID
var/turf/usrLoc
var/isSkipCount
@@ -163,10 +165,12 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = null
desc += "&nbsp;&nbsp;" + html_encode(line) + "<br>"
if(istype(e_src))
srcRef = "\ref[e_src]"
srcUID = e_src.UID()
srcType = e_src.type
srcLoc = get_turf(e_src)
if(usr)
usrRef = "\ref[usr]"
usrUID = usr.UID()
usrLoc = get_turf(usr)
/datum/ErrorViewer/ErrorEntry/showTo(var/user, var/datum/ErrorViewer/back_to, var/linear)
@@ -175,19 +179,19 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = null
var/html = buildHeader(back_to, linear)
html += "<div class='runtime'>[html_encode(name)]<br>[desc]</div>"
if(srcRef)
html += "<br>src: <a href='?_src_=vars;Vars=[srcRef]'>VV</a>"
html += "<br>src: <a href='?_src_=vars;Vars=[srcUID]'>VV</a>"
if(ispath(srcType, /mob))
html += " <a href='?_src_=holder;adminplayeropts=[srcRef]'>PP</a>"
html += " <a href='?_src_=holder;adminplayerobservefollow=[srcRef]'>Follow</a>"
if(istype(srcLoc))
html += "<br>src.loc: <a href='?_src_=vars;Vars=\ref[srcLoc]'>VV</a>"
html += "<br>src.loc: <a href='?_src_=vars;Vars=[srcLoc.UID()]'>VV</a>"
html += " <a href='?_src_=holder;adminplayerobservecoodjump=1;X=[srcLoc.x];Y=[srcLoc.y];Z=[srcLoc.z]'>JMP</a>"
if(usrRef)
html += "<br>usr: <a href='?_src_=vars;Vars=[usrRef]'>VV</a>"
html += "<br>usr: <a href='?_src_=vars;Vars=[usrUID]'>VV</a>"
html += " <a href='?_src_=holder;adminplayeropts=[usrRef]'>PP</a>"
html += " <a href='?_src_=holder;adminplayerobservefollow=[usrRef]'>Follow</a>"
if(istype(usrLoc))
html += "<br>usr.loc: <a href='?_src_=vars;Vars=\ref[usrLoc]'>VV</a>"
html += "<br>usr.loc: <a href='?_src_=vars;Vars=[usrLoc.UID()]'>VV</a>"
html += " <a href='?_src_=holder;adminplayerobservecoodjump=1;X=[usrLoc.x];Y=[usrLoc.y];Z=[usrLoc.z]'>JMP</a>"
browseTo(user, html)
+2 -4
View File
@@ -1,5 +1,3 @@
/var/global/sent_aliens_to_station = 0
/datum/event/alien_infestation
announceWhen = 400
var/spawncount = 1
@@ -7,8 +5,8 @@
/datum/event/alien_infestation/setup()
announceWhen = rand(announceWhen, announceWhen + 50)
spawncount = rand(1, 2)
sent_aliens_to_station = 1
if(prob(50))
spawncount++
/datum/event/alien_infestation/announce()
if(successSpawn)
+22 -22
View File
@@ -90,11 +90,11 @@
to_chat(world, message)
/datum/event_manager/proc/GetInteractWindow()
var/html = "<A align='right' href='?src=\ref[src];refresh=1'>Refresh</A>"
var/html = "<A align='right' href='?src=[UID()];refresh=1'>Refresh</A>"
if(selected_event_container)
var/event_time = max(0, selected_event_container.next_event_time - world.time)
html += "<A align='right' href='?src=\ref[src];back=1'>Back</A><br>"
html += "<A align='right' href='?src=[UID()];back=1'>Back</A><br>"
html += "Time till start: [round(event_time / 600, 0.1)]<br>"
html += "<div class='block'>"
html += "<h2>Available [severity_to_string[selected_event_container.severity]] Events (queued & running events will not be displayed)</h2>"
@@ -103,13 +103,13 @@
for(var/datum/event_meta/EM in selected_event_container.available_events)
html += "<tr>"
html += "<td>[EM.name]</td>"
html += "<td><A align='right' href='?src=\ref[src];set_weight=\ref[EM]'>[EM.weight]</A></td>"
html += "<td><A align='right' href='?src=[UID()];set_weight=\ref[EM]'>[EM.weight]</A></td>"
html += "<td>[EM.min_weight]</td>"
html += "<td>[EM.max_weight]</td>"
html += "<td><A align='right' href='?src=\ref[src];toggle_oneshot=\ref[EM]'>[EM.one_shot]</A></td>"
html += "<td><A align='right' href='?src=\ref[src];toggle_enabled=\ref[EM]'>[EM.enabled]</A></td>"
html += "<td><A align='right' href='?src=[UID()];toggle_oneshot=\ref[EM]'>[EM.one_shot]</A></td>"
html += "<td><A align='right' href='?src=[UID()];toggle_enabled=\ref[EM]'>[EM.enabled]</A></td>"
html += "<td><span class='alert'>[EM.get_weight(number_active_with_role())]</span></td>"
html += "<td><A align='right' href='?src=\ref[src];remove=\ref[EM];EC=\ref[selected_event_container]'>Remove</A></td>"
html += "<td><A align='right' href='?src=[UID()];remove=\ref[EM];EC=\ref[selected_event_container]'>Remove</A></td>"
html += "</tr>"
html += "</table>"
html += "</div>"
@@ -119,16 +119,16 @@
html += "<table[table_options]>"
html += "<tr [head_options]><td[row_options2]>Name</td><td[row_options2]>Type</td><td[row_options1]>Weight</td><td[row_options1]>OneShot</td></tr>"
html += "<tr>"
html += "<td><A align='right' href='?src=\ref[src];set_name=\ref[new_event]'>[new_event.name ? new_event.name : "Enter Event"]</A></td>"
html += "<td><A align='right' href='?src=\ref[src];set_type=\ref[new_event]'>[new_event.event_type ? new_event.event_type : "Select Type"]</A></td>"
html += "<td><A align='right' href='?src=\ref[src];set_weight=\ref[new_event]'>[new_event.weight ? new_event.weight : 0]</A></td>"
html += "<td><A align='right' href='?src=\ref[src];toggle_oneshot=\ref[new_event]'>[new_event.one_shot]</A></td>"
html += "<td><A align='right' href='?src=[UID()];set_name=\ref[new_event]'>[new_event.name ? new_event.name : "Enter Event"]</A></td>"
html += "<td><A align='right' href='?src=[UID()];set_type=\ref[new_event]'>[new_event.event_type ? new_event.event_type : "Select Type"]</A></td>"
html += "<td><A align='right' href='?src=[UID()];set_weight=\ref[new_event]'>[new_event.weight ? new_event.weight : 0]</A></td>"
html += "<td><A align='right' href='?src=[UID()];toggle_oneshot=\ref[new_event]'>[new_event.one_shot]</A></td>"
html += "</tr>"
html += "</table>"
html += "<A align='right' href='?src=\ref[src];add=\ref[selected_event_container]'>Add</A><br>"
html += "<A align='right' href='?src=[UID()];add=\ref[selected_event_container]'>Add</A><br>"
html += "</div>"
else
html += "<A align='right' href='?src=\ref[src];toggle_report=1'>Round End Report: [report_at_round_end ? "On": "Off"]</A><br>"
html += "<A align='right' href='?src=[UID()];toggle_report=1'>Round End Report: [report_at_round_end ? "On": "Off"]</A><br>"
html += "<div class='block'>"
html += "<h2>Event Start</h2>"
@@ -142,16 +142,16 @@
html += "<td>[worldtime2text(max(EC.next_event_time, world.time))]</td>"
html += "<td>[round(next_event_at / 600, 0.1)]</td>"
html += "<td>"
html += "<A align='right' href='?src=\ref[src];dec_timer=2;event=\ref[EC]'>--</A>"
html += "<A align='right' href='?src=\ref[src];dec_timer=1;event=\ref[EC]'>-</A>"
html += "<A align='right' href='?src=\ref[src];inc_timer=1;event=\ref[EC]'>+</A>"
html += "<A align='right' href='?src=\ref[src];inc_timer=2;event=\ref[EC]'>++</A>"
html += "<A align='right' href='?src=[UID()];dec_timer=2;event=\ref[EC]'>--</A>"
html += "<A align='right' href='?src=[UID()];dec_timer=1;event=\ref[EC]'>-</A>"
html += "<A align='right' href='?src=[UID()];inc_timer=1;event=\ref[EC]'>+</A>"
html += "<A align='right' href='?src=[UID()];inc_timer=2;event=\ref[EC]'>++</A>"
html += "</td>"
html += "<td>"
html += "<A align='right' href='?src=\ref[src];pause=\ref[EC]'>[EC.delayed ? "Resume" : "Pause"]</A>"
html += "<A align='right' href='?src=[UID()];pause=\ref[EC]'>[EC.delayed ? "Resume" : "Pause"]</A>"
html += "</td>"
html += "<td>"
html += "<A align='right' href='?src=\ref[src];interval=\ref[EC]'>[EC.delay_modifier]</A>"
html += "<A align='right' href='?src=[UID()];interval=\ref[EC]'>[EC.delay_modifier]</A>"
html += "</td>"
html += "</tr>"
html += "</table>"
@@ -166,9 +166,9 @@
var/datum/event_meta/EM = EC.next_event
html += "<tr>"
html += "<td>[severity_to_string[severity]]</td>"
html += "<td><A align='right' href='?src=\ref[src];select_event=\ref[EC]'>[EM ? EM.name : "Random"]</A></td>"
html += "<td><A align='right' href='?src=\ref[src];view_events=\ref[EC]'>View</A></td>"
html += "<td><A align='right' href='?src=\ref[src];clear=\ref[EC]'>Clear</A></td>"
html += "<td><A align='right' href='?src=[UID()];select_event=\ref[EC]'>[EM ? EM.name : "Random"]</A></td>"
html += "<td><A align='right' href='?src=[UID()];view_events=\ref[EC]'>View</A></td>"
html += "<td><A align='right' href='?src=[UID()];clear=\ref[EC]'>Clear</A></td>"
html += "</tr>"
html += "</table>"
html += "</div>"
@@ -190,7 +190,7 @@
html += "<td>[EM.name]</td>"
html += "<td>[no_end ? "N/A" : worldtime2text(ends_at)]</td>"
html += "<td>[no_end ? "N/A" : ends_in]</td>"
html += "<td><A align='right' href='?src=\ref[src];stop=\ref[E]'>Stop</A></td>"
html += "<td><A align='right' href='?src=[UID()];stop=\ref[E]'>Stop</A></td>"
html += "</tr>"
html += "</table>"
html += "</div>"
+2 -2
View File
@@ -6,7 +6,7 @@
var/armor = H.getarmor(type = "rad")
if((H.species.flags & RADIMMUNE) || armor >= 75) // Leave radiation-immune species/rad armored players completely unaffected
continue
H.hallucination += rand(50, 100)
H.AdjustHallucinate(rand(50, 100))
/datum/event/mass_hallucination/announce()
command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
+7 -7
View File
@@ -279,11 +279,11 @@ Gunshots/explosions/opening doors/less rare audio (done)
/obj/effect/hallucination/simple/singularity/proc/Eat(atom/OldLoc, Dir)
var/target_dist = get_dist(src,target)
if(target_dist<=3) //"Eaten"
target.sleeping = 20
target.Sleeping(20)
target.hal_crit = 1
target.hal_screwyhud = 1
spawn(rand(50,100))
target.sleeping = 0
target.SetSleeping(0)
target.hal_crit = 0
target.hal_screwyhud = 0
@@ -480,7 +480,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
my_target.show_message("<span class='danger'>[src.name] has attacked [my_target] with [weapon_name]!</span>", 1)
my_target.staminaloss += 30
if(prob(20))
my_target.eye_blurry += 3
my_target.AdjustEyeBlurry(3)
if(prob(33))
if(!locate(/obj/effect/overlay) in my_target.loc)
fake_blood(my_target)
@@ -565,13 +565,13 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
person = H
people += H
if(person) //Basic talk
to_chat(target, target.hear_say(pick(speak_messages),language = pick(person.languages),speaker = person))
target.hear_say(pick(speak_messages),language = pick(person.languages),speaker = person)
else // Radio talk
var/list/humans = list()
for(var/mob/living/carbon/human/H in living_mob_list)
humans += H
person = pick(humans)
to_chat(target, target.hear_radio(pick(radio_messages),language = pick(person.languages),speaker = person, part_a = "<span class='[frequency_span_class(PUB_FREQ)]'><b>\[[get_frequency_name(PUB_FREQ)]\]</b> <span class='name'>", part_b = "</span> <span class='message'>"))
target.hear_radio(pick(radio_messages),language = pick(person.languages),speaker = person, part_a = "<span class='[frequency_span_class(PUB_FREQ)]'><b>\[[get_frequency_name(PUB_FREQ)]\]</b> <span class='name'>", part_b = "</span> <span class='message'>")
qdel(src)
/obj/effect/hallucination/message
@@ -752,11 +752,11 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
halimage = null
if("death")
//Fake death
src.sleeping = 20
Sleeping(20)
hal_crit = 1
hal_screwyhud = 1
spawn(rand(50,100))
src.sleeping = 0
SetSleeping(0)
hal_crit = 0
hal_screwyhud = 0
if("husks")
@@ -327,15 +327,15 @@
dat += "</tr>"
dat += "<tr>"
if(containers["glass bottle"])
dat += "<td><A href='?src=\ref[src];dispense=1'>Dispense</a></td>"
dat += "<td><A href='?src=[UID()];dispense=1'>Dispense</a></td>"
else
dat += "<td>Out of stock</td>"
if(containers["plastic bottle"])
dat += "<td><A href='?src=\ref[src];dispense=2'>Dispense</a></td>"
dat += "<td><A href='?src=[UID()];dispense=2'>Dispense</a></td>"
else
dat += "<td>Out of stock</td>"
if(containers["metal can"])
dat += "<td><A href='?src=\ref[src];dispense=3'>Dispense</a></td>"
dat += "<td><A href='?src=[UID()];dispense=3'>Dispense</a></td>"
else
dat += "<td>Out of stock</td>"
dat += "</tr>"
@@ -355,7 +355,7 @@
dat += "<td>Tray Empty</td>"
if(slots[1] && slots[2] && slots[3])
dat += "<td><A href='?src=\ref[src];process=1'>Process Ingredients</a></td>"
dat += "<td><A href='?src=[UID()];process=1'>Process Ingredients</a></td>"
else
dat += "<td>Insufficient Ingredients</td>"
dat += "</tr>"
@@ -363,10 +363,10 @@
dat += "<tr>"
for(var/i = 1, i <= slots.len, i++)
if(slots[i])
dat += "<td><A href='?src=\ref[src];eject=[i]'>Eject</a></td>"
dat += "<td><A href='?src=[UID()];eject=[i]'>Eject</a></td>"
else
dat += "<td>N/A</td>"
dat += "<td><A href='?src=\ref[src];eject=0'>Eject All</a></td>"
dat += "<td><A href='?src=[UID()];eject=0'>Eject All</a></td>"
dat += "</tr>"
dat += "</table>"
dat += "<hr>"
@@ -81,7 +81,7 @@
refill = reagents.get_master_reagent_id()
refillName = reagents.get_master_reagent_name()
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "<span class='notice'> You transfer [trans] units of the solution to [target].</span>")
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
@@ -102,22 +102,22 @@
if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
return
if(is_hot(I))
if(src.reagents)
src.reagents.chem_temp += 15
if(reagents)
reagents.chem_temp += 15
to_chat(user, "<span class='notice'>You heat [src] with [I].</span>")
src.reagents.handle_reactions()
reagents.handle_reactions()
/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
if(!..(user, 1))
return
if(!reagents || reagents.total_volume==0)
if(!reagents || reagents.total_volume == 0)
to_chat(user, "<span class='notice'> \The [src] is empty!</span>")
else if(reagents.total_volume<=src.volume/4)
else if(reagents.total_volume <= volume/4)
to_chat(user, "<span class='notice'> \The [src] is almost empty!</span>")
else if(reagents.total_volume<=src.volume*0.66)
else if(reagents.total_volume <= volume*0.66)
to_chat(user, "<span class='notice'> \The [src] is half full!</span>")// We're all optimistic, right?!
else if(reagents.total_volume<=src.volume*0.90)
else if(reagents.total_volume <= volume*0.90)
to_chat(user, "<span class='notice'> \The [src] is almost full!</span>")
else
to_chat(user, "<span class='notice'> \The [src] is full!</span>")
@@ -22,9 +22,9 @@
else
user.drop_item()
user.put_in_active_hand(B)
B.icon_state = src.icon_state
B.icon_state = icon_state
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
var/icon/I = new('icons/obj/drinks.dmi', icon_state)
I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
B.icon = I
@@ -99,11 +99,11 @@
//Display an attack message.
if(target != user)
target.visible_message("<span class='danger'>[user] has hit [target][head_attack_message] with a bottle of [src.name]!</span>", \
"<span class='userdanger'>[user] has hit [target][head_attack_message] with a bottle of [src.name]!</span>")
target.visible_message("<span class='danger'>[user] has hit [target][head_attack_message] with a bottle of [name]!</span>", \
"<span class='userdanger'>[user] has hit [target][head_attack_message] with a bottle of [name]!</span>")
else
user.visible_message("<span class='danger'>[target] hits \himself with a bottle of [src.name][head_attack_message]!</span>", \
"<span class='userdanger'>[target] hits \himself with a bottle of [src.name][head_attack_message]!</span>")
user.visible_message("<span class='danger'>[target] hits \himself with a bottle of [name][head_attack_message]!</span>", \
"<span class='userdanger'>[target] hits \himself with a bottle of [name][head_attack_message]!</span>")
//Attack logs
add_logs(user, target, "attacked", src)
@@ -284,7 +284,7 @@
desc = "A throwing weapon used to ignite things, typically filled with an accelerant. Recommended highly by rioters and revolutionaries. Light and toss."
icon_state = "vodkabottle"
list_reagents = list()
var/list/accelerants = list(/datum/reagent/ethanol,/datum/reagent/fuel,/datum/reagent/clf3,/datum/reagent/phlogiston,
var/list/accelerants = list(/datum/reagent/consumable/ethanol,/datum/reagent/fuel,/datum/reagent/clf3,/datum/reagent/phlogiston,
/datum/reagent/napalm,/datum/reagent/hellwater,/datum/reagent/plasma,/datum/reagent/plasma_dust)
var/active = 0
@@ -9,7 +9,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/attack_self(mob/user)
if(canopened == 0)
playsound(src.loc,'sound/effects/canopen.ogg', rand(10,50), 1)
playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
to_chat(user, "<span class='notice'>You open the drink with an audible pop!</span>")
canopened = 1
flags |= OPENCONTAINER
@@ -32,7 +32,7 @@
if(canopened == 0)
to_chat(user, "<span class='notice'>You need to open the drink!</span>")
return
else if(M == user && !src.reagents.total_volume && user.a_intent == "harm" && user.zone_sel.selecting == "head")
else if(M == user && !reagents.total_volume && user.a_intent == "harm" && user.zone_sel.selecting == "head")
user.visible_message("<span class='warning'>[user] crushes ["\the [src]"] on \his forehead!</span>", "<span class='notice'>You crush \the [src] on your forehead.</span>")
crush(user)
return
@@ -36,523 +36,12 @@
reagents.clear_reagents()
extinguish()
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change() // *scream
if(reagents.reagent_list.len > 0)
switch(reagents.get_master_reagent_id())
if("beer")
icon_state = "beerglass"
name = "Beer glass"
desc = "A freezing pint of beer"
if("cider")
icon_state = "rewriter"
name = "Cider"
desc = "a refreshing glass of traditional cider"
if("beer2")
icon_state = "beerglass"
name = "Beer glass"
desc = "A freezing pint of beer"
if("ale")
icon_state = "aleglass"
name = "Ale glass"
desc = "A freezing pint of delicious Ale"
if("milk")
icon_state = "glass_white"
name = "Glass of milk"
desc = "White and nutritious goodness!"
if("cream")
icon_state = "glass_white"
name = "Glass of cream"
desc = "Ewwww..."
if("chocolate")
icon_state = "chocolateglass"
name = "Glass of chocolate"
desc = "Tasty"
if("hot_coco")
icon_state = "hot_coco"
name = "Glass of hot coco"
desc = "Delicious and cozy"
if("lemonjuice")
icon_state = "lemonglass"
name = "Glass of lemonjuice"
desc = "Sour..."
if("cola")
icon_state = "glass_brown"
name = "Glass of Space Cola"
desc = "A glass of refreshing Space Cola"
if("nuka_cola")
icon_state = "nuka_colaglass"
name = "Nuka Cola"
desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland"
if("orangejuice")
icon_state = "glass_orange"
name = "Glass of Orange juice"
desc = "Vitamins! Yay!"
if("tomatojuice")
icon_state = "glass_red"
name = "Glass of Tomato juice"
desc = "Are you sure this is tomato juice?"
if("blood")
icon_state = "glass_red"
name = "Glass of Tomato juice"
desc = "Are you sure this is tomato juice?"
if("limejuice")
icon_state = "glass_green"
name = "Glass of Lime juice"
desc = "A glass of sweet-sour lime juice."
if("whiskey")
icon_state = "whiskeyglass"
name = "Glass of whiskey"
desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
if("gin")
icon_state = "ginvodkaglass"
name = "Glass of gin"
desc = "A crystal clear glass of Griffeater gin."
if("vodka")
icon_state = "ginvodkaglass"
name = "Glass of vodka"
desc = "The glass contain wodka. Xynta."
if("sake")
icon_state = "ginvodkaglass"
name = "Glass of Sake"
desc = "A glass of Sake."
if("goldschlager")
icon_state = "ginvodkaglass"
name = "Glass of goldschlager"
desc = "100 proof that teen girls will drink anything with gold in it."
if("wine")
icon_state = "wineglass"
name = "Glass of wine"
desc = "A very classy looking drink."
if("cognac")
icon_state = "cognacglass"
name = "Glass of cognac"
desc = "Damn, you feel like some kind of French aristocrat just by holding this."
if("kahlua")
icon_state = "kahluaglass"
name = "Glass of RR coffee Liquor"
desc = "DAMN, THIS THING LOOKS ROBUST"
if("vermouth")
icon_state = "vermouthglass"
name = "Glass of Vermouth"
desc = "You wonder why you're even drinking this straight."
if("triple_citrus")
icon_state = "triplecitrus"
name = "Glass of Triplecitrus Juice"
desc = "As colorful and healthy as it is delicious."
if("mojito")
icon_state = "mojito"
name = "Glass of Mojito"
desc = "Fresh from Spesscuba."
if("tequila")
icon_state = "tequilaglass"
name = "Glass of Tequila"
desc = "Now all that's missing is the weird colored shades!"
if("patron")
icon_state = "patronglass"
name = "Glass of Patron"
desc = "Drinking patron in the bar, with all the subpar ladies."
if("rum")
icon_state = "rumglass"
name = "Glass of Rum"
desc = "Now you want to Pray for a pirate suit, don't you?"
if("absinthe")
icon_state = "absinthebottle"
name = "Glass of Absinthe"
desc = "The green fairy is going to get you now!"
if("gintonic")
icon_state = "gintonicglass"
name = "Gin and Tonic"
desc = "A mild but still great cocktail. Drink up, like a true Englishman."
if("ginsonic")
icon_state = "ginsonic"
name = "Gin and Sonic"
desc = "An extremely high amperage drink. Absolutely not for the true Englishman."
if("whiskeycola")
icon_state = "whiskeycolaglass"
name = "Whiskey Cola"
desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
if("whiterussian")
icon_state = "whiterussianglass"
name = "White Russian"
desc = "A very nice looking drink. But that's just, like, your opinion, man."
if("screwdrivercocktail")
icon_state = "screwdriverglass"
name = "Screwdriver"
desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
if("bloodymary")
icon_state = "bloodymaryglass"
name = "Bloody Mary"
desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
if("martini")
icon_state = "martiniglass"
name = "Classic Martini"
desc = "Damn, the bartender even stirred it, not shook it."
if("vodkamartini")
icon_state = "martiniglass"
name = "Vodka martini"
desc ="A bastardisation of the classic martini. Still great."
if("gargleblaster")
icon_state = "gargleblasterglass"
name = "Pan-Galactic Gargle Blaster"
desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy."
if("bravebull")
icon_state = "bravebullglass"
name = "Brave Bull"
desc = "Tequila and Coffee liquor, brought together in a mouthwatering mixture. Drink up."
if("tequilasunrise")
icon_state = "tequilasunriseglass"
name = "Tequila Sunrise"
desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
if("toxinsspecial")
icon_state = "toxinsspecialglass"
name = "Toxins Special"
desc = "Whoah, this thing is on FIRE"
if("beepskysmash")
icon_state = "beepskysmashglass"
name = "Beepsky Smash"
desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
if("doctorsdelight")
icon_state = "doctorsdelightglass"
name = "Doctor's Delight"
desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place."
if("manlydorf")
icon_state = "manlydorfglass"
name = "The Manly Dorf"
desc = "A manly concotion made from Ale and Beer. Intended for true men only."
if("irishcream")
icon_state = "irishcreamglass"
name = "Irish Cream"
desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
if("cubalibre")
icon_state = "cubalibreglass"
name = "Cuba Libre"
desc = "A classic mix of rum and cola."
if("b52")
icon_state = "b52glass"
name = "B-52"
desc = "Kahlua, Irish Cream, and congac. You will get bombed."
if("atomicbomb")
icon_state = "atomicbombglass"
name = "Atomic Bomb"
desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
if("longislandicedtea")
icon_state = "longislandicedteaglass"
name = "Long Island Iced Tea"
desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
if("threemileisland")
icon_state = "threemileislandglass"
name = "Three Mile Island Ice Tea"
desc = "A glass of this is sure to prevent a meltdown."
if("margarita")
icon_state = "margaritaglass"
name = "Margarita"
desc = "On the rocks with salt on the rim. Arriba~!"
if("blackrussian")
icon_state = "blackrussianglass"
name = "Black Russian"
desc = "For the lactose-intolerant. Still as classy as a White Russian."
if("vodkatonic")
icon_state = "vodkatonicglass"
name = "Vodka and Tonic"
desc = "For when a gin and tonic isn't russian enough."
if("manhattan")
icon_state = "manhattanglass"
name = "Manhattan"
desc = "The Detective's undercover drink of choice. He never could stomach gin..."
if("manhattan_proj")
icon_state = "proj_manhattanglass"
name = "Manhattan Project"
desc = "A scienitst drink of choice, for thinking how to blow up the station."
if("ginfizz")
icon_state = "ginfizzglass"
name = "Gin Fizz"
desc = "Refreshingly lemony, deliciously dry."
if("irishcoffee")
icon_state = "irishcoffeeglass"
name = "Irish Coffee"
desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
if("suicider")
icon_state = "suicider"
name = "Suicider"
desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
if("whiskeysoda")
icon_state = "whiskeysodaglass2"
name = "Whiskey Soda"
desc = "Ultimate refreshment."
if("tonic")
icon_state = "glass_clear"
name = "Glass of Tonic Water"
desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
if("sodawater")
icon_state = "glass_clear"
name = "Glass of Soda Water"
desc = "Soda water. Why not make a scotch and soda?"
if("water")
icon_state = "glass_clear"
name = "Glass of Water"
desc = "The father of all refreshments."
if("spacemountainwind")
icon_state = "Space_mountain_wind_glass"
name = "Glass of Space Mountain Wind"
desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
if("thirteenloko")
icon_state = "thirteen_loko_glass"
name = "Glass of Thirteen Loko"
desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass"
if("dr_gibb")
icon_state = "dr_gibb_glass"
name = "Glass of Dr. Gibb"
desc = "Dr. Gibb. Not as dangerous as the name might imply."
if("space_up")
icon_state = "space-up_glass"
name = "Glass of Space-up"
desc = "Space-up. It helps keep your cool."
if("moonshine")
icon_state = "glass_clear"
name = "Moonshine"
desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
if("soymilk")
icon_state = "glass_white"
name = "Glass of soy milk"
desc = "White and nutritious soy goodness!"
if("berryjuice")
icon_state = "berryjuice"
name = "Glass of berry juice"
desc = "Berry juice. Or maybe its jam. Who cares?"
if("poisonberryjuice")
icon_state = "poisonberryjuice"
name = "Glass of poison berry juice"
desc = "A glass of deadly juice."
if("carrotjuice")
icon_state = "carrotjuice"
name = "Glass of carrot juice"
desc = "It is just like a carrot but without crunching."
if("potato")
icon_state = "glass_brown"
name = "Glass of potato juice"
desc = "Who in the hell requests this? Gross!"
if("banana")
icon_state = "banana"
name = "Glass of banana juice"
desc = "The raw essence of a banana. HONK"
if("bahama_mama")
icon_state = "bahama_mama"
name = "Bahama Mama"
desc = "Tropic cocktail"
if("singulo")
icon_state = "singulo"
name = "Singulo"
desc = "A blue-space beverage."
if("alliescocktail")
icon_state = "alliescocktail"
name = "Allies cocktail"
desc = "A drink made from your allies."
if("antifreeze")
icon_state = "antifreeze"
name = "Anti-freeze"
desc = "The ultimate refreshment."
if("barefoot")
icon_state = "b&p"
name = "Barefoot"
desc = "Barefoot and pregnant"
if("demonsblood")
icon_state = "demonsblood"
name = "Demons Blood"
desc = "Just looking at this thing makes the hair at the back of your neck stand up."
if("booger")
icon_state = "booger"
name = "Booger"
desc = "Ewww..."
if("snowwhite")
icon_state = "snowwhite"
name = "Snow White"
desc = "A cold refreshment."
if("aloe")
icon_state = "aloe"
name = "Aloe"
desc = "Very, very, very good."
if("andalusia")
icon_state = "andalusia"
name = "Andalusia"
desc = "A nice, strange named drink."
if("sbiten")
icon_state = "sbitenglass"
name = "Sbiten"
desc = "A spicy mix of Vodka and Spice. Very hot."
if("red_mead")
icon_state = "red_meadglass"
name = "Red Mead"
desc = "A True Vikings Beverage, though its color is strange."
if("mead")
icon_state = "meadglass"
name = "Mead"
desc = "A Vikings Beverage, though a cheap one."
if("iced_beer")
icon_state = "iced_beerglass"
name = "Iced Beer"
desc = "A beer so frosty, the air around it freezes."
if("grog")
icon_state = "grogglass"
name = "Grog"
desc = "A fine and cepa drink for Space."
if("soy_latte")
icon_state = "soy_latte"
name = "Soy Latte"
desc = "A nice and refrshing beverage while you are reading."
if("cafe_latte")
icon_state = "cafe_latte"
name = "Cafe Latte"
desc = "A nice, strong and refreshing beverage while you are reading."
if("cafe_mocha")
icon_state = "cafe_latte"
name = "Cafe Mocha"
desc = "The perfect blend of coffe, milk, and chocolate."
if("acidspit")
icon_state = "acidspitglass"
name = "Acid Spit"
desc = "A drink from Nanotrasen. Made from live aliens."
if("amasec")
icon_state = "amasecglass"
name = "Amasec"
desc = "Always handy before COMBAT!!!"
if("neurotoxin")
icon_state = "neurotoxinglass"
name = "Neurotoxin"
desc = "A drink that is guaranteed to knock you silly."
if("hippiesdelight")
icon_state = "hippiesdelightglass"
name = "Hippie's Delight"
desc = "A drink enjoyed by people during the 1960's."
if("bananahonk")
icon_state = "bananahonkglass"
name = "Banana Honk"
desc = "A drink from Banana Heaven."
if("silencer")
icon_state = "silencerglass"
name = "Silencer"
desc = "A drink from mime Heaven."
if("nothing")
icon_state = "nothing"
name = "Nothing"
desc = "Absolutely nothing."
if("devilskiss")
icon_state = "devilskiss"
name = "Devils Kiss"
desc = "Creepy time!"
if("changelingsting")
icon_state = "changelingsting"
name = "Changeling Sting"
desc = "A stingy drink."
if("irishcarbomb")
icon_state = "irishcarbomb"
name = "Irish Car Bomb"
desc = "An irish car bomb."
if("syndicatebomb")
icon_state = "syndicatebomb"
name = "Syndicate Bomb"
desc = "A syndicate bomb."
if("erikasurprise")
icon_state = "erikasurprise"
name = "Erika Surprise"
desc = "The surprise is, it's green!"
if("driestmartini")
icon_state = "driestmartiniglass"
name = "Driest Martini"
desc = "Only for the experienced. You think you see sand floating in the glass."
if("ice")
icon_state = "iceglass"
name = "Glass of ice"
desc = "Generally, you're supposed to put something else in there too..."
if("icecoffee")
icon_state = "icedcoffeeglass"
name = "Iced Coffee"
desc = "A drink to perk you up and refresh you!"
if("coffee")
icon_state = "glass_brown"
name = "Glass of coffee"
desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
if("bilk")
icon_state = "glass_brown"
name = "Glass of bilk"
desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
if("fuel")
icon_state = "dr_gibb_glass"
name = "Glass of welder fuel"
desc = "Unless you are an industrial tool, this is probably not safe for consumption."
if("brownstar")
icon_state = "brownstar"
name = "Brown Star"
desc = "Its not what it sounds like..."
if("tea")
icon_state = "glass_brown"
name = "Glass of Tea"
desc = "A glass of hot tea. Perhaps a cup with a handle would have been smarter?"
if("icetea")
icon_state = "icetea"
name = "Iced Tea"
desc = "No relation to a certain rap artist/ actor."
if("milkshake")
icon_state = "milkshake"
name = "Milkshake"
desc = "Glorious brainfreezing mixture."
if("lemonade")
icon_state = "lemonade"
name = "Lemonade"
desc = "Oh the nostalgia..."
if("kiraspecial")
icon_state = "kiraspecial"
name = "Kira Special"
desc = "Long live the guy who everyone had mistaken for a girl. Baka!"
if("rewriter")
icon_state = "rewriter"
name = "Rewriter"
desc = "The secert of the sanctuary of the Libarian..."
if("applejack")
icon_state = "cognacglass"
name = "Glass of applejack"
desc = "When cider isn't strong enough, you gotta jack it."
if("jackrose")
icon_state = "patronglass"
name = "Jack Rose"
desc = "Drinking this makes you feel like you belong in a luxury hotel bar during the 1920s."
if("synthanol")
icon_state = "synthanolglass"
name = "Glass of Synthanol"
desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too."
if("robottears")
icon_state = "robottearsglass"
name = "Glass of Robot Tears"
desc = "No robots were hurt in the making of this drink."
if("trinary")
icon_state = "trinaryglass"
name = "Glass of Trinary"
desc = "Colorful drink made for synthetic crewmembers. It doesn't seem like it would taste well."
if("servo")
icon_state = "servoglass"
name = "Glass of Servo"
desc = "Chocolate - based drink made for IPCs. Not sure if anyone's actually tried out the recipe."
if("synthnsoda")
icon_state = "synthnsodaglass"
name = "Glass of Synth 'n Soda"
desc = "Classic drink altered to fit the tastes of a robot. Bad idea to drink if you're made of carbon."
if("synthignon")
icon_state = "synthignonglass"
name = "Glass of Synthignon"
desc = "Someone mixed good wine and robot booze. Romantic, but atrocious."
if("uplink")
icon_state = "uplinkglass"
name = "Glass of Uplink"
desc = "An exquisite mix of the finest liquoirs and synthanol. Meant only for synthetics."
if("holywater")
icon_state = "glass_clear"
name = "Glass of Water"
desc = "The father of all refreshments."
else
icon_state ="glass_brown"
name = "Glass of ..what?"
desc = "You can't really tell what this is."
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change()
if(reagents.reagent_list.len)
var/datum/reagent/R = reagents.get_master_reagent()
icon_state = R.drink_icon
name = R.drink_name
desc = R.drink_desc
else
icon_state = "glass_empty"
name = "glass"
+62 -311
View File
@@ -13,9 +13,6 @@
icon = 'icons/obj/food/candy.dmi'
icon_state = "candy"
/obj/item/weapon/reagent_containers/food/snacks/candy/New()
..()
// ***********************************************************
// Candy Ingredients / Flavorings / Byproduct
// ***********************************************************
@@ -25,76 +22,53 @@
desc = "Such sweet, fattening food."
icon_state = "chocolatebar"
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("chocolate",4)
bitesize = 2
list_reagents = list("nutriment" = 2, "chocolate" = 4)
/obj/item/weapon/reagent_containers/food/snacks/candy/caramel
name = "Caramel"
desc = "Chewy and dense, yet it practically melts in your mouth!"
icon_state = "caramel"
filling_color = "#DB944D"
/obj/item/weapon/reagent_containers/food/snacks/candy/caramel/New()
..()
reagents.add_reagent("cream", 2)
reagents.add_reagent("sugar", 2)
bitesize = 2
list_reagents = list("cream" = 2, "sugar" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/toffee
name = "Toffee"
desc = "A hard, brittle candy with a distinctive taste."
icon_state = "toffee"
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/candy/toffee/New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sugar", 3)
bitesize = 2
list_reagents = list("nutriment" = 3, "sugar" = 3)
/obj/item/weapon/reagent_containers/food/snacks/candy/nougat
name = "Nougat"
desc = "A soft, chewy candy commonly found in candybars."
icon_state = "nougat"
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/candy/nougat/New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sugar", 3)
spawn(1)
reagents.del_reagent("egg")
reagents.update_total()
bitesize = 2
list_reagents = list("nutriment" = 3, "sugar" = 3)
/obj/item/weapon/reagent_containers/food/snacks/candy/taffy
name = "Saltwater Taffy"
desc = "Old fashioned saltwater taffy. Chewy!"
icon_state = "candy1"
filling_color = "#7D5F46"
bitesize = 2
list_reagents = list("nutriment" = 3, "sugar" = 3)
/obj/item/weapon/reagent_containers/food/snacks/candy/taffy/New()
..()
icon_state = pick("candy1", "candy2", "candy3", "candy4", "candy5")
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sugar", 3)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/candy/fudge
name = "Fudge"
desc = "Chocolate fudge, a timeless classic treat."
icon_state = "fudge"
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/candy/fudge/New()
..()
reagents.add_reagent("cream", 3)
reagents.add_reagent("chocolate",6)
bitesize = 3
list_reagents = list("cream" = 3, "chocolate" = 6)
/obj/item/weapon/reagent_containers/food/snacks/candy/fudge/peanut
name = "Peanut Fudge"
@@ -113,10 +87,7 @@
desc = "An extra creamy fudge with bits of real chocolate cookie mixed in. Crunchy!"
icon_state = "fudge_cookies_n_cream"
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/candy/fudge/cookies_n_cream/New()
..()
reagents.add_reagent("cream", 3)
list_reagents = list("cream" = 6, "chocolate" = 6)
/obj/item/weapon/reagent_containers/food/snacks/candy/fudge/turtle
name = "Turtle Fudge"
@@ -132,24 +103,16 @@
name = "Donor Candy"
desc = "A little treat for blood donors."
trash = /obj/item/trash/candy
/obj/item/weapon/reagent_containers/food/snacks/candy/donor/New()
..()
reagents.add_reagent("nutriment", 10)
reagents.add_reagent("sugar", 3)
bitesize = 5
list_reagents = list("nutriment" = 10, "sugar" = 3)
/obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn
name = "candy corn"
desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas."
icon_state = "candycorn"
filling_color = "#FFFCB0"
/obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn/New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("sugar", 2)
bitesize = 2
list_reagents = list("nutriment" = 4, "sugar" = 2)
// ***********************************************************
// Candy Products (plain / unflavored)
@@ -161,11 +124,8 @@
icon_state = "cottoncandy_plain"
trash = /obj/item/weapon/c_tube
filling_color = "#FFFFFF"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/New()
..()
reagents.add_reagent("sugar", 15)
bitesize = 3
bitesize = 4
list_reagents = list("sugar" = 15)
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar
name = "candy"
@@ -173,92 +133,64 @@
icon_state = "candy"
trash = /obj/item/trash/candy
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar/New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("chocolate",5)
bitesize = 3
list_reagents = list("nutriment" = 2, "chocolate" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/candycane
name = "candy cane"
desc = "A festive mint candy cane."
icon_state = "candycane"
filling_color = "#F2F2F2"
/obj/item/weapon/reagent_containers/food/snacks/candy/candycane/New()
..()
reagents.add_reagent("minttoxin", 1)
reagents.add_reagent("sugar", 5)
bitesize = 2
list_reagents = list("minttoxin" = 1, "sugar" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear
name = "gummy bear"
desc = "A small edible bear. It's squishy and chewy!"
icon_state = "gbear"
filling_color = "#FFFFFF"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/New()
..()
reagents.add_reagent("sugar", 10)
bitesize = 3
list_reagents = list("sugar" = 10)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm
name = "gummy worm"
desc = "An edible worm, made from gelatin."
icon_state = "gworm"
filling_color = "#FFFFFF"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/New()
..()
reagents.add_reagent("sugar", 10)
bitesize = 3
list_reagents = list("sugar" = 10)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas."
icon_state = "jbean"
filling_color = "#FFFFFF"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/New()
..()
reagents.add_reagent("sugar", 10)
bitesize = 3
list_reagents = list("sugar" = 10)
/obj/item/weapon/reagent_containers/food/snacks/candy/jawbreaker
name = "jawbreaker"
desc = "An unbelievably hard candy. The name is fitting."
icon_state = "jawbreaker"
filling_color = "#ED0758"
/obj/item/weapon/reagent_containers/food/snacks/candy/jawbreaker/New()
..()
reagents.add_reagent("sugar", 10)
bitesize = 0.1 //this is gonna take a while, you'll be working at this all shift.
list_reagents = list("sugar" = 10)
/obj/item/weapon/reagent_containers/food/snacks/candy/cash
name = "candy cash"
desc = "Not legal tender. Tasty though."
icon_state = "candy_cash"
filling_color = "#302000"
/obj/item/weapon/reagent_containers/food/snacks/candy/cash/New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("chocolate", 4)
bitesize = 2
list_reagents = list("nutriment" = 2, "chocolate" = 4)
/obj/item/weapon/reagent_containers/food/snacks/candy/coin
name = "chocolate coin"
desc = "Probably won't work in the vending machines."
icon_state = "choc_coin"
filling_color = "#302000"
/obj/item/weapon/reagent_containers/food/snacks/candy/coin/New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("chocolate",4)
bitesize = 3
list_reagents = list("nutriment" = 2, "chocolate" = 4)
/obj/item/weapon/reagent_containers/food/snacks/candy/gum
name = "bubblegum"
@@ -266,22 +198,15 @@
icon_state = "bubblegum"
trash = /obj/item/trash/gum
filling_color = "#FF7495"
/obj/item/weapon/reagent_containers/food/snacks/candy/gum/New()
..()
reagents.add_reagent("sugar", 5)
bitesize = 0.2
list_reagents = list("sugar" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/sucker
name = "sucker"
desc = "For being such a good sport!"
icon_state = "sucker"
filling_color = "#FFFFFF"
/obj/item/weapon/reagent_containers/food/snacks/candy/sucker/New()
..()
reagents.add_reagent("sugar", 10)
bitesize = 1
list_reagents = list("sugar" = 10)
// ***********************************************************
// Gummy Bear Flavors
@@ -292,91 +217,56 @@
desc = "A small edible bear. It's red!"
icon_state = "gbear_red"
filling_color = "#801E28"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/red/New()
..()
reagents.add_reagent("cherryjelly", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "cherryjelly" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/blue
name = "gummy bear"
desc = "A small edible bear. It's blue!"
icon_state = "gbear_blue"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/blue/New()
..()
reagents.add_reagent("berryjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "berryjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/poison
name = "gummy bear"
desc = "A small edible bear. It's blue!"
icon_state = "gbear_blue"
filling_color = "#863353"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/poison/New()
..()
reagents.add_reagent("poisonberryjuice", 12)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 3
list_reagents = list("poisonberryjuice" = 12)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/green
name = "gummy bear"
desc = "A small edible bear. It's green!"
icon_state = "gbear_green"
filling_color = "#365E30"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/green/New()
..()
reagents.add_reagent("limejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "limejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/yellow
name = "gummy bear"
desc = "A small edible bear. It's yellow!"
icon_state = "gbear_yellow"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/yellow/New()
..()
reagents.add_reagent("lemonjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "lemonjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/orange
name = "gummy bear"
desc = "A small edible bear. It's orange!"
icon_state = "gbear_orange"
filling_color = "#E78108"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/orange/New()
..()
reagents.add_reagent("orangejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "orangejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/purple
name = "gummy bear"
desc = "A small edible bear. It's purple!"
icon_state = "gbear_purple"
filling_color = "#993399"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/purple/New()
..()
reagents.add_reagent("grapejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "grapejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/wtf
name = "gummy bear"
desc = "A small bear. Wait... what?"
icon_state = "gbear_wtf"
filling_color = "#60A584"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/wtf/New()
..()
reagents.add_reagent("space_drugs", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "space_drugs" = 2)
// ***********************************************************
// Gummy Worm Flavors
@@ -387,91 +277,56 @@
desc = "An edible worm, made from gelatin. It's red!"
icon_state = "gworm_red"
filling_color = "#801E28"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/red/New()
..()
reagents.add_reagent("cherryjelly", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "cherryjelly" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/blue
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's blue!"
icon_state = "gworm_blue"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/blue/New()
..()
reagents.add_reagent("berryjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "berryjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/poison
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's blue!"
icon_state = "gworm_blue"
filling_color = "#863353"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/poison/New()
..()
reagents.add_reagent("poisonberryjuice", 12)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 3
list_reagents = list("poisonberryjuice" = 12)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/green
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's green!"
icon_state = "gworm_green"
filling_color = "#365E30"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/green/New()
..()
reagents.add_reagent("limejuice", 10)
bitesize = 3
list_reagents = list("sugar" = 10, "limejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/yellow
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's yellow!"
icon_state = "gworm_yellow"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/yellow/New()
..()
reagents.add_reagent("lemonjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "lemonjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/orange
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's orange!"
icon_state = "gworm_orange"
filling_color = "#E78108"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/orange/New()
..()
reagents.add_reagent("orangejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "orangejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/purple
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's purple!"
icon_state = "gworm_purple"
filling_color = "#993399"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/purple/New()
..()
reagents.add_reagent("grapejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "grapejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/wtf
name = "gummy worm"
desc = "An edible worm. Did it just move?"
icon_state = "gworm_wtf"
filling_color = "#60A584"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/wtf/New()
..()
reagents.add_reagent("space_drugs", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "space_drugs" = 2)
// ***********************************************************
// Jelly Bean Flavors
@@ -482,146 +337,91 @@
desc = "A candy bean, guarenteed to not give you gas. It's red!"
icon_state = "jbean_red"
filling_color = "#801E28"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/red/New()
..()
reagents.add_reagent("cherryjelly", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "cherryjelly" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/blue
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's blue!"
icon_state = "jbean_blue"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/blue/New()
..()
reagents.add_reagent("berryjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "berryjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/poison
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's blue!"
icon_state = "jbean_blue"
filling_color = "#863353"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/poison/New()
..()
reagents.add_reagent("poisonberryjuice", 12)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 3
list_reagents = list("poisonberryjuice" = 12)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/green
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's green!"
icon_state = "jbean_green"
filling_color = "#365E30"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/green/New()
..()
reagents.add_reagent("limejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "limejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/yellow
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's yellow!"
icon_state = "jbean_yellow"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/yellow/New()
..()
reagents.add_reagent("lemonjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "lemonjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/orange
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's orange!"
icon_state = "jbean_orange"
filling_color = "#E78108"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/orange/New()
..()
reagents.add_reagent("orangejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "orangejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/purple
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's purple!"
icon_state = "jbean_purple"
filling_color = "#993399"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/purple/New()
..()
reagents.add_reagent("grapejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "grapejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/chocolate
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's chocolate!"
icon_state = "jbean_choc"
filling_color = "#302000"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/chocolate/New()
..()
reagents.add_reagent("chocolate",2)
bitesize = 3
list_reagents = list("sugar" = 10, "chocolate" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/popcorn
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's popcorn flavored!"
icon_state = "jbean_popcorn"
filling_color = "#664330"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/popcorn/New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/cola
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's Cola flavored!"
icon_state = "jbean_cola"
filling_color = "#102000"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/cola/New()
..()
reagents.add_reagent("cola", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "cola" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/drgibb
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's Dr. Gibb flavored!"
icon_state = "jbean_cola"
filling_color = "#102000"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/drgibb/New()
..()
reagents.add_reagent("dr_gibb", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "dr_gibb" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/coffee
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's Coffee flavored!"
icon_state = "jbean_choc"
filling_color = "#482000"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/coffee/New()
..()
reagents.add_reagent("coffee", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "coffee" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/wtf
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. You aren't sure what color it is."
icon_state = "jbean_wtf"
filling_color = "#60A584"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/wtf/New()
..()
reagents.add_reagent("space_drugs", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "space_drugs" = 2)
// ***********************************************************
// Cotton Candy Flavors
@@ -633,11 +433,7 @@
icon_state = "cottoncandy_red"
trash = /obj/item/weapon/c_tube
filling_color = "#801E28"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/red/New()
..()
reagents.add_reagent("cherryjelly", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "cherryjelly" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/blue
name = "cotton candy"
@@ -645,11 +441,7 @@
icon_state = "cottoncandy_blue"
trash = /obj/item/weapon/c_tube
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/blue/New()
..()
reagents.add_reagent("berryjuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "berryjuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/poison
name = "cotton candy"
@@ -657,14 +449,7 @@
icon_state = "cottoncandy_blue"
trash = /obj/item/weapon/c_tube
filling_color = "#863353"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/poison/New()
..()
reagents.add_reagent("poisonberryjuice", 20)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 4
list_reagents = list("poisonberryjuice" = 20)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/green
name = "cotton candy"
@@ -672,11 +457,7 @@
icon_state = "cottoncandy_green"
trash = /obj/item/weapon/c_tube
filling_color = "#365E30"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/green/New()
..()
reagents.add_reagent("limejuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "limejuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/yellow
name = "cotton candy"
@@ -684,11 +465,7 @@
icon_state = "cottoncandy_yellow"
trash = /obj/item/weapon/c_tube
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/yellow/New()
..()
reagents.add_reagent("lemonjuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "lemonjuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/orange
name = "cotton candy"
@@ -696,11 +473,7 @@
icon_state = "cottoncandy_orange"
trash = /obj/item/weapon/c_tube
filling_color = "#E78108"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/orange/New()
..()
reagents.add_reagent("orangejuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "orangejuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/purple
name = "cotton candy"
@@ -708,11 +481,7 @@
icon_state = "cottoncandy_purple"
trash = /obj/item/weapon/c_tube
filling_color = "#993399"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/purple/New()
..()
reagents.add_reagent("grapejuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "grapejuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/pink
name = "cotton candy"
@@ -720,11 +489,7 @@
icon_state = "cottoncandy_pink"
trash = /obj/item/weapon/c_tube
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/pink/New()
..()
reagents.add_reagent("watermelonjuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "watermelonjuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/rainbow
name = "cotton candy"
@@ -732,14 +497,7 @@
icon_state = "cottoncandy_rainbow"
trash = /obj/item/weapon/c_tube
filling_color = "#C8A5DC"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/rainbow/New()
..()
reagents.add_reagent("omnizine", 20)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 4
list_reagents = list("omnizine" = 20)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/bad_rainbow
name = "cotton candy"
@@ -747,14 +505,7 @@
icon_state = "cottoncandy_rainbow"
trash = /obj/item/weapon/c_tube
filling_color = "#32127A"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/bad_rainbow/New()
..()
reagents.add_reagent("sulfonal", 20)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 4
list_reagents = list("sulfonal" = 20)
// ***********************************************************
// Candybar Flavors
@@ -82,7 +82,7 @@
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "<span class='warning'>you can't add anymore to [target]!</span>")
return
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "<span class='notice'>You transfer [trans] units of the condiment to [target].</span>")
/obj/item/weapon/reagent_containers/food/condiment/on_reagent_change()
@@ -223,7 +223,7 @@
return
else
to_chat(user, "<span class='notice'>You tear open [src] above [target] and the condiments drip onto it.</span>")
src.reagents.trans_to(target, amount_per_transfer_from_this)
reagents.trans_to(target, amount_per_transfer_from_this)
qdel(src)
/obj/item/weapon/reagent_containers/food/condiment/pack/on_reagent_change()
@@ -1,4 +1,4 @@
/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/S = new(get_turf(user))
S.attackby(W,user, params)
@@ -6,13 +6,13 @@
else
..()
/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/burger/S = new(get_turf(user))
S.attackby(W,user, params)
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza/S = new(get_turf(user))
S.attackby(W,user, params)
@@ -21,7 +21,7 @@
..()
/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta/S = new(get_turf(user))
S.attackby(W,user, params)
@@ -30,7 +30,7 @@
..()
/obj/item/trash/plate/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/trash/plate/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom/S = new(get_turf(user))
S.attackby(W,user, params)
@@ -44,7 +44,7 @@
icon = 'icons/obj/food/food.dmi'
icon_state = "soup"
/obj/item/trash/bowl/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/trash/bowl/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/soup/S = new(get_turf(user))
@@ -54,7 +54,6 @@
..()
/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich
/obj/item/weapon/reagent_containers/food/snacks/customizable
name = "sandwich"
desc = "A sandwich! A timeless classic."
icon_state = "breadslice"
@@ -79,12 +78,7 @@
trash = /obj/item/trash/plate
bitesize = 2
var/list/ingredients = list()
New()
..()
reagents.add_reagent("nutriment", 8)
list_reagents = list("nutriment" = 8)
/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza
name = "personal pizza"
@@ -323,7 +317,7 @@
toptype = new /obj/item/weapon/reagent_containers/food/snacks/bun()
/obj/item/weapon/reagent_containers/food/snacks/customizable/attackby(obj/item/I, mob/user, params)
if(src.contents.len > sandwich_limit)
if(contents.len > sandwich_limit)
to_chat(user, "<span class='warning'>If you put anything else in or on [src] it's going to make a mess.</span>")
return
if(!istype(I, /obj/item/weapon/reagent_containers/food/snacks))
@@ -351,7 +345,7 @@
for(var/obj/item/O in ingredients)
i++
if(!fullycustom)
var/image/I = new(src.icon, "[baseicon]_filling")
var/image/I = new(icon, "[baseicon]_filling")
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/food = O
if(!food.filling_color == "#FFFFFF")
@@ -372,7 +366,7 @@
overlays += O.overlays
if(top)
var/image/T = new(src.icon, "[baseicon]_top")
var/image/T = new(icon, "[baseicon]_top")
T.pixel_x = pick(list(-1,0,1))
T.pixel_y = (ingredients.len * 2)+1
overlays += T
@@ -388,24 +382,6 @@
to_chat(user, "<span class='notice'> You think you can see [whatsinside] in there.</span>")
/*
/obj/item/weapon/reagent_containers/food/snacks/customizable/attack(mob/M as mob, mob/user as mob, def_zone) //SNOOOOOOOWFLAAAAAAAAAAAAAAAAAKES
var/obj/item/shard
for(var/obj/item/O in contents)
if(istype(O,/obj/item/weapon/shard))
shard = O
break
var/mob/living/H
if(istype(M,/mob/living))
H = M
if(H && shard && M == user) //This needs a check for feeding the food to other people, but that could be abusable.
to_chat(H, "\red You lacerate your mouth on a [shard.name] in the sandwich!")
H.adjustBruteLoss(5) //TODO: Target head if human.
..()
*/
/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/newname()
var/unsorteditems[0]
@@ -487,7 +463,7 @@
sendback = "[pick(list("absurd","colossal","enormous","ridiculous","massive","oversized","cardiac-arresting","pipe-clogging","edible but sickening","sickening","gargantuan","mega","belly-burster","chest-burster"))] [basename]"
return sendback
/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/sortlist(var/list/unsorted, var/highest)
/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/sortlist(list/unsorted, highest)
var/sorted[0]
for(var/i = 1, i<= highest, i++)
for(var/it in unsorted)
+5 -12
View File
@@ -4,16 +4,11 @@
icon_state = "meat"
health = 180
filling_color = "#FF1C1C"
New()
..()
reagents.add_reagent("protein", 3)
src.bitesize = 3
bitesize = 3
list_reagents = list("protein" = 3)
/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if( \
istype(W, /obj/item/weapon/kitchen/knife) || \
istype(W, /obj/item/weapon/scalpel) \
)
/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/kitchen/knife) || istype(W, /obj/item/weapon/scalpel))
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
@@ -49,6 +44,4 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/ham
name = "Ham"
desc = "Taste like bacon."
New()
..()
reagents.add_reagent("porktonium", 10)
list_reagents = list("protein" = 3, "porktonium" = 10)
+44 -127
View File
@@ -5,12 +5,8 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishfillet"
filling_color = "#FFDEFE"
New()
..()
reagents.add_reagent("protein", 3)
reagents.add_reagent("carpotoxin", 3)
src.bitesize = 6
bitesize = 6
list_reagents = list("protein" = 3, "carpotoxin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/salmonmeat
name = "raw salmon"
@@ -18,11 +14,8 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishfillet"
filling_color = "#FFDEFE"
New()
..()
reagents.add_reagent("protein", 3)
src.bitesize = 3
bitesize = 3
list_reagents = list("protein" = 3)
/obj/item/weapon/reagent_containers/food/snacks/salmonsteak
name = "Salmon steak"
@@ -31,14 +24,8 @@
icon_state = "salmonsteak"
trash = /obj/item/trash/plate
filling_color = "#7A3D11"
New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("sodiumchloride", 1)
reagents.add_reagent("blackpepper", 1)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 4, "sodiumchloride" = 1, "blackpepper" = 1)
/obj/item/weapon/reagent_containers/food/snacks/catfishmeat
name = "raw catfish"
@@ -46,11 +33,8 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishfillet"
filling_color = "#FFDEFE"
New()
..()
reagents.add_reagent("protein", 3)
src.bitesize = 3
bitesize = 3
list_reagents = list("protein" = 3)
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
name = "Fish Fingers"
@@ -58,15 +42,8 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishfingers"
filling_color = "#FFDEFE"
New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("carpotoxin", 3)
spawn(1)
reagents.del_reagent("egg")
reagents.update_total()
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 4, "carpotoxin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/fishburger
name = "Fillet -o- Carp Sandwich"
@@ -74,12 +51,8 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishburger"
filling_color = "#FFDEFE"
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("carpotoxin", 3)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 6, "carpotoxin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/cubancarp
name = "Cuban Carp"
@@ -88,13 +61,8 @@
icon_state = "cubancarp"
trash = /obj/item/trash/plate
filling_color = "#E9ADFF"
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("carpotoxin", 3)
reagents.add_reagent("capsaicin", 3)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 6, "carpotoxin" = 3, "capsaicin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/fishandchips
name = "Fish and Chips"
@@ -102,168 +70,117 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishandchips"
filling_color = "#E3D796"
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("carpotoxin", 3)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 6, "carpotoxin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/sashimi
name = "carp sashimi"
desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sashimi"
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("toxin", 5)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 6, "toxin" = 5)
/obj/item/weapon/reagent_containers/food/snacks/fried_shrimp
name = "fried shrimp"
desc = "Just one of the many things you can do with shrimp!"
icon = 'icons/obj/food/seafood.dmi'
icon_state = "shrimp_fried"
New()
..()
reagents.add_reagent("nutriment", 2)
src.bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/boiled_shrimp
name = "boiled shrimp"
desc = "Just one of the many things you can do with shrimp!"
icon = 'icons/obj/food/seafood.dmi'
icon_state = "shrimp_cooked"
New()
..()
reagents.add_reagent("nutriment", 2)
src.bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Ebi
name = "Ebi Sushi"
desc = "A simple sushi consisting of cooked shrimp and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Ebi"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Ikura
name = "Ikura Sushi"
desc = "A simple sushi consisting of salmon roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Ikura"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 1)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Sake
name = "Sake Sushi"
desc = "A simple sushi consisting of raw salmon and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Sake"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_SmokedSalmon
name = "Smoked Salmon Sushi"
desc = "A simple sushi consisting of cooked salmon and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_SmokedSalmon"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Tamago
name = "Tamago Sushi"
desc = "A simple sushi consisting of egg and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Tamago"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Inari
name = "Inari Sushi"
desc = "A piece of fried tofu stuffed with rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Inari"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Masago
name = "Masago Sushi"
desc = "A simple sushi consisting of goldfish roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Masago"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 1)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Tobiko
name = "Tobiko Sushi"
desc = "A simple sushi consisting of shark roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Masago"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 1)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/weapon/reagent_containers/food/snacks/sushi_TobikoEgg
name = "Tobiko and Egg Sushi"
desc = "A sushi consisting of shark roe and an egg."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_TobikoEgg"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 1)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Tai
name = "Tai Sushi"
desc = "A simple sushi consisting of catfish and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Tai"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Unagi
name = "Unagi Sushi"
desc = "A simple sushi consisting of eel and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Hokki"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
File diff suppressed because it is too large Load Diff

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