示例#1
0
 public AplAction(String fullExpression, List <String> comments, ActionPrioriyList aList)
 {
     myList = aList;
     Comments.AddRange(comments);
     comments.Clear();
     _fullExpression = fullExpression;
 }
示例#2
0
 public AplAction(String fullExpression, List<String> comments, ActionPrioriyList aList)
 {
     myList = aList;
     Comments.AddRange(comments);
     comments.Clear();
     _fullExpression = fullExpression;
 }
示例#3
0
 //hotkey=potion_enabled,alt,e
 private static object ParseLine(String l, ActionPrioriyList a)
 {
     if (l.StartsWith("hotkeys+="))
     {
         var       m   = hotkeyReg.Match(l);
         APLHotkey ahk = new APLHotkey();
         Keys      k;
         Keys.TryParse(m.Groups["key"].ToString(), out k);
         ahk.Key = k;
         ModifierKeys mk = ModifierKeys.NoRepeat;
         if (m.Groups["mod"].ToString().Equals("alt"))
         {
             mk = ModifierKeys.Alt;
         }
         if (m.Groups["mod"].ToString().Equals("ctrl"))
         {
             mk = ModifierKeys.Control;
         }
         if (m.Groups["mod"].ToString().Equals("shift"))
         {
             mk = ModifierKeys.Shift;
         }
         if (m.Groups["mod"].ToString().Equals("none"))
         {
             mk = ModifierKeys.NoRepeat;
         }
         ahk.Key  = k;
         ahk.Mod  = mk;
         ahk.Name = m.Groups["name"].ToString();
         //SimcraftImpl.Write(ahk.Name+" "+ahk.Mod+" "+ahk.Key);
         return(ahk);
     }
     if (l.StartsWith("talent_"))
     {
         return new Comment {
                    Content = l
         }
     }
     ;
     if (l.StartsWith("#"))
     {
         return new Comment {
                    Content = l
         }
     }
     ;
     if (l.StartsWith("action"))
     {
         return(ParseAction(l, a));
     }
     if (items.IsMatch(l))
     {
         return(ParseItem(l));
     }
     return(default(AplExpr));
 }
示例#4
0
        public static ActionPrioriyList FromString(String s)
        {
            var lines = s.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);

            //if (lines.Length < 2)
            //    lines = s.Split(new string[] { "\r" }, StringSplitOptions.None);

            var apl = new ActionPrioriyList();

            if (!apl.SetAplHeader(s))
            {
                return(apl);
            }
            foreach (var l in lines)
            {
                var expr = ParseLine(l, apl);
                if (expr is AplAction)
                {
                    apl.Actions.Add((AplAction)expr);
                }
                else
                if (expr is EquippedItem)
                {
                    apl.Items.Add(((EquippedItem)expr).slot, (EquippedItem)expr);
                }
                if (expr is Comment)
                {
                    CommentBuffer.Add(((Comment)expr).Content);
                }
                if (expr is APLHotkey)
                {
                    apl.hotkeys.Add((APLHotkey)expr);
                }
            }

            foreach (var a in apl.Actions)
            {
                a.ParseAction();
            }

            return(apl);
        }
示例#5
0
        public static ActionPrioriyList FromString(String s)
        {
            var lines = s.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);

            //if (lines.Length < 2)
            //    lines = s.Split(new string[] { "\r" }, StringSplitOptions.None);

            var apl = new ActionPrioriyList();
            if (!apl.SetAplHeader(s)) return apl;
            foreach (var l in lines)
            {
                var expr = ParseLine(l,apl);
                if (expr is AplAction) apl.Actions.Add((AplAction)expr); else
                if (expr is EquippedItem) apl.Items.Add(((EquippedItem)expr).slot,(EquippedItem)expr);
                if (expr is Comment) CommentBuffer.Add(((Comment)expr).Content);
                if (expr is APLHotkey) apl.hotkeys.Add((APLHotkey)expr);
            }

            foreach (var a in apl.Actions)
            {
                a.ParseAction();
            }

            return apl;
        }
示例#6
0
 //hotkey=potion_enabled,alt,e
 private static object ParseLine(String l, ActionPrioriyList a)
 {
     if (l.StartsWith("hotkeys+="))
     {
         var m = hotkeyReg.Match(l);
         APLHotkey ahk = new APLHotkey();
         Keys k;
         Keys.TryParse(m.Groups["key"].ToString(),out  k);
         ahk.Key = k;
         ModifierKeys mk = ModifierKeys.NoRepeat;
         if (m.Groups["mod"].ToString().Equals("alt")) mk = ModifierKeys.Alt;
         if (m.Groups["mod"].ToString().Equals("ctrl")) mk = ModifierKeys.Control;
         if (m.Groups["mod"].ToString().Equals("shift")) mk = ModifierKeys.Shift;
         if (m.Groups["mod"].ToString().Equals("none")) mk = ModifierKeys.NoRepeat;
         ahk.Key = k;
         ahk.Mod = mk;
         ahk.Name = m.Groups["name"].ToString();
         //SimcraftImpl.Write(ahk.Name+" "+ahk.Mod+" "+ahk.Key);
         return ahk;
     }
     if (l.StartsWith("talent_")) return new Comment { Content = l };
     if (l.StartsWith("#")) return new Comment{Content = l};
     if (l.StartsWith("action")) return ParseAction(l,a);
     if (items.IsMatch(l)) return ParseItem(l);
     return default(AplExpr);
 }
示例#7
0
 private static AplAction ParseAction(String l, ActionPrioriyList apl)
 {
     return new AplAction(l, CommentBuffer, apl);
 }
