public override async Task beforeAdd(IGame game, Card card) { Card hookedCard = hookCard.getValue(game, null, card, null) ?? card; await setValue(game, card, hookedCard.getProp <T>(game, hookPropName)); await base.beforeAdd(game, card); }
public Task <IAddModiEventArg> addModifier(IGame game, PropModifier modifier) { if (game != null && game.triggers != null) { return(game.triggers.doEvent <IAddModiEventArg>(new AddModiEventArg() { game = game, card = this, modifier = modifier, valueBefore = getProp(game, modifier.getPropName()) }, async arg => { Card card = arg.card as Card; modifier = arg.modifier as PropModifier; if (modifier == null) { throw new ArgumentNullException(nameof(modifier)); } object beforeValue = card.getProp(game, modifier.getPropName()); await modifier.beforeAdd(game, card); card.modifierList.Add(modifier); await modifier.afterAdd(game, card); object value = card.getProp(game, modifier.getPropName()); (arg as AddModiEventArg).valueAfter = value; game?.logger?.logTrace(nameof(PropModifier), card + "获得属性修正" + modifier + "=>" + StringHelper.propToString(value)); await game.triggers.doEvent(new PropChangeEventArg() { game = game, card = card, propName = modifier.getPropName(), beforeValue = beforeValue, value = value }, arg2 => { arg2.game?.logger?.logTrace(nameof(Card), arg2.card + "的属性" + arg2.propName + "=>" + StringHelper.propToString(arg2.value)); return Task.CompletedTask; }); })); } else { if (modifier == null) { throw new ArgumentNullException(nameof(modifier)); } modifier.beforeAdd(game, this); modifierList.Add(modifier); modifier.afterAdd(game, this); object prop = getProp(game, modifier.getPropName()); string propString = StringHelper.propToString(prop); return(Task.FromResult <IAddModiEventArg>(default));
public static string replace(string desc, THHGame game, THHPlayer player, TouhouCardEngine.Card card) { string result = Regex.Replace(desc, @"{(?<obj>\w+):(?<name>.+)}", m => { string obj = m.Groups["obj"].Value; string name = m.Groups["name"].Value; if (obj == "card") { return(card.getProp(game, name).ToString()); } else { return("???"); } }); return(result); }
public Task <IAddModiEventArg> addModifier(IGame game, PropModifier modifier) { if (game != null && game.triggers != null) { return(game.triggers.doEvent <IAddModiEventArg>(new AddModiEventArg() { game = game, card = this, modifier = modifier, valueBefore = getProp(game, modifier.propName) }, arg => { Card card = arg.card as Card; modifier = arg.modifier as PropModifier; if (modifier == null) { throw new ArgumentNullException(nameof(modifier)); } modifier.beforeAdd(game, card); card.modifierList.Add(modifier); modifier.afterAdd(game, card); object prop = card.getProp(game, modifier.propName); (arg as AddModiEventArg).valueAfter = prop; game?.logger?.log("PropModifier", card + "获得属性修正" + modifier + "=>" + propToString(prop)); return Task.CompletedTask; })); } else { if (modifier == null) { throw new ArgumentNullException(nameof(modifier)); } modifier.beforeAdd(game, this); modifierList.Add(modifier); modifier.afterAdd(game, this); object prop = getProp(game, modifier.propName); string propString = propToString(prop); return(Task.FromResult <IAddModiEventArg>(default));