예제 #1
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);
        }
예제 #2
0
        public long XpGain(long xpGain)
        {
            double multiplier = PerkLoad.CheckPerks(this, Perk.Trigger.GainXP, ReferenceData.xprate);
            long   gain       = Convert.ToInt64(xpGain * multiplier);

            experience += gain;
            long reqXPToLVL = XpRequired();

            while (experience >= reqXPToLVL)
            {
                level++;
                LevelNotifications();
                if (Specialization != null)
                {
                    Specialization.specPoints++;
                }
                experience -= reqXPToLVL;
                if (IsGainSkillPoint())
                {
                    skillPoints++;
                }
                reqXPToLVL = XpRequired();
            }
            SaveFileMongo();
            return(gain);
        }
예제 #3
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);
        }
예제 #4
0
        public void StartCombat()
        {
            List <CharacterMotherClass> playerTeam = new List <CharacterMotherClass>();

            if (player.Party == null)
            {
                PerkLoad.CheckPerks(player, Items.Perk.Trigger.StartFight, player, mobs);
                playerTeam.Add(player);
            }
            else
            {
                foreach (var m in player.Party.members)
                {
                    Player p = m.id == player.userid ? player : m.LoadPlayer();

                    PerkLoad.CheckPerks(p, Items.Perk.Trigger.StartFight, p, mobs);
                    playerTeam.Add(p);
                    p.SaveFileMongo();
                }
                foreach (var n in player.Party.NPCMembers)
                {
                    PerkLoad.CheckPerks(n, Items.Perk.Trigger.StartFight, n, mobs);
                }
                playerTeam.AddRange(player.Party.NPCMembers);
                _ = player.Party.SaveData();
            }

            foreach (var m in mobs)
            {
                PerkLoad.CheckPerks(m, Items.Perk.Trigger.StartFight, m, playerTeam.ToArray());
            }
        }
예제 #5
0
        private int Status(int index, int turn = 1, int intensity = 1)
        {
            bool changed = false;

            if (status[index].rank < turn)
            {
                status[index].rank = turn;
                if (status[index].maxRank < turn)
                {
                    status[index].maxRank = turn;
                }
                changed = true;
            }
            if (status[index].tier < intensity)
            {
                status[index].tier = intensity;
                changed            = true;
            }
            if (changed)
            {
                status[index].desc = PerkLoad.Effect(status[index].name, status[index].rank,
                                                     status[index].tier).desc;
                return(0);
            }
            return(-1);
        }
예제 #6
0
        internal void Turn()
        {
            foreach (CombatResult cp in playerParty)
            {
                if (!cp.character.IsDead())
                {
                    cp.ExecuteSendingTurn(GetTargetCR(cp, playerParty, mobParty));
                }
            }

            foreach (CombatResult cp in mobParty)
            {
                if (!cp.character.IsDead())
                {
                    cp.ExecuteSendingTurn(GetTargetCR(cp, mobParty, playerParty));
                }
            }

            foreach (CombatResult cp in playerParty)
            {
                PerkLoad.CheckPerks(cp.character, Perk.Trigger.Health, cp.character);
            }
            foreach (CombatResult cp in mobParty)
            {
                PerkLoad.CheckPerks(cp.character, Perk.Trigger.Health, cp.character);
            }
        }
예제 #7
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.");
            }
        }
예제 #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="name">name of the perk</param>
        /// <param name="turn">rank that will be given to the perk and will be used
        /// as a turn counter until the perk is no longer in effect</param>
        /// <param name="intensity">will be set as the perk's tier, if applicable,
        /// will increase the effect of the perk</param>
        /// <returns>-1: no changes, 0: perk was updated, 1: perk was added</returns>
        internal int Status(string aname, int turn = 1, int intensity = 1)
        {
            int index = status.FindIndex(item => item.name == aname);

            if (index > -1)
            {
                return(Status(index, turn, intensity));
            }
            return(Status(PerkLoad.Effect(aname, turn, intensity), true));
        }
예제 #9
0
 internal int StaminaE(int amount)
 {
     if (amount != 0)
     {
         amount = PerkLoad.CheckPerks(this, Perk.Trigger.StaminaAmount, amount);
         PerkLoad.CheckPerks(this, Perk.Trigger.Stamina, this);
         stamina += (
             amount < 0 ? Verify.Min(amount, -stamina) :
             Verify.Max(amount, Stamina() - stamina));
     }
     return(amount);
 }
