public static ConditionSpec.Builder AddQueryHandler <T>(this ConditionSpec.Builder builder, D20DispatcherKey query, SubDispatcherCallback <T> handler, T data) { void HandlerWithArgs(in DispatcherCallbackArgs args) => handler(in args, data); return(AddQueryHandler(builder, query, HandlerWithArgs)); }
public static ConditionSpec.Builder AddAoESpellEndStandardHook(this ConditionSpec.Builder builder) { // adds a EK_S_Spell_End handler that: // 1. Ends particles for all spell objects // 2. RemoveSpellMod() return(builder.AddSignalHandler(D20DispatcherKey.SIG_Spell_End, SpellEffects.AoESpellRemove, 0)); }
public static ConditionSpec.Builder AddSkillLevelHandler <T, U>(this ConditionSpec.Builder builder, SkillId skill, SubDispatcherCallback <T, U> handler, T data1, U data2) { void HandlerWithArgs(in DispatcherCallbackArgs args) => handler(in args, data1, data2); return(AddSkillLevelHandler(builder, skill, HandlerWithArgs)); }
public static ConditionSpec.Builder AddSignalHandler <T, U>(this ConditionSpec.Builder builder, D20DispatcherKey signal, SubDispatcherCallback <T, U> handler, T data1, U data2) { void HandlerWithArgs(in DispatcherCallbackArgs args) => handler(in args, data1, data2); return(AddSignalHandler(builder, signal, HandlerWithArgs)); }
public static ConditionSpec.Builder AddSpellDismissStandardHook(this ConditionSpec.Builder builder) { // adds a EK_S_Spell_End handler that: // 1. Ends particles for all spell objects // 2. RemoveSpellMod() return(builder.AddHandler(DispatcherType.ConditionAdd, SpellEffects.SpellAddDismissCondition)); }
public static ConditionSpec.Builder AddHandler <T, U>(this ConditionSpec.Builder builder, DispatcherType type, D20DispatcherKey key, SubDispatcherCallback <T, U> handler, T data1, U data2) { void HandlerWithArgs(in DispatcherCallbackArgs args) => handler(in args, data1, data2); return(builder.AddHandler(type, key, HandlerWithArgs)); }
public static ConditionSpec.Builder AddHandler <T>(this ConditionSpec.Builder builder, DispatcherType type, SubDispatcherCallback <T> handler, T data) { void HandlerWithArgs(in DispatcherCallbackArgs args) => handler(in args, data); return(builder.AddHandler(type, HandlerWithArgs)); }
public static ConditionSpec.Builder Prevents(this ConditionSpec.Builder builder, ConditionSpec otherCondition) { return(builder.AddHandler( DispatcherType.ConditionAddPre, CommonConditionCallbacks.CondPrevent, otherCondition )); }
public static ConditionSpec.Builder AddUniqueTooltip(this ConditionSpec.Builder builder, int combatMesLine) { builder.AddHandler(DispatcherType.Tooltip, (in DispatcherCallbackArgs evt) => { var dispIo = evt.GetDispIoTooltip(); var text = GameSystems.D20.Combat.GetCombatMesLine(combatMesLine); dispIo.AppendUnique(text); });
public static ConditionSpec.Builder RemovedBy(this ConditionSpec.Builder builder, ConditionSpec otherCondition) { // Uses ConditionAddPre, and CondOverrideBy + the struct as data1 return(builder.AddHandler( DispatcherType.ConditionAddPre, CommonConditionCallbacks.CondOverrideBy, otherCondition )); }
public static ConditionSpec.Builder AddSpellCountdownStandardHook(this ConditionSpec.Builder builder) { // adds an ET_OnBeginRound handler that (normally) does: // If countdown expired: (<0) // 1. Float text "Spell Expired" // 2. RemoveSpell() (has case-by-case handlers for Spell_End; Temple+ adds generic handling for wall spells here) // 3. RemoveSpellMod() // Else: // Decrement count, update spell packet duration return(builder.AddHandler(DispatcherType.BeginRound, SpellEffects.SpellModCountdownRemove, 0)); }
public static ConditionSpec.Builder Prevents(this ConditionSpec.Builder builder, Predicate <ConditionSpec> conditionPredicate) { void Callback(in DispatcherCallbackArgs evt) { var dispIo = evt.GetDispIoCondStruct(); if (conditionPredicate(dispIo.condStruct)) { dispIo.outputFlag = false; } } return(builder.AddHandler( DispatcherType.ConditionAddPre, Callback )); }
// Sets the result for the given query to the given constant boolean public static ConditionSpec.Builder SetQueryResult(this ConditionSpec.Builder builder, D20DispatcherKey query, bool result) { if (result) { return(builder.AddHandler( DispatcherType.D20Query, query, CommonConditionCallbacks.QuerySetReturnVal1 )); } else { return(builder.AddHandler( DispatcherType.D20Query, query, CommonConditionCallbacks.QuerySetReturnVal0 )); } }
// Removes the condition when the given signal is received public static ConditionSpec.Builder RemoveOnSignal(this ConditionSpec.Builder builder, D20DispatcherKey signal) { builder.AddSignalHandler(signal, (in DispatcherCallbackArgs evt) => evt.RemoveThisCondition()); return(builder); }
public static ConditionSpec.Builder AddSignalHandler(this ConditionSpec.Builder builder, string signal, SubDispatcherCallback callback) { builder.AddHandler(DispatcherType.PythonSignal, (D20DispatcherKey)ElfHash.Hash(signal), callback); return(builder); }
public static ConditionSpec.Builder AddQueryHandler(this ConditionSpec.Builder builder, string query, SubDispatcherCallback callback) { builder.AddHandler(DispatcherType.PythonQuery, (D20DispatcherKey)ElfHash.Hash(query), callback); return(builder); }
public static ConditionSpec.Builder AddQueryHandler(this ConditionSpec.Builder builder, D20DispatcherKey query, SubDispatcherCallback callback) { builder.AddHandler(DispatcherType.D20Query, query, callback); return(builder); }
public static ConditionSpec.Builder AddSkillLevelHandler(this ConditionSpec.Builder builder, SkillId skill, SubDispatcherCallback callback) { builder.AddHandler(DispatcherType.SkillLevel, D20DispatcherKey.SKILL_APPRAISE + (int)skill, callback); return(builder); }
public static ConditionSpec.Builder AddItemForceRemoveHandler(this ConditionSpec.Builder builder) { return(builder.AddHandler(DispatcherType.ItemForceRemove, ItemEffects.ItemForceRemoveCallback_SetItemPadWielderArgs)); }
public static ConditionSpec.Builder AddSignalHandler(this ConditionSpec.Builder builder, D20DispatcherKey signal, SubDispatcherCallback callback) { builder.AddHandler(DispatcherType.D20Signal, signal, callback); return(builder); }