Ejemplo n.º 1
0
 public static ConditionSpec.Builder Create(D20ClassSpec classSpec)
 {
     return(ConditionSpec.Create(classSpec.conditionName)
            .SetUnique()
            .AddHandler(DispatcherType.ToHitBonusBase, AddClassBaseAttackBonus, classSpec.classEnum)
            .AddHandler(DispatcherType.SaveThrowLevel, AddClassSavingThrowBonus, classSpec.classEnum)
            .AddHandler(DispatcherType.GetBaseCasterLevel, AddBaseCasterLevel, classSpec.classEnum));
 }
Ejemplo n.º 2
0
 public static ConditionSpec.Builder Prevents(this ConditionSpec.Builder builder, ConditionSpec otherCondition)
 {
     return(builder.AddHandler(
                DispatcherType.ConditionAddPre,
                CommonConditionCallbacks.CondPrevent,
                otherCondition
                ));
 }
    public static bool AddCondition(this GameObject obj, ConditionSpec conditionSpec, params object[] args)
    {
        Trace.Assert(obj.IsCritter());
        Trace.Assert(args.Length == conditionSpec.numArgs);

        if (!(obj.GetDispatcher() is Dispatcher dispatcher))
        {
            return(false);
        }

        return(dispatcher._ConditionAdd(conditionSpec, args));
    }
 public ConditionAttachment(ConditionSpec cond)
 {
     condStruct = cond;
     flags      = 0;
     if (cond.numArgs > 0)
     {
         args = new object[cond.numArgs];
     }
     else
     {
         args = null;
     }
 }
    public static bool HasCondition(this GameObject obj, ConditionSpec condition)
    {
        var dispatcher = obj.GetDispatcher();

        if (dispatcher == null)
        {
            return(false); // Can't have conditions without a dispatcher
        }

        var dispIo = DispIoD20Query.Default;

        dispIo.obj = condition;
        dispatcher.Process(DispatcherType.D20Query, D20DispatcherKey.QUE_Critter_Has_Condition, dispIo);
        return(dispIo.return_val != 0);
    }
Ejemplo n.º 6
0
    private void WriteCondition(TextWriter writer, ConditionSpec conditionSpec)
    {
        writer.WriteLine();
        writer.WriteLine($"=== {conditionSpec.condName}");
        writer.WriteLine("");

        // We can print additional info if we were able to successfully extract the data from the C# source
        if (_conditionSpecs.TryGetValue(conditionSpec.condName, out var condSource))
        {
            if (condSource.TempleDllLocation != null)
            {
                writer.WriteLine("");
                writer.WriteLine($"*Temple DLL Location:* {condSource.TempleDllLocation}");
                writer.WriteLine("");
            }

            writer.WriteLine($".{condSource.Location}");
            writer.WriteLine("[source,csharp]");
            writer.WriteLine("----");
            writer.WriteLine(condSource.Definition);
            writer.WriteLine("----");
        }

        if (conditionSpec.numArgs > 0)
        {
            writer.WriteLine(".Arguments");
            writer.WriteLine("|===");
            writer.WriteLine("| Index | Type | Description");
            writer.WriteLine();

            for (var i = 0; i < conditionSpec.numArgs; i++)
            {
                writer.WriteLine($"| {i}");
                writer.WriteLine("| Integer");
                writer.WriteLine("| ...");
                writer.WriteLine("");
            }

            writer.WriteLine("|===");
        }
        else
        {
            writer.WriteLine("No Arguments");
            writer.WriteLine("");
        }

        writer.WriteLine();
    }
Ejemplo n.º 7
0
    public bool CritterHasCondition(GameObject obj, ConditionSpec conditionSpec, out int spellIdx)
    {
        var dispatcher = obj.GetDispatcher();

        if (dispatcher == null)
        {
            spellIdx = -1;
            return(false);
        }

        var dispIO = DispIoD20Query.Default;

        dispIO.obj = conditionSpec;
        dispatcher.Process(DispatcherType.D20Query, D20DispatcherKey.QUE_Critter_Has_Condition, dispIO);

        spellIdx = (int)dispIO.data2;  // TODO: This is most likely wrong. check this again.
        return(dispIO.return_val != 0);
    }
Ejemplo n.º 8
0
    public static void DispatcherProcessorForItems(ConditionSpec condStruct, Span <int> condArgs,
                                                   DispatcherType dispType, D20DispatcherKey key, object dispIo)
    {
        var condAttachment = new ConditionAttachment(condStruct);

        for (int i = 0; i < condStruct.numArgs; i++)
        {
            condAttachment.args[i] = condArgs[i];
        }

        for (int i = 0; i < condStruct.subDispDefs.Length; i++)
        {
            var sdd = condStruct.subDispDefs[i];
            if (sdd.dispType == dispType && (sdd.dispKey == key || sdd.dispKey == D20DispatcherKey.NONE))
            {
                var attachment = new SubDispatcherAttachment();
                attachment.subDispDef = sdd;
                attachment.condNode   = condAttachment;
                var callbackArgs = new DispatcherCallbackArgs(attachment, null, dispType, key, dispIo);
                sdd.callback(in callbackArgs);
            }
        }
    }
Ejemplo n.º 9
0
 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
                ));
 }
Ejemplo n.º 10
0
 public MappedDomainCondition(ConditionSpec condition, int data1, int data2)
 {
     Condition = condition;
     Data1     = data1;
     Data2     = data2;
 }
Ejemplo n.º 11
0
 private static bool HasCondition(this GameObject obj, ConditionSpec condition)
 {
     return(ConditionExtensions.HasCondition(obj, condition));
 }
 public static void AddConditionToPartyAround(this GameObject conditionCenter, float range, ConditionSpec condStruct, GameObject effectOriginator)
 {
     foreach (var partyMember in GameSystems.Party.PartyMembers)
     {
         if (conditionCenter.DistanceToObjInFeet(partyMember) < range)
         {
             partyMember.AddCondition(condStruct, effectOriginator);
         }
     }
 }