Skip to content

Commit

Permalink
add auto draw gacha relic 3 times
Browse files Browse the repository at this point in the history
  • Loading branch information
moonheart committed Jan 3, 2024
1 parent d80c252 commit 71f8698
Show file tree
Hide file tree
Showing 19 changed files with 182 additions and 62 deletions.
38 changes: 30 additions & 8 deletions MementoMori.BlazorShared/Components/Settings/AutoJobCron.razor
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,16 @@
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
<MudTextField Label="@($"{ResourceStrings.DailyJob} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__DailyJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Label="@($"{ResourceStrings.RewardClaimJob} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__HourlyJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Label="@($"{Masters.TextResourceTable.Get("[CommonHeaderLocalPvpLabel]")} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__PvpJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Label="@($"{Masters.TextResourceTable.Get("[CommonHeaderGlobalPvpLabel]")} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__LegendLeagueJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Label="@($"{Masters.TextResourceTable.Get("[GuildRaidReleaseConfirmTitle]")} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__GuildRaidBossReleaseCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Label="@($"{ResourceStrings.ShopAutoBuyItems} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__AutoBuyShopItemJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Label="@($"{Masters.TextResourceTable.Get("[CommonHeaderLocalRaidLabel]")} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__AutoLocalRaidJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Label="@($"{ResourceStrings.Deploy_defense} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__AutoDeployGuildDefenseJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Margin="Margin.Dense" Label="@($"{ResourceStrings.DailyJob} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__DailyJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Margin="Margin.Dense" Label="@($"{ResourceStrings.RewardClaimJob} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__HourlyJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Margin="Margin.Dense" Label="@($"{Masters.TextResourceTable.Get("[CommonHeaderLocalPvpLabel]")} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__PvpJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Margin="Margin.Dense" Label="@($"{Masters.TextResourceTable.Get("[CommonHeaderGlobalPvpLabel]")} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__LegendLeagueJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Margin="Margin.Dense" Label="@($"{Masters.TextResourceTable.Get("[GuildRaidReleaseConfirmTitle]")} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__GuildRaidBossReleaseCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Margin="Margin.Dense" Label="@($"{ResourceStrings.ShopAutoBuyItems} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__AutoBuyShopItemJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Margin="Margin.Dense" Label="@($"{Masters.TextResourceTable.Get("[CommonHeaderLocalRaidLabel]")} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__AutoLocalRaidJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Margin="Margin.Dense" Label="@($"{ResourceStrings.Deploy_defense} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__AutoDeployGuildDefenseJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Margin="Margin.Dense" Label="@($"{Tr("[GachaRelicChangeTitle]")} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__AutoChangeGachaRelicJobCron" Variant="Variant.Outlined"></MudTextField>
<MudTextField Margin="Margin.Dense" Label="@($"{ResourceStrings.Auto_draw_10_times__up_to_3_draws_} {ResourceStrings.CronExpression}")" @bind-Value="AutoJob__AutoDrawGachaRelicJobCron" Variant="Variant.Outlined"></MudTextField>
</MudCardContent>
</MudCard>

Expand Down Expand Up @@ -105,4 +107,24 @@
}
}

public string AutoJob__AutoChangeGachaRelicJobCron
{
get => WritableGameConfig.Value.AutoJob.AutoChangeGachaRelicJobCron;
set
{
WritableGameConfig.Update(x => x.AutoJob.AutoChangeGachaRelicJobCron = value);
TimeZoneAwareJobRegister.RegisterAllJobs().ConfigureAwait(false).GetAwaiter().GetResult();
}
}

