Runtime fixes for:

runtime error: Cannot modify null.layer. proc name: done (/obj/effect/equip_e/human/done) usr: Ramona Fawkes (/mob/living/carbon/human) src: the human (/obj/effect/equip_e/human)
call stack: the human (/obj/effect/equip_e/human): done() the human (/obj/effect/equip_e/human): process()

runtime error: Cannot execute null.use(). proc name: attackby (/obj/structure/barricade/wooden/attackby) usr: Jeffery Long (/mob/living/carbon/human) src: the wooden barricade (/obj/structure/barricade/wooden) call stack: the wooden barricade (/obj/structure/barricade/wooden): attackby(null, Jeffery Long (/mob/living/carbon/human)) the wooden barricade (/obj/structure/barricade/wooden): DblClick(the floor (159,129,1) (/turf/simulated/floor), "mapwindow.map", "icon-x=15;icon-y=12;left=1;scr...")

Rewrote wielded weapons to be their own weapon subclass. There was no point having a var/wielded var/twohanded var/force_unwielded var/force_wielded for every damn item when there is only 1 wield-able weapon anyway. All the wield-able stuff is now in twohanded.dm

Changed the adminhelpsound to some creative commons sound I pinched. Until somebody can get a better one. I'm sick of MAAAAAAAAOOOOOOW.

All PMs trigger the adminhelp sound. That means when you OM a player they get the sound, if a admin is PMed they only hear it if their adminhelp sounds are enabled. This should allow people to get eachother's attention when t he chat is busy.

Fixed some bad code with poddoors (which is used for the shutters in QM)

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3435 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
elly1989@rocketmail.com
2012-04-11 05:01:44 +00:00
parent cbad29832e
commit d775e1ac80
23 changed files with 272 additions and 288 deletions

View File

@@ -13,11 +13,11 @@
if (usr.client && usr.client.muted_complete)
return
for (var/mob/M in world)
if (M.client && M.client.holder)
if(M.client.sound_adminhelp)
M << 'adminhelp.ogg'
M << "\blue <b><font color=red>HELP: </font>[key_name(src, M)] (<A HREF='?src=\ref[M.client.holder];adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?src=\ref[M.client.holder];adminplayervars=\ref[src]'>VV</A>) (<A HREF='?src=\ref[M.client.holder];adminplayersubtlemessage=\ref[src]'>SM</A>) (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?src=\ref[M.client.holder];secretsadmin=check_antagonist'>CA</A>):</b> [msg]"
for (var/client/X)
if (X.holder)
if(X.sound_adminhelp)
X << 'adminhelp.ogg'
X << "\blue <b><font color=red>HELP: </font>[key_name(src, X)] (<A HREF='?src=\ref[X.holder];adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?src=\ref[X.holder];adminplayervars=\ref[src]'>VV</A>) (<A HREF='?src=\ref[X.holder];adminplayersubtlemessage=\ref[src]'>SM</A>) (<A HREF='?src=\ref[X.holder];adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?src=\ref[X.holder];secretsadmin=check_antagonist'>CA</A>):</b> [msg]"
usr << "Your message has been broadcast to administrators."
log_admin("HELP: [key_name(src)]: [msg]")

View File

@@ -521,8 +521,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
W.registered = M.real_name
M.equip_if_possible(W, M.slot_wear_id)
var/obj/item/weapon/fireaxe/fire_axe = new(M)
fire_axe.name = "Fire Axe (Unwielded)"
var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
M.equip_if_possible(fire_axe, M.slot_r_hand)
if("masked killer")
@@ -537,8 +536,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_l_store)
M.equip_if_possible(new /obj/item/weapon/scalpel(M), M.slot_r_store)
var/obj/item/weapon/fireaxe/fire_axe = new(M)
fire_axe.name = "Fire Axe (Unwielded)"
var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
M.equip_if_possible(fire_axe, M.slot_r_hand)
for(var/obj/item/carried_item in M.contents)

View File

