Beispiel #1
0
        public static FreeRuleConfig GetRule(string name, Boolean mysql)
        {
            FreeRuleConfig rule = (FreeRuleConfig)FromXml(name, GetRuleXml(name, mysql));

            rule.gameComponentMap.Merge(rule.components);

            foreach (UseGameComponent ugc in rule.components)
            {
                ugc.Merge(rule.triggers);
            }

            if (rule.imports != null)
            {
                foreach (string sub in rule.imports.Split(","))
                {
                    rule.merge(rule, (FreeRuleConfig)FromXml(sub, GetRuleXml(sub, mysql)), mysql);
                }
            }

            foreach (UseGameComponent ugc in rule.components)
            {
                rule.merge(rule, (FreeRuleConfig)FromXml(ugc.GetKey(), GetRuleXml(ugc.GetKey(), mysql)), mysql);
            }

            return(rule);
        }
        public FreeGameRule(ServerRoom room)
        {
            this.args   = (FreeRuleEventArgs)room.RoomContexts.session.commonSession.FreeArgs;
            this.mapId  = room.RoomContexts.session.commonSession.RoomInfo.MapId;
            this.ruleId = room.RoomContexts.session.commonSession.RoomInfo.ModeId;

            this.Room = room;

            RandomUtil.SetSeed(RandomUtil.Random(1, 10000000));

            SendMessageAction.sender = new FreeMessageSender();

            try
            {
                string         rule   = RuleMap.GetRuleName(ruleId);
                FreeRuleConfig config = FreeRuleConfig.GetRule(rule, SingletonManager.Get <ServerFileSystemConfigManager>().BootConfig.Mysql);
                args.Triggers.Merge(config.Triggers);
                args.ComponentMap = config.GameComponentMap;
                args.AddDefault(this);
                args.Functions.Merge(config.Functions);
                args.rule = this;
                args.FreeContext.TestCase.Merge(config.Triggers);
            }
            catch (Exception e)
            {
                Debug.LogError("加载模式" + RuleMap.GetRuleName(ruleId) + "失败.\n" + e.Message);
                _logger.Error("加载模式" + RuleMap.GetRuleName(ruleId) + "失败.\n", e);
            }

            this.paras = new SimpleParaList();
            paras.AddFields(new ObjectFields(this));

            this.paras.AddPara(new IntPara(StatePara, 0));
            this.paras.AddPara(new IntPara(EnterPara, 0));
        }
Beispiel #3
0
        public static object FromXml(string name, string xml)
        {
            FreeRuleConfig config = (FreeRuleConfig)XmlParser.FromXml(RemoveComment(xml), GetRuleAlias());

            config.name = name;
            foreach (GameTrigger gt in config.Triggers.GetTriggers())
            {
                gt.SetRule(config.name);
            }

            return(config);
        }
Beispiel #4
0
        private void merge(FreeRuleConfig root, FreeRuleConfig sub, bool mysql)
        {
            if (sub == null)
            {
                return;
            }

            root.gameComponentMap.Merge(sub.components);

            if (sub.commons != null)
            {
                root.commons.Merge(sub.commons);
            }

            if (sub.triggers != null)
            {
                root.triggers.MergeTriggerList(sub.triggers);
            }

            foreach (UseGameComponent ugc in sub.components)
            {
                ugc.Merge(root.triggers);
            }

            if (!string.IsNullOrEmpty(sub.imports))
            {
                foreach (string subSub in sub.imports.Split(","))
                {
                    merge(root, (FreeRuleConfig)FromXml(subSub, GetRuleXml(subSub, mysql)), mysql);
                }
            }

            foreach (UseGameComponent ugc in sub.components)
            {
                merge(root, (FreeRuleConfig)FromXml(ugc.GetKey(), GetRuleXml(ugc.GetKey(), mysql)), mysql);
            }
        }