diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index ccc0e3247ad..fc8657b5a0a 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -3,44 +3,35 @@
var/list/turretTargets = list()
/area/turret_protected/proc/subjectDied(target)
- if (istype(target, /mob))
- if (!istype(target, /mob/living/silicon))
- if (target:stat)
- if (target in turretTargets)
+ if( ismob(target) )
+ if( !issilicon(target) )
+ if( target:stat )
+ if( target in turretTargets )
src.Exited(target)
+//TODO: make teleporting to places trigger Entered() ~Carn
/area/turret_protected/Entered(O)
..()
- if(master && master != src)
+ if( master && master != src )
return master.Entered(O)
-// world << "[O] entered[src.x],[src.y],[src.z]"
- if (istype(O, /mob/living/carbon))
- if (!(O in turretTargets))
- turretTargets += O
- else if (istype(O, /obj/mecha))
- var/obj/mecha/M = O
- if (M.occupant)
- if (!(M in turretTargets))
- turretTargets += M
+ if( iscarbon(O) )
+ turretTargets |= O
+ else if( istype(O, /obj/mecha) )
+ var/obj/mecha/Mech = O
+ if( Mech.occupant )
+ turretTargets |= Mech
return 1
/area/turret_protected/Exited(O)
- if(master && master != src)
+ if( master && master != src )
return master.Exited(O)
-// world << "[O] exited [src.x],[src.y],[src.z]"
- if (istype(O, /mob))
- if (!istype(O, /mob/living/silicon))
- if (O in turretTargets)
- //O << "removing you from target list"
- turretTargets -= O
- //else
- //O << "You aren't in our target list!"
- else if (istype(O, /obj/mecha))
- if (O in turretTargets)
- turretTargets -= O
+ if( ismob(O) && !issilicon(O) )
+ turretTargets -= O
+ else if( istype(O, /obj/mecha) )
+ turretTargets -= O
..()
return 1
@@ -129,18 +120,19 @@
return
/obj/machinery/turret/proc/check_target(var/atom/movable/T as mob|obj)
- if(T && T in protected_area.turretTargets)
- if(!T in protected_area)
+ if( T && T in protected_area.turretTargets )
+ var/area/area_T = get_area(T)
+ if( !area_T || (area_T.type != protected_area.type) )
protected_area.Exited(T)
return 0 //If the guy is somehow not in the turret's area (teleportation), get them out the damn list. --NEO
- if(istype(T, /mob/living/carbon))
+ if( iscarbon(T) )
var/mob/living/carbon/MC = T
- if(!MC.stat)
- if(!MC.lying || lasers)
+ if( !MC.stat )
+ if( !MC.lying || lasers )
return 1
- else if(istype(T, /obj/mecha))
+ else if( istype(T, /obj/mecha) )
var/obj/mecha/ME = T
- if(ME.occupant)
+ if( ME.occupant )
return 1
return 0
@@ -325,10 +317,10 @@
if(stat & BROKEN) return
if (istype(user, /mob/living/silicon))
return src.attack_hand(user)
- else // trying to unlock the interface
+ else if( get_dist(src, user) == 0 ) // trying to unlock the interface
if (src.allowed(usr))
locked = !locked
- user << "You [ locked ? "lock" : "unlock"] the panel."
+ user << "You [ locked ? "lock" : "unlock"] the panel."
if (locked)
if (user.machine==src)
user.machine = null
@@ -337,18 +329,18 @@
if (user.machine==src)
src.attack_hand(usr)
else
- user << "\red Access denied."
+ user << "Access denied."
/obj/machinery/turretid/attack_ai(mob/user as mob)
if(!ailock)
return attack_hand(user)
else
- user << "There seems to be a firewall preventing you from accessing this device."
+ user << "There seems to be a firewall preventing you from accessing this device."
/obj/machinery/turretid/attack_hand(mob/user as mob)
- if ( (get_dist(src, user) > 1 ))
- if (!istype(user, /mob/living/silicon))
- user << text("Too far away.")
+ if ( get_dist(src, user) > 0 )
+ if ( !issilicon(user) )
+ user << "You are too far away."
user.machine = null
user << browse(null, "window=turretid")
return
@@ -392,19 +384,20 @@
if (!istype(usr, /mob/living/silicon))
usr << "Control panel is locked!"
return
- if (href_list["toggleOn"])
- src.enabled = !src.enabled
- src.updateTurrets()
- else if (href_list["toggleLethal"])
- src.lethal = !src.lethal
- src.updateTurrets()
+ if ( get_dist(src, usr) == 0 )
+ if (href_list["toggleOn"])
+ src.enabled = !src.enabled
+ src.updateTurrets()
+ else if (href_list["toggleLethal"])
+ src.lethal = !src.lethal
+ src.updateTurrets()
src.attack_hand(usr)
/obj/machinery/turretid/proc/updateTurrets()
if(control_area)
for (var/obj/machinery/turret/aTurret in get_area_all_atoms(control_area))
aTurret.setState(enabled, lethal)
- update_icons()
+ src.update_icons()
/obj/machinery/turretid/proc/update_icons()
if (src.enabled)
@@ -414,12 +407,14 @@
icon_state = "motion3"
else
icon_state = "motion0"
- if(control_area)
- for (var/obj/machinery/turretid/aTurret in get_area_all_atoms(control_area))
- aTurret.icon_state = icon_state
- aTurret.enabled = enabled
- aTurret.lethal = lethal
-
+ //CODE FIXED BUT REMOVED
+// if(control_area) //USE: updates other controls in the area
+// for (var/obj/machinery/turretid/Turret_Control in world) //I'm not sure if this is what it was
+// if( Turret_Control.control_area != src.control_area ) continue //supposed to do. Or whether the person
+// Turret_Control.icon_state = icon_state //who coded it originally was just tired
+// Turret_Control.enabled = enabled //or something. I don't see any situation
+// Turret_Control.lethal = lethal //in which this would be used on the current map.
+ //If he wants it back he can uncomment it
/obj/structure/turret/gun_turret
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index b53867a6574..f927b54b5ca 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -85,38 +85,57 @@
log_admin("DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]")
message_admins("\blue \bold DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]
", 1)
-/client/proc/cmd_admin_pm(mob/M as mob in world)
+/client/proc/cmd_admin_pm()
set category = "Admin"
set name = "Admin PM"
if(!authenticated || !holder)
src << "Only administrators may use this command."
return
- if(M)
- if(src.muted_complete)
- src << "You are muted have a nice day"
- return
- if (!( ismob(M) ))
- return
- var/t = input("Message:", text("Private message to [M.key]")) as text|null
- if(holder.rank != "Game Admin" && holder.rank != "Game Master")
- t = strip_html(t,500)
- if (!( t ))
- return
- if (usr.client && usr.client.holder)
- M << "\red Admin PM from-[key_name(usr, M, 0)]: [t]"
- usr << "\blue Admin PM to-[key_name(M, usr, 1)]: [t]"
- else
- if (M.client && M.client.holder)
- M << "\blue Reply PM from-[key_name(usr, M, 1)]: [t]"
+
+ var/list/client/targets[0]
+ for(var/client/C)
+ if(C.mob)
+ if(istype(C.mob, /mob/new_player))
+ targets["[C] - (New Player)"] = C
+ else if(istype(C.mob, /mob/dead/observer))
+ targets["[C] - [C.mob.name](Ghost)"] = C
else
- M << "\red Reply PM from-[key_name(usr, M, 0)]: [t]"
- usr << "\blue Reply PM to-[key_name(M, usr, 0)]: [t]"
+ targets["[C] - [C.mob.real_name](as [C.mob.name])"] = C
+ else
+ targets["[C] - No Mob"] = C
- log_admin("PM: [key_name(usr)]->[key_name(M)] : [t]")
+ var/target = input(usr,"To whom shall we send a message?","Admin PM",null) in targets
+ var/client/C = targets[target]
+ if( !C || !istype(C,/client) )
+ src << "\red Error: Admin-PM: Client not found."
+ return
+ if(src.muted_complete)
+ src << "\red Error: Admin-PM: You are muted."
+ return
+ var/t = input("Message:", "Private message to [C.key]") as text|null
+ if( !(holder.rank in list("Game Admin", "Game Master")) )
+ t = sanitize(copytext(t,1,500))
- for(var/mob/K in world) //we don't use message_admins here because the sender/receiver might get it too
- if(K && K.client && K.client.holder && K.key != usr.key && K.key != M.key)
- K << "PM: [key_name(usr, K)]->[key_name(M, K)]: \blue [t]"
+ if ( !t || !C || !C.mob ) return
+
+ //TODO: rewrite key_name() to use something other than mobs. ~CARN
+ if (usr.client && usr.client.holder)
+ C << "\red Admin PM from-[key_name(usr, C.mob, 0)]: [t]"
+ src << "\blue Admin PM to-[key_name(C, usr, 1)]: [t]"
+ else
+ if (C && C.holder)
+ C << "\blue Reply PM from-[key_name(usr, C.mob, 1)]: [t]"
+ else
+ C << "\red Reply PM from-[key_name(usr, C.mob, 0)]: [t]"
+ src << "\blue Reply PM to-[key_name(C.mob, usr, 0)]: [t]"
+
+ log_admin("PM: [key_name(usr)]->[key_name(C.mob)] : [t]")
+
+ for(var/client/X) //there are fewer clients than mobs
+ if(X.holder && X.key!=usr.key && X.key!=C.key) //check client/X is an admin and isn't the sender or recipient
+ var/mob/K = X.mob //get X's mob
+ if(K)
+ K << "PM: [key_name(usr, K)]->[key_name(C.mob, K)]: \blue [t]" //inform X
/client/proc/cmd_admin_godmode(mob/M as mob in world)
set category = "Special Verbs"
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 62f3d883200..a77437b335c 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -187,7 +187,7 @@
foundghost++
break
if(!foundghost)
- msg += "and [t_his] soul has departed"
+ msg += " and [t_his] soul has departed"
msg += "...\n"
else
diff --git a/code/modules/mob/living/carbon/monkey/examine.dm b/code/modules/mob/living/carbon/monkey/examine.dm
index 2a096cb755a..b1583999645 100644
--- a/code/modules/mob/living/carbon/monkey/examine.dm
+++ b/code/modules/mob/living/carbon/monkey/examine.dm
@@ -37,7 +37,7 @@
msg += ""
if (src.digitalcamo)
- msg += "It looks replusingly uncanny!\n"
+ msg += "It is repulsively uncanny!\n"
msg += "*---------*"
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index b82e8a79947..dcecf90e662 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -631,9 +631,10 @@
src.client << "\red Admin-player or player-admin conversation only!"
return.
- var/t = input("Message:", text("Private message to [C.key]")) as text|null
- if (!t || !usr || !C || !usr.client)
- return
+ //get message text, limit it's length.and clean/escape html
+ var/t = input("Message:", "Private message to [C.key]") as text|null
+ t = sanitize( copytext(t,1,500) )
+ if (!t || !usr || !C || !usr.client) return
if (usr.client && usr.client.holder) //Admin is messaging a player
C << "\red -- Administrator private message --"
C << "[key_name(usr.client, C, 0)] [t]"
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 2aed4c852b6..82a5de69434 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -233,6 +233,9 @@
else if(!href_list["late_join"])
new_player_panel()
+ if(href_list["priv_msg"])
+ ..() //pass PM calls along to /mob/Topic
+ return
proc/IsJobAvailable(rank)
var/datum/job/job = job_master.GetJob(rank)
diff --git a/html/changelog.html b/html/changelog.html
index 7dd9042e528..b0db5dfe681 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -92,6 +92,14 @@ should be listed in the changelog upon commit tho. Thanks. -->
+