예제 #1
0
        public static async Task CreateHenchmanAsync(GameServiceClient client)
        {
            var henchman = new Henchman();

            henchman.Name          = ConsoleUtility.GetUserInput("Henchman Name: ");
            henchman.GamePackageId = await GamePackageUtility.SelectGamePackageId(client);

            henchman.AbilityIds.AddRange(await AbilityUtility.SelectAbilityIds(client));

            if (!ConsoleUtility.ShouldContinue($"Creating Henchman: '{henchman.Name}', in gamePackage '{henchman.GamePackageId}' with abilities [{henchman.AbilityIds.Select(x => x.ToString()).Join(", ")}]"))
            {
                await CreateHenchmanAsync(client);

                return;
            }

            var createRequest = new CreateHenchmenRequest();

            createRequest.Henchmen.Add(henchman);
            var createReply = await client.CreateHenchmenAsync(createRequest);

            if (createReply.Status.Code != 200)
            {
                ConsoleUtility.WriteLine($"Failed to create henchman: {createReply.Status.Message}");
            }
            else
            {
                ConsoleUtility.WriteLine($"Henchman '{createReply.Henchmen.First().Name}' was created with Id '{createReply.Henchmen.First().Id}'");
            }
        }
예제 #2
0
 public void ReplaceHenchman(Henchman newHanchman)
 {
     var oldHenchman = Interlocked.Exchange(ref henchman, newHanchman);
     if(oldHenchman != null)
     {
         previousMinions.Add(oldHenchman.AssistantMoniker);
     }
     (oldHenchman as IDisposable)?.Dispose();
 }
예제 #3
0
    private void loadNPCs()
    {
        for (int i = 0; i < 2; i++)
        {
            string npcDir;
            if (i == 0)
                npcDir = "Data\\NPCs\\Supers";
            else
                npcDir = "Data\\NPCs\\Henchmen";

            try
            {
                string[] directories = Directory.GetDirectories(npcDir);
                foreach (string dirPath in directories)
                {
                    string xmlPath = Directory.GetFiles(dirPath, "*.xml")[0];
                    XElement rootXML = XElement.Load(xmlPath);
                    NPC npc = null;
                    if (i == 0)
                        npc = new Super();
                    else
                        npc = new Henchman();
                    npc.name = rootXML.Element("name").Value;
                    npc.hp = getXElementAttrValueAsInt(rootXML, "hp");
                    npc.energy = getXElementAttrValueAsInt(rootXML, "energy");
                    npc.gold = getXElementAttrValueAsInt(rootXML, "gold");
                    npc.exp = getXElementAttrValueAsInt(rootXML, "exp");
                    string side = rootXML.Element("side").Value.ToLower();
                    if (side == "hero")
                        npc.side = NPC.Side.HERO;
                    else if (side == "villain")
                        npc.side = NPC.Side.VILLAIN;
                    else
                        npc.side = NPC.Side.NEUTRAL;
                    if (i == 0) // supers
                    {
                        Super super = (Super)npc;
                        foreach (XElement image in rootXML.Descendants("image"))
                            super.images.Add(image.Attribute("flag").Value, image.Value);
                        GlobalVariables.supers.Add(npc.name, super);
                    }
                    else // henchmen
                    {
                        Henchman henchman = (Henchman)npc;
                        henchman.images.Add(ImageFlag.POTRAIT.ToString(), rootXML.Element("image").Value);
                        GlobalVariables.henchmen.Add(npc.name, henchman);
                    }
                }
            }
            catch (Exception e)
            {
                Debug.Log(e);
            }

        }
    }
예제 #4
0
        private static async ValueTask <IReadOnlyList <Henchman> > CreateHenchmen(GameServiceClient client, IReadOnlyList <GamePackage> packages, IReadOnlyList <Ability> abilities)
        {
            ConsoleUtility.WriteLine("Creating henchmen");
            List <Henchman> result = (await HenchmanUtility.GetHenchmenAsync(client, null)).ToList();

            if (result.Any())
            {
                return(result);
            }

            foreach (var file in Directory.EnumerateFiles(@"C:\Users\Ryan\SkyDrive\code\LegendaryGameStarter\LegendaryGameModel2\GameSets", s_fileMask))
            {
                var doc = XDocument.Load(file);

                var name = doc.Element("Set").Attribute("Name").Value;
                var activeGamePackage = packages.FirstOrDefault(x => x.Name == name);
                if (activeGamePackage == null)
                {
                    ConsoleUtility.WriteLine($"Failed to find matching game package for {file}");
                }

                foreach (var henchmanElement in doc.Element("Set").Element("Cards").Elements("Card").Where(x => x?.Attribute("Area").Value == "Henchman"))
                {
                    var request = new CreateHenchmenRequest();
                    request.CreateOptions.Add(CreateOptions.ErrorOnDuplicates);

                    var henchman = new Henchman();
                    henchman.Name          = henchmanElement.Attribute("Name").Value;
                    henchman.GamePackageId = activeGamePackage.Id;
                    henchman.AbilityIds.AddRange(GetMatchingItems(henchmanElement.Attribute("Abilities")?.Value, name => abilities.First(x => x.Name == name)).Select(x => x.Id));

                    request.Henchmen.Add(henchman);

                    var reply = await client.CreateHenchmenAsync(request);

                    if (reply.Status.Code != 200)
                    {
                        ConsoleUtility.WriteLine($"Failed to create '{henchman.Name}': {reply.Status.Message}");
                    }

                    result.AddRange(reply.Henchmen);
                }

                ConsoleUtility.WriteLine($"Completed: {name}");
            }

            return(result);
        }
