Exemple #1
0
        public static PlayerAction DecodeAction(BsonDocument actionDocument, Dictionary <String, BaseItem> baseItems)
        {
            string actionType = actionDocument.GetValue("type").AsString;

            if (actionType == "set_flag")
            {
                string flagKey   = actionDocument.GetValue("flag").AsString;
                Flag   flagValue = DecodeFlag(actionDocument.GetValue("value"));
                return(new SetFlagAction(flagKey, flagValue));
            }
            else if (actionType == "give_item")
            {
                BsonDocument itemDocument = actionDocument.GetValue("item").AsBsonDocument;
                return(new GiveItemAction(DecodeItem(itemDocument, baseItems)));
            }
            else if (actionType == "increment_flag")
            {
                string        flagKey = actionDocument.GetValue("flag").AsString;
                NumericalFlag amount  = (NumericalFlag)DecodeFlag(actionDocument.GetValue("value"));
                return(new IncrementFlagAction(flagKey, amount));
            }
            else
            {
                return(new NullAction());
            }
        }
Exemple #2
0
        public static Requirement DecodeRequirement(BsonDocument requirementDocument)
        {
            string requirementType = requirementDocument.GetValue("type").AsString;

            if (requirementType == "set_flag")
            {
                string flagKey = requirementDocument.GetValue("flag").AsString;
                return(new SetRequirement(flagKey));
            }
            else if (requirementType == "null_flag")
            {
                string flagKey = requirementDocument.GetValue("flag").AsString;
                return(new NullRequirement(flagKey));
            }
            else if (requirementType == "equals")
            {
                string flagKey   = requirementDocument.GetValue("flag").AsString;
                Flag   flagValue = DecodeFlag(requirementDocument.GetValue("value"));
                return(new EqualsRequirement(flagKey, flagValue));
            }
            else if (requirementType == "less_than")
            {
                string        flagKey   = requirementDocument.GetValue("flag").AsString;
                NumericalFlag flagValue = (NumericalFlag)DecodeFlag(requirementDocument.GetValue("value"));
                return(new LessThanRequirement(flagKey, flagValue));
            }
            else if (requirementType == "more_than")
            {
                string        flagKey   = requirementDocument.GetValue("flag").AsString;
                NumericalFlag flagValue = (NumericalFlag)DecodeFlag(requirementDocument.GetValue("value"));
                return(new MoreThanRequirement(flagKey, flagValue));
            }
            else if (requirementType == "not")
            {
                BsonDocument subRequirementDocument = requirementDocument.GetValue("requirement").AsBsonDocument;
                return(new NotRequirement(DecodeRequirement(subRequirementDocument)));
            }
            else if (requirementType == "and")
            {
                List <Requirement> requirements     = new List <Requirement>();
                BsonArray          requirementArray = requirementDocument.GetValue("requirements").AsBsonArray;
                foreach (BsonValue requirementValue in requirementArray)
                {
                    BsonDocument subRequirementDocument = requirementValue.AsBsonDocument;
                    requirements.Add(DecodeRequirement(requirementDocument));
                }
                return(new AndRequirement(requirements.ToArray()));
            }
            else if (requirementType == "or")
            {
                List <Requirement> requirements     = new List <Requirement>();
                BsonArray          requirementArray = requirementDocument.GetValue("requirements").AsBsonArray;
                foreach (BsonValue requirementValue in requirementArray)
                {
                    BsonDocument subRequirementDocument = requirementValue.AsBsonDocument;
                    requirements.Add(DecodeRequirement(requirementDocument));
                }
                return(new OrRequirement(requirements.ToArray()));
            }
            else if (requirementType == "true")
            {
                return(new TrueRequirement());
            }
            else
            {
                return(new FalseRequirement());
            }
        }
 public IncrementFlagAction(string flagKey, NumericalFlag flagValue)
 {
     this.flagKey   = flagKey;
     this.flagValue = flagValue;
 }