public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Target target = null, CastedSpell spell = null, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 0); Dictionary <DamageType, int> latestDamage = Expressions.GetCustomData <Dictionary <DamageType, int> >(evaluator.Variables); if (latestDamage == null) { return(null); } foreach (Creature creature in target.Creatures) { InGameCreature inGameCreature = AllInGameCreatures.GetByCreature(creature); if (inGameCreature != null) { inGameCreature.TakeHalfDamage(player, latestDamage, AttackKind.Magical); } // TODO: Also get players from the target and work with them. } return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target = null, CastedSpell spell = null, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1, 2); if (args.Count > 1) { player = AllPlayers.GetFromName(args[1].Trim()); } if (player != null) { player.SetNextAnswer(Expressions.GetStr(args[0], player, target, spell)); } return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Creature target, CastedSpell spell) { ExpectingArguments(args, 0); player.GiveAdvantageThisRoll(); return(null); }
public override object Evaluate(List<string> args, ExpressionEvaluator evaluator, Character player, Target target = null, CastedSpell spell = null, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1, 4); string fillColor = "player"; string outlineColor = "player"; int delayMs = 0; if (args.Count > 1) { fillColor = args[1].Trim(); if (args.Count > 2) { outlineColor = args[2].Trim(); if (args.Count > 3) delayMs = Expressions.GetInt(args[3], player, target, spell, dice); } } CreaturePlusModId recipient = Expressions.GetCustomData<CreaturePlusModId>(evaluator.Variables); if (recipient != null && recipient.Creature is Character recipientPlayer) recipientPlayer.ShowState(Expressions.GetStr(args[0], player, target, spell), fillColor, outlineColor, delayMs); else if (player != null) player.ShowState(Expressions.GetStr(args[0], player, target, spell), fillColor, outlineColor, delayMs); return null; }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Creature target, CastedSpell spell) { ExpectingArguments(args, 4); string rechargeableName = Expressions.GetStr(args[0], player, target, spell); string variableName = Expressions.GetStr(args[1], player, target, spell); int maxValue = Expressions.GetInt(args[2], player, target, spell); string cycle = Expressions.GetStr(args[3], player, target, spell); player.AddRechargeable(rechargeableName, variableName, maxValue, cycle); return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1); if (spell == null) { return(null); } return(spell.GetSpellRawDieStr(args[0])); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target = null, CastedSpell spell = null, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 0); return(GiveTargetFullDamage.ApplyDamage(args, evaluator, player, target, 2)); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target, CastedSpell spell, RollResults dice = null) { ExpectingArguments(args, 2); string variableName = args[0]; // TODO: incorrectValue: //object incorrectValue = evaluator.Evaluate(Expressions.Clean(args[1])); object value = Expressions.Get(Expressions.Clean(args[1]), player, target, spell); object instance = player; Type instanceType = typeof(Character); if (KnownQualifiers.IsSpellQualifier(variableName)) { if (evaluator.Variables.ContainsKey(Expressions.STR_CastedSpell)) { instance = evaluator.Variables[Expressions.STR_CastedSpell]; instanceType = typeof(CastedSpell); variableName = variableName.EverythingAfter(KnownQualifiers.Spell); } } FieldInfo field = instanceType.GetField(variableName); if (field != null) { if (instance != null) { field.SetValue(instance, value); } return(null); } PropertyInfo property = instanceType.GetProperty(variableName); if (property != null) { if (instance != null) { property.SetValue(instance, value); } return(null); } player.SetState(variableName, value); return(null); }
private static double GetPercentCompleteBasedOnSpellDuration(CastedSpell castedSpell, DndGame dndGame, TimeSpan spellDuration) { TimeSpan timeActive = dndGame.Clock.Time - castedSpell.CastingTime; return(100.0 * timeActive.TotalSeconds / spellDuration.TotalSeconds); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 3); string dungeonMasterMessage = Expressions.GetStr(args[0], player, target, spell, dice); string floatText = Expressions.GetStr(args[1], player, target, spell, dice); ValidationAction validationAction = Expressions.Get <ValidationAction>(args[2].Trim(), player, target, spell, dice); Validation.OnValidationFailed(dungeonMasterMessage, floatText, validationAction); return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Creature target, CastedSpell spell) { ExpectingArguments(args, 0); CastedSpell castedSpell = Expressions.GetCastedSpell(evaluator.Variables); if (castedSpell != null && player != null) { player.Dispel(castedSpell); } return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1); GetRollEventArgs ea = new GetRollEventArgs((string)args[0]); OnGetRollRequest(this, ea); return(ea.Result); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target, CastedSpell spell, RollResults dice = null) { Creature modOwner = Expressions.GetCustomData <Creature>(evaluator.Variables); if (modOwner == null) { throw new Exception($"Creature mod owner must be specified before evaluating expressions containing RemovePropertyMod."); } ExpectingArguments(args, 2); string propertyName = Expressions.GetStr(args[0], player, target, spell); string id = Expressions.GetStr(args[1], player, target, spell); modOwner.RemovePropertyMod(propertyName, id); return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature creature, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1, 3); TargetStatus targetStatus = Expressions.Get <TargetStatus>(args[0], creature, target, spell, dice); ea = new TargetEventArgs(); if (args.Count > 1) { ea.MinTargets = Expressions.GetInt(args[1], creature, target, spell, dice); if (args.Count > 2) { ea.MaxTargets = Expressions.GetInt(args[2], creature, target, spell, dice); } } ea.Player = creature as Character; ea.Target = target; ea.ShowUI = true; ea.TargetStatus = targetStatus; OnRequestSelectTarget(ea); return(ea.Target); }
public override bool Handles(string tokenName, Character player, CastedSpell castedSpell) { function = AllFunctions.Get(tokenName); return(function != null); }
public override bool Handles(string tokenName, Character player, CastedSpell castedSpell) { return(Enum.TryParse(tokenName, true, out RechargeOdds result)); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { if (function == null) { return(null); } return(evaluator.Evaluate(DndUtils.InjectParameters(function.Expression, function.Parameters, args))); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1); Target targetInstance = evaluator.Evaluate <Target>(args[0]); // evaluator.Evaluate call needed to get local variables. if (targetInstance != null) { return(targetInstance.Count); } return(0); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 2); DamageType damageType = (DamageType)Expressions.Get(args[0], player, target, spell); AttackKind attackKind = (AttackKind)Expressions.Get(args[1], player, target, spell); player.AddDamageResistance(damageType, attackKind); return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target = null, CastedSpell spell = null, RollResults dice = null) { ExpectingArguments(args, 1); if (player != null) { string spellList = Expressions.GetStr(args[0], player, target, spell); player.AddSpellsFrom(spellList); } return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target = null, CastedSpell spell = null, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1, 3); if (player != null) { int hue = Expressions.GetInt(args[0], player, target, spell); int saturation = 100; if (args.Count == 2) { saturation = Expressions.GetInt(args[1], player, target, spell); } int brightness = 100; if (args.Count == 3) { brightness = Expressions.GetInt(args[2], player, target, spell); } player.AddSpellHitEffect(hue: hue, saturation: saturation, brightness: brightness); } return(null); }
public override object Evaluate(List<string> args, ExpressionEvaluator evaluator, Creature player, Target target = null, CastedSpell spell = null, RollResults dice = null) { ExpectingArguments(args, 1, 15); OnRequestEffectTrigger(player, new EffectEventArgs(args, player, target, spell)); return null; }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1); string message = evaluator.Evaluate <string>(args[0]); player.Game.TellAll(message); return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1); Target targetToCheck = Expressions.Get <Target>(args[0], player, target, spell); string result = string.Empty; if (targetToCheck != null) { if (player?.Game != null) { foreach (int playerId in targetToCheck.PlayerIds) { Character targetedPlayer = player.Game.GetPlayerFromId(playerId); if (targetedPlayer != null) { result += targetedPlayer.Name + ", "; } } foreach (Creature creature in targetToCheck.Creatures) { result += creature.Name + ", "; } result = result.EverythingBeforeLast(", "); } } return(result); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Creature target, CastedSpell spell) { ExpectingArguments(args, 1); string propertyName = args[0]; FieldInfo field = typeof(Character).GetField(propertyName); if (field != null) { return(field.GetValue(player)); } PropertyInfo property = typeof(Character).GetProperty(propertyName); if (property != null) { return(property.GetValue(player)); } if (player != null) { return(player.GetState(propertyName)); } return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Target target = null, CastedSpell spell = null, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1); // TODO: Get the condition to clear. // TODO: Clear the target's condition. return(null); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 2, 4); string sourceName = evaluator.Evaluate <string>(args[0]); string sceneName = null; double delaySec = 0; bool visible; visible = Expressions.GetBool(args[1]); if (args.Count > 2) { delaySec = Expressions.GetDouble(args[2].Trim()); if (args.Count > 3) { sceneName = evaluator.Evaluate <string>(args[3]); } } OnRequestSetObsSourceVisibility(sceneName, sourceName, visible, delaySec); return(null); }
public override bool Handles(string tokenName, Character player, CastedSpell castedSpell) { return(Enum.TryParse(tokenName, out CreatureSize result)); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Creature player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1); Ability ability = (Ability)Expressions.GetInt(args[0], player, target, spell); return(player.GetAbilityModifier(ability)); }
public override object Evaluate(List <string> args, ExpressionEvaluator evaluator, Character player, Target target, CastedSpell spell, DiceStoppedRollingData dice = null) { ExpectingArguments(args, 1, 3); string sceneName = evaluator.Evaluate <string>(args[0]); double delaySec = 0; double returnSec = 0; if (args.Count > 1) { delaySec = Expressions.GetDouble(args[1]); if (args.Count > 2) { returnSec = Expressions.GetDouble(args[2]); } } OnRequestPlayScene(sceneName, delaySec, returnSec); return(null); }