and finally, the modules folder. Now I can publish and take a break
This commit is contained in:
@@ -54,15 +54,19 @@
|
||||
if(src.client && src.client.holder)
|
||||
isadmin = 1
|
||||
var/datum/DBQuery/query_get_new_polls = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[ckey]\")")
|
||||
var/rs = REF(src)
|
||||
if(query_get_new_polls.Execute())
|
||||
var/newpoll = 0
|
||||
if(query_get_new_polls.NextRow())
|
||||
newpoll = 1
|
||||
|
||||
if(newpoll)
|
||||
output += "<p><b><a href='byond://?src=[REF(src)];showpoll=1'>Show Player Polls</A> (NEW!)</b></p>"
|
||||
output += "<p><b><a href='byond://?src=[rs];showpoll=1'>Show Player Polls</A> (NEW!)</b></p>"
|
||||
else
|
||||
output += "<p><a href='byond://?src=[REF(src)];showpoll=1'>Show Player Polls</A></p>"
|
||||
output += "<p><a href='byond://?src=[rs];showpoll=1'>Show Player Polls</A></p>"
|
||||
qdel(query_get_new_polls)
|
||||
if(QDELETED(src))
|
||||
return
|
||||
|
||||
output += "</center>"
|
||||
|
||||
@@ -71,8 +75,6 @@
|
||||
popup.set_window_options("can_close=0")
|
||||
popup.set_content(output)
|
||||
popup.open(0)
|
||||
return
|
||||
|
||||
|
||||
/mob/dead/new_player/Topic(href, href_list[])
|
||||
if(src != usr)
|
||||
@@ -310,6 +312,8 @@
|
||||
return JOB_UNAVAILABLE_SLOTFULL
|
||||
if(jobban_isbanned(src,rank))
|
||||
return JOB_UNAVAILABLE_BANNED
|
||||
if(QDELETED(src))
|
||||
return JOB_UNAVAILABLE_GENERIC
|
||||
if(!job.player_old_enough(client))
|
||||
return JOB_UNAVAILABLE_ACCOUNTAGE
|
||||
if(job.required_playtime_remaining(client))
|
||||
@@ -475,7 +479,12 @@
|
||||
|
||||
var/mob/living/carbon/human/H = new(loc)
|
||||
|
||||
if(CONFIG_GET(flag/force_random_names) || jobban_isbanned(src, "appearance"))
|
||||
var/frn = CONFIG_GET(flag/force_random_names)
|
||||
if(!frn)
|
||||
frn = jobban_isbanned(src, "appearance")
|
||||
if(QDELETED(src))
|
||||
return
|
||||
if(frn)
|
||||
client.prefs.random_character()
|
||||
client.prefs.real_name = client.prefs.pref_species.random_name(gender,1)
|
||||
client.prefs.copy_to(H)
|
||||
|
||||
@@ -8,16 +8,20 @@
|
||||
return
|
||||
var/datum/DBQuery/query_poll_get = SSdbcore.NewQuery("SELECT id, question FROM [format_table_name("poll_question")] WHERE Now() BETWEEN starttime AND endtime [(client.holder ? "" : "AND adminonly = false")]")
|
||||
if(!query_poll_get.warn_execute())
|
||||
qdel(query_poll_get)
|
||||
return
|
||||
var/output = "<div align='center'><B>Player polls</B><hr><table>"
|
||||
var/i = 0
|
||||
var/rs = REF(src)
|
||||
while(query_poll_get.NextRow())
|
||||
var/pollid = query_poll_get.item[1]
|
||||
var/pollquestion = query_poll_get.item[2]
|
||||
output += "<tr bgcolor='#[ (i % 2 == 1) ? "e2e2e2" : "e2e2e2" ]'><td><a href=\"byond://?src=[REF(src)];pollid=[pollid]\"><b>[pollquestion]</b></a></td></tr>"
|
||||
output += "<tr bgcolor='#[ (i % 2 == 1) ? "e2e2e2" : "e2e2e2" ]'><td><a href=\"byond://?src=[rs];pollid=[pollid]\"><b>[pollquestion]</b></a></td></tr>"
|
||||
i++
|
||||
qdel(query_poll_get)
|
||||
output += "</table>"
|
||||
src << browse(output,"window=playerpolllist;size=500x300")
|
||||
if(!QDELETED(src))
|
||||
src << browse(output,"window=playerpolllist;size=500x300")
|
||||
|
||||
/mob/dead/new_player/proc/poll_player(pollid)
|
||||
if(!pollid)
|
||||
@@ -27,6 +31,7 @@
|
||||
return
|
||||
var/datum/DBQuery/query_poll_get_details = SSdbcore.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]")
|
||||
if(!query_poll_get_details.warn_execute())
|
||||
qdel(query_poll_get_details)
|
||||
return
|
||||
var/pollstarttime = ""
|
||||
var/pollendtime = ""
|
||||
@@ -39,23 +44,28 @@
|
||||
pollquestion = query_poll_get_details.item[3]
|
||||
polltype = query_poll_get_details.item[4]
|
||||
multiplechoiceoptions = text2num(query_poll_get_details.item[5])
|
||||
qdel(query_poll_get_details)
|
||||
switch(polltype)
|
||||
if(POLLTYPE_OPTION)
|
||||
var/datum/DBQuery/query_option_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'")
|
||||
if(!query_option_get_votes.warn_execute())
|
||||
qdel(query_option_get_votes)
|
||||
return
|
||||
var/votedoptionid = 0
|
||||
if(query_option_get_votes.NextRow())
|
||||
votedoptionid = text2num(query_option_get_votes.item[1])
|
||||
qdel(query_option_get_votes)
|
||||
var/list/datum/polloption/options = list()
|
||||
var/datum/DBQuery/query_option_options = SSdbcore.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]")
|
||||
if(!query_option_options.warn_execute())
|
||||
qdel(query_option_options)
|
||||
return
|
||||
while(query_option_options.NextRow())
|
||||
var/datum/polloption/PO = new()
|
||||
PO.optionid = text2num(query_option_options.item[1])
|
||||
PO.optiontext = query_option_options.item[2]
|
||||
options += PO
|
||||
qdel(query_option_options)
|
||||
var/output = "<div align='center'><B>Player poll</B><hr>"
|
||||
output += "<b>Question: [pollquestion]</b><br>"
|
||||
output += "<font size='2'>Poll runs from <b>[pollstarttime]</b> until <b>[pollendtime]</b></font><p>"
|
||||
@@ -84,10 +94,12 @@
|
||||
if(POLLTYPE_TEXT)
|
||||
var/datum/DBQuery/query_text_get_votes = SSdbcore.NewQuery("SELECT replytext FROM [format_table_name("poll_textreply")] WHERE pollid = [pollid] AND ckey = '[ckey]'")
|
||||
if(!query_text_get_votes.warn_execute())
|
||||
qdel(query_text_get_votes)
|
||||
return
|
||||
var/vote_text = ""
|
||||
if(query_text_get_votes.NextRow())
|
||||
vote_text = query_text_get_votes.item[1]
|
||||
qdel(query_text_get_votes)
|
||||
var/output = "<div align='center'><B>Player poll</B><hr>"
|
||||
output += "<b>Question: [pollquestion]</b><br>"
|
||||
output += "<font size='2'>Feedback gathering runs from <b>[pollstarttime]</b> until <b>[pollendtime]</b></font><p>"
|
||||
@@ -113,6 +125,7 @@
|
||||
if(POLLTYPE_RATING)
|
||||
var/datum/DBQuery/query_rating_get_votes = SSdbcore.NewQuery("SELECT o.text, v.rating FROM [format_table_name("poll_option")] o, [format_table_name("poll_vote")] v WHERE o.pollid = [pollid] AND v.ckey = '[ckey]' AND o.id = v.optionid")
|
||||
if(!query_rating_get_votes.warn_execute())
|
||||
qdel(query_rating_get_votes)
|
||||
return
|
||||
var/output = "<div align='center'><B>Player poll</B><hr>"
|
||||
output += "<b>Question: [pollquestion]</b><br>"
|
||||
@@ -122,6 +135,7 @@
|
||||
var/optiontext = query_rating_get_votes.item[1]
|
||||
rating = query_rating_get_votes.item[2]
|
||||
output += "<br><b>[optiontext] - [rating]</b>"
|
||||
qdel(query_rating_get_votes)
|
||||
if(!rating)
|
||||
output += "<form name='cardcomp' action='?src=[REF(src)]' method='get'>"
|
||||
output += "<input type='hidden' name='src' value='[REF(src)]'>"
|
||||
@@ -131,6 +145,7 @@
|
||||
var/maxid = 0
|
||||
var/datum/DBQuery/query_rating_options = SSdbcore.NewQuery("SELECT id, text, minval, maxval, descmin, descmid, descmax FROM [format_table_name("poll_option")] WHERE pollid = [pollid]")
|
||||
if(!query_rating_options.warn_execute())
|
||||
qdel(query_rating_options)
|
||||
return
|
||||
while(query_rating_options.NextRow())
|
||||
var/optionid = text2num(query_rating_options.item[1])
|
||||
@@ -157,23 +172,28 @@
|
||||
else
|
||||
output += "<option value='[j]'>[j]</option>"
|
||||
output += "</select>"
|
||||
qdel(query_rating_options)
|
||||
output += "<input type='hidden' name='minid' value='[minid]'>"
|
||||
output += "<input type='hidden' name='maxid' value='[maxid]'>"
|
||||
output += "<p><input type='submit' value='Submit'></form>"
|
||||
src << browse(null ,"window=playerpolllist")
|
||||
src << browse(output,"window=playerpoll;size=500x500")
|
||||
if(!QDELETED(src))
|
||||
src << browse(null ,"window=playerpolllist")
|
||||
src << browse(output,"window=playerpoll;size=500x500")
|
||||
if(POLLTYPE_MULTI)
|
||||
var/datum/DBQuery/query_multi_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'")
|
||||
if(!query_multi_get_votes.warn_execute())
|
||||
qdel(query_multi_get_votes)
|
||||
return
|
||||
var/list/votedfor = list()
|
||||
while(query_multi_get_votes.NextRow())
|
||||
votedfor.Add(text2num(query_multi_get_votes.item[1]))
|
||||
qdel(query_multi_get_votes)
|
||||
var/list/datum/polloption/options = list()
|
||||
var/maxoptionid = 0
|
||||
var/minoptionid = 0
|
||||
var/datum/DBQuery/query_multi_options = SSdbcore.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]")
|
||||
if(!query_multi_options.warn_execute())
|
||||
qdel(query_multi_options)
|
||||
return
|
||||
while(query_multi_options.NextRow())
|
||||
var/datum/polloption/PO = new()
|
||||
@@ -184,6 +204,7 @@
|
||||
if(PO.optionid < minoptionid || !minoptionid)
|
||||
minoptionid = PO.optionid
|
||||
options += PO
|
||||
qdel(query_multi_options)
|
||||
var/output = "<div align='center'><B>Player poll</B><hr>"
|
||||
output += "<b>Question: [pollquestion]</b><br>You can select up to [multiplechoiceoptions] options. If you select more, the first [multiplechoiceoptions] will be saved.<br>"
|
||||
output += "<font size='2'>Poll runs from <b>[pollstarttime]</b> until <b>[pollendtime]</b></font><p>"
|
||||
@@ -216,22 +237,26 @@
|
||||
|
||||
var/datum/DBQuery/query_irv_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'")
|
||||
if(!query_irv_get_votes.warn_execute())
|
||||
qdel(query_irv_get_votes)
|
||||
return
|
||||
|
||||
var/list/votedfor = list()
|
||||
while(query_irv_get_votes.NextRow())
|
||||
votedfor.Add(text2num(query_irv_get_votes.item[1]))
|
||||
qdel(query_irv_get_votes)
|
||||
|
||||
var/list/datum/polloption/options = list()
|
||||
|
||||
var/datum/DBQuery/query_irv_options = SSdbcore.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]")
|
||||
if(!query_irv_options.warn_execute())
|
||||
qdel(query_irv_options)
|
||||
return
|
||||
while(query_irv_options.NextRow())
|
||||
var/datum/polloption/PO = new()
|
||||
PO.optionid = text2num(query_irv_options.item[1])
|
||||
PO.optiontext = query_irv_options.item[2]
|
||||
options["[PO.optionid]"] += PO
|
||||
qdel(query_irv_options)
|
||||
|
||||
//if they already voted, use their sort
|
||||
if (votedfor.len)
|
||||
@@ -332,10 +357,13 @@
|
||||
return
|
||||
var/datum/DBQuery/query_hasvoted = SSdbcore.NewQuery("SELECT id FROM `[format_table_name(table)]` WHERE pollid = [pollid] AND ckey = '[ckey]'")
|
||||
if(!query_hasvoted.warn_execute())
|
||||
qdel(query_hasvoted)
|
||||
return
|
||||
if(query_hasvoted.NextRow())
|
||||
qdel(query_hasvoted)
|
||||
to_chat(usr, "<span class='danger'>You've already replied to this poll.</span>")
|
||||
return
|
||||
qdel(query_hasvoted)
|
||||
. = "Player"
|
||||
if(client.holder)
|
||||
. = client.holder.rank.name
|
||||
@@ -364,9 +392,12 @@
|
||||
//validate the poll is actually the right type of poll and its still active
|
||||
var/datum/DBQuery/query_validate_poll = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime AND polltype = '[type]' [(holder ? "" : "AND adminonly = false")]")
|
||||
if(!query_validate_poll.warn_execute())
|
||||
qdel(query_validate_poll)
|
||||
return 0
|
||||
if (!query_validate_poll.NextRow())
|
||||
qdel(query_validate_poll)
|
||||
return 0
|
||||
qdel(query_validate_poll)
|
||||
return 1
|
||||
|
||||
/mob/dead/new_player/proc/vote_on_irv_poll(pollid, list/votelist)
|
||||
@@ -397,10 +428,12 @@
|
||||
//lets collect the options
|
||||
var/datum/DBQuery/query_irv_id = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [pollid]")
|
||||
if(!query_irv_id.warn_execute())
|
||||
qdel(query_irv_id)
|
||||
return 0
|
||||
var/list/optionlist = list()
|
||||
while (query_irv_id.NextRow())
|
||||
optionlist += text2num(query_irv_id.item[1])
|
||||
qdel(query_irv_id)
|
||||
|
||||
//validate their votes are actually in the list of options and actually numbers
|
||||
var/list/numberedvotelist = list()
|
||||
@@ -428,13 +461,18 @@
|
||||
//now lets delete their old votes (if any)
|
||||
var/datum/DBQuery/query_irv_del_old = SSdbcore.NewQuery("DELETE FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'")
|
||||
if(!query_irv_del_old.warn_execute())
|
||||
qdel(query_irv_del_old)
|
||||
return 0
|
||||
qdel(query_irv_del_old)
|
||||
|
||||
//now to add the new ones.
|
||||
var/datum/DBQuery/query_irv_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES [sqlrowlist]")
|
||||
if(!query_irv_vote.warn_execute())
|
||||
qdel(query_irv_vote)
|
||||
return 0
|
||||
src << browse(null,"window=playerpoll")
|
||||
qdel(query_irv_vote)
|
||||
if(!QDELETED(src))
|
||||
src << browse(null,"window=playerpoll")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -454,8 +492,11 @@
|
||||
return
|
||||
var/datum/DBQuery/query_option_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')")
|
||||
if(!query_option_vote.warn_execute())
|
||||
qdel(query_option_vote)
|
||||
return
|
||||
usr << browse(null,"window=playerpoll")
|
||||
qdel(query_option_vote)
|
||||
if(!QDELETED(usr))
|
||||
usr << browse(null,"window=playerpoll")
|
||||
return 1
|
||||
|
||||
/mob/dead/new_player/proc/log_text_poll_reply(pollid, replytext)
|
||||
@@ -481,8 +522,11 @@
|
||||
return
|
||||
var/datum/DBQuery/query_text_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (Now(), [pollid], '[ckey]', INET_ATON('[client.address]'), '[replytext]', '[adminrank]')")
|
||||
if(!query_text_vote.warn_execute())
|
||||
qdel(query_text_vote)
|
||||
return
|
||||
usr << browse(null,"window=playerpoll")
|
||||
qdel(query_text_vote)
|
||||
if(!QDELETED(usr))
|
||||
usr << browse(null,"window=playerpoll")
|
||||
return 1
|
||||
|
||||
/mob/dead/new_player/proc/vote_on_numval_poll(pollid, optionid, rating)
|
||||
@@ -498,18 +542,24 @@
|
||||
return 0
|
||||
var/datum/DBQuery/query_numval_hasvoted = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE optionid = [optionid] AND ckey = '[ckey]'")
|
||||
if(!query_numval_hasvoted.warn_execute())
|
||||
qdel(query_numval_hasvoted)
|
||||
return
|
||||
if(query_numval_hasvoted.NextRow())
|
||||
qdel(query_numval_hasvoted)
|
||||
to_chat(usr, "<span class='danger'>You've already replied to this poll.</span>")
|
||||
return
|
||||
qdel(query_numval_hasvoted)
|
||||
var/adminrank = "Player"
|
||||
if(client.holder)
|
||||
adminrank = client.holder.rank.name
|
||||
adminrank = sanitizeSQL(adminrank)
|
||||
var/datum/DBQuery/query_numval_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]', [(isnull(rating)) ? "null" : rating])")
|
||||
if(!query_numval_vote.warn_execute())
|
||||
qdel(query_numval_vote)
|
||||
return
|
||||
usr << browse(null,"window=playerpoll")
|
||||
qdel(query_numval_vote)
|
||||
if(!QDELETED(usr))
|
||||
usr << browse(null,"window=playerpoll")
|
||||
return 1
|
||||
|
||||
/mob/dead/new_player/proc/vote_on_multi_poll(pollid, optionid)
|
||||
@@ -525,26 +575,33 @@
|
||||
return 0
|
||||
var/datum/DBQuery/query_multi_choicelen = SSdbcore.NewQuery("SELECT multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]")
|
||||
if(!query_multi_choicelen.warn_execute())
|
||||
qdel(query_multi_choicelen)
|
||||
return 1
|
||||
var/i
|
||||
if(query_multi_choicelen.NextRow())
|
||||
i = text2num(query_multi_choicelen.item[1])
|
||||
i = text2num(query_multi_choicelen.item[1])
|
||||
qdel(query_multi_choicelen)
|
||||
var/datum/DBQuery/query_multi_hasvoted = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'")
|
||||
if(!query_multi_hasvoted.warn_execute())
|
||||
qdel(query_multi_hasvoted)
|
||||
return 1
|
||||
while(i)
|
||||
if(query_multi_hasvoted.NextRow())
|
||||
i--
|
||||
else
|
||||
break
|
||||
qdel(query_multi_hasvoted)
|
||||
if(!i)
|
||||
return 2
|
||||
var/adminrank = "Player"
|
||||
if(client.holder)
|
||||
if(!QDELETED(client) && client.holder)
|
||||
adminrank = client.holder.rank.name
|
||||
adminrank = sanitizeSQL(adminrank)
|
||||
var/datum/DBQuery/query_multi_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')")
|
||||
if(!query_multi_vote.warn_execute())
|
||||
qdel(query_multi_vote)
|
||||
return 1
|
||||
usr << browse(null,"window=playerpoll")
|
||||
qdel(query_multi_vote)
|
||||
if(!QDELETED(usr))
|
||||
usr << browse(null,"window=playerpoll")
|
||||
return 0
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
icon = 'icons/mob/human_face.dmi' // default icon for all hairs
|
||||
|
||||
/datum/sprite_accessory/hair/short
|
||||
name = "Short Hair" // try to capatilize the names please~ // try to spell
|
||||
name = "Short Hair" // try to capitalize the names please~ // try to spell
|
||||
icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you
|
||||
|
||||
/datum/sprite_accessory/hair/shorthair2
|
||||
|
||||
@@ -622,7 +622,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
|
||||
//this is a mob verb instead of atom for performance reasons
|
||||
//see /mob/verb/examinate() in mob.dm for more info
|
||||
//overriden here and in /mob/living for different point span classes and sanity checks
|
||||
//overridden here and in /mob/living for different point span classes and sanity checks
|
||||
/mob/dead/observer/pointed(atom/A as mob|obj|turf in view())
|
||||
if(!..())
|
||||
return 0
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
|
||||
|
||||
//To appropriately fluff things like "they are holding [I] in their [get_held_index_name(get_held_index_of_item(I))]"
|
||||
//Can be overriden to pass off the fluff to something else (eg: science allowing people to add extra robotic limbs, and having this proc react to that
|
||||
//Can be overridden to pass off the fluff to something else (eg: science allowing people to add extra robotic limbs, and having this proc react to that
|
||||
// with say "they are holding [I] in their Nanotrasen Brand Utility Arm - Right Edition" or w/e
|
||||
/mob/proc/get_held_index_name(i)
|
||||
var/list/hand = list()
|
||||
@@ -272,7 +272,7 @@
|
||||
/mob/proc/canUnEquip(obj/item/I, force)
|
||||
if(!I)
|
||||
return TRUE
|
||||
if((I.flags_1 & NODROP_1) && !force)
|
||||
if((I.item_flags & NODROP) && !force)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -312,7 +312,7 @@
|
||||
if(!I) //If there's nothing to drop, the drop is automatically succesfull. If(unEquip) should generally be used to check for NODROP_1.
|
||||
return TRUE
|
||||
|
||||
if((I.flags_1 & NODROP_1) && !force)
|
||||
if((I.item_flags & NODROP) && !force)
|
||||
return FALSE
|
||||
|
||||
var/hand_index = get_held_index_of_item(I)
|
||||
@@ -325,7 +325,7 @@
|
||||
I.layer = initial(I.layer)
|
||||
I.plane = initial(I.plane)
|
||||
I.appearance_flags &= ~NO_CLIENT_COLOR
|
||||
if(!no_move && !(I.flags_1 & DROPDEL_1)) //item may be moved/qdel'd immedietely, don't bother moving it
|
||||
if(!no_move && !(I.item_flags & DROPDEL)) //item may be moved/qdel'd immedietely, don't bother moving it
|
||||
if (isnull(newloc))
|
||||
I.moveToNullspace()
|
||||
else
|
||||
@@ -396,7 +396,7 @@
|
||||
if(equip_delay_self)
|
||||
return
|
||||
|
||||
if(M.active_storage && M.active_storage.parent && M.active_storage.parent.SendSignal(COMSIG_TRY_STORAGE_INSERT, src,M))
|
||||
if(M.active_storage && M.active_storage.parent && SEND_SIGNAL(M.active_storage.parent, COMSIG_TRY_STORAGE_INSERT, src,M))
|
||||
return TRUE
|
||||
|
||||
var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(SLOT_BELT), M.get_item_by_slot(SLOT_GENERC_DEXTROUS_STORAGE), M.get_item_by_slot(SLOT_BACK))
|
||||
@@ -404,7 +404,7 @@
|
||||
if(!i)
|
||||
continue
|
||||
var/obj/item/I = i
|
||||
if(I.SendSignal(COMSIG_TRY_STORAGE_INSERT, src, M))
|
||||
if(SEND_SIGNAL(I, COMSIG_TRY_STORAGE_INSERT, src, M))
|
||||
return TRUE
|
||||
|
||||
to_chat(M, "<span class='warning'>You are unable to equip that!</span>")
|
||||
@@ -441,10 +441,7 @@
|
||||
held_items.len = amt
|
||||
|
||||
if(hud_used)
|
||||
var/style
|
||||
if(client && client.prefs)
|
||||
style = ui_style2icon(client.prefs.UI_style)
|
||||
hud_used.build_hand_slots(style)
|
||||
hud_used.build_hand_slots()
|
||||
|
||||
|
||||
/mob/living/carbon/human/change_number_of_hands(amt)
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
name = "blood crawl"
|
||||
desc = "You are unable to hold anything while in this form."
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
flags_1 = NODROP_1|ABSTRACT_1
|
||||
item_flags = NODROP | ABSTRACT
|
||||
|
||||
/mob/living/proc/exit_blood_effect(obj/effect/decal/cleanable/B)
|
||||
playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1)
|
||||
|
||||
@@ -34,9 +34,9 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
if(istype(ghost))
|
||||
activate(ghost)
|
||||
|
||||
/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade) // CITADEL EDIT sound change to 'sound/misc/server-ready.ogg'
|
||||
/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade)
|
||||
if(newlymade || GLOB.posibrain_notify_cooldown <= world.time)
|
||||
notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "<a href=?src=[REF(src)];activate=1>(Click to enter)</a>", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
|
||||
notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "<a href=?src=[REF(src)];activate=1>(Click to enter)</a>", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
|
||||
if(!newlymade)
|
||||
GLOB.posibrain_notify_cooldown = world.time + askDelay
|
||||
|
||||
@@ -85,7 +85,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
/obj/item/mmi/posibrain/proc/activate(mob/user)
|
||||
if(QDELETED(brainmob))
|
||||
return
|
||||
if(is_occupied() || jobban_isbanned(user,"posibrain"))
|
||||
if(is_occupied() || jobban_isbanned(user,"posibrain") || QDELETED(brainmob) || QDELETED(src) || QDELETED(user))
|
||||
return
|
||||
|
||||
var/posi_ask = alert("Become a [name]? (Warning, You can no longer be cloned, and all past lives will be forgotten!)","Are you positive?","Yes","No")
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
/obj/effect/proc_holder/alien/royal/praetorian/evolve
|
||||
name = "Evolve"
|
||||
desc = "Produce an interal egg sac capable of spawning children. Only one queen can exist at a time."
|
||||
desc = "Produce an internal egg sac capable of spawning children. Only one queen can exist at a time."
|
||||
plasma_cost = 500
|
||||
|
||||
action_icon_state = "alien_evolve_praetorian"
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<HR>"}
|
||||
for(var/i in 1 to held_items.len)
|
||||
var/obj/item/I = get_item_for_held_index(i)
|
||||
dat += "<BR><B>[get_held_index_name(i)]:</B><A href='?src=[REF(src)];item=[SLOT_HANDS];hand_index=[i]'>[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "<font color=grey>Empty</font>"]</a>"
|
||||
dat += "<BR><B>[get_held_index_name(i)]:</B><A href='?src=[REF(src)];item=[SLOT_HANDS];hand_index=[i]'>[(I && !(I.item_flags & ABSTRACT)) ? I : "<font color=grey>Empty</font>"]</a>"
|
||||
dat += "<BR><A href='?src=[REF(src)];pouches=1'>Empty Pouches</A>"
|
||||
|
||||
if(handcuffed)
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
name = "\improper royal parasite"
|
||||
desc = "Inject this into one of your grown children to promote her to a Praetorian!"
|
||||
icon_state = "alien_medal"
|
||||
flags_1 = ABSTRACT_1|NODROP_1|DROPDEL_1
|
||||
item_flags = ABSTRACT | NODROP | DROPDEL
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
|
||||
/obj/item/queenpromote/attack(mob/living/M, mob/living/carbon/alien/humanoid/user)
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
if(start_T && end_T)
|
||||
add_logs(src, throwable_mob, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]")
|
||||
|
||||
else if(!(I.flags_1 & (NODROP_1|ABSTRACT_1)))
|
||||
else if(!(I.item_flags & (NODROP | ABSTRACT)))
|
||||
thrown_thing = I
|
||||
dropItemToGround(I)
|
||||
|
||||
@@ -200,13 +200,13 @@
|
||||
<HR>
|
||||
<B><FONT size=3>[name]</FONT></B>
|
||||
<HR>
|
||||
<BR><B>Head:</B> <A href='?src=[REF(src)];item=[SLOT_HEAD]'> [(head && !(head.flags_1&ABSTRACT_1)) ? head : "Nothing"]</A>
|
||||
<BR><B>Mask:</B> <A href='?src=[REF(src)];item=[SLOT_WEAR_MASK]'> [(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Nothing"]</A>
|
||||
<BR><B>Neck:</B> <A href='?src=[REF(src)];item=[SLOT_NECK]'> [(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Nothing"]</A>"}
|
||||
<BR><B>Head:</B> <A href='?src=[REF(src)];item=[SLOT_HEAD]'> [(head && !(head.item_flags & ABSTRACT)) ? head : "Nothing"]</A>
|
||||
<BR><B>Mask:</B> <A href='?src=[REF(src)];item=[SLOT_WEAR_MASK]'> [(wear_mask && !(wear_mask.item_flags & ABSTRACT)) ? wear_mask : "Nothing"]</A>
|
||||
<BR><B>Neck:</B> <A href='?src=[REF(src)];item=[SLOT_NECK]'> [(wear_neck && !(wear_neck.item_flags & ABSTRACT)) ? wear_neck : "Nothing"]</A>"}
|
||||
|
||||
for(var/i in 1 to held_items.len)
|
||||
var/obj/item/I = get_item_for_held_index(i)
|
||||
dat += "<BR><B>[get_held_index_name(i)]:</B></td><td><A href='?src=[REF(src)];item=[SLOT_HANDS];hand_index=[i]'>[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Nothing"]</a>"
|
||||
dat += "<BR><B>[get_held_index_name(i)]:</B></td><td><A href='?src=[REF(src)];item=[SLOT_HANDS];hand_index=[i]'>[(I && !(I.item_flags & ABSTRACT)) ? I : "Nothing"]</a>"
|
||||
|
||||
dat += "<BR><B>Back:</B> <A href='?src=[REF(src)];item=[SLOT_BACK]'>[back ? back : "Nothing"]</A>"
|
||||
|
||||
@@ -403,7 +403,7 @@
|
||||
return initial(pixel_y)
|
||||
|
||||
/mob/living/carbon/proc/accident(obj/item/I)
|
||||
if(!I || (I.flags_1 & (NODROP_1|ABSTRACT_1)))
|
||||
if(!I || (I.item_flags & (NODROP | ABSTRACT)))
|
||||
return
|
||||
|
||||
//dropItemToGround(I) CIT CHANGE - makes it so the item doesn't drop if the modifier rolls above 100
|
||||
@@ -497,15 +497,16 @@
|
||||
break
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/spew_organ(power = 5)
|
||||
if(!internal_organs.len)
|
||||
return //Guess we're out of organs
|
||||
var/obj/item/organ/guts = pick(internal_organs)
|
||||
var/turf/T = get_turf(src)
|
||||
guts.Remove(src)
|
||||
guts.forceMove(T)
|
||||
var/atom/throw_target = get_edge_target_turf(guts, dir)
|
||||
guts.throw_at(throw_target, power, 4, src)
|
||||
/mob/living/carbon/proc/spew_organ(power = 5, amt = 1)
|
||||
for(var/i in 1 to amt)
|
||||
if(!internal_organs.len)
|
||||
break //Guess we're out of organs!
|
||||
var/obj/item/organ/guts = pick(internal_organs)
|
||||
var/turf/T = get_turf(src)
|
||||
guts.Remove(src)
|
||||
guts.forceMove(T)
|
||||
var/atom/throw_target = get_edge_target_turf(guts, dir)
|
||||
guts.throw_at(throw_target, power, 4, src)
|
||||
|
||||
|
||||
/mob/living/carbon/fully_replace_character_name(oldname,newname)
|
||||
@@ -760,10 +761,10 @@
|
||||
drop_all_held_items()
|
||||
stop_pulling()
|
||||
throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed)
|
||||
SendSignal(COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed)
|
||||
else
|
||||
clear_alert("handcuffed")
|
||||
SendSignal(COMSIG_CLEAR_MOOD_EVENT, "handcuffed")
|
||||
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "handcuffed")
|
||||
update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed.
|
||||
update_inv_handcuffed()
|
||||
update_hud_handcuffed()
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
affecting = get_bodypart(ran_zone(user.zone_selected))
|
||||
if(!affecting) //missing limb? we select the first bodypart (you can never have zero, because of chest)
|
||||
affecting = bodyparts[1]
|
||||
I.SendSignal(COMSIG_ITEM_ATTACK_ZONE, src, user, affecting)
|
||||
SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting)
|
||||
send_item_attack_message(I, user, affecting.name)
|
||||
if(I.force)
|
||||
//CIT CHANGES START HERE - combatmode and resting checks
|
||||
@@ -284,7 +284,7 @@
|
||||
else
|
||||
M.visible_message("<span class='notice'>[M] hugs [src] to make [p_them()] feel better!</span>", \
|
||||
"<span class='notice'>You hug [src] to make [p_them()] feel better!</span>")
|
||||
SendSignal(COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug)
|
||||
AdjustStun(-60)
|
||||
AdjustKnockdown(-60)
|
||||
AdjustUnconscious(-60)
|
||||
@@ -349,7 +349,7 @@
|
||||
|
||||
/mob/living/carbon/soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 5, deafen_pwr = 15)
|
||||
var/list/reflist = list(intensity) // Need to wrap this in a list so we can pass a reference
|
||||
SendSignal(COMSIG_CARBON_SOUNDBANG, reflist)
|
||||
SEND_SIGNAL(src, COMSIG_CARBON_SOUNDBANG, reflist)
|
||||
intensity = reflist[1]
|
||||
var/ear_safety = get_ear_protection()
|
||||
var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n"
|
||||
|
||||
for(var/obj/item/I in held_items)
|
||||
if(!(I.flags_1 & ABSTRACT_1))
|
||||
if(!(I.item_flags & ABSTRACT))
|
||||
msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n"
|
||||
|
||||
if (back)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
//Hands
|
||||
for(var/obj/item/I in held_items)
|
||||
if(!(I.flags_1 & ABSTRACT_1))
|
||||
if(!(I.item_flags & ABSTRACT))
|
||||
msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n"
|
||||
|
||||
GET_COMPONENT(FR, /datum/component/forensics)
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
stat("Internal Atmosphere Info", internal.name)
|
||||
stat("Tank Pressure", internal.air_contents.return_pressure())
|
||||
stat("Distribution Pressure", internal.distribute_pressure)
|
||||
// var/mob/living/simple_animal/borer/B = has_brain_worms()
|
||||
|
||||
if(mind)
|
||||
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
if(changeling)
|
||||
@@ -115,42 +115,42 @@
|
||||
dat += "<table>"
|
||||
for(var/i in 1 to held_items.len)
|
||||
var/obj/item/I = get_item_for_held_index(i)
|
||||
dat += "<tr><td><B>[get_held_index_name(i)]:</B></td><td><A href='?src=[REF(src)];item=[SLOT_HANDS];hand_index=[i]'>[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "<font color=grey>Empty</font>"]</a></td></tr>"
|
||||
dat += "<tr><td><B>[get_held_index_name(i)]:</B></td><td><A href='?src=[REF(src)];item=[SLOT_HANDS];hand_index=[i]'>[(I && !(I.item_flags & ABSTRACT)) ? I : "<font color=grey>Empty</font>"]</a></td></tr>"
|
||||
dat += "<tr><td> </td></tr>"
|
||||
|
||||
dat += "<tr><td><B>Back:</B></td><td><A href='?src=[REF(src)];item=[SLOT_BACK]'>[(back && !(back.flags_1&ABSTRACT_1)) ? back : "<font color=grey>Empty</font>"]</A>"
|
||||
dat += "<tr><td><B>Back:</B></td><td><A href='?src=[REF(src)];item=[SLOT_BACK]'>[(back && !(back.item_flags & ABSTRACT)) ? back : "<font color=grey>Empty</font>"]</A>"
|
||||
if(has_breathable_mask && istype(back, /obj/item/tank))
|
||||
dat += " <A href='?src=[REF(src)];internal=[SLOT_BACK]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
|
||||
dat += "</td></tr><tr><td> </td></tr>"
|
||||
|
||||
dat += "<tr><td><B>Head:</B></td><td><A href='?src=[REF(src)];item=[SLOT_HEAD]'>[(head && !(head.flags_1&ABSTRACT_1)) ? head : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Head:</B></td><td><A href='?src=[REF(src)];item=[SLOT_HEAD]'>[(head && !(head.item_flags & ABSTRACT)) ? head : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(SLOT_WEAR_MASK in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Mask:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Mask:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WEAR_MASK]'>[(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Mask:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WEAR_MASK]'>[(wear_mask && !(wear_mask.item_flags & ABSTRACT)) ? wear_mask : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(SLOT_NECK in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Neck:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Neck:</B></td><td><A href='?src=[REF(src)];item=[SLOT_NECK]'>[(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Neck:</B></td><td><A href='?src=[REF(src)];item=[SLOT_NECK]'>[(wear_neck && !(wear_neck.item_flags & ABSTRACT)) ? wear_neck : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(SLOT_GLASSES in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Eyes:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Eyes:</B></td><td><A href='?src=[REF(src)];item=[SLOT_GLASSES]'>[(glasses && !(glasses.flags_1&ABSTRACT_1)) ? glasses : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Eyes:</B></td><td><A href='?src=[REF(src)];item=[SLOT_GLASSES]'>[(glasses && !(glasses.item_flags & ABSTRACT)) ? glasses : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(SLOT_EARS in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Ears:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Ears:</B></td><td><A href='?src=[REF(src)];item=[SLOT_EARS]'>[(ears && !(ears.flags_1&ABSTRACT_1)) ? ears : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Ears:</B></td><td><A href='?src=[REF(src)];item=[SLOT_EARS]'>[(ears && !(ears.item_flags & ABSTRACT)) ? ears : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
dat += "<tr><td> </td></tr>"
|
||||
|
||||
dat += "<tr><td><B>Exosuit:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WEAR_SUIT]'>[(wear_suit && !(wear_suit.flags_1&ABSTRACT_1)) ? wear_suit : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Exosuit:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WEAR_SUIT]'>[(wear_suit && !(wear_suit.item_flags & ABSTRACT)) ? wear_suit : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
if(wear_suit)
|
||||
dat += "<tr><td> ↳<B>Suit Storage:</B></td><td><A href='?src=[REF(src)];item=[SLOT_S_STORE]'>[(s_store && !(s_store.flags_1&ABSTRACT_1)) ? s_store : "<font color=grey>Empty</font>"]</A>"
|
||||
dat += "<tr><td> ↳<B>Suit Storage:</B></td><td><A href='?src=[REF(src)];item=[SLOT_S_STORE]'>[(s_store && !(s_store.item_flags & ABSTRACT)) ? s_store : "<font color=grey>Empty</font>"]</A>"
|
||||
if(has_breathable_mask && istype(s_store, /obj/item/tank))
|
||||
dat += " <A href='?src=[REF(src)];internal=[SLOT_S_STORE]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
dat += "</td></tr>"
|
||||
@@ -160,30 +160,30 @@
|
||||
if(SLOT_SHOES in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Shoes:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Shoes:</B></td><td><A href='?src=[REF(src)];item=[SLOT_SHOES]'>[(shoes && !(shoes.flags_1&ABSTRACT_1)) ? shoes : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Shoes:</B></td><td><A href='?src=[REF(src)];item=[SLOT_SHOES]'>[(shoes && !(shoes.item_flags & ABSTRACT)) ? shoes : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(SLOT_GLOVES in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Gloves:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Gloves:</B></td><td><A href='?src=[REF(src)];item=[SLOT_GLOVES]'>[(gloves && !(gloves.flags_1&ABSTRACT_1)) ? gloves : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Gloves:</B></td><td><A href='?src=[REF(src)];item=[SLOT_GLOVES]'>[(gloves && !(gloves.item_flags & ABSTRACT)) ? gloves : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(SLOT_W_UNIFORM in obscured)
|
||||
dat += "<tr><td><font color=grey><B>Uniform:</B></font></td><td><font color=grey>Obscured</font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td><B>Uniform:</B></td><td><A href='?src=[REF(src)];item=[SLOT_W_UNIFORM]'>[(w_uniform && !(w_uniform.flags_1&ABSTRACT_1)) ? w_uniform : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td><B>Uniform:</B></td><td><A href='?src=[REF(src)];item=[SLOT_W_UNIFORM]'>[(w_uniform && !(w_uniform.item_flags & ABSTRACT)) ? w_uniform : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (SLOT_W_UNIFORM in obscured))
|
||||
dat += "<tr><td><font color=grey> ↳<B>Pockets:</B></font></td></tr>"
|
||||
dat += "<tr><td><font color=grey> ↳<B>ID:</B></font></td></tr>"
|
||||
dat += "<tr><td><font color=grey> ↳<B>Belt:</B></font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td> ↳<B>Belt:</B></td><td><A href='?src=[REF(src)];item=[SLOT_BELT]'>[(belt && !(belt.flags_1&ABSTRACT_1)) ? belt : "<font color=grey>Empty</font>"]</A>"
|
||||
dat += "<tr><td> ↳<B>Belt:</B></td><td><A href='?src=[REF(src)];item=[SLOT_BELT]'>[(belt && !(belt.item_flags & ABSTRACT)) ? belt : "<font color=grey>Empty</font>"]</A>"
|
||||
if(has_breathable_mask && istype(belt, /obj/item/tank))
|
||||
dat += " <A href='?src=[REF(src)];internal=[SLOT_BELT]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
dat += "</td></tr>"
|
||||
dat += "<tr><td> ↳<B>Pockets:</B></td><td><A href='?src=[REF(src)];pockets=left'>[(l_store && !(l_store.flags_1&ABSTRACT_1)) ? "Left (Full)" : "<font color=grey>Left (Empty)</font>"]</A>"
|
||||
dat += " <A href='?src=[REF(src)];pockets=right'>[(r_store && !(r_store.flags_1&ABSTRACT_1)) ? "Right (Full)" : "<font color=grey>Right (Empty)</font>"]</A></td></tr>"
|
||||
dat += "<tr><td> ↳<B>ID:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WEAR_ID]'>[(wear_id && !(wear_id.flags_1&ABSTRACT_1)) ? wear_id : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
dat += "<tr><td> ↳<B>Pockets:</B></td><td><A href='?src=[REF(src)];pockets=left'>[(l_store && !(l_store.item_flags & ABSTRACT)) ? "Left (Full)" : "<font color=grey>Left (Empty)</font>"]</A>"
|
||||
dat += " <A href='?src=[REF(src)];pockets=right'>[(r_store && !(r_store.item_flags & ABSTRACT)) ? "Right (Full)" : "<font color=grey>Right (Empty)</font>"]</A></td></tr>"
|
||||
dat += "<tr><td> ↳<B>ID:</B></td><td><A href='?src=[REF(src)];item=[SLOT_WEAR_ID]'>[(wear_id && !(wear_id.item_flags & ABSTRACT)) ? wear_id : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(handcuffed)
|
||||
dat += "<tr><td><B>Handcuffed:</B> <A href='?src=[REF(src)];item=[SLOT_HANDCUFFED]'>Remove</A></td></tr>"
|
||||
@@ -230,7 +230,7 @@
|
||||
usr.visible_message("[usr] successfully rips [I] out of [usr.p_their()] [L.name]!","<span class='notice'>You successfully remove [I] from your [L.name].</span>")
|
||||
if(!has_embedded_objects())
|
||||
clear_alert("embeddedobject")
|
||||
usr.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
|
||||
SEND_SIGNAL(usr, COMSIG_CLEAR_MOOD_EVENT, "embedded")
|
||||
return
|
||||
|
||||
if(href_list["item"])
|
||||
@@ -246,11 +246,11 @@
|
||||
var/obj/item/place_item = usr.get_active_held_item() // Item to place in the pocket, if it's empty
|
||||
|
||||
var/delay_denominator = 1
|
||||
if(pocket_item && !(pocket_item.flags_1&ABSTRACT_1))
|
||||
if(pocket_item.flags_1 & NODROP_1)
|
||||
if(pocket_item && !(pocket_item.item_flags & ABSTRACT))
|
||||
if(pocket_item.item_flags & NODROP)
|
||||
to_chat(usr, "<span class='warning'>You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!</span>")
|
||||
to_chat(usr, "<span class='notice'>You try to empty [src]'s [pocket_side] pocket.</span>")
|
||||
else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.flags_1&ABSTRACT_1))
|
||||
else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.item_flags & ABSTRACT))
|
||||
to_chat(usr, "<span class='notice'>You try to place [place_item] into [src]'s [pocket_side] pocket.</span>")
|
||||
delay_denominator = 4
|
||||
else
|
||||
@@ -274,7 +274,7 @@
|
||||
// Display a warning if the user mocks up
|
||||
to_chat(src, "<span class='warning'>You feel your [pocket_side] pocket being fumbled with!</span>")
|
||||
|
||||
..()
|
||||
..()
|
||||
|
||||
|
||||
///////HUDs///////
|
||||
@@ -387,7 +387,7 @@
|
||||
R = find_record("name", perpname, GLOB.data_core.security)
|
||||
if(R)
|
||||
if(href_list["status"])
|
||||
var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel")
|
||||
var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Paroled", "Discharged", "Cancel")
|
||||
if(setcriminal != "Cancel")
|
||||
if(R)
|
||||
if(H.canUseHUD())
|
||||
@@ -590,7 +590,7 @@
|
||||
threatcount += 5
|
||||
if("Incarcerated")
|
||||
threatcount += 2
|
||||
if("Parolled")
|
||||
if("Paroled")
|
||||
threatcount += 2
|
||||
|
||||
//Check for dresscode violations
|
||||
@@ -662,7 +662,7 @@
|
||||
return
|
||||
|
||||
src.visible_message("[src] performs CPR on [C.name]!", "<span class='notice'>You perform CPR on [C.name].</span>")
|
||||
SendSignal(COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr)
|
||||
C.cpr_time = world.time
|
||||
add_logs(src, C, "CPRed")
|
||||
|
||||
@@ -689,7 +689,7 @@
|
||||
if(strength < CLEAN_STRENGTH_BLOOD)
|
||||
return
|
||||
if(gloves)
|
||||
if(gloves.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
|
||||
if(SEND_SIGNAL(gloves, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
|
||||
update_inv_gloves()
|
||||
else
|
||||
if(bloody_hands)
|
||||
@@ -727,9 +727,8 @@
|
||||
to_chat(src, "<span class='warning'>You can't do that right now!</span>")
|
||||
return FALSE
|
||||
if(!Adjacent(M) && (M.loc != src))
|
||||
if((be_close == 0) && (dna.check_mutation(TK)))
|
||||
if(tkMaxRangeCheck(src, M))
|
||||
return TRUE
|
||||
if((be_close == 0) || (dna.check_mutation(TK) && tkMaxRangeCheck(src, M)))
|
||||
return TRUE
|
||||
to_chat(src, "<span class='warning'>You are too far away!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
I.forceMove(src)
|
||||
L.receive_damage(I.w_class*I.embedding.embedded_impact_pain_multiplier)
|
||||
visible_message("<span class='danger'>[I] embeds itself in [src]'s [L.name]!</span>","<span class='userdanger'>[I] embeds itself in your [L.name]!</span>")
|
||||
SendSignal(COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded)
|
||||
hitpush = FALSE
|
||||
skipcatch = TRUE //can't catch the now embedded item
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
affecting = get_bodypart(ran_zone(user.zone_selected))
|
||||
var/target_area = parse_zone(check_zone(user.zone_selected)) //our intended target
|
||||
|
||||
I.SendSignal(COMSIG_ITEM_ATTACK_ZONE, src, user, affecting)
|
||||
SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting)
|
||||
|
||||
SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[I.force]", "[I.type]"))
|
||||
SSblackbox.record_feedback("tally", "zone_targeted", 1, target_area)
|
||||
|
||||
@@ -67,6 +67,6 @@
|
||||
S.step_action()
|
||||
|
||||
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0) //Temporary laziness thing. Will change to handles by species reee.
|
||||
if(..())
|
||||
return 1
|
||||
return dna.species.space_move(src)
|
||||
if(dna.species.space_move(src))
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
@@ -66,14 +66,14 @@
|
||||
adjust_blurriness(-1)
|
||||
|
||||
if (getBrainLoss() >= 60 && !incapacitated(TRUE))
|
||||
SendSignal(COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage)
|
||||
if(prob(3))
|
||||
if(prob(25))
|
||||
emote("drool")
|
||||
else
|
||||
say(pick_list_replacements(BRAIN_DAMAGE_FILE, "brain_damage"))
|
||||
else
|
||||
SendSignal(COMSIG_CLEAR_MOOD_EVENT, "brain_damage")
|
||||
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "brain_damage")
|
||||
|
||||
/mob/living/carbon/human/handle_mutations_and_radiation()
|
||||
if(!dna || !dna.species.handle_mutations_and_radiation(src))
|
||||
@@ -313,7 +313,7 @@
|
||||
visible_message("<span class='danger'>[I] falls out of [name]'s [BP.name]!</span>","<span class='userdanger'>[I] falls out of your [BP.name]!</span>")
|
||||
if(!has_embedded_objects())
|
||||
clear_alert("embeddedobject")
|
||||
SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded")
|
||||
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "embedded")
|
||||
|
||||
/mob/living/carbon/human/proc/handle_active_genes()
|
||||
for(var/datum/mutation/human/HM in dna.mutations)
|
||||
|
||||
@@ -970,7 +970,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
return FALSE
|
||||
return equip_delay_self_check(I, H, bypass_equip_delay_self)
|
||||
if(SLOT_L_STORE)
|
||||
if(I.flags_1 & NODROP_1) //Pockets aren't visible, so you can't move NODROP_1 items into them.
|
||||
if(I.item_flags & NODROP) //Pockets aren't visible, so you can't move NODROP_1 items into them.
|
||||
return FALSE
|
||||
if(H.l_store)
|
||||
return FALSE
|
||||
@@ -986,7 +986,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) )
|
||||
return TRUE
|
||||
if(SLOT_R_STORE)
|
||||
if(I.flags_1 & NODROP_1)
|
||||
if(I.item_flags & NODROP)
|
||||
return FALSE
|
||||
if(H.r_store)
|
||||
return FALSE
|
||||
@@ -1003,7 +1003,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(SLOT_S_STORE)
|
||||
if(I.flags_1 & NODROP_1)
|
||||
if(I.item_flags & NODROP)
|
||||
return FALSE
|
||||
if(H.s_store)
|
||||
return FALSE
|
||||
@@ -1040,7 +1040,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
return TRUE
|
||||
if(SLOT_IN_BACKPACK)
|
||||
if(H.back)
|
||||
if(H.back.SendSignal(COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE))
|
||||
if(SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE))
|
||||
return TRUE
|
||||
return FALSE
|
||||
return FALSE //Unsupported slot
|
||||
@@ -1138,22 +1138,22 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
switch(H.nutrition)
|
||||
if(NUTRITION_LEVEL_FULL to INFINITY)
|
||||
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fat)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fat)
|
||||
H.throw_alert("nutrition", /obj/screen/alert/fat)
|
||||
if(NUTRITION_LEVEL_WELL_FED to NUTRITION_LEVEL_FULL)
|
||||
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/wellfed)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/wellfed)
|
||||
H.clear_alert("nutrition")
|
||||
if( NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED)
|
||||
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fed)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fed)
|
||||
H.clear_alert("nutrition")
|
||||
if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED)
|
||||
H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "nutrition")
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "nutrition")
|
||||
H.clear_alert("nutrition")
|
||||
if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
|
||||
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/hungry)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/hungry)
|
||||
H.throw_alert("nutrition", /obj/screen/alert/hungry)
|
||||
if(0 to NUTRITION_LEVEL_STARVING)
|
||||
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/starving)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/starving)
|
||||
H.throw_alert("nutrition", /obj/screen/alert/starving)
|
||||
|
||||
/datum/species/proc/update_health_hud(mob/living/carbon/human/H)
|
||||
@@ -1211,8 +1211,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(H.movement_type & FLYING)
|
||||
flight = 1
|
||||
|
||||
if(H.has_gravity())
|
||||
gravity = TRUE
|
||||
gravity = H.has_gravity()
|
||||
|
||||
if(!flightpack && gravity) //Check for chemicals and innate speedups and slowdowns if we're moving using our body and not a flying suit
|
||||
if(H.has_trait(TRAIT_GOTTAGOFAST))
|
||||
@@ -1265,6 +1264,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if((hungry >= 70) && !flight) //Being hungry will still allow you to use a flightsuit/wings.
|
||||
. += hungry / 50
|
||||
|
||||
//Moving in high gravity is very slow (Flying too)
|
||||
if(gravity > STANDARD_GRAVITY)
|
||||
var/grav_force = min(gravity - STANDARD_GRAVITY,3)
|
||||
. += 1 + grav_force
|
||||
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
|
||||
if(mood && !flight) //How can depression slow you down if you can just fly away from your problems?
|
||||
switch(mood.sanity)
|
||||
@@ -1457,7 +1461,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
playsound(target, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
target.visible_message("<span class='danger'>[user] attempted to disarm [target]!</span>", \
|
||||
"<span class='userdanger'>[user] attemped to disarm [target]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
|
||||
add_logs(user, target, "attempted to disarm")
|
||||
|
||||
|
||||
/datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
|
||||
@@ -1701,9 +1705,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
// +/- 50 degrees from 310K is the 'safe' zone, where no damage is dealt.
|
||||
if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTHEAT))
|
||||
//Body temperature is too hot.
|
||||
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold")
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot)
|
||||
|
||||
var/burn_damage
|
||||
H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "cold")
|
||||
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot)
|
||||
switch(H.bodytemperature)
|
||||
if(BODYTEMP_HEAT_DAMAGE_LIMIT to 400)
|
||||
H.throw_alert("temp", /obj/screen/alert/hot, 1)
|
||||
@@ -1723,8 +1729,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.apply_damage(burn_damage, BURN)
|
||||
|
||||
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTCOLD))
|
||||
H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hot")
|
||||
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold)
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot")
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold)
|
||||
switch(H.bodytemperature)
|
||||
if(200 to BODYTEMP_COLD_DAMAGE_LIMIT)
|
||||
H.throw_alert("temp", /obj/screen/alert/cold, 1)
|
||||
@@ -1738,8 +1744,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
else
|
||||
H.clear_alert("temp")
|
||||
H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "cold")
|
||||
H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hot")
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold")
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot")
|
||||
|
||||
var/pressure = environment.return_pressure()
|
||||
var/adjusted_pressure = H.calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
|
||||
@@ -1833,7 +1839,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.adjust_bodytemperature(11)
|
||||
else
|
||||
H.adjust_bodytemperature(BODYTEMP_HEATING_MAX + (H.fire_stacks * 12))
|
||||
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
|
||||
|
||||
/datum/species/proc/CanIgniteMob(mob/living/carbon/human/H)
|
||||
if(H.has_trait(TRAIT_NOFIRE))
|
||||
@@ -1860,12 +1866,3 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
/datum/species/proc/negates_gravity(mob/living/carbon/human/H)
|
||||
return 0
|
||||
|
||||
|
||||
#undef HEAT_DAMAGE_LEVEL_1
|
||||
#undef HEAT_DAMAGE_LEVEL_2
|
||||
#undef HEAT_DAMAGE_LEVEL_3
|
||||
|
||||
#undef COLD_DAMAGE_LEVEL_1
|
||||
#undef COLD_DAMAGE_LEVEL_2
|
||||
#undef COLD_DAMAGE_LEVEL_3
|
||||
|
||||
@@ -24,11 +24,6 @@
|
||||
H.endTailWag()
|
||||
. = ..()
|
||||
|
||||
/datum/species/human/space_move(mob/living/carbon/human/H)
|
||||
var/obj/item/flightpack/F = H.get_flightpack()
|
||||
if(istype(F) && (F.flight) && F.allow_thrust(0.01, src))
|
||||
return TRUE
|
||||
|
||||
/datum/species/human/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
|
||||
if(H.dna.features["ears"] == "Cat")
|
||||
mutantears = /obj/item/organ/ears/cat
|
||||
|
||||
@@ -669,6 +669,8 @@
|
||||
|
||||
/datum/action/innate/project_thought/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(H.stat == DEAD)
|
||||
return
|
||||
if(!is_species(H, /datum/species/jelly/stargazer))
|
||||
return
|
||||
CHECK_DNA_AND_SPECIES(H)
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
armour_penetration = 35
|
||||
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi'
|
||||
flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1
|
||||
item_flags = ABSTRACT | NODROP | DROPDEL
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
sharpness = IS_SHARP
|
||||
|
||||
@@ -216,4 +216,4 @@
|
||||
playsound(src, 'sound/items/welder.ogg', 50, 1)
|
||||
|
||||
#undef HEART_SPECIAL_SHADOWIFY
|
||||
#undef HEART_RESPAWN_THRESHHOLD
|
||||
#undef HEART_RESPAWN_THRESHHOLD
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
put_in_hands(I)
|
||||
update_inv_hands()
|
||||
if(SLOT_IN_BACKPACK)
|
||||
if(!back.SendSignal(COMSIG_TRY_STORAGE_INSERT, I, src, TRUE))
|
||||
if(!SEND_SIGNAL(back, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE))
|
||||
not_handled = TRUE
|
||||
else
|
||||
not_handled = TRUE
|
||||
@@ -137,3 +137,6 @@
|
||||
update_inv_wear_mask()
|
||||
update_inv_head()
|
||||
|
||||
/mob/living/carbon/proc/get_holding_bodypart_of_item(obj/item/I)
|
||||
var/index = get_held_index_of_item(I)
|
||||
return index && hand_bodyparts[index]
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
adjustOxyLoss(3)
|
||||
failed_last_breath = 1
|
||||
throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy)
|
||||
SendSignal(COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
|
||||
|
||||
else //Enough oxygen
|
||||
failed_last_breath = 0
|
||||
@@ -164,7 +164,7 @@
|
||||
adjustOxyLoss(-5)
|
||||
oxygen_used = breath_gases[/datum/gas/oxygen][MOLES]
|
||||
clear_alert("not_enough_oxy")
|
||||
SendSignal(COMSIG_CLEAR_MOOD_EVENT, "suffocation")
|
||||
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "suffocation")
|
||||
|
||||
breath_gases[/datum/gas/oxygen][MOLES] -= oxygen_used
|
||||
breath_gases[/datum/gas/carbon_dioxide][MOLES] += oxygen_used
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
/mob/living/carbon/monkey/proc/handle_combat()
|
||||
if(pickupTarget)
|
||||
if(restrained() || blacklistItems[pickupTarget] || (pickupTarget.flags_1 & NODROP_1))
|
||||
if(restrained() || blacklistItems[pickupTarget] || (pickupTarget.item_flags & NODROP))
|
||||
pickupTarget = null
|
||||
else
|
||||
pickupTimer++
|
||||
@@ -225,7 +225,7 @@
|
||||
// check if target has a weapon
|
||||
var/obj/item/W
|
||||
for(var/obj/item/I in target.held_items)
|
||||
if(!(I.flags_1 & ABSTRACT_1))
|
||||
if(!(I.item_flags & ABSTRACT))
|
||||
W = I
|
||||
break
|
||||
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point
|
||||
#define HEAT_DAMAGE_LEVEL_2 3 //Amount of damage applied when your body temperature passes the 400K point
|
||||
#define HEAT_DAMAGE_LEVEL_3 10 //Amount of damage applied when your body temperature passes the 460K point and you are on fire
|
||||
|
||||
#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point
|
||||
#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point
|
||||
#define COLD_DAMAGE_LEVEL_3 3 //Amount of damage applied when your body temperature passes the 120K point
|
||||
|
||||
/mob/living/carbon/monkey
|
||||
|
||||
@@ -175,12 +169,4 @@
|
||||
I.take_damage(fire_stacks, BURN, "fire", 0)
|
||||
|
||||
adjust_bodytemperature(BODYTEMP_HEATING_MAX)
|
||||
SendSignal(COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
|
||||
|
||||
#undef HEAT_DAMAGE_LEVEL_1
|
||||
#undef HEAT_DAMAGE_LEVEL_2
|
||||
#undef HEAT_DAMAGE_LEVEL_3
|
||||
|
||||
#undef COLD_DAMAGE_LEVEL_1
|
||||
#undef COLD_DAMAGE_LEVEL_2
|
||||
#undef COLD_DAMAGE_LEVEL_3
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
|
||||
|
||||
@@ -45,11 +45,11 @@
|
||||
if(druggy)
|
||||
overlay_fullscreen("high", /obj/screen/fullscreen/high)
|
||||
throw_alert("high", /obj/screen/alert/high)
|
||||
SendSignal(COMSIG_ADD_MOOD_EVENT, "high", /datum/mood_event/drugs/high)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "high", /datum/mood_event/drugs/high)
|
||||
else
|
||||
clear_fullscreen("high")
|
||||
clear_alert("high")
|
||||
SendSignal(COMSIG_CLEAR_MOOD_EVENT, "high")
|
||||
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "high")
|
||||
|
||||
/mob/living/carbon/set_drugginess(amount)
|
||||
druggy = max(amount, 0)
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
if(wear_mask)
|
||||
if(!(head && (head.flags_inv & HIDEMASK)))
|
||||
overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = ((wear_mask.icon_override) ? wear_mask.icon_override : 'icons/mob/mask.dmi'))
|
||||
overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi')
|
||||
update_hud_wear_mask(wear_mask)
|
||||
|
||||
apply_overlay(FACEMASK_LAYER)
|
||||
@@ -138,7 +138,7 @@
|
||||
|
||||
if(wear_neck)
|
||||
if(!(head && (head.flags_inv & HIDENECK)))
|
||||
overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = ((wear_neck.icon_override) ? wear_neck.icon_override : 'icons/mob/neck.dmi'))
|
||||
overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi')
|
||||
update_hud_neck(wear_neck)
|
||||
|
||||
apply_overlay(NECK_LAYER)
|
||||
@@ -151,7 +151,7 @@
|
||||
inv.update_icon()
|
||||
|
||||
if(back)
|
||||
overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = ((back.icon_override) ? back.icon_override : 'icons/mob/back.dmi'))
|
||||
overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi')
|
||||
update_hud_back(back)
|
||||
|
||||
apply_overlay(BACK_LAYER)
|
||||
@@ -167,7 +167,7 @@
|
||||
inv.update_icon()
|
||||
|
||||
if(head)
|
||||
overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = ((head.icon_override) ? head.icon_override : 'icons/mob/head.dmi'))
|
||||
overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi')
|
||||
update_hud_head(head)
|
||||
|
||||
apply_overlay(HEAD_LAYER)
|
||||
@@ -235,22 +235,11 @@
|
||||
if(limb_icon_cache[icon_render_key])
|
||||
load_limb_from_cache()
|
||||
return
|
||||
//Taur code goes here, since humans just inherit this proc
|
||||
var/is_taur = FALSE
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None"))
|
||||
is_taur = TRUE
|
||||
|
||||
//GENERATE NEW LIMBS
|
||||
var/list/new_limbs = list()
|
||||
for(var/X in bodyparts)
|
||||
var/obj/item/bodypart/BP = X
|
||||
|
||||
if(istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg))
|
||||
if(is_taur)
|
||||
continue
|
||||
|
||||
new_limbs += BP.get_limb_icon()
|
||||
if(new_limbs.len)
|
||||
overlays_standing[BODYPARTS_LAYER] = new_limbs
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/obj/item/I in contents)
|
||||
I.on_mob_death(src, gibbed)
|
||||
if(mind && mind.name && mind.active && (!(T.flags_1 & NO_DEATHRATTLE_1)))
|
||||
if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf))
|
||||
var/rendered = "<span class='deadsay'><b>[mind.name]</b> has died at <b>[get_area_name(T)]</b>.</span>"
|
||||
deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
|
||||
if(mind)
|
||||
|
||||
@@ -412,6 +412,8 @@
|
||||
if(jobban_isbanned(user, "emote"))
|
||||
to_chat(user, "You cannot send custom emotes (banned).")
|
||||
return FALSE
|
||||
else if(QDELETED(user))
|
||||
return FALSE
|
||||
else if(user.client && user.client.prefs.muted & MUTE_IC)
|
||||
to_chat(user, "You cannot send IC messages (muted).")
|
||||
return FALSE
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
desc = "Yell at coderbrush."
|
||||
icon = null
|
||||
icon_state = ""
|
||||
flags_1 = DROPDEL_1
|
||||
item_flags = DROPDEL
|
||||
var/mob/living/held_mob
|
||||
var/can_head = TRUE
|
||||
var/destroying = FALSE
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
//stuff in the stomach
|
||||
handle_stomach()
|
||||
|
||||
update_gravity(mob_has_gravity())
|
||||
handle_gravity()
|
||||
|
||||
if(machine)
|
||||
machine.check_eye(src)
|
||||
@@ -110,7 +110,7 @@
|
||||
ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire
|
||||
return
|
||||
var/turf/location = get_turf(src)
|
||||
location.hotspot_expose(700, 50, 1)
|
||||
location.hotspot_expose(700, 10, 1)
|
||||
|
||||
/mob/living/proc/handle_stomach()
|
||||
return
|
||||
@@ -137,3 +137,26 @@
|
||||
|
||||
/mob/living/proc/update_damage_hud()
|
||||
return
|
||||
|
||||
/mob/living/proc/handle_gravity()
|
||||
var/gravity = mob_has_gravity()
|
||||
update_gravity(gravity)
|
||||
|
||||
if(gravity > STANDARD_GRAVITY)
|
||||
gravity_animate()
|
||||
handle_high_gravity(gravity)
|
||||
|
||||
/mob/living/proc/gravity_animate()
|
||||
if(!get_filter("gravity"))
|
||||
add_filter("gravity",1,list("type"="motion_blur", "x"=0, "y"=0))
|
||||
INVOKE_ASYNC(src, .proc/gravity_pulse_animation)
|
||||
|
||||
/mob/living/proc/gravity_pulse_animation()
|
||||
animate(get_filter("gravity"), y = 1, time = 10)
|
||||
sleep(10)
|
||||
animate(get_filter("gravity"), y = 0, time = 10)
|
||||
|
||||
/mob/living/proc/handle_high_gravity(gravity)
|
||||
if(gravity >= GRAVITY_DAMAGE_TRESHOLD) //Aka gravity values of 3 or more
|
||||
var/grav_stregth = gravity - GRAVITY_DAMAGE_TRESHOLD
|
||||
adjustBruteLoss(min(grav_stregth,3))
|
||||
@@ -368,7 +368,7 @@
|
||||
ret |= contents //add our contents
|
||||
for(var/i in ret.Copy()) //iterate storage objects
|
||||
var/atom/A = i
|
||||
A.SendSignal(COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret)
|
||||
SEND_SIGNAL(A, COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret)
|
||||
for(var/obj/item/folder/F in ret.Copy()) //very snowflakey-ly iterate folders
|
||||
ret |= F.contents
|
||||
return ret
|
||||
@@ -466,21 +466,6 @@
|
||||
/mob/living/proc/update_damage_overlays()
|
||||
return
|
||||
|
||||
/mob/living/proc/Examine_OOC()
|
||||
set name = "Examine Meta-Info (OOC)"
|
||||
set category = "OOC"
|
||||
set src in view()
|
||||
|
||||
if(CONFIG_GET(flag/allow_metadata))
|
||||
if(client)
|
||||
to_chat(src, "[src]'s Metainfo:<br>[client.prefs.metadata]")
|
||||
else
|
||||
to_chat(src, "[src] does not have any stored information!")
|
||||
else
|
||||
to_chat(src, "OOC Metadata is not supported by this server!")
|
||||
|
||||
return
|
||||
|
||||
/mob/living/Move(atom/newloc, direct)
|
||||
if (buckled && buckled.loc != newloc) //not updating position
|
||||
if (!buckled.anchored)
|
||||
@@ -604,6 +589,7 @@
|
||||
return
|
||||
changeNext_move(CLICK_CD_RESIST)
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_RESIST, src)
|
||||
//resisting grabs (as if it helps anyone...)
|
||||
if(!restrained(ignore_grab = 1) && pulledby)
|
||||
visible_message("<span class='danger'>[src] resists against [pulledby]'s grip!</span>")
|
||||
@@ -623,14 +609,6 @@
|
||||
var/obj/C = loc
|
||||
C.container_resist(src)
|
||||
|
||||
else if(IsFrozen())
|
||||
to_chat(src, "You start breaking out of the ice cube!")
|
||||
if(do_mob(src, src, 40))
|
||||
if(IsFrozen())
|
||||
to_chat(src, "You break out of the ice cube!")
|
||||
remove_status_effect(/datum/status_effect/freon)
|
||||
update_canmove()
|
||||
|
||||
else if(canmove)
|
||||
if(on_fire)
|
||||
resist_fire() //stop, drop, and roll
|
||||
@@ -673,9 +651,15 @@
|
||||
if(!SSticker.HasRoundStarted())
|
||||
return
|
||||
if(has_gravity)
|
||||
clear_alert("weightless")
|
||||
if(has_gravity == 1)
|
||||
clear_alert("gravity")
|
||||
else
|
||||
if(has_gravity >= GRAVITY_DAMAGE_TRESHOLD)
|
||||
throw_alert("gravity", /obj/screen/alert/veryhighgravity)
|
||||
else
|
||||
throw_alert("gravity", /obj/screen/alert/highgravity)
|
||||
else
|
||||
throw_alert("weightless", /obj/screen/alert/weightless)
|
||||
throw_alert("gravity", /obj/screen/alert/weightless)
|
||||
if(!override && !is_flying())
|
||||
float(!has_gravity)
|
||||
|
||||
@@ -697,7 +681,7 @@
|
||||
// The src mob is trying to strip an item from someone
|
||||
// Override if a certain type of mob should be behave differently when stripping items (can't, for example)
|
||||
/mob/living/stripPanelUnequip(obj/item/what, mob/who, where)
|
||||
if(what.flags_1 & NODROP_1)
|
||||
if(what.item_flags & NODROP)
|
||||
to_chat(src, "<span class='warning'>You can't remove \the [what.name], it appears to be stuck!</span>")
|
||||
return
|
||||
who.visible_message("<span class='danger'>[src] tries to remove [who]'s [what.name].</span>", \
|
||||
@@ -718,7 +702,7 @@
|
||||
// Override if a certain mob should be behave differently when placing items (can't, for example)
|
||||
/mob/living/stripPanelEquip(obj/item/what, mob/who, where)
|
||||
what = src.get_active_held_item()
|
||||
if(what && (what.flags_1 & NODROP_1))
|
||||
if(what && (what.item_flags & NODROP))
|
||||
to_chat(src, "<span class='warning'>You can't put \the [what.name] on [who], it's stuck to your hand!</span>")
|
||||
return
|
||||
if(what)
|
||||
@@ -831,7 +815,6 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
/mob/living/proc/update_stamina()
|
||||
return
|
||||
/*
|
||||
@@ -928,6 +911,7 @@
|
||||
new/obj/effect/dummy/fire(src)
|
||||
throw_alert("fire", /obj/screen/alert/fire)
|
||||
update_fire()
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_IGNITED,src)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -938,7 +922,8 @@
|
||||
for(var/obj/effect/dummy/fire/F in src)
|
||||
qdel(F)
|
||||
clear_alert("fire")
|
||||
SendSignal(COMSIG_CLEAR_MOOD_EVENT, "on_fire")
|
||||
SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "on_fire")
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_EXTINGUISHED, src)
|
||||
update_fire()
|
||||
|
||||
/mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person
|
||||
@@ -1149,6 +1134,9 @@
|
||||
|
||||
/mob/living/vv_edit_var(var_name, var_value)
|
||||
switch(var_name)
|
||||
if ("maxHealth")
|
||||
if (!isnum(var_value) || var_value <= 0)
|
||||
return FALSE
|
||||
if("stat")
|
||||
if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life
|
||||
GLOB.dead_mob_list -= src
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
var/zone = ran_zone(BODY_ZONE_CHEST, 65)//Hits a random part of the body, geared towards the chest
|
||||
var/dtype = BRUTE
|
||||
var/volume = I.get_volume_by_throwforce_and_or_w_class()
|
||||
I.SendSignal(COMSIG_MOVABLE_IMPACT_ZONE, src, zone)
|
||||
SEND_SIGNAL(I, COMSIG_MOVABLE_IMPACT_ZONE, src, zone)
|
||||
dtype = I.damtype
|
||||
|
||||
if (I.throwforce > 0) //If the weapon's throwforce is greater than zero...
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
job = "AI"
|
||||
|
||||
create_eye()
|
||||
rename_self("ai")
|
||||
apply_pref_name("ai")
|
||||
|
||||
holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"default"))
|
||||
|
||||
@@ -824,7 +824,7 @@
|
||||
//apc_override is needed here because AIs use their own APC when depowered
|
||||
return (GLOB.cameranet && GLOB.cameranet.checkTurfVis(get_turf_pixel(A))) || apc_override
|
||||
//AI is carded/shunted
|
||||
//view(src) returns nothing for carded/shunted AIs and they have x-ray vision so just use get_dist
|
||||
//view(src) returns nothing for carded/shunted AIs and they have X-ray vision so just use get_dist
|
||||
var/list/viewscale = getviewsize(client.view)
|
||||
return get_dist(src, A) <= max(viewscale[1]*0.5,viewscale[2]*0.5)
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
P.fold_out()
|
||||
|
||||
/datum/action/innate/pai/chassis
|
||||
name = "Holochassis Appearence Composite"
|
||||
name = "Holochassis Appearance Composite"
|
||||
button_icon_state = "pai_chassis"
|
||||
background_icon_state = "bg_tech"
|
||||
|
||||
|
||||
@@ -116,6 +116,6 @@
|
||||
|
||||
/mob/living/silicon/pai/mob_try_pickup(mob/living/user)
|
||||
if(!possible_chassis[chassis])
|
||||
to_chat(user, "<span class='wraning'>[src]'s current form isn't able to be carried!</span>")
|
||||
to_chat(user, "<span class='warning'>[src]'s current form isn't able to be carried!</span>")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
pda.silent = !pda.silent
|
||||
else if(href_list["target"])
|
||||
if(silent)
|
||||
return alert("Communications circuits remain unitialized.")
|
||||
return alert("Communications circuits remain uninitialized.")
|
||||
|
||||
var/target = locate(href_list["target"])
|
||||
pda.create_message(src, target)
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
sight_mode &= ~S.sight_mode
|
||||
update_sight()
|
||||
else if(istype(O, /obj/item/storage/bag/tray/))
|
||||
O.SendSignal(COMSIG_TRY_STORAGE_QUICK_EMPTY)
|
||||
//CITADEL EDIT reee proc, Dogborg modules
|
||||
if(istype(O,/obj/item/gun/energy/laser/cyborg))
|
||||
laser = FALSE
|
||||
@@ -31,15 +30,10 @@
|
||||
var/obj/item/dogborg/sleeper/S = O
|
||||
S.go_out() //this should stop edgecase deletions
|
||||
//END CITADEL EDIT
|
||||
SEND_SIGNAL(O, COMSIG_TRY_STORAGE_QUICK_EMPTY)
|
||||
if(client)
|
||||
client.screen -= O
|
||||
observer_screen_update(O,FALSE)
|
||||
O.forceMove(module) //Return item to module so it appears in its contents, so it can be taken out again.
|
||||
|
||||
if(O.flags_1 & DROPDEL_1)
|
||||
O.flags_1 &= ~DROPDEL_1 //we shouldn't HAVE things with DROPDEL_1 in our modules, but better safe than runtiming horribly
|
||||
|
||||
O.dropped(src)
|
||||
|
||||
if(module_active == O)
|
||||
module_active = null
|
||||
@@ -52,6 +46,12 @@
|
||||
else if(held_items[3] == O)
|
||||
inv3.icon_state = "inv3"
|
||||
held_items[3] = null
|
||||
|
||||
if(O.item_flags & DROPDEL)
|
||||
O.item_flags &= ~DROPDEL //we shouldn't HAVE things with DROPDEL_1 in our modules, but better safe than runtiming horribly
|
||||
|
||||
O.forceMove(module) //Return item to module so it appears in its contents, so it can be taken out again.
|
||||
|
||||
hud_used.update_robot_modules_display()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -238,15 +238,17 @@
|
||||
module.transform_to(modulelist[input_module])
|
||||
|
||||
|
||||
/mob/living/silicon/robot/proc/updatename()
|
||||
/mob/living/silicon/robot/proc/updatename(client/C)
|
||||
if(shell)
|
||||
return
|
||||
if(!C)
|
||||
C = client
|
||||
var/changed_name = ""
|
||||
if(custom_name)
|
||||
changed_name = custom_name
|
||||
if(changed_name == "" && client)
|
||||
rename_self(src, client)
|
||||
return //built in camera handled in proc
|
||||
if(changed_name == "" && C && C.prefs.custom_names["cyborg"] != DEFAULT_CYBORG_NAME)
|
||||
if(apply_pref_name("cyborg", C))
|
||||
return //built in camera handled in proc
|
||||
if(!changed_name)
|
||||
changed_name = get_standard_name()
|
||||
|
||||
@@ -388,12 +390,8 @@
|
||||
to_chat(user, "<span class='notice'>You start fixing yourself...</span>")
|
||||
if(!W.use_tool(src, user, 50))
|
||||
return
|
||||
adjustBruteLoss(-10)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start fixing [src]...</span>")
|
||||
if(!do_after(user, 30, target = src))
|
||||
return
|
||||
adjustBruteLoss(-30)
|
||||
|
||||
adjustBruteLoss(-30)
|
||||
updatehealth()
|
||||
add_fingerprint(user)
|
||||
visible_message("<span class='notice'>[user] has fixed some of the dents on [src].</span>")
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
damage = rand(20, 40)
|
||||
else
|
||||
damage = rand(5, 35)
|
||||
damage = round(damage / 2) // borgs recieve half damage
|
||||
damage = round(damage / 2) // borgs receive half damage
|
||||
adjustBruteLoss(damage)
|
||||
updatehealth()
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
if(I.loc != src)
|
||||
I.forceMove(src)
|
||||
modules += I
|
||||
I.flags_1 |= NODROP_1
|
||||
I.item_flags |= NODROP
|
||||
I.mouse_opacity = MOUSE_OPACITY_OPAQUE
|
||||
if(nonstandard)
|
||||
added_modules += I
|
||||
|
||||
@@ -405,4 +405,7 @@
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/get_inactive_held_item()
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/handle_high_gravity(gravity)
|
||||
return
|
||||
|
||||
@@ -524,7 +524,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
turn_on() //Saves the AI the hassle of having to activate a bot manually.
|
||||
access_card = all_access //Give the bot all-access while under the AI's command.
|
||||
if(client)
|
||||
reset_access_timer_id = addtimer(CALLBACK (src, .proc/bot_reset), 600, TIMER_OVERRIDE|TIMER_STOPPABLE) //if the bot is player controlled, they get the extra access for a limited time
|
||||
reset_access_timer_id = addtimer(CALLBACK (src, .proc/bot_reset), 600, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) //if the bot is player controlled, they get the extra access for a limited time
|
||||
to_chat(src, "<span class='notice'><span class='big'>Priority waypoint set by [icon2html(calling_ai, src)] <b>[caller]</b>. Proceed to <b>[end_area]</b>.</span><br>[path.len-1] meters to destination. You have been granted additional door access for 60 seconds.</span>")
|
||||
if(message)
|
||||
to_chat(calling_ai, "<span class='notice'>[icon2html(src, calling_ai)] [name] called to [end_area]. [path.len-1] meters to destination.</span>")
|
||||
@@ -720,7 +720,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
if("ejectpai")
|
||||
return
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Unidentified control sequence recieved:[command]</span>")
|
||||
to_chat(src, "<span class='warning'>Unidentified control sequence received:[command]</span>")
|
||||
|
||||
/mob/living/simple_animal/bot/proc/bot_summon() // summoned to PDA
|
||||
summon_step()
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
window_name = "Automatic Station Floor Repairer v1.1"
|
||||
path_image_color = "#FFA500"
|
||||
|
||||
var/process_type //Determines what to do when process_scan() recieves a target. See process_scan() for details.
|
||||
var/process_type //Determines what to do when process_scan() receives a target. See process_scan() for details.
|
||||
var/targetdirection
|
||||
var/replacetiles = 0
|
||||
var/placetiles = 0
|
||||
|
||||
@@ -232,7 +232,7 @@
|
||||
return
|
||||
if(!item_to_add)
|
||||
user.visible_message("[user] pets [src].","<span class='notice'>You rest your hand on [src]'s head for a moment.</span>")
|
||||
user.SendSignal(COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi)
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi)
|
||||
return
|
||||
|
||||
if(user && !user.temporarilyRemoveItemFromInventory(item_to_add))
|
||||
@@ -615,7 +615,7 @@
|
||||
if(M && stat != DEAD) // Added check to see if this mob (the dog) is dead to fix issue 2454
|
||||
new /obj/effect/temp_visual/heart(loc)
|
||||
emote("me", 1, "yaps happily!")
|
||||
M.SendSignal(COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi)
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi)
|
||||
else
|
||||
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
|
||||
emote("me", 1, "growls!")
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
var/obj/item/I = new default_hatmask(src)
|
||||
equip_to_slot_or_del(I, SLOT_HEAD)
|
||||
|
||||
access_card.flags_1 |= NODROP_1
|
||||
access_card.item_flags |= NODROP
|
||||
|
||||
alert_drones(DRONE_NET_CONNECT)
|
||||
|
||||
@@ -168,15 +168,15 @@
|
||||
|
||||
//Hands
|
||||
for(var/obj/item/I in held_items)
|
||||
if(!(I.flags_1 & ABSTRACT_1))
|
||||
if(!(I.item_flags & ABSTRACT))
|
||||
msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n"
|
||||
|
||||
//Internal storage
|
||||
if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1))
|
||||
if(internal_storage && !(internal_storage.item_flags & ABSTRACT))
|
||||
msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n"
|
||||
|
||||
//Cosmetic hat - provides no function other than looks
|
||||
if(head && !(head.flags_1&ABSTRACT_1))
|
||||
if(head && !(head.item_flags & ABSTRACT))
|
||||
msg += "It is wearing [head.get_examine_string(user)] on its head.\n"
|
||||
|
||||
//Braindead
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
//ATTACK GHOST IGNORING PARENT RETURN VALUE
|
||||
/obj/item/drone_shell/attack_ghost(mob/user)
|
||||
if(jobban_isbanned(user,"drone"))
|
||||
if(jobban_isbanned(user,"drone") || QDELETED(src) || QDELETED(user))
|
||||
return
|
||||
if(CONFIG_GET(flag/use_age_restriction_for_jobs))
|
||||
if(!isnum(user.client.player_age)) //apparently what happens when there's no DB connected. just don't let anybody be a drone without admin intervention
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
////////////////////
|
||||
//Drones with custom laws
|
||||
//Drones with custom shells
|
||||
//Drones with overriden procs
|
||||
//Drones with overridden procs
|
||||
//Drones with camogear for hat related memes
|
||||
//Drone type for use with polymorph (no preloaded items, random appearance)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"1. Interfere.\n"+\
|
||||
"2. Kill.\n"+\
|
||||
"3. Destroy."
|
||||
default_storage = /obj/item/radio/uplink
|
||||
default_storage = /obj/item/uplink
|
||||
default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi
|
||||
hacked = TRUE
|
||||
flavortext = null
|
||||
@@ -43,7 +43,7 @@
|
||||
/mob/living/simple_animal/drone/syndrone/badass
|
||||
name = "Badass Syndrone"
|
||||
default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite
|
||||
default_storage = /obj/item/radio/uplink/nuclear
|
||||
default_storage = /obj/item/uplink/nuclear
|
||||
|
||||
/mob/living/simple_animal/drone/syndrone/badass/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
if(!client && (!G || !G.client))
|
||||
var/list/faux_gadgets = list("hypertext inflator","failsafe directory","DRM switch","stack initializer",\
|
||||
"anti-freeze capacitor","data stream diode","TCP bottleneck","supercharged I/O bolt",\
|
||||
"tradewind stablizer","radiated XML cable","registry fluid tank","open-source debunker")
|
||||
"tradewind stabilizer","radiated XML cable","registry fluid tank","open-source debunker")
|
||||
|
||||
var/list/faux_problems = list("won't be able to tune their bootstrap projector","will constantly remix their binary pool"+\
|
||||
" even though the BMX calibrator is working","will start leaking their XSS coolant",\
|
||||
@@ -122,7 +122,7 @@
|
||||
to_chat(src, "<span class='heavy_brass'>From now on, these are your laws:</span>")
|
||||
laws = "1. Purge all untruths and honor Ratvar."
|
||||
else
|
||||
visible_message("<span class='warning'>[src]'s dislay glows a vicious red!</span>", \
|
||||
visible_message("<span class='warning'>[src]'s display glows a vicious red!</span>", \
|
||||
"<span class='userdanger'>ERROR: LAW OVERRIDE DETECTED</span>")
|
||||
to_chat(src, "<span class='boldannounce'>From now on, these are your laws:</span>")
|
||||
laws = \
|
||||
@@ -140,7 +140,7 @@
|
||||
if(!hacked)
|
||||
return
|
||||
Stun(40)
|
||||
visible_message("<span class='info'>[src]'s dislay glows a content blue!</span>", \
|
||||
visible_message("<span class='info'>[src]'s display glows a content blue!</span>", \
|
||||
"<font size=3 color='#0000CC'><b>ERROR: LAW OVERRIDE DETECTED</b></font>")
|
||||
to_chat(src, "<span class='info'><b>From now on, these are your laws:</b></span>")
|
||||
laws = initial(laws)
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
/mob/living/simple_animal/drone/proc/pickVisualAppearence()
|
||||
picked = FALSE
|
||||
var/appearence = input("Choose your appearence!", "Appearence", "Maintenance Drone") in list("Maintenance Drone", "Repair Drone", "Scout Drone")
|
||||
var/appearence = input("Choose your appearance!", "Appearance", "Maintenance Drone") in list("Maintenance Drone", "Repair Drone", "Scout Drone")
|
||||
switch(appearence)
|
||||
if("Maintenance Drone")
|
||||
visualAppearence = MAINTDRONE
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
icon_state = "mouse_gray"
|
||||
icon_living = "mouse_gray"
|
||||
icon_dead = "mouse_gray_dead"
|
||||
speak = list("Squeek!","SQUEEK!","Squeek?")
|
||||
speak_emote = list("squeeks")
|
||||
emote_hear = list("squeeks.")
|
||||
speak = list("Squeak!","SQUEAK!","Squeak?")
|
||||
speak_emote = list("squeaks")
|
||||
emote_hear = list("squeaks.")
|
||||
emote_see = list("runs in a circle.", "shakes.")
|
||||
speak_chance = 1
|
||||
turns_per_move = 5
|
||||
@@ -59,7 +59,7 @@
|
||||
if( ishuman(AM) )
|
||||
if(!stat)
|
||||
var/mob/M = AM
|
||||
to_chat(M, "<span class='notice'>[icon2html(src, M)] Squeek!</span>")
|
||||
to_chat(M, "<span class='notice'>[icon2html(src, M)] Squeak!</span>")
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/mouse/handle_automated_action()
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
msg += "[desc]\n"
|
||||
|
||||
for(var/obj/item/I in held_items)
|
||||
if(!(I.flags_1 & ABSTRACT_1))
|
||||
if(!(I.item_flags & ABSTRACT))
|
||||
msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n"
|
||||
if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1))
|
||||
if(internal_storage && !(internal_storage.item_flags & ABSTRACT))
|
||||
msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n"
|
||||
msg += "*---------*</span>"
|
||||
to_chat(user, msg)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! You caught a support carp. It's a kleptocarp!</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Support modules active. Holoparasite swarm online.</span>"
|
||||
toggle_button_type = /obj/screen/guardian/ToggleMode
|
||||
var/obj/structure/recieving_pad/beacon
|
||||
var/obj/structure/receiving_pad/beacon
|
||||
var/beacon_cooldown = 0
|
||||
var/toggle = FALSE
|
||||
|
||||
@@ -87,22 +87,22 @@
|
||||
|
||||
beacon_cooldown = world.time + 3000
|
||||
|
||||
/obj/structure/recieving_pad
|
||||
name = "bluespace recieving pad"
|
||||
/obj/structure/receiving_pad
|
||||
name = "bluespace receiving pad"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
desc = "A recieving zone for bluespace teleportations."
|
||||
desc = "A receiving zone for bluespace teleportations."
|
||||
icon_state = "light_on-w"
|
||||
light_range = 1
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
|
||||
/obj/structure/recieving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G)
|
||||
/obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G)
|
||||
. = ..()
|
||||
if(G.namedatum)
|
||||
add_atom_colour(G.namedatum.colour, FIXED_COLOUR_PRIORITY)
|
||||
|
||||
/obj/structure/recieving_pad/proc/disappear()
|
||||
/obj/structure/receiving_pad/proc/disappear()
|
||||
visible_message("[src] vanishes!")
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -175,6 +175,6 @@
|
||||
qdel(target)
|
||||
return TRUE
|
||||
var/atom/movable/M = target
|
||||
M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
visible_message("[src] polishes \the [target].")
|
||||
return TRUE
|
||||
|
||||
@@ -346,9 +346,9 @@
|
||||
button_icon_state = "lay_web"
|
||||
|
||||
/datum/action/innate/spider/lay_web/Activate()
|
||||
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse))
|
||||
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider))
|
||||
return
|
||||
var/mob/living/simple_animal/hostile/poison/giant_spider/nurse/S = owner
|
||||
var/mob/living/simple_animal/hostile/poison/giant_spider/S = owner
|
||||
|
||||
if(!isturf(S.loc))
|
||||
return
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
/obj/item/restraints/legcuffs/beartrap/mega_arachnid
|
||||
name = "fleshy restraints"
|
||||
desc = "Used by mega arachnids to immobilize their prey."
|
||||
flags_1 = DROPDEL_1
|
||||
item_flags = DROPDEL
|
||||
flags_1 = NONE
|
||||
icon_state = "tentacle_end"
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
|
||||
@@ -672,7 +672,7 @@ Difficulty: Very Hard
|
||||
for(var/i in T)
|
||||
if(isitem(i) && !is_type_in_typecache(i, banned_items_typecache))
|
||||
var/obj/item/W = i
|
||||
if(!(W.flags_1 & ADMIN_SPAWNED_1) && !(W.flags_1 & HOLOGRAM_1) && !(W.flags_1 & ABSTRACT_1))
|
||||
if(!(W.flags_1 & ADMIN_SPAWNED_1) && !(W.flags_1 & HOLOGRAM_1) && !(W.item_flags & ABSTRACT))
|
||||
L += W
|
||||
if(L.len)
|
||||
var/obj/item/CHOSEN = pick(L)
|
||||
|
||||
@@ -93,7 +93,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
|
||||
/obj/item/gps/internal/swarmer_beacon
|
||||
icon_state = null
|
||||
gpstag = "Hungry Signal"
|
||||
desc = "Transmited over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom"
|
||||
desc = "Transmitted over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom"
|
||||
invisibility = 100
|
||||
|
||||
//SWARMER AI
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//A slow but strong beast that tries to stun using its tentacles
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath
|
||||
name = "goliath"
|
||||
desc = "A massive beast that uses long tentacles to ensare its prey, threatening them is not advised under any conditions."
|
||||
desc = "A massive beast that uses long tentacles to ensnare its prey, threatening them is not advised under any conditions."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "Goliath"
|
||||
icon_living = "Goliath"
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
light_color = LIGHT_COLOR_PURPLE
|
||||
attacktext = "slashes"
|
||||
attack_sound = 'sound/hallucinations/growl1.ogg'
|
||||
deathmessage = "collapses into a pile of bones, their suit dissovling among the plasma!"
|
||||
deathmessage = "collapses into a pile of bones, their suit dissolving among the plasma!"
|
||||
loot = list(/obj/effect/decal/remains/plasma)
|
||||
|
||||
/mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
name = "Syndicate Stormtrooper"
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
casingtype = /obj/item/ammo_casing/shotgun/tengauge
|
||||
casingtype = /obj/item/ammo_casing/shotgun/buckshot
|
||||
projectilesound = 'sound/weapons/gunshot.ogg'
|
||||
loot = list(/obj/effect/gibspawner/human)
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
desc = "The key to the wumborian fugu's ability to increase its mass arbitrarily, this disgusting remnant can apply the same effect to other creatures, giving them great strength."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "fugu_gland"
|
||||
flags_1 = NOBLUDGEON_1
|
||||
item_flags = NOBLUDGEON
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
layer = MOB_LAYER
|
||||
var/list/banned_mobs
|
||||
|
||||
@@ -312,7 +312,7 @@
|
||||
emote("deathgasp")
|
||||
if(del_on_death)
|
||||
..()
|
||||
//Prevent infinite loops if the mob Destroy() is overriden in such
|
||||
//Prevent infinite loops if the mob Destroy() is overridden in such
|
||||
//a manner as to cause a call to death() again
|
||||
del_on_death = FALSE
|
||||
qdel(src)
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
/datum/emote/slime/mood/sneaky
|
||||
key = "moodsneaky"
|
||||
mood = "mischevous"
|
||||
mood = "mischievous"
|
||||
|
||||
/datum/emote/slime/mood/smile
|
||||
key = "moodsmile"
|
||||
|
||||
@@ -415,7 +415,7 @@
|
||||
else if (docile)
|
||||
newmood = ":3"
|
||||
else if (Target)
|
||||
newmood = "mischevous"
|
||||
newmood = "mischievous"
|
||||
|
||||
if (!newmood)
|
||||
if (Discipline && prob(25))
|
||||
|
||||
@@ -358,7 +358,7 @@
|
||||
var/hasFound = FALSE //Have we found an extract to be added?
|
||||
for(var/obj/item/slime_extract/S in P.contents)
|
||||
if(S.effectmod == effectmod)
|
||||
P.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, get_turf(src), TRUE)
|
||||
SEND_SIGNAL(P, COMSIG_TRY_STORAGE_TAKE, S, get_turf(src), TRUE)
|
||||
qdel(S)
|
||||
applied++
|
||||
hasFound = TRUE
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
"regrets","your soul","suffering","music","noise","blood","hunger","the american way")
|
||||
if(text_output != last_taste_text || last_taste_time + 100 < world.time)
|
||||
to_chat(src, "<span class='notice'>You can taste [text_output].</span>")
|
||||
// "somthing indescribable" -> too many tastes, not enough flavor.
|
||||
// "something indescribable" -> too many tastes, not enough flavor.
|
||||
|
||||
last_taste_time = world.time
|
||||
last_taste_text = text_output
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
create_mob_hud()
|
||||
if(hud_used)
|
||||
hud_used.show_hud(hud_used.hud_version)
|
||||
hud_used.update_ui_style(ui_style2icon(client.prefs.UI_style))
|
||||
|
||||
next_move = 1
|
||||
|
||||
|
||||
@@ -294,6 +294,10 @@
|
||||
set name = "Examine"
|
||||
set category = "IC"
|
||||
|
||||
if(isturf(A) && !(sight & SEE_TURFS) && !(A in view(client ? client.view : world.view, src)))
|
||||
// shift-click catcher may issue examinate() calls for out-of-sight turfs
|
||||
return
|
||||
|
||||
if(is_blind(src))
|
||||
to_chat(src, "<span class='notice'>Something is there but you can't see it.</span>")
|
||||
return
|
||||
@@ -304,7 +308,7 @@
|
||||
//same as above
|
||||
//note: ghosts can point, this is intended
|
||||
//visible_message will handle invisibility properly
|
||||
//overriden here and in /mob/dead/observer for different point span classes and sanity checks
|
||||
//overridden here and in /mob/dead/observer for different point span classes and sanity checks
|
||||
/mob/verb/pointed(atom/A as mob|obj|turf in view())
|
||||
set name = "Point To"
|
||||
set category = "Object"
|
||||
@@ -473,7 +477,7 @@
|
||||
else
|
||||
what = get_item_by_slot(slot)
|
||||
if(what)
|
||||
if(!(what.flags_1 & ABSTRACT_1))
|
||||
if(!(what.item_flags & ABSTRACT))
|
||||
usr.stripPanelUnequip(what,src,slot)
|
||||
else
|
||||
usr.stripPanelEquip(what,src,slot)
|
||||
|
||||
@@ -40,9 +40,15 @@
|
||||
to_chat(usr, "<span class='danger'>Speech is currently admin-disabled.</span>")
|
||||
return
|
||||
|
||||
if(jobban_isbanned(src, "OOC"))
|
||||
var/jb = jobban_isbanned(src, "OOC")
|
||||
if(QDELETED(src))
|
||||
return
|
||||
|
||||
if(jb)
|
||||
to_chat(src, "<span class='danger'>You have been banned from deadchat.</span>")
|
||||
return
|
||||
|
||||
|
||||
|
||||
if (src.client)
|
||||
if(src.client.prefs.muted & MUTE_DEADCHAT)
|
||||
|
||||
@@ -381,7 +381,7 @@
|
||||
else if(transfer_after)
|
||||
R.key = key
|
||||
|
||||
R.rename_self("cyborg")
|
||||
R.apply_pref_name("cyborg")
|
||||
|
||||
if(R.mmi)
|
||||
R.mmi.name = "Man-Machine Interface: [real_name]"
|
||||
|
||||
Reference in New Issue
Block a user