public string AutoJob__AutoDrawGachaRelicJobCron
{
get => WritableGameConfig.Value.AutoJob.AutoDrawGachaRelicJobCron;
set
{
WritableGameConfig.Update(x => x.AutoJob.AutoDrawGachaRelicJobCron = value);
TimeZoneAwareJobRegister.RegisterAllJobs().ConfigureAwait(false).GetAwaiter().GetResult();
}
}

}
28 changes: 21 additions & 7 deletions MementoMori.BlazorShared/Components/Settings/AutoJobSwitch.razor
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,17 @@
<MudCardContent>
<MudSwitch Label="@ResourceStrings.DisableAllJobs" @bind-Checked="AutoJob__DisableAll" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@ResourceStrings.ReinforceEquipmentOnce" @bind-Checked="AutoJob__AutoReinforcementEquipmentOneTime" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Masters.TextResourceTable.Get("[CommonHeaderLocalPvpLabel]")" @bind-Checked="AutoJob__AutoPvp" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Masters.TextResourceTable.Get("[CommonHeaderGlobalPvpLabel]")" @bind-Checked="AutoJob__AutoLegendLeague" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Masters.TextResourceTable.Get("[CommonHeaderDungeonBattleLabel]")" @bind-Checked="AutoJob__AutoDungeonBattle" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Tr("[CommonHeaderLocalPvpLabel]")" @bind-Checked="AutoJob__AutoPvp" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Tr("[CommonHeaderGlobalPvpLabel]")" @bind-Checked="AutoJob__AutoLegendLeague" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Tr("[CommonHeaderDungeonBattleLabel]")" @bind-Checked="AutoJob__AutoDungeonBattle" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@ResourceStrings.UseNormalItems" @bind-Checked="AutoJob__AutoUseItems" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Masters.TextResourceTable.Get("[CommonFooterGachaButtonLabel]")" @bind-Checked="AutoJob__AutoFreeGacha" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Masters.TextResourceTable.Get("[CharacterMenuTabCharacterRankUp]")" @bind-Checked="AutoJob__AutoRankUpCharacter" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Masters.TextResourceTable.Get("[GuildRaidReleaseConfirmTitle]")" @bind-Checked="AutoJob__AutoOpenGuildRaid" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Masters.TextResourceTable.Get("[CommonHeaderLocalRaidLabel]")" @bind-Checked="AutoJob__AutoLocalRaid" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Tr("[CommonFooterGachaButtonLabel]")" @bind-Checked="AutoJob__AutoFreeGacha" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Tr("[CharacterMenuTabCharacterRankUp]")" @bind-Checked="AutoJob__AutoRankUpCharacter" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Tr("[GuildRaidReleaseConfirmTitle]")" @bind-Checked="AutoJob__AutoOpenGuildRaid" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Tr("[CommonHeaderLocalRaidLabel]")" @bind-Checked="AutoJob__AutoLocalRaid" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@ResourceStrings.Deploy_defense" @bind-Checked="AutoJob__AutoDeployGuildDefense" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@Tr("[GachaRelicChangeTitle]")" @bind-Checked="AutoJob__AutoChangeGachaRelic" Color="Color.Primary"></MudSwitch>
<MudSwitch Label="@ResourceStrings.Auto_draw_10_times__up_to_3_draws_" @bind-Checked="AutoJob__AutoDrawGachaRelic" Color="Color.Primary"></MudSwitch>
</MudCardContent>
</MudCard>

Expand Down Expand Up @@ -97,4 +99,16 @@
set => WritableGameConfig.Update(x => x.AutoJob.AutoDeployGuildDefense = value);
}

public bool AutoJob__AutoChangeGachaRelic
{
get => WritableGameConfig.Value.AutoJob.AutoChangeGachaRelic;
set => WritableGameConfig.Update(x => x.AutoJob.AutoChangeGachaRelic = value);
}

public bool AutoJob__AutoDrawGachaRelic
{
get => WritableGameConfig.Value.AutoJob.AutoDrawGachaRelic;
set => WritableGameConfig.Update(x => x.AutoJob.AutoDrawGachaRelic = value);
}

}
25 changes: 23 additions & 2 deletions MementoMori.BlazorShared/Components/Settings/GachaSettings.razor
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
@using MementoMori.Ortega.Share.Data.Item
@using MementoMori.Common.Localization
@using MementoMori.Ortega.Share.Enums
@using MementoMori.Ortega.Share.Extensions
@inherits MementoMori.WebUI.Models.AccountComponent
@inject IWritableOptions<GameConfig> WritableGameConfig

