Doors no longer close if there is a mob in the tile, a door can be hacked/AI overriden to close anyways and injure that mob as well as knock them down so they can be crushed again and again until they stop moving. (Currently: 35 brute and knockdown.)

The server master log now records attacks / emotes / PDA messages, as well as timestamping.  

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2899 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
VivianFoxfoot@gmail.com
2012-01-02 08:42:44 +00:00
parent e0b19c9ce3
commit bf56fc6e99
39 changed files with 314 additions and 22 deletions

View File

@@ -12,6 +12,11 @@
var/log_game = 0 // log game events var/log_game = 0 // log game events
var/log_vote = 0 // log voting var/log_vote = 0 // log voting
var/log_whisper = 0 // log client whisper var/log_whisper = 0 // log client whisper
var/log_emote = 0 // log emotes
var/log_attack = 0 // log attack messages
var/log_adminchat = 0 // log admin chat messages
var/log_adminwarn = 0 // log warnings admins get about bomb construction and such
var/log_pda = 0 // log pda messages
var/sql_enabled = 1 // for sql switching var/sql_enabled = 1 // for sql switching
var/allow_vote_restart = 0 // allow votes to restart var/allow_vote_restart = 0 // allow votes to restart
var/allow_vote_mode = 0 // allow votes to change mode var/allow_vote_mode = 0 // allow votes to change mode
@@ -141,6 +146,21 @@
if ("log_whisper") if ("log_whisper")
config.log_whisper = 1 config.log_whisper = 1
if ("log_attack")
config.log_attack = 1
if ("log_emote")
config.log_emote = 1
if ("log_adminchat")
config.log_adminchat = 1
if ("log_adminwarn")
config.log_adminwarn = 1
if ("log_pda")
config.log_pda = 1
if ("allow_vote_restart") if ("allow_vote_restart")
config.allow_vote_restart = 1 config.allow_vote_restart = 1

View File

@@ -1,28 +1,48 @@
/proc/log_admin(text) /proc/log_admin(text)
admin_log.Add(text) admin_log.Add(text)
if (config.log_admin) if (config.log_admin)
diary << "ADMIN: [text]" diary << "\[[time_stamp()]]ADMIN: [text]"
/proc/log_game(text) /proc/log_game(text)
if (config.log_game) if (config.log_game)
diary << "GAME: [text]" diary << "\[[time_stamp()]]GAME: [text]"
/proc/log_vote(text) /proc/log_vote(text)
if (config.log_vote) if (config.log_vote)
diary << "VOTE: [text]" diary << "\[[time_stamp()]]VOTE: [text]"
/proc/log_access(text) /proc/log_access(text)
if (config.log_access) if (config.log_access)
diary << "ACCESS: [text]" diary << "\[[time_stamp()]]ACCESS: [text]"
/proc/log_say(text) /proc/log_say(text)
if (config.log_say) if (config.log_say)
diary << "SAY: [text]" diary << "\[[time_stamp()]]SAY: [text]"
/proc/log_ooc(text) /proc/log_ooc(text)
if (config.log_ooc) if (config.log_ooc)
diary << "OOC: [text]" diary << "\[[time_stamp()]]OOC: [text]"
/proc/log_whisper(text) /proc/log_whisper(text)
if (config.log_whisper) if (config.log_whisper)
diary << "WHISPER: [text]" diary << "\[[time_stamp()]]WHISPER: [text]"
/proc/log_emote(text)
if (config.log_emote)
diary << "\[[time_stamp()]]EMOTE: [text]"
/proc/log_attack(text)
if (config.log_attack)
diary << "\[[time_stamp()]]ATTACK: [text]"
/*
/proc/log_adminsay(text)
if (config.log_adminchat)
diary << "\[[time_stamp()]]ADMINSAY: [text]"
*/
/proc/log_adminwarn(text)
if (config.log_adminwarn)
diary << "\[[time_stamp()]]ADMINWARN: [text]"
/proc/log_pda(text)
if (config.log_pda)
diary << "\[[time_stamp()]]PDA: [text]"

View File

@@ -6,6 +6,7 @@
Starting up. [time2text(world.timeofday, "hh:mm.ss")] Starting up. [time2text(world.timeofday, "hh:mm.ss")]
--------------------- ---------------------
Dear Diary....
"} "}

View File