예제 #10
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();
            }
        }
예제 #11
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);
            }
        }
예제 #12
0
 internal long Healing(long heal, bool canOverHeal = false)
 {
     if (heal != 0)
     {
         if (!canOverHeal)
         {
             heal = Verify.Max(heal, Verify.Min(Health() - health, 0));
         }
         heal = PerkLoad.CheckPerks <long>(this, Perk.Trigger.Healing, heal);
         PerkLoad.CheckPerks(this, Perk.Trigger.Health, this);
         health += heal;
     }
     return(heal);
 }
예제 #13
0
        private Item CraftItem(Player player, Item crafted)
        {
            ConsumeSchematicItems(player, 1);
            crafted = PerkLoad.CheckPerks(player,
                                          Items.Perk.Trigger.Crafting, crafted);

            if (crafted.isUnique)
            {
                crafted.schematic = null;
            }
            crafted.CalculateStats(true);

            player.CollectItem(crafted, 1);
            return(crafted);
        }
예제 #14
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)));
            }
        }
예제 #15
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");
         }
     }
 }
예제 #16
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");
 }
예제 #17
0
        //Evolves
        public void Evolve(int intensity = 1, bool inventory = true, bool perkGain = true, string skaviCat = null)
        {
            for (int i = 0; i < intensity; i++)
            {
                AddStats();
            }
            ScaleNPC(intensity / 100.0);
            if (inventory)
            {
                string[] icollection = MobDrops(Program.rng.Next(intensity, 5 + intensity));
                if (icollection != null)
                {
                    foreach (string i in icollection)
                    {
                        if (i != null)
                        {
                            AddItemToInv(SpawnItem(i), 1, false);
                        }
                    }
                }
                int dropType = -1;
                int x        = Program.rng.Next(101) - intensity;
                if (x <= 10)
                {
                    AddItemToInv(SkaviDrops.FromArea(skaviCat));
                }
                else
                {
                    if (x <= 30)
                    {
                        dropType = 5;
                    }
                    AddItemToInv(Item.RandomItem(level, dropType), 1);
                }

                if (Program.Chance(20))
                {
                    AddItemToInv(Item.CreateRepairKit(1), Program.rng.Next(1, 6));
                }
            }
            if (perkGain && Program.rng.Next(101) <= 15)
            {
                perks.Add(PerkLoad.RandomPerk(0, "Character"));
            }
        }
