├── DodocoTales.StarRail
├── icon.ico
├── Gui
│ ├── Resources
│ │ ├── Digiface_Regular.ttf
│ │ ├── Segment7Standard.otf
│ │ ├── DDCVResources.xaml
│ │ ├── DDCVConverters.xaml
│ │ └── Styles
│ │ │ └── DDCVListViewItemStyle.xaml
│ ├── Enums
│ │ ├── DDCVHintBannerStatus.cs
│ │ ├── DDCVGreaterRoundType.cs
│ │ ├── DDCVUnitIndicatorType.cs
│ │ └── DDCVSupportedGachaLogFormat.cs
│ ├── Views
│ │ ├── Screens
│ │ │ ├── DDCVSwapableScreen.cs
│ │ │ ├── DDCVGachaPredictionScreen.xaml
│ │ │ ├── DDCVDependenciesDownloadScreen.xaml.cs
│ │ │ ├── DDCVSettingsWindowChangeLogScreen.xaml.cs
│ │ │ ├── DDCVHomeScreen.xaml.cs
│ │ │ ├── DDCVBannerViewScreen.xaml.cs
│ │ │ ├── DDCVSettingsWindowAboutScreen.xaml.cs
│ │ │ ├── DDCVHomeScreen.xaml
│ │ │ ├── DDCVGachaPredictionScreen.xaml.cs
│ │ │ ├── DDCVSettingsWindowChangeLogScreen.xaml
│ │ │ ├── DDCVVersionViewScreen.xaml.cs
│ │ │ ├── DDCVSettingsWindowUsersScreen.xaml.cs
│ │ │ ├── DDCVDependenciesDownloadScreen.xaml
│ │ │ └── DDCVSettingsWindowAboutScreen.xaml
│ │ ├── Cards
│ │ │ ├── DDCVHomeSceneCharEventCard.xaml.cs
│ │ │ ├── DDCVHomeSceneLCEventCard.xaml.cs
│ │ │ └── DDCVHomeScenePermanentCard.xaml.cs
│ │ ├── Dialogs
│ │ │ ├── DDCVExportDialog.xaml.cs
│ │ │ ├── DDCVImportDialog.xaml.cs
│ │ │ ├── DDCVGameClientManagerWindowEditDialog.xaml.cs
│ │ │ └── DDCVGameClientManagerWindowEditDialog.xaml
│ │ └── Windows
│ │ │ ├── DDCVSettingsWindow.xaml.cs
│ │ │ ├── DDCVSettingsWindow.xaml
│ │ │ └── DDCVGameClientManagerWindow.xaml.cs
│ ├── Converters
│ │ ├── DDCVVisibleByNotNullConverter.cs
│ │ ├── DDCVVisibleByBooleanConverter.cs
│ │ ├── DDCVProgressConverter.cs
│ │ ├── DDCVClientTypeConverter.cs
│ │ ├── DDCVPoolTypeConverter.cs
│ │ ├── DDCVVisibleByAvailableUIDConverter.cs
│ │ ├── DDCVTimeProgressConverter.cs
│ │ ├── DDCVPercentageConverter.cs
│ │ ├── DDCVUidNormalConverter.cs
│ │ ├── DDCVTimeZoneConverter.cs
│ │ ├── DDCVUidAnonymousConverter.cs
│ │ ├── DDCVSegmentPercentageConverter.cs
│ │ └── DDCVItemNameColorConverter.cs
│ ├── ViewModels
│ │ ├── Windows
│ │ │ ├── DDCVGameClientManagerWindowVM.cs
│ │ │ └── DDCVSettingsWindowVM.cs
│ │ ├── Screens
│ │ │ ├── DDCVSettingsWindowChangeLogScreenVM.cs
│ │ │ ├── DDCVSettingsWindowAboutScreenVM.cs
│ │ │ ├── DDCVSettingsWindowUsersScreenVM.cs
│ │ │ ├── DDCVDependenciesDownloadScreenVM.cs
│ │ │ └── DDCVVersionViewScreenVM.cs
│ │ ├── Cards
│ │ │ ├── DDCVHomeSceneLCEventCardVM.cs
│ │ │ ├── DDCVHomeSceneCharEventCardVM.cs
│ │ │ └── DDCVHomeScenePermanentCardVM.cs
│ │ └── Dialogs
│ │ │ └── DDCVGameClientManagerWindowEditDialogVM.cs
│ ├── Models
│ │ ├── DDCVUserlogItem.cs
│ │ ├── DDCVMainPanelItemModel.cs
│ │ ├── DDCVRoundItemModel.cs
│ │ ├── DDCVVersionItemModel.cs
│ │ ├── DDCVBannerItemModel.cs
│ │ └── DDCVUnitIndicatorModel.cs
│ └── DDCV.cs
├── Properties
│ ├── Settings.settings
│ ├── Settings.Designer.cs
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ └── Resources.resx
├── Library
│ ├── Enums
│ │ ├── DDCLUnitMetadataSource.cs
│ │ ├── DDCLGameClientType.cs
│ │ └── DDCLActivateStatus.cs
│ ├── UnitLibrary
│ │ ├── Models
│ │ │ └── DDCLUnitItem.cs
│ │ └── DDCLUnitLibrary.cs
│ ├── BannerLibrary
│ │ └── Models
│ │ │ ├── DDCLVersionInfo.cs
│ │ │ ├── DDCLBannerLibModel.cs
│ │ │ └── DDCLBannerInfo.cs
│ ├── CurrentUser
│ │ └── Models
│ │ │ ├── DDCLRoundLogItem.cs
│ │ │ └── DDCLBannerLogItem.cs
│ ├── Settings
│ │ ├── Models
│ │ │ └── DDCLSettingsInfo.cs
│ │ └── DDCLSettingsLibrary.cs
│ ├── GameClient
│ │ ├── Models
│ │ │ └── DDCLGameClientItem.cs
│ │ └── DDCLGameClientLibrary.cs
│ ├── UserDataLibrary
│ │ └── Models
│ │ │ ├── DDCLUserGachaLog.cs
│ │ │ └── DDCLGachaLogItem.cs
│ ├── MetadataLibrary
│ │ └── Models
│ │ │ └── DDCLMetadataVersion.cs
│ └── TrustedExporters
│ │ ├── Models
│ │ └── DDCLTrustedExporters.cs
│ │ └── DDCLTrustedExportersLibrary.cs
├── Common
│ ├── Enums
│ │ ├── DDCCUnitType.cs
│ │ └── DDCCPoolType.cs
│ ├── Models
│ │ └── DDCCPredictTargetItem.cs
│ ├── Signals
│ │ ├── DDCS_Core.cs
│ │ ├── DDCS_Loader.cs
│ │ └── DDCS_Lib.cs
│ └── Services
│ │ ├── DDCCChanceProvider.cs
│ │ └── DDCCGachaPredictor.cs
├── App.xaml.cs
├── Loader
│ ├── ItemMetadataLoaders
│ │ └── HakushLoader
│ │ │ ├── Models
│ │ │ └── DDCGHakushMetadataItem.cs
│ │ │ ├── Enums
│ │ │ └── DDCGHakushMetadataItemTypeRarity.cs
│ │ │ └── DDCGItemMetadataLoader.cs
│ ├── Models
│ │ ├── DDCGDownloadTask.cs
│ │ ├── DDCGGachaLogResponse.cs
│ │ ├── DDCGGachaLogResponseItem.cs
│ │ ├── DDCGUniversalFormatLog.cs
│ │ ├── DDCGUniversalFormatLogItem.cs
│ │ ├── DDCGUniversalFormatLogSRSection.cs
│ │ └── DDCGUniversalFormatLogInfo.cs
│ ├── DDCG.cs
│ ├── DDCGItemMetadataLoader.cs
│ ├── DDCGProxyLoader.cs
│ └── DDCGUniversalFormatImporter.cs
├── App.config
├── App.xaml
└── packages.config
├── Updater
├── App.config
├── Properties
│ └── AssemblyInfo.cs
├── Program.cs
└── Updater.csproj
├── README.md
├── CHANGELOG.md
├── LICENSE
├── StarRailWarpObserve.sln
├── .gitattributes
└── .gitignore
/DodocoTales.StarRail/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TremblingMoeNew/StarRailWarpObserve/HEAD/DodocoTales.StarRail/icon.ico
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Resources/Digiface_Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TremblingMoeNew/StarRailWarpObserve/HEAD/DodocoTales.StarRail/Gui/Resources/Digiface_Regular.ttf
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Resources/Segment7Standard.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TremblingMoeNew/StarRailWarpObserve/HEAD/DodocoTales.StarRail/Gui/Resources/Segment7Standard.otf
--------------------------------------------------------------------------------
/Updater/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/Enums/DDCLUnitMetadataSource.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Library.Enums
8 | {
9 | public enum DDCLUnitMetadataSource
10 | {
11 | None,
12 | Hakush,
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Common/Enums/DDCCUnitType.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Common.Enums
8 | {
9 | public enum DDCCUnitType
10 | {
11 | Unknown,
12 | Character,
13 | LightCone
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/Enums/DDCLGameClientType.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Library.Enums
8 | {
9 | public enum DDCLGameClientType
10 | {
11 | Unknown,
12 | CN,
13 | Global
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/Enums/DDCLActivateStatus.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Library.Enums
8 | {
9 | public enum DDCLActivateStatus
10 | {
11 | Post,
12 | Activating,
13 | Incoming
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Enums/DDCVHintBannerStatus.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Gui.Enums
8 | {
9 | public enum DDCVHintBannerStatus
10 | {
11 | NoHint,
12 | Updating,
13 | FetchingGachaLog,
14 | Error
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Configuration;
4 | using System.Data;
5 | using System.Linq;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 |
9 | namespace DodocoTales
10 | {
11 | ///
12 | /// App.xaml 的交互逻辑
13 | ///
14 | public partial class App : Application
15 | {
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVSwapableScreen.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows.Controls;
7 |
8 | namespace DodocoTales.SR.Gui.Views.Screens
9 | {
10 | public class DDCVSwapableScreen : UserControl
11 | {
12 | public virtual void Refresh() { }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Enums/DDCVGreaterRoundType.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Gui.Enums
8 | {
9 | public enum DDCVGreaterRoundType
10 | {
11 | Permanent = 90,
12 | CharacterEvent = 180,
13 | LCEvent = 160,
14 | Beginner = 50,
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Common/Enums/DDCCPoolType.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Common.Enums
8 | {
9 | public enum DDCCPoolType
10 | {
11 | Null = 0,
12 | Permanent = 1,
13 | Beginner = 2,
14 | CharacterEvent = 11,
15 | LCEvent = 12,
16 |
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Resources/DDCVResources.xaml:
--------------------------------------------------------------------------------
1 |
3 | ./Digiface_Regular.ttf #Digiface
4 | ./Segment7Standard.otf #Segment7 Standard
5 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Common/Models/DDCCPredictTargetItem.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Common.Enums;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace DodocoTales.SR.Common.Models
9 | {
10 | public class DDCCPredictTargetItem
11 | {
12 | public DDCCPoolType PoolType { get; set; }
13 | public int PreviousCount { get; set; }
14 | public bool IsPreviousPermanant { get; set; }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Enums/DDCVUnitIndicatorType.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Gui.Enums
8 | {
9 | public enum DDCVUnitIndicatorType
10 | {
11 | Default,
12 | Rank3,
13 | Rank4Up,
14 | Rank4PermanentChar,
15 | Rank4PermanentLC,
16 | Rank5Up,
17 | Rank5PermanentChar,
18 | Rank5PermanentLC
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/UnitLibrary/Models/DDCLUnitItem.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Common.Enums;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace DodocoTales.SR.Library.UnitLibrary.Models
9 | {
10 | public class DDCLUnitItem
11 | {
12 | public string ItemID { get; set; }
13 | public string Name { get; set; }
14 | public ulong Rank { get; set; }
15 | public DDCCUnitType UnitType { get; set; }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Loader/ItemMetadataLoaders/HakushLoader/Models/DDCGHakushMetadataItem.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Loader.ItemMetadataLoaders.HakushLoader.Enums;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace DodocoTales.SR.Loader.ItemMetadataLoaders.HakushLoader.Models
9 | {
10 | internal class DDCGHakushMetadataItem
11 | {
12 | public DDCGHakushMetadataItemTypeRarity rank { get; set; }
13 | public string cn { get; set; }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Enums/DDCVSupportedGachaLogFormat.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Gui.Enums
8 | {
9 | public enum DDCVSupportedGachaLogFormat
10 | {
11 | StarwoInternalFormat = 0,
12 | StarRailGachaLogFormat = 100,
13 | //StarRailGachaLogFormatAnonymous = 101,
14 | //StarwoWorkbookExportFormat = 200,
15 | NewUniversalGachaLogFormat = 300,
16 | DualFormat_NewUIGF_SRGF = 301,
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/BannerLibrary/Models/DDCLVersionInfo.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Library.BannerLibrary.Models
8 | {
9 | public class DDCLVersionInfo
10 | {
11 | public ulong ID { get; set; }
12 | public string Version { get; set; }
13 | public string Name { get; set; }
14 | public DateTime BeginTime { get; set; }
15 | public DateTime EndTime { get; set; }
16 | public List Banners { get; set; }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Loader/ItemMetadataLoaders/HakushLoader/Enums/DDCGHakushMetadataItemTypeRarity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Loader.ItemMetadataLoaders.HakushLoader.Enums
8 | {
9 | internal enum DDCGHakushMetadataItemTypeRarity
10 | {
11 | Unknown,
12 |
13 | CombatPowerAvatarRarityType4,
14 | CombatPowerAvatarRarityType5,
15 |
16 | CombatPowerLightconeRarity3,
17 | CombatPowerLightconeRarity4,
18 | CombatPowerLightconeRarity5,
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/CurrentUser/Models/DDCLRoundLogItem.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Common.Enums;
2 | using DodocoTales.SR.Library.UserDataLibrary.Models;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 |
9 | namespace DodocoTales.SR.Library.CurrentUser.Models
10 | {
11 | public class DDCLRoundLogItem
12 | {
13 | public ulong VersionID { get; set; }
14 | public ulong BannerInternalID { get; set; }
15 | public DDCCPoolType CategorizedGachaType { get; set; }
16 | public List Logs { get; set; }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/Settings/Models/DDCLSettingsInfo.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Library.Enums;
2 | using Newtonsoft.Json;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.ComponentModel;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 |
10 | namespace DodocoTales.SR.Library.Settings.Models
11 | {
12 | public class DDCLSettingsInfo
13 | {
14 | public long LastUserUID { get; set; }
15 |
16 | [DefaultValue(DDCLUnitMetadataSource.Hakush)]
17 | [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
18 | public DDCLUnitMetadataSource MetadataSource { get; set; } = DDCLUnitMetadataSource.Hakush;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/BannerLibrary/Models/DDCLBannerLibModel.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace DodocoTales.SR.Library.BannerLibrary.Models
9 | {
10 | public class DDCLBannerLibModel
11 | {
12 | [JsonProperty(PropertyName = "Beginner")]
13 | public List BeginnerPools { get; set; }
14 | [JsonProperty(PropertyName = "Permanent")]
15 | public List PermanentPools { get; set; }
16 |
17 | [JsonProperty(PropertyName = "Event")]
18 | public List EventPools { get; set; }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Loader/Models/DDCGDownloadTask.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Loader.Models
8 | {
9 | public enum DDCGDownloadTaskType
10 | {
11 | ClientUpdate,
12 | DependencyUpdate
13 | }
14 |
15 | public class DDCGDownloadTask
16 | {
17 | public DDCGDownloadTaskType TaskType { get; set; }
18 | public string RemoteFileName { get; set; }
19 | public string LocalFileName { get; set; }
20 | public long? FileSize { get; set; }
21 | public long? DownloadedSize { get; set; }
22 | public double EstSpeed { get; set; }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/GameClient/Models/DDCLGameClientItem.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Library.Enums;
2 | using Newtonsoft.Json;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.ComponentModel;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 |
10 | namespace DodocoTales.SR.Library.GameClient.Models
11 | {
12 | public class DDCLGameClientItem
13 | {
14 | public string Name { get; set; }
15 | public string Path { get; set; }
16 | public DDCLGameClientType ClientType { get; set; }
17 |
18 | [DefaultValue(false)]
19 | [JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
20 | public bool IsDefault { get; set; }
21 | }
22 | }
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/CurrentUser/Models/DDCLBannerLogItem.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Common.Enums;
2 | using DodocoTales.SR.Library.UserDataLibrary.Models;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 |
9 | namespace DodocoTales.SR.Library.CurrentUser.Models
10 | {
11 | public class DDCLBannerLogItem
12 | {
13 | public ulong BannerInternalID { get; set; }
14 |
15 | public ulong VersionID { get; set; }
16 |
17 | public DDCCPoolType CategorizedGachaType { get; set; }
18 |
19 | public List GreaterRounds { get; set; }
20 | public List Logs { get; set; }
21 |
22 |
23 |
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Loader/Models/DDCGGachaLogResponse.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Loader.Models
8 | {
9 | public class DDCGGachaLogResponse
10 | {
11 | public int retcode { get; set; }
12 | public string message { get; set; }
13 | public DDCGGachaLogResponseData data { get; set; }
14 | }
15 | public class DDCGGachaLogResponseData
16 | {
17 | public int page { get; set; }
18 | public int size { get; set; }
19 | public string region { get; set; }
20 | public int region_time_zone { get; set; }
21 | public List list { get; set; }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/UserDataLibrary/Models/DDCLUserGachaLog.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Library.Enums;
2 | using Newtonsoft.Json;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 |
9 | namespace DodocoTales.SR.Library.UserDataLibrary.Models
10 | {
11 | public class DDCLUserGachaLog
12 | {
13 | public long UID { get; set; }
14 | public int TimeZone { get; set; }
15 |
16 | public DDCLGameClientType ClientType { get; set; }
17 |
18 | public List LogsV1 { get; set; }
19 |
20 | [JsonIgnore]
21 | public List Logs
22 | {
23 | get { return LogsV1; }
24 | set { LogsV1 = value; }
25 | }
26 |
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/MetadataLibrary/Models/DDCLMetadataVersion.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.ComponentModel;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 |
9 | namespace DodocoTales.SR.Library.MetadataLibrary.Models
10 | {
11 | public class DDCLMetadataVersion
12 | {
13 | public string ClientVersion { get; set; }
14 | public string BannerLibraryVersion { get; set; }
15 | [JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
16 | public string ExportersLibraryVersion { get; set; }
17 |
18 | [JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
19 | public DateTime UnitLibLastUpdateAt { get; set; }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Loader/Models/DDCGGachaLogResponseItem.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Loader.Models
8 | {
9 | public class DDCGGachaLogResponseItem
10 | {
11 | public long uid { get; set; }
12 | public string gacha_id { get; set; }
13 | public ulong gacha_type { get; set; }
14 | public string item_id { get; set; }
15 | public string count { get; set; }
16 | public DateTime time { get; set; }
17 | public string name { get; set; }
18 | public string lang { get; set; }
19 | public string item_type { get; set; }
20 | public ulong rank_type { get; set; }
21 | public ulong id { get; set; }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVVisibleByNotNullConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows.Data;
8 | using System.Windows;
9 |
10 | namespace DodocoTales.SR.Gui.Converters
11 | {
12 | public class DDCVVisibleByNotNullConverter : IValueConverter
13 | {
14 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
15 | {
16 | return (value != null) ? Visibility.Visible : Visibility.Collapsed;
17 | }
18 |
19 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
20 | {
21 | throw new NotImplementedException();
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Loader/Models/DDCGUniversalFormatLog.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace DodocoTales.SR.Loader.Models
9 | {
10 | public class DDCGUniversalFormatLog
11 | {
12 | [JsonProperty(PropertyName = "info")]
13 | public DDCGUniversalFormatLogInfo Info { get; set; }
14 |
15 | [JsonProperty(PropertyName = "list", DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
16 | public List List { get; set; }
17 |
18 | [JsonProperty(PropertyName = "hkrpg", DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
19 | public List StarRailSections { get; set; }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVVisibleByBooleanConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Data;
9 |
10 | namespace DodocoTales.SR.Gui.Converters
11 | {
12 | public class DDCVVisibleByBooleanConverter : IValueConverter
13 | {
14 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
15 | {
16 | return System.Convert.ToBoolean(value) ? Visibility.Visible : Visibility.Collapsed;
17 | }
18 |
19 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
20 | {
21 | throw new NotImplementedException();
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVGachaPredictionScreen.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVDependenciesDownloadScreen.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Navigation;
14 | using System.Windows.Shapes;
15 |
16 | namespace DodocoTales.SR.Gui.Views.Screens
17 | {
18 | ///
19 | /// DDCVDependenciesDownloadScreen.xaml 的交互逻辑
20 | ///
21 | public partial class DDCVDependenciesDownloadScreen : DDCVSwapableScreen
22 | {
23 | public DDCVDependenciesDownloadScreen()
24 | {
25 | InitializeComponent();
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Loader/Models/DDCGUniversalFormatLogItem.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace DodocoTales.SR.Loader.Models
9 | {
10 | public class DDCGUniversalFormatLogItem
11 | {
12 | public string gacha_id { get; set; }
13 | public string gacha_type { get; set; }
14 | public string item_id { get; set; }
15 | public string count { get; set; }
16 | public string time { get; set; }
17 | public string name { get; set; }
18 | public string item_type { get; set; }
19 | public string rank_type { get; set; }
20 | public string id { get; set; }
21 | [JsonProperty(DefaultValueHandling=DefaultValueHandling.IgnoreAndPopulate)]
22 | public string __hash { get; set; }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVProgressConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows.Data;
8 |
9 | namespace DodocoTales.SR.Gui.Converters
10 | {
11 | public class DDCVProgressConverter : IMultiValueConverter
12 | {
13 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
14 | {
15 | var now = System.Convert.ToDouble(values[0]);
16 | var max = System.Convert.ToDouble(values[1]);
17 | return max <= 0 ? 0: now * 100.0 / max;
18 |
19 | }
20 |
21 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
22 | {
23 | throw new NotImplementedException();
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/DodocoTales.StarRail/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVClientTypeConverter.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Library;
2 | using DodocoTales.SR.Library.Enums;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Globalization;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Data;
10 |
11 | namespace DodocoTales.SR.Gui.Converters
12 | {
13 | public class DDCVClientTypeConverter : IValueConverter
14 | {
15 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
16 | {
17 | DDCLGameClientType type = (DDCLGameClientType)value;
18 | return DDCL.GetGameClientTypeName(type);
19 |
20 | }
21 |
22 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
23 | {
24 | throw new NotImplementedException();
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVPoolTypeConverter.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Common.Enums;
2 | using DodocoTales.SR.Library;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Globalization;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows;
10 | using System.Windows.Data;
11 |
12 | namespace DodocoTales.SR.Gui.Converters
13 | {
14 | public class DDCVPoolTypeConverter : IValueConverter
15 | {
16 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
17 | {
18 | DDCCPoolType type = (DDCCPoolType)value;
19 | return DDCL.GetPoolTypeName(type);
20 |
21 | }
22 |
23 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
24 | {
25 | throw new NotImplementedException();
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Loader/DDCG.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DodocoTales.SR.Loader
8 | {
9 | public static partial class DDCG
10 | {
11 | public static DDCGGameClientLoader GameClientLoader = new DDCGGameClientLoader();
12 | public static DDCGProxyLoader ProxyLoader = new DDCGProxyLoader();
13 |
14 | public static DDCGWebGachaLogLoader WebLogLoader = new DDCGWebGachaLogLoader();
15 |
16 | public static DDCGUpdateLoader UpdateLoader = new DDCGUpdateLoader();
17 |
18 | public static DDCGUniversalFormatImporter UFImporter = new DDCGUniversalFormatImporter();
19 | public static DDCGUniversalFormatExporter UFExporter = new DDCGUniversalFormatExporter();
20 |
21 | public static DDCGItemMetadataLoader UnitLibLoader = new DDCGItemMetadataLoader();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/ViewModels/Windows/DDCVGameClientManagerWindowVM.cs:
--------------------------------------------------------------------------------
1 | using CommunityToolkit.Mvvm.ComponentModel;
2 | using DodocoTales.SR.Library;
3 | using DodocoTales.SR.Library.GameClient.Models;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Collections.ObjectModel;
7 | using System.Linq;
8 | using System.Text;
9 | using System.Threading.Tasks;
10 |
11 | namespace DodocoTales.SR.Gui.ViewModels.Windows
12 | {
13 | public class DDCVGameClientManagerWindowVM : ObservableObject
14 | {
15 | private ObservableCollection clients;
16 | public ObservableCollection Clients
17 | {
18 | get => clients;
19 | set => SetProperty(ref clients, value);
20 | }
21 | public void ReloadData()
22 | {
23 | Clients = new ObservableCollection(DDCL.GameClientLib.GetClients());
24 | }
25 |
26 |
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVSettingsWindowChangeLogScreen.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Navigation;
14 | using System.Windows.Shapes;
15 |
16 | namespace DodocoTales.SR.Gui.Views.Screens
17 | {
18 | ///
19 | /// DDCVSettingsWindowChangeLogScreen.xaml 的交互逻辑
20 | ///
21 | public partial class DDCVSettingsWindowChangeLogScreen : DDCVSwapableScreen
22 | {
23 | public DDCVSettingsWindowChangeLogScreen()
24 | {
25 | InitializeComponent();
26 | }
27 | public override void Refresh()
28 | {
29 | VM.Refresh();
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVHomeScreen.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Navigation;
14 | using System.Windows.Shapes;
15 |
16 | namespace DodocoTales.SR.Gui.Views.Screens
17 | {
18 | ///
19 | /// DDCVHomeScreen.xaml 的交互逻辑
20 | ///
21 | public partial class DDCVHomeScreen : DDCVSwapableScreen
22 | {
23 | public DDCVHomeScreen()
24 | {
25 | InitializeComponent();
26 | }
27 |
28 | public override void Refresh()
29 | {
30 | CharEvent.Refresh();
31 | LCEvent.Refresh();
32 | Permanant.Refresh();
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 星穹铁道跃迁观测工具
2 |
3 | 星穹铁道跃迁观测工具(Star Rail Warp Observe), 简称Starwo,是一款针对游戏《崩坏:星穹铁道》开发的抽卡历史记录导出与管理工具。
4 |
5 | *本工具为基于为游戏《原神》所设计、但开发暂停的祈愿记录导出工具[“嘟嘟可故事集”重制版本](https://github.com/TremblingMoeNew/DodocoTales)所改造而来的姊妹版本。Codename: DodocoTales.StarRail.*
6 |
7 | 本工具的主要特色为,采用游戏版本-卡池-轮次的三级结构对玩家的跃迁历史记录进行整理与展示,帮助玩家更好的梳理抽取概率提升的五星单位的过程中的抽取情况。同时,仪表盘中也对您的四星与五星单位抽取概率相对于期望值的高低进行了展示。
8 |
9 | 本工具仅支持简体中文语言的界面及跃迁历史记录项。
10 |
11 | ---
12 |
13 | 本工具基于.NET Framework 4.7.2构建,依赖以下项目:
14 |
15 | - [JamesNK/Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
16 | - [Mochengvia/PanuonUI.Silver](https://github.com/Mochengvia/PanuonUI.Silver)
17 | - [beto-rodriguez/LiveCharts2](https://github.com/beto-rodriguez/LiveCharts2)
18 | - [CommunityToolkit/dotnet](https://github.com/CommunityToolkit/dotnet)
19 | - [CommunityToolkit/WindowsCommunityToolkit](https://github.com/CommunityToolkit/WindowsCommunityToolkit)
20 | - [justcoding121/titanium-web-proxy](https://github.com/justcoding121/Titanium-Web-Proxy)
21 |
22 | 本工具为[UIGF组织](https://uigf.org/zh)的成员。
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVVisibleByAvailableUIDConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Data;
9 |
10 | namespace DodocoTales.SR.Gui.Converters
11 | {
12 | public class DDCVVisibleByAvailableUIDConverter : IValueConverter
13 | {
14 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
15 | {
16 | var res = Visibility.Collapsed;
17 | try
18 | {
19 | var uid = System.Convert.ToInt64(value);
20 | if (uid >= 0) res = Visibility.Visible;
21 | }
22 | catch { }
23 | return res;
24 | }
25 |
26 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
27 | {
28 | throw new NotImplementedException();
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVTimeProgressConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows.Data;
8 | using System.Windows;
9 |
10 | namespace DodocoTales.SR.Gui.Converters
11 | {
12 | public class DDCVTimeProgressConverter : IMultiValueConverter
13 | {
14 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
15 | {
16 | var begin = ((DateTimeOffset)values[0]).UtcTicks;
17 | var end = ((DateTimeOffset)values[1]).UtcTicks;
18 | var now = (DateTimeOffset.Now).UtcTicks;
19 | if (now > end || now < begin) return 0.0;
20 | return (now - begin) * 100.0 / (end - begin);
21 |
22 | }
23 |
24 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
25 | {
26 | throw new NotImplementedException();
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVPercentageConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Data;
9 |
10 | namespace DodocoTales.SR.Gui.Converters
11 | {
12 | public class DDCVPercentageConverter : IMultiValueConverter
13 | {
14 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
15 | {
16 | if (values[0] == DependencyProperty.UnsetValue) return DependencyProperty.UnsetValue;
17 | var divident = System.Convert.ToInt32(values[0]);
18 | var divisor = System.Convert.ToInt32(values[1]);
19 | return divisor == 0 ? " — % " : string.Format("{0:P2}", divident * 1.0 / divisor);
20 | }
21 |
22 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
23 | {
24 | throw new NotImplementedException();
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Updater/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的一般信息由以下
6 | // 控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("Updater")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("Updater")]
13 | [assembly: AssemblyCopyright("Copyright © 2023")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 将 ComVisible 设置为 false 会使此程序集中的类型
18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
19 | //请将此类型的 ComVisible 特性设置为 true。
20 | [assembly: ComVisible(false)]
21 |
22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23 | [assembly: Guid("2b10ff4b-41b8-41c4-a5d1-fdea5f52a16d")]
24 |
25 | // 程序集的版本信息由下列四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 生成号
30 | // 修订号
31 | //
32 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
33 | //通过使用 "*",如下所示:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVBannerViewScreen.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Navigation;
14 | using System.Windows.Shapes;
15 |
16 | namespace DodocoTales.SR.Gui.Views.Screens
17 | {
18 | ///
19 | /// DDCVBannerViewScreen.xaml 的交互逻辑
20 | ///
21 | public partial class DDCVBannerViewScreen : DDCVSwapableScreen
22 | {
23 | public DDCVBannerViewScreen()
24 | {
25 | InitializeComponent();
26 | }
27 | public void SetBanner(ulong versionid, ulong bannerinternalid)
28 | {
29 | VM.SetBanner(versionid, bannerinternalid);
30 | }
31 | public override void Refresh()
32 | {
33 | VM.ReloadData();
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace DodocoTales.SR.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.2.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # 更新日志
2 |
3 | ## V1.5.2
4 |
5 | - 支持新版统一可交换抽卡记录格式,版本4.0(UIGF v4.0)所要求的多语言、跨时区导入能力。
6 | - 添加单位元数据,以实现对UIGF v4.0的完全支持。当前仅包括Hakush数据源。
7 |
8 | ## V1.5.1
9 |
10 | - 支持V4.0版本的新版统一可交换抽卡记录格式(UIGF v4.0)文件的导入与导出
11 | - 更新五星概率经验公式
12 | - 修复主界面部分提升显示错误
13 |
14 | ## V1.5.0
15 |
16 | - 重构“首页”界面
17 | - 修复卡池间隔期内轮次进度指示器显示异常的错误
18 |
19 | ## V1.3.0
20 |
21 | - 添加进行中任务提示栏
22 | - 修复了光锥活动跃迁卡池页中抽取状态指示器尺寸异常的错误
23 | - 优化更新逻辑
24 |
25 | ## V1.2.2
26 |
27 | - 优化SRGF导入提示
28 |
29 | ## V1.2.1
30 |
31 | - 修复无法获取1.2以上版本《崩坏:星穹铁道》缓存信息的错误
32 |
33 | ## V1.2.0
34 |
35 | - 添加“设置->用户”页;允许切换用户以及移除用户
36 | - 修复显示尚未开始的卡池的错误
37 | - 为四星、五星单位名称添加自动计算的颜色
38 | - 添加“软保底”机制激活指示器
39 | - 修复左下角刷新按钮于更新跃迁记录功能被锁定时仍可被点击的错误
40 | - 通过左下角刷新按钮进行跃迁记录增量更新时,保持更新选项菜单显示
41 |
42 | ## V1.1.1
43 |
44 | - 添加应用图标
45 | - 添加“设置->更新日志”页;在完成更新后的初次运行时自动弹出“设置->更新日志”页
46 | - 在获取用户跃迁记录过程中保持更新选项菜单显示
47 | - 修正了初次获取跃迁记录的用户在更新选项菜单中被显示错误的客户端与时区的问题
48 | - 调整了SRGF导出文件中`export_timestamp`与`region_time_zone`字段的格式
49 |
50 | ## V1.1.0
51 |
52 | - 添加对国际服客户端的实验性支持(未进行测试)
53 | - 添加对“星穹铁道抽卡记录格式”(SRGF)的导出支持
54 | - 添加对“星穹铁道抽卡记录格式”(SRGF)的导入支持
55 | - 保存并默认选择用户上一次所选的游戏客户端作为缓存模式更新源
56 | - 添加“设置-关于”页
57 |
58 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/ViewModels/Screens/DDCVSettingsWindowChangeLogScreenVM.cs:
--------------------------------------------------------------------------------
1 | using CommunityToolkit.Mvvm.ComponentModel;
2 | using DodocoTales.SR.Loader;
3 | using Panuon.UI.Silver;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 |
10 | namespace DodocoTales.SR.Gui.ViewModels.Screens
11 | {
12 | public class DDCVSettingsWindowChangeLogScreenVM : ObservableObject
13 | {
14 | private string changelog;
15 | public string ChangeLog
16 | {
17 | get => changelog;
18 | set => SetProperty(ref changelog, value);
19 | }
20 |
21 | public async void Refresh()
22 | {
23 | if (DDCG.UpdateLoader.ChangeLog == null)
24 | {
25 | await DDCG.UpdateLoader.LoadChangeLog();
26 | }
27 | if (DDCG.UpdateLoader.ChangeLog == null)
28 | {
29 | Notice.Show("更新日志载入失败。", "错误", MessageBoxIcon.Error);
30 | }
31 | ChangeLog = DDCG.UpdateLoader.ChangeLog;
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVSettingsWindowAboutScreen.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Controls;
9 | using System.Windows.Data;
10 | using System.Windows.Documents;
11 | using System.Windows.Input;
12 | using System.Windows.Media;
13 | using System.Windows.Media.Imaging;
14 | using System.Windows.Navigation;
15 | using System.Windows.Shapes;
16 |
17 | namespace DodocoTales.SR.Gui.Views.Screens
18 | {
19 | ///
20 | /// DDCVSettingsWindowAboutScreen.xaml 的交互逻辑
21 | ///
22 | public partial class DDCVSettingsWindowAboutScreen : DDCVSwapableScreen
23 | {
24 | public DDCVSettingsWindowAboutScreen()
25 | {
26 | InitializeComponent();
27 | }
28 |
29 | private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
30 | {
31 | Process.Start(e.Uri.AbsoluteUri);
32 | e.Handled = true;
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/ViewModels/Screens/DDCVSettingsWindowAboutScreenVM.cs:
--------------------------------------------------------------------------------
1 | using CommunityToolkit.Mvvm.ComponentModel;
2 | using DodocoTales.SR.Library;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 |
9 | namespace DodocoTales.SR.Gui.ViewModels.Screens
10 | {
11 | public class DDCVSettingsWindowAboutScreenVM : ObservableObject
12 | {
13 | private string clientVersion;
14 | public string ClientVersion
15 | {
16 | get => clientVersion;
17 | set => SetProperty(ref clientVersion, value);
18 | }
19 |
20 | private string bannerLibraryVersion;
21 | public string BannerLibraryVersion
22 | {
23 | get => bannerLibraryVersion;
24 | set => SetProperty(ref bannerLibraryVersion, value);
25 | }
26 |
27 | public DDCVSettingsWindowAboutScreenVM()
28 | {
29 | ClientVersion = DDCL.MetaVersionLib.ClientVersion;
30 | BannerLibraryVersion = DDCL.MetaVersionLib.BannerLibraryVersion;
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 TremblingMoeNew
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVUidNormalConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows.Data;
8 |
9 | namespace DodocoTales.SR.Gui.Converters
10 | {
11 | public class DDCVUidNormalConverter : IValueConverter
12 | {
13 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
14 | {
15 | string res = "未登录";
16 | try
17 | {
18 | long val = System.Convert.ToInt64(value);
19 | if (val > 1000000) res = String.Format("{0}", val);
20 | else if (val >= 10000) res = String.Format("{0} (匿名)", val);
21 | else if (val >= 0) res = String.Format("{0} (临时)", val);
22 | }
23 | catch { }
24 | return res;
25 | }
26 |
27 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
28 | {
29 | throw new NotImplementedException();
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVTimeZoneConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Data;
9 |
10 | namespace DodocoTales.SR.Gui.Converters
11 | {
12 | public class DDCVTimeZoneConverter : IValueConverter
13 | {
14 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
15 | {
16 | var timezone = (int)value;
17 | if (timezone == 0) return "UTC";
18 | else if (timezone > 0) return "UTC+" + timezone.ToString();
19 | else return "UTC" + timezone.ToString();
20 | }
21 |
22 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
23 | {
24 | var str = (string)value;
25 | if (str == "UTC") return 0;
26 | else if(str.StartsWith("UTC")) str = str.Substring(3);
27 | if (Int32.TryParse(str, out int res)) return res;
28 | return DependencyProperty.UnsetValue;
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Models/DDCVUserlogItem.cs:
--------------------------------------------------------------------------------
1 | using CommunityToolkit.Mvvm.ComponentModel;
2 | using DodocoTales.SR.Library.Enums;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 |
9 | namespace DodocoTales.SR.Gui.Models
10 | {
11 | public class DDCVUserlogItem : ObservableObject
12 | {
13 | private long uid;
14 | public long UID
15 | {
16 | get => uid;
17 | set => SetProperty(ref uid, value);
18 | }
19 |
20 | private int timezone;
21 | public int TimeZone
22 | {
23 | get => timezone;
24 | set => SetProperty(ref timezone, value);
25 | }
26 |
27 | private DDCLGameClientType clientType;
28 | public DDCLGameClientType ClientType
29 | {
30 | get => clientType;
31 | set => SetProperty(ref clientType, value);
32 | }
33 |
34 | private bool isSelected;
35 | public bool IsSelected
36 | {
37 | get => isSelected;
38 | set => SetProperty(ref isSelected, value);
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVHomeScreen.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVUidAnonymousConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows.Data;
8 |
9 | namespace DodocoTales.SR.Gui.Converters
10 | {
11 | public class DDCVUidAnonymousConverter : IValueConverter
12 | {
13 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
14 | {
15 | string res = "--- 未登录 ---";
16 | try
17 | {
18 | long val = System.Convert.ToInt64(value);
19 | if (val > 1000000) res = String.Format("UID:{0}****{1:D2}", val / 1000000, val % 100);
20 | else if (val >= 10000) res = String.Format("UID:{0} (匿名)", val);
21 | else if (val >= 0) res = String.Format("UID:{0} (临时)", val);
22 | }
23 | catch { }
24 | return res;
25 | }
26 |
27 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
28 | {
29 | throw new NotImplementedException();
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVGachaPredictionScreen.xaml.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Common.Enums;
2 | using DodocoTales.SR.Common.Services;
3 | using Newtonsoft.Json;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.ComponentModel;
7 | using System.Linq;
8 | using System.Text;
9 | using System.Threading.Tasks;
10 | using System.Windows;
11 | using System.Windows.Controls;
12 | using System.Windows.Data;
13 | using System.Windows.Documents;
14 | using System.Windows.Input;
15 | using System.Windows.Media;
16 | using System.Windows.Media.Imaging;
17 | using System.Windows.Navigation;
18 | using System.Windows.Shapes;
19 |
20 | namespace DodocoTales.SR.Gui.Views.Screens
21 | {
22 | ///
23 | /// DDCVGachaPredictionScreen.xaml 的交互逻辑
24 | ///
25 | public partial class DDCVGachaPredictionScreen : DDCVSwapableScreen
26 | {
27 | public DDCVGachaPredictionScreen()
28 | {
29 | InitializeComponent();
30 | }
31 |
32 | private void Button_Click(object sender, RoutedEventArgs e)
33 | {
34 |
35 | }
36 |
37 | public override void Refresh()
38 | {
39 |
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Common/Signals/DDCS_Core.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using DodocoTales.SR.Common.Signals;
7 |
8 | namespace DodocoTales.SR.Common.Signals
9 | {
10 | public delegate void DDCSCommonDelegate();
11 | public delegate void DDCSUidParamDelegate(long uid);
12 | }
13 |
14 | namespace DodocoTales.SR.Common
15 | {
16 | public static partial class DDCS
17 | {
18 | public static void ExecCommonDelegate(DDCSCommonDelegate dele)
19 | {
20 | if (dele != null)
21 | {
22 | foreach (DDCSCommonDelegate method in dele.GetInvocationList())
23 | {
24 | method.BeginInvoke(null, null);
25 | }
26 | }
27 | }
28 | public static void ExecUidParamDelegate(DDCSUidParamDelegate dele, long uid)
29 | {
30 | if (dele != null)
31 | {
32 | foreach (DDCSUidParamDelegate method in dele.GetInvocationList())
33 | {
34 | method.BeginInvoke(uid, null, null);
35 | }
36 | }
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVSettingsWindowChangeLogScreen.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVSegmentPercentageConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows.Data;
8 | using System.Windows;
9 |
10 | namespace DodocoTales.SR.Gui.Converters
11 | {
12 | public class DDCVSegmentPercentageConverter : IMultiValueConverter
13 | {
14 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
15 | {
16 | if (values[0] == DependencyProperty.UnsetValue) return DependencyProperty.UnsetValue;
17 | var divident = System.Convert.ToInt32(values[0]);
18 | var divisor = System.Convert.ToInt32(values[1]);
19 | if (divisor == 0) return "---";
20 | var res = divident * 100.0 / divisor;
21 | if (res >= 100.0) return "100";
22 | else if (res >= 10.0) return string.Format("{0:F1}", res);
23 | else return string.Format("{0:F2}", res);
24 | }
25 |
26 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
27 | {
28 | throw new NotImplementedException();
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVVersionViewScreen.xaml.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Gui.Models;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Controls;
9 | using System.Windows.Data;
10 | using System.Windows.Documents;
11 | using System.Windows.Input;
12 | using System.Windows.Media;
13 | using System.Windows.Media.Imaging;
14 | using System.Windows.Navigation;
15 | using System.Windows.Shapes;
16 |
17 | namespace DodocoTales.SR.Gui.Views.Screens
18 | {
19 | ///
20 | /// DDCVVersionViewScreen.xaml 的交互逻辑
21 | ///
22 | public partial class DDCVVersionViewScreen : DDCVSwapableScreen
23 | {
24 | public DDCVVersionViewScreen()
25 | {
26 | InitializeComponent();
27 | }
28 | public override void Refresh()
29 | {
30 | VM.ReloadData();
31 | }
32 |
33 | private void ListViewItem_MouseDown(object sender, MouseButtonEventArgs e)
34 | {
35 | var model = (sender as Grid).DataContext as DDCVBannerItemModel;
36 | DDCV.CreateBannerViewScreen(model.VersionID, model.BannerInternalID);
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Resources/DDCVConverters.xaml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Converters/DDCVItemNameColorConverter.cs:
--------------------------------------------------------------------------------
1 | using SkiaSharp;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Globalization;
5 | using System.Linq;
6 | using System.Security.Cryptography;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Data;
10 | using System.Windows.Media;
11 |
12 | namespace DodocoTales.SR.Gui.Converters
13 | {
14 | public class DDCVItemNameColorConverter : IValueConverter
15 | {
16 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
17 | {
18 | byte[] bytes = Encoding.UTF8.GetBytes(value.ToString());
19 | var hash = MD5.Create().ComputeHash(bytes);
20 | var h = (float)(hash.Take(2).Average(x => x) / 256 * 360);
21 | var s = (float)(hash.Skip(5).Take(5).Average(x => x) / 256 * 50 + 20);
22 | var l = (float)(hash.Skip(10).Average(x => x) / 256 * 50 + 20);
23 | var c = SKColor.FromHsl(h, s, l);
24 | return new SolidColorBrush(Color.FromRgb(c.Red, c.Green, c.Blue));
25 | }
26 |
27 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
28 | {
29 | throw new NotImplementedException();
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Cards/DDCVHomeSceneCharEventCard.xaml.cs:
--------------------------------------------------------------------------------
1 | using Panuon.UI.Silver;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Controls;
9 | using System.Windows.Data;
10 | using System.Windows.Documents;
11 | using System.Windows.Input;
12 | using System.Windows.Media;
13 | using System.Windows.Media.Imaging;
14 | using System.Windows.Navigation;
15 | using System.Windows.Shapes;
16 |
17 | namespace DodocoTales.SR.Gui.Views.Cards
18 | {
19 | ///
20 | /// DDCVHomeSceneCharEventCard.xaml 的交互逻辑
21 | ///
22 | public partial class DDCVHomeSceneCharEventCard : UserControl
23 | {
24 | public DDCVHomeSceneCharEventCard()
25 | {
26 | InitializeComponent();
27 | }
28 | public void Refresh()
29 | {
30 | VM.ReloadData();
31 | }
32 | private void RadioButton_Checked(object sender, RoutedEventArgs e)
33 | {
34 | var btn = sender as RadioButton;
35 | if (btn != null)
36 | {
37 | var idx = Convert.ToInt32(btn.Tag);
38 | VM.UnitIndicatorCurrentPageIndex = idx;
39 | }
40 | }
41 | }
42 | }
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Cards/DDCVHomeSceneLCEventCard.xaml.cs:
--------------------------------------------------------------------------------
1 | using Panuon.UI.Silver;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Controls;
9 | using System.Windows.Data;
10 | using System.Windows.Documents;
11 | using System.Windows.Input;
12 | using System.Windows.Media;
13 | using System.Windows.Media.Imaging;
14 | using System.Windows.Navigation;
15 | using System.Windows.Shapes;
16 |
17 | namespace DodocoTales.SR.Gui.Views.Cards
18 | {
19 | ///
20 | /// DDCVHomeSceneLCEventCard.xaml 的交互逻辑
21 | ///
22 | public partial class DDCVHomeSceneLCEventCard : UserControl
23 | {
24 | public DDCVHomeSceneLCEventCard()
25 | {
26 | InitializeComponent();
27 | }
28 |
29 |
30 | public void Refresh()
31 | {
32 | VM.ReloadData();
33 | }
34 |
35 | private void RadioButton_Checked(object sender, RoutedEventArgs e)
36 | {
37 | var btn = sender as RadioButton;
38 | if (btn != null)
39 | {
40 | var idx = Convert.ToInt32(btn.Tag);
41 | VM.UnitIndicatorCurrentPageIndex = idx;
42 | }
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Cards/DDCVHomeScenePermanentCard.xaml.cs:
--------------------------------------------------------------------------------
1 | using Panuon.UI.Silver;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Controls;
9 | using System.Windows.Data;
10 | using System.Windows.Documents;
11 | using System.Windows.Input;
12 | using System.Windows.Media;
13 | using System.Windows.Media.Imaging;
14 | using System.Windows.Navigation;
15 | using System.Windows.Shapes;
16 |
17 | namespace DodocoTales.SR.Gui.Views.Cards
18 | {
19 | ///
20 | /// DDCVHomeScenePermanentCard.xaml 的交互逻辑
21 | ///
22 | public partial class DDCVHomeScenePermanentCard : UserControl
23 | {
24 | public DDCVHomeScenePermanentCard()
25 | {
26 | InitializeComponent();
27 | }
28 | public void Refresh()
29 | {
30 | VM.ReloadData();
31 | }
32 |
33 | private void RadioButton_Checked(object sender, RoutedEventArgs e)
34 | {
35 | var btn = sender as RadioButton;
36 | if (btn != null)
37 | {
38 | var idx = Convert.ToInt32(btn.Tag);
39 | VM.UnitIndicatorCurrentPageIndex = idx;
40 | }
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVSettingsWindowUsersScreen.xaml.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Gui.Models;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Controls;
9 | using System.Windows.Data;
10 | using System.Windows.Documents;
11 | using System.Windows.Input;
12 | using System.Windows.Media;
13 | using System.Windows.Media.Imaging;
14 | using System.Windows.Navigation;
15 | using System.Windows.Shapes;
16 |
17 | namespace DodocoTales.SR.Gui.Views.Screens
18 | {
19 | ///
20 | /// DDCVSettingsWindowUsersScreen.xaml 的交互逻辑
21 | ///
22 | public partial class DDCVSettingsWindowUsersScreen : DDCVSwapableScreen
23 | {
24 | public DDCVSettingsWindowUsersScreen()
25 | {
26 | InitializeComponent();
27 | }
28 | public override void Refresh()
29 | {
30 | VM.Refresh();
31 | }
32 |
33 | private void SwapButton_Click(object sender, RoutedEventArgs e)
34 | {
35 | VM.SwapUser((sender as Button).DataContext as DDCVUserlogItem);
36 | }
37 |
38 | private void RemoveButton_Click(object sender, RoutedEventArgs e)
39 | {
40 | VM.RemoveUser((sender as Button).DataContext as DDCVUserlogItem);
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Loader/Models/DDCGUniversalFormatLogSRSection.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using Newtonsoft.Json.Linq;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 |
9 | namespace DodocoTales.SR.Loader.Models
10 | {
11 | public class DDCGUniversalFormatLogSRSection
12 | {
13 | [JsonProperty(PropertyName = "uid", DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
14 | public string UID { get; set; }
15 |
16 | [JsonProperty(PropertyName = "lang", DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
17 | public string Language { get; set; } = "zh-cn";
18 |
19 | [JsonIgnore]
20 | public string TimeZone { get; set; }
21 |
22 | [JsonProperty(PropertyName = "timezone")]
23 | public JToken SerializedTimeZone
24 | {
25 | get => int.TryParse(TimeZone, out var tz) ? new JValue(tz) : null;
26 | set => TimeZone = value?.ToString();
27 | }
28 |
29 | [JsonProperty(PropertyName = "list")]
30 | public List List { get; set; }
31 |
32 |
33 |
34 | // Non-standard Fields
35 |
36 | [JsonProperty(PropertyName = "game_biz", DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
37 | public string GameBiz { get; set; }
38 |
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Dialogs/DDCVExportDialog.xaml.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 | using System.Windows.Controls;
9 | using System.Windows.Data;
10 | using System.Windows.Documents;
11 | using System.Windows.Input;
12 | using System.Windows.Media;
13 | using System.Windows.Media.Imaging;
14 | using System.Windows.Shapes;
15 |
16 | namespace DodocoTales.SR.Gui.Views.Dialogs
17 | {
18 | ///
19 | /// DDCVExportDialog.xaml 的交互逻辑
20 | ///
21 | public partial class DDCVExportDialog : Window
22 | {
23 | public DDCVExportDialog()
24 | {
25 | InitializeComponent();
26 | }
27 |
28 | private void FilePathBox_MouseDown(object sender, MouseButtonEventArgs e)
29 | {
30 | VM.SelectExportPath();
31 | }
32 |
33 | private async void ExportButton_Click(object sender, RoutedEventArgs e)
34 | {
35 | VM.SelectedUIDMulti.Clear();
36 | foreach(KeyValuePair x in MultiUIDSelect.SelectedItems)
37 | {
38 | VM.SelectedUIDMulti.Add(x.Key);
39 | }
40 | if(await VM.Export())
41 | Close();
42 | }
43 |
44 | private void CancelButton_Click(object sender, RoutedEventArgs e)
45 | {
46 | Close();
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Screens/DDCVDependenciesDownloadScreen.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Library/UserDataLibrary/Models/DDCLGachaLogItem.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Common.Enums;
2 | using Newtonsoft.Json;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 |
9 | namespace DodocoTales.SR.Library.UserDataLibrary.Models
10 | {
11 | public class DDCLGachaLogItem
12 | {
13 | public ulong VersionID { get; set; }
14 | [JsonProperty(PropertyName = "BannerID")]
15 | public ulong BannerInternalID { get; set; }
16 | public ulong RoundID { get; set; }
17 |
18 | public ulong ID { get; set; }
19 | public string Name { get; set; }
20 | public DateTime Time { get; set; }
21 |
22 | public DDCCPoolType PoolType { get; set; }
23 |
24 | public ulong Rank { get; set; }
25 | public DDCCUnitType UnitType { get; set; }
26 |
27 | public DDCLGachaLogItemRawData Raw { get; set; }
28 |
29 | [JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
30 | public bool Imported;
31 |
32 | [JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
33 | public string ImportApplication;
34 |
35 | [JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
36 | public bool Untrusted;
37 |
38 | }
39 | public class DDCLGachaLogItemRawData
40 | {
41 | public string gacha_id { get; set; }
42 | public ulong gacha_type { get; set; }
43 | public string item_id { get; set; }
44 | public string count { get; set; }
45 | }
46 | }
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/ViewModels/Cards/DDCVHomeSceneLCEventCardVM.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Common.Enums;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace DodocoTales.SR.Gui.ViewModels.Cards
9 | {
10 | public class DDCVHomeSceneLCEventCardVM : DDCVHomeSceneCardVMBase
11 | {
12 | public DDCVHomeSceneLCEventCardVM()
13 | {
14 | InitializeDashboard(DDCCPoolType.LCEvent, 160, 80);
15 | softPityThreshold = 65;
16 | brLuckyLimit = 48;
17 | rndLuckyLimit = 50;
18 | rndUnluckyLimit = 80;
19 | }
20 | public override void RefreshGlobalDashboard()
21 | {
22 | SetDBVRate(DBVGlobalR5, GlobalRank5, GlobalTotal, 1.25, 2.45);
23 | SetDBVRate(DBVGlobalR5Up, GlobalRank5Up, GlobalTotal, 0.6, 2.38);
24 | SetDBVRate(DBVGlobalR4, GlobalRank4, GlobalTotal, 9, 19.5);
25 | SetDBVRate(DBVGlobalR4Up, GlobalRank4Up, GlobalTotal, 5, 18.8);
26 | if (CurrentBasicRoundCount > softPityThreshold)
27 | {
28 | SoftPityActivated = true;
29 | SoftPityChance = Math.Max(0.008 + (CurrentBasicRoundCount - softPityThreshold) * 0.07, 1);
30 | SoftPityChance *= (CurrentRoundCurrent == CurrentBasicRoundCount) ? 0.78125 : 1;
31 | }
32 | else
33 | {
34 | SoftPityActivated = false;
35 | SoftPityChance = 0.008;
36 | SoftPityChance *= (CurrentRoundCurrent == CurrentBasicRoundCount) ? 0.78125 : 1;
37 | }
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/ViewModels/Cards/DDCVHomeSceneCharEventCardVM.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Common.Enums;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace DodocoTales.SR.Gui.ViewModels.Cards
9 | {
10 | public class DDCVHomeSceneCharEventCardVM : DDCVHomeSceneCardVMBase
11 | {
12 | public DDCVHomeSceneCharEventCardVM()
13 | {
14 | InitializeDashboard(DDCCPoolType.CharacterEvent, 180, 90);
15 | softPityThreshold = 73;
16 | brLuckyLimit = 50;
17 | rndLuckyLimit = 72;
18 | rndUnluckyLimit = 130;
19 | }
20 | public override void RefreshGlobalDashboard()
21 | {
22 | SetDBVRate(DBVGlobalR5, GlobalRank5, GlobalTotal, 1.1, 2.1);
23 | SetDBVRate(DBVGlobalR5Up, GlobalRank5Up, GlobalTotal, 0.5, 1.6);
24 | SetDBVRate(DBVGlobalR4, GlobalRank4, GlobalTotal, 8, 18);
25 | SetDBVRate(DBVGlobalR4Up, GlobalRank4Up, GlobalTotal, 3.6, 13.6);
26 | if (CurrentBasicRoundCount > softPityThreshold)
27 | {
28 | SoftPityActivated = true;
29 | SoftPityChance = Math.Max(0.006 + (CurrentBasicRoundCount - softPityThreshold) * 0.06, 1);
30 | SoftPityChance *= (CurrentRoundCurrent == CurrentBasicRoundCount) ? 0.5625 : 1;
31 | }
32 | else
33 | {
34 | SoftPityActivated = false;
35 | SoftPityChance = 0.006;
36 | SoftPityChance *= (CurrentRoundCurrent == CurrentBasicRoundCount) ? 0.5625 : 1;
37 | }
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Dialogs/DDCVImportDialog.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Shapes;
14 |
15 | namespace DodocoTales.SR.Gui.Views.Dialogs
16 | {
17 | ///
18 | /// DDCVImportDialog.xaml 的交互逻辑
19 | ///
20 | public partial class DDCVImportDialog : Window
21 | {
22 | public DDCVImportDialog()
23 | {
24 | InitializeComponent();
25 | }
26 |
27 | public async void Import()
28 | {
29 | if (await VM.LoadLog())
30 | DDCV.ShowWindowDialog(this);
31 | }
32 |
33 | private void Window_Loaded(object sender, RoutedEventArgs e)
34 | {
35 | }
36 |
37 | private async void ImportButton_Click(object sender, RoutedEventArgs e)
38 | {
39 | if (VM.IsImportReady())
40 | {
41 | if (await VM.Import())
42 | {
43 | Close();
44 | }
45 | }
46 | }
47 |
48 | private void CancelButton_Click(object sender, RoutedEventArgs e)
49 | {
50 | Close();
51 | }
52 |
53 | private void SkipButton_Click(object sender, RoutedEventArgs e)
54 | {
55 | if (VM.Skip())
56 | {
57 | Close();
58 | }
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/StarRailWarpObserve.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.2.32616.157
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DodocoTales.StarRail", "DodocoTales.StarRail\DodocoTales.StarRail.csproj", "{4C70370C-2661-4088-9821-5FA391564627}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Updater", "Updater\Updater.csproj", "{2B10FF4B-41B8-41C4-A5D1-FDEA5F52A16D}"
9 | EndProject
10 | Global
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 | Debug|Any CPU = Debug|Any CPU
13 | Release|Any CPU = Release|Any CPU
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {4C70370C-2661-4088-9821-5FA391564627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {4C70370C-2661-4088-9821-5FA391564627}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {4C70370C-2661-4088-9821-5FA391564627}.Release|Any CPU.ActiveCfg = Release|Any CPU
19 | {4C70370C-2661-4088-9821-5FA391564627}.Release|Any CPU.Build.0 = Release|Any CPU
20 | {2B10FF4B-41B8-41C4-A5D1-FDEA5F52A16D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21 | {2B10FF4B-41B8-41C4-A5D1-FDEA5F52A16D}.Debug|Any CPU.Build.0 = Debug|Any CPU
22 | {2B10FF4B-41B8-41C4-A5D1-FDEA5F52A16D}.Release|Any CPU.ActiveCfg = Release|Any CPU
23 | {2B10FF4B-41B8-41C4-A5D1-FDEA5F52A16D}.Release|Any CPU.Build.0 = Release|Any CPU
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {B9CFFDA0-B2B6-40E0-AD0D-280381CD89AE}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/ViewModels/Cards/DDCVHomeScenePermanentCardVM.cs:
--------------------------------------------------------------------------------
1 | using CommunityToolkit.Mvvm.ComponentModel;
2 | using DodocoTales.SR.Common.Enums;
3 | using DodocoTales.SR.Gui.Models;
4 | using DodocoTales.SR.Library;
5 | using DodocoTales.SR.Library.Enums;
6 | using DodocoTales.SR.Library.UserDataLibrary.Models;
7 | using LiveChartsCore;
8 | using LiveChartsCore.Defaults;
9 | using LiveChartsCore.SkiaSharpView;
10 | using LiveChartsCore.SkiaSharpView.Painting;
11 | using SkiaSharp;
12 | using System;
13 | using System.Collections.Generic;
14 | using System.Collections.ObjectModel;
15 | using System.Linq;
16 | using System.Text;
17 | using System.Threading.Tasks;
18 |
19 | namespace DodocoTales.SR.Gui.ViewModels.Cards
20 | {
21 | public class DDCVHomeScenePermanentCardVM : DDCVHomeSceneCardVMBase
22 | {
23 | public DDCVHomeScenePermanentCardVM()
24 | {
25 | InitializeDashboard(DDCCPoolType.Permanent, 90, 90);
26 | softPityThreshold = 73;
27 | brLuckyLimit = 50;
28 | rndLuckyLimit = 50;
29 | rndUnluckyLimit = 72;
30 | }
31 | public override void RefreshGlobalDashboard()
32 | {
33 | SetDBVRate(DBVGlobalR5, GlobalRank5, GlobalTotal, 1.1, 2.1);
34 | SetDBVRate(DBVGlobalR4, GlobalRank4, GlobalTotal, 8, 18);
35 | if (CurrentBasicRoundCount > softPityThreshold)
36 | {
37 | SoftPityActivated = true;
38 | SoftPityChance = Math.Max(0.006 + (CurrentBasicRoundCount - softPityThreshold) * 0.06, 1);
39 | }
40 | else
41 | {
42 | SoftPityActivated = false;
43 | SoftPityChance = 0.006;
44 | }
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/ViewModels/Screens/DDCVSettingsWindowUsersScreenVM.cs:
--------------------------------------------------------------------------------
1 | using CommunityToolkit.Mvvm.ComponentModel;
2 | using DodocoTales.SR.Gui.Models;
3 | using DodocoTales.SR.Library;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Collections.ObjectModel;
7 | using System.Linq;
8 | using System.Text;
9 | using System.Threading.Tasks;
10 |
11 | namespace DodocoTales.SR.Gui.ViewModels.Screens
12 | {
13 | public class DDCVSettingsWindowUsersScreenVM : ObservableObject
14 | {
15 | private ObservableCollection users;
16 | public ObservableCollection Users
17 | {
18 | get => users;
19 | set => SetProperty(ref users, value);
20 | }
21 |
22 |
23 | public void Refresh()
24 | {
25 | List list = new List();
26 | foreach (var log in DDCL.UserDataLib.U.Values)
27 | {
28 | list.Add(new DDCVUserlogItem
29 | {
30 | UID = log.UID,
31 | ClientType = log.ClientType,
32 | TimeZone = log.TimeZone,
33 | IsSelected = DDCL.CurrentUser.IsCurrentUser(log.UID),
34 | });
35 | }
36 | Users = new ObservableCollection(list);
37 |
38 | }
39 |
40 | public void SwapUser(DDCVUserlogItem user)
41 | {
42 | DDCL.CurrentUser.SwapUser(user.UID);
43 | Refresh();
44 | }
45 |
46 | public async void RemoveUser(DDCVUserlogItem user)
47 | {
48 | await DDCL.UserDataLib.RemoveUserByUid(user.UID);
49 | Refresh();
50 | }
51 |
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/DodocoTales.StarRail/Gui/Views/Windows/DDCVSettingsWindow.xaml.cs:
--------------------------------------------------------------------------------
1 | using DodocoTales.SR.Gui.Models;
2 | using Panuon.UI.Silver;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 | using System.Windows;
9 | using System.Windows.Controls;
10 | using System.Windows.Data;
11 | using System.Windows.Documents;
12 | using System.Windows.Input;
13 | using System.Windows.Media;
14 | using System.Windows.Media.Imaging;
15 | using System.Windows.Shapes;
16 |
17 | namespace DodocoTales.SR.Gui.Views.Windows
18 | {
19 | ///
20 | /// DDCVSettingsWindow.xaml 的交互逻辑
21 | ///
22 | public partial class DDCVSettingsWindow : WindowX
23 | {
24 | public DDCVSettingsWindow()
25 | {
26 | InitializeComponent();
27 | VM.Initialize(Navigator);
28 | }
29 |
30 | private void MainPanel_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs