private void UserControl_Loaded(object sender, RoutedEventArgs e)
 {
     HPrect.Fill = new SolidColorBrush(Color.FromArgb(0xff, 0x4a, 0x82, 0xbd));
     Abnormalities.ItemsSource  = EntitiesManager.CurrentBosses.Where(x => x.EntityId == EntityId).First().Buffs;
     NextEnrage.RenderTransform = new TranslateTransform(BaseRect.Width * .9, 0);
     Perc2.Text = String.Format("{0} / {1}", CurrentHP.ToString("n", nfi), MaxHP.ToString("n", nfi));
 }
        private void BossGage_HPUpdated(ulong id, object hp)
        {
            Dispatcher.Invoke(() =>
            {
                if (id == EntityId)
                {
                    CurrentHP = Convert.ToInt32(hp);
                    if (CurrentHP > MaxHP)
                    {
                        MaxHP = CurrentHP;
                    }
                    DoubleAnimation.To = ValueToLength(CurrentHP, MaxHP);
                    HPrect.BeginAnimation(WidthProperty, DoubleAnimation);

                    Perc.Text  = String.Format("{0:0.0}%", CurrentPercentage);
                    Perc2.Text = String.Format("{0} / {1}", CurrentHP.ToString("n", nfi), MaxHP.ToString("n", nfi));

                    if (Enraged)
                    {
                        SlideNextEnrage(CurrentPercentage);
                        //SetEnragePercTB(CurrentPercentage);
                    }
                }
            });
        }
Example #3
0
        public override string ToString()
        {
            return(string.Format(
                       "Информация о персонаже: \n" +
                       "Имя: {0} \n" +
                       "ID: {1} \n" +
                       "Состояние: {2} \n" +
                       "Cпособен двигаться: {3} \n" +
                       "Способен говорить: {4} \n" +
                       "Раса: {5} \n" +
                       "Пол: {6} \n" +
                       "Возраст: {7} \n" +
                       "Здоровье: {8}/{9} \n" +
                       "Опыт: {10} \n" +
                       "Броня: {11} \n",
                       Name,
                       ID.ToString(),
                       Condition.ToString(),
                       AbleToSpeak.ToString(),
                       AbleToMove.ToString(),
                       Race.ToString(),
                       Gender.ToString(),
                       Age.ToString(),
                       CurrentHP.ToString(),
                       MaxHP.ToString(),
                       Exp.ToString(),
                       Armored.ToString()
                       ));

            ;
        }
Example #4
0
 public String GetStats(bool debug = false)
 {
     if (debug)
     {
         return(string.Format("{0} HP: {1} Spd: {2} Dmg: {3}", new string[] { Glyph.ToString(), CurrentHP.ToString(), speed.ToString(), damage.ToString() }));
     }
     return(string.Format("{0} HP: {1}", new string[] { Glyph.ToString(), CurrentHP.ToString() }));
 }
Example #5
0
 public void ShowStats()
 {
     Console.WriteLine(Name);
     Console.WriteLine("Lvl " + Lvl.ToString());
     Console.WriteLine("HP " + CurrentHP.ToString());
     Console.WriteLine("Damage " + Damage.ToString());
     Console.WriteLine("Type " + Type.ToString());
     Console.WriteLine();
 }
        IEnumerator CheckHP()
        {
            while (!isDead)
            {
                yield return(new WaitForSeconds(0.2f));

                switch (currentHealth)
                {
                case 10:
                    currentHP = CurrentHP.HP10;
                    break;

                case 9:
                    currentHP = CurrentHP.HP9;
                    break;

                case 8:
                    currentHP = CurrentHP.HP8;
                    break;

                case 7:
                    currentHP = CurrentHP.HP7;
                    break;

                case 6:
                    currentHP = CurrentHP.HP6;
                    break;

                case 5:
                    currentHP = CurrentHP.HP5;
                    break;

                case 4:
                    currentHP = CurrentHP.HP4;
                    break;

                case 3:
                    currentHP = CurrentHP.HP3;
                    break;

                case 2:
                    currentHP = CurrentHP.HP2;
                    break;

                case 1:
                    currentHP = CurrentHP.HP1;
                    break;

                case 0:
                    currentHP = CurrentHP.HP0;
                    break;
                }
                yield return(null);
            }
        }