@@ -17,6 +17,9 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their soul captured with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their soul captured with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to capture the soul of [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to capture the soul of [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) used the [src.name] to capture the soul of [M.name] ([M.ckey])</font>")
transfer_soul("VICTIM", M, user) transfer_soul("VICTIM", M, user)
return return

View File

@@ -7,6 +7,7 @@
#define AIRLOCK_WIRE_OPEN_DOOR 7 #define AIRLOCK_WIRE_OPEN_DOOR 7
#define AIRLOCK_WIRE_AI_CONTROL 8 #define AIRLOCK_WIRE_AI_CONTROL 8
#define AIRLOCK_WIRE_ELECTRIFY 9 #define AIRLOCK_WIRE_ELECTRIFY 9
#define AIRLOCK_WIRE_SAFETY 10
/* /*
New methods: New methods:
@@ -30,15 +31,15 @@
//This generates the randomized airlock wire assignments for the game. //This generates the randomized airlock wire assignments for the game.
/proc/RandomAirlockWires() /proc/RandomAirlockWires()
//to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else). //to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else).
var/list/wires = list(0, 0, 0, 0, 0, 0, 0, 0, 0) var/list/wires = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
airlockIndexToFlag = list(0, 0, 0, 0, 0, 0, 0, 0, 0) airlockIndexToFlag = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
airlockIndexToWireColor = list(0, 0, 0, 0, 0, 0, 0, 0, 0) airlockIndexToWireColor = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
airlockWireColorToIndex = list(0, 0, 0, 0, 0, 0, 0, 0, 0) airlockWireColorToIndex = list(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
var/flagIndex = 1 var/flagIndex = 1
for (var/flag=1, flag<512, flag+=flag) for (var/flag=1, flag<1024, flag+=flag)
var/valid = 0 var/valid = 0
while (!valid) while (!valid)
var/colorIndex = rand(1, 9) var/colorIndex = rand(1, 10)
if(wires[colorIndex]==0) if(wires[colorIndex]==0)
valid = 1 valid = 1
wires[colorIndex] = flag wires[colorIndex] = flag
@@ -66,17 +67,18 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
var/spawnPowerRestoreRunning = 0 var/spawnPowerRestoreRunning = 0
var/welded = null var/welded = null
var/locked = 0 var/locked = 0
var/wires = 511 var/wires = 1023
secondsElectrified = 0 //How many seconds remain until the door is no longer electrified. -1 if it is permanently electrified until someone fixes it. secondsElectrified = 0 //How many seconds remain until the door is no longer electrified. -1 if it is permanently electrified until someone fixes it.
var/aiDisabledIdScanner = 0 var/aiDisabledIdScanner = 0
var/aiHacking = 0 var/aiHacking = 0
var/obj/machinery/door/airlock/closeOther = null var/obj/machinery/door/airlock/closeOther = null
var/closeOtherId = null var/closeOtherId = null
var/list/signalers[9] var/list/signalers[10]
var/lockdownbyai = 0 var/lockdownbyai = 0
autoclose = 1 autoclose = 1
var/doortype = 0 var/doortype = 0
var/justzap = 0 var/justzap = 0
var/safe = 1
var/obj/item/weapon/airlock_electronics/electronics = null var/obj/item/weapon/airlock_electronics/electronics = null
/obj/machinery/door/airlock/command /obj/machinery/door/airlock/command
@@ -201,8 +203,11 @@ About the new airlock wires panel:
* one wire for opening the door. Sending a pulse through this while the door has power makes it open the door if no access is required. * one wire for opening the door. Sending a pulse through this while the door has power makes it open the door if no access is required.
* one wire for AI control. Sending a pulse through this blocks AI control for a second or so (which is enough to see the AI control light on the panel dialog go off and back on again). Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all. * one wire for AI control. Sending a pulse through this blocks AI control for a second or so (which is enough to see the AI control light on the panel dialog go off and back on again). Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
* one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. (Currently it is also STAYING electrified until someone mends the wire) * one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. (Currently it is also STAYING electrified until someone mends the wire)
* one wire for controling door safetys. When active, door does not close on someone. When cut, door will ruin someone's shit. When pulsed, door will immedately ruin someone's shit.
*/ */
/obj/machinery/door/airlock/bumpopen(mob/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite /obj/machinery/door/airlock/bumpopen(mob/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite
if(!istype(usr, /mob/living/silicon)) if(!istype(usr, /mob/living/silicon))
if(src.isElectrified()) if(src.isElectrified())
@@ -277,7 +282,11 @@ About the new airlock wires panel:
open() open()
else else
close() close()
if(AIRLOCK_WIRE_SAFETY)
safe = !safe
if(!src.density)
close()
src.updateUsrDialog()
/obj/machinery/door/airlock/proc/cut(var/wireColor) /obj/machinery/door/airlock/proc/cut(var/wireColor)
@@ -313,7 +322,9 @@ About the new airlock wires panel:
//Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. //Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted.
if(src.secondsElectrified != -1) if(src.secondsElectrified != -1)
src.secondsElectrified = -1 src.secondsElectrified = -1
if (AIRLOCK_WIRE_SAFETY)
safe = 0
src.updateUsrDialog()
/obj/machinery/door/airlock/proc/mend(var/wireColor) /obj/machinery/door/airlock/proc/mend(var/wireColor)
var/wireFlag = airlockWireColorToFlag[wireColor] var/wireFlag = airlockWireColorToFlag[wireColor]
@@ -342,6 +353,10 @@ About the new airlock wires panel:
if(src.secondsElectrified == -1) if(src.secondsElectrified == -1)
src.secondsElectrified = 0 src.secondsElectrified = 0
if (AIRLOCK_WIRE_SAFETY)
safe = 1
src.updateUsrDialog()
/obj/machinery/door/airlock/proc/isElectrified() /obj/machinery/door/airlock/proc/isElectrified()
if(src.secondsElectrified != 0) if(src.secondsElectrified != 0)
return 1 return 1
@@ -535,6 +550,14 @@ About the new airlock wires panel:
else else
t1 += text("Door is not electrified. <A href='?src=\ref[];aiEnable=5'>Electrify it for 30 seconds?</a> Or, <A href='?src=\ref[];aiEnable=6'>Electrify it indefinitely until someone cancels the electrification?</a><br>\n", src, src) t1 += text("Door is not electrified. <A href='?src=\ref[];aiEnable=5'>Electrify it for 30 seconds?</a> Or, <A href='?src=\ref[];aiEnable=6'>Electrify it indefinitely until someone cancels the electrification?</a><br>\n", src, src)
if(src.isWireCut(AIRLOCK_WIRE_SAFETY))
t1 += text("Door force sensors not responding.</a><br>\n")
else if(src.safe)
t1 += text("Door safeties operating normally. <A href='?src=\ref[];aiDisable=8'> Override?</a><br>\n",src)
else
t1 += text("Danger. Door safeties disabled. <A href='?src=\ref[];aiEnable=8'> Restore?</a><br>\n",src)
if(src.welded) if(src.welded)
t1 += text("Door appears to have been welded shut.<br>\n") t1 += text("Door appears to have been welded shut.<br>\n")
else if(!src.locked) else if(!src.locked)
@@ -639,7 +662,8 @@ About the new airlock wires panel:
"Blue" = 6, "Blue" = 6,
"Green" = 7, "Green" = 7,
"Grey" = 8, "Grey" = 8,
"Black" = 9 "Black" = 9,
"Gold" = 10
) )
for(var/wiredesc in wires) for(var/wiredesc in wires)
var/is_uncut = src.wires & airlockWireColorToFlag[wires[wiredesc]] var/is_uncut = src.wires & airlockWireColorToFlag[wires[wiredesc]]
@@ -655,7 +679,7 @@ About the new airlock wires panel:
t1 += "<a href='?src=\ref[src];signaler=[wires[wiredesc]]'>Attach signaler</a>" t1 += "<a href='?src=\ref[src];signaler=[wires[wiredesc]]'>Attach signaler</a>"
t1 += "<br>" t1 += "<br>"
t1 += text("<br>\n[]<br>\n[]<br>\n[]", (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), ((src.arePowerSystemsOn() && !(stat & NOPOWER)) ? "The test light is on." : "The test light is off!"), (src.aiControlDisabled==0 ? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off.")) t1 += text("<br>\n[]<br>\n[]<br>\n[]<br>\n[]", (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), ((src.arePowerSystemsOn() && !(stat & NOPOWER)) ? "The test light is on." : "The test light is off!"), (src.aiControlDisabled==0 ? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."), (src.safe==0 ? "The 'Check Wiring' light is on." : "The 'Check Wiring' light is off."))
t1 += text("<p><a href='?src=\ref[];close=1'>Close</a></p>\n", src) t1 += text("<p><a href='?src=\ref[];close=1'>Close</a></p>\n", src)
@@ -769,6 +793,16 @@ About the new airlock wires panel:
src.secondsElectrified = 0 src.secondsElectrified = 0
else if(src.secondsElectrified>0) else if(src.secondsElectrified>0)
src.secondsElectrified = 0 src.secondsElectrified = 0
if(8)
// Safeties! We don't need no stinking safeties!
if (src.isWireCut(AIRLOCK_WIRE_SAFETY))
usr << text("Control to door sensors is disabled.</a><br>\n")
else if (src.safe)
safe = 0
else
usr << text("Firmware reports safeties already overriden.</a><br>\n")
if(7) if(7)
//close door //close door
if(src.welded) if(src.welded)
@@ -780,6 +814,8 @@ About the new airlock wires panel:
else else
usr << text("The airlock is already closed.<br>\n") usr << text("The airlock is already closed.<br>\n")
else if(href_list["aiEnable"]) else if(href_list["aiEnable"])
var/code = text2num(href_list["aiEnable"]) var/code = text2num(href_list["aiEnable"])
switch (code) switch (code)
@@ -831,6 +867,17 @@ About the new airlock wires panel:
usr << text("The door is already electrified. You can't re-electrify it while it's already electrified.<br>\n") usr << text("The door is already electrified. You can't re-electrify it while it's already electrified.<br>\n")
else else
src.secondsElectrified = -1 src.secondsElectrified = -1
if (8) // Not in order >.>
// Safeties! Maybe we do need some stinking safeties!
if (src.isWireCut(AIRLOCK_WIRE_SAFETY))
usr << text("Control to door sensors is disabled.<br>\n")
else if (!src.safe)
safe = 1
else
usr << text("Firmware reports safeties already in place.<br>\n")
if(7) if(7)
//open door //open door
if(src.welded) if(src.welded)
@@ -999,6 +1046,24 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/close() /obj/machinery/door/airlock/close()
if(src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) if(src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
return return
if(safe)
for(var/mob/M in src.loc)
M << "The door buzzes angerly."
for(var/mob/M in src.loc)
spawn (60)
close()
return
else // OH FUCK MOVE
for(var/mob/M in src.loc)
if(isrobot(M))
M.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
else
M.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
M.SetStunned(5)
M.SetWeakened(5)
M.emote("scream")
use_power(50) use_power(50)
playsound(src.loc, 'airlock.ogg', 30, 1) playsound(src.loc, 'airlock.ogg', 30, 1)
var/obj/structure/window/killthis = (locate(/obj/structure/window) in get_turf(src)) var/obj/structure/window/killthis = (locate(/obj/structure/window) in get_turf(src))

View File

@@ -457,6 +457,9 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had the [name] used on him by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had the [name] used on him by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used [name] on [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used [name] on [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) used [name] on [M.name] ([M.ckey])</font>")
if(istype(M,/mob/dead)) if(istype(M,/mob/dead))
M.invisibility = 0 M.invisibility = 0
user.visible_message( \ user.visible_message( \

View File

@@ -516,6 +516,7 @@
playsound(P.loc, 'twobeep.ogg', 50, 1) playsound(P.loc, 'twobeep.ogg', 50, 1)
log_pda("[usr] (PDA: [src.owner]) sent \"[t]\" to [P.owner]")
if("Send Honk")//Honk virus if("Send Honk")//Honk virus

View File

@@ -16,6 +16,9 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been carded with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been carded with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to card [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to card [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) used the [src.name] to card [M.name] ([M.ckey])</font>")
transfer_ai("AICORE", "AICARD", M, user) transfer_ai("AICORE", "AICARD", M, user)
return return

View File

@@ -25,6 +25,10 @@
attack(mob/living/M as mob, mob/user as mob) attack(mob/living/M as mob, mob/user as mob)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been flashed (attempt) with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been flashed (attempt) with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to flash [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to flash [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) Used the [src.name] to flash [M.name] ([M.ckey])</font>")
if(!clown_check(user)) return if(!clown_check(user)) return
if(broken) if(broken)
user.show_message("\red The [src.name] is broken", 2) user.show_message("\red The [src.name] is broken", 2)

View File

@@ -93,6 +93,10 @@
M << "\red You feel a tiny prick!" M << "\red You feel a tiny prick!"
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been stabbed with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been stabbed with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to stab [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to stab [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])</font>")
..() ..()
return return

View File

@@ -50,6 +50,9 @@
if(!M.handcuffed) if(!M.handcuffed)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been handcuffed (attempt) by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been handcuffed (attempt) by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to handcuff [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to handcuff [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) Attempted to handcuff [M.name] ([M.ckey])</font>")
var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( )
O.source = user O.source = user
O.target = M O.target = M
@@ -172,6 +175,10 @@
M << "\red You feel a tiny prick!" M << "\red You feel a tiny prick!"
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been stabbed with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been stabbed with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to stab [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to stab [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) Used the [src.name] to stab [M.name] ([M.ckey])</font>")
return return
/obj/item/weapon/pen/sleepypen /obj/item/weapon/pen/sleepypen

View File

@@ -245,6 +245,8 @@
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>" user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>" M.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
//spawn(1800) // this wont work right //spawn(1800) // this wont work right
// M.lastattacker = null // M.lastattacker = null
///////////////////////// /////////////////////////
@@ -374,6 +376,8 @@
user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>" user.attack_log += "\[[time_stamp()]\]<font color='red'> Attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>" M.attack_log += "\[[time_stamp()]\]<font color='orange'> Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
log_attack("<font color='red'> [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
src.add_fingerprint(user) src.add_fingerprint(user)
//if((user.mutations & CLUMSY) && prob(50)) //if((user.mutations & CLUMSY) && prob(50))
// M = user // M = user

View File

@@ -10,6 +10,9 @@
attack(mob/M as mob, mob/living/silicon/robot/user as mob) attack(mob/M as mob, mob/living/silicon/robot/user as mob)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
log_attack(" <font color='red'>[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])</font>")
user.cell.charge -= 30 user.cell.charge -= 30
M.Weaken(5) M.Weaken(5)

View File

@@ -63,6 +63,8 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been injected with [name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been injected with [name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [name] to inject [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [name] to inject [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) used the [name] to inject [M.name] ([M.ckey])</font>")
if (user) if (user)
if (istype(M, /mob/living/carbon/human)) if (istype(M, /mob/living/carbon/human))
var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( )

View File

@@ -11,7 +11,10 @@
user << "Planting explosives..." user << "Planting explosives..."
if(ismob(target)) if(ismob(target))
user.attack_log += "\[[time_stamp()]\] <font color='red'> [user.real_name] tried planting [name] on [target:real_name] ([target:ckey])</font>" user.attack_log += "\[[time_stamp()]\] <font color='red'> [user.real_name] tried planting [name] on [target:real_name] ([target:ckey])</font>"
log_attack("<font color='red'> [user.real_name] ([user.ckey]) tried planting [name] on [target:real_name] ([target:ckey])</font>")
user.visible_message("\red [user.name] is trying to plant some kind of explosive on [target.name]!") user.visible_message("\red [user.name] is trying to plant some kind of explosive on [target.name]!")
if(do_after(user, 50) && in_range(user, target)) if(do_after(user, 50) && in_range(user, target))
user.drop_item() user.drop_item()
target = target target = target

View File

@@ -118,6 +118,8 @@ Deathnettle
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Had the [src.name] used on them by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Had the [src.name] used on them by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] on [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] on [M.name] ([M.ckey])</font>")
log_attack("<font color='red'> [user.name] ([user.ckey]) used the [src.name] on [M.name] ([M.ckey])</font>")
M.eye_blurry += force/7 M.eye_blurry += force/7
if(prob(20)) if(prob(20))
M.Paralyse(force/6) M.Paralyse(force/6)

View File

@@ -28,6 +28,8 @@
O.show_message("\red [M] has been implanted by [user].", 1) O.show_message("\red [M] has been implanted by [user].", 1)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'> Implanted with [src.name] ([src.imp.name]) by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'> Implanted with [src.name] ([src.imp.name]) by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] ([src.imp.name]) to implant [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] ([src.imp.name]) to implant [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) implanted [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
src.imp.loc = M src.imp.loc = M
src.imp.imp_in = M src.imp.imp_in = M
src.imp.implanted = 1 src.imp.implanted = 1

View File

@@ -55,6 +55,8 @@ KNIFE
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])</font>")
if (M.stat < 2 && M.health < 50 && prob(90)) if (M.stat < 2 && M.health < 50 && prob(90))
var/mob/H = M var/mob/H = M
// ******* Check // ******* Check
@@ -129,6 +131,9 @@ KNIFE
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey])</font>")
if(prob(15)) if(prob(15))
M.Weaken(3) M.Weaken(3)
M.take_organ_damage(3) M.take_organ_damage(3)

View File

@@ -481,6 +481,8 @@ CLIPBOARDS
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been wrapped with [src.name] by [user.name] ([user.ckey])</font>") target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been wrapped with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to wrap [target.name] ([target.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to wrap [target.name] ([target.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) used the [src.name] to wrap [target.name] ([target.ckey])</font>")
else else
user << "/blue You need more paper." user << "/blue You need more paper."
else else

View File

@@ -545,6 +545,9 @@ CIRCULAR SAW
user.attack_log += "\[[time_stamp()]\]<font color='red'> Debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>" user.attack_log += "\[[time_stamp()]\]<font color='red'> Debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Debrained by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>" M.attack_log += "\[[time_stamp()]\]<font color='orange'> Debrained by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
log_attack("<font color='red'>[user.name] ([user.ckey]) debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
var/obj/item/brain/B = new(M.loc) var/obj/item/brain/B = new(M.loc)
B.transfer_identity(M) B.transfer_identity(M)

View File

@@ -129,6 +129,10 @@ STUN BATON
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey]) (INTENT: [uppertext(user.a_intent)])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey]) (INTENT: [uppertext(user.a_intent)])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
if(isrobot(M)) if(isrobot(M))
..() ..()
return return
@@ -200,6 +204,9 @@ STUN BATON
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
if (user.a_intent == "hurt") if (user.a_intent == "hurt")
if(!..()) return if(!..()) return
playsound(src.loc, "swing_hit", 50, 1, -1) playsound(src.loc, "swing_hit", 50, 1, -1)

View File

@@ -26,6 +26,8 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
var/t = user:zone_sel.selecting var/t = user:zone_sel.selecting
if (t == "head") if (t == "head")
if (M.stat < 2 && M.health < 50 && prob(90)) if (M.stat < 2 && M.health < 50 && prob(90))

View File

@@ -25,6 +25,8 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
user << "\red You don't have the dexterity to do this!" user << "\red You don't have the dexterity to do this!"
return return

View File

@@ -21,6 +21,8 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
if (M.stat < 2 && M.health < 50 && prob(90)) if (M.stat < 2 && M.health < 50 && prob(90))
var/mob/H = M var/mob/H = M
// ******* Check // ******* Check

View File

@@ -2,6 +2,7 @@
//////////////////////////////// ////////////////////////////////
/proc/message_admins(var/text, var/admin_ref = 0) /proc/message_admins(var/text, var/admin_ref = 0)
var/rendered = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[text]</span></span>" var/rendered = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[text]</span></span>"
log_adminwarn(rendered)
for (var/mob/M in world) for (var/mob/M in world)
if (M && M.client && M.client.holder && M.client.authenticated) if (M && M.client && M.client.holder && M.client.authenticated)
if (admin_ref) if (admin_ref)
@@ -9,6 +10,7 @@
else else
M << rendered M << rendered
/obj/admins/Topic(href, href_list) /obj/admins/Topic(href, href_list)
..() ..()

View File

@@ -357,7 +357,15 @@
usr << "\red The grenade launcher cannot hold more grenades." usr << "\red The grenade launcher cannot hold more grenades."
afterattack(obj/target, mob/user , flag) afterattack(obj/target, mob/user , flag)
if(target == user) return
if (istype(target, /obj/item/weapon/storage/backpack ))
return
else if (locate (/obj/structure/table, src.loc))
return
else if(target == user)
return
if(grenades.len) if(grenades.len)
spawn(0) fire_grenade(target,user) spawn(0) fire_grenade(target,user)
@@ -366,6 +374,59 @@
proc proc
fire_grenade(atom/target, mob/user) fire_grenade(atom/target, mob/user)
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red [] fired a grenade!", user), 1)
user << "\red You fire the grenade launcher!"
if (istype(grenades[1], /obj/item/weapon/chem_grenade))
var/obj/item/weapon/chem_grenade/F = grenades[1]
grenades -= F
F.loc = user.loc
F.throw_at(target, 30, 2)
message_admins("[key_name_admin(user)] fired a chemistry grenade from a grenade launcher ([src.name]).")
log_game("[key_name_admin(user)] used a chemistry grenade ([src.name]).")
F.state = 1
F.icon_state = initial(icon_state)+"_armed"
playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
spawn(15)
F.explode()
else if (istype(grenades[1], /obj/item/weapon/flashbang))
var/obj/item/weapon/flashbang/F = grenades[1]
grenades -= F
F.loc = user.loc
F.throw_at(target, 30, 2)
F.active = 1
F.icon_state = "flashbang1"
playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
spawn(15)
F.prime()
else if (istype(grenades[1], /obj/item/weapon/smokebomb))
var/obj/item/weapon/smokebomb/F = grenades[1]
grenades -= F
F.loc = user.loc
F.throw_at(target, 30, 2)
F.icon_state = "flashbang1"
playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
spawn(15)
F.prime()
else if (istype(grenades[1], /obj/item/weapon/mustardbomb))
var/obj/item/weapon/mustardbomb/F = grenades[1]
grenades -= F
F.loc = user.loc
F.throw_at(target, 30, 2)
F.icon_state = "flashbang1"
playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
spawn(15)
F.prime()
else if (istype(grenades[1], /obj/item/weapon/empgrenade))
var/obj/item/weapon/empgrenade/F = grenades[1]
grenades -= F
F.loc = user.loc
F.throw_at(target, 30, 2)
F.active = 1
F.icon_state = "empar"
playsound(user.loc, 'armbomb.ogg', 75, 1, -3)
spawn(15)
F.prime()
if (locate (/obj/structure/table, src.loc) || locate (/obj/item/weapon/storage, src.loc)) if (locate (/obj/structure/table, src.loc) || locate (/obj/item/weapon/storage, src.loc))
return return
else else
@@ -1196,6 +1257,10 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been injected with [src.name] by [user.name] ([user.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been injected with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to inject [M.name] ([M.ckey])</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to inject [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
src.reagents.reaction(M, INGEST) src.reagents.reaction(M, INGEST)
if(M.reagents) if(M.reagents)
var/trans = reagents.trans_to(M, amount_per_transfer_from_this) var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
@@ -1310,6 +1375,8 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
for(var/mob/O in viewers(world.view, user)) for(var/mob/O in viewers(world.view, user))
O.show_message("\red [user] feeds [M] [src].", 1) O.show_message("\red [user] feeds [M] [src].", 1)
@@ -1480,6 +1547,8 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
if(reagents.total_volume) if(reagents.total_volume)
reagents.reaction(M, INGEST) reagents.reaction(M, INGEST)
@@ -1602,6 +1671,8 @@
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
if(reagents.total_volume) if(reagents.total_volume)
reagents.reaction(M, INGEST) reagents.reaction(M, INGEST)
spawn(5) spawn(5)
@@ -2204,6 +2275,8 @@
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [src.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [src.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
if(reagents.total_volume) if(reagents.total_volume)
reagents.reaction(M, INGEST) reagents.reaction(M, INGEST)
spawn(5) spawn(5)

View File

@@ -97,6 +97,7 @@
else else
src << text("Invalid Emote: []", act) src << text("Invalid Emote: []", act)
if ((message && src.stat == 0)) if ((message && src.stat == 0))
log_emote("[name]/[key] : [message]")
if (act == "roar") if (act == "roar")
playsound(src.loc, 'hiss5.ogg', 40, 1, 1) playsound(src.loc, 'hiss5.ogg', 40, 1, 1)
if (act == "deathgasp") if (act == "deathgasp")

View File

@@ -94,6 +94,7 @@
else else
src << text("Invalid Emote: []", act) src << text("Invalid Emote: []", act)
if ((message && src.stat == 0)) if ((message && src.stat == 0))
log_emote("[name]/[key] : [message]")
if (m_type & 1) if (m_type & 1)
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
O.show_message(message, m_type) O.show_message(message, m_type)

View File

@@ -461,6 +461,7 @@
src << "\blue Unusable emote '[act]'. Say *help for a list." src << "\blue Unusable emote '[act]'. Say *help for a list."
if (message) if (message)
log_emote("[name]/[key] : [message]")
if (m_type & 1) if (m_type & 1)
for (var/mob/O in viewers(src, null)) for (var/mob/O in viewers(src, null))
O.show_message(message, m_type) O.show_message(message, m_type)

View File

@@ -17,6 +17,11 @@
visible_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>") visible_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Stungloved [src.name] ([src.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='red'>Stungloved [src.name] ([src.ckey])</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been stungloved by [M.name] ([M.ckey])</font>") src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been stungloved by [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[M.name] ([M.ckey]) stungloved [src.name] ([src.ckey])</font>")
var/armorblock = run_armor_check(M.zone_sel.selecting, "energy") var/armorblock = run_armor_check(M.zone_sel.selecting, "energy")
apply_effects(5,5,0,0,5,0,0,armorblock) apply_effects(5,5,0,0,5,0,0,armorblock)
return 1 return 1
@@ -73,6 +78,9 @@
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Punched [src.name] ([src.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='red'>Punched [src.name] ([src.ckey])</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been punched by [M.name] ([M.ckey])</font>") src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been punched by [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[M.name] ([M.ckey]) punched [src.name] ([src.ckey])</font>")
var/damage = rand(0, 9) var/damage = rand(0, 9)
if(!damage) if(!damage)
playsound(loc, 'punchmiss.ogg', 25, 1, -1) playsound(loc, 'punchmiss.ogg', 25, 1, -1)
@@ -97,6 +105,10 @@
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Disarmed [src.name] ([src.ckey])</font>") M.attack_log += text("\[[time_stamp()]\] <font color='red'>Disarmed [src.name] ([src.ckey])</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been disarmed by [M.name] ([M.ckey])</font>") src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been disarmed by [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[M.name] ([M.ckey]) disarmed [src.name] ([src.ckey])</font>")
if(w_uniform) if(w_uniform)
w_uniform.add_fingerprint(M) w_uniform.add_fingerprint(M)
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting)) var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))

View File

@@ -97,6 +97,8 @@
else else
src << text("Invalid Emote: []", act) src << text("Invalid Emote: []", act)
if ((message && src.stat == 0)) if ((message && src.stat == 0))
if(src.client)
log_emote("[name]/[key] : [message]")
if (m_type & 1) if (m_type & 1)
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
O.show_message(message, m_type) O.show_message(message, m_type)

View File

@@ -160,6 +160,7 @@
affecting.loc = assailant.loc affecting.loc = assailant.loc
affecting.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their neck grabbed by [assailant.name] ([assailant.ckey])</font>") affecting.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their neck grabbed by [assailant.name] ([assailant.ckey])</font>")
assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Grabbed the neck of [affecting.name] ([affecting.ckey])</font>") assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Grabbed the neck of [affecting.name] ([affecting.ckey])</font>")
log_attack("<font color='red'>[assailant.name] ([assailant.ckey]) grabbed the neck of [affecting.name] ([affecting.ckey])</font>")
hud1.icon_state = "disarm/kill" hud1.icon_state = "disarm/kill"
hud1.name = "disarm/kill" hud1.name = "disarm/kill"
else else
@@ -170,6 +171,8 @@
O.show_message(text("\red [] has tightened his grip on []'s neck!", assailant, affecting), 1) O.show_message(text("\red [] has tightened his grip on []'s neck!", assailant, affecting), 1)
affecting.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])</font>") affecting.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])</font>")
assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>") assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>")
log_attack("<font color='red'>[assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>")
assailant.next_move = world.time + 10 assailant.next_move = world.time + 10
affecting.losebreath += 1 affecting.losebreath += 1
hud1.icon_state = "disarm/kill1" hud1.icon_state = "disarm/kill1"

