diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 67d854f5bd..7bdf667a01 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 ecdee67ccc..63af791578 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 2c01e10428..a067a3c5c8 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 06672fa256..b6839944e0 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 998c212cbd..a02807a74f 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 ca5e78298a..d221781e86 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 2d2b6d926c..7a23377dfe 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 bbc2058094..7745a9ff27 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 7ac0ec41fa..8e1b9a8cae 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 1f3ec72b4f..ecb6fee5ed 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 ea179282d9..7867ca48f8 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 73b39cef0a..2e45ffbe50 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 8350cbcf52..b39e32a55b 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 b7d2a35b21..fd1515fdb8 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 5403a555d0..a24a2aa550 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 5d13ab4a68..7162aca1e5 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 4317107329..3615dd0a69 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 41a137b567..ba985b2d1c 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 25ffe72e18..b7d224dec5 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 7e41c0a111..1bf229c96c 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 cdfa1eb3f8..f860fff48b 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 c6383a7abe..6798001bef 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 e1051342ca..704c0fd6d2 100644 Binary files a/sound/effects/adminhelp.ogg and b/sound/effects/adminhelp.ogg differ