Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master'

This commit is contained in:
scrubmcnoob
2017-04-29 19:42:10 -04:00
736 changed files with 17483 additions and 14420 deletions
+7 -7
View File
@@ -127,7 +127,7 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration =
var/sql = "INSERT INTO [format_table_name("ban")] (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) VALUES (null, Now(), '[serverip]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], [(rounds)?"[rounds]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', '[ip]', '[a_ckey]', '[a_computerid]', '[a_ip]', '[who]', '[adminwho]', '', null, null, null, null, null)"
var/DBQuery/query_insert = dbcon.NewQuery(sql)
query_insert.Execute()
to_chat(usr, "\blue Ban saved to database.")
to_chat(usr, "<span class='notice'>Ban saved to database.</span>")
message_admins("[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database.",1)
if(announceinirc)
@@ -201,17 +201,17 @@ datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
ban_number++;
if(ban_number == 0)
to_chat(usr, "\red Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.")
to_chat(usr, "<span class='warning'>Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.</span>")
return
if(ban_number > 1)
to_chat(usr, "\red Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.")
to_chat(usr, "<span class='warning'>Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.</span>")
return
if(istext(ban_id))
ban_id = text2num(ban_id)
if(!isnum(ban_id))
to_chat(usr, "\red Database update failed due to a ban ID mismatch. Contact the database admin.")
to_chat(usr, "<span class='warning'>Database update failed due to a ban ID mismatch. Contact the database admin.</span>")
return
DB_ban_unban_by_id(ban_id)
@@ -302,11 +302,11 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
ban_number++;
if(ban_number == 0)
to_chat(usr, "\red Database update failed due to a ban id not being present in the database.")
to_chat(usr, "<span class='warning'>Database update failed due to a ban id not being present in the database.</span>")
return
if(ban_number > 1)
to_chat(usr, "\red Database update failed due to multiple bans having the same ID. Contact the database admin.")
to_chat(usr, "<span class='warning'>Database update failed due to multiple bans having the same ID. Contact the database admin.</span>")
return
if(!src.owner || !istype(src.owner, /client))
@@ -343,7 +343,7 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
establish_db_connection()
if(!dbcon.IsConnected())
to_chat(usr, "\red Failed to establish database connection")
to_chat(usr, "<span class='warning'>Failed to establish database connection</span>")
return
var/output = "<div align='center'><table width='90%'><tr>"
+1 -1
View File
@@ -15,7 +15,7 @@ world/IsBanned(key,address,computer_id)
//Guest Checking
if(!guests_allowed && IsGuestKey(key))
log_access("Failed Login: [key] [computer_id] [address] - Guests not allowed")
// message_admins("\blue Failed Login: [key] - Guests not allowed")
// message_admins("<span class='notice'>Failed Login: [key] - Guests not allowed</span>")
return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a BYOND account.")
//check if the IP address is a known Tor node
-1
View File
@@ -172,7 +172,6 @@ var/savefile/Banlist
/datum/admins/proc/unbanpanel()
var/count = 0
var/dat
//var/dat = "<HR><B>Unban Player:</B> \blue(U) = Unban , (E) = Edit Ban\green (Total<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >"
Banlist.cd = "/base"
for(var/A in Banlist.dir)
count++
+2 -2
View File
@@ -844,8 +844,8 @@ var/global/nologevent = 0
to_chat(world, "<B>Guests may no longer enter the game.</B>")
else
to_chat(world, "<B>Guests may now enter the game.</B>")
log_admin("[key_name(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.")
message_admins("\blue [key_name_admin(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.", 1)
log_admin("[key_name(usr)] toggled guests game entering [guests_allowed ? "" : "dis"]allowed.")
message_admins("<span class='notice'>[key_name_admin(usr)] toggled guests game entering [guests_allowed ? "" : "dis"]allowed.</span>", 1)
feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/output_ai_laws()
+3 -3
View File
@@ -157,7 +157,7 @@ var/list/admin_verbs_debug = list(
/client/proc/enable_debug_verbs,
/client/proc/toggledebuglogs,
/client/proc/qdel_toggle,
/client/proc/gc_dump_hdl,
/client/proc/cmd_display_del_log,
/client/proc/debugNatureMapGenerator,
/client/proc/check_bomb_impacts,
/client/proc/test_movable_UI,
@@ -633,7 +633,7 @@ var/list/admin_verbs_snpc = list(
for(var/mob/V in hearers(O))
V.show_message(message, 2)
log_admin("[key_name(usr)] made [O] at [O.x], [O.y], [O.z] make a sound")
message_admins("\blue [key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z] make a sound")
message_admins("<span class='notice'>[key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z] make a sound</span>")
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/togglebuildmodeself()
@@ -681,7 +681,7 @@ var/list/admin_verbs_snpc = list(
to_chat(usr, "<b>Disabled air processing.</b>")
feedback_add_details("admin_verb","KA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] used 'kill air'.")
message_admins("\blue [key_name_admin(usr)] used 'kill air'.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] used 'kill air'.</span>", 1)
/client/proc/deadmin_self()
set name = "De-admin self"
+4 -1
View File
@@ -95,6 +95,7 @@
cl.images -= I
cl = null
qdel(I)
return ..()
/obj/effect/buildmode_line
var/image/I
@@ -140,6 +141,8 @@
/datum/click_intercept/Destroy()
for(var/button in buttons)
qdel(button)
buttons.Cut()
return ..()
/datum/click_intercept/proc/create_buttons()
@@ -191,7 +194,7 @@
Reset()
areaimage.loc = null
qdel(areaimage)
..()
return ..()
/datum/click_intercept/buildmode/create_buttons()
buttons += new /obj/screen/buildmode/mode(src)
+180 -140
View File
@@ -1,162 +1,202 @@
/client/proc/create_poll()
set name = "Create Server Poll"
set category = "Server"
if(!check_rights(R_PERMISSIONS))
if(!check_rights(R_SERVER))
return
if(!dbcon.IsConnected())
to_chat(src, "<span class='danger'>Failed to establish database connection.</span>")
return
var/returned = create_poll_function()
if(returned)
var/DBQuery/query_check_option = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [returned]")
if(!query_check_option.Execute())
var/err = query_check_option.ErrorMsg()
log_game("SQL ERROR obtaining id from poll_option table. Error : \[[err]\]\n")
return
if(query_check_option.NextRow())
var/DBQuery/query_log_get = dbcon.NewQuery("SELECT polltype, question, adminonly FROM [format_table_name("poll_question")] WHERE id = [returned]")
if(!query_log_get.Execute())
var/err = query_log_get.ErrorMsg()
log_game("SQL ERROR obtaining polltype, question, adminonly from poll_question table. Error : \[[err]\]\n")
return
if(query_log_get.NextRow())
var/polltype = query_log_get.item[1]
var/question = query_log_get.item[2]
var/adminonly = query_log_get.item[3]
log_admin("[key_name(usr)] has created a new server poll. Poll Type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"] - Question: [question]")
message_admins("[key_name_admin(usr)] has created a new server poll. Poll Type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"]<br>Question: [question]")
else
to_chat(src, "Poll question created without any options, poll will be deleted.")
var/DBQuery/query_del_poll = dbcon.NewQuery("DELETE FROM [format_table_name("poll_question")] WHERE id = [returned]")
if(!query_del_poll.Execute())
var/err = query_del_poll.ErrorMsg()
log_game("SQL ERROR deleting poll question [returned]. Error : \[[err]\]\n")
return
create_poll_window()
/client/proc/create_poll_function()
if(!check_rights(R_PERMISSIONS))
/client/proc/create_poll_window(var/errormessage = "")
if(!check_rights(R_SERVER))
return
var/output={"<!DOCTYPE html>
<html>
<head>
<script>
var numoptions = 0;
function update_vis() {
var polloptions = document.getElementById("polloptions");
var polltype = document.getElementById("polltype").value;
if(polltype == "[POLLTYPE_TEXT]") {
polloptions.style.display = "none";
} else {
polloptions.style.display = "block";
}
if(polltype == "[POLLTYPE_RATING]") {
for(var i = 0; i < numoptions; i++) {
document.getElementById("ratingoption" + i).style.display = "block";
}
} else {
for(var i = 0; i < numoptions; i++) {
document.getElementById("ratingoption" + i).style.display = "none";
}
}
if(polltype == "[POLLTYPE_MULTI]") {
document.getElementById("choiceamount").style.display = "block";
} else {
document.getElementById("choiceamount").style.display = "none";
}
}
function add_option() {
document.getElementById("polloptionsinner").innerHTML += "<div id='polloption"+numoptions+"' style='border:1px solid black;padding:10px'>"+
"Option name: <input type='text' name='createpolloption"+numoptions+"option' value='' style='width:300px'></input><br>"+
"<label><input type='checkbox' name='createpolloption"+numoptions+"percentagecalc' value='1' checked>Calculate options results as percentage?</label><br>"+
"<div id='ratingoption"+numoptions+"'>"+
"Minimum rating value: <input type='text' name='createpolloption"+numoptions+"minval' value='1'></input><br>"+
"Maximum rating value: <input type='text' name='createpolloption"+numoptions+"maxval' value='5'></input><br>"+
"Minimum rating description: <input type='text' name='createpolloption"+numoptions+"descmin' value='Terrible'></input><br>"+
"Median rating description: <input type='text' name='createpolloption"+numoptions+"descmid' value=''></input><br>"+
"Maximum rating description: <input type='text' name='createpolloption"+numoptions+"descmax' value='Great'></input>"+
"</div>";
numoptions++;
document.getElementById("createpollnumoptions").value = numoptions+"";
update_vis();
}
function del_option() {
if(numoptions <= 1) {
return;
}
numoptions--;
document.getElementById("polloptionsinner").removeChild(document.getElementById("polloption"+numoptions));
document.getElementById("createpollnumoptions").value = numoptions+"";
update_vis();
}
function onload() {
update_vis();
add_option();
}
</script>
</head>
<body onload="onload()">
<div style='text-align:center'><b>Create Player Poll</b></div><hr>
<div style='text-align:center'>[errormessage]</div>
<form name='createpoll' action='byond://' method='post' style='padding-left:30px;padding-right:30px;padding-top:10px'>
<input type='hidden' name='createpollnumoptions' id='createpollnumoptions' value='0'>
<table><tr><td style='width:50%' style="vertical-align:top"><div id='polloptions'><div id='polloptionsinner'>
</div>
<input type='button' onclick='add_option()' value="Add Option"></input>
<input type='button' onclick='del_option()' value="Delete Option"></input>
</div></td><td style="vertical-align:top">
Select a poll type: <select name='createpoll' id='polltype' onchange="update_vis()">
<option value='[POLLTYPE_OPTION]'>POLLTYPE_OPTION</option>
<option value='[POLLTYPE_TEXT]'>POLLTYPE_TEXT</option>
<option value='[POLLTYPE_RATING]'>POLLTYPE_RATING</option>
<option value='[POLLTYPE_MULTI]'>POLLTYPE_MULTI</option>
</select><br>
For how many days should this poll run? <input type='text' name='createpollduration' value='7' style='width:50px'></input><br>
Enter your question: <input type='text' name='createpollquestion' value='' style='width:300px'></input><br>
<div id='choiceamount'>Up to how many options should be chosen? <input name='choiceamount' value='2' style='width:30px'></div>
<label><input type='checkbox' name='createpolladminonly' value='1'>Admin only?</label><br>
</td></tr><tr><td colspan=2 style='text-align:center'>
<input type='submit' value='Create poll'>
</td></tr></table>
</form>
</body>
</html>"}
src << browse(output, "window=createplayerpoll;size=950x500")
/client/proc/create_poll_function(href_list)
if(!check_rights(R_SERVER))
return
var/polltype = href_list["createpoll"]
if(polltype != POLLTYPE_OPTION && polltype != POLLTYPE_TEXT && polltype != POLLTYPE_RATING && polltype != POLLTYPE_MULTI)
create_poll_window("<font color='red'>Invalid poll type</font>")
return
var/polltype = input("Choose poll type.","Poll Type") in list("Single Option","Text Reply","Rating","Multiple Choice")
var/choice_amount = 0
switch(polltype)
if("Single Option")
polltype = POLLTYPE_OPTION
if("Text Reply")
polltype = POLLTYPE_TEXT
if("Rating")
polltype = POLLTYPE_RATING
if("Multiple Choice")
polltype = POLLTYPE_MULTI
choice_amount = input("How many choices should be allowed?","Select choice amount") as num|null
if(!choice_amount)
return
var/starttime = SQLtime()
var/endtime = input("Set end time for poll as format YYYY-MM-DD HH:MM:SS. All times in server time. HH:MM:SS is optional and 24-hour. Must be later than starting time for obvious reasons.", "Set end time", SQLtime()) as text
if(!endtime)
return
endtime = sanitizeSQL(endtime)
var/DBQuery/query_validate_time = dbcon.NewQuery("SELECT STR_TO_DATE('[endtime]','%Y-%c-%d %T')")
if(!query_validate_time.Execute())
var/err = query_validate_time.ErrorMsg()
log_game("SQL ERROR validating endtime. Error : \[[err]\]\n")
return
if(query_validate_time.NextRow())
endtime = query_validate_time.item[1]
if(!endtime)
to_chat(src, "Datetime entered is invalid.")
if(polltype == POLLTYPE_MULTI)
choice_amount = text2num(href_list["choiceamount"])
if(!isnum(choice_amount) || choice_amount < 1)
create_poll_window("<font color='red'>Invalid choice amount. Must be at least 1.</font>")
return
var/DBQuery/query_time_later = dbcon.NewQuery("SELECT TIMESTAMP('[endtime]') < NOW()")
if(!query_time_later.Execute())
var/err = query_time_later.ErrorMsg()
log_game("SQL ERROR comparing endtime to NOW(). Error : \[[err]\]\n")
var/poll_len = text2num(href_list["createpollduration"])
if(!isnum(poll_len) || poll_len < 1)
create_poll_window("<font color='red'>Invalid poll duration. Must be at least 1.</font>")
return
if(query_time_later.NextRow())
var/checklate = text2num(query_time_later.item[1])
if(checklate)
to_chat(src, "Datetime entered is not later than current server time.")
return
var/adminonly
switch(alert("Admin only poll?",,"Yes","No","Cancel"))
if("Yes")
adminonly = 1
if("No")
adminonly = 0
else
return
var/adminonly = text2num(href_list["createpolladminonly"]) ? 1 : 0
var/sql_ckey = sanitizeSQL(ckey)
var/question = input("Write your question","Question") as message|null
var/question = href_list["createpollquestion"]
if(!question)
create_poll_window("<font color='red'>Question cannot be blank.</font>")
return
question = sanitizeSQL(question)
var/DBQuery/query_polladd_question = dbcon.NewQuery("INSERT INTO [format_table_name("poll_question")] (polltype, starttime, endtime, question, adminonly, multiplechoiceoptions, createdby_ckey, createdby_ip) VALUES ('[polltype]', '[starttime]', '[endtime]', '[question]', '[adminonly]', '[choice_amount]', '[sql_ckey]', '[address]')")
if(!query_polladd_question.Execute())
var/err = query_polladd_question.ErrorMsg()
var/starttime
var/endtime
var/DBQuery/query = dbcon.NewQuery("SELECT Now() AS starttime, ADDDATE(Now(), INTERVAL [poll_len] DAY) AS endtime")
query.Execute()
while(query.NextRow())
starttime = query.item[1]
endtime = query.item[2]
var/pollquery = "INSERT INTO [format_table_name("poll_question")] (polltype, starttime, endtime, question, adminonly, multiplechoiceoptions, createdby_ckey, createdby_ip) VALUES ('[polltype]', '[starttime]', '[endtime]', '[question]', '[adminonly]', '[choice_amount]', '[sql_ckey]', '[address]')"
var/idquery = "SELECT id FROM [format_table_name("poll_question")] WHERE question = '[question]' AND starttime = '[starttime]' AND endtime = '[endtime]' AND createdby_ckey = '[sql_ckey]' AND createdby_ip = '[address]'"
var/list/option_queries = list()
if(polltype == POLLTYPE_MULTI || polltype == POLLTYPE_RATING || polltype == POLLTYPE_OPTION)
var/numoptions = text2num(href_list["createpollnumoptions"])
if(!numoptions)
create_poll_window("<font color='red'>Invalid number of options</font>")
return
for(var/I in 1 to numoptions)
var/option = href_list["createpolloption[I]option"]
if(!option)
create_poll_window("<font color='red'>Invalid option name for option [I]</font>")
return
option = sanitizeSQL(option)
var/percentagecalc = 0
if(text2num(href_list["createpolloption[I]percentagecalc"]))
percentagecalc = 1
var/minval = 0
var/maxval = 0
var/descmin = ""
var/descmid = ""
var/descmax = ""
if(polltype == POLLTYPE_RATING)
minval = text2num(href_list["createpolloption[I]minval"])
if(!minval)
create_poll_window("<font color='red'>Invalid minimum value for option [I]</font>")
return
maxval = text2num(href_list["createpolloption[I]maxval"])
if(!maxval)
create_poll_window("<font color='red'>Invalid maximum value for option [I]</font>")
return
if(minval >= maxval)
create_poll_window("<font color='red'>Minimum rating value can't be more than maximum rating value</font>")
return
descmin = href_list["createpolloption[I]descmin"]
if(descmin)
descmin = sanitizeSQL(descmin)
descmid = href_list["createpolloption[I]descmid"]
if(descmid)
descmid = sanitizeSQL(descmid)
descmax = href_list["createpolloption[I]descmax"]
if(descmax)
descmax = sanitizeSQL(descmax)
option_queries += "INSERT INTO [format_table_name("poll_option")] (pollid, text, percentagecalc, minval, maxval, descmin, descmid, descmax) VALUES ('{POLLID}', '[option]', '[percentagecalc]', '[minval]', '[maxval]', '[descmin]', '[descmid]', '[descmax]')"
query = dbcon.NewQuery(pollquery)
if(!query.Execute())
var/err = query.ErrorMsg()
create_poll_window("<font color='red'>An SQL error has occured while creating your poll</font>")
log_game("SQL ERROR adding new poll question to table. Error : \[[err]\]\n")
return
if(polltype == POLLTYPE_TEXT)
log_admin("[key_name(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"] - Question: [question]")
message_admins("[key_name_admin(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"]<br>Question: [question]")
return
var/pollid = 0
var/DBQuery/query_get_id = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE question = '[question]' AND starttime = '[starttime]' AND endtime = '[endtime]' AND createdby_ckey = '[sql_ckey]' AND createdby_ip = '[address]'")
if(!query_get_id.Execute())
var/err = query_get_id.ErrorMsg()
query = dbcon.NewQuery(idquery)
if(!query.Execute())
var/err = query.ErrorMsg()
create_poll_window("<font color='red'>An SQL error has occured while creating your poll</font>")
log_game("SQL ERROR obtaining id from poll_question table. Error : \[[err]\]\n")
return
if(query_get_id.NextRow())
pollid = query_get_id.item[1]
var/add_option = 1
while(add_option)
var/option = input("Write your option",POLLTYPE_OPTION) as message|null
if(!option)
return pollid
option = sanitizeSQL(option)
var/percentagecalc
switch(alert("Calculate option results as percentage?",,"Yes","No","Cancel"))
if("Yes")
percentagecalc = 1
if("No")
percentagecalc = 0
else
return pollid
var/minval = 0
var/maxval = 0
var/descmin = ""
var/descmid = ""
var/descmax = ""
if(polltype == POLLTYPE_RATING)
minval = input("Set minimum rating value.","Minimum rating") as num|null
if(!minval)
return pollid
maxval = input("Set maximum rating value.","Maximum rating") as num|null
if(!maxval)
return pollid
if(minval >= maxval)
to_chat(src, "Minimum rating value can't be more than maximum rating value")
return pollid
descmin = input("Optional: Set description for minimum rating","Minimum rating description") as message|null
if(descmin)
descmin = sanitizeSQL(descmin)
else if(descmin == null)
return pollid
descmid = input("Optional: Set description for median rating","Median rating description") as message|null
if(descmid)
descmid = sanitizeSQL(descmid)
else if(descmid == null)
return pollid
descmax = input("Optional: Set description for maximum rating","Maximum rating description") as message|null
if(descmax)
descmax = sanitizeSQL(descmax)
else if(descmax == null)
return pollid
var/DBQuery/query_polladd_option = dbcon.NewQuery("INSERT INTO [format_table_name("poll_option")] (pollid, text, percentagecalc, minval, maxval, descmin, descmid, descmax) VALUES ('[pollid]', '[option]', '[percentagecalc]', '[minval]', '[maxval]', '[descmin]', '[descmid]', '[descmax]')")
if(!query_polladd_option.Execute())
var/err = query_polladd_option.ErrorMsg()
log_game("SQL ERROR adding new poll option to table. Error : \[[err]\]\n")
return pollid
switch(alert(" ",,"Add option","Finish"))
if("Add option")
add_option = 1
if("Finish")
add_option = 0
if(query.NextRow())
pollid = text2num(query.item[1])
for(var/querytext in option_queries)
query = dbcon.NewQuery(replacetext(idquery, "{POLLID}", pollid))
if(!query.Execute())
var/err = query.ErrorMsg()
create_poll_window("<font color='red'>An SQL error has occured while creating your poll</font>")
log_game("SQL ERROR obtaining id from poll_question table. Error : \[[err]\]\n")
return
create_poll_window("<font color='#008800'>Your poll has been successfully created</font>")
return pollid
@@ -63,7 +63,7 @@
establish_db_connection()
if(!dbcon.IsConnected())
to_chat(usr, "\red Failed to establish database connection")
to_chat(usr, "<span class='warning'>Failed to establish database connection</span>")
return
if(!adm_ckey || !new_rank)
@@ -91,14 +91,14 @@
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.[format_table_name("admin_log")] (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');")
log_query.Execute()
to_chat(usr, "\blue New admin added.")
to_chat(usr, "<span class='notice'>New admin added.</span>")
else
if(!isnull(admin_id) && isnum(admin_id))
var/DBQuery/insert_query = dbcon.NewQuery("UPDATE [format_table_name("admin")] SET rank = '[new_rank]' WHERE id = [admin_id]")
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.[format_table_name("admin_log")] (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');")
log_query.Execute()
to_chat(usr, "\blue Admin rank changed.")
to_chat(usr, "<span class='notice'>Admin rank changed.</span>")
/datum/admins/proc/log_admin_permission_modification(var/adm_ckey, var/new_permission)
if(config.admin_legacy_system)
@@ -112,7 +112,7 @@
establish_db_connection()
if(!dbcon.IsConnected())
to_chat(usr, "\red Failed to establish database connection")
to_chat(usr, "<span class='warning'>Failed to establish database connection</span>")
return
if(!adm_ckey || !new_permission)
@@ -146,13 +146,13 @@
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.[format_table_name("admin_log")] (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Removed permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');")
log_query.Execute()
to_chat(usr, "\blue Permission removed.")
to_chat(usr, "<span class='notice'>Permission removed.</span>")
else //This admin doesn't have this permission, so we are adding it.
var/DBQuery/insert_query = dbcon.NewQuery("UPDATE [format_table_name("admin")] SET flags = '[admin_rights | new_permission]' WHERE id = [admin_id]")
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.[format_table_name("admin_log")] (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]')")
log_query.Execute()
to_chat(usr, "\blue Permission added.")
to_chat(usr, "<span class='notice'>Permission added.</span>")
/datum/admins/proc/updateranktodb(ckey,newrank)
establish_db_connection()
+2 -1
View File
@@ -536,7 +536,8 @@
for(var/mob/living/simple_animal/hostile/poison/terror_spider/S in ts_spiderlist)
if(S.ckey)
spider_minds += S.mind
dat += check_role_table("Terror Spiders", spider_minds)
if(spider_minds.len)
dat += check_role_table("Terror Spiders", spider_minds)
if(ticker.mode.ert.len)
dat += check_role_table("ERT", ticker.mode.ert)
+78 -78
View File
@@ -34,35 +34,35 @@
if("1")
log_admin("[key_name(usr)] has spawned a traitor.")
if(!src.makeTraitors())
to_chat(usr, "\red Unfortunately there weren't enough candidates available.")
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
if("2")
log_admin("[key_name(usr)] has spawned a changeling.")
if(!src.makeChanglings())
to_chat(usr, "\red Unfortunately there weren't enough candidates available.")
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
if("3")
log_admin("[key_name(usr)] has spawned revolutionaries.")
if(!src.makeRevs())
to_chat(usr, "\red Unfortunately there weren't enough candidates available.")
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
if("4")
log_admin("[key_name(usr)] has spawned a cultists.")
if(!src.makeCult())
to_chat(usr, "\red Unfortunately there weren't enough candidates available.")
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
if("5")
log_admin("[key_name(usr)] has spawned a wizard.")
if(!src.makeWizard())
to_chat(usr, "\red Unfortunately there weren't enough candidates available.")
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
if("6")
log_admin("[key_name(usr)] has spawned vampires.")
if(!src.makeVampires())
to_chat(usr, "\red Unfortunately there weren't enough candidates available.")
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
if("7")
log_admin("[key_name(usr)] has spawned vox raiders.")
if(!src.makeVoxRaiders())
to_chat(usr, "\red Unfortunately there weren't enough candidates available.")
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
if("8")
log_admin("[key_name(usr)] has spawned an abductor team.")
if(!src.makeAbductorTeam())
to_chat(usr, "\red Unfortunately there weren't enough candidates available.")
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"] || href_list["dbsearchip"] || href_list["dbsearchcid"] || href_list["dbsearchbantype"])
var/adminckey = href_list["dbsearchadmin"]
@@ -298,7 +298,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_admin(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].</span>", 1)
href_list["secretsadmin"] = "check_antagonist"
else if(href_list["simplemake"])
@@ -315,7 +315,7 @@
if("Yes") delmob = 1
log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]")
message_admins("\blue [key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]</span>", 1)
switch(href_list["simplemake"])
if("observer") M.change_mob_type( /mob/dead/observer , null, null, delmob, 1 )
@@ -398,7 +398,7 @@
log_admin("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
ban_unban_log_save("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
message_admins("\blue [key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]</span>", 1)
Banlist.cd = "/base/[banfolder]"
to_chat(Banlist["reason"], reason)
to_chat(Banlist["temp"], temp)
@@ -434,8 +434,8 @@
feedback_inc("ban_appearance_unban", 1)
DB_ban_unban(M.ckey, BANTYPE_APPEARANCE)
appearance_unban(M)
message_admins("\blue [key_name_admin(usr)] removed [key_name_admin(M)]'s appearance ban", 1)
to_chat(M, "\red<BIG><B>[usr.client.ckey] has removed your appearance ban.</B></BIG>")
message_admins("<span class='notice'>[key_name_admin(usr)] removed [key_name_admin(M)]'s appearance ban</span>", 1)
to_chat(M, "<span class='warning'><BIG><B>[usr.client.ckey] has removed your appearance ban.</B></BIG></span>")
else switch(alert("Appearance ban [M.ckey]?",,"Yes","No", "Cancel"))
if("Yes")
@@ -448,14 +448,14 @@
DB_ban_record(BANTYPE_APPEARANCE, M, -1, reason)
appearance_fullban(M, "[reason]; By [usr.ckey] on [time2text(world.realtime)]")
add_note(M.ckey, "Appearance banned - [reason]", null, usr.ckey, 0)
message_admins("\blue [key_name_admin(usr)] appearance banned [key_name_admin(M)]", 1)
to_chat(M, "\red<BIG><B>You have been appearance banned by [usr.client.ckey].</B></BIG>")
message_admins("<span class='notice'>[key_name_admin(usr)] appearance banned [key_name_admin(M)]</span>", 1)
to_chat(M, "<span class='warning'><BIG><B>You have been appearance banned by [usr.client.ckey].</B></BIG></span>")
to_chat(M, "<span class='danger'>The reason is: [reason]</span>")
to_chat(M, "\red Appearance ban can be lifted only upon request.")
to_chat(M, "<span class='warning'>Appearance ban can be lifted only upon request.</span>")
if(config.banappeals)
to_chat(M, "\red To try to resolve this matter head to [config.banappeals]")
to_chat(M, "<span class='warning'>To try to resolve this matter head to [config.banappeals]</span>")
else
to_chat(M, "\red No ban appeals URL has been set.")
to_chat(M, "<span class='warning'>No ban appeals URL has been set.</span>")
if("No")
return
@@ -790,7 +790,7 @@
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
if("Yes")
if(config.ban_legacy_system)
to_chat(usr, "\red Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.")
to_chat(usr, "<span class='warning'>Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.</span>")
return
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
if(!mins)
@@ -812,10 +812,10 @@
else
msg += ", [job]"
add_note(M.ckey, "Banned from [msg] - [reason]", null, usr.ckey, 0)
message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes", 1)
to_chat(M, "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>")
message_admins("<span class='notice'>[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes</span>", 1)
to_chat(M, "<span class='warning'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></span>")
to_chat(M, "<span class='danger'>The reason is: [reason]</span>")
to_chat(M, "\red This jobban will be lifted in [mins] minutes.")
to_chat(M, "<span class='warning'>This jobban will be lifted in [mins] minutes.</span>")
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("No")
@@ -832,10 +832,10 @@
if(!msg) msg = job
else msg += ", [job]"
add_note(M.ckey, "Banned from [msg] - [reason]", null, usr.ckey, 0)
message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1)
to_chat(M, "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>")
message_admins("<span class='notice'>[key_name_admin(usr)] banned [key_name_admin(M)] from [msg]</span>", 1)
to_chat(M, "<span class='warning'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></span>")
to_chat(M, "<span class='danger'>The reason is: [reason]</span>")
to_chat(M, "\red Jobban can be lifted only upon request.")
to_chat(M, "<span class='warning'>Jobban can be lifted only upon request.</span>")
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("Cancel")
@@ -865,8 +865,8 @@
else
continue
if(msg)
message_admins("\blue [key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]", 1)
to_chat(M, "\red<BIG><B>You have been un-jobbanned by [usr.client.ckey] from [msg].</B></BIG>")
message_admins("<span class='notice'>[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]</span>", 1)
to_chat(M, "<span class='warning'><BIG><B>You have been un-jobbanned by [usr.client.ckey] from [msg].</B></BIG></span>")
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
return 0 //we didn't do anything!
@@ -876,9 +876,9 @@
if(ismob(M))
if(!check_if_greater_rights_than(M.client))
return
to_chat(M, "\red You have been kicked from the server")
to_chat(M, "<span class='warning'>You have been kicked from the server</span>")
log_admin("[key_name(usr)] booted [key_name(M)].")
message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] booted [key_name_admin(M)].</span>", 1)
//M.client = null
del(M.client)
@@ -933,7 +933,7 @@
if(t)
if((alert("Do you want to unjobban [t]?","Unjobban confirmation", "Yes", "No") == "Yes") && t) //No more misclicks! Unless you do it twice.
log_admin("[key_name(usr)] removed [t]")
message_admins("\blue [key_name_admin(usr)] removed [t]", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] removed [t]</span>", 1)
jobban_remove(t)
href_list["ban"] = 1 // lets it fall through and refresh
var/t_split = splittext(t, " - ")
@@ -960,17 +960,17 @@
return
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins)
ban_unban_log_save("[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.")
to_chat(M, "\red<BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG>")
to_chat(M, "\red This is a temporary ban, it will be removed in [mins] minutes.")
to_chat(M, "<span class='warning'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></span>")
to_chat(M, "<span class='warning'>This is a temporary ban, it will be removed in [mins] minutes.</span>")
feedback_inc("ban_tmp",1)
DB_ban_record(BANTYPE_TEMP, M, mins, reason)
feedback_inc("ban_tmp_mins",mins)
if(config.banappeals)
to_chat(M, "\red To try to resolve this matter head to [config.banappeals]")
to_chat(M, "<span class='warning'>To try to resolve this matter head to [config.banappeals]</span>")
else
to_chat(M, "\red No ban appeals URL has been set.")
to_chat(M, "<span class='warning'>No ban appeals URL has been set.</span>")
log_admin("[key_name(usr)] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("\blue [key_name_admin(usr)] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("<span class='notice'>[key_name_admin(usr)] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.</span>")
del(M.client)
//qdel(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
@@ -984,15 +984,15 @@
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0, M.lastKnownIP)
if("No")
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0)
to_chat(M, "\red<BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG>")
to_chat(M, "\red This is a permanent ban.")
to_chat(M, "<span class='warning'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></span>")
to_chat(M, "<span class='warning'>This is a permanent ban.</span>")
if(config.banappeals)
to_chat(M, "\red To try to resolve this matter head to [config.banappeals]")
to_chat(M, "<span class='warning'>To try to resolve this matter head to [config.banappeals]</span>")
else
to_chat(M, "\red No ban appeals URL has been set.")
to_chat(M, "<span class='warning'>No ban appeals URL has been set.</span>")
ban_unban_log_save("[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.")
log_admin("[key_name(usr)] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("\blue[key_name_admin(usr)] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("<span class='notice'>[key_name_admin(usr)] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.</span>")
feedback_inc("ban_perma",1)
DB_ban_record(BANTYPE_PERMA, M, -1, reason)
@@ -1094,7 +1094,7 @@
return alert(usr, "The game has already started.", null, null, null, null)
master_mode = href_list["c_mode2"]
log_admin("[key_name(usr)] set the mode as [master_mode].")
message_admins("\blue [key_name_admin(usr)] set the mode as [master_mode].", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] set the mode as [master_mode].</span>", 1)
to_chat(world, "<span class='boldnotice'>The mode is now: [master_mode]</span>")
Game() // updates the main game menu
world.save_mode(master_mode)
@@ -1109,7 +1109,7 @@
return alert(usr, "The game mode has to be secret!", null, null, null, null)
secret_force_mode = href_list["f_secret2"]
log_admin("[key_name(usr)] set the forced secret mode as [secret_force_mode].")
message_admins("\blue [key_name_admin(usr)] set the forced secret mode as [secret_force_mode].", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] set the forced secret mode as [secret_force_mode].</span>", 1)
Game() // updates the main game menu
.(href, list("f_secret"=1))
@@ -1124,7 +1124,7 @@
return
log_admin("[key_name(usr)] attempting to monkeyize [key_name(H)]")
message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(H)]", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] attempting to monkeyize [key_name_admin(H)]</span>", 1)
H.monkeyize()
@@ -1140,7 +1140,7 @@
return
log_admin("[key_name(usr)] attempting to corgize [key_name(H)]")
message_admins("\blue [key_name_admin(usr)] attempting to corgize [key_name_admin(H)]", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] attempting to corgize [key_name_admin(H)]</span>", 1)
H.corgize()
else if(href_list["makePAI"])
@@ -1164,7 +1164,7 @@
name = painame
log_admin("[key_name(usr)] attempting to pAIze [key_name(H)]")
message_admins("\blue [key_name_admin(usr)] attempting to pAIze [key_name_admin(H)]", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] attempting to pAIze [key_name_admin(H)]</span>", 1)
H.paize(name)
else if(href_list["forcespeech"])
@@ -1179,7 +1179,7 @@
M.say(speech)
speech = sanitize(speech) // Nah, we don't trust them
log_admin("[key_name(usr)] forced [key_name(M)] to say: [speech]")
message_admins("\blue [key_name_admin(usr)] forced [key_name_admin(M)] to say: [speech]")
message_admins("<span class='notice'>[key_name_admin(usr)] forced [key_name_admin(M)] to say: [speech]</span>")
else if(href_list["sendtoprison"])
if(!check_rights(R_ADMIN)) return
@@ -1223,9 +1223,9 @@
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform)
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
to_chat(M, "\red You have been sent to the prison station!")
to_chat(M, "<span class='warning'>You have been sent to the prison station!</span>")
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
message_admins("\blue [key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.</span>", 1)
else if(href_list["sendbacktolobby"])
if(!check_rights(R_ADMIN))
@@ -1278,7 +1278,7 @@
sleep(5)
M.loc = pick(tdome1)
spawn(50)
to_chat(M, "\blue You have been sent to the Thunderdome.")
to_chat(M, "<span class='notice'>You have been sent to the Thunderdome.</span>")
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 1)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 1)", 1)
@@ -1308,7 +1308,7 @@
sleep(5)
M.loc = pick(tdome2)
spawn(50)
to_chat(M, "\blue You have been sent to the Thunderdome.")
to_chat(M, "<span class='notice'>You have been sent to the Thunderdome.</span>")
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 2)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 2)", 1)
@@ -1330,7 +1330,7 @@
sleep(5)
M.loc = pick(tdomeadmin)
spawn(50)
to_chat(M, "\blue You have been sent to the Thunderdome.")
to_chat(M, "<span class='notice'>You have been sent to the Thunderdome.</span>")
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Admin.)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Admin.)", 1)
@@ -1364,7 +1364,7 @@
sleep(5)
M.loc = pick(tdomeobserve)
spawn(50)
to_chat(M, "\blue You have been sent to the Thunderdome.")
to_chat(M, "<span class='notice'>You have been sent to the Thunderdome.</span>")
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Observer.)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Observer.)", 1)
@@ -1386,7 +1386,7 @@
sleep(5)
M.loc = pick(aroomwarp)
spawn(50)
to_chat(M, "\blue You have been sent to the <b>Admin Room!</b>.")
to_chat(M, "<span class='notice'>You have been sent to the <b>Admin Room!</b>.</span>")
log_admin("[key_name(usr)] has sent [key_name(M)] to the Admin Room")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the Admin Room", 1)
@@ -1400,7 +1400,7 @@
return
L.revive()
message_admins("\red Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!", 1)
message_admins("<span class='warning'>Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!</span>", 1)
log_admin("[key_name(usr)] healed / revived [key_name(L)]")
else if(href_list["makeai"])
@@ -1414,7 +1414,7 @@
if(alert(usr, "Confirm make ai?",, "Yes", "No") != "Yes")
return
message_admins("\red Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!", 1)
message_admins("<span class='warning'>Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!</span>", 1)
log_admin("[key_name(usr)] AIized [key_name(H)]")
var/mob/living/silicon/ai/ai_character = H.AIize()
ai_character.moveToAILandmark()
@@ -1619,7 +1619,7 @@
log_admin("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]")
message_admins("[key_name_admin(H)] got their cookie, spawned by [key_name_admin(src.owner)]")
feedback_inc("admin_cookies_spawned",1)
to_chat(H, "\blue Your prayers have been answered!! You received the <b>best cookie</b>!")
to_chat(H, "<span class='notice'>Your prayers have been answered!! You received the <b>best cookie</b>!</span>")
else if(href_list["BlueSpaceArtillery"])
if(!check_rights(R_ADMIN|R_EVENT)) return
@@ -1986,7 +1986,7 @@
usr << browse(data, "window=[B.name]")
else
to_chat(usr, "\red The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]")
to_chat(usr, "<span class='warning'>The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]</span>")
else if(href_list["AdminFaxViewPage"])
if(!check_rights(R_ADMIN))
@@ -2118,14 +2118,14 @@
if(destination != "All Departments")
if(!fax.receivefax(P))
to_chat(src.owner, "\red Message transmission failed.")
to_chat(src.owner, "<span class='warning'>Message transmission failed.</span>")
return
else
for(var/obj/machinery/photocopier/faxmachine/F in allfaxes)
if(is_station_level(F.z))
spawn(0)
if(!F.receivefax(P))
to_chat(src.owner, "\red Message transmission to [F.department] failed.")
to_chat(src.owner, "<span class='warning'>Message transmission to [F.department] failed.</span>")
var/datum/fax/admin/A = new /datum/fax/admin()
A.name = P.name
@@ -2140,7 +2140,7 @@
A.sent_by = usr
A.sent_at = world.time
to_chat(src.owner, "\blue Message transmitted successfully.")
to_chat(src.owner, "<span class='notice'>Message transmitted successfully.</span>")
if(notify == "Yes")
var/mob/living/carbon/human/H = sender
if(istype(H) && H.stat == CONSCIOUS && (istype(H.l_ear, /obj/item/device/radio/headset) || istype(H.r_ear, /obj/item/device/radio/headset)))
@@ -2440,30 +2440,30 @@
feedback_add_details("admin_secrets_fun_used","Grav")
if(gravity_is_on)
log_admin("[key_name(usr)] toggled gravity on.", 1)
message_admins("\blue [key_name_admin(usr)] toggled gravity on.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] toggled gravity on.</span>", 1)
event_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.")
else
log_admin("[key_name(usr)] toggled gravity off.", 1)
message_admins("\blue [key_name_admin(usr)] toggled gravity off.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] toggled gravity off.</span>", 1)
event_announcement.Announce("Feedback surge detected in mass-distributions systems. Artifical gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.")
if("power")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","P")
log_admin("[key_name(usr)] made all areas powered", 1)
message_admins("\blue [key_name_admin(usr)] made all areas powered", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] made all areas powered</span>", 1)
power_restore()
if("unpower")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","UP")
log_admin("[key_name(usr)] made all areas unpowered", 1)
message_admins("\blue [key_name_admin(usr)] made all areas unpowered", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] made all areas unpowered</span>", 1)
power_failure()
if("quickpower")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","QP")
log_admin("[key_name(usr)] made all SMESs powered", 1)
message_admins("\blue [key_name_admin(usr)] made all SMESs powered", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] made all SMESs powered</span>", 1)
power_restore_quick()
if("prisonwarp")
if(!ticker)
@@ -2471,7 +2471,7 @@
return
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","PW")
message_admins("\blue [key_name_admin(usr)] teleported all players to the prison station.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] teleported all players to the prison station.</span>", 1)
for(var/mob/living/carbon/human/H in mob_list)
var/turf/loc = find_loc(H)
var/security = 0
@@ -2538,7 +2538,7 @@
A.mind.objectives += new_objective
ticker.mode.greet_traitor(A.mind)
ticker.mode.finalize_traitor(A.mind)
message_admins("\blue [key_name_admin(usr)] used everyone is a traitor secret. Objective is [objective]", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] used everyone is a traitor secret. Objective is [objective]</span>", 1)
log_admin("[key_name(usr)] used everyone is a traitor secret. Objective is [objective]")
if("togglebombcap")
@@ -2578,20 +2578,20 @@
var/Message = rand(1,4)
switch(Message)
if(1)
M.show_message(text("\blue You shudder as if cold..."), 1)
M.show_message(text("<span class='notice'>You shudder as if cold...</span>"), 1)
if(2)
M.show_message(text("\blue You feel something gliding across your back..."), 1)
M.show_message(text("<span class='notice'>You feel something gliding across your back...</span>"), 1)
if(3)
M.show_message(text("\blue Your eyes twitch, you feel like something you can't see is here..."), 1)
M.show_message(text("<span class='notice'>Your eyes twitch, you feel like something you can't see is here...</span>"), 1)
if(4)
M.show_message(text("\blue You notice something moving out of the corner of your eye, but nothing is there..."), 1)
M.show_message(text("<span class='notice'>You notice something moving out of the corner of your eye, but nothing is there...</span>"), 1)
for(var/obj/W in orange(5,M))
if(prob(25) && !W.anchored)
step_rand(W)
sleep(rand(100,1000))
for(var/mob/M in player_list)
if(M.stat != 2)
M.show_message(text("\blue The chilling wind suddenly stops..."), 1)
M.show_message(text("<span class='notice'>The chilling wind suddenly stops...</span>"), 1)
/* if("shockwave")
ok = 1
to_chat(world, "<span class='danger'><big>ALERT: STATION STRESS CRITICAL</big></span>")
@@ -2775,22 +2775,22 @@
message_admins("<span class='adminnotice'>[key_name_admin(usr)] tried starting a Thunderdome match, but no ghosts signed up.</span>")
if("securitylevel0")
set_security_level(0)
message_admins("\blue [key_name_admin(usr)] change security level to Green.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] change security level to Green.</span>", 1)
if("securitylevel1")
set_security_level(1)
message_admins("\blue [key_name_admin(usr)] change security level to Blue.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] change security level to Blue.</span>", 1)
if("securitylevel2")
set_security_level(2)
message_admins("\blue [key_name_admin(usr)] change security level to Red.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] change security level to Red.</span>", 1)
if("securitylevel3")
set_security_level(3)
message_admins("\blue [key_name_admin(usr)] change security level to Gamma.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] change security level to Gamma.</span>", 1)
if("securitylevel4")
set_security_level(4)
message_admins("\blue [key_name_admin(usr)] change security level to Epsilon.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] change security level to Epsilon.</span>", 1)
if("securitylevel5")
set_security_level(5)
message_admins("\blue [key_name_admin(usr)] change security level to Delta.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] change security level to Delta.</span>", 1)
if("moveminingshuttle")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","ShM")
+3 -3
View File
@@ -197,8 +197,8 @@
sanitize(msg)
if(length(msg) > 400) // TODO: if message length is over 400, divide it up into seperate messages, the message length restriction is based on IRC limitations. Probably easier to do this on the bots ends.
to_chat(src, "\red Your message was not sent because it was more then 400 characters find your message below for ease of copy/pasting")
to_chat(src, "\blue [msg]")
to_chat(src, "<span class='warning'>Your message was not sent because it was more then 400 characters find your message below for ease of copy/pasting</span>")
to_chat(src, "<span class='notice'>[msg]</span>")
return
send2adminirc("PlayerPM from [key_name(src)]: [html_decode(msg)]")
@@ -210,4 +210,4 @@
if(X == src)
continue
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob))
to_chat(X, "<B><font color='blue'>PM: [key_name(src, X, 0)]-&gt;IRC-Admins:</B> \blue [msg]</font>")
to_chat(X, "<B><font color='blue'>PM: [key_name(src, X, 0)]-&gt;IRC-Admins:</B> <span class='notice'>[msg]</span></font>")
+6 -6
View File
@@ -296,7 +296,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M:Alienize()
feedback_add_details("admin_verb","MKAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] made [key_name(M)] into an alien.")
message_admins("\blue [key_name_admin(usr)] made [key_name(M)] into an alien.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] made [key_name(M)] into an alien.</span>", 1)
else
alert("Invalid mob")
@@ -316,7 +316,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M:slimeize()
feedback_add_details("admin_verb","MKMET") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] made [key_name(M)] into a slime.")
message_admins("\blue [key_name_admin(usr)] made [key_name(M)] into a slime.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] made [key_name(M)] into a slime.</span>", 1)
else
alert("Invalid mob")
@@ -336,7 +336,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(S)
S.create(M)
log_admin("[key_name(src)] has turned [M.key] into a Superhero.")
message_admins("\blue [key_name_admin(usr)] made [key_name(M)] into a Superhero.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] made [key_name(M)] into a Superhero.</span>", 1)
else
alert("Invalid mob")
@@ -424,7 +424,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
alert("Invalid mob")
feedback_add_details("admin_verb","GFA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(src)] has granted [M.key] full access.")
message_admins("\blue [key_name_admin(usr)] has granted [M.key] full access.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] has granted [M.key] full access.</span>", 1)
/client/proc/cmd_assume_direct_control(var/mob/M in mob_list)
set category = "Admin"
@@ -440,7 +440,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
else
var/mob/dead/observer/ghost = new/mob/dead/observer(M,1)
ghost.ckey = M.ckey
message_admins("\blue [key_name_admin(usr)] assumed direct control of [M].", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] assumed direct control of [M].</span>", 1)
log_admin("[key_name(usr)] assumed direct control of [M].")
var/mob/adminmob = src.mob
M.ckey = src.ckey
@@ -662,7 +662,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.regenerate_icons()
log_admin("[key_name(usr)] changed the equipment of [key_name(M)] to [dresscode].")
message_admins("\blue [key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode].", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode].</span>", 1)
return
+1 -1
View File
@@ -15,7 +15,7 @@
if(T.active_hotspot)
burning = 1
to_chat(usr, "\blue @[target.x],[target.y]: O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]")
to_chat(usr, "<span class='notice'>@[target.x],[target.y]: O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("<span class='warning'>BURNING</span>"):(null)]</span>")
for(var/datum/gas/trace_gas in GM.trace_gases)
to_chat(usr, "[trace_gas.type]: [trace_gas.moles]")
+5 -5
View File
@@ -45,7 +45,7 @@ var/global/list/frozen_mob_list = list()
/mob/living/proc/admin_unFreeze(var/client/admin)
if(istype(admin))
to_chat(src, "<b><font color= red>You have been unfrozen by [key_name(admin)]</b></font>")
message_admins("\blue [key_name_admin(admin)] unfroze [key_name_admin(src)]")
message_admins("<span class='notice'>[key_name_admin(admin)] unfroze [key_name_admin(src)]</span>")
log_admin("[key_name(admin)] unfroze [key_name(src)]")
anchored = 0
@@ -106,10 +106,10 @@ var/global/list/frozen_mob_list = list()
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>")
message_admins("\blue [key_name_admin(usr)] froze [key_name(M.occupant)] in a [M.name]")
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
message_admins("\blue [key_name_admin(usr)] froze an empty [M.name]")
message_admins("<span class='notice'>[key_name_admin(usr)] froze an empty [M.name]</span>")
log_admin("[key_name(usr)] froze an empty [M.name]")
else if(M.can_move == 0)
M.can_move = 1
@@ -117,8 +117,8 @@ var/global/list/frozen_mob_list = list()
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>")
message_admins("\blue [key_name_admin(usr)] unfroze [key_name(M.occupant)] in a [M.name]")
message_admins("<span class='notice'>[key_name_admin(usr)] unfroze [key_name(M.occupant)] in a [M.name]</span>")
log_admin("[key_name(usr)] unfroze [M.occupant.name]/[M.occupant.ckey] in a [M.name]")
else
message_admins("\blue [key_name_admin(usr)] unfroze an empty [M.name]")
message_admins("<span class='notice'>[key_name_admin(usr)] unfroze an empty [M.name]</span>")
log_admin("[key_name(usr)] unfroze an empty [M.name]")
+3 -3
View File
@@ -62,14 +62,14 @@ var/global/sent_honksquad = 0
new_honksquad.update_internals_hud_icon(1)
//So they don't forget their code or mission.
new_honksquad.mind.store_memory("<B>Mission:</B> \red [input].")
new_honksquad.mind.store_memory("<B>Mission:</B> <span class='warning'>[input].</span>")
to_chat(new_honksquad, "\blue You are a HONKsquad. [!honk_leader_selected?"commando":"<B>LEADER</B>"] in the service of Clown Planet. You are called in cases of exteme low levels of HONK. You are NOT authorized to kill. \nYour current mission is: <span class='danger'>[input]</span>")
to_chat(new_honksquad, "<span class='notice'>You are a HONKsquad. [!honk_leader_selected ? "commando" : "<B>LEADER</B>"] in the service of Clown Planet. You are called in cases of exteme low levels of HONK. You are NOT authorized to kill.\nYour current mission is: <span class='danger'>[input]</span></span>")
honksquad_number--
message_admins("\blue [key_name_admin(usr)] has spawned a HONKsquad.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] has spawned a HONKsquad.</span>", 1)
log_admin("[key_name(usr)] used Spawn HONKsquad.")
return 1
+3 -3
View File
@@ -337,7 +337,7 @@ client/proc/one_click_antag()
//So they don't forget their code or mission.
to_chat(new_syndicate_commando, "\blue You are an Elite Syndicate. [!syndicate_leader_selected?"commando":"<B>LEADER</B>"] in the service of the Syndicate. \nYour current mission is: <span class='danger'> [input]</span>")
to_chat(new_syndicate_commando, "<span class='notice'>You are an Elite Syndicate. [!syndicate_leader_selected ? "commando" : "<B>LEADER</B>"] in the service of the Syndicate. \nYour current mission is: <span class='danger'>[input]</span></span>")
numagents--
if(numagents >= 6)
@@ -444,8 +444,8 @@ client/proc/one_click_antag()
new_vox.key = theghost.key
ticker.mode.traitors += new_vox.mind
to_chat(new_vox, "\blue You are a Vox Primalis, fresh out of the Shoal. Your ship has arrived at the Tau Ceti system hosting the NSV Exodus... or was it the Luna? NSS? Utopia? Nobody is really sure, but everyong is raring to start pillaging! Your current goal is: <span class='danger'> [input]</span>")
to_chat(new_vox, "\red Don't forget to turn on your nitrogen internals!")
to_chat(new_vox, "<span class='notice'>You are a Vox Primalis, fresh out of the Shoal. Your ship has arrived at the Tau Ceti system hosting the NSV Exodus... or was it the Luna? NSS? Utopia? Nobody is really sure, but everyong is raring to start pillaging! Your current goal is: <span class='danger'> [input]</span></span>")
to_chat(new_vox, "<span class='warning'>Don't forget to turn on your nitrogen internals!</span>")
raiders--
if(raiders > max_raiders)
+2 -2
View File
@@ -7,13 +7,13 @@
if(usr.client)
if(usr.client.prefs.muted & MUTE_PRAY)
to_chat(usr, "\red You cannot pray (muted).")
to_chat(usr, "<span class='warning'>You cannot pray (muted).</span>")
return
if(client.handle_spam_prevention(msg, MUTE_PRAY, OOC_COOLDOWN))
return
var/image/cross = image('icons/obj/storage.dmi',"bible")
msg = "\blue [bicon(cross)] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=[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]"
msg = "<span class='notice'>[bicon(cross)] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>) (<A HREF='?_src_=holder;Bless=[UID()]'>BLESS</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b> [msg]</span>"
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
+47 -50
View File
@@ -39,9 +39,9 @@
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform)
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
spawn(50)
to_chat(M, "\red You have been sent to the prison station!")
to_chat(M, "<span class='warning'>You have been sent to the prison station!</span>")
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
message_admins("\blue [key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.</span>", 1)
feedback_add_details("admin_verb","PRISON") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_subtle_message(mob/M as mob in mob_list)
@@ -61,10 +61,10 @@
if(usr)
if(usr.client)
if(usr.client.holder)
to_chat(M, "\bold You hear a voice in your head... \italic [msg]")
to_chat(M, "<b>old You hear a voice in your head... <i>[msg]</i></b>")
log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]")
message_admins("\blue \bold SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]", 1)
message_admins("<span class='boldnotice'>SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]</span>", 1)
feedback_add_details("admin_verb","SMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_mentor_check_new_players() //Allows mentors / admins to determine who the newer players are.
@@ -115,7 +115,7 @@
return
to_chat(world, "[msg]")
log_admin("GlobalNarrate: [key_name(usr)] : [msg]")
message_admins("\blue \bold GlobalNarrate: [key_name_admin(usr)]: [msg]<BR>", 1)
message_admins("<span class='boldnotice'>GlobalNarrate: [key_name_admin(usr)]: [msg]<BR></span>", 1)
feedback_add_details("admin_verb","GLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_direct_narrate(var/mob/M) // Targetted narrate -- TLE
@@ -138,7 +138,7 @@
to_chat(M, msg)
log_admin("DirectNarrate: [key_name(usr)] to ([key_name(M)]): [msg]")
message_admins("\blue \bold DirectNarrate: [key_name_admin(usr)] to ([key_name_admin(M)]): [msg]<BR>", 1)
message_admins("<span class='boldnotice'>DirectNarrate: [key_name_admin(usr)] to ([key_name_admin(M)]): [msg]<BR></span>", 1)
feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_godmode(mob/M as mob in mob_list)
@@ -149,7 +149,7 @@
return
M.status_flags ^= GODMODE
to_chat(usr, "\blue Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]")
to_chat(usr, "<span class='notice'>Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]</span>")
log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]")
message_admins("[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]", 1)
@@ -333,7 +333,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
G_found.mind.transfer_to(new_xeno) //be careful when doing stuff like this! I've already checked the mind isn't in use
new_xeno.key = G_found.key
to_chat(new_xeno, "You have been fully respawned. Enjoy the game.")
message_admins("\blue [key_name_admin(usr)] has respawned [new_xeno.key] as a filthy xeno.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] has respawned [new_xeno.key] as a filthy xeno.</span>", 1)
return //all done. The ghost is auto-deleted
var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned.
@@ -437,7 +437,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(alert(new_character,"Would you like an active AI to announce this character?",,"No","Yes")=="Yes")
call(/mob/new_player/proc/AnnounceArrival)(new_character, new_character.mind.assigned_role)
message_admins("\blue [key_name_admin(usr)] has respawned [key_name_admin(G_found)] as [new_character.real_name].", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] has respawned [key_name_admin(G_found)] as [new_character.real_name].</span>", 1)
to_chat(new_character, "You have been fully respawned. Enjoy the game.")
@@ -473,7 +473,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
else return 0
new_xeno.ckey = ckey
message_admins("\blue [key_name_admin(usr)] has spawned [ckey] as a filthy xeno [alien_caste].", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] has spawned [ckey] as a filthy xeno [alien_caste].</span>", 1)
return 1
@@ -537,55 +537,52 @@ Traitors and the like can also be revived with the previous role mostly intact.
M.revive()
log_admin("[key_name(usr)] healed / revived [key_name(M)]")
message_admins("\red Admin [key_name_admin(usr)] healed / revived [key_name_admin(M)]!", 1)
message_admins("<span class='warning'>Admin [key_name_admin(usr)] healed / revived [key_name_admin(M)]!</span>", 1)
feedback_add_details("admin_verb","REJU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_create_centcom_report()
set category = "Event"
set name = "Create Communications Report"
var/list/MsgType = list("Centcom Report","Enemy Communications")
if(!check_rights(R_SERVER|R_EVENT))
return
//the stuff on the list is |"report type" = "report title"|, if that makes any sense
var/list/MsgType = list("Central Command Report" = "Nanotrasen Update",
"Syndicate Communique" = "Syndicate Message",
"Space Wizard Federation Message" = "Sorcerous Message",
"Enemy Communications" = "Unknown Message",
"Custom" = "Cryptic Message")
var/list/MsgSound = list("Beep" = 'sound/misc/notice2.ogg',
"Enemy Communications Intercepted" = 'sound/AI/intercept2.ogg',
"New Command Report Created" = 'sound/AI/commandreport.ogg')
var/type = input(usr, "Pick a type of report to send", "Report Type", "") as anything in MsgType
var/input = input(usr, "Please enter anything you want. Anything. Serious.", "What?", "") as message|null
if(!input)
return
var/customname = input(usr, "Pick a title for the report.", "Title") as text|null
if(type == "Custom")
type = input(usr, "What would you like the report type to be?", "Report Type", "Encrypted Transmission") as text|null
var/customname = input(usr, "Pick a title for the report.", "Title", MsgType[type]) as text|null
if(!customname)
return
var/input = input(usr, "Please enter anything you want. Anything. Serious.", "What's the message?") as message|null
if(!input)
return
if(type == "Enemy Communications")
if(!customname)
customname = type
switch(alert("Should this be announced to the general population?",,"Yes","No", "Cancel"))
if("Yes")
var/beepsound = input(usr, "What sound should the announcement make?", "Announcement Sound", "") as anything in MsgSound
var/from = input(usr, "What kind of report? Example: Syndicate Communique", "From") as text|null
if(!from)
from = "Syndicate Communique"
switch(alert("Should this be announced to the general population?",,"Yes","No", "Cancel"))
if("Yes")
communications_announcement.Announce(input, customname, , , , from);
else if("No")
to_chat(world, "<span class='danger'>[from] available at all communications consoles.</span>")
else
return
command_announcement.Announce(input, customname, MsgSound[beepsound], , , type)
print_command_report(input, "[command_name()] Update")
else if("No")
//same thing as the blob stuff - it's not public, so it's classified, dammit
command_announcement.Announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg', from = "[command_name()] Update")
print_command_report(input, "Classified [command_name()] Update")
else
return
print_command_report(input, from)
if(type == "Centcom Report")
if(!customname)
customname = "Nanotrasen Update"
var/announce = alert("Should this be announced to the general population?",,"Yes","No")
switch(announce)
if("Yes")
command_announcement.Announce(input, customname);
if("No")
to_chat(world, "<span class='danger'>New Nanotrasen Update available at all communication consoles.</span>")
print_command_report(input, "[announce == "No" ? "Classified " : ""][command_name()] Update")
// world << sound('sound/AI/commandreport.ogg')
log_admin("[key_name(src)] has created a communications report: [input]")
message_admins("[key_name_admin(src)] has created a communications report", 1)
feedback_add_details("admin_verb","CCR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -711,7 +708,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
mob.gib()
log_admin("[key_name(usr)] used gibself.")
message_admins("\blue [key_name_admin(usr)] used gibself.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] used gibself.</span>", 1)
feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_check_contents(mob/living/M as mob in mob_list)
@@ -740,7 +737,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
view = world.view
log_admin("[key_name(usr)] changed their view range to [view].")
//message_admins("\blue [key_name_admin(usr)] changed their view range to [view].", 1) //why? removed by order of XSI
//message_admins("<span class='notice'>[key_name_admin(usr)] changed their view range to [view].</span>", 1) //why? removed by order of XSI
feedback_add_details("admin_verb","CVRA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -838,7 +835,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("Admin [key_name_admin(usr)] has forced the players to have random appearances.", 1)
if(notifyplayers == "Yes")
to_chat(world, "\blue <b>Admin [usr.key] has forced the players to have completely random identities!")
to_chat(world, "<span class='notice'><b>Admin [usr.key] has forced the players to have completely random identities!</span>")
to_chat(usr, "<i>Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet</i>.")
@@ -895,12 +892,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(ticker.mode.ert_disabled)
ticker.mode.ert_disabled = 0
to_chat(usr, "\blue ERT has been <b>Enabled</b>.")
to_chat(usr, "<span class='notice'>ERT has been <b>Enabled</b>.</span>")
log_admin("Admin [key_name(src)] has enabled ERT calling.")
message_admins("Admin [key_name_admin(usr)] has enabled ERT calling.", 1)
else
ticker.mode.ert_disabled = 1
to_chat(usr, "\red ERT has been <b>Disabled</b>.")
to_chat(usr, "<span class='warning'>ERT has been <b>Disabled</b>.</span>")
log_admin("Admin [key_name(src)] has disabled ERT calling.")
message_admins("Admin [key_name_admin(usr)] has disabled ERT calling.", 1)
+5 -5
View File
@@ -68,10 +68,10 @@ var/global/sent_strike_team = 0
//So they don't forget their code or mission.
if(nuke_code)
new_commando.mind.store_memory("<B>Nuke Code:</B> \red [nuke_code].")
new_commando.mind.store_memory("<B>Mission:</B> \red [input].")
new_commando.mind.store_memory("<B>Nuke Code:</B> <span class='warning'>[nuke_code].</span>")
new_commando.mind.store_memory("<B>Mission:</B> <span class='warning'>[input].</span>")
to_chat(new_commando, "\blue You are a Special Ops. [!leader_selected?"commando":"<B>LEADER</B>"] in the service of Central Command. Check the table ahead for detailed instructions.\nYour current mission is: <span class='danger'>[input]</span>")
to_chat(new_commando, "<span class='notice'>You are a Special Ops. [!leader_selected ? "commando" : "<B>LEADER</B>"] in the service of Central Command. Check the table ahead for detailed instructions.\nYour current mission is: <span class='danger'>[input]</span></span>")
commando_number--
@@ -92,7 +92,7 @@ var/global/sent_strike_team = 0
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
qdel(L)
message_admins("\blue [key_name_admin(usr)] has spawned a CentComm strike squad.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] has spawned a CentComm strike squad.</span>", 1)
log_admin("[key_name(usr)] used Spawn Death Squad.")
return 1
@@ -157,7 +157,7 @@ var/global/sent_strike_team = 0
equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse(src), slot_r_hand)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)//Here you go Deuryn
var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(src)
L.imp_in = src
L.implanted = 1
sec_hud_set_implants()
@@ -75,10 +75,10 @@ var/global/sent_syndicate_strike_team = 0
//So they don't forget their code or mission.
if(nuke_code)
new_syndicate_commando.mind.store_memory("<B>Nuke Code:</B> \red [nuke_code].")
new_syndicate_commando.mind.store_memory("<B>Mission:</B> \red [input].")
new_syndicate_commando.mind.store_memory("<B>Nuke Code:</B> <span class='warning'>[nuke_code]</span>.")
new_syndicate_commando.mind.store_memory("<B>Mission:</B> <span class='warning'>[input]</span>.")
to_chat(new_syndicate_commando, "\blue You are an Elite Syndicate. [!syndicate_leader_selected?"commando":"<B>LEADER</B>"] in the service of the Syndicate. \nYour current mission is: <span class='danger'>[input]</span>")
to_chat(new_syndicate_commando, "<span class='notice'>You are an Elite Syndicate. [!syndicate_leader_selected ? "commando" : "<B>LEADER</B>"] in the service of the Syndicate. \nYour current mission is: <span class='danger'>[input]</span></span>")
new_syndicate_commando.faction += "syndicate"
syndicate_commando_number--
@@ -87,7 +87,7 @@ var/global/sent_syndicate_strike_team = 0
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
qdel(L)
message_admins("\blue [key_name_admin(usr)] has spawned a Syndicate strike squad.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] has spawned a Syndicate strike squad.</span>", 1)
log_admin("[key_name(usr)] used Spawn Syndicate Squad.")
feedback_add_details("admin_verb","SDTHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+1 -1
View File
@@ -19,6 +19,6 @@
if("Yes") config.Tickcomp = 1
else config.Tickcomp = 0
else
to_chat(src, "\red Error: ticklag(): Invalid world.ticklag value. No changes made.")
to_chat(src, "<span class='warning'>Error: ticklag(): Invalid world.ticklag value. No changes made.</span>")
+2 -2
View File
@@ -14,9 +14,9 @@
if(ticker.triai)
ticker.triai = 0
to_chat(usr, "Only one AI will be spawned at round start.")
message_admins("\blue [key_name_admin(usr)] has toggled off triple AIs at round start.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] has toggled off triple AIs at round start.</span>", 1)
else
ticker.triai = 1
to_chat(usr, "There will be an AI Triumvirate at round start.")
message_admins("\blue [key_name_admin(usr)] has toggled on triple AIs at round start.", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] has toggled on triple AIs at round start.</span>", 1)
return
@@ -51,8 +51,7 @@
mob_hunt_server.red_terminal = null
if(mob_hunt_server.blue_terminal == src)
mob_hunt_server.blue_terminal = null
if(avatar)
qdel(avatar)
QDEL_NULL(avatar)
return ..()
/obj/machinery/computer/mob_battle_terminal/attackby(obj/item/O, mob/user)
+3 -3
View File
@@ -116,7 +116,7 @@
attach_assembly(var/obj/item/device/assembly/A, var/mob/user)
holder = new/obj/item/device/assembly_holder(get_turf(src))
if(holder.attach(A,src,user))
to_chat(user, "\blue You attach \the [A] to \the [src]!")
to_chat(user, "<span class='notice'>You attach \the [A] to \the [src]!</span>")
return 1
return 0
@@ -129,9 +129,9 @@
return
if(istype(W, /obj/item/weapon/screwdriver))
if(toggle_secure())
to_chat(user, "\blue \The [src] is ready!")
to_chat(user, "<span class='notice'>\The [src] is ready!</span>")
else
to_chat(user, "\blue \The [src] can now be attached!")
to_chat(user, "<span class='notice'>\The [src] can now be attached!</span>")
return
..()
return
+4 -4
View File
@@ -140,15 +140,15 @@
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/screwdriver))
if(!a_left || !a_right)
to_chat(user, "\red BUG:Assembly part missing, please report this!")
to_chat(user, "<span class='warning'>BUG:Assembly part missing, please report this!</span>")
return
a_left.toggle_secure()
a_right.toggle_secure()
secured = !secured
if(secured)
to_chat(user, "\blue \The [src] is ready!")
to_chat(user, "<span class='notice'>\The [src] is ready!</span>")
else
to_chat(user, "\blue \The [src] can now be taken apart!")
to_chat(user, "<span class='notice'>\The [src] can now be taken apart!</span>")
update_icon()
return
else
@@ -160,7 +160,7 @@
src.add_fingerprint(user)
if(src.secured)
if(!a_left || !a_right)
to_chat(user, "\red Assembly part missing!")
to_chat(user, "<span class='warning'>Assembly part missing!</span>")
return
if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code
switch(alert("Which side would you like to use?",,"Left","Right"))
+1 -2
View File
@@ -12,8 +12,7 @@
sparks.attach(src)
/obj/item/device/assembly/igniter/Destroy()
qdel(sparks)
sparks = null
QDEL_NULL(sparks)
return ..()
+1 -3
View File
@@ -255,9 +255,7 @@
/obj/effect/beam/i_beam/Destroy()
if(master.first == src)
master.first = null
if(next)
qdel(next)
next = null
QDEL_NULL(next)
if(previous)
previous.next = null
master.last = previous
+2 -2
View File
@@ -19,7 +19,7 @@
describe()
if(timing)
return "\blue The proximity sensor is arming."
return "<span class='notice'>The proximity sensor is arming.</span>"
return "The proximity sensor is [scanning?"armed":"disarmed"]."
activate()
@@ -109,7 +109,7 @@
interact(mob/user as mob)//TODO: Change this to the wires thingy
if(!secured)
user.show_message("\red The [name] is unsecured!")
user.show_message("<span class='warning'>The [name] is unsecured!</span>")
return 0
var/second = time % 60
var/minute = (time - second) / 60
+2 -4
View File
@@ -10,10 +10,8 @@
flags = CONDUCT
/obj/item/assembly/shock_kit/Destroy()
qdel(part1)
part1 = null
qdel(part2)
part2 = null
QDEL_NULL(part1)
QDEL_NULL(part2)
return ..()
/obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+1 -1
View File
@@ -61,7 +61,7 @@
if(!flag1)
dat += {"
<A href='byond://?src=[UID()];send=1'>Send Signal</A><BR>
Reciever is <A href='byond://?src=[UID()];receive=1'>[receiving?"on":"off"]</A><BR>
Receiver is <A href='byond://?src=[UID()];receive=1'>[receiving?"on":"off"]</A><BR>
"}
dat += {"
<B>Frequency/Code</B> for signaler:<BR>
+1 -1
View File
@@ -74,7 +74,7 @@
interact(mob/user as mob)//TODO: Have this use the wires
if(!secured)
user.show_message("\red The [name] is unsecured!")
user.show_message("<span class='warning'>The [name] is unsecured!</span>")
return 0
var/second = time % 60
var/minute = (time - second) / 60
+1 -1
View File
@@ -35,7 +35,7 @@
if(findtext(msg, recorded) && type == recorded_type)
pulse(0)
var/turf/T = get_turf(src) //otherwise it won't work in hand
T.visible_message("[bicon(src)] \red beeps!")
T.visible_message("<span class='warning'>[bicon(src)] beeps!</span>")
activate()
return // previously this toggled listning when not in a holder, that's a little silly. It was only called in attack_self that way.
+5
View File
@@ -18,6 +18,11 @@
template_name = tname
if(template_name)
template = map_templates[template_name]
// Catches the interim-zone of worldstart and roundstart
// I want both the ticker to exist (so mapped-in maploaders don't trip this)
// but also not have started yet (since the zlevel system would handle this on its own otherwise)
if((ticker && ticker.current_state < GAME_STATE_PLAYING))
attempt_init()
/obj/effect/landmark/map_loader/initialize()
..()
@@ -18,6 +18,7 @@
if(water_timer)
deltimer(water_timer)
water_timer = null
return ..()
/obj/effect/waterfall/proc/drip()
var/obj/effect/effect/water/W = new(loc)
@@ -3,9 +3,8 @@
/area/awaymission/centcomAway
name = "XCC-P5831"
icon_state = "away"
requires_power = 0
report_alerts = 0
/area/awaymission/centcomAway/general
name = "XCC-P5831"
music = "music/ambigen3.ogg"
@@ -116,8 +116,7 @@
if(roomtimer)
deltimer(roomtimer)
roomtimer = null
qdel(card)
card = null
QDEL_NULL(card)
return ..()
/obj/machinery/door/unpowered/hotel_door/examine(mob/user)
@@ -220,9 +219,7 @@
vacant_rooms.Cut()
guests.Cut()
if(radio)
qdel(radio)
radio = null
QDEL_NULL(radio)
return ..()
@@ -83,9 +83,9 @@
if(ishuman(user))
var/mob/living/carbon/human/human = user
if(human.species.name != "Shadow")
to_chat(user, "\red Your flesh rapidly mutates!")
to_chat(user, "<span class='warning'>Your flesh rapidly mutates!</span>")
to_chat(user, "<b>You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.</b>")
to_chat(user, "\red Your body reacts violently to light. \green However, it naturally heals in darkness.")
to_chat(user, "<span class='warning'>Your body reacts violently to light.</span> <span class='notice'>However, it naturally heals in darkness.</span>")
to_chat(user, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.")
human.set_species("Shadow")
user.regenerate_icons()
@@ -96,9 +96,9 @@
if(ishuman(user))
var/mob/living/carbon/human/human = user
if(human.species.name != "Shadow")
to_chat(user, "\red Your flesh rapidly mutates!")
to_chat(user, "<span class='warning'>Your flesh rapidly mutates!</span>")
to_chat(user, "<b>You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.</b>")
to_chat(user, "\red Your body reacts violently to light. \green However, it naturally heals in darkness.")
to_chat(user, "<span class='warning'>Your body reacts violently to light.</span> <span class='notice'>However, it naturally heals in darkness.</span>")
to_chat(user, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.")
human.set_species("Shadow")
user.regenerate_icons()
@@ -109,9 +109,9 @@
if(ishuman(user))
var/mob/living/carbon/human/human = user
if(human.species.name != "Shadow")
to_chat(user, "\red Your flesh rapidly mutates!")
to_chat(user, "<span class='warning'>Your flesh rapidly mutates!</span>")
to_chat(user, "<b>You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.</b>")
to_chat(user, "\red Your body reacts violently to light. \green However, it naturally heals in darkness.")
to_chat(user, "<span class='warning'>Your body reacts violently to light.</span> <span class='notice'>However, it naturally heals in darkness.</span>")
to_chat(user, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.")
human.set_species("Shadow")
user.regenerate_icons()
@@ -131,9 +131,9 @@
if(ishuman(user))
var/mob/living/carbon/human/human = user
if(human.species.name != "Shadow")
to_chat(user, "\red Your flesh rapidly mutates!")
to_chat(user, "<span class='warning'>Your flesh rapidly mutates!</span>")
to_chat(user, "<b>You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.</b>")
to_chat(user, "\red Your body reacts violently to light. \green However, it naturally heals in darkness.")
to_chat(user, "<span class='warning'>Your body reacts violently to light.</span> <span class='notice'>However, it naturally heals in darkness.</span>")
to_chat(user, "Aside from your new traits, you are mentally unchanged and retain your prior obligations.")
human.set_species("Shadow")
user.regenerate_icons()
+1
View File
@@ -70,6 +70,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
log_startup_progress(" No away missions found.")
return
/proc/createALLZlevels()
if(awaydestinations.len) //crude, but it saves another var!
return
+1 -2
View File
@@ -111,8 +111,7 @@
init(R)
/turf/unsimulated/floor/upperlevel/Destroy()
qdel(sensor)
sensor = null
QDEL_NULL(sensor)
return ..()
/turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R)
+218 -146
View File
@@ -8,7 +8,7 @@
#define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen?
#define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing.
//I would just like the code ready should it ever need to be used.
#define SUGGESTED_CLIENT_VERSION 510 // only integers (e.g: 510, 511) useful here. Does not properly handle minor versions (e.g: 510.58, 511.848)
#define SUGGESTED_CLIENT_VERSION 511 // only integers (e.g: 510, 511) useful here. Does not properly handle minor versions (e.g: 510.58, 511.848)
/*
When somebody clicks a link in game, this Topic is called first.
@@ -97,150 +97,154 @@
if(config && config.log_hrefs && href_logfile)
to_chat(href_logfile, "<small>[time2text(world.timeofday,"hh:mm")] [src] (usr:[usr])</small> || [hsrc ? "[hsrc] " : ""][href]<br>")
switch(href_list["karmashop"])
if("tab")
karma_tab = text2num(href_list["tab"])
karmashopmenu()
if(href_list["karmashop"])
if(config.disable_karma)
return
if("shop")
if(href_list["KarmaBuy"])
var/karma=verify_karma()
switch(href_list["KarmaBuy"])
if("1")
if(karma <5)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Barber?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Barber",5)
return
if("2")
if(karma <5)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Brig Physician?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Brig Physician",5)
return
if("3")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Nanotrasen Representative?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Nanotrasen Representative",30)
return
if("5")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Blueshield?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Blueshield",30)
return
if("6")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Mechanic?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Mechanic",30)
return
if("7")
if(karma <45)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Magistrate?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Magistrate",45)
return
if("9")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Security Pod Pilot?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Security Pod Pilot",30)
return
if(href_list["KarmaBuy2"])
var/karma=verify_karma()
switch(href_list["KarmaBuy2"])
if("1")
if(karma <15)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Machine People?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Machine",15)
return
if("2")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Kidan?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Kidan",30)
return
if("3")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Grey?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Grey",30)
return
if("4")
if(karma <45)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Vox?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Vox",45)
return
if("5")
if(karma <45)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Slime People?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Slime People",45)
return
if("6")
if(karma <100)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Plasmaman?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Plasmaman",100)
return
if("7")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Drask?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Drask",30)
return
if(href_list["KarmaRefund"])
var/type = href_list["KarmaRefundType"]
var/job = href_list["KarmaRefund"]
var/cost = href_list["KarmaRefundCost"]
karmarefund(type,job,cost)
switch(href_list["karmashop"])
if("tab")
karma_tab = text2num(href_list["tab"])
karmashopmenu()
return
if("shop")
if(href_list["KarmaBuy"])
var/karma=verify_karma()
switch(href_list["KarmaBuy"])
if("1")
if(karma <5)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Barber?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Barber",5)
return
if("2")
if(karma <5)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Brig Physician?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Brig Physician",5)
return
if("3")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Nanotrasen Representative?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Nanotrasen Representative",30)
return
if("5")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Blueshield?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Blueshield",30)
return
if("6")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Mechanic?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Mechanic",30)
return
if("7")
if(karma <45)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Magistrate?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Magistrate",45)
return
if("9")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Security Pod Pilot?", "Confirmation", "No", "Yes") != "Yes")
return
DB_job_unlock("Security Pod Pilot",30)
return
if(href_list["KarmaBuy2"])
var/karma=verify_karma()
switch(href_list["KarmaBuy2"])
if("1")
if(karma <15)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Machine People?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Machine",15)
return
if("2")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Kidan?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Kidan",30)
return
if("3")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Grey?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Grey",30)
return
if("4")
if(karma <45)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Vox?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Vox",45)
return
if("5")
if(karma <45)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Slime People?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Slime People",45)
return
if("6")
if(karma <100)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Plasmaman?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Plasmaman",100)
return
if("7")
if(karma <30)
to_chat(usr, "You do not have enough karma!")
return
else
if(alert("Are you sure you want to unlock Drask?", "Confirmation", "No", "Yes") != "Yes")
return
DB_species_unlock("Drask",30)
return
if(href_list["KarmaRefund"])
var/type = href_list["KarmaRefundType"]
var/job = href_list["KarmaRefund"]
var/cost = href_list["KarmaRefundCost"]
karmarefund(type,job,cost)
return
switch(href_list["_src_"])
if("holder") hsrc = holder
@@ -248,6 +252,73 @@
if("prefs") return prefs.process_link(usr,href_list)
if("vars") return view_var_Topic(href,href_list,hsrc)
//Polls and shit
if(href_list["showpoll"])
handle_player_polling()
return
if(href_list["createpollwindow"])
create_poll_window()
return
if(href_list["createpoll"])
create_poll_function(href_list)
return
if(href_list["pollid"])
var/pollid = href_list["pollid"]
if(istext(pollid))
pollid = text2num(pollid)
if(isnum(pollid))
poll_player(pollid)
return
if(href_list["pollresults"])
var/pollid = href_list["pollresults"]
if(istext(pollid))
pollid = text2num(pollid)
if(isnum(pollid))
poll_results(pollid)
if(href_list["votepollid"] && href_list["votetype"])
if(!can_vote())
return // No voting.
var/pollid = text2num(href_list["votepollid"])
var/votetype = href_list["votetype"]
switch(votetype)
if("OPTION")
var/optionid = text2num(href_list["voteoptionid"])
vote_on_poll(pollid, optionid)
if("TEXT")
var/replytext = href_list["replytext"]
log_text_poll_reply(pollid, replytext)
if("NUMVAL")
var/id_min = text2num(href_list["minid"])
var/id_max = text2num(href_list["maxid"])
if( (id_max - id_min) > 100 ) //Basic exploit prevention
to_chat(usr, "The option ID difference is too big. Please contact administration or the database admin.")
return
for(var/optionid = id_min; optionid <= id_max; optionid++)
if(!isnull(href_list["o[optionid]"])) //Test if this optionid was replied to
var/rating
if(href_list["o[optionid]"] == "abstain")
rating = null
else
rating = text2num(href_list["o[optionid]"])
if(!isnum(rating))
return
vote_on_numval_poll(pollid, optionid, rating)
if("MULTICHOICE")
var/id_min = text2num(href_list["minoptionid"])
var/id_max = text2num(href_list["maxoptionid"])
if( (id_max - id_min) > 100 ) //Basic exploit prevention
to_chat(usr, "The option ID difference is too big. Please contact administration or the database admin.")
return
for(var/optionid = id_min; optionid <= id_max; optionid++)
if(!isnull(href_list["option_[optionid]"])) //Test if this optionid was selected
vote_on_poll(pollid, optionid, 1)
src << browse(null, "window=playerpoll")
handle_player_polling()
switch(href_list["action"])
if("openLink")
@@ -326,7 +397,7 @@
preload_rsc = pick(config.resource_urls)
else preload_rsc = 1 // If config.resource_urls is not set, preload like normal.
to_chat(src, "\red If the title screen is black, resources are still downloading. Please be patient until the title screen appears.")
to_chat(src, "<span class='warning'>If the title screen is black, resources are still downloading. Please be patient until the title screen appears.</span>")
clients += src
@@ -348,7 +419,6 @@
prefs.last_ip = address //these are gonna be used for banning
prefs.last_id = computer_id //these are gonna be used for banning
. = ..() //calls mob.Login()
spawn() // Goonchat does some non-instant checks in start()
chatOutput.start()
@@ -376,6 +446,8 @@
log_client_to_db(tdata)
. = ..() //calls mob.Login()
if(ckey in clientmessages)
for(var/message in clientmessages[ckey])
to_chat(src, message)
@@ -446,7 +518,7 @@
var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM [format_table_name("player")] WHERE ckey = '[ckey]'")
query.Execute()
var/sql_id = 0
player_age = 0 // New players won't have an entry so knowing we have a connection we set this to zero to be updated if their is a record.
player_age = 0 // New players won't have an entry so knowing we have a connection we set this to zero to be updated if there is a record.
while(query.NextRow())
sql_id = query.item[1]
player_age = text2num(query.item[2])
@@ -118,6 +118,11 @@
path = /obj/item/clothing/head/beret/sci
allowed_roles = list("Research Director", "Scientist")
/datum/gear/hat/med_beret
display_name = "medical beret"
path = /obj/item/clothing/head/beret/med
allowed_roles = list("Chief Medical Officer", "Medical Doctor" , "Virologist", "Brig Physician")
/datum/gear/hat/surgicalcap_purple
display_name = "surgical cap, purple"
path = /obj/item/clothing/head/surgery/purple
@@ -50,7 +50,7 @@
/datum/gear/uniform/skirt/job/cmo
display_name = "skirt, cmo"
path = /obj/item/clothing/under/rank/chief_medical_officer
path = /obj/item/clothing/under/rank/chief_medical_officer/skirt
allowed_roles = list("Chief Medical Officer")
/datum/gear/uniform/skirt/job/chem
@@ -175,7 +175,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/job_karma_low = 0
//Keeps track of preferrence for not getting any wanted jobs
var/alternate_option = 0
var/alternate_option = 2
// maps each organ to either null(intact), "cyborg" or "amputated"
// will probably not be able to do this for head and torso ;)
@@ -302,7 +302,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<h2>Hair & Accessories</h2>"
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine", "Kidan")) //Species that have head accessories.
var/headaccessoryname = "Head Accessory: "
if(species == "Unathi")
headaccessoryname = "Horns: "
@@ -788,7 +788,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
return
if(!isnum(desiredLvl))
to_chat(user, "\red UpdateJobPreference - desired level was not a number. Please notify coders!")
to_chat(user, "<span class='warning'>UpdateJobPreference - desired level was not a number. Please notify coders!</span>")
ShowChoices(user)
return
@@ -862,7 +862,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/datum/browser/popup = new(user, "records", "<div align='center'>Character Records</div>", 350, 300)
popup.set_content(HTML)
popup.open(0)
popup.open(0)
/datum/preferences/proc/GetPlayerAltTitle(datum/job/job)
return player_alt_titles.Find(job.title) > 0 \
@@ -1425,7 +1425,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
h_style = new_h_style
if("headaccessory")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with head accessories.
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine", "Kidan")) //Species with head accessories.
var/input = "Choose the colour of your your character's head accessory:"
var/new_head_accessory = input(user, input, "Character Preference", rgb(r_headacc, g_headacc, b_headacc)) as color|null
if(new_head_accessory)
@@ -1434,7 +1434,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
b_headacc = color2B(new_head_accessory)
if("ha_style")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with head accessories.
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine", "Kidan")) //Species with head accessories.
var/list/valid_head_accessory_styles = list()
for(var/head_accessory_style in head_accessory_styles_list)
var/datum/sprite_accessory/H = head_accessory_styles_list[head_accessory_style]
+2 -2
View File
@@ -58,7 +58,7 @@
wearable = 1
if(!wearable)
to_chat(M, "\red Your species cannot wear [src].")
to_chat(M, "<span class='warning'>Your species cannot wear [src].</span>")
return 0
return 1
@@ -250,7 +250,7 @@ BLIND // can't see anything
switch(sensor_mode)
if(0)
for(var/mob/V in viewers(user, 1))
V.show_message("\red [user] disables [src.loc]'s remote sensing equipment.", 1)
V.show_message("<span class='warning'>[user] disables [src.loc]'s remote sensing equipment.</span>", 1)
if(1)
for(var/mob/V in viewers(user, 1))
V.show_message("[user] turns [src.loc]'s remote sensors to binary.", 1)
+1 -1
View File
@@ -378,7 +378,7 @@
emp_act(severity)
if(istype(src.loc, /mob/living/carbon/human))
var/mob/living/carbon/human/M = src.loc
to_chat(M, "\red The Optical Thermal Scanner overloads and blinds you!")
to_chat(M, "<span class='warning'>The Optical Thermal Scanner overloads and blinds you!</span>")
if(M.glasses == src)
M.EyeBlind(3)
M.EyeBlurry(5)
@@ -63,16 +63,14 @@
desc = "Horrendous and awful. It smells like cancer. The fact it has wires attached to it is incidental."
var/obj/item/weapon/stock_parts/cell/cell = null
var/stun_strength = 5
var/stun_cost = 3750
var/stun_cost = 2000
/obj/item/clothing/gloves/color/yellow/stun/New()
..()
update_icon()
/obj/item/clothing/gloves/color/yellow/stun/Destroy()
if(cell)
qdel(cell)
cell = null
QDEL_NULL(cell)
return ..()
/obj/item/clothing/gloves/color/yellow/stun/Touch(atom/A, proximity)
+1 -1
View File
@@ -249,7 +249,7 @@ obj/item/clothing/head/blob
desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights."
icon_state = "erthelmet_med"
//Medical
//Janitorial
/obj/item/clothing/head/helmet/ert/janitor
name = "emergency response team janitor helmet"
desc = "A set of armor worn by janitorial members of the NanoTrasen Emergency Response Team. Has red and white highlights."
+5
View File
@@ -129,6 +129,11 @@
icon_state = "beret_sci"
//Medical
/obj/item/clothing/head/beret/med
name = "medical beret"
desc = "A white beret with a green cross finely threaded into it. It has that sterile smell about it."
icon_state = "beret_med"
/obj/item/clothing/head/surgery
name = "surgical cap"
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs."
-3
View File
@@ -379,9 +379,6 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
actions_types = list(/datum/action/item_action/caw)
/obj/item/clothing/head/griffin/super_hero
flags = BLOCKHAIR|NODROP
/obj/item/clothing/head/griffin/attack_self()
caw()
+12
View File
@@ -106,3 +106,15 @@
desc = "It's baseball hat in corpotate colours."
icon_state = "corpsoft"
item_color = "corp"
/obj/item/clothing/head/soft/solgov
name = "Sol Federation marine cap"
desc = "A soft cap worn by marines of the Sol Federation."
icon_state = "solgovsoft"
item_color = "solgov"
/obj/item/clothing/head/soft/solgov/command
name = "Sol Federation Lieutenant's cap"
desc = "A soft cap worn by marines of the Sol Federation. The insignia signifies the wearer bears the rank of a Lieutenant."
icon_state = "solgovcsoft"
item_color = "solgovc"
+6 -6
View File
@@ -382,26 +382,26 @@
if(istype(W, /obj/item/weapon/screwdriver))
switch(aggressiveness)
if(1)
to_chat(user, "\blue You set the aggressiveness restrictor to the second position.")
to_chat(user, "<span class='notice'>You set the aggressiveness restrictor to the second position.</span>")
aggressiveness = 2
phrase = 7
if(2)
to_chat(user, "\blue You set the aggressiveness restrictor to the third position.")
to_chat(user, "<span class='notice'>You set the aggressiveness restrictor to the third position.</span>")
aggressiveness = 3
phrase = 13
if(3)
to_chat(user, "\blue You set the aggressiveness restrictor to the fourth position.")
to_chat(user, "<span class='notice'>You set the aggressiveness restrictor to the fourth position.</span>")
aggressiveness = 4
phrase = 1
if(4)
to_chat(user, "\blue You set the aggressiveness restrictor to the first position.")
to_chat(user, "<span class='notice'>You set the aggressiveness restrictor to the first position.</span>")
aggressiveness = 1
phrase = 1
if(5)
to_chat(user, "\red You adjust the restrictor but nothing happens, probably because its broken.")
to_chat(user, "<span class='warning'>You adjust the restrictor but nothing happens, probably because its broken.</span>")
else if(istype(W, /obj/item/weapon/wirecutters))
if(aggressiveness != 5)
to_chat(user, "\red You broke it!")
to_chat(user, "<span class='warning'>You broke it!</span>")
aggressiveness = 5
else
..()
@@ -167,8 +167,6 @@
icon_state = "griffinboots"
item_state = "griffinboots"
/obj/item/clothing/shoes/griffin/super_hero
flags = NODROP
/obj/item/clothing/shoes/fluff/noble_boot
name = "noble boots"
+3 -3
View File
@@ -178,7 +178,7 @@ var/global/list/breach_burn_descriptors = list(
if(istype(W,/obj/item/stack/sheet/plastic) || istype(W,/obj/item/stack/sheet/metal))
if(istype(src.loc,/mob/living))
to_chat(user, "\red How do you intend to patch a hardsuit while someone is wearing it?")
to_chat(user, "<span class='warning'>How do you intend to patch a hardsuit while someone is wearing it?</span>")
return
if(!damage || !burn_damage)
@@ -197,7 +197,7 @@ var/global/list/breach_burn_descriptors = list(
else if(istype(W, /obj/item/weapon/weldingtool))
if(istype(src.loc,/mob/living))
to_chat(user, "\red How do you intend to patch a hardsuit while someone is wearing it?")
to_chat(user, "<span class='warning'>How do you intend to patch a hardsuit while someone is wearing it?</span>")
return
if(!damage || ! brute_damage)
@@ -206,7 +206,7 @@ var/global/list/breach_burn_descriptors = list(
var/obj/item/weapon/weldingtool/WT = W
if(!WT.remove_fuel(5))
to_chat(user, "\red You need more welding fuel to repair this suit.")
to_chat(user, "<span class='warning'>You need more welding fuel to repair this suit.</span>")
return
repair_breaches(BRUTE, 3, user)
@@ -76,6 +76,7 @@
desc = "An armored beret commonly used by special operations officers."
icon_state = "beret_officer"
armor = list(melee = 65, bullet = 55, laser = 35, energy = 20, bomb = 30, bio = 30, rad = 30)
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL //idfk
/obj/item/clothing/suit/space/deathsquad/officer
name = "officer jacket"
+2 -4
View File
@@ -165,10 +165,8 @@
M.unEquip(piece)
qdel(piece)
processing_objects -= src
qdel(wires)
wires = null
qdel(spark_system)
spark_system = null
QDEL_NULL(wires)
QDEL_NULL(spark_system)
return ..()
/obj/item/weapon/rig/proc/suit_is_deployed()
+5 -5
View File
@@ -122,7 +122,7 @@
/obj/item/clothing/suit/armor/hos/alt
name = "armored trenchoat"
desc = "A trenchcoat enchanced with a special lightweight kevlar. The epitome of tactical plainclothes."
desc = "A trenchcoat enhanced with a special lightweight kevlar. The epitome of tactical plainclothes."
icon_state = "hostrench_open"
item_state = "hostrench_open"
flags_inv = 0
@@ -142,7 +142,7 @@
/obj/item/clothing/suit/armor/vest/warden
name = "Warden's armored jacket"
desc = "An armoured jacket with silver rank pips and livery."
desc = "An armored jacket with silver rank pips and livery."
icon_state = "warden_jacket"
item_state = "armor"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
@@ -166,7 +166,7 @@
/obj/item/clothing/suit/armor/vest/capcarapace/alt
name = "captain's parade jacket"
desc = "For when an armoured vest isn't fashionable enough."
desc = "For when an armored vest isn't fashionable enough."
icon_state = "capformal"
item_state = "capspacesuit"
@@ -412,13 +412,13 @@
/obj/item/clothing/suit/armor/tdome/red
name = "Red Thunderdome Armor"
desc = "Armor worn by the red Thunderodome team"
desc = "Armor worn by the red Thunderdome team."
icon_state = "tdred"
item_state = "tdred"
/obj/item/clothing/suit/armor/tdome/green
name = "Green Thunderdome Armor"
desc = "Armor worn by the green Thunderodome team"
desc = "Armor worn by the green Thunderdome team."
icon_state = "tdgreen"
item_state = "tdgreen"
+1 -1
View File
@@ -10,7 +10,7 @@
..()
/obj/item/clothing/suit/hooded/Destroy()
qdel(hood)
QDEL_NULL(hood)
return ..()
/obj/item/clothing/suit/hooded/proc/MakeHood()
+2 -6
View File
@@ -457,6 +457,7 @@
icon_state = "black_hoodie"
item_state = "blueshieldcoat"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen)
hoodtype = /obj/item/clothing/head/hood
species_fit = list("Vox")
sprite_sheets = list(
@@ -817,8 +818,6 @@
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite)
actions_types = list(/datum/action/item_action/toggle_wings)
/obj/item/clothing/suit/toggle/owlwings/super_hero
flags = NODROP
/obj/item/clothing/suit/toggle/owlwings/griffinwings
name = "griffon cloak"
@@ -826,9 +825,6 @@
icon_state = "griffin_wings"
item_state = "griffin_wings"
/obj/item/clothing/suit/toggle/owlwings/griffinwings/super_hero
flags = NODROP
/obj/item/clothing/suit/toggle/attack_self()
if(icon_state == initial(icon_state))
icon_state = icon_state + "_t"
@@ -951,4 +947,4 @@
linked_staff.faith += 5
if(linked_staff.faith >= 100) //if this charge puts the staff at or above full, notify the wearer
to_chat(H, "<span class='notice'>Faith renewed; ready to convert new followers.</span>")
to_chat(H, "<span class='notice'>Faith renewed; ready to convert new followers.</span>")
+1 -2
View File
@@ -9,8 +9,7 @@
pockets.max_combined_w_class = 4
/obj/item/clothing/suit/storage/Destroy()
qdel(pockets)
pockets = null
QDEL_NULL(pockets)
return ..()
/obj/item/clothing/suit/storage/attack_hand(mob/user as mob)
@@ -243,7 +243,7 @@
to_chat(user, "Waving around a badge before swiping an ID would be pretty pointless.")
return
if(isliving(user))
user.visible_message("\red [user] displays their NanoTrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.","\red You display your NanoTrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.")
user.visible_message("<span class='warning'>[user] displays their Nanotrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.</span>","<span class='warning'>You display your Nanotrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.</span>")
/obj/item/clothing/accessory/holobadge/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda))
@@ -268,16 +268,16 @@
/obj/item/clothing/accessory/holobadge/emag_act(user as mob)
if(emagged)
to_chat(user, "\red [src] is already cracked.")
to_chat(user, "<span class='warning'>[src] is already cracked.</span>")
return
else
emagged = 1
to_chat(user, "\red You swipe the card and crack the holobadge security checks.")
to_chat(user, "<span class='warning'>You swipe the card and crack the holobadge security checks.</span>")
return
/obj/item/clothing/accessory/holobadge/attack(mob/living/carbon/human/M, mob/living/user)
if(isliving(user))
user.visible_message("\red [user] invades [M]'s personal space, thrusting [src] into their face insistently.","\red You invade [M]'s personal space, thrusting [src] into their face insistently. You are the law.")
user.visible_message("<span class='warning'>[user] invades [M]'s personal space, thrusting [src] into their face insistently.</span>","<span class='warning'>You invade [M]'s personal space, thrusting [src] into their face insistently. You are the law.</span>")
/obj/item/weapon/storage/box/holobadge
name = "holobadge box"
@@ -361,16 +361,19 @@
//However, these 3 don't have corgi versions of their sprites
/obj/item/clothing/accessory/stripedredscarf
name = "striped red scarf"
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
icon_state = "stripedredscarf"
item_color = "stripedredscarf"
/obj/item/clothing/accessory/stripedgreenscarf
name = "striped green scarf"
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
icon_state = "stripedgreenscarf"
item_color = "stripedgreenscarf"
/obj/item/clothing/accessory/stripedbluescarf
name = "striped blue scarf"
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
icon_state = "stripedbluescarf"
item_color = "stripedbluescarf"
@@ -383,9 +386,7 @@
var/obj/item/weapon/card/id/access_id
/obj/item/clothing/accessory/petcollar/Destroy()
if(access_id)
qdel(access_id)
access_id = null
QDEL_NULL(access_id)
processing_objects -= src
return ..()
@@ -57,7 +57,7 @@
to_chat(user, "<span class='warning'>You need an empty hand to draw the [holstered]!</span>")
else
if(user.a_intent == I_HARM)
usr.visible_message("\red [user] draws the [holstered], ready to shoot!</span>", \
usr.visible_message("<span class='warning'>[user] draws the [holstered], ready to shoot!</span></span>", \
"<span class='warning'>You draw the [holstered], ready to shoot!</span>")
else
user.visible_message("<span class='notice'>[user] draws the [holstered], pointing it at the ground.</span>", \
+4 -4
View File
@@ -25,14 +25,14 @@
attackby(obj/item/clothing/under/U as obj, mob/user as mob, params)
..()
if(istype(U, /obj/item/clothing/under/chameleon))
to_chat(user, "\red Nothing happens.")
to_chat(user, "<span class='warning'>Nothing happens.</span>")
return
if(istype(U, /obj/item/clothing/under))
if(src.clothing_choices.Find(U))
to_chat(user, "\red Pattern is already recognised by the suit.")
to_chat(user, "<span class='warning'>Pattern is already recognised by the suit.</span>")
return
src.clothing_choices += U
to_chat(user, "\red Pattern absorbed by the suit.")
to_chat(user, "<span class='warning'>Pattern absorbed by the suit.</span>")
emp_act(severity)
@@ -56,7 +56,7 @@
set src in usr
if(icon_state == "psyche")
to_chat(usr, "\red Your suit is malfunctioning")
to_chat(usr, "<span class='warning'>Your suit is malfunctioning</span>")
return
var/obj/item/clothing/under/A
+22 -7
View File
@@ -67,6 +67,27 @@
item_state = "gy_suit"
item_color = "vice"
/obj/item/clothing/under/solgov
name = "Sol Federation marine uniform"
desc = "A comfortable and durable combat uniform worn by Sol Federation Marine Forces."
icon_state = "solgov"
item_state = "ro_suit"
item_color = "solgov"
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
displays_id = 0
/obj/item/clothing/under/solgov/command
name = "Sol Federation Lieutenant's uniform"
desc = "A comfortable and durable combat uniform worn by Sol Federation Marine Forces. This one has additional insignia on its shoulders."
icon_state = "solgovc"
item_color = "solgovc"
/obj/item/clothing/under/solgov/rep
name = "Sol Federation representative's uniform"
desc = "A formal uniform worn by the diplomatic representatives of the Sol Federation."
icon_state = "solgovr"
item_color = "solgovr"
/obj/item/clothing/under/rank/centcom_officer
desc = "It's a jumpsuit worn by CentComm Officers."
name = "\improper CentComm officer's jumpsuit"
@@ -708,18 +729,12 @@
icon_state = "owl"
item_color = "owl"
/obj/item/clothing/under/owl/super_hero
flags = NODROP
/obj/item/clothing/under/griffin
name = "griffon uniform"
desc = "A soft brown jumpsuit with a white feather collar made of synthetic feathers and a lust for mayhem."
icon_state = "griffin"
item_color = "griffin"
/obj/item/clothing/under/griffin/super_hero
flags = NODROP
/obj/item/clothing/under/noble_clothes
name = "noble clothes"
desc = "They fall just short of majestic."
@@ -740,7 +755,7 @@
..()
/obj/item/clothing/under/contortionist/dropped(mob/living/carbon/human/user)
if(!user.get_int_organ(/obj/item/organ/internal/gland/ventcrawling))
if(!user.get_int_organ(/obj/item/organ/internal/heart/gland/ventcrawling))
user.ventcrawler = 0
..()
+6 -6
View File
@@ -24,22 +24,22 @@
if(istype(user,/mob/living/silicon))
if(!program.ai_allowed)
to_chat(user, "\blue You are forbidden from accessing this program.")
to_chat(user, "<span class='notice'>You are forbidden from accessing this program.</span>")
return 0
else
if(program.human_controls)
if(!ishuman(user))
to_chat(user, "\red Your body can't work the controls!")
to_chat(user, "<span class='warning'>Your body can't work the controls!</span>")
return 0
if(user.restrained())
to_chat(user, "\red You need a free hand!")
to_chat(user, "<span class='warning'>You need a free hand!</span>")
return 0
if(!in_range(src,user))
// telekinesis check
if(ishuman(user) && istype(user.get_active_hand(),/obj/item/tk_grab))
if(program.human_controls)
to_chat(user, "\red It's too complicated to work at a distance!")
to_chat(user, "<span class='warning'>It's too complicated to work at a distance!</span>")
return 0
add_fingerprint(user)
user.set_machine(src)
@@ -115,7 +115,7 @@
switch(errorcode)
if(PROG_CRASH)
if(usr)
to_chat(usr, "\red The program crashed!")
to_chat(usr, "<span class='warning'>The program crashed!</span>")
usr << browse(null,"\ref[src]")
Reset()
@@ -148,7 +148,7 @@
else
if(usr)
to_chat(usr, "\red The program crashed!")
to_chat(usr, "<span class='warning'>The program crashed!</span>")
usr << browse(null,"\ref[src]")
testing("computer/Crash() - unknown error code [errorcode]")
Reset()
+19 -19
View File
@@ -86,7 +86,7 @@
if(istype(P, /obj/item/weapon/wrench))
playsound(src.loc, P.usesound, 50, 1)
if(do_after(user, 20 * P.toolspeed, target = src))
to_chat(user, "\blue You wrench the frame into place.")
to_chat(user, "<span class='notice'>You wrench the frame into place.</span>")
src.anchored = 1
src.state = 1
if(istype(P, /obj/item/weapon/weldingtool))
@@ -97,35 +97,35 @@
playsound(src.loc, WT.usesound, 50, 1)
if(do_after(user, 20 * WT.toolspeed, target = src))
if(!src || !WT.isOn()) return
to_chat(user, "\blue You deconstruct the frame.")
to_chat(user, "<span class='notice'>You deconstruct the frame.</span>")
new /obj/item/stack/sheet/metal( src.loc, 5 )
qdel(src)
if(1)
if(istype(P, /obj/item/weapon/wrench))
playsound(src.loc, P.usesound, 50, 1)
if(do_after(user, 20 * P.toolspeed, target = src))
to_chat(user, "\blue You unfasten the frame.")
to_chat(user, "<span class='notice'>You unfasten the frame.</span>")
src.anchored = 0
src.state = 0
if(istype(P, /obj/item/weapon/circuitboard) && !circuit)
var/obj/item/weapon/circuitboard/B = P
if(B.board_type == "computer")
playsound(src.loc, B.usesound, 50, 1)
to_chat(user, "\blue You place the circuit board inside the frame.")
to_chat(user, "<span class='notice'>You place the circuit board inside the frame.</span>")
src.icon_state = "1"
src.circuit = P
user.drop_item()
P.loc = src
else
to_chat(user, "\red This frame does not accept circuit boards of this type!")
to_chat(user, "<span class='warning'>This frame does not accept circuit boards of this type!</span>")
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(src.loc, P.usesound, 50, 1)
to_chat(user, "\blue You screw the circuit board into place.")
to_chat(user, "<span class='notice'>You screw the circuit board into place.</span>")
src.state = 2
src.icon_state = "2"
if(istype(P, /obj/item/weapon/crowbar) && circuit)
playsound(src.loc, P.usesound, 50, 1)
to_chat(user, "\blue You remove the circuit board.")
to_chat(user, "<span class='notice'>You remove the circuit board.</span>")
src.state = 1
src.icon_state = "0"
circuit.loc = src.loc
@@ -133,7 +133,7 @@
if(2)
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(src.loc, P.usesound, 50, 1)
to_chat(user, "\blue You unfasten the circuit board.")
to_chat(user, "<span class='notice'>You unfasten the circuit board.</span>")
src.state = 1
src.icon_state = "1"
@@ -142,10 +142,10 @@
playsound(src.loc, P.usesound, 50, 1)
if(do_after(10 * P.toolspeed, target = src))
battery.loc = loc
to_chat(user, "\blue You remove [battery].")
to_chat(user, "<span class='notice'>You remove [battery].</span>")
battery = null
else
to_chat(user, "\red There's no battery to remove!")
to_chat(user, "<span class='warning'>There's no battery to remove!</span>")
if(istype(P, /obj/item/weapon/stock_parts/cell))
if(!battery)
@@ -153,9 +153,9 @@
if(do_after(5 * P.toolspeed, target = src))
battery = P
P.loc = src
to_chat(user, "\blue You insert [battery].")
to_chat(user, "<span class='notice'>You insert [battery].</span>")
else
to_chat(user, "\red There's already \an [battery] in [src]!")
to_chat(user, "<span class='warning'>There's already \an [battery] in [src]!</span>")
if(istype(P, /obj/item/stack/cable_coil))
@@ -165,7 +165,7 @@
if(P)
P:amount -= 5
if(!P:amount) qdel(P)
to_chat(user, "\blue You add cables to the frame.")
to_chat(user, "<span class='notice'>You add cables to the frame.</span>")
src.state = 3
src.icon_state = "3"
if(3)
@@ -174,7 +174,7 @@
to_chat(user, "There are parts in the way!")
return
playsound(src.loc, P.usesound, 50, 1)
to_chat(user, "\blue You remove the cables.")
to_chat(user, "<span class='notice'>You remove the cables.</span>")
src.state = 2
src.icon_state = "2"
var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc )
@@ -189,19 +189,19 @@
if(do_after(user, 20 * P.toolspeed, target = src))
if(P)
P:use(2)
to_chat(user, "\blue You put in the glass panel.")
to_chat(user, "<span class='notice'>You put in the glass panel.</span>")
src.state = 4
src.icon_state = "4"
if(4)
if(istype(P, /obj/item/weapon/crowbar))
playsound(src.loc, P.usesound, 50, 1)
to_chat(user, "\blue You remove the glass panel.")
to_chat(user, "<span class='notice'>You remove the glass panel.</span>")
src.state = 3
src.icon_state = "3"
new /obj/item/stack/sheet/glass( src.loc, 2 )
if(istype(P, /obj/item/weapon/screwdriver))
playsound(src.loc, P.usesound, 50, 1)
to_chat(user, "\blue You connect the monitor.")
to_chat(user, "<span class='notice'>You connect the monitor.</span>")
var/obj/machinery/computer3/B = new src.circuit.build_path ( src.loc, built=1 )
/*if(circuit.powernet) B:powernet = circuit.powernet
if(circuit.id) B:id = circuit.id
@@ -224,7 +224,7 @@
*/
/obj/structure/computer3frame/proc/remove_peripheral(var/obj/item/I = null)
if(!components || !components.len)
to_chat(usr, "\red There are no components in [src] to take out!")
to_chat(usr, "<span class='warning'>There are no components in [src] to take out!</span>")
return 0
if(!I)
I = input(usr, "Remove which component?","Remove component", null) as null|obj in components
@@ -263,7 +263,7 @@
else
warning("Erronous component in computerframe/remove_peripheral: [I]")
I.loc = loc
to_chat(usr, "\blue You remove [I]")
to_chat(usr, "<span class='notice'>You remove [I]</span>")
return 1
return 0
/obj/structure/computer3frame/proc/insert_peripheral(var/obj/item/I)
+1 -1
View File
@@ -77,7 +77,7 @@
set src in view(1)
if(usr.stat || usr.restrained() || usr.lying || !istype(usr, /mob/living))
to_chat(usr, "\red You can't do that.")
to_chat(usr, "<span class='warning'>You can't do that.</span>")
return
if(!Adjacent(usr))
@@ -202,7 +202,7 @@
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
return
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating projetion apparatus.")
M.show_message("<b>ERROR. Recalibrating projetion apparatus.</b>")
last_change = world.time
return
@@ -97,14 +97,14 @@
var/removing_zone = href_list["priority_clear"]
for(var/zone in priority_alarms)
if(ckey(zone) == removing_zone)
to_chat(usr, "\green Priority Alert for area [zone] cleared.")
to_chat(usr, "<span class=notice'>Priority Alert for area [zone] cleared.</span>")
priority_alarms -= zone
if("minor_clear" in href_list)
var/removing_zone = href_list["minor_clear"]
for(var/zone in minor_alarms)
if(ckey(zone) == removing_zone)
to_chat(usr, "\green Minor Alert for area [zone] cleared.")
to_chat(usr, "<span class=notice'>Minor Alert for area [zone] cleared.</span>")
minor_alarms -= zone
computer.updateUsrDialog()
+2 -2
View File
@@ -17,9 +17,9 @@
opened = !opened
if(opened)
to_chat(usr, "\blue The access panel is now open.")
to_chat(usr, "<span class='notice'>The access panel is now open.</span>")
else
to_chat(usr, "\blue The access panel is now closed.")
to_chat(usr, "<span class='notice'>The access panel is now closed.</span>")
return
+1 -1
View File
@@ -94,7 +94,7 @@
if( istype(I) && I.imp_in)
var/mob/living/carbon/R = I.imp_in
log_say("PrisonComputer3 message: [key_name(usr)]->[key_name(R)] : [warning]")
to_chat(R, "\green You hear a voice in your head saying: '[warning]'")
to_chat(R, "<span class=notice'>You hear a voice in your head saying: '[warning]'</span>")
interact()
return
+9 -9
View File
@@ -118,14 +118,14 @@
if(istype(I))
if(src.check_access(I))
if(!status)
message_admins("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!")
log_game("\blue [key_name(usr)] has initiated the global cyborg killswitch!")
message_admins("<span class='notice'>[key_name_admin(usr)] has initiated the global cyborg killswitch!</span>")
log_game("<span class='notice'>[key_name(usr)] has initiated the global cyborg killswitch!</span>")
src.status = 1
src.start_sequence()
src.temp = null
else
to_chat(usr, "\red Access Denied.")
to_chat(usr, "<span class='warning'>Access Denied.</span>")
if("stop" in href_list)
src.temp = {"
@@ -163,11 +163,11 @@
R.ResetSecurityCodes()
else
message_admins("\blue [key_name_admin(usr)] detonated [R.name]!")
log_game("\blue [key_name_admin(usr)] detonated [R.name]!")
message_admins("<span class='notice'>[key_name_admin(usr)] detonated [R.name]!</span>")
log_game("<span class='notice'>[key_name_admin(usr)] detonated [R.name]!</span>")
R.self_destruct()
else
to_chat(usr, "\red Access Denied.")
to_chat(usr, "<span class='warning'>Access Denied.</span>")
if("stopbot" in href_list)
if(computer.allowed(usr))
@@ -176,7 +176,7 @@
var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
if(choice == "Confirm")
if(R && istype(R))
message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
message_admins("<span class='notice'>[key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!</span>")
log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
R.canmove = !R.canmove
if(R.lockcharge)
@@ -189,7 +189,7 @@
to_chat(R, "You have been locked down!")
else
to_chat(usr, "\red Access Denied.")
to_chat(usr, "<span class='warning'>Access Denied.</span>")
if("magbot" in href_list)
if(computer.allowed(usr))
@@ -198,7 +198,7 @@
var/choice = input("Are you certain you wish to hack [R.name]?") in list("Confirm", "Abort")
if(choice == "Confirm")
if(R && istype(R))
// message_admins("\blue [key_name_admin(usr)] emagged [R.name] using robotic console!")
// message_admins("<span class='notice'>[key_name_admin(usr)] emagged [R.name] using robotic console!</span>")
log_game("[key_name(usr)] emagged [R.name] using robotic console!")
R.emagged = 1
if(R.mind.special_role)
+3 -3
View File
@@ -35,7 +35,7 @@
set src in view(1)
if(usr.stat || usr.restrained() || usr.lying || !istype(usr, /mob/living))
to_chat(usr, "\red You can't do that.")
to_chat(usr, "<span class='warning'>You can't do that.</span>")
return
if(!Adjacent(usr))
@@ -67,7 +67,7 @@
stored_computer.manipulating = 0
qdel(src)
else
to_chat(usr, "\red You are already opening the computer!")
to_chat(usr, "<span class='warning'>You are already opening the computer!</span>")
AltClick()
@@ -136,7 +136,7 @@
set src in view(1)
if(usr.stat || usr.restrained() || usr.lying || !istype(usr, /mob/living))
to_chat(usr, "\red You can't do that.")
to_chat(usr, "<span class='warning'>You can't do that.</span>")
return
if(!Adjacent(usr))
+116 -12
View File
@@ -129,6 +129,12 @@
icon_state = "zeldacrowbar"
item_state = "crowbar"
/obj/item/clothing/glasses/monocle/fluff/trubus //Trubus: Wolf O'Shaw
name = "Gold Thermal Eyepatch"
desc = "Wolf's non-functional thermal eyepatch."
icon = 'icons/obj/custom_items.dmi'
icon_state = "wolf_eyepatch"
/obj/item/clothing/glasses/meson/fluff/book_berner_1 // Adrkiller59: Adam Cooper
name = "bespectacled mesonic surveyors"
desc = "One of the older meson scanner models retrofitted to perform like its modern counterparts."
@@ -140,6 +146,28 @@
desc = "A weathered Vox thermonocle, doesn't seem to work anymore."
icon_state = "thermoncle"
/obj/item/device/fluff/rapid_wheelchair_kit //Rapidvalj: Hakikarahiti
name = "wheelchair conversion kit"
desc = "An assorted set of exchangable parts for a wheelchair."
icon_state = "modkit"
/obj/item/device/fluff/rapid_wheelchair_kit/afterattack(atom/target, mob/user, proximity)
if(!proximity || !ishuman(user) || user.incapacitated())
return
if(istype(target, /obj/structure/stool/bed/chair/wheelchair) && !istype(target, /obj/structure/stool/bed/chair/wheelchair/bike))
to_chat(user, "<span class='notice'>You modify the appearance of [target].</span>")
var/obj/structure/stool/bed/chair/wheelchair/chair = target
chair.icon = 'icons/obj/custom_items.dmi'
chair.icon_state = "vox_wheelchair"
chair.name = "vox wheelchair"
chair.desc = "A luxurious Vox Wheelchair, weathered from use."
chair.handle_rotation()
qdel(src)
return
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
/obj/item/weapon/lighter/zippo/fluff/purple // GodOfOreos: Jason Conrad
name = "purple engraved zippo"
desc = "All craftsspacemanship is of the highest quality. It is encrusted with refined plasma sheets. On the item is an image of a dwarf and the words 'Strike the Earth!' etched onto the side."
@@ -235,6 +263,32 @@
to_chat(target, "<span class='notice'>You comb your tail with the [src].</span>")
used = 1
/obj/item/device/fluff/desolate_baton_kit //DesolateG: Michael steampunk_witch
name = "stun baton converstion kit"
desc = "Some sci-fi looking parts for a stun baton."
icon = 'icons/obj/custom_items.dmi'
icon_state = "scifikit"
w_class = 2
/obj/item/device/fluff/desolate_baton_kit/afterattack(atom/target, mob/user, proximity)
if(!proximity || !ishuman(user) || user.incapacitated())
return
if(istype(target, /obj/item/weapon/melee/baton) && !istype(target, /obj/item/weapon/melee/baton/cattleprod))
to_chat(user, "<span class='notice'>You modify the appearance of [target].</span>")
var/obj/item/weapon/melee/baton/the_baton = target
the_baton.base_icon = "desolate_baton"
the_baton.item_state = "desolate_baton"
the_baton.icon = 'icons/obj/custom_items.dmi'
the_baton.lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi'
the_baton.righthand_file = 'icons/mob/inhands/fluff_righthand.dmi'
the_baton.update_icon()
user.update_icons()
qdel(src)
return
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
/obj/item/device/fluff/cardgage_helmet_kit //captain cardgage: Richard Ulery
name = "welding helmet modkit"
desc = "Some spraypaint and a stencil, perfect for painting flames onto a welding helmet!"
@@ -244,14 +298,14 @@
throwforce = 0
/obj/item/device/fluff/cardgage_helmet_kit/afterattack(atom/target, mob/user, proximity)
if(!proximity || !ishuman(user) || user.lying)
if(!proximity || !ishuman(user) || user.incapacitated())
return
if(istype(target, /obj/item/clothing/head/welding))
to_chat(user, "<span class='notice'>You modify the appearance of [target].</span>")
var/obj/item/clothing/head/welding/flamedecal/P = new(get_turf(target))
transfer_fingerprints_to(P)
target.transfer_fingerprints_to(P)
qdel(target)
qdel(src)
return
@@ -269,7 +323,7 @@
throwforce = 0
/obj/item/device/fluff/shadey_plasman_modkit/afterattack(atom/target, mob/user, proximity)
if(!proximity || !ishuman(user) || user.lying)
if(!proximity || !ishuman(user) || user.incapacitated())
return
var/mob/living/carbon/human/H = user
@@ -326,6 +380,7 @@
/obj/item/clothing/glasses/hud/security/sunglasses/fluff/voxxyhud //LP Spartan: Kaskreyarawkta
name = "VoxxyHUD"
desc = "A worn down visor from a vox raider's gear, crudely ripped from its helmet and linked into the security systems of the station. The word 'Kask' is scratched into the side."
icon = 'icons/obj/custom_items.dmi'
icon_state = "hud-spartan"
//////////// Hats ////////////
@@ -341,13 +396,12 @@
desc = "Fuzzy, and also stained with blood."
icon = 'icons/obj/custom_items.dmi'
icon_state = "polarbearpelt"
item_state = "polarbearpelt"
/obj/item/clothing/head/fluff/sparkyninja_beret // Sparkyninja: Neil Wilkinson
name = "royal marines commando beret"
desc = "Dark Green beret with an old insignia on it."
icon = 'icons/obj/custom_items.dmi'
icon_state = "sparkyninja_beret"
item_state = "sparkyninja_beret"
/obj/item/clothing/head/beret/fluff/sigholt //sigholtstarsong: Sigholt Starsong
name = "Lieutenant Starsong's beret"
@@ -378,25 +432,29 @@
/obj/item/clothing/head/beret/fluff/linda //Epic_Charger: Linda Clark
name = "Green beret"
desc = "A beret, an artist's favorite headwear. This one has two holes cut on the edges."
icon = 'icons/obj/custom_items.dmi'
icon_state = "linda_beret"
/obj/item/clothing/head/fluff/kaki //Rapidvalj: Kakicharakiti
name = "sleek fancy leader hat"
desc = "A uniquely colored vox leader hat. Has some signs of wear."
icon = 'icons/obj/custom_items.dmi'
icon_state = "kakicharakiti"
//////////// Suits ////////////
/obj/item/clothing/suit/fluff
icon = 'icons/obj/custom_items.dmi'
actions_types = list()
ignore_suitadjust = 1
adjust_flavour = null
species_fit = null
sprite_sheets = null
/obj/item/clothing/suit/fluff/dusty_jacket //ComputerlessCitizen: Screech
name = "Dusty Jacket"
desc = "A worn leather jacket. Some burn holes have been patched."
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
icon = 'icons/obj/custom_items.dmi'
icon_state = "dusty_jacket"
ignore_suitadjust = 1
actions_types = list()
adjust_flavour = null
species_fit = null
sprite_sheets = null
/obj/item/clothing/suit/storage/labcoat/fluff/aeneas_rinil //Socialsystem: Lynn Fea
name = "Robotics labcoat"
@@ -421,6 +479,7 @@
/obj/item/clothing/suit/fluff/kluys // Kluys: Cripty Pandaen
name = "Nano Fibre Jacket"
desc = "A Black Suit made out of nanofibre. The newest of cyberpunk fashion using hightech liquid to solid materials."
icon = 'icons/obj/custom_items.dmi'
icon_state = "Kluysfluff1"
item_state = "Kluysfluff1"
blood_overlay_type = "coat"
@@ -467,15 +526,29 @@
/obj/item/clothing/suit/hooded/hoodie/fluff/linda // Epic_Charger: Linda Clark
name = "Green Nanotrasen Hoodie"
desc = "A green hoodie with the Nanotrasen logo on the back. It looks weathered."
icon = 'icons/obj/custom_items.dmi'
icon_state = "linda_hoodie"
hoodtype = /obj/item/clothing/head/hood/fluff/linda
/obj/item/clothing/head/hood/fluff/linda //Epic_Charger: Linda Clark
icon_state = "greenhood"
/obj/item/clothing/suit/hooded/fluff/bone //Doru7: Jack Bone
name = "skeleton suit"
desc = "A spooky full-body suit! This one doesn't glow in the dark."
body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
icon = 'icons/obj/custom_items.dmi'
icon_state = "skeleton_suit"
hoodtype = /obj/item/clothing/head/hood/fluff/skeleton
/obj/item/clothing/head/hood/fluff/skeleton
icon = 'icons/obj/custom_items.dmi'
icon_state = "skeleton_hood"
/obj/item/clothing/suit/armor/shodanscoat // RazekPraxis: SHODAN
name = "SHODAN's Captain's Coat"
desc = "A black coat with gold trim and an old US Chevron printed on the back. Edgy."
icon = 'icons/obj/custom_items.dmi'
icon_state = "shodancoat"
//////////// Uniforms ////////////
@@ -496,6 +569,15 @@
item_color = "elishirt"
displays_id = 0
/obj/item/clothing/under/fluff/jay_turtleneck // Jayfeather: Jay Wingler
name = "Mar's Pattern Custom Turtleneck"
desc = "It seems to be lightly dusted in orange fuzz, and damp with the smell of anti-freeze. It has a strange symbol in the middle."
icon = 'icons/obj/custom_items.dmi'
icon_state = "jaywingler"
item_state = "jaywingler"
item_color = "jaywingler"
displays_id = 0
/obj/item/clothing/under/psysuit/fluff/isaca_sirius_1 // Xilia: Isaca Sirius
name = "Isaca's suit"
desc = "Black, comfortable and nicely fitting suit. Made not to hinder the wearer in any way. Made of some exotic fabric. And some strange glowing jewel at the waist. Name labels says; Property of Isaca Sirius; The Seeder."
@@ -542,6 +624,9 @@
/obj/item/clothing/under/fluff/aegis //PlagueWalker: A.E.G.I.S.
name = "gilded waistcoat"
desc = "This black, gold-trimmed, rather expensive-looking uniform laced with fine materials appears comfortable despite its stiffness."
icon = 'icons/obj/custom_items.dmi'
lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi'
righthand_file = 'icons/mob/inhands/fluff_righthand.dmi'
icon_state = "aegisuniform"
item_state = "aegisuniform"
item_color = "aegisuniform"
@@ -552,9 +637,9 @@
/obj/item/clothing/mask/bandana/fluff/dar //sasanek12: Dar'Konr
name = "camo bandana"
desc = "It's a worn-out bandana in camo paint"
icon = 'icons/obj/custom_items.dmi'
icon_state = "bandcamo"
/obj/item/clothing/mask/gas/sechailer/fluff/spartan //LP Spartan: Kaskreyarawkta
name = "minimal gasmask"
desc = "Designed to cover as little of face as possible while still being a functional gasmask."
@@ -696,6 +781,7 @@
/obj/item/weapon/storage/backpack/fluff/krich_back //lizardzsi: Krichahka
name = "Voxcaster"
desc = "Battered, Sol-made military radio backpack that had its speakers fried from playing Vox opera. The words 'Swift-Talon' are crudely scratched onto its side."
icon = 'icons/obj/custom_items.dmi'
icon_state = "voxcaster_fluff"
/obj/item/clothing/head/wizard/fake/fluff/dreamy //phantasmicdream : Dreamy Rockwall
@@ -726,3 +812,21 @@
icon_state = options[choice]
to_chat(user, "Your strange witch hat has now shapeshifted into it's [choice] form!")
return 1
/obj/item/weapon/reagent_containers/food/drinks/bottle/fluff/moonshine //nethiafins : Serhij Zozulia
name = "Cloudy Bottle"
desc = "The contents of this bottle are vile. You should only drink it when you hit rock bottom."
icon = 'icons/obj/custom_items.dmi'
icon_state = "questionable_liquid"
item_state = "questionable_liquid"
amount_per_transfer_from_this = 5
list_reagents = list("moonshine" = 100)
/obj/item/weapon/storage/box/fluff/moonshine_kit //nethiafins : Serhij Zozulia
name = "Moonshine Serving box"
/obj/item/weapon/storage/box/fluff/moonshine_kit/New()
..()
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass(src)
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass(src)
new /obj/item/weapon/reagent_containers/food/drinks/bottle/fluff/moonshine(src)
-2
View File
@@ -242,9 +242,7 @@ log transactions
T.date = current_date_string
T.time = worldtime2text()
authenticated_account.transaction_log.Add(T)
to_chat(usr, "[bicon(src)]<span class='notice'>Access granted. Welcome user '[authenticated_account.owner_name].'</span>")
previous_account_number = tried_account_num
if("withdrawal")
var/amount = max(text2num(href_list["funds_amount"]),0)
+12 -12
View File
@@ -403,7 +403,7 @@ var/const/POS_HEADER = {"<html>
src.attack_hand(usr)
return
if(usr != logged_in)
to_chat(usr, "\red [logged_in.name] is already logged in. You cannot use this machine until they log out.")
to_chat(usr, "<span class='warning'>[logged_in.name] is already logged in. You cannot use this machine until they log out.</span>")
return
if("act" in href_list)
switch(href_list["act"])
@@ -431,7 +431,7 @@ var/const/POS_HEADER = {"<html>
for(var/list/line in splittext(href_list["csv"],"\n"))
var/list/cells = splittext(line,",")
if(cells.len<2)
to_chat(usr, "\red The CSV must have at least two columns: Product Name, followed by Price (as a number).")
to_chat(usr, "<span class='warning'>The CSV must have at least two columns: Product Name, followed by Price (as a number).</span>")
src.attack_hand(usr)
return
var/line_item/LI = new
@@ -445,7 +445,7 @@ var/const/POS_HEADER = {"<html>
if("Save Settings")
var/datum/money_account/new_linked_account = get_money_account(text2num(href_list["payableto"]),z)
if(!new_linked_account)
to_chat(usr, "\red Unable to link new account.")
to_chat(usr, "<span class='warning'>Unable to link new account.</span>")
else
linked_account = new_linked_account
screen=POS_SCREEN_SETTINGS
@@ -482,7 +482,7 @@ var/const/POS_HEADER = {"<html>
if(istype(A,/obj/item/weapon/card/id))
var/obj/item/weapon/card/id/I = A
if(!logged_in)
user.visible_message("\blue The machine beeps, and logs you in","You hear a beep.")
user.visible_message("<span class='notice'>The machine beeps, and logs you in</span>","You hear a beep.")
logged_in = user
screen=POS_SCREEN_ORDER
update_icon()
@@ -490,23 +490,23 @@ var/const/POS_HEADER = {"<html>
return
else
if(!linked_account)
visible_message("\red The machine buzzes, and flashes \"NO LINKED ACCOUNT\" on the screen.","You hear a buzz.")
visible_message("<span class='warning'>The machine buzzes, and flashes \"NO LINKED ACCOUNT\" on the screen.</span>","You hear a buzz.")
flick(src,"pos-error")
return
if(screen!=POS_SCREEN_FINALIZE)
visible_message("\blue The machine buzzes.","\red You hear a buzz.")
visible_message("<span class='notice'>The machine buzzes.</span>","<span class='warning'>You hear a buzz.</span>")
flick(src,"pos-error")
return
var/datum/money_account/acct = get_card_account(I)
if(!acct)
visible_message("\red The machine buzzes, and flashes \"NO ACCOUNT\" on the screen.","You hear a buzz.")
visible_message("<span class='warning'>The machine buzzes, and flashes \"NO ACCOUNT\" on the screen.</span>","You hear a buzz.")
flick(src,"pos-error")
return
if(credits_needed > acct.money)
visible_message("\red The machine buzzes, and flashes \"NOT ENOUGH FUNDS\" on the screen.","You hear a buzz.")
visible_message("<span class='warning'>The machine buzzes, and flashes \"NOT ENOUGH FUNDS\" on the screen.</span>","You hear a buzz.")
flick(src,"pos-error")
return
visible_message("\blue The machine beeps, and begins printing a receipt","You hear a beep.")
visible_message("<span class='notice'>The machine beeps, and begins printing a receipt</span>","You hear a beep.")
PrintReceipt()
NewOrder()
acct.charge(credits_needed,linked_account,"Purchase at POS #[id].")
@@ -514,17 +514,17 @@ var/const/POS_HEADER = {"<html>
screen=POS_SCREEN_ORDER
else if(istype(A, /obj/item/stack/spacecash))
if(!linked_account)
visible_message("\red The machine buzzes, and flashes \"NO LINKED ACCOUNT\" on the screen.","You hear a buzz.")
visible_message("<span class='warning'>The machine buzzes, and flashes \"NO LINKED ACCOUNT\" on the screen.</span>","You hear a buzz.")
flick(src,"pos-error")
return
if(!logged_in || screen!=POS_SCREEN_FINALIZE)
visible_message("\blue The machine buzzes.","\red You hear a buzz.")
visible_message("<span class='notice'>The machine buzzes.</span>","<span class='warning'>You hear a buzz.</span>")
flick(src,"pos-error")
return
var/obj/item/stack/spacecash/C = A
credits_held += C.amount
if(credits_held >= credits_needed)
visible_message("\blue The machine beeps, and begins printing a receipt","You hear a beep and the sound of paper being shredded.")
visible_message("<span class='notice'>The machine beeps, and begins printing a receipt</span>","You hear a beep and the sound of paper being shredded.")
PrintReceipt()
NewOrder()
credits_held -= credits_needed
+2 -2
View File
@@ -1,7 +1,7 @@
/datum/event/blob
announceWhen = 60
endWhen = 120
var/obj/effect/blob/core/Blob
var/obj/structure/blob/core/Blob
/datum/event/blob/announce()
event_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
@@ -14,7 +14,7 @@
var/mob/C
if(candidates.len)
C = pick(candidates)
Blob = new /obj/effect/blob/core(T, new_overmind=C.client)
Blob = new /obj/structure/blob/core(T, new_overmind=C.client)
for(var/i in 1 to 5)
Blob.process()
else
@@ -29,6 +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)]")
/datum/event/brand_intelligence/tick()
if(!originMachine || !isnull(originMachine.gcDestroyed) || originMachine.shut_up || originMachine.wires.IsAllCut()) //if the original vending machine is missing or has it's voice switch flipped
+2 -2
View File
@@ -133,7 +133,7 @@ var/global/Holiday = null
world.update_status()
Holiday_Game_Start()
message_admins("\blue ADMIN: Event: [key_name_admin(src)] force-set Holiday to \"[Holiday]\"")
message_admins("<span class='notice'>ADMIN: Event: [key_name_admin(src)] force-set Holiday to \</span>"[Holiday]\"")
log_admin("[key_name(src)] force-set Holiday to \"[Holiday]\"")
@@ -174,7 +174,7 @@ var/global/Holiday = null
if(!is_station_level(S.z)) continue
containers += S
message_admins("\blue DEBUG: Event: Egg spawned at [Egg.loc] ([Egg.x],[Egg.y],[Egg.z])")*/
message_admins("<span class='notice'>DEBUG: Event: Egg spawned at [Egg.loc] ([Egg.x],[Egg.y],[Egg.z])</span>")*/
if("End of the World")
if(prob(eventchance)) GameOver()
+2 -2
View File
@@ -77,7 +77,7 @@
max_number = 6
vermstring = "lizards"
if(VERM_SPIDERS)
spawn_types = list(/obj/effect/spider/spiderling)
spawn_types = list(/obj/structure/spider/spiderling)
max_number = 3
vermstring = "spiders"
@@ -89,7 +89,7 @@
num--
if(vermin == VERM_SPIDERS)
var/obj/effect/spider/spiderling/S = new(T)
var/obj/structure/spider/spiderling/S = new(T)
S.amount_grown = -1
else
var/spawn_type = pick(spawn_types)
+94 -97
View File
@@ -6,7 +6,7 @@
/datum/event/spacevine/start()
var/list/turfs = list() //list of all the empty floor turfs in the hallway areas
var/obj/effect/spacevine/SV = new()
var/obj/structure/spacevine/SV = new()
for(var/area/hallway/A in world)
for(var/turf/F in A)
@@ -17,7 +17,7 @@
if(turfs.len) //Pick a turf to spawn at if we can
var/turf/T = pick(turfs)
var/obj/effect/spacevine_controller/SC = new /obj/effect/spacevine_controller(T, , rand(30,70),rand(5,2)) //spawn a controller at turf
var/obj/structure/spacevine_controller/SC = new /obj/structure/spacevine_controller(T, , rand(30,70),rand(5,2)) //spawn a controller at turf
// Make the event start fun - give the vine a random hostile mutation
if(SC.vines.len)
@@ -40,11 +40,11 @@
// For stuff that isn't fun as a random-event vine
var/nofun = FALSE
/datum/spacevine_mutation/proc/add_mutation_to_vinepiece(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/add_mutation_to_vinepiece(obj/structure/spacevine/holder)
holder.mutations |= src
holder.color = hue
/datum/spacevine_mutation/proc/remove_mutation_from_vinepiece(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/remove_mutation_from_vinepiece(obj/structure/spacevine/holder)
holder.mutations -= src
var/datum/spacevine_mutation/oldmutation
if(holder.mutations.len)
@@ -53,46 +53,46 @@
else
holder.color = ""
/datum/spacevine_mutation/proc/process_mutation(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/process_mutation(obj/structure/spacevine/holder)
return
/datum/spacevine_mutation/proc/process_temperature(obj/effect/spacevine/holder, temp, volume)
/datum/spacevine_mutation/proc/process_temperature(obj/structure/spacevine/holder, temp, volume)
return
/datum/spacevine_mutation/proc/on_birth(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/on_birth(obj/structure/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_grow(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/on_grow(obj/structure/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_death(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/on_death(obj/structure/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_deletion(obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/on_deletion(obj/structure/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/proc/on_hit(obj/structure/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
. = expected_damage
/datum/spacevine_mutation/proc/on_cross(obj/effect/spacevine/holder, mob/crosser)
/datum/spacevine_mutation/proc/on_cross(obj/structure/spacevine/holder, mob/crosser)
return
/datum/spacevine_mutation/proc/on_chem(obj/effect/spacevine/holder, datum/reagent/R)
/datum/spacevine_mutation/proc/on_chem(obj/structure/spacevine/holder, datum/reagent/R)
return
/datum/spacevine_mutation/proc/on_eat(obj/effect/spacevine/holder, mob/living/eater)
/datum/spacevine_mutation/proc/on_eat(obj/structure/spacevine/holder, mob/living/eater)
return
/datum/spacevine_mutation/proc/on_spread(obj/effect/spacevine/holder, turf/target)
/datum/spacevine_mutation/proc/on_spread(obj/structure/spacevine/holder, turf/target)
return
/datum/spacevine_mutation/proc/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
/datum/spacevine_mutation/proc/on_buckle(obj/structure/spacevine/holder, mob/living/buckled)
return
/datum/spacevine_mutation/proc/on_explosion(severity, obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/on_explosion(severity, obj/structure/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_search(severity, obj/effect/spacevine/holder)
/datum/spacevine_mutation/proc/on_search(severity, obj/structure/spacevine/holder)
return
@@ -140,7 +140,7 @@
/turf/simulated/floor/vines/ChangeTurf(turf/open/floor/T)
. = ..()
//Do this *after* the turf has changed as qdel in spacevines will call changeturf again if it hasn't
for(var/obj/effect/spacevine/SV in src)
for(var/obj/structure/spacevine/SV in src)
SV.wither()
/datum/spacevine_mutation/space_covering
@@ -156,22 +156,22 @@
/turf/space/transit
))
/datum/spacevine_mutation/space_covering/on_grow(obj/effect/spacevine/holder)
/datum/spacevine_mutation/space_covering/on_grow(obj/structure/spacevine/holder)
process_mutation(holder)
/datum/spacevine_mutation/space_covering/on_spread(obj/effect/spacevine/holder, turf/target)
if(target.type == /turf/space && !locate(/obj/effect/spacevine) in target)
/datum/spacevine_mutation/space_covering/on_spread(obj/structure/spacevine/holder, turf/target)
if(target.type == /turf/space && !locate(/obj/structure/spacevine) in target)
holder.master.spawn_spacevine_piece(target, holder)
. = TRUE
/datum/spacevine_mutation/space_covering/process_mutation(obj/effect/spacevine/holder)
/datum/spacevine_mutation/space_covering/process_mutation(obj/structure/spacevine/holder)
var/turf/T = get_turf(holder)
if(is_type_in_typecache(T, coverable_turfs))
var/currtype = T.type
T.ChangeTurf(/turf/simulated/floor/vines)
T.baseturf = currtype
/datum/spacevine_mutation/space_covering/on_deletion(obj/effect/spacevine/holder)
/datum/spacevine_mutation/space_covering/on_deletion(obj/structure/spacevine/holder)
var/turf/T = get_turf(holder)
if(istype(T, /turf/simulated/floor/vines))
T.ChangeTurf(T.baseturf)
@@ -181,8 +181,8 @@
hue = "#3333ff"
quality = MINOR_NEGATIVE
/datum/spacevine_mutation/bluespace/on_spread(obj/effect/spacevine/holder, turf/target)
if(holder.energy > 1 && !locate(/obj/effect/spacevine) in target)
/datum/spacevine_mutation/bluespace/on_spread(obj/structure/spacevine/holder, turf/target)
if(holder.energy > 1 && !locate(/obj/structure/spacevine) in target)
// Lose bluespace upon piercing a single tile, and drop it from our own mutations too
// Representing a loss in "high potential"
// also conveniently prevents this from spreading too crazily
@@ -197,7 +197,7 @@
quality = POSITIVE
severity = 4
/datum/spacevine_mutation/light/on_grow(obj/effect/spacevine/holder)
/datum/spacevine_mutation/light/on_grow(obj/structure/spacevine/holder)
if(holder.energy)
holder.set_light(severity)
@@ -207,14 +207,14 @@
severity = 10
quality = NEGATIVE
/datum/spacevine_mutation/toxicity/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
/datum/spacevine_mutation/toxicity/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
if(issilicon(crosser))
return
if(prob(severity) && istype(crosser) && !isvineimmune(crosser))
to_chat(crosser, "<span class='alert'>You accidently touch the vine and feel a strange sensation.</span>")
crosser.adjustToxLoss(5)
/datum/spacevine_mutation/toxicity/on_eat(obj/effect/spacevine/holder, mob/living/eater)
/datum/spacevine_mutation/toxicity/on_eat(obj/structure/spacevine/holder, mob/living/eater)
if(!isvineimmune(eater))
eater.adjustToxLoss(5)
@@ -226,7 +226,7 @@
// kaboom events aren't fun
nofun = TRUE
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, obj/effect/spacevine/holder)
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, obj/structure/spacevine/holder)
if(explosion_severity < 3)
qdel(holder)
else
@@ -234,7 +234,7 @@
spawn(5)
holder.wither()
/datum/spacevine_mutation/explosive/on_death(obj/effect/spacevine/holder, mob/hitter, obj/item/I)
/datum/spacevine_mutation/explosive/on_death(obj/structure/spacevine/holder, mob/hitter, obj/item/I)
explosion(holder.loc, 0, 0, severity, 0, 0)
/datum/spacevine_mutation/fire_proof
@@ -242,10 +242,10 @@
hue = "#ff8888"
quality = MINOR_NEGATIVE
/datum/spacevine_mutation/fire_proof/process_temperature(obj/effect/spacevine/holder, temp, volume)
/datum/spacevine_mutation/fire_proof/process_temperature(obj/structure/spacevine/holder, temp, volume)
return 1
/datum/spacevine_mutation/fire_proof/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/fire_proof/on_hit(obj/structure/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
if(I && I.damtype == "fire")
. = 0
else
@@ -256,8 +256,8 @@
hue = "#ff7700"
quality = MINOR_NEGATIVE
/datum/spacevine_mutation/vine_eating/on_spread(obj/effect/spacevine/holder, turf/target)
var/obj/effect/spacevine/prey = locate() in target
/datum/spacevine_mutation/vine_eating/on_spread(obj/structure/spacevine/holder, turf/target)
var/obj/structure/spacevine/prey = locate() in target
if(prey && !prey.mutations.Find(src)) //Eat all vines that are not of the same origin
prey.wither()
. = TRUE
@@ -268,20 +268,20 @@
severity = 3
quality = NEGATIVE
/datum/spacevine_mutation/aggressive_spread/on_spread(obj/effect/spacevine/holder, turf/target)
/datum/spacevine_mutation/aggressive_spread/on_spread(obj/structure/spacevine/holder, turf/target)
if(istype(target, /turf/simulated/wall/r_wall))
// Too tough to pierce - should lead to interesting spread patterns
return
// Bust through windows or other stuff blocking the way
if(!target.Enter(holder))
for(var/atom/movable/AM in target)
if(istype(AM, /obj/effect/spacevine) || !AM.density)
if(istype(AM, /obj/structure/spacevine) || !AM.density)
continue
AM.ex_act(severity)
target.ex_act(severity) // vine immunity handled at /mob/ex_act
. = TRUE
/datum/spacevine_mutation/aggressive_spread/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
/datum/spacevine_mutation/aggressive_spread/on_buckle(obj/structure/spacevine/holder, mob/living/buckled)
buckled.ex_act(severity)
/datum/spacevine_mutation/transparency
@@ -289,7 +289,7 @@
hue = ""
quality = POSITIVE
/datum/spacevine_mutation/transparency/on_grow(obj/effect/spacevine/holder)
/datum/spacevine_mutation/transparency/on_grow(obj/structure/spacevine/holder)
holder.set_opacity(0)
holder.alpha = 125
@@ -299,13 +299,13 @@
severity = 10
quality = NEGATIVE
/datum/spacevine_mutation/thorns/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
/datum/spacevine_mutation/thorns/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
if(prob(severity) && istype(crosser) && !isvineimmune(holder))
var/mob/living/M = crosser
M.adjustBruteLoss(5)
to_chat(M, "<span class='alert'>You cut yourself on the thorny vines.</span>")
/datum/spacevine_mutation/thorns/on_hit(obj/effect/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
if(prob(severity) && istype(hitter) && !isvineimmune(holder))
var/mob/living/M = hitter
M.adjustBruteLoss(5)
@@ -317,13 +317,13 @@
hue = "#997700"
quality = NEGATIVE
/datum/spacevine_mutation/woodening/on_grow(obj/effect/spacevine/holder)
/datum/spacevine_mutation/woodening/on_grow(obj/structure/spacevine/holder)
if(holder.energy)
holder.density = 1
holder.maxhealth = 100
holder.health = holder.maxhealth
/datum/spacevine_mutation/woodening/on_hit(obj/effect/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
if(!is_sharp(I))
. = expected_damage * 0.5
else
@@ -335,11 +335,11 @@
quality = NEGATIVE
severity = 10
/datum/spacevine_mutation/flowering/on_grow(obj/effect/spacevine/holder)
/datum/spacevine_mutation/flowering/on_grow(obj/structure/spacevine/holder)
if(holder.energy == 2 && prob(severity) && !locate(/obj/structure/alien/resin/flower_bud_enemy) in range(5,holder))
new /obj/structure/alien/resin/flower_bud_enemy(get_turf(holder))
/datum/spacevine_mutation/flowering/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
/datum/spacevine_mutation/flowering/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
if(prob(25))
holder.entangle(crosser)
@@ -349,7 +349,7 @@
hue = "#FF8080"
quality = MINOR_NEGATIVE
/datum/spacevine_mutation/virulent_spread/on_search(obj/effect/spacevine/holder)
/datum/spacevine_mutation/virulent_spread/on_search(obj/structure/spacevine/holder)
return 1
// Sure, let's encourage crew members to deliberately breed a highly dangerous
@@ -364,7 +364,7 @@
/obj/item/stack/sheet/metal = 1
)
/datum/spacevine_mutation/mineral/on_death(obj/effect/spacevine/holder)
/datum/spacevine_mutation/mineral/on_death(obj/structure/spacevine/holder)
if(!prob(drop_rate))
return
var/itemtype = pickweight(mineral_results)
@@ -403,7 +403,7 @@
)
// SPACE VINES (Note that this code is very similar to Biomass code)
/obj/effect/spacevine
/obj/structure/spacevine
name = "space vines"
desc = "An extremely expansionistic species of vine."
icon = 'icons/effects/spacevines.dmi'
@@ -416,14 +416,14 @@
var/health = 50
var/maxhealth = 50
var/energy = 0
var/obj/effect/spacevine_controller/master = null
var/obj/structure/spacevine_controller/master = null
var/list/mutations = list()
/obj/effect/spacevine/New()
/obj/structure/spacevine/New()
..()
color = "#ffffff"
/obj/effect/spacevine/examine(mob/user)
/obj/structure/spacevine/examine(mob/user)
..()
var/text = "This one is a"
if(mutations.len)
@@ -435,13 +435,13 @@
text += " vine."
to_chat(user, text)
/obj/effect/spacevine/proc/wither()
/obj/structure/spacevine/proc/wither()
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_death(src)
qdel(src)
/obj/effect/spacevine/Destroy()
/obj/structure/spacevine/Destroy()
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_deletion(src)
if(master)
@@ -460,11 +460,11 @@
unbuckle_mob()
return ..()
/obj/effect/spacevine/proc/add_mutation(datum/spacevine_mutation/mutation)
/obj/structure/spacevine/proc/add_mutation(datum/spacevine_mutation/mutation)
mutations |= mutation
color = mutation.hue
/obj/effect/spacevine/proc/on_chem_effect(datum/reagent/R)
/obj/structure/spacevine/proc/on_chem_effect(datum/reagent/R)
var/override = 0
for(var/datum/spacevine_mutation/SM in mutations)
override += SM.on_chem(src, R)
@@ -472,7 +472,7 @@
if(prob(50))
wither()
/obj/effect/spacevine/proc/eat(mob/eater)
/obj/structure/spacevine/proc/eat(mob/eater)
var/override = 0
for(var/datum/spacevine_mutation/SM in mutations)
override += SM.on_eat(src, eater)
@@ -481,64 +481,61 @@
eater.say("Nom")
wither()
/obj/effect/spacevine/attackby(obj/item/weapon/W, mob/user, params)
/obj/structure/spacevine/attackby(obj/item/weapon/W, mob/user, params)
if (!W || !user || !W.type)
return
user.changeNext_move(CLICK_CD_MELEE)
var/force = W.force
var/damage_to_do = W.force
if(istype(W, /obj/item/weapon/scythe))
force = force * 4
for(var/obj/effect/spacevine/B in orange(1,src))
B.health = health - force
if(B.health < 1)
wither()
health = health - force
if(health < 1)
wither()
return
var/obj/item/weapon/scythe/S = W
if(S.extend) //so folded telescythes won't get damage boosts / insta-clears (they instead will instead be treated like non-scythes)
damage_to_do *= 4
for(var/obj/structure/spacevine/B in range(1,src))
if(B.health > damage_to_do) //this only is going to occur for woodening mutation vines (increased health) or if we nerf scythe damage/multiplier
B.health -= damage_to_do
else
B.wither()
return
if(is_sharp(W))
force = force * 4
damage_to_do *= 4
if(W && W.damtype == "fire")
force = force * 4
damage_to_do *= 4
for(var/datum/spacevine_mutation/SM in mutations)
force = SM.on_hit(src, user, W, force) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
damage_to_do = SM.on_hit(src, user, W, damage_to_do) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
health = health - force
health -= damage_to_do
if(health < 1)
wither()
..()
/obj/effect/spacevine/Crossed(mob/crosser)
/obj/structure/spacevine/Crossed(mob/crosser)
if(isliving(crosser))
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_cross(src, crosser)
/obj/effect/spacevine/attack_hand(mob/user)
/obj/structure/spacevine/attack_hand(mob/user)
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_hit(src, user)
user_unbuckle_mob(user, user)
/obj/effect/spacevine/attack_alien(mob/living/user)
/obj/structure/spacevine/attack_alien(mob/living/user)
eat(user)
/obj/effect/spacevine_controller
/obj/structure/spacevine_controller
invisibility = 101
var/list/obj/effect/spacevine/vines = list()
var/list/obj/structure/spacevine/vines = list()
var/list/growth_queue = list()
var/spread_multiplier = 5
var/spread_cap = 30
var/list/mutations_list = list()
var/mutativeness = 1
/obj/effect/spacevine_controller/New(loc, list/muts, potency, production)
/obj/structure/spacevine_controller/New(loc, list/muts, potency, production)
color = "#ffffff"
spawn_spacevine_piece(loc, , muts)
processing_objects.Add(src)
@@ -559,21 +556,21 @@
..()
/obj/effect/spacevine_controller/ex_act() //only killing all vines will end this suffering
/obj/structure/spacevine_controller/ex_act() //only killing all vines will end this suffering
return
/obj/effect/spacevine_controller/singularity_act()
/obj/structure/spacevine_controller/singularity_act()
return
/obj/effect/spacevine_controller/singularity_pull()
/obj/structure/spacevine_controller/singularity_pull()
return
/obj/effect/spacevine_controller/Destroy()
/obj/structure/spacevine_controller/Destroy()
processing_objects.Remove(src)
return ..()
/obj/effect/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/effect/spacevine/parent, list/muts)
var/obj/effect/spacevine/SV = new(location)
/obj/structure/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/structure/spacevine/parent, list/muts)
var/obj/structure/spacevine/SV = new(location)
growth_queue += SV
vines += SV
SV.master = src
@@ -593,7 +590,7 @@
for(var/datum/spacevine_mutation/SM in SV.mutations)
SM.on_birth(SV)
/obj/effect/spacevine_controller/process()
/obj/structure/spacevine_controller/process()
if(!vines || !vines.len)
qdel(src) //space vines exterminated. Remove the controller
return
@@ -605,9 +602,9 @@
length = min( spread_cap , max( 1 , vines.len / spread_multiplier ) )
var/i = 0
var/list/obj/effect/spacevine/queue_end = list()
var/list/obj/structure/spacevine/queue_end = list()
for(var/obj/effect/spacevine/SV in growth_queue)
for(var/obj/structure/spacevine/SV in growth_queue)
if(qdeleted(SV))
continue
i++
@@ -628,7 +625,7 @@
growth_queue = growth_queue + queue_end
/obj/effect/spacevine/proc/grow()
/obj/structure/spacevine/proc/grow()
if(!energy)
icon_state = pick("Med1", "Med2", "Med3")
energy = 1
@@ -640,7 +637,7 @@
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_grow(src)
/obj/effect/spacevine/proc/entangle_mob()
/obj/structure/spacevine/proc/entangle_mob()
if(!buckled_mob && prob(25))
for(var/mob/living/V in loc)
entangle(V)
@@ -648,7 +645,7 @@
break //only capture one mob at a time
/obj/effect/spacevine/proc/entangle(mob/living/V)
/obj/structure/spacevine/proc/entangle(mob/living/V)
if(!V || isvineimmune(V))
return
for(var/datum/spacevine_mutation/SM in mutations)
@@ -657,7 +654,7 @@
to_chat(V, "<span class='danger'>The vines [pick("wind", "tangle", "tighten")] around you!</span>")
buckle_mob(V, 1)
/obj/effect/spacevine/proc/spread()
/obj/structure/spacevine/proc/spread()
var/list/dir_list = cardinal.Copy()
var/spread_search = FALSE // Whether to exhaustive search all 4 cardinal dirs for an open direction
for(var/datum/spacevine_mutation/SM in mutations)
@@ -669,7 +666,7 @@
var/spread_success = FALSE
for(var/datum/spacevine_mutation/SM in mutations)
spread_success |= SM.on_spread(src, stepturf) // If this returns 1, spreading succeeded
if(!locate(/obj/effect/spacevine, stepturf))
if(!locate(/obj/structure/spacevine, stepturf))
// snowflake for space turf, but space turf is super common and a big deal
if(!istype(stepturf, /turf/space) && stepturf.Enter(src))
if(master)
@@ -678,21 +675,21 @@
if(spread_success || !spread_search)
break
/obj/effect/spacevine/ex_act(severity)
/obj/structure/spacevine/ex_act(severity)
var/i
for(var/datum/spacevine_mutation/SM in mutations)
i += SM.on_explosion(severity, src)
if(!i && prob(100/severity))
wither()
/obj/effect/spacevine/temperature_expose(null, temp, volume)
/obj/structure/spacevine/temperature_expose(null, temp, volume)
var/override = 0
for(var/datum/spacevine_mutation/SM in mutations)
override += SM.process_temperature(src, temp, volume)
if(!override)
wither()
/obj/effect/spacevine/CanPass(atom/movable/mover, turf/target, height=0)
/obj/structure/spacevine/CanPass(atom/movable/mover, turf/target, height=0)
if(isvineimmune(mover))
. = TRUE
else
+1 -1
View File
@@ -22,7 +22,7 @@
while((spawncount >= 1) && vents.len)
var/obj/vent = pick(vents)
var/obj/effect/spider/spiderling/S = new(vent.loc)
var/obj/structure/spider/spiderling/S = new(vent.loc)
if(prob(66))
S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/nurse
vents -= vent
+1 -1
View File
@@ -37,7 +37,7 @@
spawncount = 1
while(spawncount >= 1 && vents.len)
var/obj/vent = pick(vents)
var/obj/effect/spider/spiderling/terror_spiderling/S = new(vent.loc)
var/obj/structure/spider/spiderling/terror_spiderling/S = new(vent.loc)
S.name = "evil-looking spiderling"
S.grow_as = spider_type
S.amount_grown = 75
@@ -41,6 +41,17 @@
return 1
return 0
/obj/item/weapon/reagent_containers/food/drinks/MouseDrop(atom/over_object) //CHUG! CHUG! CHUG!
var/mob/living/carbon/chugger = over_object
if(istype(chugger) && loc == chugger && src == chugger.get_active_hand() && reagents.total_volume)
chugger.visible_message("<span class='notice'>[chugger] raises the [src] to their mouth and starts [pick("chugging","gulping")] it down like [pick("a savage","a mad beast","it's going out of style","there's no tomorrow")]!</span>", "<span class='notice'>You start chugging \the [src].</span>", "<span class='notice'>You hear what sounds like gulping.</span>")
while(do_mob(chugger, chugger, 40)) //Between the default time for do_mob and the time it takes for a vampire to suck blood.
chugger.eat(src, chugger, 25) //Half of a glass, quarter of a bottle.
if(!reagents.total_volume) //Finish in style.
chugger.emote("gasp")
chugger.visible_message("<span class='notice'>[chugger] [pick("finishes","downs","polishes off","slams")] the entire [src], what a [pick("savage","monster","champ","beast")]!</span>", "<span class='notice'>You finish off the [src]![prob(50) ? " Maybe that wasn't such a good idea..." : ""]</span>", "<span class='notice'>You hear a gasp and a clink.</span>")
break
/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
if(!proximity) return
@@ -37,11 +37,17 @@
extinguish()
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change()
overlays.Cut()
if(reagents.reagent_list.len)
var/datum/reagent/R = reagents.get_master_reagent()
icon_state = R.drink_icon
name = R.drink_name
desc = R.drink_desc
if(R.drink_icon)
icon_state = R.drink_icon
else
var/image/I = image(icon, "glassoverlay")
I.color = mix_color_from_reagents(reagents.reagent_list)
overlays += I
else
icon_state = "glass_empty"
name = "glass"
@@ -56,4 +62,7 @@
list_reagents = list("cola" = 50)
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/devilskiss
list_reagents = list("devilskiss" = 50)
list_reagents = list("devilskiss" = 50)
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/alliescocktail
list_reagents = list("alliescocktail" = 50)
+4 -13
View File
@@ -1218,28 +1218,19 @@
var/monkey_type = "Monkey"
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user, proximity)
if(!proximity)
return
if(istype(O, /obj/structure/sink))
to_chat(user, "<span class='notice'>You place [src] under a stream of water...</span>")
user.drop_item()
forceMove(get_turf(O))
return Expand()
..()
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature)
if(volume >= 5)
return Expand()
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wash(mob/user, atom/source)
if(do_after(user, 40, target = source))
return 1
user.drop_item()
forceMove(get_turf(source))
return 1
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
if(isnull(gcDestroyed))
visible_message("<span class='notice'>[src] expands!</span>")
new/mob/living/carbon/human(get_turf(src),monkey_type)
new/mob/living/carbon/human(get_turf(src), monkey_type)
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube
@@ -41,6 +41,8 @@
return 0
if(istype(check, /obj/item/weapon/reagent_containers/food/snacks))
return 1
if(istype(check, /obj/item/weapon/grab))
return special_attack(check, user)
to_chat(user, "<span class ='notice'>You can only process food!</span>")
return 0
@@ -144,6 +146,9 @@
turnoff(I)
//qdel(I)
/obj/machinery/cooker/proc/special_attack(obj/item/weapon/grab/G, mob/user)
return 0
// MAKE SURE TO OVERRIDE THESE ON THE MACHINE IF IT HAS SPECIAL FOOD INTERACTIONS!
// FAILURE TO OVERRIDE WILL RESULT IN FAILURE TO PROPERLY HANDLE SPECIAL INTERACTIONS! --FalseIncarnate
/obj/machinery/cooker/proc/checkSpecials(obj/item/I)
@@ -43,6 +43,28 @@
var/obj/item/weapon/reagent_containers/food/snacks/deepfryholder/type = new(get_turf(src))
return type
/obj/machinery/cooker/deepfryer/special_attack(obj/item/weapon/grab/G, mob/user)
if(ishuman(G.affecting))
if(G.state < GRAB_AGGRESSIVE)
to_chat(user, "<span class='warning'>You need a better grip to do that!</span>")
return 0
var/mob/living/carbon/human/C = G.affecting
var/obj/item/organ/external/head/head = C.get_organ("head")
if(!head)
to_chat(user, "<span class='warning'>This person doesn't have a head!</span>")
return 0
C.visible_message("<span class='danger'>[user] dunks [C]'s face into [src]!</span>", \
"<span class='userdanger'>[user] dunks your face into [src]!</span>")
C.emote("scream")
user.changeNext_move(CLICK_CD_MELEE)
C.apply_damage(25, BURN, "head") //25 fire damage and disfigurement because your face was just deep fried!
head.disfigure("burn")
add_logs(user, G.affecting, "deep-fried", addition="'s face")
qdel(G) //Removes the grip so the person MIGHT have a small chance to run the fuck away and to prevent rapid dunks.
return 1
return 0
/obj/machinery/cooker/deepfryer/checkSpecials(obj/item/I)
if(!I)
return 0
@@ -43,3 +43,19 @@
for(var/obj/item/weapon/stock_parts/micro_laser/M in component_parts)
E += M.rating
efficiency = round((E/2), 1) // There's 2 lasers, so halve the effect on the efficiency to keep it balanced
/obj/machinery/kitchen_machine/grill/special_attack(obj/item/weapon/grab/G, mob/user)
if(ishuman(G.affecting))
if(G.state < GRAB_AGGRESSIVE)
to_chat(user, "<span class='warning'>You need a better grip to do that!</span>")
return 0
var/mob/living/carbon/human/C = G.affecting
C.visible_message("<span class='danger'>[user] forces [C] onto [src], searing [C]'s body!</span>", \
"<span class='userdanger'>[user] forces you onto [src]! It burns!</span>")
C.emote("scream")
user.changeNext_move(CLICK_CD_MELEE)
C.adjustFireLoss(30)
add_logs(user, G.affecting, "burned", src)
qdel(G) //Removes the grip to prevent rapid sears and give you a chance to run
return 1
return 0
@@ -179,7 +179,7 @@ var/list/ingredients_source = list(
return
if(href_list["dispense"])
dispense_flavour = text2num(href_list["dispense"])
visible_message("\blue[usr] sets [src] to dispense [get_icecream_flavour_string(dispense_flavour)] flavoured icecream.")
visible_message("<span class='notice'>[usr] sets [src] to dispense [get_icecream_flavour_string(dispense_flavour)] flavoured icecream.</span>")
if(href_list["cone"])
var/dispense_cone = text2num(href_list["cone"])
@@ -155,9 +155,7 @@
return 1
//G.reagents.trans_to(src,G.amount_per_transfer_from_this)
else if(istype(O,/obj/item/weapon/grab))
var/obj/item/weapon/grab/G = O
to_chat(user, "<span class='alert'>This is ridiculous. You can not fit \the [G.affecting] in this [src].</span>")
return 1
return special_attack(O, user)
else
to_chat(user, "<span class='alert'>You have no idea what you can cook with this [O].</span>")
return 1
@@ -170,6 +168,10 @@
user.set_machine(src)
interact(user)
/obj/machinery/kitchen_machine/proc/special_attack(obj/item/weapon/grab/G, mob/user)
to_chat(user, "<span class='alert'>This is ridiculous. You can not fit [G.affecting] in this [src].</span>")
return 0
/********************
* Machine Menu *
********************/
@@ -43,3 +43,25 @@
for(var/obj/item/weapon/stock_parts/micro_laser/M in component_parts)
E += M.rating
efficiency = round((E/2), 1) // There's 2 lasers, so halve the effect on the efficiency to keep it balanced
/obj/machinery/kitchen_machine/oven/special_attack(obj/item/weapon/grab/G, mob/user)
if(ishuman(G.affecting))
if(G.state < GRAB_AGGRESSIVE)
to_chat(user, "<span class='warning'>You need a better grip to do that!</span>")
return 0
var/mob/living/carbon/human/C = G.affecting
var/obj/item/organ/external/head/head = C.get_organ("head")
if(!head)
to_chat(user, "<span class='warning'>This person doesn't have a head!</span>")
return 0
C.visible_message("<span class='danger'>[user] bashes [C]'s head in [src]'s door!</span>", \
"<span class='userdanger'>[user] bashes your head in [src]'s door! It feels rather hot in the oven!</span>")
C.emote("scream")
user.changeNext_move(CLICK_CD_MELEE)
C.apply_damage(5, BURN, "head") //5 fire damage, 15 brute damage, and weakening because your head was just in a hot oven with the door bashing into your neck!
C.apply_damage(15, BRUTE, "head")
C.Weaken(2)
add_logs(user, G.affecting, "smashed", addition="'s head on [src]")
qdel(G) //Removes the grip to prevent rapid bashes. With the weaken, you PROBABLY can't run unless they are slow to grab you again...
return 1
return 0
@@ -50,8 +50,7 @@
wires = new/datum/wires/smartfridge(src)
/obj/machinery/smartfridge/Destroy()
qdel(wires)
wires = null
QDEL_NULL(wires)
for(var/atom/movable/A in contents)
A.forceMove(loc)
return ..()
@@ -458,6 +458,7 @@
reagents = list()
items = list(
/obj/item/weapon/reagent_containers/food/snacks/popcorn,
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean,
)
result = /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/popcorn
@@ -7,8 +7,12 @@
#define GC_FORCE_DEL_PER_TICK 30
//#define GC_DEBUG
// A list of types that were queued in the GC, and had to be soft deleted; used in testing
var/list/gc_hard_del_types = list()
var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened.
// the types are stored as strings
var/list/sleptDestroy = list() //Same as above but these are paths that slept during their Destroy call
var/list/noqdelhint = list() // list of all types that do not return a QDEL_HINT
var/global/datum/controller/process/garbage_collector/garbageCollector
// The time a datum was destroyed by the GC, or null if it hasn't been
@@ -82,7 +86,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector
#undef GC_COLLECTIONS_PER_TICK
/datum/controller/process/garbage_collector/proc/hardDel(var/datum/D)
gc_hard_del_types |= D.type
didntgc["[D.type]"]++
D.hard_deleted = 1
if(!D.gcDestroyed)
spawn(-1)
@@ -126,6 +130,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector
return
if(!isnull(D.gcDestroyed) && D.gcDestroyed != world.time)
gcwarning("Sleep detected in Destroy() call of [D.type]")
sleptDestroy["[D.type]"]++
D.gcDestroyed = world.time
switch(hint)
@@ -155,7 +160,9 @@ var/global/datum/controller/process/garbage_collector/garbageCollector
#endif
garbageCollector.addTrash(D)
else
// to_chat(world, "WARNING GC DID NOT GET A RETURN VALUE FOR [D], [D.type]!")
if(!noqdelhint["[D.type]"])
noqdelhint["[D.type]"] = "[D.type]"
gcwarning("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.")
garbageCollector.addTrash(D)
+16 -10
View File
@@ -11,23 +11,29 @@
garbageCollector.del_everything = !garbageCollector.del_everything
// to_chat(world, "<b>GC: qdel turned [garbageCollector.del_everything ? "off" : "on"].</b>")
log_admin("[key_name(usr)] turned qdel [garbageCollector.del_everything ? "off" : "on"].")
message_admins("\blue [key_name_admin(usr)] turned qdel [garbageCollector.del_everything ? "off" : "on"].", 1)
message_admins("<span class='notice'>[key_name_admin(usr)] turned qdel [garbageCollector.del_everything ? "off" : "on"].</span>", 1)
/client/proc/gc_dump_hdl()
set name = "(GC) Hard Del List"
set desc = "List types that are hard del()'d by the GC."
/client/proc/cmd_display_del_log()
set category = "Debug"
set name = "(GC) Display del() Log"
set desc = "Displays a list of things that have failed to GC this round"
if(!check_rights(R_DEBUG))
return
if(!gc_hard_del_types || !gc_hard_del_types.len)
to_chat(usr, "<span class='notice'>No hard del()'d types found.</span>")
return
var/dat = "<B>List of things that failed to GC this round</B><BR><BR>"
for(var/path in didntgc)
dat += "[path] - [didntgc[path]] times<BR>"
to_chat(usr, "Types hard del()'d by the GC:")
for(var/A in gc_hard_del_types)
to_chat(usr, "[A]")
dat += "<B>List of paths that did not return a qdel hint in Destroy()</B><BR><BR>"
for(var/path in noqdelhint)
dat += "[path]<BR>"
dat += "<B>List of paths that slept in Destroy()</B><BR><BR>"
for(var/path in sleptDestroy)
dat += "[path]<BR>"
usr << browse(dat, "window=dellog")
#ifdef TESTING
/client/var/running_find_references
+1 -1
View File
@@ -354,5 +354,5 @@
//update our hub status
world.update_status()
message_admins("\blue ADMIN: Event: [key_name(src)] force-set Holiday to \"[H]\"")
message_admins("<span class='notice'>ADMIN: Event: [key_name_admin(src)] force-set Holiday to \"[H]\"</span>")
log_admin("[key_name(src)] force-set Holiday to \"[H]\"")
+3 -4
View File
@@ -31,9 +31,8 @@
RefreshParts()
/obj/machinery/biogenerator/Destroy()
if(beaker)
qdel(beaker)
beaker = null
QDEL_NULL(beaker)
QDEL_NULL(files)
return ..()
/obj/machinery/biogenerator/ex_act(severity)
@@ -208,7 +207,7 @@
/obj/machinery/biogenerator/attack_hand(mob/user)
interact(user)
/obj/machinery/biogenerator/attack_ghost(mob/user)
interact(user)
+22 -9
View File
@@ -24,13 +24,22 @@
/obj/machinery/plantgenes/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/plantgenes(src)
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
component_parts += new /obj/item/weapon/circuitboard/plantgenes(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
RefreshParts()
/obj/machinery/plantgenes/Destroy()
core_genes.Cut()
reagent_genes.Cut()
trait_genes.Cut()
target = null
QDEL_NULL(seed)
QDEL_NULL(disk)
return ..()
/obj/machinery/plantgenes/RefreshParts()
rating = 0
for(var/I in component_parts)
@@ -90,7 +99,7 @@
if(..())
return
interact(user)
/obj/machinery/plantgenes/attack_ghost(mob/user)
interact(user)
@@ -282,9 +291,9 @@
repaint_seed()
if("extract")
if(disk && !disk.read_only)
disk.gene = G
if(istype(G, /datum/plant_gene/core/potency))
var/datum/plant_gene/core/gene = G
disk.gene = G.Copy()
if(istype(disk.gene, /datum/plant_gene/core/potency))
var/datum/plant_gene/core/gene = disk.gene
gene.value = min(gene.value, max_extract_pot)
disk.update_name()
qdel(seed)
@@ -370,6 +379,10 @@
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
/obj/item/weapon/disk/plantgene/Destroy()
QDEL_NULL(gene)
return ..()
/obj/item/weapon/disk/plantgene/attackby(obj/item/weapon/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/pen))
+3 -1
View File
@@ -39,7 +39,9 @@
transform *= TransformUsingVariable(seed.potency, 100, 0.5) //Makes the resulting produce's sprite larger or smaller based on potency!
add_juice()
/obj/item/weapon/reagent_containers/food/snacks/grown/Destroy()
QDEL_NULL(seed)
return ..()
/obj/item/weapon/reagent_containers/food/snacks/grown/proc/add_juice()
if(reagents)
+1 -1
View File
@@ -32,7 +32,7 @@
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)
investigate_log("was planted by [key_name(user)] at ([T.x],[T.y],[T.z])","kudzu")
new /obj/effect/spacevine_controller(user.loc, mutations, potency, production)
new /obj/structure/spacevine_controller(user.loc, mutations, potency, production)
user.drop_item()
qdel(src)

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