mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Refactors logging into a single var for all mobs and adds a wrapper for proper logging.
This commit is contained in:
@@ -101,3 +101,10 @@
|
||||
#define SNPC_STEALTH 2
|
||||
#define SNPC_MARTYR 3
|
||||
#define SNPC_PSYCHO 4
|
||||
|
||||
//Individual logging defines
|
||||
#define INDIVIDUAL_ATTACK_LOG "Attack log"
|
||||
#define INDIVIDUAL_SAY_LOG "Say log"
|
||||
#define INDIVIDUAL_EMOTE_LOG "Emote log"
|
||||
#define INDIVIDUAL_OOC_LOG "OOC log"
|
||||
#define INDIVIDUAL_SHOW_ALL_LOG "All logs"
|
||||
@@ -181,16 +181,12 @@ Proc for attack log creation, because really why not
|
||||
living_target = target
|
||||
|
||||
if(is_mob_user)
|
||||
var/message = "\[[time_stamp()]\] <font color='red'>[user ? "[user.name][(user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] has [what_done] [target ? "[target.name][(is_mob_target && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][(living_target) ? " (NEWHP: [living_target.health])" : ""][(attack_location) ? "([attack_location.x],[attack_location.y],[attack_location.z])" : ""]</font>"
|
||||
user.attack_log += message
|
||||
if(user.mind)
|
||||
user.mind.attack_log += message
|
||||
var/message = "<font color='red'>has [what_done] [target ? "[target.name][(is_mob_target && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][(living_target) ? " (NEWHP: [living_target.health])" : ""][(attack_location) ? "([attack_location.x],[attack_location.y],[attack_location.z])" : ""]</font>"
|
||||
user.log_message(message, INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
if(is_mob_target)
|
||||
var/message = "\[[time_stamp()]\] <font color='orange'>[target ? "[target.name][(target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] has been [what_done] by [user ? "[user.name][(is_mob_user && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][(living_target) ? " (NEWHP: [living_target.health])" : ""][(attack_location) ? "([attack_location.x],[attack_location.y],[attack_location.z])" : ""]</font>"
|
||||
target.attack_log += message
|
||||
if(target.mind)
|
||||
target.mind.attack_log += message
|
||||
var/message = "<font color='orange'>has been [what_done] by [user ? "[user.name][(is_mob_user && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][(living_target) ? " (NEWHP: [living_target.health])" : ""][(attack_location) ? "([attack_location.x],[attack_location.y],[attack_location.z])" : ""]</font>"
|
||||
target.log_message(message, INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
log_attack("[user ? "[user.name][(is_mob_user && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(is_mob_target && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][(living_target) ? " (NEWHP: [living_target.health])" : ""][(attack_location) ? "([attack_location.x],[attack_location.y],[attack_location.z])" : ""]")
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
INVOKE_ASYNC(ticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_SERVANT_OF_RATVAR, ROLE_SERVANT_OF_RATVAR)
|
||||
if(owner.mind)
|
||||
owner.mind.special_role = "Servant of Ratvar"
|
||||
owner.attack_log += "\[[time_stamp()]\] <font color=#BE8700>Has been converted to the cult of Ratvar!</font>"
|
||||
owner.log_message("<font color=#BE8700>Has been converted to the cult of Ratvar!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
if(issilicon(owner))
|
||||
var/mob/living/silicon/S = owner
|
||||
if(iscyborg(S) && !silent_update)
|
||||
@@ -154,7 +154,7 @@
|
||||
if(owner.mind)
|
||||
owner.mind.wipe_memory()
|
||||
owner.mind.special_role = null
|
||||
owner.attack_log += "\[[time_stamp()]\] <font color=#BE8700>Has renounced the cult of Ratvar!</font>"
|
||||
owner.log_message("<font color=#BE8700>Has renounced the cult of Ratvar!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
if(iscyborg(owner))
|
||||
owner << "<span class='warning'>Despite your freedom from Ratvar's influence, you are still irreparably damaged and no longer possess certain functions such as AI linking.</span>"
|
||||
..()
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
INVOKE_ASYNC(ticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_CULTIST, ROLE_CULTIST)
|
||||
if(owner.mind)
|
||||
owner.mind.special_role = "Cultist"
|
||||
owner.attack_log += "\[[time_stamp()]\] <font color=#960000>Has been converted to the cult of Nar'Sie!</font>"
|
||||
owner.log_message("<font color=#960000>Has been converted to the cult of Nar'Sie!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
..()
|
||||
|
||||
/datum/antagonist/cultist/apply_innate_effects()
|
||||
@@ -44,7 +44,7 @@
|
||||
ticker.mode.cult -= owner.mind
|
||||
ticker.mode.update_cult_icons_removed(owner.mind)
|
||||
owner << "<span class='userdanger'>An unfamiliar white light flashes through your mind, cleansing the taint of the Dark One and all your memories as its servant.</span>"
|
||||
owner.attack_log += "\[[time_stamp()]\] <font color=#960000>Has renounced the cult of Nar'Sie!</font>"
|
||||
owner.log_message("<font color=#960000>Has renounced the cult of Nar'Sie!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
if(!silent_update)
|
||||
owner.visible_message("<span class='big'>[owner] looks like [owner.p_they()] just reverted to their old faith!</span>")
|
||||
..()
|
||||
|
||||
@@ -50,6 +50,7 @@ var/global/list/emote_list = list()
|
||||
if(!msg)
|
||||
return FALSE
|
||||
|
||||
user.log_message(msg, INDIVIDUAL_EMOTE_LOG)
|
||||
msg = "<b>[user]</b> " + msg
|
||||
|
||||
for(var/mob/M in dead_mob_list)
|
||||
@@ -64,7 +65,6 @@ var/global/list/emote_list = list()
|
||||
else
|
||||
user.visible_message(msg)
|
||||
log_emote("[key_name(user)] : [msg]")
|
||||
user.emote_log += "\[[time_stamp()]\] [msg]"
|
||||
|
||||
/datum/emote/proc/select_message_type(mob/user)
|
||||
. = message
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
var/active = 0
|
||||
|
||||
var/memory
|
||||
var/attack_log
|
||||
|
||||
var/assigned_role
|
||||
var/special_role
|
||||
|
||||
@@ -65,13 +65,15 @@
|
||||
//Recent as opposed to all because rounds tend to have a LOT of text.
|
||||
var/list/recent_speech = list()
|
||||
|
||||
if(target.say_log.len > LING_ABSORB_RECENT_SPEECH)
|
||||
recent_speech = target.say_log.Copy(target.say_log.len-LING_ABSORB_RECENT_SPEECH+1,0) //0 so len-LING_ARS+1 to end of list
|
||||
var/list/say_log = target.logging[INDIVIDUAL_SAY_LOG]
|
||||
|
||||
if(say_log.len > LING_ABSORB_RECENT_SPEECH)
|
||||
recent_speech = say_log.Copy(say_log.len-LING_ABSORB_RECENT_SPEECH+1,0) //0 so len-LING_ARS+1 to end of list
|
||||
else
|
||||
for(var/spoken_memory in target.say_log)
|
||||
for(var/spoken_memory in say_log)
|
||||
if(recent_speech.len >= LING_ABSORB_RECENT_SPEECH)
|
||||
break
|
||||
recent_speech[spoken_memory] = target.say_log[spoken_memory]
|
||||
recent_speech[spoken_memory] = say_log[spoken_memory]
|
||||
|
||||
if(recent_speech.len)
|
||||
user.mind.store_memory("<B>Some of [target]'s speech patterns, we should study these to better impersonate them!</B>")
|
||||
|
||||
@@ -174,7 +174,7 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple"
|
||||
gangster_mind.current << "<font color='red'>Their ultimate objective is to take over the station with a Dominator machine.</font>"
|
||||
gangster_mind.current << "<font color='red'>You can identify your bosses by their <b>large, bright [G.color] \[G\] icon</b>.</font>"
|
||||
gangster_mind.store_memory("You are a member of the [G.name] Gang!")
|
||||
gangster_mind.current.attack_log += "\[[time_stamp()]\] <font color='red'>Has been converted to the [G.name] Gang!</font>"
|
||||
gangster_mind.current.log_message("<font color='red'>Has been converted to the [G.name] Gang!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
gangster_mind.special_role = "[G.name] Gangster"
|
||||
|
||||
G.add_gang_hud(gangster_mind)
|
||||
@@ -208,7 +208,7 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple"
|
||||
gangster_mind.gang_datum = null
|
||||
|
||||
if(silent < 2)
|
||||
gangster_mind.current.attack_log += "\[[time_stamp()]\] <font color='red'>Has reformed and defected from the [gang.name] Gang!</font>"
|
||||
gangster_mind.current.log_message("<font color='red'>Has reformed and defected from the [gang.name] Gang!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
if(beingborged)
|
||||
if(!silent)
|
||||
|
||||
@@ -271,7 +271,7 @@
|
||||
carbon_mob.flash_act(1, 1)
|
||||
rev_mind.current.Stun(5)
|
||||
rev_mind.current << "<span class='danger'><FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT></span>"
|
||||
rev_mind.current.attack_log += "\[[time_stamp()]\] <font color='red'>Has been converted to the revolution!</font>"
|
||||
rev_mind.current.log_message("<font color='red'>Has been converted to the revolution!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
rev_mind.special_role = "Revolutionary"
|
||||
update_rev_icons_added(rev_mind)
|
||||
if(jobban_isbanned(rev_mind.current, ROLE_REV))
|
||||
@@ -289,7 +289,7 @@
|
||||
if((rev_mind in revolutionaries) || remove_head)
|
||||
revolutionaries -= rev_mind
|
||||
rev_mind.special_role = null
|
||||
rev_mind.current.attack_log += "\[[time_stamp()]\] <font color='red'>Has renounced the revolution!</font>"
|
||||
rev_mind.current.log_message("<font color='red'>Has renounced the revolution!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
if(beingborged)
|
||||
rev_mind.current << "<span class='danger'><FONT size = 3>The frame's firmware detects and deletes your neural reprogramming! You remember nothing[remove_head ? "." : " but the name of the one who flashed you."]</FONT></span>"
|
||||
|
||||
@@ -774,7 +774,7 @@
|
||||
else
|
||||
user.mind.AddSpell(S)
|
||||
user <<"<span class='notice'>you rapidly read through the arcane book. Suddenly you realize you understand [spellname]!</span>"
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='orange'>[user.real_name] ([user.ckey]) learned the spell [spellname] ([S]).</font>")
|
||||
user.log_message("<font color='orange'>learned the spell [spellname] ([S]).</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
onlearned(user)
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/proc/recoil(mob/user)
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
return
|
||||
|
||||
user.visible_message("<span class='notice'>[user] wraps [target].</span>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='blue'>Has used [name] on [target]</font>")
|
||||
user.log_message("<font color='blue'>Has used [name] on [target]</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
/obj/item/stack/packageWrap/Destroy()
|
||||
if(!amount)
|
||||
|
||||
@@ -203,7 +203,7 @@ var/global/list/crematoriums = new/list()
|
||||
if (M.stat != DEAD)
|
||||
M.emote("scream")
|
||||
if(user)
|
||||
user.attack_log +="\[[time_stamp()]\] Cremated <b>[M]/[M.ckey]</b>"
|
||||
user.log_message("Cremated <b>[M]/[M.ckey]</b>", INDIVIDUAL_ATTACK_LOG)
|
||||
log_attack("\[[time_stamp()]\] <b>[user]/[user.ckey]</b> cremated <b>[M]/[M.ckey]</b>")
|
||||
else
|
||||
log_attack("\[[time_stamp()]\] <b>UNKNOWN</b> cremated <b>[M]/[M.ckey]</b>")
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
return 0
|
||||
if(!(lube&SLIDE_ICE))
|
||||
C << "<span class='notice'>You slipped[ O ? " on the [O.name]" : ""]!</span>"
|
||||
C.attack_log += "\[[time_stamp()]\] <font color='orange'>Slipped[O ? " on the [O.name]" : ""][(lube&SLIDE)? " (LUBE)" : ""]!</font>"
|
||||
C.log_message("<font color='orange'>Slipped[O ? " on the [O.name]" : ""][(lube&SLIDE)? " (LUBE)" : ""]!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
if(!(lube&SLIDE_ICE))
|
||||
playsound(C.loc, 'sound/misc/slip.ogg', 50, 1, -3)
|
||||
|
||||
|
||||
@@ -1,30 +1,27 @@
|
||||
/proc/show_individual_logging_panel(mob/M, type = "attack")
|
||||
/proc/show_individual_logging_panel(mob/M, type = INDIVIDUAL_ATTACK_LOG)
|
||||
if(!M || !ismob(M))
|
||||
return
|
||||
var/dat = "<center><a href='?_src_=holder;individuallog=\ref[M];log_type=attack'>Attack log</a> | "
|
||||
dat += "<a href='?_src_=holder;individuallog=\ref[M];log_type=say'>Say log</a> | "
|
||||
dat += "<a href='?_src_=holder;individuallog=\ref[M];log_type=emote'>Emote log</a> | "
|
||||
dat += "<a href='?_src_=holder;individuallog=\ref[M];log_type=ooc'>OOC log</a> | "
|
||||
var/dat = "<center><a href='?_src_=holder;individuallog=\ref[M];log_type=[INDIVIDUAL_ATTACK_LOG]'>Attack log</a> | "
|
||||
dat += "<a href='?_src_=holder;individuallog=\ref[M];log_type=[INDIVIDUAL_SAY_LOG]'>Say log</a> | "
|
||||
dat += "<a href='?_src_=holder;individuallog=\ref[M];log_type=[INDIVIDUAL_EMOTE_LOG]'>Emote log</a> | "
|
||||
dat += "<a href='?_src_=holder;individuallog=\ref[M];log_type=[INDIVIDUAL_OOC_LOG]'>OOC log</a> | "
|
||||
dat += "<a href='?_src_=holder;individuallog=\ref[M];log_type=[INDIVIDUAL_SHOW_ALL_LOG]'>Show all</a> | "
|
||||
dat += "<a href='?_src_=holder;individuallog=\ref[M];log_type=[type]'>Refresh</a></center>"
|
||||
|
||||
dat += "<hr style='background:#000000; border:0; height:1px'>"
|
||||
|
||||
switch(type)
|
||||
if("attack")
|
||||
dat += "<center>Attack logs of [key_name(M)]</center><br>"
|
||||
for(var/entry in M.attack_log)
|
||||
dat += "<font size='2px'>[entry]</font><br><hr>"
|
||||
if("say")
|
||||
dat += "<center>Say logs of [key_name(M)]</center><br>"
|
||||
for(var/entry in M.say_log)
|
||||
dat += "<font size='3px'>[entry] [M.say_log[entry]]</font><br><hr>"
|
||||
if("emote")
|
||||
dat += "<center>Emote logs of [key_name(M)]</center><br>"
|
||||
for(var/entry in M.emote_log)
|
||||
dat += "<font size='3px'>[entry]</font><br><hr>"
|
||||
if("ooc")
|
||||
dat += "<center>OOC logs of [key_name(M)]</center><br>"
|
||||
for(var/entry in M.ooc_log)
|
||||
dat += "<font size='3px'>[entry]</font><br><hr>"
|
||||
if((type in M.logging) && type != INDIVIDUAL_SHOW_ALL_LOG)
|
||||
dat += "<center>[type] of [key_name(M)]</center><br>"
|
||||
for(var/entry in M.logging[type])
|
||||
dat += "<font size=3px>[entry]: [M.logging[type][entry]]</font><br>"
|
||||
|
||||
else if(type == INDIVIDUAL_SHOW_ALL_LOG)
|
||||
dat += "<center>Displaying all logs of [key_name(M)]</center><br><hr>"
|
||||
for(var/log_type in M.logging)
|
||||
dat += "<center>[log_type]</center><br>"
|
||||
for(var/entry in M.logging[log_type])
|
||||
dat += "<font size=3px>[entry]: [M.logging[log_type][entry]]</font><br>"
|
||||
dat += "<hr>"
|
||||
|
||||
|
||||
usr << browse(dat, "window=invidual_logging;size=600x480")
|
||||
@@ -664,16 +664,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
return
|
||||
|
||||
/client/proc/cmd_admin_attack_log(mob/M in mob_list)
|
||||
set category = "Special Verbs"
|
||||
set name = "Attack Log"
|
||||
|
||||
usr << "<span class='boldannounce'>Attack Log for [mob]</span>"
|
||||
for(var/t in M.attack_log)
|
||||
usr << t
|
||||
feedback_add_details("admin_verb","ATTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/proc/everyone_random()
|
||||
set category = "Fun"
|
||||
set name = "Make Everyone Random"
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
return
|
||||
|
||||
log_ooc("[mob.name]/[key] : [raw_msg]")
|
||||
mob.ooc_log += "\[[time_stamp()]\] [raw_msg]"
|
||||
mob.log_message("[key]: [raw_msg]", INDIVIDUAL_OOC_LOG)
|
||||
|
||||
var/keyname = key
|
||||
if(prefs.unlock_content)
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
citizens += H
|
||||
ticker.mode.traitors += M
|
||||
M.special_role = "separatist"
|
||||
H.attack_log += "\[[time_stamp()]\] <font color='red'>Was made into a separatist, long live [nation]!</font>"
|
||||
H.log_message("<font color='red'>Was made into a separatist, long live [nation]!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
H << "<B>You are a separatist! [nation] forever! Protect the soverignty of your newfound land with your comrades in arms!</B>"
|
||||
if(citizens.len)
|
||||
var/message
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
O.completed = 1 //YES!
|
||||
O.owner = new_holder.mind
|
||||
new_holder.mind.objectives += O
|
||||
new_holder.attack_log += "\[[time_stamp()]\] <font color='green'>Won with greentext!!!</font>"
|
||||
new_holder.log_message("<font color='green'>Won with greentext!!!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
color_altered_mobs -= new_holder
|
||||
resistance_flags |= ON_FIRE
|
||||
qdel(src)
|
||||
|
||||
@@ -53,6 +53,6 @@
|
||||
I.mind.objectives += protect_objective
|
||||
ticker.mode.update_wiz_icons_added(I.mind)
|
||||
|
||||
I.attack_log += "\[[time_stamp()]\] <font color='red'>Is an imposter!</font>"
|
||||
I.log_message("<font color='red'>Is an imposter!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
I << "<B>You are an imposter! Trick and confuse the crew to misdirect malice from your handsome original!</B>"
|
||||
I << sound('sound/effects/magic.ogg')
|
||||
|
||||
@@ -76,7 +76,7 @@ var/list/image/ghost_images_simple = list() //this is a list of all ghost images
|
||||
var/turf/T
|
||||
if(ismob(body))
|
||||
T = get_turf(body) //Where is the body located?
|
||||
attack_log = body.attack_log //preserve our attack logs by copying them to our ghost
|
||||
logging = body.logging //preserve our logs by copying them to our ghost
|
||||
|
||||
gender = body.gender
|
||||
if(body.mind && body.mind.name)
|
||||
@@ -620,7 +620,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
if(O.key == expected_key)
|
||||
if(O.client)
|
||||
new /obj/screen/splash(O.client, TRUE)
|
||||
break
|
||||
break
|
||||
|
||||
//this is a mob verb instead of atom for performance reasons
|
||||
//see /mob/verb/examinate() in mob.dm for more info
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
/mob/living/verb/succumb(whispered as null)
|
||||
set hidden = 1
|
||||
if (InCritical())
|
||||
src.attack_log += "[src] has [whispered ? "whispered his final words" : "succumbed to death"] with [round(health, 0.1)] points of health!"
|
||||
src.log_message("Has [whispered ? "whispered his final words" : "succumbed to death"] with [round(health, 0.1)] points of health!", INDIVIDUAL_ATTACK_LOG)
|
||||
src.adjustOxyLoss(src.health - HEALTH_THRESHOLD_DEAD)
|
||||
updatehealth()
|
||||
if(!whispered)
|
||||
|
||||
@@ -79,12 +79,12 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
|
||||
message = copytext(message, 3)
|
||||
if(findtext(message, " ", 1, 2))
|
||||
message = copytext(message, 2)
|
||||
|
||||
|
||||
if(message_mode == "admin")
|
||||
if(client)
|
||||
client.cmd_admin_say(message)
|
||||
return
|
||||
|
||||
|
||||
if(message_mode == "deadmin")
|
||||
if(client)
|
||||
client.dsay(message)
|
||||
@@ -116,7 +116,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
|
||||
spans += get_spans()
|
||||
|
||||
//Log what we've said with an associated timestamp, using the list's len for safety/to prevent overwriting messages
|
||||
say_log["[LAZYLEN(say_log) + 1]\[[time_stamp()]\]"] = message
|
||||
log_message(message, INDIVIDUAL_SAY_LOG)
|
||||
|
||||
var/message_range = 7
|
||||
var/radio_return = radio(message, message_mode, spans)
|
||||
|
||||
@@ -970,9 +970,9 @@ var/next_mob_id = 0
|
||||
.["Toggle Build Mode"] = "?_src_=vars;build_mode=\ref[src]"
|
||||
.["Assume Direct Control"] = "?_src_=vars;direct_control=\ref[src]"
|
||||
.["Offer Control to Ghosts"] = "?_src_=vars;offer_control=\ref[src]"
|
||||
|
||||
/*
|
||||
/mob/vv_get_var(var_name)
|
||||
switch(var_name)
|
||||
if ("attack_log")
|
||||
return debug_variable(var_name, attack_log, 0, src, FALSE)
|
||||
. = ..()
|
||||
. = ..()*/
|
||||
@@ -26,10 +26,7 @@
|
||||
var/computer_id = null
|
||||
var/lastattacker = null
|
||||
var/lastattacked = null
|
||||
var/list/attack_log = list()
|
||||
var/list/say_log = list() //a log of what we've said, with a timestamp as the key for each message
|
||||
var/list/ooc_log = list()
|
||||
var/list/emote_log = list()
|
||||
var/list/logging = list(INDIVIDUAL_ATTACK_LOG, INDIVIDUAL_SAY_LOG, INDIVIDUAL_EMOTE_LOG, INDIVIDUAL_OOC_LOG)
|
||||
var/obj/machinery/machine = null
|
||||
var/other_mobs = null
|
||||
var/disabilities = 0 //Carbon
|
||||
|
||||
@@ -479,7 +479,7 @@ var/static/regex/firstname = new("^\[^\\s-\]+") //First word before whitespace o
|
||||
else
|
||||
return 0
|
||||
|
||||
mob/proc/click_random_mob()
|
||||
/mob/proc/click_random_mob()
|
||||
var/list/nearby_mobs = list()
|
||||
for(var/mob/living/L in range(1, src))
|
||||
if(L!=src)
|
||||
@@ -487,3 +487,14 @@ mob/proc/click_random_mob()
|
||||
if(nearby_mobs.len)
|
||||
var/mob/living/T = pick(nearby_mobs)
|
||||
ClickOn(T)
|
||||
|
||||
/mob/proc/log_message(message, message_type)
|
||||
if(!LAZYLEN(message) || !message_type)
|
||||
return
|
||||
|
||||
if(!islist(logging[message_type]))
|
||||
logging[message_type] = list()
|
||||
|
||||
var/list/timestamped_message = list("[LAZYLEN(logging[message_type]) + 1]\[[time_stamp()]\] [key_name(src)]" = message)
|
||||
|
||||
logging[message_type] += timestamped_message
|
||||
@@ -50,7 +50,7 @@
|
||||
/obj/item/weapon/gun/magic/wand/proc/zap_self(mob/living/user)
|
||||
user.visible_message("<span class='danger'>[user] zaps [user.p_them()]self with [src].</span>")
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> zapped [user.p_them()]self with a <b>[src]</b>"
|
||||
user.log_message("zapped [user.p_them()]self with a <b>[src]</b>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
|
||||
/////////////////////////////////////
|
||||
|
||||
@@ -265,20 +265,19 @@
|
||||
|
||||
new_mob.languages_spoken |= HUMAN
|
||||
new_mob.languages_understood |= HUMAN
|
||||
new_mob.attack_log = M.attack_log
|
||||
new_mob.logging = M.logging
|
||||
|
||||
// Some forms can still wear some items
|
||||
for(var/obj/item/W in contents)
|
||||
new_mob.equip_to_appropriate_slot(W)
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>[M.real_name] ([M.ckey]) became [new_mob.real_name].</font>")
|
||||
M.log_message("<font color='orange'>became [new_mob.real_name].</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
new_mob.a_intent = INTENT_HARM
|
||||
|
||||
M.wabbajack_act(new_mob)
|
||||
|
||||
new_mob << "<span class='warning'>Your form morphs into that of \
|
||||
a [randomize].</span>"
|
||||
new_mob << "<span class='warning'>Your form morphs into that of a [randomize].</span>"
|
||||
|
||||
qdel(M)
|
||||
return new_mob
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
var/mob/living/carbon/monkey/M
|
||||
M = target
|
||||
M.retaliate(user)
|
||||
|
||||
|
||||
switch(mode)
|
||||
if(SYRINGE_DRAW)
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
add_logs(user, L, "injected", src, addition="which had [contained]")
|
||||
else
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) injected [L.name] ([L.ckey]) with [src.name], which had [contained] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
L.attack_log += "\[[time_stamp()]\] <font color='orange'>Injected themselves ([contained]) with [src.name].</font>"
|
||||
L.log_message("<font color='orange'>Injected themselves ([contained]) with [src.name].</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
|
||||
reagents.reaction(L, INJECT, fraction)
|
||||
|
||||
@@ -89,9 +89,9 @@
|
||||
var/boom_message = "[key_name_admin(P.firer)] triggered a fueltank explosion via projectile."
|
||||
bombers += boom_message
|
||||
message_admins(boom_message)
|
||||
var/log_message = "[key_name(P.firer)] triggered a fueltank explosion via projectile."
|
||||
P.firer.attack_log += "\[[time_stamp()]\] [log_message]"
|
||||
log_attack(log_message)
|
||||
var/log_message = "triggered a fueltank explosion via projectile."
|
||||
P.firer.log_message(log_message, INDIVIDUAL_ATTACK_LOG)
|
||||
log_attack("[key_name(P.firer)] [log_message]")
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params)
|
||||
@@ -113,9 +113,9 @@
|
||||
var/message_admins = "[key_name_admin(user)] triggered a fueltank explosion via welding tool."
|
||||
bombers += message_admins
|
||||
message_admins(message_admins)
|
||||
var/message_log = "[key_name(user)] triggered a fueltank explosion via welding tool."
|
||||
user.attack_log += "\[[time_stamp()]\] [message_log]"
|
||||
log_attack(message_log)
|
||||
var/message_log = "triggered a fueltank explosion via welding tool."
|
||||
user.log_message(message_log, INDIVIDUAL_ATTACK_LOG)
|
||||
log_attack("[key_name(user)] [message_log]")
|
||||
boom()
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -255,7 +255,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
before_cast(targets)
|
||||
invocation(user)
|
||||
if(user && user.ckey)
|
||||
user.attack_log += text("\[[time_stamp()]\] <span class='danger'>[user.real_name] ([user.ckey]) cast the spell [name].</span>")
|
||||
user.log_message("<span class='danger'>cast the spell [name].</span>", INDIVIDUAL_ATTACK_LOG)
|
||||
spawn(0)
|
||||
if(charge_type == "recharge" && recharge)
|
||||
start_recharge()
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
var/datum/objective/survive/survive = new
|
||||
survive.owner = H.mind
|
||||
H.mind.objectives += survive
|
||||
H.attack_log += "\[[time_stamp()]\] <font color='red'>Was made into a survivalist, and trusts no one!</font>"
|
||||
H.log_message("<font color='red'>Was made into a survivalist, and trusts no one!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
H.mind.announce_objectives()
|
||||
var/randomizeguns = pick(gunslist)
|
||||
var/randomizemagic = pick(magiclist)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
// BEGIN_INCLUDE
|
||||
#include "_maps\__MAP_DEFINES.dm"
|
||||
#include "_maps\runtimestation.dm"
|
||||
#include "_maps\tgstation2.dm"
|
||||
#include "code\_compile_options.dm"
|
||||
#include "code\world.dm"
|
||||
#include "code\__DATASTRUCTURES\heap.dm"
|
||||
|
||||
Reference in New Issue
Block a user