Ejemplo n.º 1
0
        internal EmbedBuilder PerkListEmbed(Player player, out string available)
        {
            EmbedBuilder  e     = new EmbedBuilder();
            List <string> perks = GetPerkList();

            available = "";
            for (int i = 0; i < perks.Count; i++)
            {
                string r = null;
                if (player.HasPerk(perks[i]) > -1)
                {
                    r = " [Owned]";
                }
                else if (specPoints < 20)
                {
                    r += $" [Missing {20 - specPoints} Spec Points]";
                }
                else
                {
                    available += $";{i}";
                }
                e.AddField($"{EUI.GetNum(i)} {perks[i]} {r}", PerkLoad.Load(perks[i]).desc);
            }
            e.WithFooter($"{specPoints} Specialization Points");
            return(e);
        }
Ejemplo n.º 2
0
        internal static async Task ChooseRace(Player player, IMessageChannel channel)
        {
            EmbedBuilder race = new EmbedBuilder();

            race.WithTitle($"{player.name}'s Race");
            race.WithDescription("Select a race using the reactions, each has a unique perk. You may not change this option later.");
            //
            race.AddField($"{EUI.GetLetter(7)} | **Human** {Environment.NewLine}",
                          $"Basic Humans{Environment.NewLine}" +
                          $"Perk: {PerkLoad.Load("Human Adaptation").desc}{Environment.NewLine}");
            //
            race.AddField($"{EUI.GetLetter(19)} | **Tsiun** {Environment.NewLine}",
                          $"Black or dark color skinned, thin, pointy ears, large eyes and pupils which fill " +
                          $"the entire eye, prefer darker areas, learn well by observing others{Environment.NewLine}" +
                          $"Perk: {PerkLoad.Load("Tsiun Trickery").desc}{Environment.NewLine}");
            //
            race.AddField($"{EUI.GetLetter(20)} | **Uskavian** {Environment.NewLine}",
                          $"Large creatures, not known as a smart race, not very creative and usually does" +
                          $" what they know works, brown or darker skin color with some patterns sometimes{Environment.NewLine}" +
                          $"Perk: {PerkLoad.Load("Uskavian Learning").desc}{Environment.NewLine}");
            //
            race.AddField($"{EUI.GetLetter(12)} | **Miganan** {Environment.NewLine}",
                          $"Similar to humans but with only pale skin variants, mostly white up to grey-ish" +
                          $" with a touch of slight beige, very strong skin, grows no hair{Environment.NewLine}" +
                          $"Perk: {PerkLoad.Load("Migana Skin").desc}{Environment.NewLine}");
            //
            race.AddField($"{EUI.GetLetter(8)} | **Ireskian** {Environment.NewLine}",
                          $"Usually around a feet or two shorter than humans, like to craft and creating things," +
                          $" artistic folks, longingly keep their young appearance{Environment.NewLine}" +
                          $"Perk: {PerkLoad.Load("Ireskian Talent").desc}{Environment.NewLine}");
            await player.NewUI(null, race.Build(), channel, MsgType.ChooseRace);
        }
Ejemplo n.º 3
0
        internal static async Task AutoCharacter(Player player, IMessageChannel channel, bool ask)
        {
            if (ask)
            {
                EmbedBuilder em = DUtils.BuildEmbed("Character Creation",
                                                    $"{EUI.ok} - Randomize {Environment.NewLine} {EUI.next} - Manual (Advanced)"
                                                    + Environment.NewLine + Environment.NewLine + $"{EUI.info} - More Info", null, default);
                await player.NewUI(null, em.Build(), channel, MsgType.AutoNewCharacter);
            }
            else
            {
                int[] rolls = GetRolls();
                var   s     = player.stats;
                s.endurance    = rolls[0];
                s.intelligence = rolls[1];
                s.strength     = rolls[2];
                s.charisma     = rolls[3];
                s.dexterity    = rolls[4];
                s.perception   = rolls[5];
                //
                player.abilities.Add(Ability.Load("Strike"));
                player.abilities.Add(Ability.Load("Shelter"));
                //
                player.race = Utils.RandomElement <ReferenceData.HumanoidRaces>();
                switch (player.race)
                {
                case ReferenceData.HumanoidRaces.Human:
                    player.perks.Add(PerkLoad.Load("Human Adaptation"));
                    break;

                case ReferenceData.HumanoidRaces.Tsiun:
                    player.perks.Add(PerkLoad.Load("Tsiun Trickery"));
                    break;

                case ReferenceData.HumanoidRaces.Uskavian:
                    player.perks.Add(PerkLoad.Load("Uskavian Learning"));
                    break;

                case ReferenceData.HumanoidRaces.Miganan:
                    player.perks.Add(PerkLoad.Load("Migana Skin"));
                    break;

                case ReferenceData.HumanoidRaces.Ireskian:
                    player.perks.Add(PerkLoad.Load("Ireskian Talent"));
                    break;
                }
                //
                player.level   = 0;
                player.health  = player.Health();
                player.stamina = player.Stamina();
                player.SaveFileMongo();
                await GameCommands.StatsDisplay(player, channel);

                await channel.SendMessageAsync("Welcome to Neitsillia, Traveler. To guide you, you've been given the \"Tutorial\" Quest line."
                                               + Environment.NewLine + "Use the `Quest` command to view your quest list and inspect the quest using the assigned emote. Follow the Tutorial quest to learn to play.");
            }
        }
