Beispiel #1
0
        /// <summary>
        /// Generate our XML file
        /// </summary>
        /// <param name="db"></param>
        /// <param name="currentOrder"></param>
        /// <param name="ContinueOnLevel"></param>
        /// <param name="HqOnly"></param>
        /// <param name="GenerateLisbeth"></param>
        /// <param name="savestrem"></param>
        public static void Generate(LeveDatabase db, ObservableCollection <Leve> currentOrder, bool ContinueOnLevel, bool HqOnly, bool GenerateLisbeth, Stream savestrem)
        {
            using (var sw = new StreamWriter(savestrem))
            {
                sw.WriteLine(Header);

                foreach (var x in currentOrder.OrderBy(i => i.Level))
                {
                    sw.WriteLine(WriteOrder(db, x, ContinueOnLevel, HqOnly, GenerateLisbeth));
                }

                sw.WriteLine(Footer);
            }
        }
Beispiel #2
0
        private static string WriteOrder(LeveDatabase db, Leve leve, bool continueOnLevel, bool hqOnly, bool generateLisbeth)
        {
            var pickup       = db.Npcs.First(i => i.NpcId == leve.PickUpNpc);
            var pickuploc    = $"{formatFloat(pickup.Pos.X)},{formatFloat(pickup.Pos.Y)},{formatFloat(pickup.Pos.Z)}";
            var turnin       = db.Npcs.First(i => i.NpcId == leve.TurnInNpc);
            var turninloc    = $"{formatFloat(turnin.Pos.X)},{formatFloat(turnin.Pos.Y)},{formatFloat(turnin.Pos.Z)}";
            var itemcount    = hqOnly ? "HqItemCount" : "ItemCount";
            var hqonlyattrib = hqOnly ? @"HqOnly=""true""" : string.Empty;

            ClassJobType leveClass;

            ClassJobType.TryParse(leve.Classes, out leveClass);
            var col = (continueOnLevel) ? $" and Core.Me.Levels[ClassJobType.{leveClass}] &lt; " + (leve.Level >= 50 ? leve.Level + 2 : leve.Level + 5) : "";
            // Default to 5 leves (5 items for single turnins, 15 items for triple turnins)
            int numLeves = 5;
            // ExpReward * 2.0 is assuming all of the items are HQ'd and .5 for the exp crafting suborders.
            var rewardModifier = 2.5;

            var output = "";

#if RB_CN
            var LeveTag = "YesText=\"继续交货\""; //
#else
            var LeveTag = @"";
#endif

            var outputTurnin = $@"
        <LgSwitchGearset Job=""{leve.Classes}"" />
        <While Condition=""ExBuddy.Windows.GuildLeve.Allowances &gt; 0 and {itemcount}({leve.ItemId}) &gt; {leve.NumItems - 1}{col} and Core.Me.Levels[ClassJobType.{leveClass}] &gt;= {leve.Level}"">
            <If Condition=""not IsOnMap({pickup.MapId})"">
                <GetTo ZoneId=""{pickup.MapId}"" XYZ=""{pickuploc}"" />
            </If>
            <ExPickupGuildLeve LeveIds=""{leve.LeveId}"" LeveType=""{Localization.Localization.Tradecraft}"" NpcId=""{pickup.NpcId}"" NpcLocation=""{pickuploc}"" Timeout=""5"" />
            <If Condition=""not IsOnMap({turnin.MapId})"">
                <GetTo ZoneId=""{turnin.MapId}"" XYZ=""{turninloc}"" />
            </If>
            <ExTurnInGuildLeve NpcId=""{turnin.NpcId}"" NpcLocation=""{turninloc}"" {hqonlyattrib} {LeveTag} />
        </While>";

            if (generateLisbeth)
            {
                // Optimize EXP is checked, figure out optimal orders to craft.
                if (continueOnLevel)
                {
                    var currentLevel  = Core.Me.Levels[leveClass];
                    var nextLeveJump  = leve.Level >= 50 ? 2 : 5;
                    var nextLeveLevel = leve.Level + nextLeveJump;
                    var requiredExp   = 0;

                    for (var i = 0; i < (nextLeveLevel - currentLevel); i++)
                    {
                        requiredExp += ExpRequired[currentLevel + i];
                    }

                    numLeves = (int)(requiredExp / (leve.ExpReward * rewardModifier));

                    output += $@"
        <While Condition=""Core.Me.Levels[ClassJobType.{leveClass}] &gt;= {leve.Level} and Core.Me.Levels[ClassJobType.{leveClass}] &lt; {nextLeveLevel}"">";
                }
                output += $@"
        <If Condition=""ItemCount({leve.ItemId}) &lt; {leve.NumItems}"">
            {WriteLisbeth(db, leve, numLeves)}
        </If>
        {outputTurnin}
        ";
                if (continueOnLevel)
                {
                    output += $@"
        </While>";
                }
            }
            else
            {
                output += outputTurnin;
            }

            return(output);
        }
Beispiel #3
0
 private static string WriteLisbeth(LeveDatabase db, Leve leve, int numLeves)
 {
     return($@"
 <Lisbeth Json=""[{WriteLisbethSubOrder(leve, numLeves)}]"" />");
 }