/datum/buildmode/proccall name = "Proc Call (single)" desc = {"***********************************************************
Right Mouse Button on buildmode button = Set proc details
Left Mouse Button on turf/mob/obj = Call proc on target
Right Mouse Button = Show current proc settings (depending on how many arguments you have defined this could be laggy, be careful!)
Hold down CTRL, ALT or SHIFT to modify, call or view proc bound to those keys.
***********************************************************"} icon_state = "buildmode3" admin_level = LEVEL_CODER // no modifier key held down var/procname_n = null var/targeted_n = 1 var/list/listargs_n = null // ctrl held down var/procname_c = null var/targeted_c = 1 var/list/listargs_c = null // alt held down var/procname_a = null var/targeted_a = 1 var/list/listargs_a = null // shift held down var/procname_s = null var/targeted_s = 1 var/list/listargs_s = null click_mode_right(var/ctrl, var/alt, var/shift) var/istargeted = 1 switch (alert("Proc owned by obj? Yes to call proc on what you click on, No to call global proc", "Global Proc[ctrl ? " (CTRL)" : alt ? " (ALT)" : shift ? " (SHIFT)" : null]", "Yes", "No", "Cancel")) if ("Cancel") return if ("No") istargeted = 0 var/newpn = input("Enter proc name[ctrl ? " (CTRL)" : alt ? " (ALT)" : shift ? " (SHIFT)" : null]:", "Proc Name[ctrl ? " (CTRL)" : alt ? " (ALT)" : shift ? " (SHIFT)" : null]", ctrl ? procname_c : alt ? procname_a : shift ? procname_s : procname_n) as text|null if (!newpn) return var/nargs = get_proccall_arglist() if (ctrl) procname_c = newpn targeted_c = istargeted listargs_c = nargs else if (alt) procname_a = newpn targeted_a = istargeted listargs_a = nargs else if (shift) procname_s = newpn targeted_s = istargeted listargs_s = nargs else procname_n = newpn targeted_n = istargeted listargs_n = nargs click_left(atom/object, var/ctrl, var/alt, var/shift) var/proc2call = null var/targeted = 0 var/list/args2use = null if (ctrl) if (!procname_c) boutput(usr, "No proc defined for CTRL! Please right click the buildmode button with CTRL held down to enter a proc.") return proc2call = procname_c targeted = targeted_c args2use = listargs_c else if (alt) if (!procname_a) boutput(usr, "No proc defined for ALT! Please right click the buildmode button with ALT held down to enter a proc.") return proc2call = procname_a targeted = targeted_a args2use = listargs_a else if (shift) if (!procname_s) boutput(usr, "No proc defined for SHIFT! Please right click the buildmode button with SHIFT held down to enter a proc.") return proc2call = procname_s targeted = targeted_s args2use = listargs_s else if (!procname_n) boutput(usr, "No proc defined! Please right click the buildmode button to enter a proc.") return proc2call = procname_n targeted = targeted_n args2use = listargs_n if (!proc2call) // just in case? return try var/returnval = null if (targeted) boutput(usr, "Calling '[proc2call]' with [islist(args2use) ? args2use.len : "0"] arguments on '[object]'") if (islist(args2use) && args2use.len) returnval = call(object,proc2call)(arglist(args2use)) else returnval = call(object,proc2call)() blink(get_turf(object)) else boutput(usr, "Calling '[proc2call]' with [islist(args2use) ? args2use.len : "0"] arguments") if (islist(args2use) && args2use.len) returnval = call(proc2call)(arglist(args2use)) else returnval = call(proc2call)() boutput(usr, "Proc returned: [!isnull(returnval) ? returnval : "null"]") catch(var/exception/e) world.log << "[usr.key] called a bad proc in buildmode and this can probably be ignored! ([e] on [e.file]:[e.line])" boutput(usr, "Proc returned: [e] ([e.file]:[e.line])") click_right(atom/object, var/ctrl, var/alt, var/shift) var/info2print = "***********************************************************" var/modkey = null var/proc2list = null var/targeted = 0 var/list/args2list = null if (ctrl) if (procname_c) modkey = "CTRL" proc2list = procname_c targeted = targeted_c args2list = listargs_c else if (alt) if (procname_a) modkey = "ALT" proc2list = procname_a targeted = targeted_a args2list = listargs_a else if (shift) if (procname_s) modkey = "SHIFT" proc2list = procname_s targeted = targeted_s args2list = listargs_s else if (procname_n) proc2list = procname_n targeted = targeted_n args2list = listargs_n if (proc2list) info2print += "
Modifier key: [modkey ? modkey : "None"]" info2print += "
Proc name: [proc2list]" info2print += "
Global: [targeted ? "NO" : "YES"] (will [targeted ? null : " not"]be called on the clicked target)" if (islist(args2list) && args2list.len) var/argnum = 0 for (var/thing in args2list) argnum++ info2print += "
Arg#[argnum]: [thing]" else info2print += "
No arguments defined." else info2print += "
No proc defined[modkey ? " for [modkey]" : null]! Please right click the buildmode button[modkey ? " with [modkey] held down" : null] to enter a proc." info2print += "
***********************************************************" boutput(usr, info2print)