コード例 #1
0
ファイル: Area.cs プロジェクト: Eivlisskiv/Discord_Zihativa
        public NPC GetAMob(Random rng, int floor)
        {
            int mlevel = GetAreaFloorLevel(rng, floor);
            int rtier  = ArrayM.IndexWithRates(mobs.Length, rng);

            return(NPC.GenerateNPC(mlevel, mobs[rtier][ArrayM.IndexWithRates(mobs[rtier].Count, rng)]));
        }
コード例 #2
0
ファイル: UI.cs プロジェクト: Eivlisskiv/Discord_Zihativa
        public async Task Click2(SocketReaction reaction, IUserMessage msg)
        {
            string emote = reaction.Emote.ToString();

            if (emote == help)
            {
                await AllHelp(reaction, msg);
            }
            else if (type != MsgType.SpecSelection && ArrayM.IsInArray(emote, specs))
            {
                await player.Specialization.MainMenu(player, reaction.Channel);
            }
            else if (options.Contains(emote))
            {
                string function = type.ToString();
                try
                {
                    await reflectionCache.Run <Task>(function, this, reaction, msg);
                }
                catch (Exception e)
                {
                    if (!await NeitsilliaError.SpecialExceptions(e, reaction.Channel, player))
                    {
                        ReactionHandler.LogReactionError(this, e, reaction.Emote, msg.Channel);
                    }
                }
            }
        }
コード例 #3
0
 public int Resistance(int i)
 {
     while (stats.resistance.Length < ReferenceData.DmgType.Length)
     {
         stats.resistance = ArrayM.AddItem(stats.resistance, 0);
     }
     return(equipment.Resistance(i) + stats.resistance[i]);
 }
コード例 #4
0
 public object[] Opportunist(CombatResult owner, CombatResult enemy)
 {
     if (enemy.character.status.Count > 0)
     {
         owner.damageMultiplier = ArrayM.AddEach(owner.damageMultiplier,
                                                 0.01 * enemy.character.status.Count);
     }
     return(new object[] { owner, enemy });
 }
コード例 #5
0
 public object[] Underestimated(CombatResult owner, CombatResult enemy)
 {
     if (owner.character.level < enemy.character.level ||
         owner.character.Rank() < enemy.character.Rank())
     {
         owner.damageMultiplier = ArrayM.AddEach(owner.damageMultiplier, 0.1);
     }
     return(new object[] { owner, enemy });
 }
コード例 #6
0
        public object[] Vengeful(CombatResult owner)
        {
            double per = (owner.character.health / owner.character.Health()) - 0.35;

            if (per > 0)
            {
                owner.damageMultiplier = ArrayM.AddEach(owner.damageMultiplier, per);
            }
            return(R(owner));
        }
コード例 #7
0
 public long Damage(int i)
 {
     while (stats.damage.Length < ReferenceData.DmgType.Length)
     {
         stats.damage = ArrayM.AddItem(stats.damage, 0);
     }
     if (i == 0)
     {
         return(Convert.ToInt32((equipment.Damage(i) + stats.damage[i]) * stats.PhysicalDMG()));
     }
     return(equipment.Damage(i) + stats.damage[i]);
 }
