feat(battle-engine): View/Room/Vfx type wave (5600->4850)
Full-surface stubs for ICardVfxCreator(iface), SelectedStoryInfo, ImageSelection, IReadOnlyVoiceInfo, RoomConnectController(+InitializeParameter/enums), RoomRuleSetting, VideoHostingHUD(+HUDMode), TabList, BattleCardView.AttackTargetSelectInfo, ProtectionColorType. Wired hand shims partial + MonoBehaviour bases; let generated supersede hand-written nested enums (decomp-authoritative values). SocketManager kept as minimal SDK hand shim. ClosureStubs for ~14 referenced empties. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,26 @@
|
|||||||
|
// AUTO-GENERATED no-op stubs (m1_stub_gen) from Shadowverse_Code_2026-05-23\Wizard.Battle.View\BattleCardView.cs
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using CriWare;
|
||||||
|
using Cute;
|
||||||
|
using UnityEngine;
|
||||||
|
using Wizard.Battle.Resource;
|
||||||
|
using Wizard.Battle.View.Vfx;
|
||||||
|
namespace Wizard.Battle.View
|
||||||
|
{
|
||||||
|
public partial class BattleCardView
|
||||||
|
{
|
||||||
|
public partial class AttackTargetSelectInfo
|
||||||
|
{
|
||||||
|
public readonly Queue<AttackSelectControl.AttackPair> _attackPairsCardIsInvolvedIn;
|
||||||
|
public bool _isBeingSelectedInAttack;
|
||||||
|
private int _uneffectedByAttackTargettingCount;
|
||||||
|
public AttackSelectControl.AttackPair CurrentAttackPairCardIsInvolvedIn { get; set; }
|
||||||
|
public bool IsCardInvolvedInAttack { get; set; }
|
||||||
|
public bool IsUneffectedByAttackTargetting { get; set; }
|
||||||
|
public AttackTargetSelectInfo() { }
|
||||||
|
public virtual Action DisableAttackTargettingMovement() => default!;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
51
SVSim.BattleEngine/Shim/Generated/ICardVfxCreator.g.cs
Normal file
51
SVSim.BattleEngine/Shim/Generated/ICardVfxCreator.g.cs
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
// AUTO-GENERATED no-op stubs (m1_stub_gen) from Shadowverse_Code_2026-05-23\Wizard.Battle.View.Vfx\ICardVfxCreator.cs
|
||||||
|
using UnityEngine;
|
||||||
|
namespace Wizard.Battle.View.Vfx
|
||||||
|
{
|
||||||
|
public partial interface ICardVfxCreator
|
||||||
|
{
|
||||||
|
VfxBase CreateDraw(Vector3 pos, bool isCardRare);
|
||||||
|
VfxBase CreatePick();
|
||||||
|
VfxBase CreateDestroy(BattleCardBase.DeathTypeInformation deathTypes, BattlePlayerBase battlePlayerBase);
|
||||||
|
VfxBase CreateDestroyHand(BattleCardBase.DeathTypeInformation deathTypes, BattlePlayerBase battlePlayerBase);
|
||||||
|
VfxBase CreateBanish(BattleCardBase.DeathTypeInformation deathTypes, BattlePlayerBase battlePlayerBase);
|
||||||
|
VfxWithLoading CreateBanishHand(BattleCardBase.DeathTypeInformation deathTypes, BattlePlayerBase battlePlayerBase);
|
||||||
|
VfxBase CreateGeton(Transform vehicleCardPosition, IBattleCardView vehicleCardView, BattleCardBase.DeathTypeInformation deathTypes, BattlePlayerBase battlePlayerBase);
|
||||||
|
VfxWithLoading CreateFusionHand(BattlePlayerBase battlePlayerBase, IBattleCardView fusionCard, bool isFusionMetamorphose);
|
||||||
|
VfxBase CreateParameterChange(BattleCardBase.ParameterChangeInformation parameterChangeInfo, bool isDead = false, bool isEvolve = false, bool skipWait = false);
|
||||||
|
VfxBase CreateBuffStart(BattleCardBase.ParameterChangeInformation parameterChangeInfo, bool useWait = true);
|
||||||
|
VfxBase CreateBuffStop(BattleCardBase.ParameterChangeInformation parameterChangeInfo, bool useWait = true);
|
||||||
|
VfxBase CreateDebuffStart(BattleCardBase.ParameterChangeInformation parameterChangeInfo, bool useWait = true);
|
||||||
|
VfxBase CreateDebuffStop(BattleCardBase.ParameterChangeInformation parameterChangeInfo, bool useWait = true);
|
||||||
|
VfxBase CreateBuffStartInHand(BattleCardBase.ParameterChangeInformation parameterChangeInfo, bool useWait = true, bool isDebuff = false);
|
||||||
|
VfxBase CreateGuardStart();
|
||||||
|
VfxBase CreateGuardStop();
|
||||||
|
VfxBase CreateKillerStart();
|
||||||
|
VfxBase CreateKillerStop();
|
||||||
|
VfxBase CreateProtectionStart(ProtectionColorType tyep);
|
||||||
|
VfxBase CreateProtectionStop();
|
||||||
|
VfxBase CreateNotBeAttackedStart();
|
||||||
|
VfxBase CreateNotBeAttackedStop();
|
||||||
|
VfxBase CreateUntouchableStart();
|
||||||
|
VfxBase CreateUntouchableStop();
|
||||||
|
VfxBase CreateQuick(bool hasAttacksRemaining, bool isCardUnableToAttackClass);
|
||||||
|
VfxBase CreateSneakStart();
|
||||||
|
VfxBase CreateSneakStop();
|
||||||
|
VfxBase CreateForceCantAttackStart();
|
||||||
|
VfxBase CreateForceCantAttackStop();
|
||||||
|
VfxBase CreateDrainStart();
|
||||||
|
VfxBase CreateDrainStop();
|
||||||
|
VfxBase CreateAttack(IBattleCardView attackCardView, IBattleCardView attackTargetCardView);
|
||||||
|
VfxBase CreateAttackFloatUp();
|
||||||
|
VfxBase CreateAttackFloatDown(bool isAttacker, bool isDead, int attackableCount);
|
||||||
|
VfxBase CreateMoving(Vector3 pos);
|
||||||
|
VfxBase CreateDamage(int damage, int currentHealth, int maxHealth, int baseHealth, bool isReflectedDamage, bool IsSkillDamage);
|
||||||
|
VfxBase CreateHealing(int healAmount, int currentHealth, int maxHealth, int baseHealth);
|
||||||
|
VfxBase CreateMaskCardInPlay();
|
||||||
|
VfxBase CreateReflectionStart();
|
||||||
|
VfxBase CreateReflectionStop();
|
||||||
|
VfxBase CreateHeavenlyAegisStart();
|
||||||
|
VfxBase CreateHeavenlyAegisStop();
|
||||||
|
VfxBase CreateChangeAffiliation(BattleCardBase card, CardBasePrm.ClanType clan, bool showEffect);
|
||||||
|
}
|
||||||
|
}
|
||||||
19
SVSim.BattleEngine/Shim/Generated/IReadOnlyVoiceInfo.g.cs
Normal file
19
SVSim.BattleEngine/Shim/Generated/IReadOnlyVoiceInfo.g.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
// AUTO-GENERATED no-op stubs (m1_stub_gen) from Shadowverse_Code_2026-05-23\Wizard.Battle.View\IReadOnlyVoiceInfo.cs
|
||||||
|
namespace Wizard.Battle.View
|
||||||
|
{
|
||||||
|
public partial interface IReadOnlyVoiceInfo
|
||||||
|
{
|
||||||
|
bool HasSummonTokenVoice { get; set; }
|
||||||
|
string VoiceId { get; set; }
|
||||||
|
VoiceAndWaitTime GetPlayVoice(IReadOnlyBattleCardInfo cardInfo, BattlePlayerReadOnlyInfoPair playerPair, int executedFixedUseCostIndex, int skillVoiceIndex);
|
||||||
|
VoiceAndWaitTime GetSummonTokenVoice();
|
||||||
|
VoiceAndWaitTime GetEvolutionVoice();
|
||||||
|
VoiceAndWaitTime GetAttackVoice(bool isEvolution);
|
||||||
|
VoiceAndWaitTime GetDestroyVoice(bool isEvolution, bool isExecutedWhiteRitual);
|
||||||
|
VoiceAndWaitTime GetSkillVoice(bool isEvolution, int skillIndex);
|
||||||
|
int GetSkillVoiceCount(bool isEvolution);
|
||||||
|
void SetDestroyCardId(int id);
|
||||||
|
int AddAttachSkillVoice(string id);
|
||||||
|
string GetAttachSkillVoice(int index);
|
||||||
|
}
|
||||||
|
}
|
||||||
93
SVSim.BattleEngine/Shim/Generated/ImageSelection.g.cs
Normal file
93
SVSim.BattleEngine/Shim/Generated/ImageSelection.g.cs
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
// AUTO-GENERATED no-op stubs (m1_stub_gen) from Shadowverse_Code_2026-05-23\Wizard.UI.Dialog.ImageSelection\ImageSelection.cs
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Cute;
|
||||||
|
using UnityEngine;
|
||||||
|
namespace Wizard.UI.Dialog.ImageSelection
|
||||||
|
{
|
||||||
|
public partial class ImageSelection
|
||||||
|
{
|
||||||
|
public partial class PageItem { }
|
||||||
|
public partial class Page { }
|
||||||
|
public partial class PageDisplayFrameItem { }
|
||||||
|
public partial class PageDisplayFrame { }
|
||||||
|
public partial class CategoryInfo { }
|
||||||
|
private delegate void OnClickPageItemDelegate(PageItem pageItem, PageDisplayFrame frame);
|
||||||
|
public delegate bool IsNewItemDelegate();
|
||||||
|
public enum SelectType
|
||||||
|
{
|
||||||
|
SINGLE,
|
||||||
|
MULTI
|
||||||
|
}
|
||||||
|
private GameObject _partsBaseUI;
|
||||||
|
private GameObject _partsPageGrid;
|
||||||
|
private GameObject _partsMainItem;
|
||||||
|
private int _loadPageNumInAdvance;
|
||||||
|
private int _loadPageMaxNum;
|
||||||
|
private int _mainItemMaxNumPerPage;
|
||||||
|
private SelectType _selectType;
|
||||||
|
private bool _isNotSelectItemToGrey;
|
||||||
|
private ImageSelectionBaseUI _baseUI;
|
||||||
|
private PageDisplayFrame[] _pageDisplayFrameList;
|
||||||
|
private PageDisplayFrame _pageDisplayFrame_Main;
|
||||||
|
private PageDisplayFrame _pageDisplayFrame_Sub;
|
||||||
|
private Page _dummyPage;
|
||||||
|
private List<Page> _pageList;
|
||||||
|
private List<CategoryInfo> _categoryInfoList;
|
||||||
|
private int _displayPageNo;
|
||||||
|
private PageItem _selectedPageItem;
|
||||||
|
private bool _isChangingDisplayPage;
|
||||||
|
private bool _isInterruptChangeDisplayPage;
|
||||||
|
private bool _isChangedPrevPageOnDrag;
|
||||||
|
private bool _isChangedNextPageOnDrag;
|
||||||
|
private bool _isChangedPrevPageOnPressBtn;
|
||||||
|
private bool _isChangedNextPageOnPressBtn;
|
||||||
|
private bool _isPressingPrevPageBtn;
|
||||||
|
private bool _isPressingNextPageBtn;
|
||||||
|
private float _timePressingPrevPageBtn;
|
||||||
|
private float _timePressingNextPageBtn;
|
||||||
|
private DialogBase _dialog;
|
||||||
|
public bool IsDuringReset { get; set; }
|
||||||
|
private void Awake() { }
|
||||||
|
public void Create(int allPanelDepthAddValue = 0, DialogBase dialog = null) { }
|
||||||
|
public List<string> GetSelectedList() => default!;
|
||||||
|
public void SelectAll() { }
|
||||||
|
public void SelectCancelAll() { }
|
||||||
|
public void SetSelectAll(bool isSelect) { }
|
||||||
|
public IEnumerator Reset() => default!;
|
||||||
|
private void UnloadAll() { }
|
||||||
|
public void AddItem(string key, string category, bool isSelectable, IsNewItemDelegate isNewItemMethod, string loadTexPath, string fetchTexPath, bool isDisplaySprite, string name, string[] texts, Action onDisplay, Action onClick = null, Action<GameObject> onPress = null) { }
|
||||||
|
private void AddDummyPage() { }
|
||||||
|
private void RemoveDummyPage() { }
|
||||||
|
private void AddCategoryPage(CategoryInfo categoryInfo) { }
|
||||||
|
public void Open() { }
|
||||||
|
public void Close() { }
|
||||||
|
public void SetDisplayPage(int pageNo) { }
|
||||||
|
public void LoadDisplayPage() { }
|
||||||
|
public void UnloadAllPageExceptDisplayPage() { }
|
||||||
|
private void UnloadAllPageExceptBasePage(int basePageNo, int aroundOffset) { }
|
||||||
|
private void ToPrevPage(bool isPlaySe = false) { }
|
||||||
|
private void ToNextPage(bool isPlaySe = false) { }
|
||||||
|
private IEnumerator ChangeDisplayPage(bool isAnimate, bool isToNext = false, bool isPlaySe = false) => default!;
|
||||||
|
private void InterruptChangeDisplayPage() { }
|
||||||
|
private void SwapPageDisplayFrame() { }
|
||||||
|
private void OnClickPageItem(PageItem pageItem, PageDisplayFrame frame) { }
|
||||||
|
private void OnPressPageItem(PageItem pageItem, PageDisplayFrame frame, GameObject pressItem) { }
|
||||||
|
private void OnDragStart(GameObject g) { }
|
||||||
|
private void OnDrag(GameObject g, Vector2 delta) { }
|
||||||
|
private void OnPressToPrevBtn(GameObject g, bool state) { }
|
||||||
|
private void OnPressToNextBtn(GameObject g, bool state) { }
|
||||||
|
private void Update() { }
|
||||||
|
public string GetSelectedItemKey() => default!;
|
||||||
|
public int SelectItemWithKey(string key) => default!;
|
||||||
|
public void SelectMultiItem(List<string> keyList) { }
|
||||||
|
private PageItem FindItemWithKey(string key, out int pageNo) { pageNo = default!; return default!; }
|
||||||
|
private void ChangeSelectItem(PageItem item) { }
|
||||||
|
private void UpdateSelectMark() { }
|
||||||
|
private void UpdateIsNewItem() { }
|
||||||
|
private int GetNormalizedPageNo(int pageNo) => default!;
|
||||||
|
private bool IsOnlyOnePage() => default!;
|
||||||
|
private void OnDestroy() { }
|
||||||
|
}
|
||||||
|
}
|
||||||
11
SVSim.BattleEngine/Shim/Generated/ProtectionColorType.g.cs
Normal file
11
SVSim.BattleEngine/Shim/Generated/ProtectionColorType.g.cs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// AUTO-GENERATED verbatim enum (m1_stub_gen) from Shadowverse_Code_2026-05-23/Wizard.Battle.View.Vfx/ProtectionColorType.cs
|
||||||
|
namespace Wizard.Battle.View.Vfx
|
||||||
|
{
|
||||||
|
public enum ProtectionColorType
|
||||||
|
{
|
||||||
|
DamageCut,
|
||||||
|
Indestructible,
|
||||||
|
MultiInvalid,
|
||||||
|
DamageReflection
|
||||||
|
}
|
||||||
|
}
|
||||||
162
SVSim.BattleEngine/Shim/Generated/RoomConnectController.g.cs
Normal file
162
SVSim.BattleEngine/Shim/Generated/RoomConnectController.g.cs
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
// AUTO-GENERATED no-op stubs (m1_stub_gen) from Shadowverse_Code_2026-05-23\Wizard.RoomMatch\RoomConnectController.cs
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using Convention;
|
||||||
|
using Cute;
|
||||||
|
using LitJson;
|
||||||
|
using UnityEngine;
|
||||||
|
using Wizard.ErrorDialog;
|
||||||
|
namespace Wizard.RoomMatch
|
||||||
|
{
|
||||||
|
public partial class RoomConnectController
|
||||||
|
{
|
||||||
|
public partial class InitializeParameter { }
|
||||||
|
public partial class RoomUserData { }
|
||||||
|
public enum PositionMode
|
||||||
|
{
|
||||||
|
OWNER,
|
||||||
|
VISITOR,
|
||||||
|
WATCHER
|
||||||
|
}
|
||||||
|
public enum BattleRule
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Bo1,
|
||||||
|
Bo3,
|
||||||
|
Bo5,
|
||||||
|
Bo3Ban,
|
||||||
|
Bo5Ban
|
||||||
|
}
|
||||||
|
public enum FirstTurn
|
||||||
|
{
|
||||||
|
INVALID,
|
||||||
|
RANDOM,
|
||||||
|
OWNER_FIRST_TURN,
|
||||||
|
OWNER_SECOND_TURN,
|
||||||
|
MAX
|
||||||
|
}
|
||||||
|
public enum ConnectRoomResult
|
||||||
|
{
|
||||||
|
IDLE = -1,
|
||||||
|
TIMEOUT = -2,
|
||||||
|
ERROR = -3,
|
||||||
|
CONNECT_ERROR = -4,
|
||||||
|
SUCCESS = 0
|
||||||
|
}
|
||||||
|
private enum RoomSetupErrorAction
|
||||||
|
{
|
||||||
|
CALL_ACTION,
|
||||||
|
GO_HOME,
|
||||||
|
GO_TITLE
|
||||||
|
}
|
||||||
|
private const float TIMEOUT_SEC = 10f;
|
||||||
|
public const int SERVER_ROOM_TYPE_NORMAL = 1;
|
||||||
|
public const int SERVER_ROOM_TYPE_TWOPICK = 2;
|
||||||
|
public const int SERVER_ROOM_TYPE_TWOPICK_BACK_DRAFT = 3;
|
||||||
|
public const int SERVER_ROOM_TYPE_BO3 = 4;
|
||||||
|
public const int SERVER_ROOM_TYPE_BO5 = 5;
|
||||||
|
public const int SERVER_ROOM_TYPE_TWOPICK_QUBE = 6;
|
||||||
|
public const int SERVER_ROOM_TYPE_HOF = 7;
|
||||||
|
public const int SERVER_ROOM_TYPE_TWOPICK_BO3 = 8;
|
||||||
|
public const int SERVER_ROOM_TYPE_TWOPICK_BO5 = 9;
|
||||||
|
public const int SERVER_ROOM_TYPE_WINDFALL = 10;
|
||||||
|
public const int SERVER_ROOM_TYPE_AVATAR = 11;
|
||||||
|
public const int ID_NUMBER_OF_DIGIT = 5;
|
||||||
|
public const int CONVENTION_ID_NUMBER_OF_DIGIT = 5;
|
||||||
|
private string _roomId;
|
||||||
|
private DialogBase _nodeErrorDialog;
|
||||||
|
public int TotalBattleNum;
|
||||||
|
public int TotalWatchBattleNum;
|
||||||
|
public bool IsRelease;
|
||||||
|
private Coroutine _timeOutCoroutine;
|
||||||
|
private RoomWatchEventDispatch _watchEventDispatch;
|
||||||
|
public bool IsWatchBattleLoadStart;
|
||||||
|
public ConnectRoomResult ConnectRoomResultType { get; set; }
|
||||||
|
public bool IsEnterErrorDeckCount { get; set; }
|
||||||
|
public bool IsTournament { get; set; }
|
||||||
|
public bool IsTournamentSettled { get; set; }
|
||||||
|
public bool IsTournamentTimeOutCheack { get; set; }
|
||||||
|
public string RoomID { get; set; }
|
||||||
|
public bool IsEnableGuildInviteButton { get; set; }
|
||||||
|
public bool IsJoinGuild { get; set; }
|
||||||
|
public string DisplayRoomID { get; set; }
|
||||||
|
public bool CanUseNonPossessionCard { get; set; }
|
||||||
|
public RoomBase RoomUIClass { get; set; }
|
||||||
|
public Matching MatchingClass { get; set; }
|
||||||
|
public static RoomDialog RoomDialog { get; set; }
|
||||||
|
public bool IsDisconnectSelf { get; set; }
|
||||||
|
public RealTimeNetworkAgent NetworkAgent { get; set; }
|
||||||
|
public RoomFormatEventHandler FormatEventHandler { get; set; }
|
||||||
|
public PlayerController OwnCtrl { get; set; }
|
||||||
|
public PlayerController OppoCtrl { get; set; }
|
||||||
|
public OpenRoomBattleGetRecoveryParamTask RecoveryTask { get; set; }
|
||||||
|
public PositionMode PositionModeValue { get; set; }
|
||||||
|
public BattleParameter BattleParameterInstance { get; set; }
|
||||||
|
public static bool IsAlreadyStartBattle { get; set; }
|
||||||
|
public FirstTurn FirstTurnType { get; set; }
|
||||||
|
public bool IsRoomRecovery { get; set; }
|
||||||
|
public bool IsConvention { get; set; }
|
||||||
|
public bool IsGuildChatPost { get; set; }
|
||||||
|
public ConventionInfo ConventionInfo { get; set; }
|
||||||
|
public long SelfSleeveIdForTwoPick { get; set; }
|
||||||
|
public bool IsGathering { get; set; }
|
||||||
|
public GatheringAutoJoinTaskInfo GatheringAutoJoinTaskInfo { get; set; }
|
||||||
|
private bool _isAutoJoinEntry { get; set; }
|
||||||
|
public bool IsReceivedInitWatch { get; set; }
|
||||||
|
public bool IsConnect { get; set; }
|
||||||
|
public bool IsAvatar { get; set; }
|
||||||
|
public bool IsMultiDeckHistoryClearSoon { get; set; }
|
||||||
|
public bool IsMultiDeckRule { get; set; }
|
||||||
|
public int SelectDeckCount { get; set; }
|
||||||
|
public int BattleUseDeckCount { get; set; }
|
||||||
|
public bool IsShowHighRankFormat { get; set; }
|
||||||
|
public bool IsTwoPick { get; set; }
|
||||||
|
public bool IsChaosFormat { get; set; }
|
||||||
|
public bool IsTwoPickDraftAPI { get; set; }
|
||||||
|
public bool IsWatch { get; set; }
|
||||||
|
public bool IsPlayer { get; set; }
|
||||||
|
public bool IsPermitFriendWatch { get; set; }
|
||||||
|
public bool IsPermitGuildWatch { get; set; }
|
||||||
|
public bool IsConventionRematchEnable { get; set; }
|
||||||
|
public bool IsEnableTurnSelect { get; set; }
|
||||||
|
public static bool IsDeckBanRule(BattleRule rule) => default!;
|
||||||
|
public static bool IsMultiDeck(BattleRule rule) => default!;
|
||||||
|
public static bool IsTwoPickFormat(NetworkDefine.ServerBattleType type) => default!;
|
||||||
|
public static bool IsShowHighRankRoomRuleFormat(BattleParameter battleFormatBase) => default!;
|
||||||
|
public static int RuleBattleDeckCount(BattleRule rule) => default!;
|
||||||
|
public static int RuleSelectDeckCount(BattleRule rule) => default!;
|
||||||
|
public static bool IsTwoPickDraftMatchingAPI(TwoPickFormat rule) => default!;
|
||||||
|
public static bool IsNormalMatchingAPI(BattleParameter rule) => default!;
|
||||||
|
public static DataMgr.BattleType RoomRuleToBattleType(BattleParameter battleParameter) => default!;
|
||||||
|
public void SetConventionInfo(ConventionRoomBattleWatchTask watchTask) { }
|
||||||
|
public RoomConnectController(InitializeParameter param) { }
|
||||||
|
public void InitializeWatchEventDispatch() { }
|
||||||
|
public void RemoveWatchEventDispath(bool isOwn) { }
|
||||||
|
public Matching_Room CreateMatchingRoom(bool isConvention, bool isGathering, BattleParameter battleParameter) => default!;
|
||||||
|
public void InitPlayerController() { }
|
||||||
|
public void InitializeOwnPlayer() { }
|
||||||
|
public void InitializeOpponentPlayer() { }
|
||||||
|
public IEnumerator StartConnect(string battleId = "") => default!;
|
||||||
|
private void InitTimeout() { }
|
||||||
|
private void StartTimeout() { }
|
||||||
|
public IEnumerator ConnectRecoveryRoom(OpenRoomBattleGetRecoveryParamTask task) => default!;
|
||||||
|
public IEnumerator ReSetConnectCoroutine(Matching matching) => default!;
|
||||||
|
private IEnumerator TimeMeasurement(float timeout) => default!;
|
||||||
|
public void DestroyRealTimeNetwork() { }
|
||||||
|
private void ExitRoomTask() { }
|
||||||
|
private IEnumerator ConnectRealTimeNetworkAgent(bool isFirstConnect) => default!;
|
||||||
|
private void TimeoutInitNetwork() { }
|
||||||
|
private void ConnectError() { }
|
||||||
|
private bool IsCheckConnectResultType() => default!;
|
||||||
|
private bool _ResultCheck(ConnectRoomResult result, RoomSetupErrorAction errorActionType, Action inDialogCloseAction = null) => default!;
|
||||||
|
public bool IsExistNodeErrorDialog() => default!;
|
||||||
|
private void _GoHome() { }
|
||||||
|
private void _MoveView(NetworkTask.ResultCode in_ResultCode) { }
|
||||||
|
public void ClearRoomRecoveryInfo() { }
|
||||||
|
public void CommonResultCodeError(int code) { }
|
||||||
|
private bool ResultCodeError(int code) => default!;
|
||||||
|
private bool ResultCodeErrorForWatcher(int code) => default!;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// AUTO-GENERATED no-op stubs (m1_stub_gen) from Shadowverse_Code_2026-05-23\Wizard.RoomMatch\RoomConnectController.cs
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using Convention;
|
||||||
|
using Cute;
|
||||||
|
using LitJson;
|
||||||
|
using UnityEngine;
|
||||||
|
using Wizard.ErrorDialog;
|
||||||
|
namespace Wizard.RoomMatch
|
||||||
|
{
|
||||||
|
public partial class RoomConnectController
|
||||||
|
{
|
||||||
|
public partial class InitializeParameter
|
||||||
|
{
|
||||||
|
public string RoomId { get; set; }
|
||||||
|
public PositionMode PositionModeType { get; set; }
|
||||||
|
public BattleParameter BattleParameterInstance { get; set; }
|
||||||
|
public ConventionInfo ConventionInfo { get; set; }
|
||||||
|
public bool IsPermitFriendWatch { get; set; }
|
||||||
|
public bool IsPermitGuildWatch { get; set; }
|
||||||
|
public bool IsConvention { get; set; }
|
||||||
|
public bool IsEnableConventionRematch { get; set; }
|
||||||
|
public bool IsEnableTurnSelect { get; set; }
|
||||||
|
public bool IsGuildChatPost { get; set; }
|
||||||
|
public bool IsGathering { get; set; }
|
||||||
|
public GatheringAutoJoinTaskInfo GatheringAutoJoinTaskInfo { get; set; }
|
||||||
|
public InitializeParameter(PositionMode positionMode, BattleParameter battleParameter, string roomId) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
19
SVSim.BattleEngine/Shim/Generated/RoomRuleSetting.g.cs
Normal file
19
SVSim.BattleEngine/Shim/Generated/RoomRuleSetting.g.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
// AUTO-GENERATED no-op stubs (m1_stub_gen) from Shadowverse_Code_2026-05-23\Wizard.RoomMatch\RoomRuleSetting.cs
|
||||||
|
using System;
|
||||||
|
namespace Wizard.RoomMatch
|
||||||
|
{
|
||||||
|
public partial class RoomRuleSetting
|
||||||
|
{
|
||||||
|
public Action OnDecide;
|
||||||
|
public Action OnCancel;
|
||||||
|
public BattleParameter BattleParameterInstance { get; set; }
|
||||||
|
public bool EnableFriendWatch { get; set; }
|
||||||
|
public bool EnableGuildWatch { get; set; }
|
||||||
|
public bool Is2Pick { get; set; }
|
||||||
|
public RoomRuleSetting() { }
|
||||||
|
public void CopyFrom(RoomRuleSetting src) { }
|
||||||
|
public static string GetTopBarString(BattleParameter battleParameter, bool isTournament) => default!;
|
||||||
|
public static string GetBattleTypeString(BattleParameter battleParameter) => default!;
|
||||||
|
public static string GetWinTypeString(RoomConnectController.BattleRule rule) => default!;
|
||||||
|
}
|
||||||
|
}
|
||||||
66
SVSim.BattleEngine/Shim/Generated/SelectedStoryInfo.g.cs
Normal file
66
SVSim.BattleEngine/Shim/Generated/SelectedStoryInfo.g.cs
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
// AUTO-GENERATED no-op stubs (m1_stub_gen) from Shadowverse_Code_2026-05-23\Wizard.Story\SelectedStoryInfo.cs
|
||||||
|
namespace Wizard.Story
|
||||||
|
{
|
||||||
|
public partial class SelectedStoryInfo
|
||||||
|
{
|
||||||
|
public StoryEntranceType StoryEntranceType { get; set; }
|
||||||
|
public StorySectionData SectionData { get; set; }
|
||||||
|
public ClassCharacterMasterData SectionCharaData { get; set; }
|
||||||
|
public ClassCharacterMasterData ChapterCharaData { get; set; }
|
||||||
|
public StoryChapterData ChapterData { get; set; }
|
||||||
|
public int? SubChapterId { get; set; }
|
||||||
|
public ScenarioPart Part { get; set; }
|
||||||
|
public ScenarioOption Option { get; set; }
|
||||||
|
public ScenarioTemporaryVoice.DownloadInfo TemporaryVoiceDownloadInfo { get; set; }
|
||||||
|
public int? ReleasedChapterNum { get; set; }
|
||||||
|
public int? ReplayChapterIndex { get; set; }
|
||||||
|
public string[] UnlockedSelections { get; set; }
|
||||||
|
public string ChosenUnlockChapterId { get; set; }
|
||||||
|
public bool IsFailure { get; set; }
|
||||||
|
public bool IsRetire { get; set; }
|
||||||
|
public bool IsGoBadEnd { get; set; }
|
||||||
|
public int StoryId { get; set; }
|
||||||
|
public int SectionId { get; set; }
|
||||||
|
public int? SectionCharaId { get; set; }
|
||||||
|
public int? SectionClassId { get; set; }
|
||||||
|
public int? ChapterCharaId { get; set; }
|
||||||
|
public int? ChapterClassId { get; set; }
|
||||||
|
public string ChapterId { get; set; }
|
||||||
|
public UIManager.ViewScene ChapterSelectionView { get; set; }
|
||||||
|
public bool IsTutorialCategory { get; set; }
|
||||||
|
public bool IsTutorial { get; set; }
|
||||||
|
public bool IsTutorialReplay { get; set; }
|
||||||
|
public StoryApiType StoryApiType { get; set; }
|
||||||
|
public string NextChapterId { get; set; }
|
||||||
|
public StoryChapterData.ChapterClearStatus ClearStatus { get; set; }
|
||||||
|
public string LastChapterClearTextId { get; set; }
|
||||||
|
public bool ExistsSecondHalfStory { get; set; }
|
||||||
|
public bool ExistsBattle { get; set; }
|
||||||
|
public bool IsSkipBattle { get; set; }
|
||||||
|
public bool IsDoBattle { get; set; }
|
||||||
|
public bool IsFixedDeck { get; set; }
|
||||||
|
public bool IsClassTutorial { get; set; }
|
||||||
|
public bool IsReleasedAnotherEnding { get; set; }
|
||||||
|
public string RouteName { get; set; }
|
||||||
|
public bool IsFirstHalf { get; set; }
|
||||||
|
public bool IsSecondHalf { get; set; }
|
||||||
|
public bool IsPlayVoice { get; set; }
|
||||||
|
public int[] StartStoryIds { get; set; }
|
||||||
|
public int FinishStoryId { get; set; }
|
||||||
|
public int[] AllSubStoryIds { get; set; }
|
||||||
|
public SelectedStoryInfo(StoryEntranceType type) { }
|
||||||
|
public void ClearInfoForSectionSelectionScene() { }
|
||||||
|
public void ClearInfoForLeaderSelectionScene() { }
|
||||||
|
public void ClearInfoForChapterSelectionScene() { }
|
||||||
|
public void SetSection(int sectionId) { }
|
||||||
|
public void SetSection(StorySectionData sectionData) { }
|
||||||
|
public void SetSectionChara(int? charaId) { }
|
||||||
|
public void SetSectionChara(ClassCharacterMasterData charaData) { }
|
||||||
|
public void SetChapterChara(int? charaId) { }
|
||||||
|
public void SetChapterChara(ClassCharacterMasterData charaData) { }
|
||||||
|
public void SetChapter(string chapterId, int? subChapterId) { }
|
||||||
|
public void SetChapter(StoryChapterData chapterData, int? subChapterId) { }
|
||||||
|
public void SetPart(ScenarioPart part) { }
|
||||||
|
public void SetOtherInfo(int releasedChapterNum, int? replayChapterIndex, string[] unlockedSelections) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
27
SVSim.BattleEngine/Shim/Generated/TabList.g.cs
Normal file
27
SVSim.BattleEngine/Shim/Generated/TabList.g.cs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
// AUTO-GENERATED no-op stubs (m1_stub_gen) from Shadowverse_Code_2026-05-23\Wizard.UI.Common\TabList.cs
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
namespace Wizard.UI.Common
|
||||||
|
{
|
||||||
|
public partial class TabList
|
||||||
|
{
|
||||||
|
private UIGrid _grid;
|
||||||
|
private Tab _partsTab;
|
||||||
|
private Transform _transform_tabOff;
|
||||||
|
private Transform _transform_tabOn;
|
||||||
|
private List<Tab> _tabList;
|
||||||
|
private float _posY_tabOff;
|
||||||
|
private float _posY_tabOn;
|
||||||
|
private bool _isEnableSe;
|
||||||
|
private void Awake() { }
|
||||||
|
public Tab AddTab(UIEventListener.VoidDelegate onClick, string spriteBaseName) => default!;
|
||||||
|
public void Reset() { }
|
||||||
|
public void Reset(bool notSelectTab) { }
|
||||||
|
private void SetGrid() { }
|
||||||
|
public void SelectTabByIndex(int index, bool isForceSet) { }
|
||||||
|
private void SelectTab(Tab target, bool isForceSet) { }
|
||||||
|
private void SetTabListSprites() { }
|
||||||
|
public void SetTabToGrayByIndex(int index, bool disable) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
85
SVSim.BattleEngine/Shim/Generated/VideoHostingHUD.g.cs
Normal file
85
SVSim.BattleEngine/Shim/Generated/VideoHostingHUD.g.cs
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
// AUTO-GENERATED no-op stubs (m1_stub_gen) from Shadowverse_Code_2026-05-23\VideoHostingHUD.cs
|
||||||
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
using Wizard;
|
||||||
|
using Wizard.Dialog.Setting;
|
||||||
|
public partial class VideoHostingHUD
|
||||||
|
{
|
||||||
|
public enum HUDMode
|
||||||
|
{
|
||||||
|
Null,
|
||||||
|
Recording,
|
||||||
|
Publishing
|
||||||
|
}
|
||||||
|
public enum HUDStatus
|
||||||
|
{
|
||||||
|
Idle,
|
||||||
|
Playing,
|
||||||
|
Pause
|
||||||
|
}
|
||||||
|
private static readonly string SETTING_BUTTON_SPRITENAME_PUB_OFF;
|
||||||
|
private static readonly string SETTING_BUTTON_SPRITENAME_PUB_ON;
|
||||||
|
private static readonly string SETTING_BUTTON_SPRITENAME_REC_OFF;
|
||||||
|
private static readonly string SETTING_BUTTON_SPRITENAME_REC_ON;
|
||||||
|
private const float DELAY_PLAY_SEC = 0.3f;
|
||||||
|
private const float STATUSPOPUP_ALPHA_MIN = 0f;
|
||||||
|
private const float STATUSPOPUP_ALPHA_MAX = 1f;
|
||||||
|
private const float STATUSPOPUP_ALPHA_SPEED = 1f;
|
||||||
|
private static readonly Vector3 STATUSPOPUP_LABEL_POS_PUBLISHING;
|
||||||
|
private static readonly Vector3 STATUSPOPUP_LABEL_POS_RECORDING;
|
||||||
|
public static int CONTROLBUTTON_LAYER_DEFAULT;
|
||||||
|
public static int CONTROLBUTTON_LAYER_BATTLE;
|
||||||
|
private UIPanel _statusPopupPanel;
|
||||||
|
private UILabel _statusPopupLabel;
|
||||||
|
private UISprite _statusPopupRecSprite;
|
||||||
|
private float _statusPopupAlpha;
|
||||||
|
private bool _statusPopupAlphaDown;
|
||||||
|
private GameObject _controlButtonRoot;
|
||||||
|
private UIButton _playButton;
|
||||||
|
private UILabel _playButtonLabel;
|
||||||
|
private UIButton _settingButton;
|
||||||
|
private UISprite _settingButtonSprite;
|
||||||
|
private HUDMode _mode;
|
||||||
|
private HUDStatus _status;
|
||||||
|
private Coroutine _coroutine;
|
||||||
|
private DialogBase _menuDialog;
|
||||||
|
private VideoHostingHUDFaceCamera _faceCamera;
|
||||||
|
private bool _isInitialized;
|
||||||
|
private bool _isReqInitFromSystem;
|
||||||
|
private void Awake() { }
|
||||||
|
private void Start() { }
|
||||||
|
private void OnDestroy() { }
|
||||||
|
private void Update() { }
|
||||||
|
public bool GetInitialized() => default!;
|
||||||
|
public void SetReqInitFromSystem(bool isReq) { }
|
||||||
|
private void _InitStatusFromSystem() { }
|
||||||
|
public void Init(HUDMode mode) { }
|
||||||
|
private void _SetStatus(HUDStatus status) { }
|
||||||
|
public bool IsSettingMenuDialogOpen() => default!;
|
||||||
|
public void CloseSettingMenuDialog() { }
|
||||||
|
private void ChangeControlPopupStatus(HUDMode mode, HUDStatus status) { }
|
||||||
|
private void ChangeControlButtonStatus(HUDMode mode, HUDStatus status) { }
|
||||||
|
public void SetControlButtonLayer(int layer) { }
|
||||||
|
public void SetPushEnablePlay(bool isEnable) { }
|
||||||
|
public void SetPushEnableSetting(bool isEnable) { }
|
||||||
|
private void UpdatePopup() { }
|
||||||
|
private static bool UpdatePingPongByDeltaTime(ref float val, float min, float max, float speed, bool isdown) => default!;
|
||||||
|
public void InitFaceCameraAdjust() { }
|
||||||
|
public void EndFaceCameraAdjust() { }
|
||||||
|
public void SetFaceCameraAdjustSwitchEnable(bool isEnable) { }
|
||||||
|
public bool GetFaceCameraAdjustSwitchEnable() => default!;
|
||||||
|
public Transform GetFaceCameraWindowLocator() => default!;
|
||||||
|
private void OnClickButtonPlay() { }
|
||||||
|
private void _DelayPlay() { }
|
||||||
|
private void OnClickButtonSetting() { }
|
||||||
|
private void OnCloseRecordingMenu() { }
|
||||||
|
private void OnStartAdjustFaceCameraWindow() { }
|
||||||
|
private void OnEndAdjustFaceCameraWindow() { }
|
||||||
|
public void OnStartRecording() { }
|
||||||
|
public void OnFinishRecording() { }
|
||||||
|
public void OnPauseRecording() { }
|
||||||
|
public void OnResumeRecording() { }
|
||||||
|
public void OnStartPublishing() { }
|
||||||
|
public void OnFinishPublishing() { }
|
||||||
|
public void OnPausePublishing() { }
|
||||||
|
}
|
||||||
@@ -3,6 +3,34 @@
|
|||||||
// later frontier wave and can be filled by m1_stub_gen --type <Name>.
|
// later frontier wave and can be filled by m1_stub_gen --type <Name>.
|
||||||
public partial class FadeManager { }
|
public partial class FadeManager { }
|
||||||
public partial class FriendBase { }
|
public partial class FriendBase { }
|
||||||
|
public partial class RoomDialog { }
|
||||||
|
public partial class VideoHostingHUDFaceCamera { }
|
||||||
|
|
||||||
|
namespace Wizard
|
||||||
|
{
|
||||||
|
public partial class ConventionRoomBattleWatchTask { }
|
||||||
|
public partial class OpenRoomBattleGetRecoveryParamTask { }
|
||||||
|
public partial class ScenarioOption { }
|
||||||
|
public partial class ScenarioTemporaryVoice { public partial class DownloadInfo { } }
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Wizard.RoomMatch
|
||||||
|
{
|
||||||
|
public partial class PlayerController { }
|
||||||
|
public partial class RoomBase { }
|
||||||
|
public partial class RoomFormatEventHandler { }
|
||||||
|
public partial class RoomWatchEventDispatch { }
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Wizard.UI.Common
|
||||||
|
{
|
||||||
|
public partial class Tab { }
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Wizard.UI.Dialog.ImageSelection
|
||||||
|
{
|
||||||
|
public partial class ImageSelectionBaseUI { }
|
||||||
|
}
|
||||||
|
|
||||||
namespace Wizard.Battle.UI
|
namespace Wizard.Battle.UI
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -135,10 +135,7 @@ public partial class UIManager : UnityEngine.MonoBehaviour
|
|||||||
public static UIManager GetIns() => GetInstance();
|
public static UIManager GetIns() => GetInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class VideoHostingHUD
|
// VideoHostingHUD (members + HUDMode enum) provided by Generated/VideoHostingHUD.g.cs
|
||||||
{
|
|
||||||
public enum HUDMode { Null, Recording, Publishing }
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace Wizard
|
namespace Wizard
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ namespace Wizard.Story.ChapterSelection.SelectionProcessing.BattleResult
|
|||||||
namespace Wizard.RoomMatch
|
namespace Wizard.RoomMatch
|
||||||
{
|
{
|
||||||
public class PlayerControllerForWatching { }
|
public class PlayerControllerForWatching { }
|
||||||
public class RoomRuleSetting { }
|
public partial class RoomRuleSetting { }
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Cute
|
namespace Cute
|
||||||
@@ -100,7 +100,7 @@ namespace Cute
|
|||||||
namespace Wizard.Story
|
namespace Wizard.Story
|
||||||
{
|
{
|
||||||
public enum StoryApiType { None, MainStory, LimitedStory, EventStory }
|
public enum StoryApiType { None, MainStory, LimitedStory, EventStory }
|
||||||
public class SelectedStoryInfo { }
|
public partial class SelectedStoryInfo { }
|
||||||
public sealed class StoryWorldDataManager { }
|
public sealed class StoryWorldDataManager { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,9 +108,10 @@ namespace BestHTTP.SocketIO
|
|||||||
{
|
{
|
||||||
public sealed class Packet { }
|
public sealed class Packet { }
|
||||||
public sealed class Socket { }
|
public sealed class Socket { }
|
||||||
|
// SocketManager is a BestHTTP SDK type — minimal hand shim (full-surface would pull
|
||||||
|
// the whole SocketIO SDK closure). Members filled on demand as the frontier needs them.
|
||||||
public sealed class SocketManager
|
public sealed class SocketManager
|
||||||
{
|
{
|
||||||
// Connection state enum the network agent polls (Initial/Open referenced).
|
|
||||||
public enum States { Initial, Opening, Open, Paused, Reconnecting, Closed }
|
public enum States { Initial, Opening, Open, Paused, Reconnecting, Closed }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ namespace Wizard.Battle.View.Vfx
|
|||||||
public class EvolveVfxBase : VfxBase { }
|
public class EvolveVfxBase : VfxBase { }
|
||||||
public class CanNotTouchCardVfx : VfxBase { }
|
public class CanNotTouchCardVfx : VfxBase { }
|
||||||
|
|
||||||
public interface ICardVfxCreator { }
|
public partial interface ICardVfxCreator { }
|
||||||
public interface IBattleCardVfxCreator { }
|
public interface IBattleCardVfxCreator { }
|
||||||
|
|
||||||
// The VFX manager: headless, registration is suppressed (real VfxMgr early-returns
|
// The VFX manager: headless, registration is suppressed (real VfxMgr early-returns
|
||||||
|
|||||||
@@ -7,11 +7,11 @@
|
|||||||
|
|
||||||
namespace Wizard.Battle.View
|
namespace Wizard.Battle.View
|
||||||
{
|
{
|
||||||
public interface IReadOnlyVoiceInfo { }
|
public partial interface IReadOnlyVoiceInfo { }
|
||||||
public class BattleCardView
|
public partial class BattleCardView
|
||||||
{
|
{
|
||||||
public class BuildInfo { }
|
public class BuildInfo { }
|
||||||
public class AttackTargetSelectInfo { }
|
// AttackTargetSelectInfo provided by Generated/BattleCardView_AttackTargetSelectInfo.g.cs
|
||||||
}
|
}
|
||||||
public class NonDialogPopup { public virtual void Close() { } }
|
public class NonDialogPopup { public virtual void Close() { } }
|
||||||
public abstract class BattlePlayerViewBase
|
public abstract class BattlePlayerViewBase
|
||||||
@@ -65,12 +65,8 @@ namespace Wizard.Replay
|
|||||||
namespace Wizard.RoomMatch
|
namespace Wizard.RoomMatch
|
||||||
{
|
{
|
||||||
public class WatchDataHandler { }
|
public class WatchDataHandler { }
|
||||||
public class RoomConnectController
|
// RoomConnectController (members + BattleRule/PositionMode enums + InitializeParameter)
|
||||||
{
|
// provided by Generated/RoomConnectController*.g.cs
|
||||||
public enum BattleRule { None, Bo1 }
|
|
||||||
public enum PositionMode { OWNER, VISITOR, WATCHER }
|
|
||||||
public class InitializeParameter { }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Wizard.Story
|
namespace Wizard.Story
|
||||||
@@ -80,10 +76,10 @@ namespace Wizard.Story
|
|||||||
|
|
||||||
namespace Wizard.UI.Common
|
namespace Wizard.UI.Common
|
||||||
{
|
{
|
||||||
public class TabList { }
|
public partial class TabList : UnityEngine.MonoBehaviour { }
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Wizard.UI.Dialog.ImageSelection
|
namespace Wizard.UI.Dialog.ImageSelection
|
||||||
{
|
{
|
||||||
public class ImageSelection { }
|
public partial class ImageSelection : UnityEngine.MonoBehaviour { }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user