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);
 }
Example #19
0
 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);
 }