Expand All @@ -14,6 +15,9 @@
<CardHeaderContent>
<MudText>@Masters.TextResourceTable.Get("[CommonFooterGachaButtonLabel]") (Global)</MudText>
</CardHeaderContent>
<CardHeaderActions>
<MudIconButton Variant="Variant.Outlined" Size="Size.Small" Icon="@Icons.Material.Filled.Save" OnClick="() => SavePlayerSetting()"></MudIconButton>
</CardHeaderActions>
</MudCardHeader>
<MudCardContent>
<MudField Label="@ResourceStrings.AutoGachaConsumeItems" Variant="Variant.Outlined">
Expand All @@ -25,15 +29,15 @@
}
</MudSelect>
</MudField>
<MudField Label="@Tr("[TradeShopTabName11]")" Variant="Variant.Outlined">
<MudField Label="@($"{Tr("[TradeShopTabName11]")} ({Funcs?.UserSyncData?.UserStatusDtoInfo?.Name})")" Variant="Variant.Outlined">
<MudSelect T="GachaRelicType" Label="@Tr("[GachaRelicChangeTitle]")" @bind-Value="_targetRelicType" Dense="true">
<MudSelectItem T="GachaRelicType" Value="GachaRelicType.None">None</MudSelectItem>
<MudSelectItem T="GachaRelicType" Value="GachaRelicType.ChaliceOfHeavenly">@Tr("[ItemName45]")</MudSelectItem>
<MudSelectItem T="GachaRelicType" Value="GachaRelicType.SilverOrderOfTheBlueSky">@Tr("[ItemName46]")</MudSelectItem>
<MudSelectItem T="GachaRelicType" Value="GachaRelicType.DivineWingsOfDesire">@Tr("[ItemName47]")</MudSelectItem>
<MudSelectItem T="GachaRelicType" Value="GachaRelicType.FruitOfTheGarden">@Tr("[ItemName48]")</MudSelectItem>
</MudSelect>
<MudSwitch Label="Auto Buy 3 times" @bind-Checked="_isAutoGacha"></MudSwitch>
<MudSwitch Color="Color.Primary" Label="@ResourceStrings.Auto_draw_10_times__up_to_3_draws_" @bind-Checked="_isAutoGacha"></MudSwitch>
</MudField>
</MudCardContent>
</MudCard>
Expand All @@ -57,6 +61,8 @@
.Where(d => d.ItemType == ItemType.GachaTicket || d.ItemType == ItemType.FriendPoint || d.ItemType == ItemType.Gold)
.Select(d => new UserItem() {ItemId = d.ItemId, ItemType = d.ItemType}).ToList();

_targetRelicType = PlayersOptions.Value[NetworkManager.PlayerId].GachaConfig.TargetRelicType;
_isAutoGacha = PlayersOptions.Value[NetworkManager.PlayerId].GachaConfig.AutoGachaRelic;
return Task.CompletedTask;
}

Expand All @@ -77,5 +83,20 @@
}
}

