From a816e0e0aaea67cca52ccd3e3c4835a8f71a81a7 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Mon, 29 Feb 2016 08:09:47 -0800 Subject: [PATCH] Makes buildmode quit if you switch to another mob, to prevent tragedy --- code/_onclick/ai.dm | 6 +- code/_onclick/click.dm | 5 +- code/_onclick/cyborg.dm | 3 +- code/_onclick/observer.dm | 6 +- .../gamemodes/miniantags/revenant/revenant.dm | 4 +- code/modules/admin/buildmode.dm | 78 +++++++++++-------- code/modules/client/client defines.dm | 2 +- code/modules/mob/login.dm | 2 + 8 files changed, 57 insertions(+), 49 deletions(-) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 6e21012259b..5f5c105862f 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -11,8 +11,7 @@ */ /mob/living/silicon/ai/DblClickOn(var/atom/A, params) if(client.click_intercept) - if(call(client.click_intercept, "InterceptClickOn")(src, params, A)) - return + client.click_intercept.InterceptClickOn(src, params, A) if(control_disabled || stat) return @@ -28,8 +27,7 @@ next_click = world.time + 1 if(client.click_intercept) - if(call(client.click_intercept, "InterceptClickOn")(src, params, A)) - return + client.click_intercept.InterceptClickOn(src, params, A) if(control_disabled || stat) return diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index e16fc5af6c1..466f0d358e9 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -39,10 +39,7 @@ next_click = world.time + 1 if(client.click_intercept) - if(call(client.click_intercept, "InterceptClickOn")(src, params, A)) - return - else - log_to_dd("Some twerp set a click_intercept without a viable \"InterceptClickOn\" variable, go yell at them. Mob: [src]") + client.click_intercept.InterceptClickOn(src, params, A) var/list/modifiers = params2list(params) if(modifiers["shift"] && modifiers["ctrl"]) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index bc46ae1b514..39c5f965176 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -12,8 +12,7 @@ next_click = world.time + 1 if(client.click_intercept) - if(call(client.click_intercept, "InterceptClickOn")(src, params, A)) - return + client.click_intercept.InterceptClickOn(src, params, A) var/list/modifiers = params2list(params) if(modifiers["shift"] && modifiers["ctrl"]) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index e4f9fef933a..2058ce86cb1 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -1,7 +1,6 @@ /mob/dead/observer/DblClickOn(var/atom/A, var/params) if(client.click_intercept) - if(call(client.click_intercept, "InterceptClickOn")(src, params, A)) - return + client.click_intercept.InterceptClickOn(src, params, A) if(can_reenter_corpse && mind && mind.current) if(A == mind.current || (mind.current in A)) // double click your corpse or whatever holds it reenter_corpse() // (cloning scanner, body bag, closet, mech, etc) @@ -18,8 +17,7 @@ /mob/dead/observer/ClickOn(var/atom/A, var/params) if(client.click_intercept) - if(call(client.click_intercept, "InterceptClickOn")(src, params, A)) - return + client.click_intercept.InterceptClickOn(src, params, A) if(world.time <= next_move) return diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 4c7277cfdaf..817a24ff467 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -87,9 +87,9 @@ src << "You feel your essence fraying!" /mob/living/simple_animal/revenant/ClickOn(var/atom/A, var/params) //Copypaste from ghost code - revenants can't interact with the world directly.if(client.click_intercept) + if(client.click_intercept) - if(call(client.click_intercept, "InterceptClickOn")(src, params, A)) - return + client.click_intercept.InterceptClickOn(src, params, A) var/list/modifiers = params2list(params) if(modifiers["middle"]) diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index c7a2e331c44..ebe37bc9697 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -8,7 +8,7 @@ /obj/screen/buildmode icon = 'icons/misc/buildmode.dmi' - var/datum/buildmode/bd + var/datum/click_intercept/buildmode/bd /obj/screen/buildmode/New(bld) ..() @@ -88,10 +88,38 @@ cl = null qdel(I) -/datum/buildmode - var/mode = BASIC_BUILDMODE +/datum/click_intercept var/client/holder = null var/list/obj/screen/buttons = list() + +/datum/click_intercept/New(client/c) + create_buttons() + holder = c + holder.click_intercept = src + holder.show_popup_menus = 0 + holder.screen += buttons + +/datum/click_intercept/Destroy() + for(var/button in buttons) + qdel(button) + + +/datum/click_intercept/proc/create_buttons() + return + +/datum/click_intercept/proc/InterceptClickOn(user,params,atom/object) + return + +/datum/click_intercept/proc/quit() + holder.screen -= buttons + holder.click_intercept = null + holder.show_popup_menus = 1 + qdel(src) + + + +/datum/click_intercept/buildmode + var/mode = BASIC_BUILDMODE var/build_dir = SOUTH var/atom/movable/throw_atom = null var/obj/effect/buildmode_reticule/cornerA = null @@ -102,37 +130,23 @@ var/objholder = /obj/structure/closet var/atom/movable/stored = null -/datum/buildmode/New(client/c) - create_buttons() - holder = c - holder.click_intercept = src - holder.show_popup_menus = 0 - holder.screen += buttons - -/datum/buildmode/proc/quit() - holder.screen -= buttons - holder.click_intercept = null - holder.show_popup_menus = 1 - qdel(src) - -/datum/buildmode/Destroy() +/datum/click_intercept/buildmode/Destroy() stored = null Reset() - for(var/button in buttons) - qdel(button) + ..() -/datum/buildmode/proc/create_buttons() +/datum/click_intercept/buildmode/create_buttons() buttons += new /obj/screen/buildmode/mode(src) buttons += new /obj/screen/buildmode/help(src) buttons += new /obj/screen/buildmode/bdir(src) buttons += new /obj/screen/buildmode/quit(src) -/datum/buildmode/proc/toggle_modes() +/datum/click_intercept/buildmode/proc/toggle_modes() mode = (mode % NUM_BUILDMODES) +1 Reset() return -/datum/buildmode/proc/show_help(mob/user) +/datum/click_intercept/buildmode/proc/show_help(mob/user) switch(mode) if(BASIC_BUILDMODE) user << "***********************************************************" @@ -175,7 +189,7 @@ user << "Right Mouse Button on obj/mob = Select target to copy" user << "***********************************************************" -/datum/buildmode/proc/change_settings(mob/user) +/datum/click_intercept/buildmode/proc/change_settings(mob/user) switch(mode) if(BASIC_BUILDMODE) @@ -221,7 +235,7 @@ cornerA = null cornerB = null -/datum/buildmode/proc/change_dir() +/datum/click_intercept/buildmode/proc/change_dir() switch(build_dir) if(NORTH) build_dir = EAST @@ -235,32 +249,32 @@ build_dir = NORTH return 1 -/datum/buildmode/proc/deselect_region() +/datum/click_intercept/buildmode/proc/deselect_region() qdel(cornerA) cornerA = null qdel(cornerB) cornerB = null -/datum/buildmode/proc/Reset()//Reset temporary variables +/datum/click_intercept/buildmode/proc/Reset()//Reset temporary variables deselect_region() -/datum/buildmode/proc/select_tile(var/turf/T) +/datum/click_intercept/buildmode/proc/select_tile(var/turf/T) return new /obj/effect/buildmode_reticule(T, holder) -/proc/togglebuildmode(mob/M in player_list) +/proc/togglebuildmode(mob/M as mob in player_list) set name = "Toggle Build Mode" set category = "Special Verbs" if(M.client) - if(istype(M.client.click_intercept,/datum/buildmode)) - var/datum/buildmode/B = M.client.click_intercept + if(istype(M.client.click_intercept,/datum/click_intercept/buildmode)) + var/datum/click_intercept/buildmode/B = M.client.click_intercept B.quit() log_admin("[key_name(usr)] has left build mode.") else - new/datum/buildmode(M.client) + new/datum/click_intercept/buildmode(M.client) message_admins("[key_name(usr)] has entered build mode.") log_admin("[key_name(usr)] has entered build mode.") -/datum/buildmode/proc/InterceptClickOn(user,params,atom/object) //Click Intercept +/datum/click_intercept/buildmode/InterceptClickOn(user,params,atom/object) //Click Intercept var/list/pa = params2list(params) var/right_click = pa.Find("right") var/left_click = pa.Find("left") diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 3f19442f94b..fa6d0015399 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -81,4 +81,4 @@ control_freak = CONTROL_FREAK_ALL | CONTROL_FREAK_SKIN | CONTROL_FREAK_MACROS - var/datum/click_intercept = null // To use this, implement "InterceptClickOn" in your datum, then set your desired client's click_intercept to that datum \ No newline at end of file + var/datum/click_intercept/click_intercept = null \ No newline at end of file diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index ce0dfc31efe..54fc8aac90d 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -34,6 +34,8 @@ if(hud_used) qdel(hud_used) //remove the hud objects hud_used = null + if(client.click_intercept) + client.click_intercept.quit() // Let's not keep any old click_intercepts hud_used = new /datum/hud(src) next_move = 1