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)); }
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); }
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); } }