@@ -128,34 +128,49 @@
//get message text, limit it's length.and clean/escape html
var/t = input("Message:", "Private message to [C.key]") as text|null
if (!t || !C) return
if(!t) return
if(!C)
src << "\red Error: Admin PM: Client not found."
if( !holder || !(holder.rank in list("Game Admin", "Game Master")) ) //clean the message if it's not sent by a GA or GM
t = sanitize(copytext(t,1,500))
if(!t) return
if(holder) //an Admin sent the message
if(!C.holder) C << "<font color='red' size='4'><b>-- Administrator private message --</b></font>" //only do LOUD PMs if the target isn't an admin. Hence making admin-to-admin PMs less annoying
C << "<font color='red'>Admin PM from-<b>[key_name(src, C, 0)]</b>:</font> [t]"
if(!C.holder) C << "<font color='red'><i>Click on the administrator's name to reply.</i></font>"
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>:</font> [t]"
else //a non-Admin sent the message
if(C.holder)
src << "<font color='blue'>Reply PM to-<b>[key_name(C, src, 0)]</b>:</font> [t]"
C << "<font color='red'>Reply PM from-<b>[key_name(src, C, 0)]</b>:</font> [t]"
else
src << "<font class='red'>Error: PM: Non-admin to non-admin PM communication is forbidden</font>"
if(C.holder)
if(holder) //both are admins
C << "<font color='red'>Admin PM from-<b>[key_name(src, C, 1)]</b>: [t]</font>"
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>: [t]</font>"
else //recipient is an admin but sender is not
C << "<font color='red'>Reply PM from-<b>[key_name(src, C, 1)]</b>: [t]</font>"
src << "<font color='blue'>Reply PM to-<b>[key_name(C, src, 0)]</b>: [t]</font>"
//play the recieving admin the adminhelp sound (if they have them enabled)
if(C.sound_adminhelp)
C << 'adminhelp.ogg'
else
if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT
C << "<font color='red' size='4'><b>-- Administrator private message --</b></font>"
C << "<font color='red'>Admin PM from-<b>[key_name(src, C, 0)]</b>: [t]</font>"
C << "<font color='red'><i>Click on the administrator's name to reply.</i></font>"
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>: [t]</font>"
//always play non-admin recipients the adminhelp sound
C << 'adminhelp.ogg'
else //neither are admins
src << "<font class='red'>Error: Admin PM: Non-admin to non-admin PM communication is forbidden.</font>"
return
log_admin("PM: [key_name(src)]->[key_name(C)]: [t]")
//we don't use message_admins here because the sender/receiver might get it too
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 << "<B><font color='blue'>PM: [key_name(src, K)]-&gt;[key_name(C, K)]:</B> \blue [t]</font>" //inform X
if(X.holder && X.key!=key && X.key!=C.key) //check client/X is an admin and isn't the sender or recipient
X << "<B><font color='blue'>PM: [key_name(src, X, 0)]-&gt;[key_name(C, X, 0)]:</B> \blue [t]</font>" //inform X
/client/proc/cmd_admin_godmode(mob/M as mob in world)
set category = "Special Verbs"

View File

@@ -756,7 +756,7 @@ In all, this is a lot like the monkey code. /N
<BR><B>Right Hand:</B> <A href='?src=\ref[src];item=r_hand'>[(r_hand ? text("[]", r_hand) : "Nothing")]</A>
<BR><B>Head:</B> <A href='?src=\ref[src];item=head'>[(head ? text("[]", head) : "Nothing")]</A>
<BR><B>(Exo)Suit:</B> <A href='?src=\ref[src];item=suit'>[(wear_suit ? text("[]", wear_suit) : "Nothing")]</A>
<BR><A href='?src=\ref[src];item=pockets'>Empty Pockets</A>
<BR><A href='?src=\ref[src];item=pockets'>Empty Pouches</A>
<BR><A href='?src=\ref[user];mach_close=mob[name]'>Close</A>
<BR>"}
user << browse(dat, text("window=mob[name];size=340x480"))

View File