예제 #18
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);
         }
     }
 }
        private async Task <MsgType> HandleAllMobsDead(EmbedBuilder result)
        {
            if (endDungeon)
            {
                await Database.DeleteRecord <Area>("Dungeons", MainAreaPath.path, "AreaId");
            }

            //Get Loot into Encounter
            Encounter enc = new Encounter("Loot", partyLeader);

            (string[] kills, long koinsToGain, long xpToGain) = GetKillRewards(enc);

            xpToGain = await OtherLoot(enc, xpToGain);

            var invLoot = enc.loot.inv;

            string lootDisplay = DistributeCoins(ref koinsToGain);

            lootDisplay += EventRewards(enc, out (string name, int amount)specialCurrencyReward);

            await Utils.MapAsync(playerParty, async (cb, i) =>
            {
                PerkLoad.CheckPerks(cb.character, Perk.Trigger.EndFight, cb.character);

                bool hasDied = cb.character.IsDead();
                if (!hasDied)
                {
                    cb.character.KCoins += koinsToGain;
                }

                if (cb.character is Player player)
                {
                    lootDisplay += await PlayerOnAllMobsDead(player, specialCurrencyReward, xpToGain, kills, enc);
                }
                else if (cb.character is NPC follower)
                {
                    lootDisplay += $" |-|{(follower.IsPet() ? follower.displayName : follower.name)} +{Utils.Display(follower.XpGain(xpToGain, follower.level))} XP {Environment.NewLine}";

                    //NPC looting
                    if (follower.IsPet())
                    {
                        follower.AddItemToInv(Item.RandomItem(follower.level, 1), follower.level);
                    }
                    else if (enc.loot != null && enc.loot.Count > 4)
                    {
                        int randomLoot = Program.rng.Next(enc.loot.Count);
                        int amount     = Program.rng.Next(1, enc.loot.GetCount(randomLoot) + 1);
                        follower.AddItemToInv(enc.loot.GetItem(randomLoot), amount, true);
                        enc.loot.Remove(randomLoot, amount);
                    }
                    else
                    {
                        follower.AddItemToInv(Item.RandomItem(follower.level * 5));
                    }
                    //
                    FollowerCheck(follower, party, allPlayersDead);
                }
            });

            //Manage Encounters
            if (party != null)
            {
                enc?.Save();
            }
            currentEncounter = null;

            FinalizeResultEmbed(invLoot, result, lootDisplay);
            return(MsgType.Loot);
        }
        private async Task <MsgType> HandleAllPlayersDead(EmbedBuilder result)
        {
            NPC    mob      = (NPC)Utils.RandomElement(mobParty).character;
            string lostInfo = allMobsDead ? "No one is left standing to claim victory." : "You have been defeated." + Environment.NewLine;

            if (currentArea.IsDungeon)
            {
                await Database.DeleteRecord <Area>("Dungeons", MainAreaPath.path, "AreaId");
            }

            MsgType   msgType   = MsgType.Main;
            Encounter encounter = await ChallengeEnd();

            if (encounter != null)
            {
                msgType = encounter.Name switch
                {
                    Encounter.Names.Loot => MsgType.Loot,
                    _ => msgType,
                };
            }

            bool deathCost = msgType == MsgType.Main;

            foreach (var cb in playerParty)
            {
                PerkLoad.CheckPerks(cb.character, Perk.Trigger.EndFight, cb.character);

                if (encounter != null)
                {
                    if (encounter.koinsToGain > 0)
                    {
                        cb.character.KCoins += encounter.koinsToGain;
                    }
                    if (encounter.xpToGain > 0)
                    {
                        cb.character.XpGain(encounter.xpToGain, 1);
                    }
                }

                if (cb.character is Player player)
                {
                    if (!allMobsDead && deathCost)
                    {
                        lostInfo += DefeatCost(player, mob, 0.5) + Environment.NewLine;
                    }

                    await player.Respawn(false);

                    if (endDungeon)
                    {
                        player.AreaInfo = ParentAreaPath(currentArea, partyLeader.AreaInfo.floor);
                    }
                    player.SaveFileMongo();
                }
                else if (cb.character is NPC n)
                {
                    FollowerCheck(n, party, allPlayersDead);
                }
            }

            result.AddField("Defeat", lostInfo);

            if (encounter != null)
            {
                string loot = null;
                if (encounter.loot != null && encounter.loot.Count > 0)
                {
                    int c = Math.Min(encounter.loot.Count, 10);
                    for (int i = 0; i < c; i++)
                    {
                        loot += $"{i + 1}|" + encounter.loot[i] + Environment.NewLine;
                    }
                    if (c < encounter.loot.Count)
                    {
                        loot += $"And {encounter.loot.Count - c} more...";
                    }
                }

                string extraResult = (encounter.koinsToGain > 0 ? $"+{encounter.koinsToGain} Kuts" + Environment.NewLine : null)
                                     + (encounter.xpToGain > 0 ? $"+{encounter.xpToGain} XP" + Environment.NewLine : null)
                                     + loot;

                result.AddField("Rewards",
                                extraResult.Length != 0 ? extraResult : "None");

                encounter.koinsToGain = 0;
                encounter.xpToGain    = 0;

                if (party != null)
                {
                    partyLeader.NewEncounter(encounter);
                }
            }

            if (!allMobsDead && currentEncounter.Name != Encounter.Names.Bounty &&
                currentArea.type != AreaType.Dungeon && currentArea.type != AreaType.Arena)
            {
                PopulationHandler.Add(currentArea, mob);
            }
            return(msgType);
        }
예제 #21
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}");
        }
예제 #22
0
 public long Health(bool bonus = true)
 {
     return(stats.MaxHealth() + equipment.Health() + (bonus ? PerkLoad.CheckPerks <long>(this, Perk.Trigger.MaxHealth, 0) : 0));
 }