feat(battle-engine): close the AI-simulation subsystem (verbatim)
Copied the 89 uncopied AI*SimulationUtility/extension files defining the AIVirtualCard/AIVirtualField extension methods; the compile loop then auto-closed the revealed type deps (~3049 files total, drift-clean). 10.0k -> 62 errors.
This commit is contained in:
484
SVSim.BattleEngine/Engine/Wizard/CompetitionEntry.cs
Normal file
484
SVSim.BattleEngine/Engine/Wizard/CompetitionEntry.cs
Normal file
@@ -0,0 +1,484 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Cute;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Wizard;
|
||||
|
||||
public class CompetitionEntry : ArenaEntryBase
|
||||
{
|
||||
private const int CARD_LIST_SORT_ORDER = 100;
|
||||
|
||||
private const int CARD_DETAIL_SORT_ORDER = 110;
|
||||
|
||||
[SerializeField]
|
||||
private UIButton _buttonFreeBattle;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject _detailPrefab;
|
||||
|
||||
[SerializeField]
|
||||
private UIButton _detailButton;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject _costRoot;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _periodTimeTitleLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _periodTimeLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _ownBeforeStatusLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _ownAfterStatusLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _formatLabel;
|
||||
|
||||
[SerializeField]
|
||||
private UILabel _retryNumberLabel;
|
||||
|
||||
[SerializeField]
|
||||
public GameObject CompetitionEntryCompleteDialog;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject _beforeEntryHeadLine;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject _afterEntryHeadLine;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject _competitionBadge;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject _freeEntryBadge;
|
||||
|
||||
public bool _isEntryTimeEnd;
|
||||
|
||||
public bool IsEnableUpdate = true;
|
||||
|
||||
public Action EntryAction;
|
||||
|
||||
private ArenaCompetition.EntryStatusType _entryStatus;
|
||||
|
||||
private int _restChallengeCount;
|
||||
|
||||
private int _restEntryCount;
|
||||
|
||||
private const float GLAY_SCALE = 0.33f;
|
||||
|
||||
private Color baseStatusTextColor;
|
||||
|
||||
private Color grayStatusTextColor;
|
||||
|
||||
private const float NO_FREE_BATTLE_STATUS_LABEL_POSITION_X = 3f;
|
||||
|
||||
private const float NO_FREE_BATTLE_STATUS_LABEL_POSITION_Y = 47f;
|
||||
|
||||
private const int NO_FREE_BATTLE_TEXT_FONT_SIZE = 22;
|
||||
|
||||
private const int LONG_TEXT_FONT_SIZE = 21;
|
||||
|
||||
private bool _isEntry => _entryStatus != ArenaCompetition.EntryStatusType.NotEntry;
|
||||
|
||||
private bool IsCompetitionComplete
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_restEntryCount == 0 && Data.ArenaData.CompetitionData.IsRewardReceived)
|
||||
{
|
||||
return _entryStatus == ArenaCompetition.EntryStatusType.NotEntry;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsEnableEntry
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!_isEntry && !_isEntryTimeEnd)
|
||||
{
|
||||
return !IsCompetitionComplete;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_isCompetition = true;
|
||||
IsEnableUpdate = true;
|
||||
baseStatusTextColor = _ownAfterStatusLabel.color;
|
||||
grayStatusTextColor = new Color(baseStatusTextColor.r * 0.33f, baseStatusTextColor.g * 0.33f, baseStatusTextColor.b * 0.33f, 255f);
|
||||
EntryBaseInit(_costRoot);
|
||||
}
|
||||
|
||||
protected override void EntryBaseInit(GameObject costRootObject)
|
||||
{
|
||||
base.EntryBaseInit(costRootObject);
|
||||
_entryDialogTitleText = Data.SystemText.Get("Competition_0017");
|
||||
_resumeFunc = Resume;
|
||||
_isJoinFunc = IsJoin;
|
||||
_freeBattleFunc = FreeBattle;
|
||||
_isFreeBattleCompetition = IsFreeBattleCompetition;
|
||||
_detailButton.onClick.Clear();
|
||||
_detailButton.onClick.Add(new EventDelegate(OnClickDetailButton));
|
||||
}
|
||||
|
||||
protected override void EntryDialogCreate(GameObject inDialogObject)
|
||||
{
|
||||
CompetitionEntryDialog component = inDialogObject.GetComponent<CompetitionEntryDialog>();
|
||||
component.SetRewardInfoEntryConfirm();
|
||||
component.CompleteEntryHandler = SetMyPageCompetitionReload;
|
||||
component.CompleteJoinHandler = AdmissionCompetitionNotFree;
|
||||
}
|
||||
|
||||
private void EntryAndAdmissionCompetition()
|
||||
{
|
||||
CompetitionEntryTask competitionEntryTask = new CompetitionEntryTask();
|
||||
competitionEntryTask.SetParameter(ArenaData.eARENA_PAY.Crystal);
|
||||
StartCoroutine(Toolbox.NetworkManager.Connect(competitionEntryTask, delegate
|
||||
{
|
||||
CompetitionUpdateEntryResumeButton();
|
||||
AdmissionCompetition(isFreeBattleJoin: true);
|
||||
}));
|
||||
}
|
||||
|
||||
private void Resume()
|
||||
{
|
||||
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_DECIDE_TRANS);
|
||||
if (Data.ArenaData.CompetitionData.DeckFormat == Format.TwoPick)
|
||||
{
|
||||
if (_entryStatus == ArenaCompetition.EntryStatusType.NotChallenge)
|
||||
{
|
||||
AdmissionCompetition(isFreeBattleJoin: false);
|
||||
}
|
||||
else if (Data.ArenaData.CompetitionData.IsCompletedTwoPickDeck < 1)
|
||||
{
|
||||
UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.Competition2Pick);
|
||||
}
|
||||
else
|
||||
{
|
||||
UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.CompetitionLobby);
|
||||
}
|
||||
return;
|
||||
}
|
||||
switch (_entryStatus)
|
||||
{
|
||||
case ArenaCompetition.EntryStatusType.NotChallenge:
|
||||
AdmissionCompetition(isFreeBattleJoin: false);
|
||||
break;
|
||||
case ArenaCompetition.EntryStatusType.NotRegistDeck:
|
||||
DeckListOpen();
|
||||
break;
|
||||
case ArenaCompetition.EntryStatusType.InBattle:
|
||||
UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.CompetitionLobby);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void FreeBattle()
|
||||
{
|
||||
EntryAndAdmissionCompetition();
|
||||
}
|
||||
|
||||
private bool IsJoin()
|
||||
{
|
||||
return _entryStatus != ArenaCompetition.EntryStatusType.NotEntry;
|
||||
}
|
||||
|
||||
private bool IsBeforePermanentEntry()
|
||||
{
|
||||
if (Data.ArenaData.CompetitionData.FreebieStatus < ArenaCompetition.FreebieStatusType.PermanentEntryDone)
|
||||
{
|
||||
return !IsCompetitionComplete;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override IEnumerator _InitCoroutine()
|
||||
{
|
||||
_buttonFreeBattle.onClick.Clear();
|
||||
_buttonFreeBattle.onClick.Add(new EventDelegate(delegate
|
||||
{
|
||||
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_DECIDE_TRANS);
|
||||
_freeBattleFunc();
|
||||
}));
|
||||
return base._InitCoroutine();
|
||||
}
|
||||
|
||||
protected override void UpdateEntryResumeButton()
|
||||
{
|
||||
base.UpdateEntryResumeButton();
|
||||
_buttonFreeBattle.gameObject.SetActive(value: false);
|
||||
if (_isCompetition && _isFreeBattleCompetition != null && _isFreeBattleCompetition())
|
||||
{
|
||||
ButtonEntry.gameObject.SetActive(value: false);
|
||||
ButtonResume.gameObject.SetActive(value: false);
|
||||
_buttonFreeBattle.gameObject.SetActive(value: true);
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsFreeBattleCompetition()
|
||||
{
|
||||
if (Data.ArenaData.CompetitionData.CostType == ArenaCompetition.EntryCostType.EntryWithCost)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
double num = Data.ArenaData.CompetitionData.RemainingServerUnixTime + (double)Time.realtimeSinceStartup - (double)Data.ArenaData.CompetitionData.RemainingSinceTime;
|
||||
bool flag = Data.ArenaData.CompetitionData.EntryRemainingUnixTime - num < 0.0;
|
||||
if (Data.ArenaData.CompetitionData.FreebieStatus == ArenaCompetition.FreebieStatusType.InFreeBattle && _entryStatus == ArenaCompetition.EntryStatusType.NotEntry && _restEntryCount > 0 && !flag)
|
||||
{
|
||||
return !IsCompetitionComplete;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void EntryMenuUpdate(bool isEntryTimeEnd)
|
||||
{
|
||||
_isEntryTimeEnd = isEntryTimeEnd;
|
||||
Initialize();
|
||||
}
|
||||
|
||||
private void Initialize()
|
||||
{
|
||||
ArenaCompetition competitionData = Data.ArenaData.CompetitionData;
|
||||
SystemText systemText = Data.SystemText;
|
||||
_isFreeEntry = false;
|
||||
if (IsEnableUpdate)
|
||||
{
|
||||
IsEnableUpdate = false;
|
||||
_entryStatus = competitionData.EntryStatus;
|
||||
_restChallengeCount = competitionData.RestChallangeCount;
|
||||
_restEntryCount = competitionData.RestEntryCount;
|
||||
}
|
||||
bool flag = competitionData.CompetitionId <= PlayerPrefsWrapper.GetValue(PlayerPrefsWrapper.COMPETITION_JOIN_BUTTON_LATEST_ID);
|
||||
Data.MyPageNotifications.data.IsCompetitionBadge = !competitionData.IsRewardReceived && _entryStatus == ArenaCompetition.EntryStatusType.NotEntry && !_isEntryTimeEnd && !flag;
|
||||
UIManager.GetInstance()._Footer.UpdateArenaBadgeIcon();
|
||||
UpdateMenu();
|
||||
if (Data.ArenaData.CompetitionData.CostType == ArenaCompetition.EntryCostType.EntryWithCost)
|
||||
{
|
||||
_costRoot.SetActive(value: true);
|
||||
_ownBeforeStatusLabel.transform.localPosition = new Vector3(3f, 47f, 0f);
|
||||
}
|
||||
UpdateCompetitionEntryBadge();
|
||||
_freeEntryBadge.SetActive(Data.MyPageNotifications.data.IsCompetitionBadge);
|
||||
ButtonEntry.GetComponentInChildren<UILabel>().text = systemText.Get("Competition_0012");
|
||||
UILabel componentInChildren = ButtonResume.GetComponentInChildren<UILabel>();
|
||||
bool flag2 = _entryStatus == ArenaCompetition.EntryStatusType.NotRegistDeck || _entryStatus == ArenaCompetition.EntryStatusType.InBattle;
|
||||
componentInChildren.text = (flag2 ? systemText.Get("Arena_0024") : systemText.Get("Arena_0034"));
|
||||
_buttonFreeBattle.GetComponentInChildren<UILabel>().text = systemText.Get("Competition_0065");
|
||||
string text = "";
|
||||
text = competitionData.DeckFormat switch
|
||||
{
|
||||
Format.TwoPick => systemText.Get("Arena_0002"),
|
||||
Format.Rotation => systemText.Get("Common_0154"),
|
||||
_ => systemText.Get("Common_0155"),
|
||||
};
|
||||
_formatLabel.text = systemText.Get("Colosseum_0054", text) + systemText.Get("Colosseum_0093");
|
||||
_beforeEntryHeadLine.SetActive(IsEnableEntry);
|
||||
_afterEntryHeadLine.SetActive(!IsEnableEntry);
|
||||
bool flag3 = true;
|
||||
bool flag4 = true;
|
||||
bool flag5 = false;
|
||||
double num = Data.ArenaData.CompetitionData.RemainingServerUnixTime + (double)Time.realtimeSinceStartup - (double)Data.ArenaData.CompetitionData.RemainingSinceTime;
|
||||
bool flag6 = Data.ArenaData.CompetitionData.EntryRemainingUnixTime - num < 0.0;
|
||||
bool flag7 = IsJoin() || (flag6 && competitionData.FreebieChallengeCount > 0 && !competitionData.IsEntry);
|
||||
_periodTimeTitleLabel.text = (flag7 ? systemText.Get("Competition_0029") : systemText.Get("Competition_0028"));
|
||||
_periodTimeLabel.text = (flag7 ? competitionData.NowRoundTimeText : competitionData.EntryTimeText);
|
||||
if (IsEnableEntry)
|
||||
{
|
||||
if (IsFreeBattleCompetition())
|
||||
{
|
||||
_ownBeforeStatusLabel.text = systemText.Get("Competition_0063", competitionData.MaxFreebieChallengeCount.ToString());
|
||||
_ownBeforeStatusLabel.fontSize = 21;
|
||||
_retryNumberLabel.text = systemText.Get("Competition_0024");
|
||||
flag3 = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_ownBeforeStatusLabel.text = systemText.Get("Competition_0073", Data.ArenaData.CompetitionData.RestEntryCount.ToString());
|
||||
_ownBeforeStatusLabel.fontSize = 22;
|
||||
flag3 = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
string freeEntryText = string.Empty;
|
||||
if (!_isEntry && _isEntryTimeEnd)
|
||||
{
|
||||
freeEntryText = systemText.Get("Competition_0025");
|
||||
flag3 = false;
|
||||
flag5 = true;
|
||||
}
|
||||
else if (competitionData.IsChampion)
|
||||
{
|
||||
freeEntryText = systemText.Get("Colosseum_0038", competitionData.CompetitionName);
|
||||
flag3 = _entryStatus != ArenaCompetition.EntryStatusType.NotEntry;
|
||||
flag5 = true;
|
||||
}
|
||||
else if (_restChallengeCount == 0)
|
||||
{
|
||||
freeEntryText = (IsCompetitionComplete ? systemText.Get("Competition_0026") : systemText.Get("Colosseum_0051"));
|
||||
flag3 = _entryStatus != ArenaCompetition.EntryStatusType.NotEntry;
|
||||
flag4 = IsCompetitionComplete;
|
||||
flag5 = true;
|
||||
}
|
||||
else if (Data.ArenaData.CompetitionData.CostType == ArenaCompetition.EntryCostType.EntryWithFree)
|
||||
{
|
||||
flag5 = TryGetFreeEntryStatusText(out freeEntryText);
|
||||
flag4 = !flag2;
|
||||
}
|
||||
if (!flag5)
|
||||
{
|
||||
freeEntryText = systemText.Get("Colosseum_0050", _restChallengeCount.ToString());
|
||||
flag4 = !flag2;
|
||||
}
|
||||
_ownAfterStatusLabel.text = freeEntryText;
|
||||
}
|
||||
_ownAfterStatusLabel.color = (flag4 ? baseStatusTextColor : grayStatusTextColor);
|
||||
UIManager.SetObjectToGrey(ButtonEntry.gameObject, !flag3);
|
||||
UIManager.SetObjectToGrey(ButtonResume.gameObject, !flag3);
|
||||
}
|
||||
|
||||
protected override void UpdateCompetitionEntryBadge()
|
||||
{
|
||||
base.UpdateCompetitionEntryBadge();
|
||||
_competitionBadge.SetActive(Data.MyPageNotifications.data.IsCompetitionBadge);
|
||||
}
|
||||
|
||||
public void AdmissionCompetition(bool isFreeBattleJoin)
|
||||
{
|
||||
CompetitionJoinTask task = new CompetitionJoinTask();
|
||||
UIManager.GetInstance().StartCoroutine(Toolbox.NetworkManager.Connect(task, delegate
|
||||
{
|
||||
Data.MyPageNotifications.data.IsCompetitionBadge = false;
|
||||
PlayerPrefsWrapper.SetValue(PlayerPrefsWrapper.COMPETITION_JOIN_BUTTON_LATEST_ID, Data.ArenaData.CompetitionData.CompetitionId);
|
||||
_entryStatus = ArenaCompetition.EntryStatusType.NotRegistDeck;
|
||||
if (!isFreeBattleJoin)
|
||||
{
|
||||
_restChallengeCount--;
|
||||
}
|
||||
Initialize();
|
||||
if (Data.ArenaData.CompetitionData.DeckFormat == Format.TwoPick)
|
||||
{
|
||||
UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.Competition2Pick);
|
||||
}
|
||||
else
|
||||
{
|
||||
DeckListOpen();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public void DeckListOpen()
|
||||
{
|
||||
UpdateEntryResumeButton();
|
||||
GameMgr.GetIns().GetDataMgr().m_BattleType = DataMgr.BattleType.CompetitionNormal;
|
||||
DeckInfoTask task = new DeckInfoTask();
|
||||
task.SetParameter(Data.ArenaData.CompetitionData.DeckFormat);
|
||||
UIManager.GetInstance().StartCoroutine(Toolbox.NetworkManager.Connect(task, delegate
|
||||
{
|
||||
DeckSelectUIDialog.Create(Data.SystemText.Get("Competition_0006"), task.DeckGroupListData, Data.ArenaData.CompetitionData.DeckFormat, DeckSelectUIDialog.eFormatChangeUIType.SingleFormat, isVisibleCreateNew: true, CreateDeckSelectConfirmDialog);
|
||||
}));
|
||||
}
|
||||
|
||||
private void CreateDeckSelectConfirmDialog(DialogBase dialogDeckList, DeckData deck)
|
||||
{
|
||||
if (!deck.IsUsable())
|
||||
{
|
||||
InCompleteDeckDecideDialog.Create(dialogDeckList, deck);
|
||||
return;
|
||||
}
|
||||
CompleteDeckDecideDialog completeDeckDecideDialog = CompleteDeckDecideDialog.CreateForSingleDeck(dialogDeckList, deck, showSimpleStageOption: true, delegate
|
||||
{
|
||||
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_DECIDE);
|
||||
DeckSetAndMoveCompetition(deck);
|
||||
});
|
||||
completeDeckDecideDialog.DecisionUI.CardDetailCustomize = delegate(CardDetailUI detailUI)
|
||||
{
|
||||
detailUI.IsShowFlavorTextButton = false;
|
||||
detailUI.IsShowVoiceButton = false;
|
||||
detailUI.IsShowEvolutionButton = false;
|
||||
detailUI.SetSortOrder(110);
|
||||
};
|
||||
completeDeckDecideDialog.DecisionUI.CardListCustomize = delegate(UICardList uiCardList)
|
||||
{
|
||||
uiCardList.SetPanelSortOrder(100);
|
||||
};
|
||||
completeDeckDecideDialog.DecisionUI.gameObject.GetComponent<UIWidget>().alpha = 0f;
|
||||
DeckDecisionCompetition deckDecisionCompetition = UnityEngine.Object.Instantiate(Toolbox.ResourcesManager.LoadObject<DeckDecisionCompetition>("UI/DeckList/DeckDecisionCompetition", isServerResources: false));
|
||||
completeDeckDecideDialog.Dialog.SetObj(deckDecisionCompetition.gameObject);
|
||||
deckDecisionCompetition.Init(deck);
|
||||
completeDeckDecideDialog.DecisionUI.transform.SetParent(deckDecisionCompetition.transform.parent.transform);
|
||||
}
|
||||
|
||||
private void DeckSetAndMoveCompetition(DeckData inDeckData)
|
||||
{
|
||||
Data.ArenaData.CompetitionData.DeckList.Clear();
|
||||
Data.ArenaData.CompetitionData.DeckList.Add(inDeckData);
|
||||
bool isPublished = PlayerPrefsWrapper.GetBool(PlayerPrefsWrapper.COMPETITION_PUBLISHED_SETTING);
|
||||
CompetitionRegisterDeckTask competitionRegisterDeckTask = new CompetitionRegisterDeckTask();
|
||||
competitionRegisterDeckTask.SetParameter(new List<DeckData> { inDeckData }, isPublished);
|
||||
StartCoroutine(Toolbox.NetworkManager.Connect(competitionRegisterDeckTask, delegate
|
||||
{
|
||||
_entryStatus = ArenaCompetition.EntryStatusType.InBattle;
|
||||
UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.CompetitionLobby);
|
||||
}));
|
||||
}
|
||||
|
||||
public void CompetitionUpdateEntryResumeButton()
|
||||
{
|
||||
_restEntryCount = Data.ArenaData.CompetitionData.RestEntryCount;
|
||||
_restChallengeCount = Data.ArenaData.CompetitionData.RestChallangeCount;
|
||||
_entryStatus = ArenaCompetition.EntryStatusType.NotChallenge;
|
||||
EntryAction();
|
||||
}
|
||||
|
||||
public void OnClickDetailButton()
|
||||
{
|
||||
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_DECIDE);
|
||||
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
|
||||
GameObject gameObject = UnityEngine.Object.Instantiate(_detailPrefab);
|
||||
dialogBase.SetObj(gameObject);
|
||||
gameObject.GetComponent<CompetitionDetail>().Init(dialogBase, Data.ArenaData.CompetitionData, _isEntry);
|
||||
}
|
||||
|
||||
private bool TryGetFreeEntryStatusText(out string freeEntryText)
|
||||
{
|
||||
ArenaCompetition competitionData = Data.ArenaData.CompetitionData;
|
||||
SystemText systemText = Data.SystemText;
|
||||
freeEntryText = string.Empty;
|
||||
bool result = true;
|
||||
if (competitionData.FreebieStatus == ArenaCompetition.FreebieStatusType.InFreeBattle)
|
||||
{
|
||||
freeEntryText = systemText.Get("Competition_0072", competitionData.FreebieChallengeCount.ToString());
|
||||
}
|
||||
else if (competitionData.FreebieStatus == ArenaCompetition.FreebieStatusType.CanPermanentEntry)
|
||||
{
|
||||
freeEntryText = systemText.Get("Competition_0073", _restChallengeCount.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void AdmissionCompetitionNotFree()
|
||||
{
|
||||
AdmissionCompetition(isFreeBattleJoin: false);
|
||||
}
|
||||
|
||||
private void SetMyPageCompetitionReload()
|
||||
{
|
||||
CompetitionUpdateEntryResumeButton();
|
||||
Initialize();
|
||||
UpdateEntryResumeButton();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user