コード例 #8
0
        public static async Task ListCharacters(IUser user, IMessageChannel chan, string prefix = null)
        {
            var chars = BotUser.GetCharFiles(user.Id);

            if (chars.Count < 1)
            {
                await chan.SendMessageAsync($"No characters found, use ``{prefix}New Character characternamehere`` to create characters");
            }
            else
            {
                string       list = ArrayM.ToString(chars, Environment.NewLine);
                EmbedBuilder em   = DUtils.BuildEmbed(user.Username + "'s Characters",
                                                      list, null, default, DUtils.NewField("Commands", "`Load charactername` & `Delete charactername`"));
コード例 #9
0
 public object[] LoneWolf(CombatResult owner, CombatResult enemy)
 {
     if (enemy.SentHit && enemy.abilityUsed.type == Ability.AType.Martial)
     {
         var enemies = enemy.GetAllies();
         var allies  = owner.GetAllies();
         int d       = enemies.Length - allies.Length;
         if (d > 0)
         {
             owner.bonusResistance = ArrayM.AddEach(owner.bonusResistance, 20 * d);
         }
     }
     return(new object[] { owner, enemy });
 }
コード例 #10
0
 public string[] MobDrops(int lootCount)
 {
     string[] looted = new string[lootCount];
     if (drops != null)
     {
         for (int i = 0; i < lootCount; i++)
         {
             int t = ArrayM.IndexWithRates(drops.Length, Program.rng);
             looted[i] = drops[t][ArrayM.IndexWithRates(drops[t].Count, Program.rng)];
         }
         return(looted);
     }
     return(null);
 }
コード例 #11
0
 public object[] AwaitedStorm(CombatResult owner, CombatResult enemy)
 {
     if (owner.abilityUsed.IsType(Ability.AType.Elemental, Ability.AType.Enchantment, Ability.AType.Martial))
     {
         if (rank > 0)
         {
             int bonus = owner.character.stats.GetSTR() * rank;
             owner.damageMultiplier = ArrayM.AddEach(owner.damageMultiplier, bonus / 100.00);
             owner.perkProcs.Add($"+{bonus}% DMG on {enemy.Name}");
             rank = 0;
         }
     }
     else
     {
         rank++;
     }
     return(R(owner, enemy));
 }
コード例 #12
0
        public async Task TestAreaFloorTest(string tables)
        {
            var l = tables.Split(';');

            List <string>[] table = new List <string> [l.Length];
            for (int i = 0; i < l.Length; i++)
            {
                table[i] = new List <string>(l[i].Split(','));
            }
            string       lootb = ArrayM.ToString(table);
            string       loota = "To do"; //ArrayM.ToString(ArrayM.FloorEffect(table, floor, maxfloor));
            EmbedBuilder test  = new EmbedBuilder();

            test.WithTitle("Area Floor Effect Test");
            test.AddField("Table", "Before:" + Environment.NewLine + lootb
                          + Environment.NewLine +
                          "After:" + Environment.NewLine + loota);
            await ReplyAsync(embed : test.Build());
        }
コード例 #13
0
        public async Task CratesListUI(ISocketMessageChannel chan)
        {
            if (ResourceCrates == null)
            {
                ResourceCrates = new int[5];
            }
            while (ResourceCrates.Length < 5)
            {
                ResourceCrates = ArrayM.AddItem(ResourceCrates, 0);
            }

            EmbedBuilder em = AMYPrototype.Commands.DUtils.BuildEmbed("Resource Crates",
                                                                      "Select a Crate type to open." + Environment.NewLine +
                                                                      $"{EUI.GetNum(0)} {ResourceCrates[0]} x Wooden Crates" + Environment.NewLine +
                                                                      $"{EUI.GetNum(1)} {ResourceCrates[1]} x Bronze Crates" + Environment.NewLine +
                                                                      $"{EUI.GetNum(2)} {ResourceCrates[2]} x Silver Crates" + Environment.NewLine +
                                                                      $"{EUI.GetNum(3)} {ResourceCrates[3]} x Golden Crates" + Environment.NewLine +
                                                                      $"{EUI.GetNum(4)} {ResourceCrates[4]} x Platinum Crates");

            NewUI(await chan.SendMessageAsync(embed: em.Build()), MsgType.ResourceCrateList);
        }
コード例 #14
0
        public object[] GladiatorPatientia(CombatResult owner)
        {
            int    set  = GearSets.GetSetPower("Gladiator", owner.character.equipment);
            double buff = (set * 0.2) * rank;
            int    max  = 10 + (3 * set);

            if (buff >= max)
            {
                buff += (18 * set);
                rank  = 0;
            }
            else
            {
                rank++;
            }

            owner.perkProcs.Add($"Gladiator Patientia: +{Math.Round(buff, 2)}% PHY DMG");

            owner.damageMultiplier = ArrayM.AddEach(owner.damageMultiplier, buff / 100.00);

            return(R(owner));
        }
コード例 #15
0
        /// <summary>
        /// Calculates the total Damage
        /// </summary>
        /// <param name="i">index of damage type</param>
        /// <param name="b">User Base stat</param>
        /// <param name="e">User Efficiency</param>
        /// <returns></returns>
        public long Damage(int i, double b, double e)
        {
            while (damage.Length < ReferenceData.DmgType.Length)
            {
                damage = ArrayM.AddItem(damage, 0);
            }
            switch (type)
            {
            case AType.Martial:
                return(Convert.ToInt32(damage[i] + b));

            case AType.Enchantment:
                return(Convert.ToInt32(((1 + (damage[i] / 100.00)) * b) * e));

            case AType.Elemental:
                return(Convert.ToInt32(damage[i] * e));

            case AType.Tactical:
            case AType.Defensive:
            default:
                return(0);
            }
        }
コード例 #16
0
        public async Task NewVote()
        {
            if (ResourceCrates == null)
            {
                ResourceCrates = new int[5];
            }
            while (ResourceCrates.Length < 5)
            {
                ResourceCrates = ArrayM.AddItem(ResourceCrates, 0);
            }

            string rewards = null;
            int    amount  = Program.dblAPI.CrateAmount() * ReferenceData.CrateRate;

            rewards += ProcessVotes(amount);

            Save();

            await SendMessageToDM($"Your vote was registered." +
                                  $" You've received: {Environment.NewLine + rewards} with a current streak of **{voteStreak}**."
                                  + Environment.NewLine + "Use command `Crates` to open resource crates."
                                  );
        }