예제 #5
0
        internal static void ResetHenchmanWeaponMods(SFXSaveGameFile saveGame, Henchman henchman)
        {
            var henchProperty = LoadoutData.HenchmenClasses.Single(pair => pair.Tag == henchman.Tag);

            henchman.WeaponMods = new List <WeaponMod>();

            // Assault Rifles
            if (henchProperty.Weapons.Contains(WeaponClassType.AssaultRifle))
            {
                henchman.WeaponMods.AddRange(GetHenchmanWeaponMods(WeaponClassType.AssaultRifle));
            }

            // Pistols
            if (henchProperty.Weapons.Contains(WeaponClassType.Pistol))
            {
                henchman.WeaponMods.AddRange(GetHenchmanWeaponMods(WeaponClassType.Pistol));
            }

            // Shotguns
            if (henchProperty.Weapons.Contains(WeaponClassType.Shotgun))
            {
                henchman.WeaponMods.AddRange(GetHenchmanWeaponMods(WeaponClassType.Shotgun));
            }

            // SMG's
            if (henchProperty.Weapons.Contains(WeaponClassType.SMG))
            {
                henchman.WeaponMods.AddRange(GetHenchmanWeaponMods(WeaponClassType.SMG));
            }

            // Sniper Rifles
            if (henchProperty.Weapons.Contains(WeaponClassType.SniperRifle))
            {
                henchman.WeaponMods.AddRange(GetHenchmanWeaponMods(WeaponClassType.SniperRifle));
            }
        }
예제 #6
0
        internal static Henchman ResetHenchman(SFXSaveGameFile saveGame, HenchmanClass henchmanClass, bool resetDefaults = false)
        {
            var hench = new Henchman
            {
                CharacterLevel = saveGame.Player.Level,
                Grenades       = 0,
                LoadoutWeapons = new Loadout
                {
                    AssaultRifle  = "None",
                    HeavyWeapon   = "None",
                    Pistol        = "None",
                    Shotgun       = "None",
                    SubmachineGun = "None",
                    SniperRifle   = "None"
                },
                MappedPower = "None",
                Tag         = henchmanClass.Tag
            };

            ResetHenchmanPowers(saveGame, hench, resetDefaults);
            ResetHenchmanWeaponMods(saveGame, hench);

            return(hench);
        }
예제 #7
0
 public void SetHenchman(Henchman h)
 {
     hench = h;
     hench.gameObject.SetActive(false);
 }
예제 #8
0
 public void SetRazer(Henchman r)
 {
     hench = r;
 }
예제 #9
0
        internal static void ResetHenchmanPowers(SFXSaveGameFile saveGame, Henchman henchman, bool resetDefaults = false)
        {
            var henchProperty = LoadoutData.HenchmenClasses.FirstOrDefault(pair => pair.Tag.Equals(henchman.Tag, StringComparison.InvariantCultureIgnoreCase));

            if (henchProperty == null)
            {
                return;
            }

            henchman.Powers         = new List <Power>();
            henchman.CharacterLevel = saveGame.Player.Level;
            henchman.TalentPoints   = SquadVariables.GetHenchTalentPoints(henchman.CharacterLevel);

            foreach (var powerId in henchProperty.Powers)
            {
                PowerClass power = null;
                var        pId   = powerId;

                foreach (var powerClass in LoadoutData.PowerClasses.Where(powerClass => powerClass != null && powerClass.Name != null)
                         .Where(powerClass => powerClass.Name.Equals(pId, StringComparison.InvariantCultureIgnoreCase) ||
                                (powerClass.CustomName != null &&
                                 powerClass.CustomName.Equals(pId, StringComparison.InvariantCultureIgnoreCase))))
                {
                    power = powerClass;
                }

                if (power == null)
                {
                    continue;
                }

                henchman.Powers.Add(new Power(power.ClassName, power.Name));
            }

            if (!resetDefaults)
            {
                return;
            }

            foreach (var power in henchman.Powers)
            {
                var powerClass =
                    LoadoutData.PowerClasses.FirstOrDefault(
                        p => (p.ClassName != null && p.ClassName.Equals(power.ClassName, StringComparison.InvariantCultureIgnoreCase)));

                if (powerClass == null)
                {
                    continue;
                }

                if (!henchProperty.DefaultPowers.Any(s => s.Equals(powerClass.Name, StringComparison.InvariantCultureIgnoreCase) ||
                                                     s.Equals(powerClass.CustomName, StringComparison.InvariantCultureIgnoreCase)))
                {
                    continue;
                }

                power.CurrentRank = 1;

                if (powerClass.PowerType != PowerClassType.None)
                {
                    henchman.TalentPoints--;
                }
            }
        }