Deconflict

This commit is contained in:
variableundefined
2018-10-19 16:07:04 +08:00
183 changed files with 1283 additions and 849 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ world/IsBanned(key,address,computer_id)
var/ckey = ckey(key)
if((ckey in admin_datums) || (ckey in GLOB.deadmins))
var/datum/admins/A = admin_datums[ckey]
if(A.rights & R_ADMIN)
if(A && (A.rights & R_ADMIN))
admin = 1
//Guest Checking
+65 -65
View File
@@ -53,13 +53,13 @@ var/global/nologevent = 0
if(istype(M, /mob/new_player))
body += " <B>Hasn't Entered Game</B> "
else
body += " \[<A href='?_src_=holder;revive=\ref[M]'>Heal</A>\] "
body += " \[<A href='?_src_=holder;revive=[M.UID()]'>Heal</A>\] "
body += "<br><br>\[ "
body += "<a href='?_src_=vars;Vars=[M.UID()]'>VV</a> - "
body += "<a href='?_src_=holder;traitor=\ref[M]'>TP</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_TP(M,"TP")] - "
body += "<a href='?src=[usr.UID()];priv_msg=[M.UID()]'>PM</a> - "
body += "[ADMIN_SM(M,"SM")] - "
if(ishuman(M) && M.mind)
body += "<a href='?_src_=holder;HeadsetMessage=[M.UID()]'>HM</a> -"
body += "[admin_jump_link(M)]\] </b><br>"
@@ -70,45 +70,45 @@ var/global/nologevent = 0
if(M.client.related_accounts_ip.len)
body += "<b>Related accounts by IP:</b> [jointext(M.client.related_accounts_ip, " - ")]<br><br>"
body += "<A href='?_src_=holder;boot2=\ref[M]'>Kick</A> | "
body += "<A href='?_src_=holder;boot2=[M.UID()]'>Kick</A> | "
body += "<A href='?_src_=holder;warn=[M.ckey]'>Warn</A> | "
body += "<A href='?_src_=holder;newban=\ref[M]'>Ban</A> | "
body += "<A href='?_src_=holder;jobban2=\ref[M]'>Jobban</A> | "
body += "<A href='?_src_=holder;appearanceban=\ref[M]'>Appearance Ban</A> | "
body += "<A href='?_src_=holder;newban=[M.UID()]'>Ban</A> | "
body += "<A href='?_src_=holder;jobban2=[M.UID()]'>Jobban</A> | "
body += "<A href='?_src_=holder;appearanceban=[M.UID()]'>Appearance Ban</A> | "
body += "<A href='?_src_=holder;shownoteckey=[M.ckey]'>Notes</A> | "
if(M.client)
if(M.client.check_watchlist(M.client.ckey))
body += "<A href='?_src_=holder;watchremove=[M.ckey]'>Remove from Watchlist</A> | "
body += "<A href='?_src_=holder;watchedit=[M.ckey]'>Edit Watchlist Reason</A> "
else
body += "<A href='?_src_=holder;watchadd=\ref[M.ckey]'>Add to Watchlist</A> "
body += "<A href='?_src_=holder;watchadd=[M.ckey]'>Add to Watchlist</A> "
if(M.client)
body += "| <A HREF='?_src_=holder;sendtoprison=\ref[M]'>Prison</A> | "
body += "\ <A href='?_src_=holder;sendbacktolobby=\ref[M]'>Send back to Lobby</A> | "
body += "| <A href='?_src_=holder;sendtoprison=[M.UID()]'>Prison</A> | "
body += "\ <A href='?_src_=holder;sendbacktolobby=[M.UID()]'>Send back to Lobby</A> | "
var/muted = M.client.prefs.muted
body += {"<br><b>Mute: </b>
\[<A href='?_src_=holder;mute=\ref[M];mute_type=[MUTE_IC]'><font color='[(muted & MUTE_IC)?"red":"blue"]'>IC</font></a> |
<A href='?_src_=holder;mute=\ref[M];mute_type=[MUTE_OOC]'><font color='[(muted & MUTE_OOC)?"red":"blue"]'>OOC</font></a> |
<A href='?_src_=holder;mute=\ref[M];mute_type=[MUTE_PRAY]'><font color='[(muted & MUTE_PRAY)?"red":"blue"]'>PRAY</font></a> |
<A href='?_src_=holder;mute=\ref[M];mute_type=[MUTE_ADMINHELP]'><font color='[(muted & MUTE_ADMINHELP)?"red":"blue"]'>ADMINHELP</font></a> |
<A href='?_src_=holder;mute=\ref[M];mute_type=[MUTE_DEADCHAT]'><font color='[(muted & MUTE_DEADCHAT)?"red":"blue"]'>DEADCHAT</font></a>\]
(<A href='?_src_=holder;mute=\ref[M];mute_type=[MUTE_ALL]'><font color='[(muted & MUTE_ALL)?"red":"blue"]'>toggle all</font></a>)
\[<A href='?_src_=holder;mute=[M.UID()];mute_type=[MUTE_IC]'><font color='[(muted & MUTE_IC)?"red":"blue"]'>IC</font></a> |
<A href='?_src_=holder;mute=[M.UID()];mute_type=[MUTE_OOC]'><font color='[(muted & MUTE_OOC)?"red":"blue"]'>OOC</font></a> |
<A href='?_src_=holder;mute=[M.UID()];mute_type=[MUTE_PRAY]'><font color='[(muted & MUTE_PRAY)?"red":"blue"]'>PRAY</font></a> |
<A href='?_src_=holder;mute=[M.UID()];mute_type=[MUTE_ADMINHELP]'><font color='[(muted & MUTE_ADMINHELP)?"red":"blue"]'>ADMINHELP</font></a> |
<A href='?_src_=holder;mute=[M.UID()];mute_type=[MUTE_DEADCHAT]'><font color='[(muted & MUTE_DEADCHAT)?"red":"blue"]'>DEADCHAT</font></a>\]
(<A href='?_src_=holder;mute=[M.UID()];mute_type=[MUTE_ALL]'><font color='[(muted & MUTE_ALL)?"red":"blue"]'>toggle all</font></a>)
"}
var/jumptoeye = ""
if(isAI(M))
var/mob/living/silicon/ai/A = M
if(A.client && A.eyeobj) // No point following clientless AI eyes
jumptoeye = " <b>(<A href='?_src_=holder;jumpto=\ref[A.eyeobj]'>Eye</A>)</b>"
jumptoeye = " <b>(<A href='?_src_=holder;jumpto=[A.eyeobj.UID()]'>Eye</A>)</b>"
body += {"<br><br>
<A href='?_src_=holder;jumpto=\ref[M]'><b>Jump to</b></A>[jumptoeye] |
<A href='?_src_=holder;getmob=\ref[M]'>Get</A> |
<A href='?_src_=holder;sendmob=\ref[M]'>Send To</A>
<A href='?_src_=holder;jumpto=[M.UID()]'><b>Jump to</b></A>[jumptoeye] |
<A href='?_src_=holder;getmob=[M.UID()]'>Get</A> |
<A href='?_src_=holder;sendmob=[M.UID()]'>Send To</A>
<br><br>
[check_rights(R_ADMIN,0) ? "<A href='?_src_=holder;traitor=\ref[M]'>Traitor panel</A> | " : "" ]
<A href='?_src_=holder;narrateto=\ref[M]'>Narrate to</A> |
<A href='?_src_=holder;subtlemessage=\ref[M]'>Subtle message</A>
[check_rights(R_ADMIN,0) ? "[ADMIN_TP(M,"Traitor panel")] | " : "" ]
<A href='?_src_=holder;narrateto=[M.UID()]'>Narrate to</A> |
[ADMIN_SM(M,"Subtle message")]
"}
if(check_rights(R_EVENT, 0))
@@ -128,39 +128,39 @@ var/global/nologevent = 0
if(issmall(M))
body += "<B>Monkeyized</B> | "
else
body += "<A href='?_src_=holder;monkeyone=\ref[M]'>Monkeyize</A> | "
body += "<A href='?_src_=holder;monkeyone=[M.UID()]'>Monkeyize</A> | "
//Corgi
if(iscorgi(M))
body += "<B>Corgized</B> | "
else
body += "<A href='?_src_=holder;corgione=\ref[M]'>Corgize</A> | "
body += "<A href='?_src_=holder;corgione=[M.UID()]'>Corgize</A> | "
//AI / Cyborg
if(isAI(M))
body += "<B>Is an AI</B> "
else if(ishuman(M))
body += {"<A href='?_src_=holder;makeai=\ref[M]'>Make AI</A> |
<A href='?_src_=holder;makemask=\ref[M]'>Make Mask</A> |
<A href='?_src_=holder;makerobot=\ref[M]'>Make Robot</A> |
<A href='?_src_=holder;makealien=\ref[M]'>Make Alien</A> |
<A href='?_src_=holder;makeslime=\ref[M]'>Make Slime</A> |
<A href='?_src_=holder;makesuper=\ref[M]'>Make Superhero</A>
body += {"<A href='?_src_=holder;makeai=[M.UID()]'>Make AI</A> |
<A href='?_src_=holder;makemask=[M.UID()]'>Make Mask</A> |
<A href='?_src_=holder;makerobot=[M.UID()]'>Make Robot</A> |
<A href='?_src_=holder;makealien=[M.UID()]'>Make Alien</A> |
<A href='?_src_=holder;makeslime=[M.UID()]'>Make Slime</A> |
<A href='?_src_=holder;makesuper=[M.UID()]'>Make Superhero</A>
"}
//Simple Animals
if(isanimal(M))
body += "<A href='?_src_=holder;makeanimal=\ref[M]'>Re-Animalize</A> | "
body += "<A href='?_src_=holder;makeanimal=[M.UID()]'>Re-Animalize</A> | "
else
body += "<A href='?_src_=holder;makeanimal=\ref[M]'>Animalize</A> | "
body += "<A href='?_src_=holder;makeanimal=[M.UID()]'>Animalize</A> | "
if(istype(M, /mob/dead/observer))
body += "<a href='?_src_=holder;incarn_ghost=\ref[M]'>Re-incarnate</a> | "
body += "<A href='?_src_=holder;incarn_ghost=[M.UID()]'>Re-incarnate</a> | "
if(ispAI(M))
body += "<B>Is a pAI</B> "
else
body += "<A href='?_src_=holder;makePAI=\ref[M]'>Make pAI</A> | "
body += "<A href='?_src_=holder;makePAI=[M.UID()]'>Make pAI</A> | "
// DNA2 - Admin Hax
if(M.dna && iscarbon(M))
@@ -175,7 +175,7 @@ var/global/nologevent = 0
if(bname)
var/bstate=M.dna.GetSEState(block)
var/bcolor="[(bstate)?"#006600":"#ff0000"]"
body += "<A href='?_src_=holder;togmutate=\ref[M];block=[block]' style='color:[bcolor];'>[bname]</A><sub>[block]</sub>"
body += "<A href='?_src_=holder;togmutate=[M.UID()];block=[block]' style='color:[bcolor];'>[bname]</A><sub>[block]</sub>"
else
body += "[block]"
body+="</td>"
@@ -183,39 +183,39 @@ var/global/nologevent = 0
body += {"<br><br>
<b>Rudimentary transformation:</b><font size=2><br>These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.</font><br>
<A href='?_src_=holder;simplemake=observer;mob=\ref[M]'>Observer</A> |
\[ Alien: <A href='?_src_=holder;simplemake=drone;mob=\ref[M]'>Drone</A>,
<A href='?_src_=holder;simplemake=hunter;mob=\ref[M]'>Hunter</A>,
<A href='?_src_=holder;simplemake=queen;mob=\ref[M]'>Queen</A>,
<A href='?_src_=holder;simplemake=sentinel;mob=\ref[M]'>Sentinel</A>,
<A href='?_src_=holder;simplemake=larva;mob=\ref[M]'>Larva</A> \]
<A href='?_src_=holder;simplemake=human;mob=\ref[M]'>Human</A>
\[ slime: <A href='?_src_=holder;simplemake=slime;mob=\ref[M]'>Baby</A>,
<A href='?_src_=holder;simplemake=adultslime;mob=\ref[M]'>Adult</A> \]
<A href='?_src_=holder;simplemake=monkey;mob=\ref[M]'>Monkey</A> |
<A href='?_src_=holder;simplemake=robot;mob=\ref[M]'>Cyborg</A> |
<A href='?_src_=holder;simplemake=cat;mob=\ref[M]'>Cat</A> |
<A href='?_src_=holder;simplemake=runtime;mob=\ref[M]'>Runtime</A> |
<A href='?_src_=holder;simplemake=corgi;mob=\ref[M]'>Corgi</A> |
<A href='?_src_=holder;simplemake=ian;mob=\ref[M]'>Ian</A> |
<A href='?_src_=holder;simplemake=crab;mob=\ref[M]'>Crab</A> |
<A href='?_src_=holder;simplemake=coffee;mob=\ref[M]'>Coffee</A> |
\[ Construct: <A href='?_src_=holder;simplemake=constructarmoured;mob=\ref[M]'>Armoured</A> ,
<A href='?_src_=holder;simplemake=constructbuilder;mob=\ref[M]'>Builder</A> ,
<A href='?_src_=holder;simplemake=constructwraith;mob=\ref[M]'>Wraith</A> \]
<A href='?_src_=holder;simplemake=shade;mob=\ref[M]'>Shade</A>
<A href='?_src_=holder;simplemake=observer;mob=[M.UID()]'>Observer</A> |
\[ Alien: <A href='?_src_=holder;simplemake=drone;mob=[M.UID()]'>Drone</A>,
<A href='?_src_=holder;simplemake=hunter;mob=[M.UID()]'>Hunter</A>,
<A href='?_src_=holder;simplemake=queen;mob=[M.UID()]'>Queen</A>,
<A href='?_src_=holder;simplemake=sentinel;mob=[M.UID()]'>Sentinel</A>,
<A href='?_src_=holder;simplemake=larva;mob=[M.UID()]'>Larva</A> \]
<A href='?_src_=holder;simplemake=human;mob=[M.UID()]'>Human</A>
\[ slime: <A href='?_src_=holder;simplemake=slime;mob=[M.UID()]'>Baby</A>,
<A href='?_src_=holder;simplemake=adultslime;mob=[M.UID()]'>Adult</A> \]
<A href='?_src_=holder;simplemake=monkey;mob=[M.UID()]'>Monkey</A> |
<A href='?_src_=holder;simplemake=robot;mob=[M.UID()]'>Cyborg</A> |
<A href='?_src_=holder;simplemake=cat;mob=[M.UID()]'>Cat</A> |
<A href='?_src_=holder;simplemake=runtime;mob=[M.UID()]'>Runtime</A> |
<A href='?_src_=holder;simplemake=corgi;mob=[M.UID()]'>Corgi</A> |
<A href='?_src_=holder;simplemake=ian;mob=[M.UID()]'>Ian</A> |
<A href='?_src_=holder;simplemake=crab;mob=[M.UID()]'>Crab</A> |
<A href='?_src_=holder;simplemake=coffee;mob=[M.UID()]'>Coffee</A> |
\[ Construct: <A href='?_src_=holder;simplemake=constructarmoured;mob=[M.UID()]'>Armoured</A> ,
<A href='?_src_=holder;simplemake=constructbuilder;mob=[M.UID()]'>Builder</A> ,
<A href='?_src_=holder;simplemake=constructwraith;mob=[M.UID()]'>Wraith</A> \]
<A href='?_src_=holder;simplemake=shade;mob=[M.UID()]'>Shade</A>
"}
if(M.client)
body += {"<br><br>
<b>Other actions:</b>
<br>
<A href='?_src_=holder;forcespeech=\ref[M]'>Forcesay</A> |
<A href='?_src_=holder;aroomwarp=\ref[M]'>Admin Room</A> |
<A href='?_src_=holder;tdome1=\ref[M]'>Thunderdome 1</A> |
<A href='?_src_=holder;tdome2=\ref[M]'>Thunderdome 2</A> |
<A href='?_src_=holder;tdomeadmin=\ref[M]'>Thunderdome Admin</A> |
<A href='?_src_=holder;tdomeobserve=\ref[M]'>Thunderdome Observer</A> |
<A href='?_src_=holder;forcespeech=[M.UID()]'>Forcesay</A> |
<A href='?_src_=holder;aroomwarp=[M.UID()]'>Admin Room</A> |
<A href='?_src_=holder;tdome1=[M.UID()]'>Thunderdome 1</A> |
<A href='?_src_=holder;tdome2=[M.UID()]'>Thunderdome 2</A> |
<A href='?_src_=holder;tdomeadmin=[M.UID()]'>Thunderdome Admin</A> |
<A href='?_src_=holder;tdomeobserve=[M.UID()]'>Thunderdome Observer</A> |
"}
body += {"<br>
@@ -953,7 +953,7 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space
return "[A.name] - [loc.x],[loc.y],[loc.z]"
/proc/formatPlayerPanel(var/mob/U,var/text="PP")
return "<A HREF='?_src_=holder;adminplayeropts=\ref[U]'>[text]</A>"
return "[ADMIN_PP(U,"[text]")]"
//Kicks all the clients currently in the lobby. The second parameter (kick_only_afk) determins if an is_afk() check is ran, or if all clients are kicked
//defaults to kicking everyone (afk + non afk clients in the lobby)
+22 -22
View File
@@ -61,7 +61,7 @@
}
function expand(id,job,name,real_name,image,key,ip,antagonist,ref,eyeref){
function expand(id,job,name,real_name,image,key,ip,antagonist,UID,eyeUID){
clearAll();
@@ -75,15 +75,15 @@
body += "</td><td align='center'>";
body += "<a href='?src=[UID()];adminplayeropts="+ref+"'>PP</a> - "
body += "<a href='?src=[UID()];adminplayeropts="+UID+"'>PP</a> - "
body += "<a href='?src=[UID()];shownoteckey="+key+"'>N</a> - "
body += "<a href='?_src_=vars;Vars="+ref+"'>VV</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=[UID()];adminplayerobservefollow="+eyeref+"'>EYE</a>"
body += "<a href='?_src_=vars;Vars="+UID+"'>VV</a> - "
body += "<a href='?src=[UID()];traitor="+UID+"'>TP</a> - "
body += "<a href='?src=[usr.UID()];priv_msg="+UID+"'>PM</a> - "
body += "<a href='?src=[UID()];subtlemessage="+UID+"'>SM</a> - "
body += "<a href='?src=[UID()];adminplayerobservefollow="+UID+"'>FLW</a>"
if(eyeUID)
body += "|<a href='?src=[UID()];adminplayerobservefollow="+eyeUID+"'>EYE</a>"
body += "<br>"
if(antagonist > 0)
body += "<font size='2'><a href='?src=[UID()];check_antagonist=1'><font color='red'><b>Antagonist</b></font></a></font>";
@@ -288,11 +288,11 @@
M_key = replacetext(M_key, "\"", "")
M_key = replacetext(M_key, "\\", "")
var/M_eyeref = ""
var/M_eyeUID = ""
if(isAI(M))
var/mob/living/silicon/ai/A = M
if(A.client && A.eyeobj) // No point following clientless AI eyes
M_eyeref = "\ref[A.eyeobj]"
M_eyeUID = "[A.eyeobj.UID()]"
//output for each mob
dat += {"
@@ -300,7 +300,7 @@
<td align='center' bgcolor='[color]'>
<span id='notice_span[i]'></span>
<a id='link[i]'
onmouseover='expand("item[i]","[M_job]","[M_name]","[M_rname]","--unused--","[M_key]","[M.lastKnownIP]",[is_antagonist],"\ref[M]", "[M_eyeref]")'
onmouseover='expand("item[i]","[M_job]","[M_name]","[M_rname]","--unused--","[M_key]","[M.lastKnownIP]",[is_antagonist],"[M.UID()]", "[M_eyeUID]")'
>
<b id='search[i]'>[M_name] - [M_rname] - [M_key] ([M_job])</b>
</a>
@@ -370,16 +370,16 @@
dat += {"<td>[(M.client ? "[M.client]" : "No client")]</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>
<td align=center><A HREF='?src=[UID()];adminplayeropts=[M.UID()]'>X</A></td>
<td align=center><A href='?src=[usr.UID()];priv_msg=[M.UID()]'>PM</A></td>
"}
switch(is_special_character(M))
if(0)
dat += {"<td align=center><A HREF='?src=[UID()];traitor=\ref[M]'>Traitor?</A></td>"}
dat += {"<td align=center><A HREF='?src=[UID()];traitor=[M.UID()]'>Traitor?</A></td>"}
if(1)
dat += {"<td align=center><A HREF='?src=[UID()];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
dat += {"<td align=center><A HREF='?src=[UID()];traitor=[M.UID()]'><font color=red>Traitor?</font></A></td>"}
if(2)
dat += {"<td align=center><A HREF='?src=[UID()];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
dat += {"<td align=center><A HREF='?src=[UID()];traitor=[M.UID()]'><font color=red><b>Traitor?</b></font></A></td>"}
dat += "</table></body></html>"
@@ -397,8 +397,8 @@
if(!dname)
dname = M
return {"<tr><td><a href='?src=[UID()];adminplayeropts=\ref[M]'>[dname]</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>" : ""]"}
return {"<tr><td><a href='?src=[UID()];adminplayeropts=[M.UID()]'>[dname]</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=[M.UID()]'>PM</A></td>[close ? "</tr>" : ""]"}
/datum/admins/proc/check_antagonists()
if(!check_rights(R_ADMIN)) return
@@ -433,7 +433,7 @@
while(!istype(disk_loc, /turf))
if(istype(disk_loc, /mob))
var/mob/M = disk_loc
dat += "carried by <a href='?src=[UID()];adminplayeropts=\ref[M]'>[M.real_name]</a> "
dat += "carried by <a href='?src=[UID()];adminplayeropts=[M.UID()]'>[M.real_name]</a> "
if(istype(disk_loc, /obj))
var/obj/O = disk_loc
dat += "in \a [O.name] "
@@ -472,7 +472,7 @@
for(var/datum/mind/blob in mode.infected_crew)
var/mob/M = blob.current
if(M)
dat += "<tr><td><a href='?_src_=holder;adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(ghost)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
dat += "<tr><td>[ADMIN_PP(M,"[M.real_name]")][M.client ? "" : " <i>(ghost)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
dat += "<td><A href='?priv_msg=[M.ckey]'>PM</A></td>"
else
dat += "<tr><td><i>Blob not found!</i></td></tr>"
@@ -563,7 +563,7 @@
if(show_objectives)
txt += {"
<td>
<a href='?src=[UID()];traitor=\ref[M]'>Show Objective</a>
<a href='?src=[UID()];traitor=[M.UID()]'>Show Objective</a>
</td>
"}
+83 -100
View File
@@ -13,7 +13,7 @@
if(href_list["rejectadminhelp"])
if(!check_rights(R_ADMIN|R_MOD))
return
var/client/C = locate(href_list["rejectadminhelp"])
var/client/C = locateUID(href_list["rejectadminhelp"])
if(!C)
return
@@ -317,7 +317,7 @@
else if(href_list["simplemake"])
if(!check_rights(R_SPAWN)) return
var/mob/M = locate(href_list["mob"])
var/mob/M = locateUID(href_list["mob"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob")
return
@@ -426,7 +426,7 @@
else if(href_list["appearanceban"])
if(!check_rights(R_BAN))
return
var/mob/M = locate(href_list["appearanceban"])
var/mob/M = locateUID(href_list["appearanceban"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob")
return
@@ -475,7 +475,7 @@
else if(href_list["jobban2"])
// if(!check_rights(R_BAN)) return
var/mob/M = locate(href_list["jobban2"])
var/mob/M = locateUID(href_list["jobban2"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob")
return
@@ -501,17 +501,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=[UID()];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=[M.UID()]'>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=[UID()];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=[M.UID()]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=[M.UID()]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 6) //So things dont get squiiiiished!
@@ -522,17 +522,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=[UID()];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=[M.UID()]'>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=[UID()];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=[M.UID()]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=[M.UID()]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -543,17 +543,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=[UID()];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=[M.UID()]'>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=[UID()];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=[M.UID()]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=[M.UID()]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -564,17 +564,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=[UID()];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=[M.UID()]'>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=[UID()];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=[M.UID()]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=[M.UID()]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -585,17 +585,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=[UID()];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=[M.UID()]'>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=[UID()];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=[M.UID()]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=[M.UID()]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -606,17 +606,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=[UID()];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=[M.UID()]'>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=[UID()];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=[M.UID()]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=[M.UID()]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -627,17 +627,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=[UID()];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=[M.UID()]'>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=[UID()];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=[M.UID()]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=[M.UID()]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -646,29 +646,29 @@
//Drone
if(jobban_isbanned(M, "Drone"))
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=Drone;jobban4=\ref[M]'><font color=red>Drone</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=Drone;jobban4=[M.UID()]'><font color=red>Drone</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=Drone;jobban4=\ref[M]'>Drone</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=Drone;jobban4=[M.UID()]'>Drone</a></td>"
//pAI
if(jobban_isbanned(M, "pAI"))
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=pAI;jobban4=\ref[M]'><font color=red>pAI</font></a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=pAI;jobban4=[M.UID()]'><font color=red>pAI</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=pAI;jobban4=\ref[M]'>pAI</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=pAI;jobban4=[M.UID()]'>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=[UID()];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=[M.UID()]'>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=[UID()];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=[M.UID()]'><font color=red>[replacetext(role, " ", "&nbsp")]</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[role];jobban4=\ref[M]'>[replacetext(role, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[role];jobban4=[M.UID()]'>[replacetext(role, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -683,9 +683,9 @@
counter = 0
for(var/role in other_roles)
if(jobban_isbanned(M, role) || isbanned_dept)
jobs += "<td width='20%'><a href='?src=[UID()];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=[M.UID()]'><font color=red>[replacetext(role, " ", "&nbsp")]</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[role];jobban4=\ref[M]'>[replacetext(role, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[role];jobban4=[M.UID()]'>[replacetext(role, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -696,17 +696,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=[UID()];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=[M.UID()]'>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=[UID()];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=[M.UID()]'><font color=red>[replacetext(job.title, " ", "&nbsp")]</font></a></td>"
counter++
else
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=\ref[M]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
jobs += "<td width='20%'><a href='?src=[UID()];jobban3=[job.title];jobban4=[M.UID()]'>[replacetext(job.title, " ", "&nbsp")]</a></td>"
counter++
if(counter >= 5) //So things dont get squiiiiished!
@@ -723,7 +723,7 @@
else if(href_list["jobban3"])
if(!check_rights(R_BAN)) return
var/mob/M = locate(href_list["jobban4"])
var/mob/M = locateUID(href_list["jobban4"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob")
return
@@ -885,10 +885,10 @@
return 0 //we didn't do anything!
else if(href_list["boot2"])
var/mob/M = locate(href_list["boot2"])
var/mob/M = locateUID(href_list["boot2"])
if(ismob(M))
if(M.client && M.client.holder && (M.client.holder.rights & R_BAN))
to_chat(src, "<span class='warning'>[key_name_admin(M)] cannot be kicked from the server.</span>")
to_chat(usr, "<span class='warning'>[key_name_admin(M)] cannot be kicked from the server.</span>")
return
to_chat(M, "<span class='warning'>You have been kicked from the server</span>")
log_admin("[key_name(usr)] booted [key_name(M)].")
@@ -958,7 +958,7 @@
else if(href_list["newban"])
if(!check_rights(R_BAN)) return
var/mob/M = locate(href_list["newban"])
var/mob/M = locateUID(href_list["newban"])
if(!ismob(M)) return
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
@@ -1016,7 +1016,7 @@
//Watchlist
else if(href_list["watchadd"])
var/target_ckey = locate(href_list["watchadd"])
var/target_ckey = href_list["watchadd"]
usr.client.watchlist_add(target_ckey)
else if(href_list["watchremove"])
@@ -1062,7 +1062,7 @@
if(!check_rights(R_ADMIN|R_MOD))
return
var/mob/M = locate(href_list["mute"])
var/mob/M = locateUID(href_list["mute"])
if(!ismob(M)) return
if(!M.client) return
@@ -1128,7 +1128,7 @@
else if(href_list["monkeyone"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["monkeyone"])
var/mob/living/carbon/human/H = locateUID(href_list["monkeyone"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1143,7 +1143,7 @@
else if(href_list["corgione"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["corgione"])
var/mob/living/carbon/human/H = locateUID(href_list["corgione"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1158,7 +1158,7 @@
else if(href_list["makePAI"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["makePAI"])
var/mob/living/carbon/human/H = locateUID(href_list["makePAI"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1182,7 +1182,7 @@
else if(href_list["forcespeech"])
if(!check_rights(R_SERVER|R_EVENT)) return
var/mob/M = locate(href_list["forcespeech"])
var/mob/M = locateUID(href_list["forcespeech"])
if(!ismob(M))
to_chat(usr, "this can only be used on instances of type /mob")
@@ -1199,7 +1199,7 @@
if(alert(usr, "Send to admin prison for the round?", "Message", "Yes", "No") != "Yes")
return
var/mob/M = locate(href_list["sendtoprison"])
var/mob/M = locateUID(href_list["sendtoprison"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob")
return
@@ -1242,7 +1242,7 @@
if(!check_rights(R_ADMIN))
return
var/mob/M = locate(href_list["sendbacktolobby"])
var/mob/M = locateUID(href_list["sendbacktolobby"])
if(!isobserver(M))
to_chat(usr, "<span class='notice'>You can only send ghost players back to the Lobby.</span>")
@@ -1269,7 +1269,7 @@
if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes")
return
var/mob/M = locate(href_list["tdome1"])
var/mob/M = locateUID(href_list["tdome1"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob")
return
@@ -1299,7 +1299,7 @@
if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes")
return
var/mob/M = locate(href_list["tdome2"])
var/mob/M = locateUID(href_list["tdome2"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob")
return
@@ -1329,7 +1329,7 @@
if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes")
return
var/mob/M = locate(href_list["tdomeadmin"])
var/mob/M = locateUID(href_list["tdomeadmin"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob")
return
@@ -1351,7 +1351,7 @@
if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes")
return
var/mob/M = locate(href_list["tdomeobserve"])
var/mob/M = locateUID(href_list["tdomeobserve"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob")
return
@@ -1385,7 +1385,7 @@
if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes")
return
var/mob/M = locate(href_list["aroomwarp"])
var/mob/M = locateUID(href_list["aroomwarp"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob")
return
@@ -1405,7 +1405,7 @@
else if(href_list["revive"])
if(!check_rights(R_REJUVINATE)) return
var/mob/living/L = locate(href_list["revive"])
var/mob/living/L = locateUID(href_list["revive"])
if(!istype(L))
to_chat(usr, "This can only be used on instances of type /mob/living")
return
@@ -1417,7 +1417,7 @@
else if(href_list["makeai"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["makeai"])
var/mob/living/carbon/human/H = locateUID(href_list["makeai"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1433,7 +1433,7 @@
else if(href_list["makealien"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["makealien"])
var/mob/living/carbon/human/H = locateUID(href_list["makealien"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1445,7 +1445,7 @@
else if(href_list["makeslime"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["makeslime"])
var/mob/living/carbon/human/H = locateUID(href_list["makeslime"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1457,7 +1457,7 @@
else if(href_list["makesuper"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["makesuper"])
var/mob/living/carbon/human/H = locateUID(href_list["makesuper"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1470,7 +1470,7 @@
else if(href_list["makerobot"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["makerobot"])
var/mob/living/carbon/human/H = locateUID(href_list["makerobot"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1482,7 +1482,7 @@
else if(href_list["makeanimal"])
if(!check_rights(R_SPAWN)) return
var/mob/M = locate(href_list["makeanimal"])
var/mob/M = locateUID(href_list["makeanimal"])
if(istype(M, /mob/new_player))
to_chat(usr, "This cannot be used on instances of type /mob/new_player")
return
@@ -1494,7 +1494,7 @@
else if(href_list["incarn_ghost"])
if(!check_rights(R_SPAWN)) return
var/mob/dead/observer/G = locate(href_list["incarn_ghost"])
var/mob/dead/observer/G = locateUID(href_list["incarn_ghost"])
if(!istype(G))
to_chat(usr, "This will only work on /mob/dead/observer")
log_admin("[key_name(G)] was incarnated by [key_name(src.owner)]")
@@ -1504,7 +1504,7 @@
else if(href_list["togmutate"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["togmutate"])
var/mob/living/carbon/human/H = locateUID(href_list["togmutate"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1515,25 +1515,14 @@
//H.regenerate_icons()
else if(href_list["adminplayeropts"])
var/mob/M = locate(href_list["adminplayeropts"])
var/mob/M = locateUID(href_list["adminplayeropts"])
show_player_panel(M)
else if(href_list["adminplayerobservejump"])
if(!check_rights(R_ADMIN|R_MOD))
return
var/mob/M = locate(href_list["adminplayerobservejump"])
var/client/C = usr.client
if(!isobserver(usr)) C.admin_ghost()
sleep(2)
C.jumptomob(M)
else if(href_list["adminplayerobservefollow"])
if(!check_rights(R_ADMIN|R_MOD))
return
var/mob/M = locate(href_list["adminplayerobservefollow"])
var/mob/M = locateUID(href_list["adminplayerobservefollow"])
var/client/C = usr.client
if(!isobserver(usr)) C.admin_ghost()
@@ -1605,13 +1594,13 @@
output_ai_laws()
else if(href_list["adminmoreinfo"])
var/mob/M = locate(href_list["adminmoreinfo"])
var/mob/M = locateUID(href_list["adminmoreinfo"])
admin_mob_info(M)
else if(href_list["adminspawncookie"])
if(!check_rights(R_ADMIN|R_EVENT)) return
var/mob/living/carbon/human/H = locate(href_list["adminspawncookie"])
var/mob/living/carbon/human/H = locateUID(href_list["adminspawncookie"])
if(!ishuman(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1635,7 +1624,7 @@
else if(href_list["BlueSpaceArtillery"])
if(!check_rights(R_ADMIN|R_EVENT)) return
var/mob/living/M = locate(href_list["BlueSpaceArtillery"])
var/mob/living/M = locateUID(href_list["BlueSpaceArtillery"])
if(!isliving(M))
to_chat(usr, "This can only be used on instances of type /mob/living")
return
@@ -1694,7 +1683,7 @@
else if(href_list["EvilFax"])
if(!check_rights(R_ADMIN))
return
var/mob/living/carbon/human/H = locate(href_list["EvilFax"])
var/mob/living/carbon/human/H = locateUID(href_list["EvilFax"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -1979,7 +1968,7 @@
else if(href_list["FaxReplyTemplate"])
if(!check_rights(R_ADMIN))
return
var/mob/living/carbon/human/H = locate(href_list["FaxReplyTemplate"])
var/mob/living/carbon/human/H = locateUID(href_list["FaxReplyTemplate"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -2033,7 +2022,7 @@
message_admins("[key_name_admin(src.owner)] replied to [key_name_admin(H)] with a standard '[stype]' fax")
else if(href_list["HONKReply"])
var/mob/living/carbon/human/H = locate(href_list["HONKReply"])
var/mob/living/carbon/human/H = locateUID(href_list["HONKReply"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -2053,7 +2042,7 @@
return
if(alert(src.owner, "Accept or Deny ERT request?", "CentComm Response", "Accept", "Deny") == "Deny")
var/mob/living/carbon/human/H = locate(href_list["ErtReply"])
var/mob/living/carbon/human/H = locateUID(href_list["ErtReply"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
@@ -2282,32 +2271,32 @@
else if(href_list["jumpto"])
if(!check_rights(R_ADMIN)) return
var/mob/M = locate(href_list["jumpto"])
var/mob/M = locateUID(href_list["jumpto"])
usr.client.jumptomob(M)
else if(href_list["getmob"])
if(!check_rights(R_ADMIN)) return
if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") return
var/mob/M = locate(href_list["getmob"])
var/mob/M = locateUID(href_list["getmob"])
usr.client.Getmob(M)
else if(href_list["sendmob"])
if(!check_rights(R_ADMIN)) return
var/mob/M = locate(href_list["sendmob"])
var/mob/M = locateUID(href_list["sendmob"])
usr.client.sendmob(M)
else if(href_list["narrateto"])
if(!check_rights(R_ADMIN)) return
var/mob/M = locate(href_list["narrateto"])
var/mob/M = locateUID(href_list["narrateto"])
usr.client.cmd_admin_direct_narrate(M)
else if(href_list["subtlemessage"])
if(!check_rights(R_ADMIN)) return
var/mob/M = locate(href_list["subtlemessage"])
var/mob/M = locateUID(href_list["subtlemessage"])
usr.client.cmd_admin_subtle_message(M)
else if(href_list["traitor"])
@@ -2317,7 +2306,7 @@
alert("The game hasn't started yet!")
return
var/mob/M = locate(href_list["traitor"])
var/mob/M = locateUID(href_list["traitor"])
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob.")
return
@@ -3221,12 +3210,12 @@
return 1
else if(href_list["viewruntime"])
var/datum/ErrorViewer/error_viewer = locate(href_list["viewruntime"])
var/datum/ErrorViewer/error_viewer = locateUID(href_list["viewruntime"])
if(!istype(error_viewer))
to_chat(usr, "<span class='warning'>That runtime viewer no longer exists.</span>")
return
if(href_list["viewruntime_backto"])
error_viewer.showTo(usr, locate(href_list["viewruntime_backto"]), href_list["viewruntime_linear"])
error_viewer.showTo(usr, locateUID(href_list["viewruntime_backto"]), href_list["viewruntime_linear"])
else
error_viewer.showTo(usr, null, href_list["viewruntime_linear"])
@@ -3364,19 +3353,13 @@
/proc/admin_jump_link(var/atom/target)
if(!target) return
// The way admin jump links handle their src is weirdly inconsistent...
var/source = "_src_=holder"
. = ADMIN_FLW(target,"FLW")
if(isAI(target)) // AI core/eye follow links
var/mob/living/silicon/ai/A = target
. = "<A HREF='?[source];adminplayerobservefollow=\ref[target]'>FLW</A>"
if(A.client && A.eyeobj) // No point following clientless AI eyes
. += "|<A HREF='?[source];adminplayerobservefollow=\ref[A.eyeobj]'>EYE</A>"
return
. += "|[ADMIN_FLW(A.eyeobj,"EYE")]"
else if(istype(target, /mob/dead/observer))
var/mob/dead/observer/O = target
. = "<A HREF='?[source];adminplayerobservefollow=\ref[target]'>FLW</A>"
if(O.mind && O.mind.current)
. += "|<A HREF='?[source];adminplayerobservefollow=\ref[O.mind.current]'>BDY</A>"
return
else
return "<A HREF='?[source];adminplayerobservefollow=\ref[target]'>FLW</A>"
. += "|[ADMIN_FLW(O.mind.current,"BDY")]"
+2 -5
View File
@@ -86,9 +86,6 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(!mob) return //this doesn't happen
var/ref_mob = "\ref[mob]"
var/ref_client = "\ref[src]"
//send this msg to all admins
var/admin_number_afk = 0
var/list/mentorholders = list()
@@ -109,7 +106,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
switch(selected_type)
if("Mentorhelp")
msg = "<span class='mentorhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, TRUE, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""] (<A HREF='?_src_=holder;take_question=[mob.UID()];is_mhelp=1'>TAKE</A>) :</span> <span class='mentorhelp'>[msg]</span>"
msg = "<span class='mentorhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, TRUE, selected_type)] ([ADMIN_QUE(mob,"?")]) ([ADMIN_PP(mob,"PP")]) ([ADMIN_VV(mob,"VV")]) ([ADMIN_SM(mob,"SM")]) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;rejectadminhelp=[UID()]'>REJT</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[mob.UID()]'>CL</A>)" : ""] (<A HREF='?_src_=holder;take_question=[mob.UID()];is_mhelp=1'>TAKE</A>) :</span> <span class='mentorhelp'>[msg]</span>"
for(var/client/X in mentorholders + modholders + adminholders)
if(X.prefs.sound & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
@@ -123,7 +120,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
T.addResponse(usr.client, msg)
else
ticketNum = SStickets.getTicketCounter() // ticketNum is the ticket ready to be assigned.
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, TRUE, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;openadminticket=[ticketNum]'>TICKET</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""](<A HREF='?_src_=holder;take_question=[mob.UID()]'>TAKE</A>) :</span> <span class='adminhelp'>[msg]</span>"
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, TRUE, selected_type)] ([ADMIN_QUE(mob,"?")]) ([ADMIN_PP(mob,"PP")]) ([ADMIN_VV(mob,"VV")]) ([ADMIN_SM(mob,"SM")]) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;openadminticket=[ticketNum]'>TICKET</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[mob.UID()]'>CL</A>)" : ""](<A HREF='?_src_=holder;take_question=[mob.UID()]'>TAKE</A>) :</span> <span class='adminhelp'>[msg]</span>"
//Open a new adminticket and inform the user.
SStickets.newTicket(src, prunedmsg, msg)
for(var/client/X in modholders + adminholders)
+8 -8
View File
@@ -9,12 +9,12 @@ var/global/list/frozen_mob_list = list()
/client/proc/freeze(var/mob/living/M as mob in GLOB.mob_list)
set category = "Admin"
set name = "Freeze"
if(!check_rights(R_ADMIN))
return
if(!istype(M))
return
if(!istype(M))
return
if(M in frozen_mob_list)
M.admin_unFreeze(src)
@@ -89,8 +89,8 @@ var/global/list/frozen_mob_list = list()
set name = "Freeze Mech"
if(!check_rights(R_ADMIN))
return
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>")
@@ -105,7 +105,7 @@ var/global/list/frozen_mob_list = list()
M.overlays += adminomaly
if(M.occupant)
M.removeVerb(/obj/mecha/verb/eject)
to_chat(M.occupant, "<b><font color= red>You have been frozen by <a href='?priv_msg=\ref[usr.client]'>[key]</a></b></font>")
to_chat(M.occupant, "<b><font color= red>You have been frozen by <a href='?priv_msg=[usr.client.UID()]'>[key]</a></b></font>")
message_admins("<span class='notice'>[key_name_admin(usr)] froze [key_name(M.occupant)] in a [M.name]</span>")
log_admin("[key_name(usr)] froze [key_name(M.occupant)] in a [M.name]")
else
@@ -116,7 +116,7 @@ var/global/list/frozen_mob_list = list()
M.overlays -= adminomaly
if(M.occupant)
M.addVerb(/obj/mecha/verb/eject)
to_chat(M.occupant, "<b><font color= red>You have been unfrozen by <a href='?priv_msg=\ref[usr.client]'>[key]</a></b></font>")
to_chat(M.occupant, "<b><font color= red>You have been unfrozen by <a href='?priv_msg=[usr.client.UID()]'>[key]</a></b></font>")
message_admins("<span class='notice'>[key_name_admin(usr)] unfroze [key_name(M.occupant)] in a [M.name]</span>")
log_admin("[key_name(usr)] unfroze [key_name(M.occupant)] in a [M.name]")
else
+6 -6
View File
@@ -29,7 +29,7 @@
deity = ticker.cultdat.entity_name
log_say("(PRAYER) [msg]", usr)
msg = "<span class='notice'>[bicon(cross)]<b><font color=[font_color]>[prayer_type][deity ? " (to [deity])" : ""]:</font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>) (<A HREF='?_src_=holder;Bless=[UID()]'>BLESS</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b> [msg]</span>"
msg = "<span class='notice'>[bicon(cross)]<b><font color=[font_color]>[prayer_type][deity ? " (to [deity])" : ""]:</font>[key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_SC(src,"SC")]) (<A HREF='?_src_=holder;Bless=[UID()]'>BLESS</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b> [msg]</span>"
for(var/client/X in GLOB.admins)
if(check_rights(R_EVENT,0,X.mob))
@@ -40,7 +40,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=[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>) [ADMIN_CENTCOM_REPLY(Sender)]):</span> [msg]"
msg = "<span class='boldnotice'><font color=orange>CENTCOMM: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")])):</span> [msg]"
for(var/client/X in GLOB.admins)
if(R_EVENT & X.holder.rights)
to_chat(X, msg)
@@ -49,7 +49,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=[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>) [ADMIN_SYNDICATE_REPLY(Sender)]:</span> [msg]"
msg = "<span class='boldnotice'><font color='#DC143C'>SYNDICATE: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_SYNDICATE_REPLY(Sender,"RPLY")]):</span> [msg]"
for(var/client/X in GLOB.admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
@@ -58,7 +58,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=[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]"
msg = "<span class='boldnotice'><font color=pink>HONK: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) (<A HREF='?_src_=holder;HONKReply=[Sender.UID()]'>RPLY</A>):</span> [msg]"
for(var/client/X in GLOB.admins)
if(R_EVENT & X.holder.rights)
to_chat(X, msg)
@@ -67,7 +67,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=[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>"
msg = "<span class='adminnotice'><b><font color=orange>ERT REQUEST: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) (<A HREF='?_src_=holder;ErtReply=[Sender.UID()]'>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 GLOB.admins)
@@ -79,7 +79,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=[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>) [ADMIN_CENTCOM_REPLY(Sender)]:</b> [msg]</span>"
msg = "<span class='adminnotice'><b><font color=orange>NUKE CODE REQUEST: </font>[key_name(Sender)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")]):</b> [msg]</span>"
for(var/client/X in GLOB.admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
+1 -1
View File
@@ -981,7 +981,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!H.key && H.mind.key)
key_string = H.mind.key
msg += "<TR><TD>[key_string]</TD><TD>[H.real_name]</TD><TD>[job_string]</TD><TD>[mins_ssd]</TD><TD>[role_string]</TD>"
msg += "<TD>[get_area(H)]</TD><TD><A HREF='?_src_=holder;adminplayeropts=\ref[H]'>PP</A></TD>"
msg += "<TD>[get_area(H)]</TD><TD>[ADMIN_PP(H,"PP")]</TD>"
if(istype(H.loc, /obj/machinery/cryopod))
msg += "<TD>In Cryo</TD>"
else
@@ -52,9 +52,7 @@
if(!borg_to_spawn) //If there's no type at all, let it still be used but don't do anything
used = FALSE
return
var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread
S.set_up(4, 1, src)
S.start()
do_sparks(4, 1, src)
var/mob/living/silicon/robot/R
switch(borg_to_spawn)
if("Medical")
+1 -1
View File
@@ -70,7 +70,7 @@
/obj/item/assembly/voice/noise/hear_talk(mob/living/M as mob, msg)
return
/obj/item/assembly/voice/hear_message(mob/living/M as mob, msg)
/obj/item/assembly/voice/noise/hear_message(mob/living/M as mob, msg)
pulse(0)
var/turf/T = get_turf(src) //otherwise it won't work in hand
T.visible_message("<span class='warning'>[bicon(src)] beeps!</span>")
+15 -4
View File
@@ -9,7 +9,7 @@
icon = 'icons/effects/blood.dmi'
icon_state = "remains"
var/mob_type = null
var/mob_name = ""
var/mob_name = "unidentified entity"
var/mob_gender = null
var/death = TRUE //Kill the mob
var/roundstart = TRUE //fires on initialize
@@ -48,7 +48,7 @@
/obj/effect/mob_spawn/Initialize(mapload)
. = ..()
if(instant || (roundstart && (ticker && ticker.current_state > GAME_STATE_SETTING_UP)))
if(instant || roundstart) //at some point we should probably re-introduce the (ticker && ticker.current_state > GAME_STATE_SETTING_UP) portion of this check, but for now it was preventing the corpses from spawning at roundstart and resulting in ghost role spawners that made dead bodies.
create()
else
GLOB.poi_list |= src
@@ -83,7 +83,7 @@
if(disease)
M.ForceContractDisease(new disease)
if(death)
M.death(1) //Kills the new mob
M.death() //Kills the new mob
M.adjustOxyLoss(oxy_damage)
M.adjustBruteLoss(brute_damage)
@@ -155,6 +155,8 @@
outfit = new outfit()
if(!outfit)
outfit = new /datum/outfit
if(!mob_name)
mob_name = id_job
return ..()
/obj/effect/mob_spawn/human/equip(mob/living/carbon/human/H)
@@ -271,6 +273,7 @@
/obj/effect/mob_spawn/human/corpse/assistant
name = "Assistant"
mob_name = "Assistant"
id_job = "Assistant"
outfit = /datum/outfit/job/assistant
@@ -285,11 +288,13 @@
/obj/effect/mob_spawn/human/cook
name = "Cook"
mob_name = "Chef"
id_job = "Chef"
outfit = /datum/outfit/job/chef
/obj/effect/mob_spawn/human/doctor
name = "Doctor"
mob_name = "Medical Doctor"
id_job = "Medical Doctor"
outfit = /datum/outfit/job/doctor
@@ -313,6 +318,7 @@
/obj/effect/mob_spawn/human/engineer
name = "Engineer"
mob_name = "Engineer"
id_job = "Engineer"
outfit = /datum/outfit/job/engineer
@@ -393,16 +399,18 @@
/obj/effect/mob_spawn/human/scientist
name = "Scientist"
mob_name = "Scientist"
id_job = "Scientist"
outfit = /datum/outfit/job/scientist
/obj/effect/mob_spawn/human/miner
name = "Shaft Miner"
mob_name = "Shaft Miner"
id_job = "Shaft Miner"
outfit = /datum/outfit/job/mining/suit
/datum/outfit/job/mining/suit
name = "Station Engineer"
name = "Shaft Miner"
suit = /obj/item/clothing/suit/space/hardsuit/mining
head = /obj/item/clothing/head/helmet/space/hardsuit/mining
uniform = /obj/item/clothing/under/rank/miner
@@ -416,6 +424,7 @@
/obj/effect/mob_spawn/human/bartender
name = "Space Bartender"
mob_name = "Bartender"
id_job = "Bartender"
id_access_list = list(access_bar)
outfit = /datum/outfit/spacebartender
@@ -479,6 +488,7 @@
/obj/effect/mob_spawn/human/bridgeofficer
name = "Bridge Officer"
mob_name = "Bridge Officer"
id_job = "Bridge Officer"
id_access = "Captain"
outfit = /datum/outfit/nanotrasenbridgeofficercorpse
@@ -495,6 +505,7 @@
/obj/effect/mob_spawn/human/commander
name = "Commander"
mob_name = "Commander"
id_job = "Commander"
id_access = "Captain"
outfit = /datum/outfit/nanotrasencommandercorpse
@@ -155,10 +155,8 @@
call(src,triggerproc)(M)
/obj/effect/meatgrinder/proc/triggerrad1(mob)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
for(var/mob/O in viewers(world.view, src.loc))
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
explosion(mob, 1, 0, 0, 0)
qdel(src)
+2 -6
View File
@@ -22,13 +22,9 @@
M.Move(dest)
if(entersparks)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(4, 1, src)
s.start()
do_sparks(4, 1, src)
if(exitsparks)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(4, 1, dest)
s.start()
do_sparks(4, 1, dest)
if(entersmoke)
var/datum/effect_system/smoke_spread/s = new
+3 -2
View File
@@ -49,8 +49,9 @@
var/x = pos_idx % switch_width
var/y = FLOOR(pos_idx / switch_width, 1)
var/obj/screen/buildmode/B = new buttontype(src, thing)
// extra .5 for a nice offset look
B.screen_loc = "NORTH-[(1 + 0.5 + y*1.5)],WEST+[0.5 + x*1.5]"
// this stuff is equivalent to the commented out line for 511 compat
// B.screen_loc = "NORTH-[(1 + 0.5 + y*1.5)],WEST+[0.5 + x*1.5]"
B.screen_loc = "NORTH-[1 + FLOOR(0.5 + 1.5*y, 1) + ((y + 1) % 2)]:[16*((y + 1) % 2)],WEST+[FLOOR(0.5 + 1.5*x, 1)]:[16*((x + 1) % 2)]"
buttonslist += B
pos_idx++
@@ -92,9 +92,7 @@
if(H.a_intent == INTENT_HARM)
var/mob/living/carbon/C = A
if(cell.use(stun_cost))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 0, loc)
s.start()
do_sparks(5, 0, loc)
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
H.do_attack_animation(C)
visible_message("<span class='danger'>[C] has been touched with [src] by [H]!</span>")
+1 -3
View File
@@ -170,9 +170,7 @@
var/mob/M = can_shock(loc)
if(M)
to_chat(M, "<span class='danger'>You feel a sharp shock!</span>")
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, M)
s.start()
do_sparks(3, 1, M)
M.Weaken(5)
M.Stuttering(1)
+8 -1
View File
@@ -28,4 +28,11 @@
/obj/item/clothing/mask/gas/voice/New()
..()
changer = new(src)
changer = new(src)
/obj/item/clothing/mask/gas/voice/clown
name = "clown wig and mask"
desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
icon_state = "clown"
item_state = "clown_hat"
flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | BLOCKHAIR
+1 -3
View File
@@ -591,9 +591,7 @@
/obj/item/clothing/suit/space/hardsuit/shielded/hit_reaction(mob/living/carbon/human/owner, attack_text)
if(current_charges > 0)
var/datum/effect_system/spark_spread/s = new
s.set_up(2, 1, src)
s.start()
do_sparks(2, 1, src)
owner.visible_message("<span class='danger'>[owner]'s shields deflect [attack_text] in a shower of sparks!</span>")
current_charges--
recharge_cooldown = world.time + recharge_delay
+7 -7
View File
@@ -14,7 +14,7 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = new()
var/global/datum/ErrorViewer/ErrorCache/error_cache = null
#endif
// - ErrorSource datums exist for each line (of code) that generates an error,
// - ErrorSource datums exist for each line (of code) that generates an error,
// and keep track of all errors generated by that line.
//
// - ErrorEntry datums exist for each logged error, and keep track of all
@@ -68,10 +68,10 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = null
if(!linktext)
linktext = name
if(istype(back_to))
back_to_param = ";viewruntime_backto=\ref[back_to]"
back_to_param = ";viewruntime_backto=[back_to.UID()]"
if(linear)
back_to_param += ";viewruntime_linear=1"
return "<A HREF='?_src_=holder;viewruntime=\ref[src][back_to_param]'>[html_encode(linktext)]</A>"
return "<A HREF='?_src_=holder;viewruntime=[src.UID()][back_to_param]'>[html_encode(linktext)]</A>"
/datum/ErrorViewer/ErrorCache
var/list/errors = list()
@@ -181,15 +181,15 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = null
if(srcRef)
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>"
html += " <a href='?_src_=holder;adminplayeropts=[srcUID]'>PP</a>"
html += " <a href='?_src_=holder;adminplayerobservefollow=[srcUID]'>Follow</a>"
if(istype(srcLoc))
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=[usrUID]'>VV</a>"
html += " <a href='?_src_=holder;adminplayeropts=[usrRef]'>PP</a>"
html += " <a href='?_src_=holder;adminplayerobservefollow=[usrRef]'>Follow</a>"
html += " <a href='?_src_=holder;adminplayeropts=[usrUID]'>PP</a>"
html += " <a href='?_src_=holder;adminplayerobservefollow=[usrUID]'>Follow</a>"
if(istype(usrLoc))
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>"
+1 -1
View File
@@ -29,7 +29,7 @@
vendingMachines.Remove(originMachine)
originMachine.shut_up = 0
originMachine.shoot_inventory = 1
log_debug("Original brand intelligence machine: [originMachine] [ADMIN_VV(originMachine)] [ADMIN_JMP(originMachine)]")
log_debug("Original brand intelligence machine: [originMachine] ([ADMIN_VV(originMachine,"VV")]) [ADMIN_JMP(originMachine)]")
/datum/event/brand_intelligence/tick()
if(!originMachine || QDELETED(originMachine) || originMachine.shut_up || originMachine.wires.IsAllCut()) //if the original vending machine is missing or has it's voice switch flipped
+1 -3
View File
@@ -38,9 +38,7 @@
/datum/event/rogue_drone/end()
var/num_recovered = 0
for(var/mob/living/simple_animal/hostile/retaliate/malf_drone/D in drones_list)
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread()
sparks.set_up(3, 0, D.loc)
sparks.start()
do_sparks(3, 0, D.loc)
D.z = level_name_to_num(CENTCOMM)
D.has_loot = 0
+1 -3
View File
@@ -492,9 +492,7 @@
if(water_level && prob(45)) //If there is water, there is a chance the cat will slip, Syndicat will spark like E-N when this happens
M.visible_message("[M.name] slipped and got soaked!", "You slipped and got soaked!")
if(istype(M, /mob/living/simple_animal/pet/cat/Syndi))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
else //No water or didn't slip, get that fish!
M.visible_message("[M.name] catches and devours a live fish!", "You catch and devour a live fish, yum!")
kill_fish() //Kill a random fish
@@ -329,7 +329,7 @@
active = 1
var/turf/bombturf = get_turf(src)
var/area/bombarea = get_area(bombturf)
message_admins("[key_name(user)]<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[bombarea] (JMP)</a>.")
message_admins("[key_name(user)][ADMIN_QUE(user,"?")] has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[bombarea] (JMP)</a>.")
log_game("[key_name(user)] has primed a [name] for detonation at [bombarea] ([bombturf.x],[bombturf.y],[bombturf.z]).")
to_chat(user, "<span class='info'>You light [src] on fire.</span>")
@@ -392,9 +392,7 @@
updateUsrDialog()
/obj/machinery/kitchen_machine/proc/broke()
var/datum/effect_system/spark_spread/s = new
s.set_up(2, 1, src)
s.start()
do_sparks(2, 1, src)
icon_state = broken_icon // Make it look all busted up and shit
visible_message("<span class='alert'>The [src] breaks!</span>") //Let them know they're stupid
broken = 2 // Make it broken so it can't be used util fixed
+1 -1
View File
@@ -30,7 +30,7 @@
if(istype(user.loc, /turf/space))
return
var/turf/T = get_turf(src)
message_admins("Kudzu planted by [key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) at ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>(JMP)</a>)",0,1)
message_admins("Kudzu planted by [key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) at ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>(JMP)</a>)",0,1)
investigate_log("was planted by [key_name(user)] at ([T.x],[T.y],[T.z])","kudzu")
new /obj/structure/spacevine_controller(user.loc, mutations, potency, production)
user.drop_item()
+3 -3
View File
@@ -14,12 +14,12 @@
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
var/atk_verb = pick("left hook","right hook","straight punch")
var/damage = rand(5, 8) + A.dna.species.punchdamagelow
if(!damage)
playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
D.visible_message("<span class='warning'>[A] has attempted to hit [D] with a [atk_verb]!</span>")
add_attack_logs(A, D, "Melee attacked with [src] (miss/block)")
add_attack_logs(A, D, "Melee attacked with [src] (miss/block)", ATKLOG_ALL)
return 0
@@ -32,7 +32,7 @@
"<span class='userdanger'>[A] has hit [D] with a [atk_verb]!</span>")
D.apply_damage(damage, STAMINA, affecting, armor_block)
add_attack_logs(A, D, "Melee attacked with [src]")
add_attack_logs(A, D, "Melee attacked with [src]", ATKLOG_ALL)
if(D.getStaminaLoss() > 50)
var/knockout_prob = D.getStaminaLoss() + rand(-15,15)
if((D.stat != DEAD) && prob(knockout_prob))
+2 -6
View File
@@ -352,9 +352,7 @@
updateUsrDialog()
/obj/machinery/mineral/ore_redemption/ex_act(severity, target)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
if(severity == 1)
if(prob(50))
qdel(src)
@@ -564,9 +562,7 @@
qdel(voucher)
/obj/machinery/mineral/equipment_vendor/ex_act(severity, target)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
if(prob(50 / severity) && severity < 3)
qdel(src)
+1 -1
View File
@@ -326,7 +326,7 @@
var/turf/T = deploy_location
if(!is_mining_level(T.z))//only report capsules away from the mining/lavaland level
message_admins("[key_name_admin(usr)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) activated a bluespace capsule away from the mining level! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)")
message_admins("[key_name_admin(usr)] ([ADMIN_QUE(usr,"?")]) ([ADMIN_FLW(usr,"FLW")]) activated a bluespace capsule away from the mining level! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)")
log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [T.x], [T.y], [T.z]")
template.load(deploy_location, centered = TRUE)
new /obj/effect/particle_effect/smoke(get_turf(src))
+5 -5
View File
@@ -540,18 +540,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if((!target) || (!ghost)) return
if(isAI(target)) // AI core/eye follow links
var/mob/living/silicon/ai/A = target
. = "<a href='byond://?src=[ghost.UID()];follow=\ref[A]'>core</a>"
. = "<a href='byond://?src=[ghost.UID()];follow=[A.UID()]'>core</a>"
if(A.client && A.eyeobj) // No point following clientless AI eyes
. += "|<a href='byond://?src=[ghost.UID()];follow=\ref[A.eyeobj]'>eye</a>"
. += "|<a href='byond://?src=[ghost.UID()];follow=[A.eyeobj.UID()]'>eye</a>"
return
else if(istype(target, /mob/dead/observer))
var/mob/dead/observer/O = target
. = "<a href='byond://?src=[ghost.UID()];follow=\ref[target]'>follow</a>"
. = "<a href='byond://?src=[ghost.UID()];follow=[target.UID()]'>follow</a>"
if(O.mind && O.mind.current)
. += "|<a href='byond://?src=[ghost.UID()];follow=\ref[O.mind.current]'>body</a>"
. += "|<a href='byond://?src=[ghost.UID()];follow=[O.mind.current.UID()]'>body</a>"
return
else
return "<a href='byond://?src=[ghost.UID()];follow=\ref[target]'>follow</a>"
return "<a href='byond://?src=[ghost.UID()];follow=[target.UID()]'>follow</a>"
//BEGIN TELEPORT HREF CODE
/mob/dead/observer/Topic(href, href_list)
+1 -1
View File
@@ -1019,7 +1019,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
return 1
/mob/living/carbon/proc/forceFedAttackLog(var/obj/item/reagent_containers/food/toEat, mob/user)
add_attack_logs(user, src, "Fed [toEat]. Reagents: [toEat.reagentlist(toEat)]", ATKLOG_FEW)
add_attack_logs(user, src, "Fed [toEat]. Reagents: [toEat.reagentlist(toEat)]", ATKLOG_MOST)
if(!iscarbon(user))
LAssailant = null
else
@@ -19,8 +19,9 @@
for(var/obj/item/organ/internal/I in internal_organs)
if(isturf(loc))
var/atom/movable/thing = I.remove(src)
thing.forceMove(get_turf(src))
thing.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),5)
if(thing)
thing.forceMove(get_turf(src))
thing.throw_at(get_edge_target_turf(src, pick(alldirs)), rand(1,3), 5)
for(var/obj/item/organ/external/E in bodyparts)
if(istype(E, /obj/item/organ/external/chest))
@@ -41,9 +42,7 @@
hgibs(loc, dna)
else
new /obj/effect/decal/cleanable/blood/gibs/robot(loc)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
QDEL_IN(animation, 15)
QDEL_IN(src, 0)
return TRUE
@@ -840,7 +840,7 @@
if(locate(/obj/item/storage/bible) in get_turf(src))
to_chat(viewers(src), "<span class='danger'>[src] farts on the Bible!</span>")
var/image/cross = image('icons/obj/storage.dmi', "bible")
var/adminbfmessage = "[bicon(cross)] <span class='danger'>Bible Fart:</span> [key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=[UID()]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[UID()]'>PP</A>) (<A HREF='?_src_=vars;Vars=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[UID()]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b>"
var/adminbfmessage = "[bicon(cross)] <span class='danger'>Bible Fart:</span> [key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b>"
for(var/client/X in GLOB.admins)
if(check_rights(R_EVENT, 0, X.mob))
to_chat(X, adminbfmessage)
@@ -29,7 +29,7 @@
if(dna.species && dna.species.has_organ["brain"])
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
if(sponge)
if(dna.species)
if(dna.species && amount > 0)
amount = amount * dna.species.brain_mod
sponge.receive_damage(amount, 1)
if(updating)
@@ -43,7 +43,7 @@
if(dna.species && dna.species.has_organ["brain"])
var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
if(sponge)
if(dna.species)
if(dna.species && amount > 0)
amount = amount * dna.species.brain_mod
sponge.damage = min(max(amount, 0), (maxHealth*2))
if(updating)
@@ -76,11 +76,10 @@
amount += O.burn_dam
return amount
/mob/living/carbon/human/adjustBruteLoss(amount, updating_health = TRUE, damage_source = null, robotic = FALSE)
if(dna.species)
amount = amount * dna.species.brute_mod
if(amount > 0)
if(dna.species)
amount = amount * dna.species.brute_mod
take_overall_damage(amount, 0, updating_health, used_weapon = damage_source)
else
heal_overall_damage(-amount, 0, updating_health, FALSE, robotic)
@@ -88,9 +87,9 @@
return STATUS_UPDATE_HEALTH
/mob/living/carbon/human/adjustFireLoss(amount, updating_health = TRUE, damage_source = null, robotic = FALSE)
if(dna.species)
amount = amount * dna.species.burn_mod
if(amount > 0)
if(dna.species)
amount = amount * dna.species.burn_mod
take_overall_damage(0, amount, updating_health, used_weapon = damage_source)
else
heal_overall_damage(0, -amount, updating_health, FALSE, robotic)
@@ -98,9 +97,8 @@
return STATUS_UPDATE_HEALTH
/mob/living/carbon/human/proc/adjustBruteLossByPart(amount, organ_name, obj/damage_source = null, updating_health = TRUE)
if(dna.species)
if(dna.species && amount > 0)
amount = amount * dna.species.brute_mod
if(organ_name in bodyparts_by_name)
var/obj/item/organ/external/O = get_organ(organ_name)
@@ -111,9 +109,8 @@
O.heal_damage(-amount, 0, internal = 0, robo_repair = O.is_robotic(), updating_health = updating_health)
return STATUS_UPDATE_HEALTH
/mob/living/carbon/human/proc/adjustFireLossByPart(amount, organ_name, obj/damage_source = null, updating_health = TRUE)
if(dna.species)
if(dna.species && amount > 0)
amount = amount * dna.species.burn_mod
if(organ_name in bodyparts_by_name)
@@ -134,7 +131,7 @@
return ..()
/mob/living/carbon/human/adjustCloneLoss(amount)
if(dna.species)
if(dna.species && amount > 0)
amount = amount * dna.species.clone_mod
. = ..()
@@ -174,22 +171,22 @@
// Defined here solely to take species flags into account without having to recast at mob/living level.
/mob/living/carbon/human/adjustOxyLoss(amount)
if(dna.species)
if(dna.species && amount > 0)
amount = amount * dna.species.oxy_mod
. = ..()
/mob/living/carbon/human/setOxyLoss(amount)
if(dna.species)
if(dna.species && amount > 0)
amount = amount * dna.species.oxy_mod
. = ..()
/mob/living/carbon/human/adjustToxLoss(amount)
if(dna.species)
if(dna.species && amount > 0)
amount = amount * dna.species.tox_mod
. = ..()
/mob/living/carbon/human/setToxLoss(amount)
if(dna.species)
if(dna.species && amount > 0)
amount = amount * dna.species.tox_mod
. = ..()
@@ -107,12 +107,7 @@
custom_emote(1, "drops what [p_they()] [p_were()] holding, [p_their()] [E.name] malfunctioning!")
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system.start()
spawn(10)
qdel(spark_system)
do_sparks(5, 0, src)
/mob/living/carbon/human/proc/becomeSlim()
to_chat(src, "<span class='notice'>You feel fit again!</span>")
+2 -6
View File
@@ -709,14 +709,10 @@
adjustToxLoss(0.1)
else //stuff only for synthetics
if(alcohol_strength >= spark_start && prob(25))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
if(alcohol_strength >= collapse_start && prob(10))
emote("collapse")
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
if(alcohol_strength >= braindamage_start && prob(10))
adjustBrainLoss(1)
+1 -1
View File
@@ -150,7 +150,7 @@
message = uppertext(message)
verb = "yells loudly"
if((COMIC in mutations) || (locate(/obj/item/organ/internal/cyberimp/brain/clown_voice) in internal_organs))
if((COMIC in mutations) || (locate(/obj/item/organ/internal/cyberimp/brain/clown_voice) in internal_organs) || istype(get_item_by_slot(slot_wear_mask), /obj/item/clothing/mask/gas/voice/clown))
span = "sans"
if(span)
+1 -3
View File
@@ -286,9 +286,7 @@
visible_message("<span class='danger'>The [M.name] has shocked [src]!</span>", \
"<span class='userdanger'>The [M.name] has shocked [src]!</span>")
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
return 1
add_attack_logs(src, M, "Slime'd")
return
@@ -3,6 +3,8 @@
..(user)
var/msg = "<span class='info'>"
if(module)
msg += "It has loaded a [module.name].\n"
var/obj/act_module = get_active_hand()
if(act_module)
msg += "It is holding [bicon(act_module)] \a [act_module].\n"
@@ -275,6 +275,7 @@ var/list/robot_verbs_default = list(
QDEL_NULL(camera)
QDEL_NULL(cell)
QDEL_NULL(robot_suit)
QDEL_NULL(spark_system)
return ..()
/mob/living/silicon/robot/proc/pick_module()
@@ -373,17 +373,13 @@
to_chat(user, "<span class='warning'>The welder must be on for this task!</span>")
else
if(W.force) //if force is non-zero
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
..()
/mob/living/simple_animal/bot/bullet_act(obj/item/projectile/Proj)
if(Proj && (Proj.damage_type == BRUTE || Proj.damage_type == BURN))
if(prob(75) && Proj.damage > 0)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
return ..()
/mob/living/simple_animal/bot/emp_act(severity)
@@ -187,9 +187,7 @@
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
..()
/obj/machinery/bot_core/cleanbot
@@ -406,9 +406,7 @@
if(lasercolor == "r")
new /obj/item/clothing/suit/redtag(Tsec)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
new /obj/effect/decal/cleanable/blood/oil(loc)
..()
@@ -407,9 +407,7 @@
T.amount = amount
amount = 0
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
..()
/obj/machinery/bot_core/floorbot
@@ -595,9 +595,7 @@
if(emagged && prob(25))
playsound(loc, 'sound/voice/minsult.ogg', 50, 0)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
..()
/mob/living/simple_animal/bot/medbot/proc/declare(crit_patient)
@@ -847,9 +847,7 @@
cell.update_icon()
cell = null
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
new /obj/effect/decal/cleanable/blood/oil(loc)
..()
@@ -439,9 +439,7 @@ Auto Patrol: []"},
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
new /obj/effect/decal/cleanable/blood/oil(loc)
..()
@@ -165,9 +165,7 @@
depotarea.list_remove(src, depotarea.guard_list)
walk_to(src,0)
visible_message("<span class='userdanger'>[src] blows apart!</span>")
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
new /obj/effect/decal/cleanable/blood/oil(loc)
var/obj/effect/decal/mecha_wreckage/gygax/dark/wreck = new /obj/effect/decal/mecha_wreckage/gygax/dark(loc)
wreck.name = "sentry bot wreckage"
@@ -613,15 +613,11 @@
//spark for no reason
if(prob(5))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
/mob/living/simple_animal/pet/corgi/Ian/borgi/death(gibbed)
// Only execute the below if we successfully died
. = ..(gibbed)
if(!.)
return FALSE
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
@@ -52,9 +52,7 @@
. = ..(gibbed)
if(!.)
return FALSE
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
/mob/living/simple_animal/hostile/hivebot/tele//this still needs work
name = "Beacon"
@@ -75,7 +75,7 @@
return
var/turf/newloc = loc
message_admins("Megafauna [src] \
(<A HREF='?_src_=holder;adminplayerobservefollow=[UID()]'>FLW</A>) \
([ADMIN_FLW(src,"FLW")]) \
moved via shuttle from ([oldloc.x], [oldloc.y], [oldloc.z]) to \
([newloc.x], [newloc.y], [newloc.z])")
@@ -80,16 +80,12 @@
//repair a bit of damage
if(prob(1))
src.visible_message("<span class='warning'>[bicon(src)] [src] shudders and shakes as some of it's damaged systems come back online.</span>")
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
health += rand(25,100)
//spark for no reason
if(prob(5))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
//sometimes our targetting sensors malfunction, and we attack anyone nearby
if(prob(disabled ? 0 : 1))
@@ -129,9 +125,7 @@
src.visible_message("<span class='warning'>[bicon(src)] [src] begins to spark and shake violenty!</span>")
else
src.visible_message("<span class='warning'>[bicon(src)] [src] sparks and shakes like it's about to explode!</span>")
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
if(!exploding && !disabled && prob(explode_chance))
exploding = 1
@@ -154,9 +148,7 @@
/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell.
//some random debris left behind
if(has_loot)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
var/obj/O
//shards
+2 -2
View File
@@ -19,10 +19,10 @@
spawn() alert("You have logged in already with another key this round, please log out of this one NOW or risk being banned!")
if(matches)
if(M.client)
message_admins("<font color='red'><B>Notice: </B><font color='blue'><A href='?src=[usr.UID()];priv_msg=\ref[src]'>[key_name_admin(src)]</A> has the same [matches] as <A href='?src=[usr.UID()];priv_msg=\ref[M]'>[key_name_admin(M)]</A>.</font>", 1)
message_admins("<font color='red'><B>Notice: </B><font color='blue'><A href='?src=[usr.UID()];priv_msg=[src.UID()]'>[key_name_admin(src)]</A> has the same [matches] as <A href='?src=[usr.UID()];priv_msg=[M.UID()]'>[key_name_admin(M)]</A>.</font>", 1)
log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)].")
else
message_admins("<font color='red'><B>Notice: </B><font color='blue'><A href='?src=[usr.UID()];priv_msg=\ref[src]'>[key_name_admin(src)]</A> has the same [matches] as [key_name_admin(M)] (no longer logged in). </font>", 1)
message_admins("<font color='red'><B>Notice: </B><font color='blue'><A href='?src=[usr.UID()];priv_msg=[src.UID()]'>[key_name_admin(src)]</A> has the same [matches] as [key_name_admin(M)] (no longer logged in). </font>", 1)
log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).")
/mob/Login()
@@ -27,16 +27,12 @@
if(battery_module && prob(25))
qdel(battery_module)
computer.visible_message("<span class='notice'>\The [computer]'s battery explodes in rain of sparks.</span>")
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, computer.loc)
spark_system.start()
do_sparks(5, 0, computer.loc)
if(recharger && prob(50))
qdel(recharger)
computer.visible_message("<span class='notice'>\The [computer]'s recharger explodes in rain of sparks.</span>")
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, computer.loc)
spark_system.start()
do_sparks(5, 0, computer.loc)
/datum/computer_file/program/revelation/Topic(href, list/href_list)
+2 -2
View File
@@ -45,7 +45,7 @@ var/list/adminfaxes = list()
html += "<td>[station_time_timestamp("hh:mm:ss", A.sent_at)]</td>"
if(A.sent_by)
var/mob/living/S = A.sent_by
html += "<td><A HREF='?_src_=holder;adminplayeropts=\ref[A.sent_by]'>[S.name]</A></td>"
html += "<td>[ADMIN_PP(S,"[S.name]")]</td>"
else
html += "<td>Unknown</td>"
html += "<td><A align='right' href='?src=[UID()];AdminFaxView=\ref[A.message]'>View</A></td>"
@@ -74,7 +74,7 @@ var/list/adminfaxes = list()
html += "<td>[station_time_timestamp("hh:mm:ss", F.sent_at)]</td>"
if(F.sent_by)
var/mob/living/S = F.sent_by
html += "<td><A HREF='?_src_=holder;adminplayeropts=\ref[F.sent_by]'>[S.name]</A></td>"
html += "<td>[ADMIN_PP(S,"[S.name]")]</td>"
else
html += "<td>Unknown</td>"
html += "<td><A align='right' href='?src=[UID()];AdminFaxView=\ref[F.message]'>View</A></td>"
+1 -1
View File
@@ -316,7 +316,7 @@ var/list/alldepartments = list()
/obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/faxtype, var/obj/item/sent, font_colour="#9A04D1")
var/msg = "<span class='boldnotice'><font color='[font_colour]'>[faxname]: </font> [key_name_admin(sender)] | REPLY: (<A HREF='?_src_=holder;[faxname == "SYNDICATE FAX" ? "SyndicateReply" : "CentcommReply"]=[sender.UID()]'>RADIO</A>) (<a href='?_src_=holder;AdminFaxCreate=\ref[sender];originfax=\ref[src];faxtype=[faxtype];replyto=\ref[sent]'>FAX</a>) (<A HREF='?_src_=holder;subtlemessage=\ref[sender]'>SM</A>) | REJECT: (<A HREF='?_src_=holder;FaxReplyTemplate=\ref[sender];originfax=\ref[src]'>TEMPLATE</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[sender]'>BSA</A>) (<A HREF='?_src_=holder;EvilFax=\ref[sender];originfax=\ref[src]'>EVILFAX</A>) </span>: Receiving '[sent.name]' via secure connection... <a href='?_src_=holder;AdminFaxView=\ref[sent]'>view message</a>"
var/msg = "<span class='boldnotice'><font color='[font_colour]'>[faxname]: </font> [key_name_admin(sender)] | REPLY: (<A HREF='?_src_=holder;[faxname == "SYNDICATE FAX" ? "SyndicateReply" : "CentcommReply"]=[sender.UID()]'>RADIO</A>) (<a href='?_src_=holder;AdminFaxCreate=\ref[sender];originfax=\ref[src];faxtype=[faxtype];replyto=\ref[sent]'>FAX</a>) ([ADMIN_SM(sender,"SM")]) | REJECT: (<A HREF='?_src_=holder;FaxReplyTemplate=[sender.UID()];originfax=\ref[src]'>TEMPLATE</A>) ([ADMIN_BSA(sender,"BSA")]) (<A HREF='?_src_=holder;EvilFax=[sender.UID()];originfax=\ref[src]'>EVILFAX</A>) </span>: Receiving '[sent.name]' via secure connection... <a href='?_src_=holder;AdminFaxView=\ref[sent]'>view message</a>"
for(var/client/C in GLOB.admins)
if(check_rights(R_EVENT, 0, C.mob))
to_chat(C, msg)
+1 -1
View File
@@ -316,7 +316,7 @@
to_chat(user, "<span class='notice'>Take off the carbon copy first.</span>")
add_fingerprint(user)
return
var/obj/item/paper_bundle/B = new(src.loc)
var/obj/item/paper_bundle/B = new(src.loc, default_papers = FALSE)
if(name != "paper")
B.name = name
else if(P.name != "paper" && P.name != "photo")
+6 -2
View File
@@ -11,11 +11,15 @@
layer = 4
pressure_resistance = 1
attack_verb = list("bapped")
var/amount = 0 //Amount of items clipped to the paper
var/amount = 0 //Amount of items clipped to the paper. Note: If you have 2 paper, this should be 1
var/page = 1
var/screen = 0
/obj/item/paper_bundle/New(default_papers = TRUE)
if(default_papers) // This is to avoid runtime occuring from a paper bundle being created without a paper in it.
new /obj/item/paper(src)
new /obj/item/paper(src)
amount += 1
/obj/item/paper_bundle/attackby(obj/item/W as obj, mob/user as mob, params)
..()
var/obj/item/paper/P
+21 -12
View File
@@ -72,9 +72,15 @@
photocopy(copyitem)
sleep(15)
else if(istype(copyitem, /obj/item/paper_bundle))
var/obj/item/paper_bundle/C = copyitem
if(toner < (C.amount + 1))
visible_message("<span class='notice'>A yellow light on [src] flashes, indicating there's not enough toner for the operation.</span>") // It is better to prevent partial bundle than to produce broken paper bundle
return
var/obj/item/paper_bundle/B = bundlecopy(copyitem)
if(!B)
return
sleep(15*B.amount)
else if(ass && ass.loc == src.loc)
else if(ass && ass.loc == loc)
copyass()
sleep(15)
else
@@ -287,7 +293,7 @@
//If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner
/obj/machinery/photocopier/proc/bundlecopy(var/obj/item/paper_bundle/bundle, var/need_toner=1)
var/obj/item/paper_bundle/p = new /obj/item/paper_bundle (src)
var/obj/item/paper_bundle/P = new /obj/item/paper_bundle (src, default_papers = FALSE)
for(var/obj/item/W in bundle)
if(toner <= 0 && need_toner)
toner = 0
@@ -298,16 +304,19 @@
W = copy(W)
else if(istype(W, /obj/item/photo))
W = photocopy(W)
W.forceMove(p)
p.amount++
p.amount--
p.forceMove(get_turf(src))
p.update_icon()
p.icon_state = "paper_words"
p.name = bundle.name
p.pixel_y = rand(-8, 8)
p.pixel_x = rand(-9, 9)
return p
W.forceMove(P)
P.amount++
if(!P.amount)
qdel(P)
return null
P.amount--
P.forceMove(get_turf(src))
P.update_icon()
P.icon_state = "paper_words"
P.name = bundle.name
P.pixel_y = rand(-8, 8)
P.pixel_x = rand(-9, 9)
return P
/obj/machinery/photocopier/MouseDrop_T(mob/target, mob/user)
+3 -9
View File
@@ -536,9 +536,7 @@
var/turf/T = get_turf(src)
var/obj/structure/cable/N = T.get_cable_node()
if(prob(50) && electrocute_mob(usr, N, N))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
return
C.use(10)
user.visible_message(\
@@ -555,9 +553,7 @@
if(do_after(user, 50 * W.toolspeed, target = src))
if(terminal && opened && has_electronics!=2)
if(prob(50) && electrocute_mob(usr, terminal.powernet, terminal))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
return
new /obj/item/stack/cable_coil(loc,10)
to_chat(user, "<span class='notice'>You cut the cables and dismantle the power terminal.</span>")
@@ -1076,9 +1072,7 @@
smoke.set_up(3, 0, src.loc)
smoke.attach(src)
smoke.start()
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
for(var/mob/M in viewers(src))
M.show_message("<span class='danger'>The [src.name] suddenly lets out a blast of smoke and some sparks!", 3, "<span class='danger'>You hear sizzling electronics.</span>", 2)
+1 -3
View File
@@ -195,9 +195,7 @@ By design, d1 is the smallest direction and d2 is the highest
if(!prob(prb))
return 0
if(electrocute_mob(user, powernet, src, siemens_coeff))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
return 1
else
return 0
+2 -6
View File
@@ -386,9 +386,7 @@
to_chat(user, "You stick \the [W] into the light socket!")
if(has_power() && (W.flags & CONDUCT))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
if(prob(75))
electrocute_mob(user, get_area(src), src, rand(0.7,1.0))
@@ -540,9 +538,7 @@
if(status == LIGHT_OK || status == LIGHT_BURNED)
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
if(on || overloaded)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
status = LIGHT_BROKEN
update()
@@ -99,9 +99,7 @@
if(hasShocked)
return 0
hasShocked = 1
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, AM.loc)
s.start()
do_sparks(5, 1, AM.loc)
var/atom/target = get_edge_target_turf(AM, get_dir(src, get_step_away(AM, src)))
AM.throw_at(target, 200, 4)
spawn(5)
+5 -3
View File
@@ -24,6 +24,7 @@
var/frequency = 0
var/id_tag = null
var/datum/radio_frequency/radio_connection
var/datum/effect_system/spark_spread/sparks
/obj/machinery/power/emitter/New()
..()
@@ -32,6 +33,8 @@
component_parts += new /obj/item/stock_parts/micro_laser(null)
component_parts += new /obj/item/stock_parts/manipulator(null)
RefreshParts()
sparks = new
sparks.set_up(5, 1, src)
/obj/machinery/power/emitter/RefreshParts()
var/max_firedelay = 120
@@ -124,6 +127,7 @@
msg_admin_attack("Emitter deleted at ([x],[y],[z] - [ADMIN_JMP(src)])", ATKLOG_FEW)
log_game("Emitter deleted at ([x],[y],[z])")
investigate_log("<font color='red'>deleted</font> at ([x],[y],[z])","singulo")
QDEL_NULL(sparks)
return ..()
/obj/machinery/power/emitter/update_icon()
@@ -206,9 +210,7 @@
A.dir = src.dir
playsound(get_turf(src), 'sound/weapons/emitter.ogg', 25, 1)
if(prob(35))
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
sparks.start()
switch(dir)
if(NORTH)
+3 -9
View File
@@ -184,9 +184,7 @@
if(do_after(user, 50 * I.toolspeed, target = src))
if(prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) //animate the electrocution if uncautious and unlucky
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
return
//give the wires back and delete the terminal
@@ -323,9 +321,7 @@
var/turf/T = get_turf(user)
var/obj/structure/cable/N = T.get_cable_node() //get the connecting node cable, if there's one
if(prob(50) && electrocute_mob(user, N, N)) //animate the electrocution if uncautious and unlucky
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
return
user.visible_message(\
@@ -446,9 +442,7 @@
qdel(src)
return
if(prob(15)) //Power drain
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
if(prob(50))
emp_act(1)
else
@@ -96,9 +96,7 @@
..()
/obj/item/projectile/bullet/pellet/weak/on_range()
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
sparks.set_up(1, 1, src)
sparks.start()
do_sparks(1, 1, src)
..()
/obj/item/projectile/bullet/pellet/overload
@@ -114,9 +112,7 @@
/obj/item/projectile/bullet/pellet/overload/on_range()
explosion(src, 0, 0, 2)
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
sparks.set_up(3, 3, src)
sparks.start()
do_sparks(3, 3, src)
..()
/obj/item/projectile/bullet/midbullet
@@ -22,9 +22,7 @@
/obj/item/projectile/energy/electrode/on_hit(var/atom/target, var/blocked = 0)
. = ..()
if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - burst into sparks!
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
sparks.set_up(1, 1, src)
sparks.start()
do_sparks(1, 1, src)
else if(iscarbon(target))
var/mob/living/carbon/C = target
if(HULK in C.mutations)
@@ -34,9 +32,7 @@
C.do_jitter_animation(jitter)
/obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
sparks.set_up(1, 1, src)
sparks.start()
do_sparks(1, 1, src)
..()
/obj/item/projectile/energy/declone
@@ -193,9 +193,7 @@
icon_state = "snappop"
/obj/item/projectile/clown/Bump(atom/A as mob|obj|turf|area)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
do_sparks(3, 1, src)
new /obj/effect/decal/cleanable/ash(loc)
visible_message("<span class='warning'>The [name] explodes!</span>","<span class='warning'>You hear a snap!</span>")
playsound(src, 'sound/effects/snap.ogg', 50, 1)
@@ -594,6 +594,11 @@ var/const/INGEST = 2
return 1
/datum/reagents/proc/check_and_add(reagent, check, add)
if(get_reagent_amount(reagent) < check)
add_reagent(reagent, add)
return TRUE
/datum/reagents/proc/remove_reagent(reagent, amount, safety)//Added a safety check for the trans_id_to
if(!isnum(amount))
@@ -20,7 +20,7 @@
/obj/machinery/chem_master/New()
create_reagents(100)
overlays += "waitlight"
update_icon()
/obj/machinery/chem_master/ex_act(severity)
switch(severity)
@@ -32,6 +32,12 @@
qdel(src)
return
/obj/machinery/chem_master/update_icon()
overlays.Cut()
icon_state = "mixer[beaker ? "1" : "0"][powered() ? "" : "_nopower"]"
if(powered())
overlays += "waitlight"
/obj/machinery/chem_master/blob_act()
if(prob(50))
qdel(src)
@@ -57,7 +63,7 @@
B.forceMove(src)
to_chat(user, "<span class='notice'>You add the beaker to the machine!</span>")
SSnanoui.update_uis(src)
icon_state = "mixer1"
update_icon()
else if(istype(B, /obj/item/storage/pill_bottle))
@@ -184,7 +190,7 @@
beaker.forceMove(get_turf(src))
beaker = null
reagents.clear_reagents()
icon_state = "mixer0"
update_icon()
else if(href_list["createpill"] || href_list["createpill_multiple"])
if(!condi)
var/count = 1
@@ -296,6 +296,7 @@
/datum/reagent/consumable/drink/coffee/overdose_process(mob/living/M, severity)
if(volume > 45)
M.Jitter(5)
return list(0, STATUS_UPDATE_NONE)
/datum/reagent/consumable/drink/coffee/icecoffee
name = "Iced Coffee"
@@ -641,6 +641,7 @@
update_flags |= M.Weaken(3, FALSE)
if(effect <= 15)
M.emote("collapse")
return list(effect, update_flags)
/datum/reagent/medicine/strange_reagent
name = "Strange Reagent"
+2 -2
View File
@@ -38,11 +38,11 @@ var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs
var/turf/T = get_turf(A)
var/area/my_area = get_area(T)
var/message = "A [reaction_name] reaction has occured in [my_area.name]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</A>)"
message += " (<A HREF='?_src_=vars;Vars=[A.UID()]'>VV</A>)"
message += " ([ADMIN_VV(A,"VV")])"
var/mob/M = get(A, /mob)
if(M)
message += " - Carried By: [key_name_admin(M)](<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[M]'>FLW</A>)"
message += " - Carried By: [key_name_admin(M)]([ADMIN_QUE(M,"?")]) ([ADMIN_FLW(M,"FLW")])"
else
message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
@@ -157,9 +157,7 @@
/datum/chemical_reaction/blackpowder_explosion/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, location)
s.start()
do_sparks(2, 1, location)
sleep(rand(20,30))
blackpowder_detonate(holder, created_volume)
@@ -186,9 +184,7 @@ datum/chemical_reaction/flash_powder
if(holder.has_reagent("stabilizing_agent"))
return
var/location = get_turf(holder.my_atom)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, location)
s.start()
do_sparks(2, 1, location)
for(var/mob/living/carbon/C in viewers(5, location))
if(C.flash_eyes())
if(get_dist(C, location) < 4)
@@ -206,9 +202,7 @@ datum/chemical_reaction/flash_powder
/datum/chemical_reaction/flash_powder_flash/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, location)
s.start()
do_sparks(2, 1, location)
for(var/mob/living/carbon/C in viewers(5, location))
if(C.flash_eyes())
if(get_dist(C, location) < 4)
@@ -144,9 +144,7 @@
/datum/chemical_reaction/teslium/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(6, 1, location)
s.start()
do_sparks(6, 1, location)
/datum/chemical_reaction/mutagen
name = "Unstable mutagen"
@@ -653,6 +653,15 @@
construction_time = 200
category = list("Exosuit Equipment")
/datum/design/medical_jaw
name = "Exosuit Medical Equipment (Rescue Jaw)"
id = "mech_medical_jaw"
build_type = MECHFAB
req_tech = list("materials" = 4, "engineering" = 6, "magnets" = 6) //now same as jaws of life
materials = list(MAT_METAL=5000,MAT_SILVER=2000,MAT_TITANIUM=1500)
construction_time = 200
category = list("Exosuit Equipment")
/datum/design/mech_generator
name = "Exosuit Equipment (Plasma Generator)"
id = "mech_generator"
@@ -411,6 +411,7 @@
l_pocket = /obj/item/grenade/clusterbuster/holy
shoes = /obj/item/clothing/shoes/magboots/advance
glasses = /obj/item/clothing/glasses/night
r_pocket = /obj/item/nullrod
cybernetic_implants = list(
/obj/item/organ/internal/cyberimp/chest/nutriment/plus,
+2 -2
View File
@@ -60,8 +60,8 @@
name = "DNA Sampler"
desc = "Can be used to take chemical and genetic samples of pretty much anything."
icon = 'icons/obj/hypo.dmi'
item_state = "hypo"
icon_state = "hypo"
item_state = "sampler_hypo"
icon_state = "sampler_hypo"
flags = NOBLUDGEON
var/list/animals = list()
var/list/plants = list()
+3 -5
View File
@@ -284,9 +284,7 @@
var/mob/living/carbon/human/H = user
if(H.get_int_organ(/obj/item/organ/internal/cell))
if(A.emagged || A.stat & BROKEN)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, A)
s.start()
do_sparks(3, 1, A)
to_chat(H, "<span class='warning'>The APC power currents surge erratically, damaging your chassis!</span>")
H.adjustFireLoss(10,0)
else if(A.cell && A.cell.charge > 0)
@@ -326,11 +324,11 @@
/obj/item/organ/internal/cyberimp/arm/telebaton
name = "telebaton implant"
desc = "Telescopic baton implant. Does what it says on the tin" // A better description
contents = newlist(/obj/item/melee/classic_baton)
/obj/item/organ/internal/cyberimp/arm/advmop
name = "advanced mop implant"
desc = "Advanced mop implant. Does what it says on the tin" // A better description
contents = newlist(/obj/item/mop/advanced)
@@ -608,6 +608,7 @@ Note that amputating the affected organ does in fact remove the infection from t
"<span class='warning'>You hear a loud cracking sound coming from \the [owner].</span>",\
"<span class='danger'>Something feels like it shattered in your [name]!</span>",\
"You hear a sickening crack.")
playsound(owner, "bonebreak", 150, 1)
if(owner.dna.species && !(NO_PAIN in owner.dna.species.species_traits))
owner.emote("scream")
@@ -728,12 +729,7 @@ Note that amputating the affected organ does in fact remove the infection from t
"<span class='danger'>Your [src.name] explodes!</span>",\
"<span class='danger'>You hear an explosion!</span>")
explosion(get_turf(owner),-1,-1,2,3)
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, victim)
spark_system.attach(owner)
spark_system.start()
spawn(10)
qdel(spark_system)
do_sparks(5, 0, victim)
qdel(src)
/obj/item/organ/external/proc/disfigure()
+1 -3
View File
@@ -155,8 +155,6 @@
/obj/item/rcs/emag_act(user as mob)
if(!emagged)
emagged = 1
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
do_sparks(5, 1, src)
to_chat(user, "<span class = 'caution'> You emag the RCS. Activate it to toggle between modes.</span>")
return
+3 -9
View File
@@ -145,9 +145,7 @@
/obj/machinery/computer/telescience/proc/sparks()
if(telepad)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, get_turf(telepad))
s.start()
do_sparks(5, 1, get_turf(telepad))
else
return
@@ -203,9 +201,7 @@
// use a lot of power
use_power(power * 10)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, get_turf(telepad))
s.start()
do_sparks(5, 1, get_turf(telepad))
temp_msg = "Teleport successful.<BR>"
if(teles_left < 10)
@@ -214,9 +210,7 @@
temp_msg += "Data printed below."
var/sparks = get_turf(target)
var/datum/effect_system/spark_spread/y = new /datum/effect_system/spark_spread
y.set_up(5, 1, sparks)
y.start()
do_sparks(5, 1, sparks)
var/turf/source = target
var/turf/dest = get_turf(telepad)