Example #7
0
        private async Task <EncounterData> Encounter(string enemyPath, int enemyLevel, string enemyName)
        {
            try {
                var path = ImageGenerator.CreateOrGetImage(enemyPath, BackgroundPath, CurrentHP / MaxHP);
                var url  = await ImageGenerator.GetImageURL(path);

                var currentUserIds = UserIds.ToList();

                var maxHPEnemy     = enemyLevel * 50 * random.Range(0.8f, 1.5f);
                var currentHPEnemy = maxHPEnemy;

                DiscordMessage msg        = null;
                var            actions    = Actions.ActionBase.GetAllActions();
                var            turnCount  = 0;
                var            additional = "";
                while (true)
                {
                    turnCount++;

                    var healthPercentage      = CurrentHP / MaxHP;
                    var healthPercentageEnemy = currentHPEnemy / maxHPEnemy;

                    var embed = Bot.GetDefaultEmbed()
                                .WithImageUrl(url)
                                .AddField("Quest", QuestName)
                                .WithColor(new DiscordColor(1f, healthPercentage, healthPercentage))
                                .AddField("__Encounter__", $"{enemyName} - LVL {enemyLevel}")
                                .AddField($"HP - {CurrentHP.ToString("0.00")} / {MaxHP.ToString("0.00")}", $"`{ProgressBar.GetProcessBar(healthPercentage)}`")
                                .AddField($"Enemy - {currentHPEnemy.ToString("0.00")} / {maxHPEnemy.ToString("0.00")}", $"`{ProgressBar.GetProcessBar(healthPercentageEnemy)}`");

                    if (!string.IsNullOrEmpty(additional))
                    {
                        embed.AddField("Info", additional);
                    }

                    if (msg != null)
                    {
                        await msg.DeleteAsync();

                        await Task.Delay(500);
                    }

                    msg = await Channel.SendMessageAsync(embed : embed);

                    await Task.Delay(500);

                    #region Get Reactions

                    var currentPlayerActions = currentUserIds.ToDictionary(x => x, k => - 1);

                    async Task CollectActions(CancellationToken token)
                    {
                        while (currentPlayerActions.Values.Any(x => x == -1))
                        {
                            try {
                                if (token.IsCancellationRequested)
                                {
                                    return;
                                }
                                await Task.Delay(1000);

                                foreach (var action in actions)
                                {
                                    if (token.IsCancellationRequested)
                                    {
                                        return;
                                    }
                                    var reactions = await msg.GetReactionsAsync(action.GetEmoji());

                                    await Task.Delay(500);

                                    foreach (var user in reactions)
                                    {
                                        if (user.IsBot)
                                        {
                                            continue;
                                        }
                                        if (currentUserIds.Contains(user.Id))
                                        {
                                            Logger.Info($"Found {user.Id} with action {action.GetType().Name}");
                                            currentPlayerActions[user.Id] = action.Id;
                                        }
                                    }
                                }
                            } catch (System.Exception ex) {
                                Logger.Error(ex);
                            }
                        }
                    }

                    #region Add Reactions

                    foreach (var action in actions)
                    {
                        await msg.CreateReactionAsync(action.GetEmoji());

                        await Task.Delay(500);
                    }

                    #endregion Add Reactions

                    using (var timeout = new CancellationTokenSource()) {
                        var task      = CollectActions(timeout.Token);
                        var completed = await Task.WhenAny(Task.Delay(TimeSpan.FromMinutes(1), timeout.Token), task);

                        if (completed == task)
                        {
                            timeout.Cancel();
                            await task;
                        }
                        else
                        {
                            Logger.Info("TIMEOUT");
                        }
                    }

                    #endregion Get Reactions

                    #region Handle Actions

                    var totalAttacked = 0f;
                    var totalBlocked  = 0f;
                    var ranPlayers    = new List <ulong>();
                    foreach (var kv in currentPlayerActions)
                    {
                        if (kv.Value == -1)
                        {
                            continue;
                        }
                        var action = actions.First(x => x.Id == kv.Value);
                        if (action != null)
                        {
                            var playerId = kv.Key;
                            var type     = action.GetType();
                            if (type == typeof(Flee))
                            {
                                //remove from current party
                                ranPlayers.Add(playerId);
                                _ = currentUserIds.Remove(playerId);
                            }
                            else if (type == typeof(Attack))
                            {
                                var player = Player.GetPlayer(Channel.GuildId, playerId);
                                totalAttacked += player.GetAttack();
                            }
                            else if (type == typeof(Defend))
                            {
                                var player = Player.GetPlayer(Channel.GuildId, playerId);
                                totalBlocked += player.GetAttack();
                            }
                        }
                    }
                    //LEAVE IF NO PLAYERS REMAIN
                    if (currentUserIds.Count == 0)
                    {
                        await msg.DeleteAsync();

                        await Task.Delay(500);

                        var exp  = CalculateExp(enemyLevel, currentHPEnemy, maxHPEnemy);
                        var gold = CalculateGold(enemyLevel, currentHPEnemy, maxHPEnemy);
                        foreach (var id in ranPlayers)
                        {
                            var player = Player.GetPlayer(Channel.GuildId, id);
                            player.AddExperience(exp);
                            player.AddGold(gold);
                            MaxHP -= player.GetTotalHP();
                            player.Update();
                        }

                        return(new EncounterData {
                            Message = $"The remaining party ran away safely, and received {exp} exp and {gold} gold."
                        });
                    }

                    currentHPEnemy -= totalAttacked;
                    if (currentHPEnemy <= 0f)
                    {
                        //victory
                        await msg.DeleteAsync();

                        var players = Player.GetPlayers(Channel.GuildId, currentUserIds);

                        var exp  = CalculateExp(enemyLevel, 0, 1);
                        var gold = CalculateGold(enemyLevel, 0, 1);
                        foreach (var player in players)
                        {
                            player.Victory(exp, gold);
                            player.Update();
                        }

                        await Task.Delay(500);

                        return(new EncounterData()
                        {
                            Ids = currentPlayerActions.Keys,
                            Message = $"Everyone pulled together, and defeated the enemy in {turnCount} turns!\nReceived a total of {exp} exp and {gold} gold.",
                        });
                    }
                    var damage = CalculateDamage(enemyLevel);
                    CurrentHP -= Math.Max(0, damage - totalBlocked);
                    additional = $"Dealt {totalAttacked.ToString("0.00")} damage, and received {Math.Max(0, damage - totalBlocked).ToString("0.00")} damage";
                    if (CurrentHP <= 0f)
                    {
                        //dead
                        await msg.DeleteAsync();

                        var players = Player.GetPlayers(Channel.GuildId, currentUserIds);
                        var exp     = (long)Math.Round(CalculateExp(enemyLevel, 0, 1) * 0.75f);
                        foreach (var player in players)
                        {
                            player.CurrentMercenaries = 0;
                            player.AddExperience(-exp);
                            player.Update();
                        }

                        await Task.Delay(500);

                        return(new EncounterData {
                            Ids = null,
                            Message = $"Everyone died in {turnCount} turns and lost {exp} exp."
                        });
                    }

                    #endregion Handle Actions
                }
            } catch (System.Exception ex) {
                Logger.Error(ex);
                return(new EncounterData());
            }
        }