From d775e1ac804eb9d0259573f5f29a18d320c97ef3 Mon Sep 17 00:00:00 2001 From: "elly1989@rocketmail.com" Date: Wed, 11 Apr 2012 05:01:44 +0000 Subject: [PATCH] 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 --- code/defines/obj.dm | 4 - code/defines/obj/hydro.dm | 2 +- code/defines/obj/weapon.dm | 17 -- code/game/gamemodes/events/spacevines.dm | 5 +- code/game/machinery/deployable.dm | 10 +- code/game/machinery/doors/airlock.dm | 12 +- code/game/machinery/doors/firedoor.dm | 2 +- code/game/machinery/doors/poddoor.dm | 2 +- code/game/machinery/doors/shutters.dm | 2 +- code/game/objects/closets/fireaxe.dm | 6 +- code/game/objects/items/item.dm | 47 ---- .../game/objects/items/weapons/hydroponics.dm | 2 +- code/game/objects/items/weapons/twohanded.dm | 114 +++++++-- code/game/objects/weapons.dm | 14 -- code/game/throwing.dm | 13 -- code/modules/admin/verbs/adminhelp.dm | 10 +- code/modules/admin/verbs/debug.dm | 6 +- code/modules/admin/verbs/randomverbs.dm | 47 ++-- .../living/carbon/alien/humanoid/humanoid.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 6 +- code/modules/mob/living/carbon/human/human.dm | 221 +++++++++--------- code/modules/mob/mob.dm | 16 +- sound/effects/adminhelp.ogg | Bin 22606 -> 17220 bytes 23 files changed, 272 insertions(+), 288 deletions(-) diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 67d854f5bd2..7bdf667a013 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -281,10 +281,6 @@ var/burning = null var/hitsound = null var/w_class = 3.0 - var/wielded = 0 - var/twohanded = 0 ///Two handed and wielded off by default, nyoro~n -Agouri - var/force_unwielded = 0 - var/force_wielded = 0 flags = FPRINT | TABLEPASS pass_flags = PASSTABLE pressure_resistance = 50 diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm index ecdee67ccca..63af791578f 100644 --- a/code/defines/obj/hydro.dm +++ b/code/defines/obj/hydro.dm @@ -1628,7 +1628,7 @@ seed = "/obj/item/seeds/towermycelium" attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/fireaxe) || istype(W, /obj/item/weapon/melee/energy)) + if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy)) user.show_message("You make planks out of the [src]!", 1) for(var/i=0,i<2,i++) new /obj/item/stack/sheet/wood (src.loc) diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 2c01e104283..a067a3c5c86 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -2,12 +2,6 @@ name = "weapon" icon = 'weapons.dmi' -/obj/item/weapon/offhand - name = "offhand" - var/linked_weapon_name = "" - w_class = 5.0 - icon_state = "offhand" - /obj/item/weapon/shield name = "shield" @@ -581,17 +575,6 @@ icon = 'items.dmi' icon_state = "red_crowbar" -/obj/item/weapon/fireaxe // DEM AXES MAN, marker -Agouri - icon_state = "fireaxe0" - name = "fire axe" - desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" - force = 5 - w_class = 4.0 - flags = ONBACK - twohanded = 1 - force_unwielded = 5 - force_wielded = 18 - /obj/item/weapon/cane name = "cane" desc = "A cane used by a true gentlemen. Or a clown." diff --git a/code/game/gamemodes/events/spacevines.dm b/code/game/gamemodes/events/spacevines.dm index 06672fa2562..b6839944e0f 100644 --- a/code/game/gamemodes/events/spacevines.dm +++ b/code/game/gamemodes/events/spacevines.dm @@ -25,7 +25,7 @@ if(/obj/item/weapon/circular_saw) del src if(/obj/item/weapon/kitchen/utensil/knife) del src if(/obj/item/weapon/scalpel) del src - if(/obj/item/weapon/fireaxe) del src + if(/obj/item/weapon/twohanded/fireaxe) del src if(/obj/item/weapon/hatchet) del src if(/obj/item/weapon/melee/energy) del src @@ -213,7 +213,8 @@ spawn() //to stop the secrets panel hanging var/list/turf/simulated/floor/turfs = list() //list of all the empty floor turfs in the hallway areas - for(var/area/hallway/A) + for(var/areapath in typesof(/area/hallway)) + var/area/hallway/A = locate(areapath) for(var/turf/simulated/floor/F in A) if(!F.contents.len) turfs += F diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 998c212cbd1..a02807a74fd 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -65,7 +65,7 @@ for reference: var/health = 100.0 var/maxhealth = 100.0 - attackby(obj/item/weapon/W as obj, mob/user as mob) + attackby(obj/item/W as obj, mob/user as mob) if (istype(W, /obj/item/stack/sheet/wood)) if (src.health < src.maxhealth) for(var/mob/O in viewers(src, null)) @@ -88,7 +88,7 @@ for reference: else if (src.health <= 0) for(var/mob/O in viewers(src, null)) - O << "\red The barricade is smashed appart!" + O << "\red The barricade is smashed apart!" new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) @@ -99,14 +99,14 @@ for reference: switch(severity) if(1.0) for(var/mob/O in viewers(src, null)) - O << "\red The barricade is blown appart!" + O << "\red The barricade is blown apart!" del(src) return if(2.0) src.health -= 25 if (src.health <= 0) for(var/mob/O in viewers(src, null)) - O << "\red The barricade is blown appart!" + O << "\red The barricade is blown apart!" new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) @@ -115,7 +115,7 @@ for reference: meteorhit() for(var/mob/O in viewers(src, null)) - O << "\red The barricade is smashed appart!" + O << "\red The barricade is smashed apart!" new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index ca5e78298ac..d221781e863 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -989,13 +989,13 @@ About the new airlock wires panel: else if(istype(C, /obj/item/weapon/pai_cable)) // -- TLE var/obj/item/weapon/pai_cable/cable = C cable.plugin(src, user) - else if(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/fireaxe) ) + else if(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/twohanded/fireaxe) ) var/beingcrowbarred = null if(istype(C, /obj/item/weapon/crowbar) ) beingcrowbarred = 1 //derp, Agouri else beingcrowbarred = 0 - if( ((src.density) && ( src.welded ) && !( src.operating ) && src.p_open && (!src.arePowerSystemsOn() || (stat & NOPOWER)) && !src.locked) && beingcrowbarred == 1 ) + if( beingcrowbarred && (density && welded && !operating && src.p_open && (!src.arePowerSystemsOn() || stat & NOPOWER) && !src.locked) ) playsound(src.loc, 'Crowbar.ogg', 100, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics into the airlock assembly.") if(do_after(user,40)) @@ -1027,8 +1027,8 @@ About the new airlock wires panel: if((src.density) && (!( src.welded ) && !( src.operating ) && ((!src.arePowerSystemsOn()) || (stat & NOPOWER)) && !( src.locked ))) if(beingcrowbarred == 0) //being fireaxe'd - var/obj/item/weapon/fireaxe/F = C - if(F.wielded == 1) + var/obj/item/weapon/twohanded/fireaxe/F = C + if(F:wielded) spawn( 0 ) src.operating = 1 animate("opening") @@ -1064,8 +1064,8 @@ About the new airlock wires panel: else if((!src.density) && (!( src.welded ) && !( src.operating ) && !( src.locked ))) if(beingcrowbarred == 0) - var/obj/item/weapon/fireaxe/F = C - if(F.wielded == 1) + var/obj/item/weapon/twohanded/fireaxe/F = C + if(F:wielded) spawn( 0 ) src.operating = 1 animate("closing") diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 2d2b6d926cf..7a23377dfe0 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -38,7 +38,7 @@ update_icon() return - if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/fireaxe) && C.wielded == 1)) + if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/twohanded/fireaxe) && C:wielded == 1)) if(blocked || operating) return if(src.density) spawn(0) diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index bbc20580949..7745a9ff272 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -13,7 +13,7 @@ /obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob) src.add_fingerprint(user) - if (!( istype(C, /obj/item/weapon/crowbar || istype(C, /obj/item/weapon/fireaxe) && C.wielded == 1) )) + if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) )) return if ((src.density && (stat & NOPOWER) && !( src.operating ))) spawn( 0 ) diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 7ac0ec41fa2..8e1b9a8cae9 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -9,7 +9,7 @@ /obj/machinery/door/poddoor/shutters/attackby(obj/item/weapon/C as obj, mob/user as mob) src.add_fingerprint(user) - if (!( istype(C, /obj/item/weapon/crowbar || istype(C, /obj/item/weapon/fireaxe) && C.wielded == 1) )) + if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) )) return if ((src.density && (stat & NOPOWER) && !( src.operating ))) spawn( 0 ) diff --git a/code/game/objects/closets/fireaxe.dm b/code/game/objects/closets/fireaxe.dm index 1f3ec72b4fc..ecb6fee5edd 100644 --- a/code/game/objects/closets/fireaxe.dm +++ b/code/game/objects/closets/fireaxe.dm @@ -2,7 +2,7 @@ /obj/structure/closet/fireaxecabinet name = "Fire Axe Cabinet" desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." - var/obj/item/weapon/fireaxe/fireaxe = new/obj/item/weapon/fireaxe + var/obj/item/weapon/twohanded/fireaxe/fireaxe = new/obj/item/weapon/twohanded/fireaxe icon_state = "fireaxe1000" icon_closed = "fireaxe1000" icon_opened = "fireaxe1100" @@ -51,9 +51,9 @@ src.localopened = 1 update_icon() return - if (istype(O, /obj/item/weapon/fireaxe) && src.localopened) + if (istype(O, /obj/item/weapon/twohanded/fireaxe) && src.localopened) if(!fireaxe) - if(O.wielded) + if(O:wielded) user << "\red Unwield the axe first." return fireaxe = O diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm index ea179282d99..7867ca48f8b 100644 --- a/code/game/objects/items/item.dm +++ b/code/game/objects/items/item.dm @@ -11,20 +11,6 @@ /obj/item/proc/dropped(mob/user as mob) ..() - // So you can't drop the Offhand - if(istype(src, /obj/item/weapon/offhand)) - user.drop_item(src) - - var/obj/item/O_r = user.r_hand - var/obj/item/O_l = user.l_hand - if(O_r.twohanded) - if(O_r.wielded) - user.drop_item(O_r) - if(O_l.twohanded) - if(O_l.wielded) - user.drop_item(O_l) - del(src) - // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) return @@ -185,39 +171,6 @@ /obj/item/attackby(obj/item/weapon/W as obj, mob/user as mob) return -/obj/item/attack_self(mob/user as mob) - ..() - if(twohanded) - if(wielded) //Trying to unwield it - wielded = 0 - force = force_unwielded - src.name = "[initial(name)] (Unwielded)" - src.update_icon() //If needed by the particular item - user << "\blue You are now carrying the [initial(name)] with one hand." - - if(istype(user.get_inactive_hand(),/obj/item/weapon/offhand)) - del user.get_inactive_hand() - return - else //Trying to wield it - if(user.get_inactive_hand()) - user << "\red You need your other hand to be empty" - return - wielded = 1 - force = force_wielded - src.name = "[initial(name)] (Wielded)" - src.update_icon() //If needed by the particular item - user << "\blue You grab the [initial(name)] with both hands." - - var/obj/item/weapon/offhand/O = new /obj/item/weapon/offhand(user) ////Let's reserve his other hand~ - O.name = text("[initial(src.name)] - Offhand") - O.desc = "Your second grip on the [initial(src.name)]" - if(user.hand) - user.r_hand = O ///Place dat offhand in the opposite hand - else - user.l_hand = O - O.layer = 20 - return - /obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone) if (!istype(M)) // not sure if this is the right thing... diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm index 73b39cef0a9..2e45ffbe507 100644 --- a/code/game/objects/items/weapons/hydroponics.dm +++ b/code/game/objects/items/weapons/hydroponics.dm @@ -147,7 +147,7 @@ Craftables (Cob pipes, potato batteries, pumpkinheads) /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/fireaxe) || istype(W, /obj/item/weapon/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/melee/energy)) + if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/twohanded/fireaxe) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/melee/energy)) user.show_message("You carve a face into the [src]!", 1) new /obj/item/clothing/head/helmet/hardhat/pumpkinhead (user.loc) del(src) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 8350cbcf524..b39e32a55b9 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -2,27 +2,115 @@ ##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ######## ####################################################################*/ -///General Offhand object properties/// +//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn +//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons. +//It also tidies stuff up elsewhere. -////////////FIREAXE!////////////// +/obj/item/weapon/twohanded + var/wielded = 0 + var/force_unwielded = 0 + var/force_wielded = 0 +/obj/item/weapon/twohanded/proc/unwield() + wielded = 0 + force = force_unwielded + name = "[initial(name)]" + update_icon() -/obj/item/weapon/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = text("fireaxe[]",wielded) +/obj/item/weapon/twohanded/proc/wield() + wielded = 1 + force = force_wielded + name = "[initial(name)] (Wielded)" + update_icon() + +/obj/item/weapon/twohanded/dropped(mob/user as mob) + //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand + //bit of a hack but it keeps other code pretty neat and with fewer conditionals + var/obj/item/weapon/twohanded/O + if(user) + if(user.l_hand) + O = user.l_hand + else + O = user.r_hand + if(O && istype(O)) + O.unwield() + return unwield() + +/obj/item/weapon/twohanded/update_icon() return -/obj/item/weapon/fireaxe/pickup(mob/user) - wielded = 0 - name = "Fire Axe (Unwielded)" +/obj/item/weapon/twohanded/pickup(mob/user) + unwield() -/obj/item/weapon/fireaxe/attack_self(mob/user as mob) +/obj/item/weapon/twohanded/attack_self(mob/user as mob) if( istype(user,/mob/living/carbon/monkey) ) - user << "\red It's too heavy for you to fully wield" + user << "It's too heavy for you to wield fully." return -//welp, all is good, now to see if he's trying do twohandedly wield it or unwield it - ..() + if(wielded) //Trying to unwield it + unwield() + user << "You are now carrying the [name] with one hand." -/obj/item/weapon/offhand/dropped(mob/user as mob) - del(src) \ No newline at end of file + var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand() + if(O && istype(O)) + O.unwield() + return + + else //Trying to wield it + if(user.get_inactive_hand()) + user << "You need your other hand to be empty" + return + wield() + user << "You grab the [initial(name)] with both hands." + + var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~ + O.name = "[initial(name)] - offhand" + O.desc = "Your second grip on the [initial(name)]" + if(user.hand) + user.r_hand = O ///Place dat offhand in the opposite hand + else + user.l_hand = O + O.layer = 20 + return + +///////////OFFHAND/////////////// +/obj/item/weapon/twohanded/offhand + w_class = 5.0 + icon_state = "offhand" + name = "offhand" + + unwield() + del(src) + + wield() + del(src) + +////////////FIREAXE!////////////// +/obj/item/weapon/twohanded/fireaxe // DEM AXES MAN, marker -Agouri + icon_state = "fireaxe0" + name = "fire axe" + desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" + force = 5 + w_class = 4.0 + flags = ONBACK + force_unwielded = 5 + force_wielded = 18 + +/obj/item/weapon/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. + icon_state = "fireaxe[wielded]" + return + +/obj/item/weapon/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob) + ..() + if(A && wielded && (istype(A,/obj/structure/window) || istype(A,/obj/structure/grille))) //destroys windows and grilles in one hit + if(istype(A,/obj/structure/window)) //should just make a window.Break() proc but couldn't bother with it + var/obj/structure/window/W = A + + new /obj/item/weapon/shard( W.loc ) + if(W.reinf) new /obj/item/stack/rods( W.loc) + + if (W.dir == SOUTHWEST) + new /obj/item/weapon/shard( W.loc ) + if(W.reinf) new /obj/item/stack/rods( W.loc) + del(A) \ No newline at end of file diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index b7d2a35b21c..fd1515fdb87 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -203,17 +203,3 @@ for(var/mob/O in viewers(src, null)) O.show_message(text("\red The mousetrap is triggered by [A]."), 1) src.triggered(null) - -/obj/item/weapon/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob) - ..() - if(A && wielded && (istype(A,/obj/structure/window) || istype(A,/obj/structure/grille))) //destroys windows and grilles in one hit - if(istype(A,/obj/structure/window)) //should just make a window.Break() proc but couldn't bother with it - var/obj/structure/window/W = A - - new /obj/item/weapon/shard( W.loc ) - if(W.reinf) new /obj/item/stack/rods( W.loc) - - if (W.dir == SOUTHWEST) - new /obj/item/weapon/shard( W.loc ) - if(W.reinf) new /obj/item/stack/rods( W.loc) - del(A) \ No newline at end of file diff --git a/code/game/throwing.dm b/code/game/throwing.dm index 5403a555d01..a24a2aa550a 100644 --- a/code/game/throwing.dm +++ b/code/game/throwing.dm @@ -33,19 +33,6 @@ if(!item) return - if(istype(item,/obj/item)) - var/obj/item/IT = item - if(IT.twohanded) - if(IT.wielded) - if(hand) - var/obj/item/weapon/offhand/O = r_hand - del O - else - var/obj/item/weapon/offhand/O = l_hand - del O - - IT.wielded = 0 - IT.name = initial(IT.name) u_equip(item) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 5d13ab4a68e..7162aca1e53 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -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 HELP: [key_name(src, M)] (PP) (VV) (SM) (JMP) (CA): [msg]" + for (var/client/X) + if (X.holder) + if(X.sound_adminhelp) + X << 'adminhelp.ogg' + X << "\blue HELP: [key_name(src, X)] (PP) (VV) (SM) (JMP) (CA): [msg]" usr << "Your message has been broadcast to administrators." log_admin("HELP: [key_name(src)]: [msg]") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 43171073296..3615dd0a695 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -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) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 41a137b567b..ba985b2d1c1 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -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 << "-- Administrator private message --" //only do LOUD PMs if the target isn't an admin. Hence making admin-to-admin PMs less annoying - C << "Admin PM from-[key_name(src, C, 0)]: [t]" - if(!C.holder) C << "Click on the administrator's name to reply." - src << "Admin PM to-[key_name(C, src, 1)]: [t]" - else //a non-Admin sent the message - if(C.holder) - src << "Reply PM to-[key_name(C, src, 0)]: [t]" - C << "Reply PM from-[key_name(src, C, 0)]: [t]" - else - src << "Error: PM: Non-admin to non-admin PM communication is forbidden" + if(C.holder) + if(holder) //both are admins + C << "Admin PM from-[key_name(src, C, 1)]: [t]" + src << "Admin PM to-[key_name(C, src, 1)]: [t]" + + else //recipient is an admin but sender is not + C << "Reply PM from-[key_name(src, C, 1)]: [t]" + src << "Reply PM to-[key_name(C, src, 0)]: [t]" + + //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 << "-- Administrator private message --" + C << "Admin PM from-[key_name(src, C, 0)]: [t]" + C << "Click on the administrator's name to reply." + src << "Admin PM to-[key_name(C, src, 1)]: [t]" + + //always play non-admin recipients the adminhelp sound + C << 'adminhelp.ogg' + + else //neither are admins + src << "Error: Admin PM: Non-admin to non-admin PM communication is forbidden." 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 << "PM: [key_name(src, K)]->[key_name(C, K)]: \blue [t]" //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 << "PM: [key_name(src, X, 0)]->[key_name(C, X, 0)]: \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/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 25ffe72e189..b7d224dec56 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -756,7 +756,7 @@ In all, this is a lot like the monkey code. /N
Right Hand: [(r_hand ? text("[]", r_hand) : "Nothing")]
Head: [(head ? text("[]", head) : "Nothing")]
(Exo)Suit: [(wear_suit ? text("[]", wear_suit) : "Nothing")] -
Empty Pockets +
Empty Pouches
Close
"} user << browse(dat, text("window=mob[name];size=340x480")) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 7e41c0a111f..1bf229c96cb 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -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 << "Your other hand is too busy holding the [item_in_hand.name]" return src.hand = !( src.hand ) if (!( src.hand )) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index cdfa1eb3f8a..f860fff48b5 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -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 << "Unwield the [initial(W.name)] first!" return u_equip(W) back = W @@ -1409,116 +1409,105 @@ for(var/mob/O in viewers(target, null)) O.show_message(text("\red [] is trying to put \a [] on []", source, item, target), 1) else - if (place == "syringe") - for(var/mob/O in viewers(target, null)) - O.show_message(text("\red [] is trying to inject []!", source, target), 1) - else - if (place == "pill") - for(var/mob/O in viewers(target, null)) - O.show_message(text("\red [] is trying to force [] to swallow []!", 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 [] is trying to inject []!", source, target) + if("pill") + message = text("\red [] is trying to force [] to swallow []!", source, target, item) + if("fuel") + message = text("\red [source] is trying to force [target] to eat the [item:content]!") + if("drink") + message = text("\red [] is trying to force [] to swallow a gulp of []!", source, target, item) + if("dnainjector") + message = text("\red [] is trying to inject [] with the []!", source, target, item) + if("mask") + if(istype(target.wear_mask, /obj/item/clothing)&&!target.wear_mask:canremove) + message = text("\red [] fails to take off \a [] from []'s body!", source, target.wear_mask, target) else - if (place == "drink") + message = text("\red [] is trying to take off \a [] from []'s head!", source, target.wear_mask, target) +/* if("headset") + message = text("\red [] is trying to take off \a [] from []'s face!", source, target.w_radio, target) */ + if("l_hand") + message = text("\red [] is trying to take off \a [] from []'s left hand!", source, target.l_hand, target) + if("r_hand") + message = text("\red [] is trying to take off \a [] from []'s right hand!", source, target.r_hand, target) + if("gloves") + if(istype(target.gloves, /obj/item/clothing)&&!target.gloves:canremove) + message = text("\red [] fails to take off \a [] from []'s body!", source, target.gloves, target) + else + message = text("\red [] is trying to take off the [] from []'s hands!", source, target.gloves, target) + if("eyes") + if(istype(target.glasses, /obj/item/clothing)&&!target.glasses:canremove) + message = text("\red [] fails to take off \a [] from []'s body!", source, target.glasses, target) + else + message = text("\red [] is trying to take off the [] from []'s eyes!", source, target.glasses, target) + if("ears") + if(istype(target.ears, /obj/item/clothing)&&!target.ears:canremove) + message = text("\red [] fails to take off \a [] from []'s body!", source, target.ears, target) + else + message = text("\red [] is trying to take off the [] from []'s ears!", source, target.ears, target) + if("head") + if(istype(target.head, /obj/item/clothing)&&!target.head:canremove) + message = text("\red [] fails to take off \a [] from []'s body!", source, target.head, target) + else + message = text("\red [] is trying to take off the [] from []'s head!", source, target.head, target) + if("shoes") + if(istype(target.shoes, /obj/item/clothing)&&!target.shoes:canremove) + message = text("\red [] fails to take off \a [] from []'s body!", source, target.shoes, target) + else + message = text("\red [] is trying to take off the [] from []'s feet!", source, target.shoes, target) + if("belt") + message = text("\red [] is trying to take off the [] from []'s belt!", source, target.belt, target) + if("suit") + if(istype(target.wear_suit, /obj/item/clothing)&&!target.wear_suit:canremove) + message = text("\red [] fails to take off \a [] from []'s body!", source, target.wear_suit, target) + else + message = text("\red [] is trying to take off \a [] from []'s body!", source, target.wear_suit, target) + if("back") + message = text("\red [] is trying to take off \a [] from []'s back!", source, target.back, target) + if("handcuff") + message = text("\red [] is trying to unhandcuff []!", source, target) + if("uniform") + if(istype(target.w_uniform, /obj/item/clothing)&&!target.w_uniform:canremove) + message = text("\red [] fails to take off \a [] from []'s body!", source, target.w_uniform, target) + else + message = text("\red [] is trying to take off \a [] from []'s body!", source, target.w_uniform, target) + if("s_store") + message = text("\red [] is trying to take off \a [] from []'s suit!", source, target.s_store, target) + if("h_store") + message = text("\red [] is trying to empty []'s hat!", 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 [] is trying to force [] to swallow a gulp of []!", source, target, item), 1) - else - if (place == "dnainjector") - for(var/mob/O in viewers(target, null)) - O.show_message(text("\red [] is trying to inject [] with the []!", 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 [] fails to take off \a [] from []'s body!", source, target.wear_mask, target) - else - message = text("\red [] is trying to take off \a [] from []'s head!", source, target.wear_mask, target) -/* if("headset") - message = text("\red [] is trying to take off \a [] from []'s face!", source, target.w_radio, target) */ - if("l_hand") - message = text("\red [] is trying to take off \a [] from []'s left hand!", source, target.l_hand, target) - if("r_hand") - message = text("\red [] is trying to take off \a [] from []'s right hand!", source, target.r_hand, target) - if("gloves") - if(istype(target.gloves, /obj/item/clothing)&&!target.gloves:canremove) - message = text("\red [] fails to take off \a [] from []'s body!", source, target.gloves, target) - else - message = text("\red [] is trying to take off the [] from []'s hands!", source, target.gloves, target) - if("eyes") - if(istype(target.glasses, /obj/item/clothing)&&!target.glasses:canremove) - message = text("\red [] fails to take off \a [] from []'s body!", source, target.glasses, target) - else - message = text("\red [] is trying to take off the [] from []'s eyes!", source, target.glasses, target) - if("ears") - if(istype(target.ears, /obj/item/clothing)&&!target.ears:canremove) - message = text("\red [] fails to take off \a [] from []'s body!", source, target.ears, target) - else - message = text("\red [] is trying to take off the [] from []'s ears!", source, target.ears, target) - if("head") - if(istype(target.head, /obj/item/clothing)&&!target.head:canremove) - message = text("\red [] fails to take off \a [] from []'s body!", source, target.head, target) - else - message = text("\red [] is trying to take off the [] from []'s head!", source, target.head, target) - if("shoes") - if(istype(target.shoes, /obj/item/clothing)&&!target.shoes:canremove) - message = text("\red [] fails to take off \a [] from []'s body!", source, target.shoes, target) - else - message = text("\red [] is trying to take off the [] from []'s feet!", source, target.shoes, target) - if("belt") - message = text("\red [] is trying to take off the [] from []'s belt!", source, target.belt, target) - if("suit") - if(istype(target.wear_suit, /obj/item/clothing)&&!target.wear_suit:canremove) - message = text("\red [] fails to take off \a [] from []'s body!", source, target.wear_suit, target) - else - message = text("\red [] is trying to take off \a [] from []'s body!", source, target.wear_suit, target) - if("back") - message = text("\red [] is trying to take off \a [] from []'s back!", source, target.back, target) - if("handcuff") - message = text("\red [] is trying to unhandcuff []!", source, target) - if("uniform") - if(istype(target.w_uniform, /obj/item/clothing)&&!target.w_uniform:canremove) - message = text("\red [] fails to take off \a [] from []'s body!", source, target.w_uniform, target) - else - message = text("\red [] is trying to take off \a [] from []'s body!", source, target.w_uniform, target) - if("s_store") - message = text("\red [] is trying to take off \a [] from []'s suit!", source, target.s_store, target) - if("h_store") - message = text("\red [] is trying to empty []'s hat!", 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 You reach into the [target]'s pockets, but there was a live mousetrap in there!"), 1) - else - O.show_message(text("\red [source] reaches into [target]'s pockets and sets off a hidden mousetrap!"), 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 [] is trying to empty []'s pockets!!", source, target) - if("CPR") - if (target.cpr_time >= world.time + 3) - //SN src = null - del(src) - return - message = text("\red [] is trying perform CPR on []!", source, target) - if("id") - message = text("\red [] is trying to take off [] from []'s uniform!", source, target.wear_id, target) - if("internal") - if (target.internal) - message = text("\red [] is trying to remove []'s internals", source, target) - else - message = text("\red [] is trying to set on []'s internals.", source, target) - else - for(var/mob/M in viewers(target, null)) - M.show_message(message, 1) + if(O == source) + O.show_message(text("\red You reach into the [target]'s pockets, but there was a live mousetrap in there!"), 1) + else + O.show_message(text("\red [source] reaches into [target]'s pockets and sets off a hidden mousetrap!"), 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 [] is trying to empty []'s pockets!!", source, target) + if("CPR") + if (target.cpr_time >= world.time + 3) + //SN src = null + del(src) + return + message = text("\red [] is trying perform CPR on []!", source, target) + if("id") + message = text("\red [] is trying to take off [] from []'s uniform!", source, target.wear_id, target) + if("internal") + if (target.internal) + message = text("\red [] is trying to remove []'s internals", source, target) + else + message = text("\red [] is trying to set on []'s internals.", 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() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c6383a7abe5..6798001bef6 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -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 diff --git a/sound/effects/adminhelp.ogg b/sound/effects/adminhelp.ogg index e1051342cacb8e207c40f98efef1d24421dd57ba..704c0fd6d20fa552c750f19f606847e2dff1beaf 100644 GIT binary patch literal 17220 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 literal 22606 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