#define VARSET_LIST_CALLBACK(target, var_name, var_value) CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(___callbackvarset), ##target, ##var_name, ##var_value) //dupe code because dm can't handle 3 level deep macros #define VARSET_CALLBACK(datum, var, var_value) CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(___callbackvarset), ##datum, NAMEOF(##datum, ##var), ##var_value) /// Same as VARSET_CALLBACK, but uses a weakref to the datum. /// Use this if the timer is exceptionally long. #define VARSET_WEAK_CALLBACK(datum, var, var_value) CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(___callbackvarset), WEAKREF(##datum), NAMEOF(##datum, ##var), ##var_value) /proc/___callbackvarset(list_or_datum, var_name, var_value) if(length(list_or_datum)) list_or_datum[var_name] = var_value return var/datum/datum = list_or_datum if (isweakref(datum)) var/datum/weakref/datum_weakref = datum datum = datum_weakref.resolve() if (isnull(datum)) return if(IsAdminAdvancedProcCall()) datum.vv_edit_var(var_name, var_value) //same result generally, unless badmemes else datum.vars[var_name] = var_value