@@ -143,9 +143,9 @@
/mob/living/carbon/proc/swap_hand()
var/obj/item/item_in_hand = src.get_active_hand()
if(item_in_hand) //this segment checks if the item in your hand is twohanded.
if(item_in_hand.twohanded == 1)
if(item_in_hand.wielded == 1)
usr << text("Your other hand is too busy holding the []",item_in_hand.name)
if(istype(item_in_hand,/obj/item/weapon/twohanded))
if(item_in_hand:wielded == 1)
usr << "<span class='warning'>Your other hand is too busy holding the [item_in_hand.name]</span>"
return
src.hand = !( src.hand )
if (!( src.hand ))

View File

@@ -463,8 +463,8 @@
return
if (!( W.flags & ONBACK ))
return
if(W.twohanded && W.wielded)
usr << "Unwield the [initial(W.name)] first!"
if(istype(W,/obj/item/weapon/twohanded) && W:wielded)
usr << "<span class='warning'>Unwield the [initial(W.name)] first!</span>"
return
u_equip(W)
back = W
@@ -1409,116 +1409,105 @@
for(var/mob/O in viewers(target, null))
O.show_message(text("\red <B>[] is trying to put \a [] on []</B>", source, item, target), 1)
else
if (place == "syringe")
for(var/mob/O in viewers(target, null))
O.show_message(text("\red <B>[] is trying to inject []!</B>", source, target), 1)
else
if (place == "pill")
for(var/mob/O in viewers(target, null))
O.show_message(text("\red <B>[] is trying to force [] to swallow []!</B>", source, target, item), 1)
else
if(place == "fuel")
for(var/mob/O in viewers(target, null))
O.show_message(text("\red [source] is trying to force [target] to eat the [item:content]!"), 1)
var/message=null
switch(place)
if("syringe")
message = text("\red <B>[] is trying to inject []!</B>", source, target)
if("pill")
message = text("\red <B>[] is trying to force [] to swallow []!</B>", source, target, item)
if("fuel")
message = text("\red [source] is trying to force [target] to eat the [item:content]!")
if("drink")
message = text("\red <B>[] is trying to force [] to swallow a gulp of []!</B>", source, target, item)
if("dnainjector")
message = text("\red <B>[] is trying to inject [] with the []!</B>", source, target, item)
if("mask")
if(istype(target.wear_mask, /obj/item/clothing)&&!target.wear_mask:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.wear_mask, target)
else
if (place == "drink")
message = text("\red <B>[] is trying to take off \a [] from []'s head!</B>", source, target.wear_mask, target)
/* if("headset")
message = text("\red <B>[] is trying to take off \a [] from []'s face!</B>", source, target.w_radio, target) */
if("l_hand")
message = text("\red <B>[] is trying to take off \a [] from []'s left hand!</B>", source, target.l_hand, target)
if("r_hand")
message = text("\red <B>[] is trying to take off \a [] from []'s right hand!</B>", source, target.r_hand, target)
if("gloves")
if(istype(target.gloves, /obj/item/clothing)&&!target.gloves:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.gloves, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s hands!</B>", source, target.gloves, target)
if("eyes")
if(istype(target.glasses, /obj/item/clothing)&&!target.glasses:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.glasses, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s eyes!</B>", source, target.glasses, target)
if("ears")
if(istype(target.ears, /obj/item/clothing)&&!target.ears:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.ears, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s ears!</B>", source, target.ears, target)
if("head")
if(istype(target.head, /obj/item/clothing)&&!target.head:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.head, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s head!</B>", source, target.head, target)
if("shoes")
if(istype(target.shoes, /obj/item/clothing)&&!target.shoes:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.shoes, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s feet!</B>", source, target.shoes, target)
if("belt")
message = text("\red <B>[] is trying to take off the [] from []'s belt!</B>", source, target.belt, target)
if("suit")
if(istype(target.wear_suit, /obj/item/clothing)&&!target.wear_suit:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
else
message = text("\red <B>[] is trying to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
if("back")
message = text("\red <B>[] is trying to take off \a [] from []'s back!</B>", source, target.back, target)
if("handcuff")
message = text("\red <B>[] is trying to unhandcuff []!</B>", source, target)
if("uniform")
if(istype(target.w_uniform, /obj/item/clothing)&&!target.w_uniform:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.w_uniform, target)
else
message = text("\red <B>[] is trying to take off \a [] from []'s body!</B>", source, target.w_uniform, target)
if("s_store")
message = text("\red <B>[] is trying to take off \a [] from []'s suit!</B>", source, target.s_store, target)
if("h_store")
message = text("\red <B>[] is trying to empty []'s hat!</B>", source, target)
if("pockets")
for(var/obj/item/weapon/mousetrap/MT in list(target.l_store, target.r_store))
if(MT.armed)
for(var/mob/O in viewers(target, null))
O.show_message(text("\red <B>[] is trying to force [] to swallow a gulp of []!</B>", source, target, item), 1)
else
if (place == "dnainjector")
for(var/mob/O in viewers(target, null))
O.show_message(text("\red <B>[] is trying to inject [] with the []!</B>", source, target, item), 1)
else
var/message = null
switch(place)
if("mask")
if(istype(target.wear_mask, /obj/item/clothing)&&!target.wear_mask:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.wear_mask, target)
else
message = text("\red <B>[] is trying to take off \a [] from []'s head!</B>", source, target.wear_mask, target)
/* if("headset")
message = text("\red <B>[] is trying to take off \a [] from []'s face!</B>", source, target.w_radio, target) */
if("l_hand")
message = text("\red <B>[] is trying to take off \a [] from []'s left hand!</B>", source, target.l_hand, target)
if("r_hand")
message = text("\red <B>[] is trying to take off \a [] from []'s right hand!</B>", source, target.r_hand, target)
if("gloves")
if(istype(target.gloves, /obj/item/clothing)&&!target.gloves:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.gloves, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s hands!</B>", source, target.gloves, target)
if("eyes")
if(istype(target.glasses, /obj/item/clothing)&&!target.glasses:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.glasses, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s eyes!</B>", source, target.glasses, target)
if("ears")
if(istype(target.ears, /obj/item/clothing)&&!target.ears:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.ears, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s ears!</B>", source, target.ears, target)
if("head")
if(istype(target.head, /obj/item/clothing)&&!target.head:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.head, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s head!</B>", source, target.head, target)
if("shoes")
if(istype(target.shoes, /obj/item/clothing)&&!target.shoes:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.shoes, target)
else
message = text("\red <B>[] is trying to take off the [] from []'s feet!</B>", source, target.shoes, target)
if("belt")
message = text("\red <B>[] is trying to take off the [] from []'s belt!</B>", source, target.belt, target)
if("suit")
if(istype(target.wear_suit, /obj/item/clothing)&&!target.wear_suit:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
else
message = text("\red <B>[] is trying to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
if("back")
message = text("\red <B>[] is trying to take off \a [] from []'s back!</B>", source, target.back, target)
if("handcuff")
message = text("\red <B>[] is trying to unhandcuff []!</B>", source, target)
if("uniform")
if(istype(target.w_uniform, /obj/item/clothing)&&!target.w_uniform:canremove)
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.w_uniform, target)
else
message = text("\red <B>[] is trying to take off \a [] from []'s body!</B>", source, target.w_uniform, target)
if("s_store")
message = text("\red <B>[] is trying to take off \a [] from []'s suit!</B>", source, target.s_store, target)
if("h_store")
message = text("\red <B>[] is trying to empty []'s hat!</B>", source, target)
if("pockets")
for(var/obj/item/weapon/mousetrap/MT in list(target.l_store, target.r_store))
if(MT.armed)
for(var/mob/O in viewers(target, null))
if(O == source)
O.show_message(text("\red <B>You reach into the [target]'s pockets, but there was a live mousetrap in there!</B>"), 1)
else
O.show_message(text("\red <B>[source] reaches into [target]'s pockets and sets off a hidden mousetrap!</B>"), 1)
target.u_equip(MT)
if (target.client)
target.client.screen -= MT
MT.loc = source.loc
MT.triggered(source, source.hand ? "l_hand" : "r_hand")
MT.layer = OBJ_LAYER
return
message = text("\red <B>[] is trying to empty []'s pockets!!</B>", source, target)
if("CPR")
if (target.cpr_time >= world.time + 3)
//SN src = null
del(src)
return
message = text("\red <B>[] is trying perform CPR on []!</B>", source, target)
if("id")
message = text("\red <B>[] is trying to take off [] from []'s uniform!</B>", source, target.wear_id, target)
if("internal")
if (target.internal)
message = text("\red <B>[] is trying to remove []'s internals</B>", source, target)
else
message = text("\red <B>[] is trying to set on []'s internals.</B>", source, target)
else
for(var/mob/M in viewers(target, null))
M.show_message(message, 1)
if(O == source)
O.show_message(text("\red <B>You reach into the [target]'s pockets, but there was a live mousetrap in there!</B>"), 1)
else
O.show_message(text("\red <B>[source] reaches into [target]'s pockets and sets off a hidden mousetrap!</B>"), 1)
target.u_equip(MT)
if (target.client)
target.client.screen -= MT
MT.loc = source.loc
MT.triggered(source, source.hand ? "l_hand" : "r_hand")
MT.layer = OBJ_LAYER
return
message = text("\red <B>[] is trying to empty []'s pockets!!</B>", source, target)
if("CPR")
if (target.cpr_time >= world.time + 3)
//SN src = null
del(src)
return
message = text("\red <B>[] is trying perform CPR on []!</B>", source, target)
if("id")
message = text("\red <B>[] is trying to take off [] from []'s uniform!</B>", source, target.wear_id, target)
if("internal")
if (target.internal)
message = text("\red <B>[] is trying to remove []'s internals</B>", source, target)
else
message = text("\red <B>[] is trying to set on []'s internals.</B>", source, target)
for(var/mob/M in viewers(target, null))
M.show_message(message, 1)
spawn( 40 )
done()
return
@@ -1538,7 +1527,7 @@ It can still be worn/put on as normal.
if(source.loc != s_loc) return
if(target.loc != t_loc) return
if(LinkBlocked(s_loc,t_loc)) return
if(item && source.equipped() != item) return
if(item && source.equipped() != item) return
if ((source.restrained() || source.stat)) return
switch(place)
if("mask")
@@ -1552,9 +1541,9 @@ It can still be worn/put on as normal.
if (W)
W.loc = target.loc
W.dropped(target)
if (W)
W.layer = initial(W.layer)
W.add_fingerprint(source)
if (W)
W.layer = initial(W.layer)
W.add_fingerprint(source)
else
if (istype(item, /obj/item/clothing/mask))
source.drop_item()
@@ -1741,9 +1730,9 @@ It can still be worn/put on as normal.
target.client.screen -= W
if (W)
W.loc = target.loc
W.dropped(target)
W.layer = initial(W.layer)
W.add_fingerprint(source)
W.dropped(target) //dropped sometimes deletes src so put it last
else
if(istype(item, /obj/item))
source.drop_item()
@@ -1765,9 +1754,9 @@ It can still be worn/put on as normal.
target.client.screen -= W
if (W)
W.loc = target.loc
W.dropped(target)
W.layer = initial(W.layer)
W.add_fingerprint(source)
W.dropped(target) //dropped sometimes deletes src so put it last
else
if (istype(item, /obj/item))
source.drop_item()

View File

@@ -191,28 +191,16 @@
var/obj/item/W = equipped()
if (W)
if(W.twohanded)
if(W.wielded)
if(hand)
var/obj/item/weapon/offhand/O = r_hand
del O
else
var/obj/item/weapon/offhand/O = l_hand
del O
W.wielded = 0 //Kinda crude, but gets the job done with minimal pain -Agouri
W.name = "[initial(W.name)]" //name reset so people don't see world fireaxes with (unwielded) or (wielded) tags
W.update_icon()
u_equip(W)
if (client)
client.screen -= W
if (W)
W.layer = initial(W.layer)
if(target)
W.loc = target.loc
else
W.loc = loc
W.dropped(src)
if (W)
W.layer = initial(W.layer)
var/turf/T = get_turf(loc)
if (istype(T))
T.Entered(W)
@@ -234,7 +222,7 @@
return r_hand
/mob/proc/get_inactive_hand()
if ( ! hand)
if (!hand)
return l_hand
else
return r_hand