Ejemplo n.º 4
0
        void NPCSetUp()
        {
            GearNPC();
            int p = 0;

            for (int k = baseLevel; k < level;)
            {
                k += p += 5;
                AddStats();
            }
            //for (int i = 0; i < abilities.Count; i++)
            //    abilities[i] = Ability.Load(abilities[i].name);
            for (int i = 0; i < perks.Count; i++)
            {
                if (perks[i].name == "-Random")
                {
                    perks[i] = PerkLoad.RandomPerk(perks[i].tier, "Character");
                }
                else
                {
                    perks[i] = PerkLoad.Load(perks[i].name);
                }
            }
            switch (race)
            {
            case "Human":
                perks.Add(PerkLoad.Load("Human Adaptation"));
                break;

            case "Tsiun":
                perks.Add(PerkLoad.Load("Tsiun Trickery"));
                break;

            case "Uskavian":
                perks.Add(PerkLoad.Load("Uskavian Learning"));
                break;

            case "Miganan":
                perks.Add(PerkLoad.Load("Migana Skin"));
                break;

            case "Ireskian":
                perks.Add(PerkLoad.Load("Ireskian Talent"));
                break;
            }
            health  = Health();
            stamina = Stamina();
            if (level >= 20)
            {
                GetCombatRole();
            }
        }
Ejemplo n.º 5
0
        public async Task ChooseRace(SocketReaction reaction, IUserMessage msg)
        {
            bool selected = true;

            switch (reaction.Emote.ToString())
            {
            case "🇭":
            {
                player.race = ReferenceData.HumanoidRaces.Human;
                player.perks.Add(PerkLoad.Load("Human Adaptation"));
            }
            break;

            case "🇹":
            {
                player.race = ReferenceData.HumanoidRaces.Tsiun;
                player.perks.Add(PerkLoad.Load("Tsiun Trickery"));
            }
            break;

            case "🇺":
            {
                player.race = ReferenceData.HumanoidRaces.Uskavian;
                player.perks.Add(PerkLoad.Load("Uskavian Learning"));
            }
            break;

            case "🇲":
            {
                player.race = ReferenceData.HumanoidRaces.Miganan;
                player.perks.Add(PerkLoad.Load("Migana Skin"));
            }
            break;

            case "🇮":
            {
                player.race = ReferenceData.HumanoidRaces.Ireskian;
                player.perks.Add(PerkLoad.Load("Ireskian Talent"));
            }
            break;

            default: selected = false; break;
            }
            if (selected)
            {
                player.SaveFileMongo();
                await TryMSGDel(msg);

                await CharacterCommands.StarterAbilities(player, reaction.Channel, 0);
            }
        }
Ejemplo n.º 6
0
        private void GetCombatRole()
        {
            int[] rolls = new int[Enum.GetValues(typeof(CombatRole)).Length];
            for (int i = 1; i < rolls.Length; i++)
            {
                rolls[i] = Program.rng.Next(1, 101);
            }
            //Stat var
            rolls[1] += stats.GetINT();
            rolls[2] += stats.GetSTR();
            //Get Highest roll
            int c = 0;

            for (int j = 0; j < rolls.Length; j++)
            {
                if (rolls[j] > rolls[c])
                {
                    c = j;
                }
            }
            //Apply new role
            role = (CombatRole)c;
            string[] avPerks = null;
            switch (role)
            {
            case CombatRole.Healer:
                abilities.Add(Ability.Load("Healing Spore", Math.Min(level, 40)));
                avPerks = new[] { "Adrenaline", "Energizing Touch",
                                  "Adaptation", };

                stats.intelligence += 3;
                break;

            case CombatRole.Fighter:
                abilities.Add(Ability.Load("Execute", Math.Min(level / 2, 25)));
                avPerks = new[] { "Unstoppable Force", "Precision Enhancement",
                                  "Fighting Spirit" };

                stats.strength += 3;
                break;
            }
            if (avPerks != null)
            {
                perks.Add(PerkLoad.Load(Utils.RandomElement(avPerks)));
            }
        }
Ejemplo n.º 7
0
 public async Task ApplyPerk(int index, string perkName)
 {
     if (await IsGMLevel(4))
     {
         Item item = Context.Player.inventory.GetItem(index - 1);
         if (item != null && item.CanBeEquip())
         {
             item.perk = PerkLoad.Load(perkName);
             Context.Player.SaveFileMongo();
             await ReplyAsync("Perks replaced");
         }
         else
         {
             await ReplyAsync("item is not gear");
         }
     }
 }
Ejemplo n.º 8
0
 internal string PurchasePerk(Player player, int i)
 {
     if (specPoints >= 20)
     {
         List <string> list = GetPerkList();
         if (player.HasPerk(list[i]) == -1)
         {
             PerksObtained.Add(list[i]);
             player.perks.Add(PerkLoad.Load(list[i]));
             specPoints -= 20;
             player.SaveFileMongo();
             return(list[i]);
         }
         return($"Player already has perk {list[i]}");
     }
     return($"Missing {20-specPoints} spec points");
 }
