Merge pull request #269 from SoundScopes/master

Scopes updates
This commit is contained in:
skull132
2014-09-24 20:32:25 +03:00
107 changed files with 1069 additions and 224 deletions
+19 -4
View File
@@ -11,11 +11,17 @@ var/global/floorIsLava = 0
if(R_ADMIN & C.holder.rights)
C << msg
/proc/message_mods(var/msg)
msg = "<span class=\"admin\"><span class=\"prefix\">MOD LOG:</span> <span class=\"message\">[msg]</span></span>"
for(var/client/C in admins)
if(R_MOD & C.holder.rights && !(R_ADMIN & C.holder.rights))
C << msg
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
log_attack(text)
var/rendered = "<span class=\"admin\"><span class=\"prefix\">ATTACK:</span> <span class=\"message\">[text]</span></span>"
for(var/client/C in admins)
if(R_MOD || R_ADMIN & C.holder.rights)
if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights))
if(C.prefs.toggles & CHAT_ATTACKLOGS)
var/msg = rendered
C << msg
@@ -28,14 +34,18 @@ var/global/floorIsLava = 0
set name = "Show Player Panel"
set desc="Edit player (respawn, ban, heal, etc)"
if(!check_rights(R_ADMIN|R_MOD)) return
if(!M)
usr << "You seem to be selecting a mob that doesn't exist anymore."
return
/*
if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
return
*/
var/body = "<html><head><title>Options for [M.key]</title></head>"
body += "<body>Options panel for <b>[M]</b>"
@@ -192,11 +202,14 @@ var/global/floorIsLava = 0
/datum/admins/proc/PlayerNotes()
set category = "Admin"
set name = "Player Notes"
if (!istype(src,/datum/admins))
/* if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
return
*/
if(!check_rights(R_ADMIN|R_MOD))
return
PlayerNotesPage(1)
/datum/admins/proc/PlayerNotesPage(page)
@@ -246,7 +259,6 @@ var/global/floorIsLava = 0
if(!infos || !infos.len) return 0
else return 1
/datum/admins/proc/show_player_info(var/key as text)
set category = "Admin"
set name = "Show Player Info"
@@ -855,11 +867,12 @@ var/global/floorIsLava = 0
set desc="Delay the game start/end"
set name="Delay"
if(!check_rights(R_SERVER|R_DEV)) return
if(!check_rights(R_SERVER|R_DEBUG)) return
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
message_mods("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
return //alert("Round end delayed", null, null, null, null, null)
going = !( going )
if (!( going ))
@@ -1237,6 +1250,7 @@ proc/move_alien_ship()
log_admin("[key_name(usr)] winded [key_name(M)]!")
message_admins("[key_name_admin(usr)] winded [key_name_admin(M)]!", 1)
message_mods("[key_name_admin(usr)] winded [key_name_admin(M)]!")
// feedback_add_details("admin_verb","WIND") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
// Chop chop.
return
@@ -1249,4 +1263,5 @@ proc/move_alien_ship()
log_admin("[key_name(usr)] unwinded [key_name(M)]!")
message_admins("[key_name_admin(usr)] unwinded [key_name_admin(M)]!", 1)
message_mods("[key_name_admin(usr)] unwinded [key_name_admin(M)]!", 1)
return
+40 -11
View File
@@ -1,17 +1,17 @@
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
var/list/admin_verbs_default = list(
/datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
/client/proc/player_panel,
/client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/
/client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
/client/proc/hide_verbs, /*hides all our adminverbs*/
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
/client/proc/check_antagonists, /*shows all antags*/
/client/proc/cmd_mentor_check_new_players
// /client/proc/deadchat /*toggles deadchat on/off*/
)
var/list/admin_verbs_admin = list(
/datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
/client/proc/check_antagonists, /*shows all antags*/
/client/proc/alertlevels,
/client/proc/cmd_admin_wind,
/client/proc/cmd_admin_unwind,
@@ -53,11 +53,11 @@ var/list/admin_verbs_admin = list(
/client/proc/check_antagonists,
/client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
/client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
/client/proc/toggleprayers, /*toggles prayers on/off*/
// /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/
/client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
/client/proc/secrets,
/client/proc/toggleprayers,
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
/datum/admins/proc/togglelooc,
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
@@ -96,7 +96,7 @@ var/list/admin_verbs_fun = list(
/client/proc/cmd_admin_dress,
/client/proc/cmd_admin_gib_self,
/client/proc/drop_bomb,
/client/proc/everyone_random,
/client/proc/everyone_random,
/client/proc/cinematic,
/client/proc/one_click_antag,
/datum/admins/proc/toggle_aliens,
@@ -105,6 +105,7 @@ var/list/admin_verbs_fun = list(
/client/proc/cmd_admin_add_freeform_ai_law,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/make_sound,
/client/proc/make_area_sound,
/client/proc/toggle_random_events,
/client/proc/set_ooc,
/client/proc/editappear
@@ -112,8 +113,6 @@ var/list/admin_verbs_fun = list(
var/list/admin_verbs_dev = list(
/client/proc/dsay,
/client/proc/togglebuildmodeself,
/datum/admins/proc/restart,
/datum/admins/proc/delay,
/client/proc/giveruntimelog,
/client/proc/getruntimelog,
/client/proc/cmd_admin_list_open_jobs,
@@ -128,12 +127,11 @@ var/list/admin_verbs_dev = list(
/client/proc/cmd_admin_delete,
/client/proc/cmd_debug_del_all,
/client/proc/cmd_debug_tog_aliens,
/datum/admins/proc/restart,
/client/proc/air_report,
/client/proc/reload_admins,
/client/proc/restart_controller,
/client/proc/enable_debug_verbs,
/client/proc/callproc,
/client/proc/toggleattacklogs,
/client/proc/toggledebuglogs,
/client/proc/SDQL_query,
/client/proc/SDQL2_query,
@@ -168,8 +166,10 @@ var/list/admin_verbs_server = list(
/client/proc/check_customitem_activity
)
var/list/admin_verbs_debug = list(
/client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/
/client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/
/client/proc/cmd_admin_list_open_jobs,
/datum/admins/proc/restart,
/datum/admins/proc/delay,
/client/proc/Debug2,
/client/proc/kill_air,
/client/proc/ZASSettings,
@@ -188,7 +188,6 @@ var/list/admin_verbs_debug = list(
/client/proc/toggledebuglogs,
/client/proc/SDQL_query,
/client/proc/SDQL2_query,
/client/proc/cmd_dev_bst,
/client/proc/cmd_dev_reset_gravity
)
var/list/admin_verbs_possess = list(
@@ -240,6 +239,7 @@ var/list/admin_verbs_hideable = list(
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/cmd_admin_create_centcom_report,
/client/proc/make_sound,
/client/proc/make_area_sound,
/client/proc/toggle_random_events,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/Set_Holiday,
@@ -274,6 +274,8 @@ var/list/admin_verbs_hideable = list(
/proc/release
)
var/list/admin_verbs_mod = list(
/client/proc/check_antagonists, /*shows all antags*/
/client/proc/cmd_admin_check_contents,
/client/proc/cmd_admin_wind,
/client/proc/cmd_admin_unwind,
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
@@ -281,15 +283,18 @@ var/list/admin_verbs_mod = list(
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/
/client/proc/toggleattacklogs,
/client/proc/toggledebuglogs,
/client/proc/toggleprayers,
/datum/admins/proc/PlayerNotes,
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
/client/proc/cmd_mod_say,
/client/proc/check_ai_laws,
/datum/admins/proc/show_player_info,
/client/proc/player_panel_new,
/client/proc/dsay,
/datum/admins/proc/show_skills,
/datum/admins/proc/show_player_panel,
/client/proc/check_antagonists,
/datum/admins/proc/adjump,
/client/proc/jobbans,
/client/proc/cmd_admin_subtle_message /*send an message to somebody as a 'voice in their head'*/
)
@@ -520,7 +525,7 @@ var/list/admin_verbs_mod = list(
#define AUTOBANTIME 10
/client/proc/warn(warned_ckey)
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_MOD)) return
if(!warned_ckey || !istext(warned_ckey)) return
if(warned_ckey in admin_datums)
@@ -540,18 +545,22 @@ var/list/admin_verbs_mod = list(
ban_unban_log_save("[ckey] warned [warned_ckey], resulting in a [AUTOBANTIME] minute autoban.")
if(C)
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.")
message_mods("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.")
C << "<font color='red'><BIG><B>You have been autobanned due to a warning by [ckey].</B></BIG><br>This is a temporary ban, it will be removed in [AUTOBANTIME] minutes."
del(C)
else
message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.")
message_mods("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.")
AddBan(warned_ckey, D.last_id, "Autobanning due to too many formal warnings", ckey, 1, AUTOBANTIME)
feedback_inc("ban_warn",1)
else
if(C)
C << "<font color='red'><BIG><B>You have been formally warned by an administrator.</B></BIG><br>Further warnings will result in an autoban.</font>"
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.")
message_mods("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.")
else
message_admins("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.")
message_mods("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.")
feedback_add_details("admin_verb","WARN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -658,6 +667,23 @@ var/list/admin_verbs_mod = list(
message_admins("\blue [key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound", 1)
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/make_area_sound(var/turf/T in world) // -- TLE
set category = "Special Verbs"
set name = "Make Area Sound"
set desc = "Display a message to everyone in the area (Experimental)"
if(T)
var/message = input("What do you want the message to be?", "Make Area Sound (Experimental)") as text|null
if(!message)
return
var/area/A = get_area(T)
if(!A == A.master)
A = A.master
for(var/area/SubA in A.related)
for (var/mob/V in SubA)
V.show_message(message, 2)
log_admin("[key_name(usr)] made [A.name] make a sound")
message_admins("\blue [key_name_admin(usr)] made [A.name] make a sound", 1)
feedback_add_details("admin_verb","MAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/togglebuildmodeself()
set name = "Toggle Build Mode Self"
@@ -797,6 +823,9 @@ var/list/admin_verbs_mod = list(
/client/proc/playernotes()
set name = "Show Player Info"
set category = "Admin"
if(!check_rights(R_ADMIN|R_MOD))
return
if(holder)
holder.PlayerNotes()
return
+17 -8
View File
@@ -323,7 +323,13 @@
if (!usr.client.holder)
return
var/dat = "<html><head><title>Player Menu</title></head>"
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name</th><th>Real Name</th><th>Assigned Job</th><th>Key</th><th>Options</th><th>PM</th><th>Traitor?</th></tr></B>"
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name</th><th>Real Name</th><th>Assigned Job</th><th>Key</th><th>Options</th><th>PM</th>"
if(check_rights(R_ADMIN|R_MOD, 0))
dat += "<th>Traitor?</th></tr></B>"
else
dat += "<th>View Var's</th></tr></B>"
//add <th>IP:</th> to this if wanting to add back in IP checking
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
var/list/mobs = sortmobs()
@@ -364,13 +370,16 @@
<td align=center><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>X</A></td>
<td align=center><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>
"}
switch(is_special_character(M))
if(0)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'>Traitor?</A></td>"}
if(1)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
if(2)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
if(!check_rights(R_ADMIN|R_MOD, 0))
dat += {"<td align=center><a HREF='?_src_=vars;Vars=\ref[M]'>VV</a></td>"}
else
switch(is_special_character(M))
if(0)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'>Traitor?</A></td>"}
if(1)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
if(2)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
dat += "</table></body></html>"
+20
View File
@@ -48,6 +48,10 @@
log_admin("[key_name(usr)] has spawned vox raiders.")
if(!src.makeVoxRaiders())
usr << "\red Unfortunately there weren't enough candidates available."
if("12")
log_admin("[key_name(usr)] has spawned a vampire.")
if(!src.makeVampire())
usr << "\red Unfortunately there weren't enough candidates available."
else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"])
var/adminckey = href_list["dbsearchadmin"]
var/playerckey = href_list["dbsearchckey"]
@@ -248,6 +252,7 @@
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
message_mods("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
href_list["secretsadmin"] = "check_antagonist"
else if(href_list["simplemake"])
@@ -1470,6 +1475,20 @@
log_admin("[src.owner] replied to [key_name(H)]'s Syndicate message with the message [input].")
H << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. <b>\"[input]\"</b> Message ends.\""
else if(href_list["CentcommAIReply"])
var/mob/living/silicon/ai/H = locate(href_list["CentcommAIReply"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/silicon"
return
var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via encripted.","Outgoing message from Central Command", "")
if(!input) return
src.owner << "You sent [input] to [H] via a secure channel."
log_admin("[src.owner] replied to [key_name(H)]'s Centcomm message with the message [input].")
message_admins("[src.owner] replied to [key_name(H)]'s Centcom message with: \"[input]\"")
H << "An encripted connection was made and a file was uploaded to your systems. \"Please stand by for a message from Central Command. Message as follows. <b>\"[input]\"</b> Message ends.\""
else if(href_list["CentcommFaxView"])
var/info = locate(href_list["CentcommFaxView"])
@@ -1510,6 +1529,7 @@
src.owner << "Message reply to transmitted successfully."
log_admin("[key_name(src.owner)] replied to a fax message from [key_name(H)]: [input]")
message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]", 1)
message_mods("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]")
else if(href_list["jumpto"])
+4 -2
View File
@@ -33,7 +33,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(!msg) return
var/original_msg = msg
//explode the input msg into a list
var/list/msglist = text2list(msg, " ")
@@ -94,9 +94,11 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
msg = "\blue <b><font color=red>HELP: </font>[get_options_bar(mob, 2, 1, 1)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
//send this msg to all admins
var/admin_number_present = 0
var/admin_number_afk = 0
for(var/client/X in admins)
if((R_ADMIN|R_MOD) & X.holder.rights)
admin_number_present++
if(X.is_afk())
admin_number_afk++
if(X.prefs.toggles & SOUND_ADMINHELP)
@@ -106,7 +108,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
//show it to the person adminhelping too
src << "<font color='blue'>PM to-<b>Admins</b>: [original_msg]</font>"
var/admin_number_present = admins.len - admin_number_afk
admin_number_present = (admin_number_present - admin_number_afk)
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
if(admin_number_present <= 0)
if(!admin_number_afk)
+4 -3
View File
@@ -31,7 +31,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
set category = "Debug"
set name = "Advanced ProcCall"
if(!check_rights(R_DEBUG|R_DEV)) return
if(!check_rights(R_DEBUG)) return
spawn(0)
var/target = null
@@ -436,7 +436,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
GLOBAL_RADIO_TYPE = !GLOBAL_RADIO_TYPE // toggle
log_admin("[key_name(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].")
message_admins("[key_name_admin(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].", 0)
msg_scopes("[key_name_admin(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].", 0)
msg_scopes("[key_name_admin(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].", 1)
feedback_add_details("admin_verb","SRM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_areatest()
@@ -1103,11 +1103,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return
/client/proc/startSinglo()
set category = "Debug"
set name = "Start Singularity"
set desc = "Sets up the singularity and all machines to get power flowing through the station"
if(!check_rights(R_DEBUG)) return
if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes")
return
+1 -1
View File
@@ -144,7 +144,7 @@ var/list/debug_verbs = list (
,/client/proc/splash
,/client/proc/cmd_admin_areatest
,/client/proc/cmd_admin_rejuvenate
,/datum/admins/proc/show_traitor_panel
// ,/datum/admins/proc/show_traitor_panel //What has this got to do with mapping
,/client/proc/print_jobban_old
,/client/proc/print_jobban_old_filter
,/client/proc/forceEvent
+7 -1
View File
@@ -264,6 +264,12 @@ var/list/forbidden_varedit_object_types = list(
if("marked datum")
L[L.Find(variable)] = holder.marked_datum
//Runtimes >_< List's are like organised messes.
//This worked the other day.
// world.log << "### VarEdit by [src]: [variable]=[html_encode("[L[L.Find(variable)]]")]"
// log_admin("[key_name(src)] modified [variable] to [L[L.Find(variable)]]")
// message_admins("[key_name_admin(src)] modified [variable] to [L[L.Find(variable)]]", 1)
// msg_scopes("[key_name_admin(src)] modified [variable] to [L[L.Find(variable)]]", 1) // Tell dev's to but not log twice
/client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0)
if(!check_rights(R_VAREDIT|R_DEV)) return
@@ -498,4 +504,4 @@ var/list/forbidden_varedit_object_types = list(
world.log << "### VarEdit by [src]: [O.type] [variable]=[html_encode("[O.vars[variable]]")]"
log_admin("[key_name(src)] modified [original_name]'s [variable] to [O.vars[variable]]")
message_admins("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]", 1)
msg_scopes("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]", 1) // Tell dev's to but look at the logs
msg_scopes("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]", 1) // Tell dev's to but not log twice
+37 -4
View File
@@ -18,6 +18,7 @@ client/proc/one_click_antag()
<a href='?src=\ref[src];makeAntag=5'>Make Malf AI</a><br>
<a href='?src=\ref[src];makeAntag=6'>Make Wizard (Requires Ghosts)</a><br>
<a href='?src=\ref[src];makeAntag=11'>Make Vox Raiders (Requires Ghosts)</a><br>
<a href='?src=\ref[src];makeAntag=12'>Make Vampire</a><br>
"}
/* These dont work just yet
Ninja, aliens and deathsquad I have not looked into yet
@@ -100,9 +101,10 @@ client/proc/one_click_antag()
if(!applicant.stat)
if(applicant.mind)
if (!applicant.mind.special_role)
if(!jobban_isbanned(applicant, "changeling") && !jobban_isbanned(applicant, "Syndicate"))
if(!(applicant.job in temp.restricted_jobs))
candidates += applicant
if(applicant.species.name != "Machine")
if(!jobban_isbanned(applicant, "changeling") && !jobban_isbanned(applicant, "Syndicate"))
if(!(applicant.job in temp.restricted_jobs))
candidates += applicant
if(candidates.len)
var/numChanglings = min(candidates.len, 3)
@@ -520,4 +522,35 @@ client/proc/one_click_antag()
ticker.mode.traitors += new_vox.mind
new_vox.equip_vox_raider()
return new_vox
return new_vox
/datum/admins/proc/makeVampire()
var/datum/game_mode/vampire/temp = new
if(config.protect_roles_from_antagonist)
temp.restricted_jobs += temp.protected_jobs
var/list/mob/living/carbon/human/candidates = list()
var/mob/living/carbon/human/H = null
for(var/mob/living/carbon/human/applicant in player_list)
if(applicant.client.prefs.be_special & BE_VAMPIRE)
if(!applicant.stat)
if(applicant.mind)
if (!applicant.mind.special_role)
if(applicant.species.name != "Machine")
if(!jobban_isbanned(applicant, "vampire") && !jobban_isbanned(applicant, "Syndicate"))
if(!(applicant.job in temp.restricted_jobs))
candidates += applicant
if(candidates.len)
var/numVampires = min(candidates.len, 3)
for(var/i = 0, i<numVampires, i++)
H = pick(candidates)
H.mind.make_Vampire()
candidates.Remove(H)
return 1
return 0
+13 -5
View File
@@ -20,19 +20,27 @@
msg = "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
for(var/client/C in admins)
if(C.prefs.toggles & CHAT_PRAYER)
if(((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights)) && (C.prefs.toggles & CHAT_PRAYER))
C << msg
usr << "Your prayers have been received by the gods."
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
//log_admin("HELP: [key_name(src)]: [msg]")
/proc/Centcomm_announce(var/text , var/mob/Sender , var/iamessage)
//Stealing the second var because why not)
/proc/Centcomm_announce(var/text , var/mob/Sender , var/silicon = 0 , var/iamessage)
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
admins << msg
if(silicon)
msg = "\blue <b><font color=orange>CENTCOMM(A.L.I.C.E.):</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommAIReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
else
msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
for(var/client/C in admins)
if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights))
C << msg
/proc/Syndicate_announce(var/text , var/mob/Sender)
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
msg = "\blue <b><font color=crimson>SYNDICATE:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
admins << msg
for(var/client/C in admins)
if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights))
C << msg
+1
View File
@@ -46,6 +46,7 @@
status = 1
bombers += "[key_name(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]"
message_admins("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]")
message_mods("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]")
user << "<span class='notice'>A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.</span>"
else
status = 0
+1
View File
@@ -18,6 +18,7 @@
var/obj/item/weapon/weldingtool/T = W
if(T.welding & prob(50))
message_admins("[key_name_admin(user)] triggered a welderpack explosion at ([loc.x],[loc.y],[loc.z]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>")
message_mods("[key_name_admin(user)] triggered a welderpack explosion at ([loc.x],[loc.y],[loc.z]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>")
log_game("[key_name(user)] triggered a fueltank explosion.")
user << "\red That was stupid of you."
explosion(get_turf(src),-1,0,2)
+8 -2
View File
@@ -54,7 +54,7 @@
return
cmd_admin_irc_pm()
return
//Logs all hrefs
@@ -155,6 +155,12 @@
if(holder)
add_admin_verbs()
admin_memo_show()
if(!ooc_allowed)
src << "<span class='alert'>OOC is Disabled</span>"
if(!looc_allowed)
src << "<span class='alert'>LOOC is Disabled</span>"
if(!dsay_allowed)
src << "<span class='alert'>Deadchat is Disabled</span>"
log_client_to_db()
@@ -255,7 +261,7 @@
//send resources to the client. It's here in its own proc so we can move it around easiliy if need be
/client/proc/send_resources()
// preload_vox() //Causes long delays with initial start window and subsequent windows when first logged in.
getFiles(
'html/search.js',
'html/panels.css',
+11
View File
@@ -1401,6 +1401,17 @@ datum/preferences
else continue
// Wheelchair necessary?
var/datum/organ/external/l_foot = character.get_organ("l_foot")
var/datum/organ/external/r_foot = character.get_organ("r_foot")
if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED))
var/obj/structure/stool/bed/chair/wheelchair/W = new /obj/structure/stool/bed/chair/wheelchair (character.loc)
character.buckled = W
character.update_canmove()
W.dir = character.dir
W.buckled_mob = character
W.add_fingerprint(character)
if(underwear > underwear_m.len || underwear < 1)
underwear = 0 //I'm sure this is 100% unnecessary, but I'm paranoid... sue me. //HAH NOW NO MORE MAGIC CLONING UNDIES
character.underwear = underwear
+53 -8
View File
@@ -25,7 +25,7 @@ proc/populate_gear_list()
path = /obj/item/weapon/dice/d20
cost = 1
/datum/gear/dice
/datum/gear/wallet
display_name = "wallet"
path = /obj/item/weapon/storage/wallet
cost = 2
@@ -41,6 +41,51 @@ proc/populate_gear_list()
path = /obj/item/weapon/cane
cost = 2
/datum/gear/briefcase
display_name = "briefcase"
path = /obj/item/weapon/storage/briefcase
cost = 2
/datum/gear/securebriefcase
display_name = "secure briefcase"
path = /obj/item/weapon/storage/secure/briefcase
cost = 3
/datum/gear/zippolighter
display_name = "zippo lighter"
path = /obj/item/weapon/lighter/zippo
cost = 1
/datum/gear/recorder
display_name = "universal recorder"
path = /obj/item/device/taperecorder
cost = 2
/datum/gear/camera
display_name = "camera"
path = /obj/item/device/camera
cost = 1
/datum/gear/clipboard
display_name = "clipboard"
path = /obj/item/weapon/clipboard
cost = 1
/datum/gear/redpen
display_name = "red pen"
path = /obj/item/weapon/pen/red
cost = 1
/datum/gear/bluepen
display_name = "blue pen"
path = /obj/item/weapon/pen/blue
cost = 1
/datum/gear/flask
display_name = "flask"
path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask
cost = 2
/datum/gear/tie_horrible
display_name = "horrible tie"
path = /obj/item/clothing/tie/horrible
@@ -395,12 +440,6 @@ proc/populate_gear_list()
// slot = slot_w_uniform
cost = 3
/datum/gear/exec_suit
display_name = "executive suit"
path = /obj/item/clothing/under/suit_jacket/really_black
// slot = slot_w_uniform
cost = 3
/datum/gear/oldmansuit
display_name = "old man suit"
path = /obj/item/clothing/under/lawyer/oldman
@@ -423,10 +462,16 @@ proc/populate_gear_list()
/datum/gear/armpit
display_name = "shoulder holster"
// path = /obj/item/clothing/tie/holster/armpit
path = /obj/item/clothing/tie/holster/armpit
cost = 3
allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Head of Security")
/datum/gear/normal_beret
display_name = "beret"
path = /obj/item/clothing/head/beret
cost = 3
/datum/gear/sec_beret
display_name = "security beret"
path = /obj/item/clothing/head/beret/sec
+2 -2
View File
@@ -390,14 +390,14 @@
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding."
icon_state = "rig0-medical"
item_state = "medical_helm"
species_restricted = list("tajara")
species_restricted = list("Tajaran")
/obj/item/clothing/head/helmet/space/rig/medical/unathi
name = "medical hardsuit helmet"
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding."
icon_state = "rig0-medical"
item_state = "medical_helm"
species_restricted = list("unathi")
species_restricted = list("Unathi")
/obj/item/clothing/head/helmet/space/rig/medical/skrell
name = "medical hardsuit helmet"
+2 -1
View File
@@ -59,10 +59,11 @@ var/scheduledEvent = null
set name = "Trigger Event (Debug Only)"
set category = "Debug"
if(!check_rights(R_DEBUG)) return
if(!holder)
return
if(ispath(type))
new type
message_admins("[key_name_admin(usr)] has triggered an event. ([type])", 1)
msg_scopes("[key_name_admin(usr)] has triggered an event. ([type])", 0)
+3 -1
View File
@@ -76,7 +76,9 @@
if(hard_to_hear)
message = stars(message)
var/speaker_name = speaker.name
var/speaker_name
if(speaker)
speaker_name = speaker.name
if(vname)
speaker_name = vname
@@ -131,13 +131,15 @@
//and leave an attack log
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Bit [src.name] ([src.ckey]) in the neck and draining their blood</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been bit in the neck by [M.name] ([M.ckey])</font>")
msg_admin_attack("[M.name] ([M.ckey]) bit [src.name] ([src.ckey]) in the neck")
msg_admin_attack("[M.name] ([M.ckey]) bit [src.name] ([src.ckey]) in the neck - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>")
M.handle_bloodsucking(src)
// var/datum/organ/external/affecting = get_organ(src.zone_sel.selecting)
// affecting.take_damage(10,0,1,0,"dual puncture marks") //this does not work and causes runtimes.
return
//end vampire codes
M.attack_log += text("\[[time_stamp()]\] <font color='red'>[pick(attack.attack_verb)]ed [src.name] ([src.ckey])</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been [pick(attack.attack_verb)]ed by [M.name] ([M.ckey])</font>")
msg_admin_attack("[key_name(M)] [pick(attack.attack_verb)]ed [key_name(src)]")
msg_admin_attack("[key_name(M)] [pick(attack.attack_verb)]ed [key_name(src)] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>")
var/damage = rand(0, 5)//BS12 EDIT
if(!damage)
@@ -168,7 +170,7 @@
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Disarmed [src.name] ([src.ckey])</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been disarmed by [M.name] ([M.ckey])</font>")
msg_admin_attack("[key_name(M)] disarmed [src.name] ([src.ckey])")
msg_admin_attack("[key_name(M)] disarmed [src.name] ([src.ckey]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>")
if(w_uniform)
w_uniform.add_fingerprint(M)
@@ -22,17 +22,29 @@
if(wear_suit)
tally += wear_suit.slowdown
if(shoes)
tally += shoes.slowdown
for(var/organ_name in list("l_foot","r_foot","l_leg","r_leg"))
var/datum/organ/external/E = get_organ(organ_name)
if(!E || (E.status & ORGAN_DESTROYED))
tally += 4
if(E.status & ORGAN_SPLINTED)
tally += 0.5
else if(E.status & ORGAN_BROKEN)
tally += 1.5
if(!buckled || (buckled && !istype(buckled, /obj/structure/stool/bed/chair/wheelchair)))
if(shoes)
tally += shoes.slowdown
for(var/organ_name in list("l_foot","r_foot","l_leg","r_leg"))
var/datum/organ/external/E = get_organ(organ_name)
if(!E || (E.status & ORGAN_DESTROYED))
tally += 4
if(E.status & ORGAN_SPLINTED)
tally += 0.5
else if(E.status & ORGAN_BROKEN)
tally += 1.5
if(buckled && istype(buckled, /obj/structure/stool/bed/chair/wheelchair))
for(var/organ_name in list("l_hand","r_hand","l_arm","r_arm"))
var/datum/organ/external/E = get_organ(organ_name)
if(!E || (E.status & ORGAN_DESTROYED))
tally += 4
if(E.status & ORGAN_SPLINTED)
tally += 0.5
else if(E.status & ORGAN_BROKEN)
tally += 1.5
if(shock_stage >= 10) tally += 3
+1 -1
View File
@@ -237,7 +237,7 @@
handled = 1
if((HULK in mutations) && health >= 25 && length(message))
message = "[uppertext(message)]!!!"
//message = "[uppertext(message)]!!!" //this is really irritating. let's not.
verb = pick("yells","roars","hollers")
handled = 1
if(slurring)
+3 -3
View File
@@ -747,12 +747,12 @@ var/list/ai_list = list()
if(centcomm_message_cooldown)
usr << "\red Arrays recycling. Please stand by."
return
var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "")
var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 10 minute delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "")
if(!input || !(usr in view(1,src)))
return
Centcomm_announce(input, usr)
Centcomm_announce(input, usr, 1)
usr << "\blue Message transmitted."
log_say("[key_name(usr)] has made an IA Centcomm announcement: [input]")
centcomm_message_cooldown = 1
spawn(300)//10 minute cooldown
spawn(6000)//10 minute cooldown
centcomm_message_cooldown = 0
@@ -42,6 +42,7 @@
emergency_shuttle.incall(2)
log_game("All the AIs, comm consoles and boards are destroyed. Shuttle called.")
message_admins("All the AIs, comm consoles and boards are destroyed. Shuttle called.", 1)
message_mods("All the AIs, comm consoles and boards are destroyed. Shuttle called.")
captain_announce("The emergency shuttle has been called. It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.")
world << sound('sound/AI/shuttlecalled.ogg')
@@ -90,6 +90,7 @@
if(D.stat != 2)
usr << "\red You issue a kill command for the unfortunate drone."
message_admins("[key_name_admin(usr)] issued kill order for drone [key_name_admin(D)] from control console.")
message_mods("[key_name_admin(usr)] issued kill order for drone [key_name_admin(D)] from control console.")
log_game("[key_name(usr)] issued kill order for [key_name(src)] from control console.")
D.shut_down()
@@ -731,6 +731,7 @@
connected_ai = null
user << "You emag [src]'s interface."
message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.")
message_mods("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.")
log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.")
clear_supplied_laws()
clear_inherent_laws()
@@ -13,11 +13,11 @@
response_disarm = "gently pushes aside the"
response_harm = "hits the"
speed = 4
maxHealth = 70
health = 70
maxHealth = 45
health = 45
harm_intent_damage = 8
melee_damage_lower = 15
melee_damage_lower = 10
melee_damage_upper = 15
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
+3 -1
View File
@@ -18,9 +18,11 @@
if(matches)
if(M.client)
message_admins("<font color='red'><B>Notice: </B></font><font color='blue'><A href='?src=\ref[usr];priv_msg=\ref[src]'>[key_name_admin(src)]</A> has the same [matches] as <A href='?src=\ref[usr];priv_msg=\ref[M]'>[key_name_admin(M)]</A>.</font>", 1)
message_mods("<font color='red'><B>Notice: </B></font><font color='blue'><A href='?src=\ref[usr];priv_msg=\ref[src]'>[key_name_admin(src)]</A> has the same [matches] as <A href='?src=\ref[usr];priv_msg=\ref[M]'>[key_name_admin(M)]</A>.</font>")
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)].")
else
message_admins("<font color='red'><B>Notice: </B></font><font color='blue'><A href='?src=\ref[usr];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_mods("<font color='red'><B>Notice: </B></font><font color='blue'><A href='?src=\ref[usr];priv_msg=\ref[src]'>[key_name_admin(src)]</A> has the same [matches] as [key_name_admin(M)] (no longer logged in). </font>")
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).")
/mob/Login()
@@ -56,4 +58,4 @@
if(H.species && H.species.abilities)
client.verbs |= H.species.abilities
nanomanager.send_resources(client)
nanomanager.send_resources(client)
+1
View File
@@ -7,6 +7,7 @@
var/admins_number = admins.len
message_admins("Admin logout: [key_name(src)]")
message_mods("Staff logout: [key_name(src)]")
if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell.
send2adminirc("[key_name(src)] logged out - no more admins online.")
..()
+2 -2
View File
@@ -137,7 +137,7 @@
affecting.loc = assailant.loc
affecting.attack_log += "\[[time_stamp()]\] <font color='orange'>Has had their neck grabbed by [assailant.name] ([assailant.ckey])</font>"
assailant.attack_log += "\[[time_stamp()]\] <font color='red'>Grabbed the neck of [affecting.name] ([affecting.ckey])</font>"
msg_admin_attack("[key_name(assailant)] grabbed the neck of [key_name(affecting)]")
msg_admin_attack("[key_name(assailant)] grabbed the neck of [key_name(affecting)] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[affecting.x];Y=[affecting.y];Z=[affecting.z]'>JMP</a>")
hud.icon_state = "disarm/kill"
hud.name = "disarm/kill"
else
@@ -158,7 +158,7 @@
assailant.visible_message("<span class='danger'>[assailant] has tightened \his grip on [affecting]'s neck!</span>")
affecting.attack_log += "\[[time_stamp()]\] <font color='orange'>Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])</font>"
assailant.attack_log += "\[[time_stamp()]\] <font color='red'>Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>"
msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)]")
msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[affecting.x];Y=[affecting.y];Z=[affecting.z]'>JMP</a>")
assailant.next_move = world.time + 10
affecting.losebreath += 1
+21 -5
View File
@@ -200,10 +200,14 @@
if(Process_Grab()) return
if(mob.buckled) //if we're buckled to something, tell it we moved.
return mob.buckled.relaymove(mob, direct)
// if(mob.buckled) //if we're buckled to something, tell it we moved.
// return mob.buckled.relaymove(mob, direct)
if(!mob.canmove) return
// if(!mob.canmove) return
if(!mob.canmove)
if (mob.buckled && (istype(mob.buckled, /obj/structure/stool/bed/chair/wheelchair))) // Exception for wheelchairs
else return
//if(istype(mob.loc, /turf/space) || (mob.flags & NOGRAV))
// if(!mob.Process_Spacemove(0)) return 0
@@ -254,8 +258,20 @@
var/tickcomp = ((1/(world.tick_lag))*1.3)
move_delay = move_delay + tickcomp
if(mob.pulledby || mob.buckled) // Wheelchair driving!
if(istype(mob.loc, /turf/space))
return // No wheelchair driving in space
if(istype(mob.pulledby, /obj/structure/stool/bed/chair/wheelchair))
return mob.pulledby.relaymove(mob, direct)
else if(istype(mob.buckled, /obj/structure/stool/bed/chair/wheelchair))
if(ishuman(mob.buckled))
var/mob/living/carbon/human/driver = mob.buckled
var/datum/organ/external/l_hand = driver.get_organ("l_hand")
var/datum/organ/external/r_hand = driver.get_organ("r_hand")
if((!l_hand || (l_hand.status & ORGAN_DESTROYED)) && (!r_hand || (r_hand.status & ORGAN_DESTROYED)))
return // No hands to drive your chair? Tough luck!
move_delay += 2
return mob.buckled.relaymove(mob,direct)
//We are now going to move
moving = 1
@@ -293,6 +293,10 @@
EquipCustomItems(character)
character.loc = pick(latejoin)
character.lastarea = get_area(loc)
// Moving wheelchair if they have one
if(character.buckled && istype(character.buckled, /obj/structure/stool/bed/chair/wheelchair))
character.buckled.loc = character.loc
character.buckled.dir = character.dir
ticker.mode.latespawn(character)
+4 -2
View File
@@ -82,7 +82,8 @@
rigged = 1
log_admin("LOG: [user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.")
message_admins("LOG: [user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.")
message_admins("[user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.")
message_mods("[user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.")
S.reagents.clear_reagents()
@@ -108,7 +109,8 @@
//explosion(T, 0, 1, 2, 2)
log_admin("LOG: Rigged power cell explosion, last touched by [fingerprintslast]")
message_admins("LOG: Rigged power cell explosion, last touched by [fingerprintslast]")
message_admins("Rigged power cell explosion, last touched by [fingerprintslast]")
message_mods("Rigged power cell explosion, last touched by [fingerprintslast]")
explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range)
+6 -3
View File
@@ -287,7 +287,8 @@
if(status == LIGHT_OK && trigger)
log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]")
message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]")
message_admins("Rigged light explosion, last touched by [fingerprintslast]")
message_mods("Rigged light explosion, last touched by [fingerprintslast]")
explode()
else if( prob( min(60, switchcount*switchcount*0.01) ) )
@@ -365,7 +366,8 @@
if(on && rigged)
log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]")
message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]")
message_admins("Rigged light explosion, last touched by [fingerprintslast]")
message_mods("Rigged light explosion, last touched by [fingerprintslast]")
explode()
else
@@ -723,7 +725,8 @@
if(S.reagents.has_reagent("plasma", 5))
log_admin("LOG: [user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.")
message_admins("LOG: [user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.")
message_admins("[user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.")
message_mods("[user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.")
rigged = 1
@@ -41,6 +41,7 @@
/obj/machinery/power/emitter/Del()
message_admins("Emitter deleted at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
message_mods("Emitter deleted at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
log_game("Emitter deleted at ([x],[y],[z])")
investigate_log("<font color='red'>deleted</font> at ([x],[y],[z])","singulo")
..()
@@ -63,6 +64,7 @@
src.active = 0
user << "You turn off the [src]."
message_admins("Emitter turned off by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
message_mods("Emitter turned off by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
log_game("Emitter turned off by [user.ckey]([user]) in ([x],[y],[z])")
investigate_log("turned <font color='red'>off</font> by [user.key]","singulo")
else
@@ -71,6 +73,7 @@
src.shot_number = 0
src.fire_delay = 100
message_admins("Emitter turned on by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
message_mods("Emitter turned on by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
log_game("Emitter turned on by [user.ckey]([user]) in ([x],[y],[z])")
investigate_log("turned <font color='green'>on</font> by [user.key]","singulo")
update_icon()
@@ -350,6 +350,7 @@ field_generator power level display
if(O.last_warning && temp)
if((world.time - O.last_warning) > 50) //to stop message-spam
temp = 0
message_mods("A singulo exists and a containment field has failed.")
message_admins("A singulo exists and a containment field has failed.",1)
investigate_log("has <font color='red'>failed</font> whilst a singulo exists.","singulo")
O.last_warning = world.time
@@ -87,9 +87,9 @@
if(href_list["togglep"])
src.toggle_power()
investigate_log("turned [active?"<font color='red'>ON</font>":"<font color='green'>OFF</font>"] by [usr.key]","singulo")
if (active)
message_admins("PA Control Computer turned ON by [key_name(usr, usr.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
log_game("PA Control Computer turned ON by [usr.ckey]([usr]) in ([x],[y],[z])")
message_admins("PA Control Computer turned [active?"<font color='red'>ON</font>":"<font color='green'>OFF</font>"] by [key_name(usr, usr.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
message_mods("PA Control Computer turned [active?"<font color='red'>ON</font>":"<font color='green'>OFF</font>"] by [key_name(usr, usr.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_game("PA Control Computer turned [active?"<font color='red'>ON</font>":"<font color='green'>OFF</font>"] by [usr.ckey]([usr]) in ([x],[y],[z])")
else if(href_list["scan"])
src.part_scan()
else if(href_list["strengthup"])
@@ -98,6 +98,7 @@
strength = 2
else
message_admins("PA Control Computer increased to [strength] by [key_name(usr, usr.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
message_mods("PA Control Computer increased to [strength] by [key_name(usr, usr.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_game("PA Control Computer increased to [strength] by [usr.ckey]([usr]) in ([x],[y],[z])")
investigate_log("increased to <font color='red'>[strength]</font> by [usr.key]","singulo")
for(var/obj/structure/particle_accelerator/part in connected_parts)
@@ -109,6 +110,9 @@
if(strength < 0)
strength = 0
else
message_admins("PA Control Computer decreased to [strength] by [key_name(usr, usr.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
message_mods("PA Control Computer decreased to [strength] by [key_name(usr, usr.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_game("PA Control Computer decreased to [strength] by [usr.ckey]([usr]) in ([x],[y],[z])")
investigate_log("decreased to <font color='green'>[strength]</font> by [usr.key]","singulo")
for(var/obj/structure/particle_accelerator/part in connected_parts)
part.strength = strength
@@ -102,7 +102,9 @@ var/global/list/uneatable = list(
/obj/machinery/singularity/proc/admin_investigate_setup()
last_warning = world.time
var/count = locate(/obj/machinery/containment_field) in orange(30, src)
if(!count) message_admins("A singulo has been created without containment fields active ([x],[y],[z])",1)
if(!count)
message_mods("A singulo has been created without containment fields active ([x],[y],[z])")
message_admins("A singulo has been created without containment fields active ([x],[y],[z])",1)
investigate_log("was created. [count?"":"<font color='red'>No containment fields were active</font>"]","singulo")
/obj/machinery/singularity/proc/dissipate()
@@ -166,6 +168,10 @@ var/global/list/uneatable = list(
dissipate_delay = 10
dissipate_track = 0
dissipate_strength = 10
investigate_log("turned to a stage 4","singulo")
message_mods("Singluo is at stage 4 ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
message_admins("Singluo is at stage 4 ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
log_game("Singluo turned to a stage 4 ([x],[y],[z])")
if(9)//this one also lacks a check for gens because it eats everything
current_size = 9
icon = 'icons/effects/288x288.dmi'
+1
View File
@@ -9,6 +9,7 @@
var/cell_type = "/obj/item/weapon/cell"
var/projectile_type = "/obj/item/projectile/beam/practice"
var/modifystate
rangedrop = -5 // energy weapons more accurate than bulletweapons.
isHandgun()
return 0
@@ -135,7 +135,7 @@ Commenting out right now, due to a lack of sprites existing. I hate on-mob weapo
fire_delay_unwielded = 105 //3x difference, let's be an arse about this, and push the issue
var/zoom = 0
accuracy = -90
accuracy = -110
rangedrop = -5 // fully accurate up to first 10 tiles. the last 4 zoomed tiles you are on your
/obj/item/weapon/gun/energy/rifle/sniperrifle/dropped(mob/user)
@@ -210,7 +210,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
slot_flags = SLOT_BACK //Just realized... Going to need A LOT more on-back sprites now... FECK...
var/mode = 2
fire_delay_wielded = 8
fire_delay_unwielded = 75
fire_delay_unwielded = 24
// attack_self(mob/living/user as mob)
//Let's do some magical things, make this a verb, yes?
@@ -58,8 +58,8 @@
desc = "A basic, modular laser pistol."
icon_state = "modpistolopen"
open = 1
w_class = 2
upgradepointtotal = 16
w_class = 3 // leave it at three until protorifle is implemented. then severely nerf pistol points.
upgradepointtotal = 16 //current protopistol is at protorifle point totals.
/obj/item/weapon/gun/energy/laser/modular/pistol/advanced //better version of the pistol
name = "advanced protopistol"
@@ -310,16 +310,16 @@
accuracy = 30 //positive. subtracts to 0 accuracy base, 30 if aimed. fully accurate up to two tiles *if aimed*, -15% per tile after
canzoom = 0
else if(targetmod.rating == 1)
rangedrop = 5
rangedrop = 0
accuracy = -30 //standard accuracy. standard gun.
canzoom = 0
else if(targetmod.rating == 2)
rangedrop = 5
rangedrop = 0
accuracy = -60 //Fully accurate up to 6 tiles aimed. 15% drop per tile after that for ~-120% accuracy at 14 tiles. If you want to snipe things, get phasic.
canzoom = 1 //advanced and up scanning modules let you zoom in. good luck hitting without phasic though pal. good luck.
else if(targetmod.rating == 3)
rangedrop = -5 //Accurate aimed up to 12 tiles. 20% miss at 14. 9 tiles and 50% miss at 14 without aiming.
accuracy = -90 //If you're paying a premium for accuracy, you can have accuracy.
accuracy = -110 //If you're paying a premium for accuracy, you can have accuracy.
canzoom = 1
if(!powermod)
@@ -45,6 +45,7 @@
M.primed = 1
M.throw_at(target, missile_range, missile_speed)
message_admins("[key_name_admin(user)] fired a rocket from a rocket launcher ([src.name]).")
message_mods("[key_name_admin(user)] fired a rocket from a rocket launcher ([src.name]).")
log_game("[key_name_admin(user)] used a rocket launcher ([src.name]).")
rockets -= I
del(I)
+1 -1
View File
@@ -94,7 +94,7 @@
if (daddy.target && original in daddy.target) //As opposed to no-delay pew pew
miss_modifier += -30
def_zone = get_zone_with_miss_chance(def_zone, M, miss_modifier + 15*distance + daddy.accuracy + daddy.rangedrop) // add +daddy.missmod vars to gun and this. snowflake accuracy
//moving def_zone to be a child of the daddyblock because i need the daddy
//moving def_zone to be a child of the daddyblock because i need the daddy. all projectiles should be fired from guns anyway
if(!def_zone)
visible_message("\blue \The [src] misses [M] narrowly!")
forcedodge = -1
+7 -3
View File
@@ -278,7 +278,7 @@ datum
description = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
color = "#E0E8EF" // rgb: 224, 232, 239
on_mob_life(var/mob/living/M as mob)
on_mob_life(var/mob/living/carbon/human/M as mob)
if(ishuman(M))
if((M.mind in ticker.mode.cult) && prob(10))
M << "\blue A cooling sensation from inside you brings you an untold calmness."
@@ -288,8 +288,10 @@ datum
if((M.mind in ticker.mode.vampires) && (M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)))
if(!M) M = holder.my_atom
M.adjustFireLoss(6)
M.adjust_fire_stacks(1)
M.IgniteMob()
//M.take_organ_damage(0, 1*REM)
if(prob(50))
if(prob(20))
for(var/mob/O in viewers(M, null))
O.show_message(text("\red []'s skin sizzles and burns.", M), 1)
holder.remove_reagent(src.id, 10 * REAGENTS_METABOLISM) //high metabolism to prevent extended uncult rolls.
@@ -1532,8 +1534,10 @@ datum
if((M.mind in ticker.mode.vampires) && (M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)))
if(!M) M = holder.my_atom
M.adjustFireLoss(6)
M.adjust_fire_stacks(1)
M.IgniteMob()
//M.take_organ_damage(0, 1*REM)
if(prob(50))
if(prob(20))
for(var/mob/O in viewers(M, null))
O.show_message(text("\red []'s skin sizzles and burns.", M), 1)
holder.remove_reagent(src.id, 10 * REAGENTS_METABOLISM) //high metabolism to prevent extended uncult rolls.
@@ -58,6 +58,7 @@
F.loc = user.loc
F.throw_at(target, 30, 2)
message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
message_mods("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
log_game("[key_name_admin(user)] used a grenade ([src.name]).")
F.active = 1
F.icon_state = initial(icon_state) + "_active"
@@ -382,7 +382,7 @@
reagents.add_reagent("nutriment", 1)
reagents.add_reagent("toxin", 3+round(potency / 3, 1))
reagents.add_reagent("lexorin", 1+round(potency / 5, 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
bitesize = reagents.total_volume
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris
seed = "/obj/item/seeds/ambrosiavulgaris"
@@ -833,7 +833,7 @@
reagents.add_reagent("nutriment", 1)
reagents.add_reagent("amatoxin", 3+round(potency / 3, 1))
reagents.add_reagent("psilocybin", 1+round(potency / 25, 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
bitesize = reagents.total_volume
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita/attackby(var/obj/item/O as obj, var/mob/user as mob)
. = ..()
@@ -854,7 +854,7 @@
reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
reagents.add_reagent("amatoxin", 13+round(potency / 3, 1))
reagents.add_reagent("psilocybin", 1+round(potency / 25, 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
bitesize = reagents.total_volume
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel/attackby(var/obj/item/O as obj, var/mob/user as mob)
. = ..()
@@ -122,6 +122,7 @@
modded = modded ? 0 : 1
if (modded)
message_admins("[key_name_admin(user)] opened fueltank at ([loc.x],[loc.y],[loc.z]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>.")
message_mods("[key_name_admin(user)] opened fueltank at ([loc.x],[loc.y],[loc.z]) - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>.")
leak_fuel(amount_per_transfer_from_this)
if (istype(W,/obj/item/device/assembly_holder))
if (rig)
@@ -134,6 +135,7 @@
var/obj/item/device/assembly_holder/H = W
if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter))
message_admins("[key_name_admin(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>.")
message_mods("[key_name_admin(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>.")
log_game("[key_name(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion.")
rig = W
@@ -153,10 +155,12 @@
if(!src.defuse && user.client.holder)
src.defuse = 1
message_admins("[key_name_admin(user)] defused fueltank at ([loc.x],[loc.y],[loc.z]).")
message_mods("[key_name_admin(user)] defused fueltank at ([loc.x],[loc.y],[loc.z]).")
else
if(!src.armed && user.client.holder)
src.defuse = 0
message_admins("[key_name_admin(user)] reset fuse on fueltank at ([loc.x],[loc.y],[loc.z]).")
message_mods("[key_name_admin(user)] reset fuse on fueltank at ([loc.x],[loc.y],[loc.z]).")
/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj)
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))