示例#8
0
文件: SimcraftTop.cs 项目: aash/simpl
        public SimcraftImpl()
        {
            //Write("go!");
            try
            {
                dbc = Serializer.DeSerializeObject(FindDatabase());
            }
            catch (Exception e)
            {
                Write(e.ToString());
            }

            spell_data_t[] a = new spell_data_t[dbc.Spells.Values.Count];
            dbc.Spells.Values.CopyTo(a, 0);

            foreach (var v in a)
            {
                dbc.Spells[v.id, v.token] = v;
            }

            Write("Count "+dbc.Spells.Count);

            Directory.CreateDirectory(SimcraftProfilePath);

            try
            {

                RoutineManager.Current = null;

                SimcNames.Populate();
                MainCache = new ProxyCacheEntry();
                inst = this;
                active_dot = new ActiveDot();
                //trinket = new TrinketProxy(() => StyxWoW.Me.ToUnit(), this);
                health = new HealthProxy(() => StyxWoW.Me.ToUnit());
                energy = new EnergyProxy(() => StyxWoW.Me.ToUnit());
                focus = new FocusProxy(() => StyxWoW.Me.ToUnit());
                chi = new ChiProxy(() => StyxWoW.Me.ToUnit());
                rage = new RageProxy(() => StyxWoW.Me.ToUnit());
                buff = new BuffProxy(() => StyxWoW.Me.ToUnit(), PlayerAuras);
                debuff = new DebuffProxy(() => conditionUnit);
                talent = new TalentProxy(() => StyxWoW.Me.ToUnit());
                cooldown = new CooldownProxy(() => StyxWoW.Me.ToUnit());
                spell = new SpellProxy(() => StyxWoW.Me.ToUnit());
                combo_points = new ComboPointProxy(() => StyxWoW.Me.ToUnit());

                target = new TargetProxy(() => conditionUnit);
                runic_power = new RunicPowerProxy(() => StyxWoW.Me.ToUnit());
                disease = new DiseaseProxy(this);
                blood = new RuneProxy(() => StyxWoW.Me.ToUnit(), RuneType.Blood);
                unholy = new RuneProxy(() => StyxWoW.Me.ToUnit(), RuneType.Unholy);
                frost = new RuneProxy(() => StyxWoW.Me.ToUnit(), RuneType.Frost);
                death = new RuneProxy(() => StyxWoW.Me.ToUnit(), RuneType.Death);
                glyph = new GlyphProxy(() => StyxWoW.Me.ToUnit());
                set_bonus = new SetBonusProxy();
                prev_gcd = new PrevGcdProxy();
                prev = new PrevGcdProxy();
                pet = new PetProxy("def");
                eclipse_energy = new EclipseProxy(() => StyxWoW.Me.ToUnit());
                mana = new ManaProxy(() => StyxWoW.Me.ToUnit());
                holy_power = new HolyPowerProxy(() => StyxWoW.Me.ToUnit());
                seal = new SealProxy();
                actions = new ActionProxy();
                stat = new StatProxy();
                obliterate = new ObliterateProxy();

                MainCache["gcd"].SetRetrievalDelegate(() =>
                {
                    var rem = (Decimal)SpellManager.GlobalCooldownLeft.TotalSeconds;
                    var g = BaseGcd();
                    g = g / ((100+spell_haste)/ 100);
                    return new Gcd((Decimal)_conditionSpell.gcd, Math.Max(g, 1), rem);
                });

                MainCache["GlobalCooldown"].SetRetrievalDelegate(() =>
                {
                    return SpellManager.GlobalCooldownLeft.TotalMilliseconds > 1000/15;
                });

                MainCache["WoWTime"].SetRetrievalDelegate(() =>
                {
                    return Lua.GetReturnVal<double>("return GetTime()",0);
                });

                var s = new spell_data_t();
                s.name = "Storm, Earth, and Fire";
                s.token = "storm_earth_and_fire";
                s.id = 138130;
                dbc.Spells.Add(138130, s);

                GenerateApls(SimcraftProfilePath);

                var settings = SimCSettings.currentSettings;
                if (settings.Specs.ContainsKey(Me.Specialization))
                {
                    var aplFileName = settings.Specs[Me.Specialization];
                    try
                    {
                        var apl = apls[aplFileName];
                        apl.CreateBehavior();
                        apl.PrintResolutionTable();
                        current_action_list = apl;
                    }
                    catch (KeyNotFoundException)
                    {
                        throw new ApplicationException(
                            string.Format("settings are incorrect for current spec {0}, it reference unexistent file {1}",
                            Me.Specialization, aplFileName));
                    }
                }
                else
                {
                    try
                    {
                        var apl = apls.Values.First(o => o.Class == Me.Class);
                        var filename = apls.Keys.First(k => apls[k] == apl);
                        settings.Specs[Me.Specialization] = filename;
                        SimCSettings.Save();
                        Write(string.Format("Settings does not tell which *.simc " +
                            "use for current spec({0}) so picking most appropriate: {1}",
                            Me.Specialization, filename));
                        apl.CreateBehavior();
                        apl.PrintResolutionTable();
                        current_action_list = apl;
                    }
                    catch (Exception)
                    {
                        throw new ApplicationException(
                            string.Format("There's not *.simc for current spec({0})",
                            Me.Specialization));
                    }
                }
            }
            catch (Exception e)
            {
                Write(e.ToString());
            }
        }
示例#9
0
 private static AplAction ParseAction(String l, ActionPrioriyList apl)
 {
     return(new AplAction(l, CommentBuffer, apl));
 }