예제 #1
0
        private void LoadSkillEffect(bool isMod)
        {
            int hSize = 30;

            try
            {
                string[] skillEffect = isMod ? doll.ModSkillEffect : doll.SkillEffect;
                string[] skillMags   = isMod ? doll.ModSkillMag : doll.SkillMag;

                SkillViewer_InitialCoolTime.Text = skillMags[0];
                SkillViewer_CoolTime.Text        = skillMags[1];

                if (SkillViewer_SkillEffectTable.RowCount < skillEffect.Length - 2)
                {
                    SkillViewer_SkillEffectTable.Height += hSize * (skillEffect.Length - 4);
                    Height += hSize * (skillEffect.Length - 4);
                    SkillViewer_SkillEffectTable.RowCount = skillEffect.Length - 2;
                }

                for (int i = 2; i < skillEffect.Length; ++i)
                {
                    Label effect = new Label();
                    effect.Dock      = DockStyle.Fill;
                    effect.TextAlign = ContentAlignment.MiddleCenter;
                    effect.Text      = skillEffect[i];
                    effect.Font      = new Font(effect.Font.FontFamily, effect.Font.Size, FontStyle.Bold);

                    Label mag = new Label();
                    mag.Dock      = DockStyle.Fill;
                    mag.TextAlign = ContentAlignment.MiddleCenter;
                    mag.Text      = skillMags[i];

                    SkillViewer_SkillEffectTable.Controls.Add(effect, 0, i - 2);
                    SkillViewer_SkillEffectTable.Controls.Add(mag, 1, i - 2);

                    if (i >= 4)
                    {
                        SkillViewer_SkillEffectTable.RowStyles.Add(new RowStyle(SizeType.Absolute));
                    }
                }

                for (int i = 0; i < SkillViewer_SkillEffectTable.RowCount; ++i)
                {
                    SkillViewer_SkillEffectTable.RowStyles[i].SizeType = SizeType.Absolute;
                    SkillViewer_SkillEffectTable.RowStyles[i].Height   = 30;
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("스킬 정보 불러오기 오류", "인형 스킬 세부 효과 정보를 불러오는 동안 오류가 발생했습니다.");
            }
        }
예제 #2
0
        private async Task LoadImage(bool IsRefresh = false)
        {
            try
            {
                string ImageName = doll.DicNumber.ToString();

                if (costumeIndex >= 1)
                {
                    ImageName += $"_{costumeIndex + 1}";
                }
                else if
                ((costumeIndex == 0) && (modIndex == 3))
                {
                    ImageName += "_M";
                }

                if (isDamage == true)
                {
                    ImageName += "_D";
                }

                if ((doll.HasCensored == true) && (enableCensored == true) && (modIndex != 3))
                {
                    if (CheckCensorType() == true)
                    {
                        ImageName += "_C";
                    }
                }

                string ImagePath = Path.Combine(ETC.cachePath, "Doll", "Normal", $"{ImageName}.gfdcache");
                string URL       = Path.Combine(ETC.server, "Data", "Images", "Guns", "Normal", $"{ImageName}.png");

                if ((File.Exists(ImagePath) == false) || (IsRefresh == true))
                {
                    using (WebClient wc = new WebClient())
                        await Task.Run(async() => { await wc.DownloadFileTaskAsync(URL, ImagePath); });
                }

                await Task.Delay(100);

                TDollDic_ImageViewer_ImageView.ImageLocation = ImagePath;

                string damageText = isDamage ? "중상" : "정상";

                TDollDic_ImageViewer_DamageToggle.Text = damageText;
                TDollDic_ImageViewer_ImageStatus.Text  = $"{doll.Name} - {costumeList[costumeIndex]} - {damageText}";
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("이미지 로드 오류", "이미지를 로드하는 중 오류가 발생했습니다.");
            }
        }
예제 #3
0
        private async Task PlayVoice(string voiceName)
        {
            try
            {
                string server = "";
                string target = "";

                switch (vCostumeIndex)
                {
                case 0:
                    server = Path.Combine(ETC.server, "Data", "Voice", "Doll", doll.krName, $"{doll.krName}_{voiceName}_JP.wav");
                    target = Path.Combine(ETC.cachePath, "Voices", "Doll", $"{doll.DicNumber}_{voiceName}_JP.gfdcache");
                    break;

                default:
                    server = Path.Combine(ETC.server, "Data", "Voice", "Doll", $"{doll.krName}_{vCostumeIndex - 1}", $"{doll.krName}_{vCostumeIndex - 1}_{voiceName}_JP.wav");
                    target = Path.Combine(ETC.cachePath, "Voices", "Doll", $"{doll.DicNumber}_{vCostumeIndex - 1}_{voiceName}_JP.gfdcache");
                    break;
                }

                await Task.Delay(100);

                if (!File.Exists(target))
                {
                    try
                    {
                        using (WebClient wc = new WebClient())
                        {
                            wc.DownloadProgressChanged += (object s, DownloadProgressChangedEventArgs args) =>
                            {
                            };
                            await wc.DownloadFileTaskAsync(server, target);
                        }
                    }
                    catch (Exception ex)
                    {
                        ETC.LogError(ex);
                    }
                }

                soundPlayer.SoundLocation = target;
                soundPlayer.Play();
            }
            catch (WebException ex)
            {
                ETC.LogError(ex);
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
            }
        }
예제 #4
0
 private async Task LoadNotification()
 {
     try
     {
         using (WebClient wc = new WebClient())
             MainNotification.Text = await wc.DownloadStringTaskAsync(Path.Combine(ETC.server, "Android_Notification.txt"));
     }
     catch (Exception ex)
     {
         ETC.LogError(ex);
         MainNotification.Text = "Server Network Bad :(";
     }
 }
예제 #5
0
        private async Task ListEquip(string searchName)
        {
            await Task.Delay(10);

            try
            {
                EquipDic_EquipListView.Items.Clear();

                CheckApplyEquipFilter();

                foreach (Equip equip in equipRootList)
                {
                    if ((searchName != null) && !equip.Name.ToUpper().Contains(searchName.ToUpper()))
                    {
                        continue;
                    }

                    if (!CheckFilter(equip))
                    {
                        continue;
                    }

                    string grade = "";

                    if (equip.Grade == 0)
                    {
                        grade = "★";
                    }
                    else
                    {
                        grade = $"☆{equip.Grade}";
                    }

                    EquipDic_EquipListView.Items.Add(new ListViewItem(new string[]
                    {
                        equip.Id.ToString(),
                        grade,
                        equip.Name,
                        equip.Category,
                        equip.Type
                    }));
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("리스트 오류", "장비 리스트를 생성하는 중 오류가 발생했습니다.");
            }
        }
예제 #6
0
        private async Task ListDoll(string searchName)
        {
            await Task.Delay(10);

            try
            {
                TDollDic_TDollListView.Items.Clear();

                CheckApplyDollFilter();

                foreach (Doll doll in dollRootList)
                {
                    if ((searchName != null) && !doll.Name.ToUpper().Contains(searchName.ToUpper()))
                    {
                        continue;
                    }

                    if (!CheckFilter(doll))
                    {
                        continue;
                    }

                    string grade = "";

                    if (doll.Grade == 0)
                    {
                        grade = "★";
                    }
                    else
                    {
                        grade = $"☆{doll.Grade}";
                    }

                    TDollDic_TDollListView.Items.Add(new ListViewItem(new string[]
                    {
                        doll.DicNumber.ToString(),
                        doll.Type,
                        grade,
                        doll.Name,
                        doll.HasMod ? "O" : "X"
                    }));
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("리스트 오류", "인형 리스트를 생성하는 중 오류가 발생했습니다.");
            }
        }
예제 #7
0
        private void TextViewer_ControlButton_Click(object sender, EventArgs e)
        {
            try
            {
                switch ((string)(sender as Button).Tag)
                {
                case "P":
                    if (index > 1)
                    {
                        index -= 1;
                    }
                    break;

                default:
                case "N":
                    if (index < count)
                    {
                        index += 1;
                    }
                    break;
                }

                TextViewer_PreviousButton.Enabled = true;
                TextViewer_NextButton.Enabled     = true;

                if (index <= 1)
                {
                    TextViewer_PreviousButton.Enabled = false;
                }
                if (index >= count)
                {
                    TextViewer_NextButton.Enabled = false;
                }

                if (category == "ModStory")
                {
                    _ = LoadStory(doll.DicNumber.ToString());
                }
                else
                {
                    _ = LoadStory();
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
            }
        }
예제 #8
0
        private async Task InitializeFairyDic()
        {
            await Task.Delay(1);

            try
            {
                FairyDic_SplitContainer.Panel1.Hide();

                _ = ListFairy(null);
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("도감 초기화 오류", "요정 도감 초기화 중 오류가 발생했습니다.");
            }
        }
예제 #9
0
        private void LoadAbilityEquip()
        {
            Label[] abilityControls =
            {
                EquipDic_EquipInfo_Ability1,
                EquipDic_EquipInfo_Ability2,
                EquipDic_EquipInfo_Ability3,
                EquipDic_EquipInfo_Ability4
            };
            Label[] initMagControls =
            {
                EquipDic_EquipInfo_InitMag1,
                EquipDic_EquipInfo_InitMag2,
                EquipDic_EquipInfo_InitMag3,
                EquipDic_EquipInfo_InitMag4
            };
            Label[] maxMagControls =
            {
                EquipDic_EquipInfo_MaxMag1,
                EquipDic_EquipInfo_MaxMag2,
                EquipDic_EquipInfo_MaxMag3,
                EquipDic_EquipInfo_MaxMag4
            };

            try
            {
                for (int i = 0; i < equip.Abilities.Length; ++i)
                {
                    abilityControls[i].Text = equip.Abilities[i];
                    initMagControls[i].Text = equip.InitMags[i];
                    maxMagControls[i].Text  = equip.MaxMags[i];
                }

                for (int i = equip.Abilities.Length; i < abilityControls.Length; ++i)
                {
                    abilityControls[i].Text = "";
                    initMagControls[i].Text = "";
                    maxMagControls[i].Text  = "";
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("장비 능력치 오류", "장비 능력치를 불러오는 중 오류가 발생했습니다.");
            }
        }
예제 #10
0
        private void FairyDic_FairyListView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            try
            {
                if (e.IsSelected)
                {
                    fairy = new Fairy(ETC.FindDataRow(ETC.fairyList, "DicNumber", int.Parse(e.Item.Text)));

                    _ = LoadFairyInfo();
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("요정 불러오기 오류", "요정 정보를 불러오는 동안 오류가 발생했습니다.");
            }
        }
예제 #11
0
        private async Task LoadText(string url)
        {
            string text;

            try
            {
                using (WebClient wc = new WebClient())
                    text = await wc.DownloadStringTaskAsync(url);

                TextViewer_TextField.Text = text;
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("텍스트 뷰어 오류", "네트워크에서 텍스트를 불러오는 중 오류가 발생했습니다.");
            }
        }
예제 #12
0
        private void EquipDic_EquipListView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            try
            {
                if (e.IsSelected)
                {
                    equip = new Equip(ETC.FindDataRow(ETC.equipmentList, "Id", int.Parse(e.Item.Text)));

                    _ = LoadEquipInfo();
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("장비 불러오기 오류", "장비 정보를 불러오는 동안 오류가 발생했습니다.");
            }
        }
예제 #13
0
        private async void StatusStrip_AppVerLabel_Click(object sender, EventArgs e)
        {
            var label = sender as ToolStripStatusLabel;

            if (label.DisplayStyle == ToolStripItemDisplayStyle.ImageAndText)
            {
                if (MessageBox.Show("프로그램 업데이트가 확인되었습니다. 계속 진행할까요?", "프로그램 업데이트 확인", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    UpdateCheckTimer.Stop();
                    GFDStatusLabel.Visible = true;

                    if (!await ETC.UpdateProgram(GFDStatusLabel))
                    {
                        GFDStatusLabel.Visible = false;
                    }
                }
            }
        }
예제 #14
0
        private void TDollDic_TDollListView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            try
            {
                if (e.IsSelected)
                {
                    doll          = new Doll(ETC.FindDataRow(ETC.dollList, "DicNumber", int.Parse(e.Item.Text)));
                    vCostumeIndex = 0;

                    _ = LoadTDollInfo();
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("인형 불러오기 오류", "인형 정보를 불러오는 동안 오류가 발생했습니다.");
            }
        }
예제 #15
0
        private void ListTable(ref DataTable dt)
        {
            int[] time = new int[2];

            try
            {
                foreach (DataRow dr in dt.Rows)
                {
                    int t = (int)dr["ProductTime"];

                    if (t == 0)
                    {
                        continue;
                    }

                    time[0] = t / 60;
                    time[1] = t - time[0] * 60;

                    ProductTimeTable_ListView.Items.Add(new ListViewItem(new string[]
                    {
                        "",
                        $"{time[0]} : {time[1]}",
                        (string)dr["Name"]
                    }));
                }

                ProductTimeTable_ListView.ListViewItemSorter = new ETC.Sorter
                {
                    Order       = ProductTimeTable_ListView.Sorting,
                    ColumnIndex = 1
                };

                ProductTimeTable_ListView.Sort();
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);

                if (MessageBox.Show("데이터 구성 중 오류가 발생했습니다.", "데이터 구성 오류", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)
                {
                    Close();
                }
            }
        }
예제 #16
0
        internal Fairy(DataRow dr, bool basic_info = false)
        {
            Name          = (string)dr["Name"];
            DicNumber     = (int)dr["DicNumber"];
            Type          = (string)dr["Type"];
            ProductTime   = (int)dr["ProductTime"];
            Note          = ETC.IsDBNullOrBlank(dr, "Note") ? "" : (string)dr["Note"];
            ProductDialog = ETC.IsDBNullOrBlank(dr, "ProductDialog") ? "" : (string)dr["ProductDialog"];

            SkillName    = (string)dr["SkillName"];
            SkillExplain = (string)dr["SkillExplain"];
            SkillEffect  = ((string)dr["SkillEffect"]).Split(';');
            SkillRate    = ((string)dr["SkillRate"]).Split(';');

            OrderConsume = (int)dr["OrderConsume"];
            CoolDown     = (int)dr["CoolDown"];

            SetAbility(ref dr);
        }
예제 #17
0
        private void BasicInitialize()
        {
            try
            {
#if DEBUG
                ETC.isReleaseMode = false;
#endif
                CheckInitFolder();

                if (ETC.isReleaseMode == true)
                {
                    AppCenter.Start("62727ad7-8a10-4667-902b-5414f5abd730", typeof(Analytics), typeof(Crashes));
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
            }
        }
예제 #18
0
        internal Equip(DataRow dr, bool basic_info = false)
        {
            Name          = (string)dr["Name"];
            Id            = (int)dr["Id"];
            Grade         = (int)dr["Grade"];
            ProductTime   = (int)dr["ProductTime"];
            Category      = (string)dr["Category"];
            Icon          = (string)dr["Icon"];
            Note          = ETC.IsDBNullOrBlank(dr, "Note") ? "" : (string)dr["Note"];
            Type          = (string)dr["Type"];
            ProductDialog = ETC.IsDBNullOrBlank(dr, "ProductDialog") ? "" : (string)dr["ProductDialog"];

            ImagePath = Path.Combine(ETC.cachePath, "Equip", "Normal", string.Format("{0}.gfdcache", Icon));

            OnlyUse     = ETC.IsDBNullOrBlank(dr, "OnlyUse") ? null : ((string)dr["OnlyUse"]).Split(';');
            DollType    = ETC.IsDBNullOrBlank(dr, "DollType") ? null : ((string)dr["DollType"]).Split(';');
            SpecialDoll = ETC.IsDBNullOrBlank(dr, "SpecialDoll") ? null : ((string)dr["SpecialDoll"]).Split(';');

            SetAbility(ref dr);
        }
예제 #19
0
        private async void UpdateCheckTimer_Tick(object sender, EventArgs e)
        {
            try
            {
                if (await ETC.CheckAppVersion())
                {
                    StatusStrip_AppVerLabel.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
                }
                else
                {
                    StatusStrip_AppVerLabel.DisplayStyle = ToolStripItemDisplayStyle.Text;
                }

                if (await ETC.CheckDBVersion())
                {
                    StatusStrip_DBVerLabel.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
                }
                else
                {
                    StatusStrip_DBVerLabel.DisplayStyle = ToolStripItemDisplayStyle.Text;
                }

                if (await ETC.CheckOldGFDVersion())
                {
                    StatusStrip_OldGFDVerLabel.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
                }
                else
                {
                    StatusStrip_OldGFDVerLabel.DisplayStyle = ToolStripItemDisplayStyle.Text;
                }

                StatusStrip_DBVerLabel.Text     = $"DB Ver : {ETC.dbVer}";
                StatusStrip_OldGFDVerLabel.Text = $"GFDv1 Ver : {ETC.oldGFDVer}";
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
            }
        }
예제 #20
0
        private async Task ListFairy(string searchName)
        {
            await Task.Delay(10);

            try
            {
                FairyDic_FairyListView.Items.Clear();

                CheckApplyFairyFilter();

                foreach (Fairy fairy in fairyRootList)
                {
                    if ((searchName != null) && !fairy.Name.ToUpper().Contains(searchName.ToUpper()))
                    {
                        continue;
                    }

                    if (!CheckFilter(fairy))
                    {
                        continue;
                    }

                    FairyDic_FairyListView.Items.Add(new ListViewItem(new string[]
                    {
                        fairy.DicNumber.ToString(),
                        fairy.Type,
                        fairy.Name
                    }));
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("리스트 오류", "요정 리스트를 생성하는 중 오류가 발생했습니다.");
            }
        }
예제 #21
0
        private async Task LoadEquipInfo(bool isRefresh = false)
        {
            await Task.Delay(10);

            isEquipLoad = true;

            try
            {
                EquipDic_SplitContainer.Panel1.Show();

                EquipDic_EquipInfo_DicNumber.Text    = $"No. {equip.Id}";
                EquipDic_EquipInfo_Name.Text         = equip.Name;
                EquipDic_EquipInfo_TypeCategory.Text = $"{equip.Category} - {equip.Type}";

                await LoadEquipImage(isRefresh);

                Bitmap gBitmap;

                switch (equip.Grade)
                {
                default:
                case 2:
                    gBitmap = Resources.EquipBG_2;
                    break;

                case 3:
                    gBitmap = Resources.EquipBG_3;
                    break;

                case 4:
                    gBitmap = Resources.EquipBG_4;
                    break;

                case 0:
                case 5:
                    gBitmap = Resources.EquipBG_5;
                    break;
                }

                EquipDic_EquipInfo_FullImageView.BackgroundImage = gBitmap;

                EquipDic_EquipInfo_ProductTimeLabel.Text = equip.GetProductTimeToString;

                if (equip.OnlyUse == null)
                {
                    EquipDic_EquipInfo_OnlyUseDollPanel.Visible = false;
                    EquipDic_EquipInfo_DollTypePanel.Visible    = true;
                    LoadEquipDollType();
                }
                else
                {
                    EquipDic_EquipInfo_DollTypePanel.Visible    = false;
                    EquipDic_EquipInfo_OnlyUseDollPanel.Visible = true;
                    LoadEquipOnlyUseDoll();
                }

                LoadAbilityEquip();

                EquipDic_EquipInfo_GainTooltip.SetToolTip(EquipDic_EquipInfo_FullImageView, equip.ProductDialog);
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("장비 불러오기 오류", "장비 정보를 불러오는 중 오류가 발생했습니다.");
            }
            finally
            {
                isEquipLoad = false;
            }
        }
예제 #22
0
        internal Doll(DataRow dr, bool basic_info = false)
        {
            Name          = (string)dr["Name"];
            ProductDialog = ETC.IsDBNullOrBlank(dr, "ProductDialog") ? "" : (string)dr["ProductDialog"];

            krName      = (string)dr["Name"];
            NickName    = (string)dr["NickName"];
            CodeName    = (string)dr["CodeName"];
            DicNumber   = (int)dr["DicNumber"];
            RealModel   = (string)dr["Model"];
            Country     = SetCountry(ref dr);
            Grade       = (int)dr["Grade"];
            ProductTime = (int)dr["ProductTime"];
            Type        = (string)dr["Type"];
            DropEvent   = ((string)dr["DropEvent"]).Split(',');
            HasMod      = (bool)dr["HasMod"];
            HasVoice    = (bool)dr["HasVoice"];
            Illustrator = ETC.IsDBNullOrBlank(dr, "Illustrator") ? "" : (string)dr["Illustrator"];
            HasCensored = (bool)dr["HasCensor"];
            CensorType  = HasCensored ? ((string)dr["CensorType"]).Split(';') : null;
            Costumes    = ETC.IsDBNullOrBlank(dr, "Costume") == true ? null : ((string)dr["Costume"]).Split(';');

            string[] BuffFormation_Data = ((string)dr["EffectFormation"]).Split(',');
            BuffFormation = new int[9];

            for (int i = 0; i < BuffFormation_Data.Length; ++i)
            {
                BuffFormation[i] = int.Parse(BuffFormation_Data[i]);
            }

            BuffInfo = ((string)dr["Effect"]).Split(';');
            BuffType = ((string)dr["EffectType"]).Split(',');

            SkillName    = (string)dr["Skill"];
            SkillExplain = (string)dr["SkillExplain"];
            SkillEffect  = ((string)dr["SkillEffect"]).Split(';');
            SkillMag     = ((string)dr["SkillMag"]).Split(',');

            if (HasMod == true)
            {
                ModGrade = (int)dr["ModGrade"];
                string[] ModBuffFormation_Data = ((string)dr["ModEffectFormation"]).Split(',');
                ModBuffFormation = new int[9];

                for (int i = 0; i < ModBuffFormation_Data.Length; ++i)
                {
                    ModBuffFormation[i] = int.Parse(ModBuffFormation_Data[i]);
                }

                ModBuffInfo      = ((string)dr["ModEffect"]).Split(';');
                ModSkillName     = (string)dr["ModSkill"];
                ModSkillExplain  = (string)dr["ModSkillExplain"];
                ModSkillEffect   = ((string)dr["ModSkillEffect"]).Split(';');
                ModSkillMag      = ((string)dr["ModSkillMag"]).Split(',');
                SkillMagAfterMod = ((string)dr["SkillMagAfterMod"]).Split(',');
            }

            if (basic_info == false)
            {
                if (HasVoice == true)
                {
                    Voices     = ((string)dr["Voices"]).Split(';');
                    VoiceActor = ETC.IsDBNullOrBlank(dr, "VoiceActor") ? "" : (string)dr["VoiceActor"];

                    if (ETC.IsDBNullOrBlank(dr, "CostumeVoices") == false)
                    {
                        string[] temp = ((string)dr["CostumeVoices"]).Split('/');

                        CostumeVoices = new string[temp.Length, 2];

                        for (int i = 0; i < temp.Length; ++i)
                        {
                            CostumeVoices[i, 0] = temp[i].Split(':')[0];
                            CostumeVoices[i, 1] = temp[i].Split(':')[1];
                        }
                    }
                }
                else
                {
                    Voices        = null;
                    CostumeVoices = null;
                }

                SetAbility(ref dr);
            }
        }
예제 #23
0
        internal int CalcAbility(string ability, int ability_value, int grow_ratio, int level, int favor, bool IsMod = false)
        {
            double favor_ratio = 0;
            double result      = 0;

            try
            {
                if (favor < 10)
                {
                    favor_ratio = -0.05;
                }
                else if (favor < 90)
                {
                    favor_ratio = 0;
                }
                else if (favor < 140)
                {
                    favor_ratio = 0.05;
                }
                else if (favor < 190)
                {
                    favor_ratio = 0.1;
                }
                else if (favor < 200)
                {
                    favor_ratio = 0.15;
                }
                else
                {
                    favor_ratio = 0;
                }

                double[] basic      = null;
                double[] grow       = null;
                double   type_ratio = Attributes[ability];

                switch (IsMod)
                {
                case false:
                    basic = NormalGrow_Basic[ability];
                    if ((ability != "HP") && (ability != "Armor"))
                    {
                        grow = NormalGrow_Grow[ability];
                    }
                    break;

                case true:
                    basic = ModGrow_Basic[ability];
                    if ((ability != "HP") && (ability != "Armor"))
                    {
                        grow = ModGrow_Grow[ability];
                    }
                    break;
                }

                result = Math.Ceiling((basic[0] + (level - 1) * basic[1]) * type_ratio * ability_value / 100);

                if ((ability != "HP") && (ability != "Armor"))
                {
                    result += Math.Ceiling((grow[1] + (level - 1) * grow[0]) * type_ratio * ability_value * grow_ratio / 100 / 100);
                }

                if ((ability == "FireRate") || (ability == "Accuracy") || (ability == "Evasion"))
                {
                    result += Math.Sign(favor_ratio) * Math.Ceiling(Math.Abs(result * favor_ratio));
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
            }

            return(Convert.ToInt32(result));
        }
예제 #24
0
        private async Task LoadTDollInfo(bool isRefresh = false)
        {
            await Task.Delay(10);

            isDollLoad = true;

            try
            {
                TDollDic_SplitContainer.Panel1.Show();
                TDollDic_TDollInfo_FullImageLoadProcessBar.Visible = true;
                TDollDic_TDollInfo_FullImageLoadProcessBar.Style   = ProgressBarStyle.Marquee;

                if (doll.HasMod)
                {
                    TDollDic_TDollInfo_ModStoryButton.Enabled = true;
                    TDollDic_TDollInfo_ModSkillButton.Enabled = true;
                }
                else
                {
                    TDollDic_TDollInfo_ModStoryButton.Enabled = false;
                    TDollDic_TDollInfo_ModSkillButton.Enabled = false;
                }

                das = new DollAbilitySet(doll.Type);

                if (doll.HasMod)
                {
                    TDollDic_TDollInfo_ModSelector1.Enabled = true;
                    TDollDic_TDollInfo_ModSelector2.Enabled = true;
                    TDollDic_TDollInfo_ModSelector3.Enabled = true;
                }
                else
                {
                    TDollDic_TDollInfo_ModSelector1.Enabled = false;
                    TDollDic_TDollInfo_ModSelector2.Enabled = false;
                    TDollDic_TDollInfo_ModSelector3.Enabled = false;
                }

                TDollDic_TDollInfo_ModSelector0.Checked = true;

                TDollDic_TDollInfo_DicNumber.Text        = $"No. {doll.DicNumber}";
                TDollDic_TDollInfo_Name.Text             = doll.Name;
                TDollDic_TDollInfo_CodeName.Text         = doll.CodeName;
                TDollDic_TDollInfo_ProductTimeLabel.Text =
                    $"{(doll.GetProductTimeToString == "None" ? "제조 불가" : doll.GetProductTimeToString)}";
                TDollDic_TDollInfo_IllustratorInfo.Text = doll.Illustrator;
                TDollDic_TDollInfo_NickNameInfo.Text    = doll.NickName;

                await LoadDollImages(isRefresh);

                Bitmap gBitmap;

                switch (doll.Grade)
                {
                default:
                case 0:
                    gBitmap = Resources.PSGrade_0;
                    break;

                case 2:
                    gBitmap = Resources.PSGrade_2;
                    break;

                case 3:
                    gBitmap = Resources.PSGrade_3;
                    break;

                case 4:
                    gBitmap = Resources.PSGrade_4;
                    break;

                case 5:
                    gBitmap = Resources.PSGrade_5;
                    break;
                }

                TDollDic_TDollInfo_FullImageView.BackgroundImage = gBitmap;

                switch (doll.Type)
                {
                default:
                case "HG":
                    TDollDic_TDollInfo_TypeIconImage.Image = Resources.HG;
                    break;

                case "SMG":
                    TDollDic_TDollInfo_TypeIconImage.Image = Resources.SMG;
                    break;

                case "AR":
                    TDollDic_TDollInfo_TypeIconImage.Image = Resources.AR;
                    break;

                case "RF":
                    TDollDic_TDollInfo_TypeIconImage.Image = Resources.RF;
                    break;

                case "MG":
                    TDollDic_TDollInfo_TypeIconImage.Image = Resources.MG;
                    break;

                case "SG":
                    TDollDic_TDollInfo_TypeIconImage.Image = Resources.SG;
                    break;
                }

                LoadFormationBuff();

                // 능력치 정보 불러오기도 동시 실행됨
                abilityLv = 1;

                if (TDollDic_TDollInfo_AbilityFavorSelector.SelectedIndex != 1)
                {
                    TDollDic_TDollInfo_AbilityFavorSelector.SelectedIndex = 1;
                }
                else
                {
                    _ = LoadAbility();
                }

                if (doll.HasVoice)
                {
                    TDollDic_TDollInfo_VoiceGroup.Visible = true;
                    LoadCostumeVoiceList();
                }
                else
                {
                    TDollDic_TDollInfo_VoiceGroup.Visible = false;
                }

                TDollDic_TDollInfo_GainTooltip.SetToolTip(TDollDic_TDollInfo_FullImageView, doll.ProductDialog);
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("인형 불러오기 오류", "인형 정보를 불러오는 중 오류가 발생했습니다.");
            }
            finally
            {
                isDollLoad = false;
            }
        }
예제 #25
0
        private void LoadFormationBuff()
        {
            int[]    formation;
            string[] type;
            string[] mag;
            TableLayoutControlCollection collection;
            StringBuilder sb;

            try
            {
                if (modIndex == 0)
                {
                    formation = doll.BuffFormation;
                    type      = doll.BuffType;
                    mag       = doll.BuffInfo;
                }
                else
                {
                    formation = doll.ModBuffFormation;
                    type      = doll.BuffType;
                    mag       = doll.ModBuffInfo;
                }


                // 버프 진형 채우기
                collection = TDollDic_TDollInfo_FormationBuffTable.Controls;

                for (int i = 0; i < formation.Length; ++i)
                {
                    Color c;

                    switch (formation[i])
                    {
                    default:
                    case 0:
                        c = Color.LightGray;
                        break;

                    case 1:
                        c = Color.Green;
                        break;

                    case 2:
                        c = Color.Black;
                        break;
                    }

                    collection[i].BackColor = c;
                }


                // 버프 타입
                sb = new StringBuilder();

                for (int i = 0; i < type.Length; ++i)
                {
                    sb.Append(type[i]);
                    sb.Append(" ");
                }

                TDollDic_TDollInfo_FormationBuffType.Text = $"{sb.ToString()} 적용";


                // 버프 효과 및 효과치
                PictureBox[] buffTypeIcons =
                {
                    TDollDic_TDollInfo_FormationBuffIcon1,
                    TDollDic_TDollInfo_FormationBuffIcon2
                };
                Label[] buffMags =
                {
                    TDollDic_TDollInfo_FormationBuffMag1,
                    TDollDic_TDollInfo_FormationBuffMag2
                };
                string[] buffType = mag[0].Split(',');

                for (int i = 0; i < buffTypeIcons.Length; ++i)
                {
                    buffTypeIcons[i].Image = null;
                    buffMags[i].Text       = "";
                }

                for (int i = 0; i < buffType.Length; ++i)
                {
                    Bitmap btBitmap;

                    switch (buffType[i])
                    {
                    case "AC":
                        btBitmap = Resources.AC_Icon;
                        break;

                    case "AM":
                        btBitmap = Resources.AM_Icon;
                        break;

                    case "AS":
                        btBitmap = Resources.AS_Icon;
                        break;

                    case "CR":
                        btBitmap = Resources.CR_Icon;
                        break;

                    case "EV":
                        btBitmap = Resources.EV_Icon;
                        break;

                    case "FR":
                        btBitmap = Resources.FR_Icon;
                        break;

                    case "CL":
                        btBitmap = Resources.CL_Icon;
                        break;

                    default:
                        btBitmap = null;
                        break;
                    }

                    buffTypeIcons[i].Image = btBitmap;

                    sb.Clear();

                    for (int k = 1; k < mag.Length; ++k)
                    {
                        string[] m = mag[k].Split(',');

                        sb.Append(m[i]);
                        sb.Append("%");

                        if (k < mag.Length - 1)
                        {
                            sb.Append("/");
                        }
                    }

                    buffMags[i].Text = sb.ToString();
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("인형 불러오기 오류", "진형 버프를 불러오는 동안 오류가 발생했습니다.");
            }
        }
예제 #26
0
        private async Task LoadAbility()
        {
            await Task.Delay(10);

            Label[] abilityMags =
            {
                TDollDic_TDollInfo_AbilityHPMag,
                TDollDic_TDollInfo_AbilityFRMag,
                TDollDic_TDollInfo_AbilityEVMag,
                TDollDic_TDollInfo_AbilityACMag,
                TDollDic_TDollInfo_AbilityASMag
            };

            try
            {
                string[] abilities = { "HP", "FireRate", "Evasion", "Accuracy", "AttackSpeed" };


                string[] grow_ratio = doll.Abilities["Grow"].Split(';');

                for (int i = 0; i < abilityMags.Length; ++i)
                {
                    string[] basic_ratio = doll.Abilities[abilities[i]].Split(';');

                    int value = 0;

                    switch (modIndex)
                    {
                    case 0:
                        value = das.CalcAbility(abilities[i], int.Parse(basic_ratio[0]), int.Parse(grow_ratio[0]), abilityLv, abilityFavor, false);
                        break;

                    case 1:
                    case 2:
                    case 3:
                        value = das.CalcAbility(abilities[i], int.Parse(basic_ratio[1]), int.Parse(grow_ratio[1]), abilityLv, abilityFavor, true);
                        break;
                    }

                    abilityValues[i] = value;

                    abilityMags[i].Text = $"{value} ({doll.AbilityGrade[i]})";
                }

                if ((doll.Type == "MG") || (doll.Type == "SG"))
                {
                    TDollDic_TDollInfo_AbilityBulletPanel.Visible = true;
                    TDollDic_TDollInfo_AbilityReloadPanel.Visible = true;

                    double ReloadTime = CalcReloadTime(doll, doll.Type, abilityValues[4]);
                    int    Bullet     = 0;

                    if (doll.HasMod == false)
                    {
                        Bullet = int.Parse(doll.Abilities["Bullet"]);
                    }
                    else
                    {
                        Bullet = int.Parse(doll.Abilities["Bullet"].Split(';')[modIndex]);
                    }

                    TDollDic_TDollInfo_AbilityBulletMag.Text = Bullet.ToString();
                    TDollDic_TDollInfo_AbilityReloadMag.Text = $"{ReloadTime} 초";
                }
                else
                {
                    TDollDic_TDollInfo_AbilityBulletPanel.Visible = false;
                    TDollDic_TDollInfo_AbilityReloadPanel.Visible = false;
                }

                if (doll.Type == "SG")
                {
                    TDollDic_TDollInfo_AbilityAMPanel.Visible = true;

                    string[] basic_ratio = doll.Abilities["Armor"].Split(';');
                    int      value       = 0;

                    switch (modIndex)
                    {
                    case 0:
                        value = das.CalcAbility("Armor", int.Parse(basic_ratio[0]), int.Parse(grow_ratio[0]), abilityLv, abilityFavor, false);
                        break;

                    case 1:
                    case 2:
                    case 3:
                        value = das.CalcAbility("Armor", int.Parse(basic_ratio[1]), int.Parse(grow_ratio[1]), abilityLv, abilityFavor, true);
                        break;
                    }

                    abilityValues[5] = value;
                    TDollDic_TDollInfo_AbilityAMMag.Text = $"{value} ({doll.AbilityGrade[6]})";
                }
                else
                {
                    abilityValues[5] = 0;
                    TDollDic_TDollInfo_AbilityAMPanel.Visible = false;
                }
            }
            catch (Exception ex)
            {
                ETC.LogError(ex);
                ETC.ShowErrorMessage("인형 불러오기 오류", "능력치 정보를 불러오는 동안 오류가 발생했습니다.");
            }
        }