View File

@@ -77,8 +77,13 @@
if(istype(firer, /mob)) if(istype(firer, /mob))
M.attack_log += text("\[[]\] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", time_stamp(), firer, firer.ckey, M, M.ckey, src) M.attack_log += text("\[[]\] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", time_stamp(), firer, firer.ckey, M, M.ckey, src)
firer.attack_log += text("\[[]\] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", time_stamp(), firer, firer.ckey, M, M.ckey, src) firer.attack_log += text("\[[]\] <b>[]/[]</b> shot <b>[]/[]</b> with a <b>[]</b>", time_stamp(), firer, firer.ckey, M, M.ckey, src)
log_attack("<font color='red'>[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]</font>")
else else
M.attack_log += text("\[[]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[]/[]</b> with a <b>[]</b>", time_stamp(), M, M.ckey, src) M.attack_log += text("\[[]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[]/[]</b> with a <b>[]</b>", time_stamp(), M, M.ckey, src)
log_attack("<font color='red'>UNKNOWN shot [M] ([M.ckey]) with a [src]</font>")
spawn(0) spawn(0)
if(A) if(A)

View File

@@ -86,7 +86,7 @@
attack(target as obj, mob/user as mob) attack(target as obj, mob/user as mob)
user.attack_log += text("\[[time_stamp()]\] <font color='blue'>Has used [src.name] on \ref[target]</font>") user.attack_log += text("\[[time_stamp()]\] <font color='blue'>Has used [src.name] on \ref[target]</font>")
log_attack("<font color='blue'>[user] ([user.ckey]) has used [src.name] on \ref[target]</font>")
if (istype(target, /obj/item)) if (istype(target, /obj/item))
var/obj/item/O = target var/obj/item/O = target
if(!istype(loc,/turf)) if(!istype(loc,/turf))

