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)); }
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); }
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(); }
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); }
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); } } }
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 MappedDomainCondition(ConditionSpec condition, int data1, int data2) { Condition = condition; Data1 = data1; Data2 = data2; }
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); } } }