diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 97845c710a998..c6f70a8f36571 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -26,7 +26,7 @@ avoid code duplication. This includes items that may sometimes act as a standard //I would prefer to rename this to attack(), but that would involve touching hundreds of files. /obj/item/proc/resolve_attackby(atom/A, mob/user, var/click_params) add_fingerprint(user) - if(has_melee_strike(user)) + if(has_melee_strike_active()) return melee_strike.do_pre_strike(user,A,src,click_params) return A.attackby(src, user, click_params) diff --git a/code/modules/halo/misc/melee_strikes.dm b/code/modules/halo/misc/melee_strikes.dm index d460629a6e614..dbb969930c299 100644 --- a/code/modules/halo/misc/melee_strikes.dm +++ b/code/modules/halo/misc/melee_strikes.dm @@ -31,29 +31,39 @@ /obj/item/New() if(melee_strikes) + verbs += /obj/item/proc/verb_swap_stances + melee_strikes += null //Purposefully added, so the stance-switch system can allow you to switch to no-stance for lunges and such. for(var/type in melee_strikes) if(isnull(type)) continue var/strike = new type melee_strikes -= type melee_strikes += strike - melee_strikes += null //Purposefully added, so the stance-switch system can allow you to switch to no-stance for lunges and such. . = ..() +/obj/item/proc/has_melee_strike_active() + return melee_strike + /obj/item/proc/has_melee_strike(var/mob/user) - if(isnull(melee_strikes)) - return null + if(!melee_strikes || melee_strikes.len == 0) + return 0 + if(ishuman(user)) + var/mob/living/carbon/human/h = user + if(src in list(h.l_hand,h.r_hand) && has_melee_strike(user)) + verbs |= /obj/item/proc/verb_swap_stances + else + verbs -= /obj/item/proc/verb_swap_stances if(isnull(melee_strike)) melee_strike = melee_strikes[1] if(!isnull(melee_strike)) melee_strike.strike_active(user) - return melee_strike + return 1 /obj/item/proc/verb_swap_stances() set name = "Swap Stances" set category = "Object" - var/mob/living/carbon/human/user = usr + var/mob/living/user = usr if(!istype(user)) return if(user.stat) return @@ -70,22 +80,8 @@ melee_strike = stance_curr if(stance_curr == null) to_chat(user,"You return to your normal weapon stance.") - return - stance_curr.strike_active(user) - -/obj/item/equipped(var/mob/living/carbon/human/user) - . = ..() - if(src in list(user.l_hand,user.r_hand) && has_melee_strike(user)) - verbs |= /obj/item/proc/verb_swap_stances - else - verbs -= /obj/item/proc/verb_swap_stances - -/obj/item/dropped(mob/user as mob) - . = ..() - if(src in list(user.l_hand,user.r_hand) && has_melee_strike(user)) - verbs |= /obj/item/proc/verb_swap_stances else - verbs -= /obj/item/proc/verb_swap_stances + stance_curr.strike_active(user) //Most elements of melee strikes should do nothing extra if set to null. /datum/melee_strike @@ -101,7 +97,7 @@ //These set a max timeframe on chaining, otherwise it reverts back to a base strike type. var/chain_timeframe = 2 SECONDS var/chain_expire_at = 0 - var/chain_base_strike = null //Typepath. + var/chain_base_strike = null //Typepath.to reset a chain back to. /datum/melee_strike/proc/strike_active(var/mob/user) if(strike_switch_text) //Combos may want to keep this quiet. diff --git a/code/modules/halo/weapons/_lunging.dm b/code/modules/halo/weapons/_lunging.dm index a995754655a49..91682477e2214 100644 --- a/code/modules/halo/weapons/_lunging.dm +++ b/code/modules/halo/weapons/_lunging.dm @@ -62,7 +62,7 @@ /obj/item/afterattack(var/atom/target,var/mob/user,var/is_adjacent,var/click_params) . = ..() - if(has_melee_strike() && (is_adjacent || (melee_strike.strike_range >= get_dist( get_turf(user),target)))) + if(has_melee_strike_active() && (is_adjacent || (melee_strike.strike_range >= get_dist( get_turf(user),target)))) melee_strike.do_pre_strike(user,target,src,click_params) else do_lunge(target,user,is_adjacent,click_params) \ No newline at end of file