private void SavePlayerSetting()
{
PlayersOptions.Update(opt =>
{
var playerOpt = opt.GetOrAdd(NetworkManager.PlayerId, (id) => new PlayerOption() {PlayerId = id});
playerOpt.GachaConfig.TargetRelicType = _targetRelicType;
playerOpt.GachaConfig.AutoGachaRelic= _isAutoGacha;
});

Snackbar.Clear();
Snackbar.Configuration.PositionClass = Defaults.Classes.Position.TopCenter;
Snackbar.Add(ResourceStrings.Save_successful, Severity.Success);
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<MudText>@Masters.TextResourceTable.Get("[CommonHeaderLocalRaidLabel]") (@(Funcs?.UserSyncData?.UserStatusDtoInfo?.Name))</MudText>
</CardHeaderContent>
<CardHeaderActions>
<MudButton Variant="Variant.Outlined" OnClick="SaveLocalRaidConfig">@Masters.TextResourceTable.Get("[CommonSaveLabel]")</MudButton>
<MudIconButton Icon="@Icons.Material.Filled.Save" Variant="Variant.Outlined" OnClick="SaveLocalRaidConfig"></MudIconButton>
</CardHeaderActions>
</MudCardHeader>
<MudCardContent>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<MudText>@name (@(Funcs?.UserSyncData?.UserStatusDtoInfo?.Name))</MudText>
</CardHeaderContent>
<CardHeaderActions>
<MudButton Variant="Variant.Outlined" Size="Size.Small" StartIcon="@Icons.Material.Filled.Save" OnClick="() => SavePlayerSetting()">保存</MudButton>
<MudIconButton Variant="Variant.Outlined" Size="Size.Small" Icon="@Icons.Material.Filled.Save" OnClick="() => SavePlayerSetting()"></MudIconButton>
</CardHeaderActions>
</MudCardHeader>
<MudCardContent>
Expand Down
9 changes: 9 additions & 0 deletions MementoMori.Common/Localization/ResourceStrings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions MementoMori.Common/Localization/ResourceStrings.ja-jp.resx
Original file line number Diff line number Diff line change
Expand Up @@ -409,4 +409,7 @@
<data name="Seconds of pre-battle wait time" xml:space="preserve">
<value>バトル前の待機秒数</value>
</data>
<data name="Auto draw 10 times (up to 3 draws)" xml:space="preserve">
<value>自動で10回引く(最大3回)</value>
</data>
</root>
3 changes: 3 additions & 0 deletions MementoMori.Common/Localization/ResourceStrings.ko-kr.resx
Original file line number Diff line number Diff line change
Expand Up @@ -409,4 +409,7 @@
<data name="Seconds of pre-battle wait time" xml:space="preserve">
<value>전투 전 대기 시간(초)</value>
</data>
<data name="Auto draw 10 times (up to 3 draws)" xml:space="preserve">
<value>자동으로 10회 뽑기 (최대 3회)</value>
</data>
</root>
3 changes: 3 additions & 0 deletions MementoMori.Common/Localization/ResourceStrings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -515,4 +515,7 @@
<data name="Seconds of pre-battle wait time" xml:space="preserve">
<value>Seconds of pre-battle wait time</value>
</data>
<data name="Auto draw 10 times (up to 3 draws)" xml:space="preserve">
<value>Auto draw 10 times (up to 3 draws)</value>
</data>
</root>
3 changes: 3 additions & 0 deletions MementoMori.Common/Localization/ResourceStrings.zh.resx
Original file line number Diff line number Diff line change
Expand Up @@ -515,4 +515,7 @@
<data name="Seconds of pre-battle wait time" xml:space="preserve">
<value>开启战斗前等待的秒数</value>
</data>
<data name="Auto draw 10 times (up to 3 draws)" xml:space="preserve">
<value>自动抽满10次(最多抽3次)</value>
</data>
</root>
3 changes: 1 addition & 2 deletions MementoMori.Ortega/Share/Data/Item/UserItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ public UserItem DeepCopy()

public bool IsCurrency()
{
ItemType itemType = this.ItemType;
return true;
return ItemType == ItemType.CurrencyFree || ItemType == ItemType.CurrencyPaid;
}

public bool IsEqual(IUserItem userItem)
Expand Down
2 changes: 2 additions & 0 deletions MementoMori/AuthOption.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public class AutoJobModel
public bool AutoLocalRaid { get; set; }
public bool AutoDeployGuildDefense { get; set; }
public bool AutoChangeGachaRelic { get; set; }
public bool AutoDrawGachaRelic { get; set; }

public string DailyJobCron { get; set; } = "0 10 4 ? * *";
public string HourlyJobCron { get; set; } = "0 30 0,4,8,12,16,20 ? * *";
Expand All @@ -96,6 +97,7 @@ public class AutoJobModel
public string AutoLocalRaidJobCron { get; set; } = "0 31 12,19 ? * *";
public string AutoDeployGuildDefenseJobCron { get; set; } = "0 20 19 ? * *";
public string AutoChangeGachaRelicJobCron { get; set; } = "0 0 5 ? * MON *";
public string AutoDrawGachaRelicJobCron { get; set; } = "0 0 6 ? * SUN *";
}