View File

@@ -26,6 +26,8 @@
#define WARNING_LOW_PRESSURE HAZARD_LOW_PRESSURE*2.5 #define WARNING_LOW_PRESSURE HAZARD_LOW_PRESSURE*2.5
#define MAX_PRESSURE_DAMAGE 20 #define MAX_PRESSURE_DAMAGE 20
// Doors!
#define DOOR_CRUSH_DAMAGE 35
// Factor of how fast mob nutrition decreases // Factor of how fast mob nutrition decreases
#define HUNGER_FACTOR 0.1 #define HUNGER_FACTOR 0.1

View File

@@ -46,6 +46,7 @@
signal.data["data"] = t signal.data["data"] = t
signal.data["sender"] = src.screen_name signal.data["sender"] = src.screen_name
src.messages += "<i><b>&rarr; You:</b></i><br>[t]<br>" src.messages += "<i><b>&rarr; You:</b></i><br>[t]<br>"
peripheral_command("send signal", signal) peripheral_command("send signal", signal)
if(href_list["func_msg"]) if(href_list["func_msg"])

View File

@@ -281,6 +281,7 @@
signal.data["tag"] = "\ref[P]" signal.data["tag"] = "\ref[P]"
src.post_signal(signal) src.post_signal(signal)
src.message_note += "<i><b>&rarr; To [P.owner]:</b></i><br>[t]<br>" src.message_note += "<i><b>&rarr; To [P.owner]:</b></i><br>[t]<br>"
log_pda("[usr] sent [t] to [P.owner]")
if("rename") if("rename")
var/datum/computer/file/F = locate(href_list["target"]) var/datum/computer/file/F = locate(href_list["target"])

