コード例 #1
0
        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);
        }
コード例 #2
0
 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));
コード例 #3
0
        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);
        }
コード例 #4
0
 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));