public class BountyQuestAutoModel
Expand Down
19 changes: 18 additions & 1 deletion MementoMori/Extensions/EnumExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
using System;
using MementoMori.Ortega.Share.Enums;
using MementoMori.Ortega.Share.Master.Table;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using MementoMori.Ortega.Share;

namespace MementoMori.Extensions
{
Expand All @@ -20,5 +24,18 @@ public static string GetDesc<TEnum>(this TEnum value) where TEnum: Enum

return "";
}

public static string GetName(this GachaRelicType targetRelicType)
{
var name = targetRelicType switch
{
GachaRelicType.ChaliceOfHeavenly => Masters.TextResourceTable.Get("[ItemName45]"),
GachaRelicType.SilverOrderOfTheBlueSky => Masters.TextResourceTable.Get("[ItemName46]"),
GachaRelicType.DivineWingsOfDesire => Masters.TextResourceTable.Get("[ItemName47]"),
GachaRelicType.FruitOfTheGarden => Masters.TextResourceTable.Get("[ItemName48]"),
_ => ""
};
return name;
}
}
}
2 changes: 1 addition & 1 deletion MementoMori/Extensions/UserSyncDataExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ public static int GetChangedSetEquipmentCount(this UserSyncData userSyncData, st
return count;
}

public static long GetUserItemCount(this UserSyncData usersyncData, ItemType itemType, long itemId)
public static long GetUserItemCount(this UserSyncData usersyncData, ItemType itemType, long itemId = 0)
{
return usersyncData?.UserItemDtoInfo?.ToList().Find(x => x.ItemType == itemType && (itemId == 0 || x.ItemId == itemId))?.ItemCount ?? 0;
}
Expand Down
9 changes: 3 additions & 6 deletions MementoMori/Jobs/AutoBuyShopItemJob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,17 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AutoCtor;
using MementoMori.Option;
using Quartz;

namespace MementoMori.Jobs;

internal class AutoBuyShopItemJob : IJob
[AutoConstruct]
internal partial class AutoBuyShopItemJob : IJob
{
private AccountManager _accountManager;

public AutoBuyShopItemJob(AccountManager accountManager)
{
_accountManager = accountManager;
}

public async Task Execute(IJobExecutionContext context)
{
var userId = context.MergedJobDataMap.GetLongValue("userId");
Expand Down
11 changes: 5 additions & 6 deletions MementoMori/Jobs/AutoChangeGachaRelicJob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,21 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AutoCtor;
using MementoMori.Option;
using Quartz;

namespace MementoMori.Jobs;

internal class AutoChangeGachaRelicJob : IJob
[AutoConstruct]
internal partial class AutoChangeGachaRelicJob : IJob
{
private AccountManager _accountManager;

public AutoChangeGachaRelicJob(AccountManager accountManager)
{
_accountManager = accountManager;
}
private readonly IWritableOptions<GameConfig> _gameConfig;

public async Task Execute(IJobExecutionContext context)
{
if (!_gameConfig.Value.AutoJob.AutoChangeGachaRelic) return;
var userId = context.MergedJobDataMap.GetLongValue("userId");
if (userId <= 0) return;
var account = _accountManager.Get(userId);
Expand Down
28 changes: 28 additions & 0 deletions MementoMori/Jobs/AutoDrawGachaRelicJob.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AutoCtor;

using MementoMori.Option;
using Quartz;

namespace MementoMori.Jobs;

[AutoConstruct]
internal partial class AutoDrawGachaRelicJob : IJob
{
private AccountManager _accountManager;
private readonly IWritableOptions<GameConfig> _gameConfig;

public async Task Execute(IJobExecutionContext context)
{
if (!_gameConfig.Value.AutoJob.AutoDrawGachaRelic) return;
var userId = context.MergedJobDataMap.GetLongValue("userId");
if (userId <= 0) return;
var account = _accountManager.Get(userId);
if (!account.Funcs.IsQuickActionExecuting) await account.Funcs.Login();
await account.Funcs.DrawGachaRelic();
}
}
Loading

0 comments on commit 71f8698

Please sign in to comment.