From 3a6df6950a4c60c2eec9ffe5aa64232dc3e9f74b Mon Sep 17 00:00:00 2001 From: GunHog Date: Fri, 22 Jul 2016 21:28:10 -0500 Subject: [PATCH] Fixes Fireball clicking issues (#19423) * Fixes Fireball clicking issues - Attempts to fix clicking issues with Fireball during mob changes and other edge cases. * Alien spit now turns off when used when out of plasma. --- .../living/carbon/alien/humanoid/alien_powers.dm | 1 + code/modules/spells/spell.dm | 4 ++-- code/modules/spells/spell_types/wizard.dm | 16 +++++++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 5f4d11a7112..e3675ce0c24 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -215,6 +215,7 @@ Doesn't work on other aliens/AI.*/ if(user.getPlasma() < p_cost) user << "You need at least [p_cost] plasma to spit." + remove_ranged_ability(user) return var/turf/T = user.loc diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index ce77ac1c1ef..d1e79c9cde5 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -9,7 +9,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin verb for now /obj/effect/proc_holder/proc/InterceptClickOn(mob/living/user, params, atom/A) - if(user.ranged_ability && user.ranged_ability != src) + if(user.ranged_ability != src) user << "[user.ranged_ability.name] has been disabled." user.ranged_ability.remove_ranged_ability(user) return TRUE //TRUE for failed, FALSE for passed. @@ -31,7 +31,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin update_icon() /obj/effect/proc_holder/proc/remove_ranged_ability(mob/living/user, var/msg) - if(!user || !user.client ||user.ranged_ability != src) //To avoid removing the wrong ability + if(!user || !user.client || (user.ranged_ability && user.ranged_ability != src)) //To avoid removing the wrong ability return user.ranged_ability = null user.client.click_intercept = null diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index ad4ffe90678..2a57323aabf 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -270,10 +270,16 @@ /obj/effect/proc_holder/spell/fireball/Click() var/mob/living/user = usr - if(!istype(user) || !can_cast(user)) + if(!istype(user)) return var/msg + + if(!can_cast(user)) + msg = "You can no longer cast Fireball." + remove_ranged_ability(user, msg) + return + if(active) msg = "You extinguish your fireball...for now." remove_ranged_ability(user, msg) @@ -282,20 +288,24 @@ add_ranged_ability(user, msg) /obj/effect/proc_holder/spell/fireball/update_icon() + if(!action) + return action.button_icon_state = "fireball[active]" action.UpdateButtonIcon() /obj/effect/proc_holder/spell/fireball/InterceptClickOn(mob/living/user, params, atom/target) if(..()) - return + return FALSE if(!cast_check(0, user)) remove_ranged_ability(user) - return + return FALSE var/list/targets = list(target) perform(targets,user = user) + return TRUE + /obj/effect/proc_holder/spell/fireball/cast(list/targets, mob/living/user) var/target = targets[1] //There is only ever one target for fireball var/turf/T = user.loc