View File

@@ -27,6 +27,18 @@ LOG_VOTE
## log client Whisper ## log client Whisper
LOG_WHISPER LOG_WHISPER
## log emotes
LOG_EMOTE
## log attack messages
LOG_ATTACK
## log pda messages
LOG_PDA
## log admin warning messages
##LOG_ADMINWARN ## Also duplicates a bunch of other messages.
## sql switching ## sql switching
# SQL_ENABLED # SQL_ENABLED

View File

@@ -39,7 +39,7 @@
<tr> <tr>
<td valign='top'> <td valign='top'>
<b>Credits: </b><br> <b>Credits: </b><br>
<font size='2'><b>Coders:</b> TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor<br></font> <font size='2'><b>Coders:</b> TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph<br></font>
<font size='2'><b>Spriters:</b> Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor<br></font> <font size='2'><b>Spriters:</b> Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor<br></font>
<font size='2'><b>Sounds:</b> Skie, Lasty/Vinyl<br></font> <font size='2'><b>Sounds:</b> Skie, Lasty/Vinyl<br></font>
<font size='2'><b>Thanks to:</b> CDK Station devs, GoonStation devs, the original SpaceStation developers and Erikat for the title image</font> <font size='2'><b>Thanks to:</b> CDK Station devs, GoonStation devs, the original SpaceStation developers and Erikat for the title image</font>
@@ -66,6 +66,12 @@ should be listed in the changelog upon commit tho. Thanks. -->
<ul> <ul>
<li><font color=red><b>XENOS ARE NOW IMMUNE TO STUNNING!</b></font color> To compensate, stunning via tasers/batons now slows them down significantly.</li> <li><font color=red><b>XENOS ARE NOW IMMUNE TO STUNNING!</b></font color> To compensate, stunning via tasers/batons now slows them down significantly.</li>
</ul> </ul>
<li><b>Polymorph updated:</b>
<ul>
<li>Doors no longer close if they have a mob in the tile. (Generally!) Door safties can now be overriden to close a door with a mob in the tile and injure them severely.</li>
</ul>
</ul> </ul>
<b><font color='blue'>29 December 2011</font><b> <b><font color='blue'>29 December 2011</font><b>