Ejemplo n.º 9
0
 public async Task Grant_Perk(IUser user, [Remainder] string name)
 {
     if (await IsGMLevel(3))
     {
         string perkName = StringM.UpperAt(name);
         Player p        = Player.Load(user.Id, Player.IgnoreException.All);
         int    i        = p.HasPerk(perkName);
         if (i == -1)
         {
             p.perks.Add(PerkLoad.Load(perkName));
             p.SaveFileMongo();
             await DUtils.DeleteContextMessageAsync(Context);
         }
         else
         {
             await DUtils.Replydb(Context, $"{p.name} already has the perk {perkName}", lifetime : 0.5);
         }
     }
 }
Ejemplo n.º 10
0
        internal static async Task FixFile(Player player, ISocketMessageChannel chan)
        {
            string message     = null;
            int    errorsFixed = 0;

            //Character Info
            if (player.userSheet == null)
            {
                player.userSheet = new Sheet();
                errorsFixed++;
            }
            if (player.userSheet.appearance == null)
            {
                player.userSheet.appearance = "Unknown"; errorsFixed++;
            }
            if (player.userSheet.gender == null)
            {
                player.userSheet.gender = "Unknown"; errorsFixed++;
            }
            if (player.userSheet.lore == null)
            {
                player.userSheet.lore = "Unknown"; errorsFixed++;
            }
            if (player.userSheet.personality == null)
            {
                player.userSheet.personality = "Unknown"; errorsFixed++;
            }
            //End Character
            //Inventory
            if (player.inventory == null)
            {
                player.inventory = new Neitsillia.Collections.Inventory(); errorsFixed++;
            }
            //
            if (player.schematics == null)
            {
                player.schematics = new List <Schematic>(); errorsFixed++;
            }
            player.schematics.Sort((x, y) => x.name.CompareTo(y.name));
            for (int i = 0; i < player.schematics.Count;)
            {
                if (player.schematics[i].path != player.schematics[i].name)
                {
                    player.schematics[i].path = player.schematics[i].name; errorsFixed++;
                }
                if (i > 0 && player.schematics[i].name == player.schematics[i - 1].name)
                {
                    player.schematics.RemoveAt(i);
                    errorsFixed++;
                }
                else
                {
                    i++;
                }
            }
            //
            foreach (Perk perk in player.perks)
            {
                Perk update = PerkLoad.Load(perk.name);
                if (perk.desc != update.desc)
                {
                    errorsFixed++;
                    perk.desc = update.desc;
                }
                if (perk.trigger != update.trigger)
                {
                    errorsFixed++;
                    perk.trigger = update.trigger;
                }
                if (perk.end != update.end)
                {
                    errorsFixed++;
                    perk.end = update.end;
                }
            }
            for (int i = 0; i < Neitsillia.Collections.Equipment.gearCount; i++)
            {
                Item gear = player.equipment.GetGear(i);
                if (gear != null && gear.perk != null)
                {
                    if (gear.perk.name == "-Random")
                    {
                        gear.LoadPerk();
                    }
                    Perk update = PerkLoad.Load(gear.perk.name);
                    if (gear.perk.desc != update.desc)
                    {
                        errorsFixed++;
                        gear.perk.desc = update.desc;
                    }
                    if (gear.perk.trigger != update.trigger)
                    {
                        errorsFixed++;
                        gear.perk.trigger = update.trigger;
                    }
                    if (gear.perk.end != update.end)
                    {
                        errorsFixed++;
                        gear.perk.end = update.end;
                    }
                }
            }
            //Abilities
            foreach (Ability a in player.abilities)
            {
                Ability update = Ability.Load(a.name, a.level);
                if (a.staminaDrain != update.staminaDrain)
                {
                    a.staminaDrain = update.staminaDrain;
                    errorsFixed++;
                }
                if (a.maxLevel != update.maxLevel)
                {
                    a.maxLevel = update.maxLevel;
                    errorsFixed++;
                }
                if (a.tier != update.tier)
                {
                    a.tier = update.tier;
                    errorsFixed++;
                }
                if (a.description != update.description)
                {
                    a.description = update.description;
                    errorsFixed++;
                }
                if (a.evolves != update.evolves || ((a.evolves != null && update.evolves != null) && !a.evolves.SequenceEqual(update.evolves)))
                {
                    a.evolves = update.evolves;
                    errorsFixed++;
                }
            }
            //Area
            if (player.AreaInfo == null)
            {
                await player.SetArea(Area.LoadFromName("Atsauka"));
            }
            errorsFixed++; message += "You were brought back to Atsauka | ";
            //End Area
            player.SaveFileMongo();
            message = errorsFixed + " Error(s) found and fixed";
            if (errorsFixed == 0)
            {
                message += " If you are still encountering issues please contact an Administrator or GM";
            }
            await chan.SendMessageAsync($"{player.name}({player.userid}) : {message}");
        }