Files
gamer147 0d9d8acae0 feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
2026-06-05 16:57:20 -04:00

1168 lines
46 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Cute;
using LitJson;
using UnityEngine;
using Wizard.Battle.Mulligan;
using Wizard.Battle.Operation;
using Wizard.Battle.Phase;
using Wizard.Battle.Touch;
using Wizard.Battle.View;
using Wizard.Battle.View.Vfx;
namespace Wizard.Battle.Recovery;
public class RecoveryDataHandler
{
protected bool isEmitEnterRoom;
protected NetworkBattleManagerBase _networkBattleMgr;
protected StockReceiveMgr stockReceiveMessageMgr = new StockReceiveMgr("seq");
protected Coroutine _coroutineInBattle;
protected const string DATA_PARAM_VID = "vid";
protected const string DATA_PARAM_URI = "uri";
protected const string DATA_PARAM_TIME = "time";
private readonly List<NetworkBattleDefine.NetworkBattleURI> RecoveryExceptUriList = new List<NetworkBattleDefine.NetworkBattleURI>
{
NetworkBattleDefine.NetworkBattleURI.ChatStamp,
NetworkBattleDefine.NetworkBattleURI.Touch,
NetworkBattleDefine.NetworkBattleURI.TurnEndReady,
NetworkBattleDefine.NetworkBattleURI.SelectSkill,
NetworkBattleDefine.NetworkBattleURI.SlideObject,
NetworkBattleDefine.NetworkBattleURI.SelectObject
};
private NetworkBattleDefine.NetworkBattleURI _hasSequenceUri;
private int _hasSequenceResult;
private bool _isPlayerSend;
private bool _isOpponentDisconnect;
private Coroutine _timeOutCoroutine;
private bool isFirstTimeSet;
private DateTime _firstTime;
private DateTime _lastTime;
private float _pastTime;
private DateTime _battleStartDate;
private const int TIMEOUT_TIME = 10;
private JsonData jsonObject;
private Action OnFinishRecoveryLogSync;
private bool isTurnStartWithNoAction;
private CanNotTouchCardVfx _canNotTouchCardVfx;
private const float FUSION_WAIT_TIME = 0.3f;
private const string RECOVERY_KEY = "operations";
private const string OPERATION_KEY = "operation";
private const string SEQ_KEY = "seq";
private const string PLAY_KEY = "play";
private const string BOOL_KEY = "bool";
private const string INDEX_KEY = "index";
private const string SKILL_TARGET_KEY = "skill_target";
private const string TARGET_KEY = "target";
private const string ATTACK_KEY = "attack";
private const string EVOLVE_KEY = "evolve";
private const string MULLIGAN_KEY = "mulligan";
private const string MULLIGAN_ABANDON = "abandoned_cards";
private const string TURN_END_KEY = "turn_end";
private const string IS_BURIAL_RITE_KEY = "is_burial_rite";
public const string IS_CHOICE_BRAVE_KEY = "is_choice_brave";
private const string START_CHOICE_KEY = "start_choice";
private const string START_SELECT_KEY = "start_select";
public const string START_FUSION_KEY = "start_fusion";
private const string SELECT_KEY = "select";
public const string SELECT_FUSION_KEY = "select_fusion";
private const string CANCEL_SELECT_KEY = "cancel_select";
private const string CANCEL_CHOICE_KEY = "cancel_choice";
public const string CANCEL_FUSION_KEY = "cancel_fusion";
private const string COMP_CHOICE_KEY = "comp_choice";
private const string COMP_SELECT_KEY = "comp_select";
public const string COMP_FUSION = "comp_fusion";
private List<object> _mulliganList = new List<object>();
private int playIndex;
public int receivedMaxSequenceNum { get; protected set; }
public event Action OnCompleteRecovery;
public RecoveryDataHandler(NetworkBattleManagerBase networkbattleManager, Action onFinishRecoveringData, Action onFinishRecoveryLogSync, RecoveryOperationInfo aiBattleRecoveryData = null)
{
OnFinishRecoveryLogSync = onFinishRecoveryLogSync;
if (GameMgr.GetIns().IsAINetwork)
{
if (aiBattleRecoveryData != null)
{
AISetup(networkbattleManager, onFinishRecoveringData, aiBattleRecoveryData);
}
else
{
RecoveryManagerBase.OpenRecoveryFailedDialog();
}
return;
}
string text = OperationRecorderBase.RecordDirectoryPath + "recovery_network.json";
if (File.Exists(text))
{
jsonObject = RecoveryOperationInfo.ReadRecoveryFile(text);
Setup(networkbattleManager, onFinishRecoveringData);
}
else
{
RecoveryManagerBase.OpenRecoveryFailedDialog();
}
}
private void Setup(NetworkBattleManagerBase networkbattleManager, Action onFinishRecoveringData)
{
_networkBattleMgr = networkbattleManager;
_coroutineInBattle = BattleCoroutine.GetInstance().StartCoroutine(StockDataPlayer(onFinishRecoveringData));
}
private void AISetup(NetworkBattleManagerBase networkbattleManager, Action onFinishRecoveringData, RecoveryOperationInfo aiBattleRecoveryData)
{
_networkBattleMgr = networkbattleManager;
_coroutineInBattle = BattleCoroutine.GetInstance().StartCoroutine(AIStockDataPlayer(onFinishRecoveringData, aiBattleRecoveryData));
}
public virtual void Stop()
{
BattleCoroutine.GetInstance().StopCoroutine(_coroutineInBattle);
}
public void OnBattleReceived()
{
Dictionary<string, object> play_list = Data.BattleRecoveryInfo.play_list;
if (play_list != null && play_list.ContainsKey("uri"))
{
string text = play_list["uri"].ToString();
if (text != null && text == "Watch")
{
ParseBattleWatchData(play_list);
}
}
}
private void ParseBattleWatchData(Dictionary<string, object> received)
{
if (!received.TryGetValue("playlist", out var value) || !(value is List<object> list))
{
return;
}
for (int i = 0; i < list.Count; i++)
{
Dictionary<string, object> dictionary = list[i] as Dictionary<string, object>;
int num = int.Parse(dictionary["seq"].ToString());
if (receivedMaxSequenceNum < num)
{
receivedMaxSequenceNum = int.Parse(dictionary["seq"].ToString());
}
if (stockReceiveMessageMgr.CheckStockData(dictionary))
{
stockReceiveMessageMgr.StockData(dictionary);
}
}
}
public int GetWatchSequenceNum()
{
return stockReceiveMessageMgr.GetMaxSequenceNumber();
}
public int GetCurrentSequenceNumber()
{
return stockReceiveMessageMgr.SequenceAlreadyNumber;
}
protected IEnumerator StockDataPlayer(Action onFinishRecoveringData)
{
while (true)
{
if ((bool)ToolboxGame.RealTimeNetworkAgent && !ToolboxGame.RealTimeNetworkAgent.IsPlayReceiveDataOk())
{
yield return null;
continue;
}
if (stockReceiveMessageMgr.SequenceAlreadyNumber == GetWatchSequenceNum())
{
_networkBattleMgr.GetNetworkBattleReceiver().CheckLatestReplayInfoInRecoveryExceptUriList();
CallRecoveryFinish(onFinishRecoveringData, waitForAck: true);
}
Dictionary<string, object> dictionary = stockReceiveMessageMgr.FindData(stockReceiveMessageMgr.SequenceAlreadyNumber + 1);
if (dictionary != null)
{
bool flag = isOwner(dictionary["vid"].ToString());
string value = dictionary["uri"].ToString();
if (!Enum.IsDefined(typeof(NetworkBattleDefine.NetworkBattleURI), value))
{
NextStockReceive(dictionary);
continue;
}
NetworkBattleDefine.NetworkBattleURI networkBattleURI = (NetworkBattleDefine.NetworkBattleURI)Enum.Parse(typeof(NetworkBattleDefine.NetworkBattleURI), value);
if (networkBattleURI == NetworkBattleDefine.NetworkBattleURI.PlayActions || networkBattleURI == NetworkBattleDefine.NetworkBattleURI.TurnStart || networkBattleURI == NetworkBattleDefine.NetworkBattleURI.TurnEndActions || networkBattleURI == NetworkBattleDefine.NetworkBattleURI.Echo)
{
ToolboxGame.RealTimeNetworkAgent.AddActionSequence();
LocalLog.AccumulateLastTraceLog("uri:" + networkBattleURI.ToString() + " ActionSeq:" + ToolboxGame.RealTimeNetworkAgent.GetActionSequenceCount() + " Recovery");
}
if (networkBattleURI == NetworkBattleDefine.NetworkBattleURI.BattleStart)
{
DateTime battleStartDate = ((!dictionary.ContainsKey(NetworkBattleDefine.NetworkParameterNames[NetworkBattleDefine.NetworkParameter.battleStartDate])) ? GetCulculateWaitTime(double.Parse(dictionary["time"].ToString())) : new DateTime(long.Parse(dictionary[NetworkBattleDefine.NetworkParameterNames[NetworkBattleDefine.NetworkParameter.battleStartDate]].ToString())));
_battleStartDate = battleStartDate;
ToolboxGame.RealTimeNetworkAgent.SetIsBattleStart(flag: true);
}
if (networkBattleURI == NetworkBattleDefine.NetworkBattleURI.JudgeResult)
{
_hasSequenceResult = int.Parse(dictionary[NetworkBattleDefine.NetworkParameterNames[NetworkBattleDefine.NetworkParameter.result]].ToString());
}
RecordLogTime(dictionary, networkBattleURI);
CheckNoAction(flag, networkBattleURI);
if (!flag)
{
bool isOpponentDisconnected = ToolboxGame.RealTimeNetworkAgent.IsOpponentDisconnected;
bool flag2 = networkBattleURI == NetworkBattleDefine.NetworkBattleURI.OppoDisconnect;
_isOpponentDisconnect = isOpponentDisconnected || flag2;
}
if (!RecoveryExceptUriList.Contains(networkBattleURI))
{
if (networkBattleURI != NetworkBattleDefine.NetworkBattleURI.OppoDisconnect && networkBattleURI != NetworkBattleDefine.NetworkBattleURI.RecoveryStart && networkBattleURI != NetworkBattleDefine.NetworkBattleURI.RecoveryEnd && (networkBattleURI != NetworkBattleDefine.NetworkBattleURI.JudgeResult || _hasSequenceResult != 0))
{
_hasSequenceUri = networkBattleURI;
_isPlayerSend = flag;
}
if (networkBattleURI == NetworkBattleDefine.NetworkBattleURI.TurnStart && flag)
{
_networkBattleMgr.BattlePlayer.PlayerEmotion.ResetPlayCount();
}
_networkBattleMgr.GetNetworkBattleReceiver().ReceivedMessage(networkBattleURI, isHaveSequence: true, dictionary, flag, null, checkBreakData: false);
if (_hasSequenceUri == NetworkBattleDefine.NetworkBattleURI.TurnEndFinal || _hasSequenceUri == NetworkBattleDefine.NetworkBattleURI.BattleFinish || _hasSequenceUri == NetworkBattleDefine.NetworkBattleURI.Retire)
{
CallRecoveryFinish(onFinishRecoveringData, waitForAck: false);
}
}
else
{
_networkBattleMgr.GetNetworkBattleReceiver().RecordReplayInfoInRecoveryExceptUriList(networkBattleURI, isHaveSequence: true, dictionary, flag);
}
if (networkBattleURI == NetworkBattleDefine.NetworkBattleURI.ChatStamp && flag)
{
_networkBattleMgr.BattlePlayer.PlayerEmotion.AddPlayCount();
}
NextStockReceive(dictionary);
}
yield return null;
}
}
private void NextStockReceive(Dictionary<string, object> frontData)
{
stockReceiveMessageMgr.UpdateSequenceAlreadyNumber(frontData);
stockReceiveMessageMgr.RemoveSelectData(frontData);
}
protected IEnumerator AIStockDataPlayer(Action onFinishRecoveringData, RecoveryOperationInfo aiBattleRecoveryData)
{
if (!aiBattleRecoveryData.SetupInfo.HasMulliganInfo)
{
yield return null;
AICallRecoveryFinish(onFinishRecoveringData, waitForAck: true, aiBattleRecoveryData);
}
else
{
SingleMulliganMgr singleMulliganMgr = new SingleMulliganMgr();
MulliganInfoControl component = GameMgr.GetIns().GetGameObjMgr().AddUIContainerChildPrefab("Prefab/UI/MulliganInfo")
.GetComponent<MulliganInfoControl>();
singleMulliganMgr.InitMulligan(component, _networkBattleMgr.BattlePlayer.PlayerBattleView);
SkillProcessor skillProcessor = new SkillProcessor();
singleMulliganMgr.MulliganStartDraw(aiBattleRecoveryData.SetupInfo.DidPlayerGoFirst, skillProcessor);
foreach (int playerMulliganReplaceCard in aiBattleRecoveryData.SetupInfo.PlayerMulliganReplaceCards)
{
int cardIndex = playerMulliganReplaceCard;
BattleCardBase battleCardBase = _networkBattleMgr.BattlePlayer.HandCardList.SingleOrDefault((BattleCardBase c) => c.Index == cardIndex);
if (battleCardBase != null)
{
singleMulliganMgr.AbandonList.Add(battleCardBase);
}
}
singleMulliganMgr.Submit(BattleManagerBase.GetIns());
singleMulliganMgr.GetMulliganInfo().SetPlayerReady();
IEnumerable<IOperationCommand> _commands = aiBattleRecoveryData.ActionCommands;
EnemyAI ai = BattleManagerBase.GetIns().EnemyAI as EnemyAI;
while (_commands.Any())
{
IOperationCommand operationCommand = _commands.FirstOrDefault();
if (operationCommand != null)
{
bool isSelfTurn = _networkBattleMgr.BattlePlayer.IsSelfTurn;
operationCommand.Operation(_networkBattleMgr);
ai.UpdateAICurrentVirtualField();
if (operationCommand is TurnEndOperationCommand && !_networkBattleMgr.IsBattleEnd)
{
if (isSelfTurn)
{
_networkBattleMgr.ControlTurnStartOpponent();
}
else
{
_networkBattleMgr.ControlTurnStartPlayer();
}
ai.UpdateAICurrentVirtualField();
}
}
_commands = _commands.Skip(1);
yield return null;
}
if (_networkBattleMgr.BattlePlayer.IsSelfTurn)
{
_networkBattleMgr.BattlePlayer.TurnStartEffectEnd();
}
AICallRecoveryFinish(onFinishRecoveringData, waitForAck: true, aiBattleRecoveryData);
}
yield return null;
}
private void CheckNoAction(bool isPlayer, NetworkBattleDefine.NetworkBattleURI uri)
{
if (isPlayer)
{
switch (uri)
{
case NetworkBattleDefine.NetworkBattleURI.TurnStart:
isTurnStartWithNoAction = true;
break;
default:
isTurnStartWithNoAction = false;
break;
case NetworkBattleDefine.NetworkBattleURI.OppoDisconnect:
case NetworkBattleDefine.NetworkBattleURI.RecoveryStart:
case NetworkBattleDefine.NetworkBattleURI.RecoveryEnd:
break;
}
}
}
private void RecordLogTime(Dictionary<string, object> frontData, NetworkBattleDefine.NetworkBattleURI uri)
{
if (!frontData.ContainsKey("time"))
{
return;
}
if (!_networkBattleMgr._recoveryController.IsMariganFinished)
{
if (!isFirstTimeSet)
{
isFirstTimeSet = true;
_firstTime = GetCulculateWaitTime(double.Parse(frontData["time"].ToString()));
}
}
else if (uri == NetworkBattleDefine.NetworkBattleURI.TurnStart || uri == NetworkBattleDefine.NetworkBattleURI.Ready)
{
isFirstTimeSet = true;
_firstTime = GetCulculateWaitTime(double.Parse(frontData["time"].ToString()));
}
_lastTime = GetCulculateWaitTime(double.Parse(frontData["time"].ToString()));
}
private void CallRecoveryFinish(Action onFinishRecoveringData, bool waitForAck)
{
onFinishRecoveringData.Call();
_networkBattleMgr.SetupFieldAndHandAfterRecovery(delegate
{
CompleteRecovery(waitForAck);
});
}
private void AICallRecoveryFinish(Action onFinishRecoveringData, bool waitForAck, RecoveryOperationInfo aiBattleRecoveryData)
{
onFinishRecoveringData.Call();
_networkBattleMgr._recoveryController = null;
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
if (!aiBattleRecoveryData.SetupInfo.HasMulliganInfo)
{
if (!aiBattleRecoveryData.SetupInfo.HasMulliganInfo)
{
sequentialVfxPlayer = SequentialVfxPlayer.Create(_networkBattleMgr.MulliganMgr.RecoverMulligan(didPlayerSubmitMulligan: false, _networkBattleMgr), InstantVfx.Create(delegate
{
if (_networkBattleMgr.GetCurrentPhase() is RecoveryNetworkBeforeSubmitMulliganPhase recoveryNetworkBeforeSubmitMulliganPhase)
{
recoveryNetworkBeforeSubmitMulliganPhase.RecoveryEnd();
}
}));
}
}
else
{
_networkBattleMgr.ReinitializeTurnPanelControl();
_networkBattleMgr.BattlePlayer.PlayerBattleView.ClearPlayQueue();
if (_networkBattleMgr.BattlePlayer.IsSelfTurn)
{
_networkBattleMgr.BattlePlayer.TurnStartEffectEnd();
}
_networkBattleMgr.SetupFieldAndHandAfterRecovery(null, aiBattleRecoveryData);
ParallelVfxPlayer vfx = ParallelVfxPlayer.Create(InstantVfx.Create(delegate
{
GameMgr.GetIns().GetBattleCtrl().StartCoroutine(FontChanger.FontChange(null));
}), _networkBattleMgr.BattlePlayer.Recovery(), _networkBattleMgr.BattleEnemy.Recovery());
IBattlePlayerView battlePlayerView = (_networkBattleMgr.BattleEnemy.IsSelfTurn ? _networkBattleMgr.BattleEnemy.BattleView : _networkBattleMgr.BattlePlayer.BattleView);
sequentialVfxPlayer.Register(vfx);
sequentialVfxPlayer.Register(HandViewBase.CreateHideCardMeshesVfx(_networkBattleMgr.BattleEnemy.HandCardList));
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
_networkBattleMgr.BattlePlayer.UpdateHandCardsPlayability();
}));
sequentialVfxPlayer.Register(battlePlayerView.RecoveryTurnStart());
sequentialVfxPlayer.Register(_networkBattleMgr.GetCurrentPhase().Setup());
}
AIOpenRecovery(aiBattleRecoveryData);
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
_networkBattleMgr.BattlePlayer.PlayerBattleView.ResetTouchable();
if (_canNotTouchCardVfx != null)
{
_canNotTouchCardVfx.End();
_canNotTouchCardVfx = null;
}
_networkBattleMgr.RecoveryEnd();
ToolboxGame.RealTimeNetworkAgent.EndRecovery();
ToolboxGame.UIManager.CloseInSceneLoadingBattle();
}));
sequentialVfxPlayer.Register(_networkBattleMgr.JudgeBattleResult());
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(sequentialVfxPlayer);
}
private void CompleteRecovery(bool waitForAck)
{
Stop();
_networkBattleMgr.RecoveryEnd();
StopTimeOut();
NetworkBattleReceiver.RESULT_CODE rESULT_CODE = _networkBattleMgr.JudgeCurrentFinishStatus();
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
if (_networkBattleMgr.IsBattleEnd)
{
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
_networkBattleMgr.BattlePlayer.PlayerBattleView.HideTurnEndButton();
}));
}
bool flag = false;
bool isCheckTimeOutTurnEnd = true;
switch (rESULT_CODE)
{
case NetworkBattleReceiver.RESULT_CODE.DeckoutWin:
CheckDeckoutResult(sequentialVfxPlayer, isDeckoutWin: true);
break;
case NetworkBattleReceiver.RESULT_CODE.DeckoutLose:
CheckDeckoutResult(sequentialVfxPlayer, isDeckoutWin: false);
break;
case NetworkBattleReceiver.RESULT_CODE.NotFinish:
if (_networkBattleMgr._specialWinVfx != null)
{
RegisterSpecialWin(sequentialVfxPlayer);
break;
}
switch (_hasSequenceUri)
{
case NetworkBattleDefine.NetworkBattleURI.TurnEndActions:
if (_isPlayerSend)
{
GameMgr.GetIns().GetNetworkUserInfoData().TurnState = 0;
_networkBattleMgr.SendTurnEnd();
}
else
{
_networkBattleMgr.networkBattleData.isReceiveTurnEndAction = true;
_networkBattleMgr.SendEcho(_networkBattleMgr.networkBattleData.GetReceiveData().playCardIndex, _networkBattleMgr.networkBattleData.GetReceiveData().actionType, isNotActiveSeq: true);
}
break;
case NetworkBattleDefine.NetworkBattleURI.TurnEnd:
{
GameMgr.GetIns().GetNetworkUserInfoData().TurnState = 0;
bool flag2 = false;
if (!_isPlayerSend)
{
flag2 = true;
}
else if (_networkBattleMgr.BattlePlayer.IsExtraTurn && !_isOpponentDisconnect)
{
flag2 = true;
}
if (flag2)
{
_networkBattleMgr.SendJudge();
flag = true;
RealTimeNetworkAgent realTimeNetworkAgent = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent.OnAck = (Action<Dictionary<string, object>>)Delegate.Combine(realTimeNetworkAgent.OnAck, new Action<Dictionary<string, object>>(AckTurnStartToRecoveryEnd));
}
break;
}
case NetworkBattleDefine.NetworkBattleURI.Ready:
sequentialVfxPlayer.Register(_networkBattleMgr.StartBattle());
break;
case NetworkBattleDefine.NetworkBattleURI.TurnStart:
if (_networkBattleMgr.BattlePlayer.IsShortageDeck)
{
sequentialVfxPlayer.Register(SendDeckShortage(_networkBattleMgr.BattlePlayer));
}
else if (_networkBattleMgr.BattleEnemy.IsShortageDeck)
{
sequentialVfxPlayer.Register(SendDeckShortage(_networkBattleMgr.BattleEnemy));
}
else if (!_isPlayerSend && _networkBattleMgr.BattlePlayer.IsExtraTurn)
{
_networkBattleMgr.SendEcho(_networkBattleMgr.networkBattleData.GetReceiveData().playCardIndex, _networkBattleMgr.networkBattleData.GetReceiveData().actionType);
}
GameMgr.GetIns().GetNetworkUserInfoData().TurnState = ((!_networkBattleMgr.BattlePlayer.IsSelfTurn) ? 1 : 0);
break;
case NetworkBattleDefine.NetworkBattleURI.Judge:
if (_networkBattleMgr.BattlePlayer.IsExtraTurn)
{
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(_networkBattleMgr.ControlTurnStartOpponent());
GameMgr.GetIns().GetNetworkUserInfoData().TurnState = 0;
isCheckTimeOutTurnEnd = false;
}
else if (_networkBattleMgr.IsBeforePlayerTurn)
{
sequentialVfxPlayer.Register(_networkBattleMgr.ControlTurnStartPlayer());
GameMgr.GetIns().GetNetworkUserInfoData().TurnState = 0;
isCheckTimeOutTurnEnd = false;
}
else
{
GameMgr.GetIns().GetNetworkUserInfoData().TurnState = 0;
}
break;
default:
if (_networkBattleMgr._recoveryController.IsMariganFinished)
{
GameMgr.GetIns().GetNetworkUserInfoData().TurnState = ((!_networkBattleMgr.BattlePlayer.IsSelfTurn) ? 1 : 0);
}
break;
}
break;
default:
if (_networkBattleMgr.IsBattleEnd)
{
BattlePlayer battlePlayer = _networkBattleMgr.BattlePlayer;
BattleEnemy battleEnemy = _networkBattleMgr.BattleEnemy;
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
if (battlePlayer.Class.IsDead)
{
parallelVfxPlayer.Register(battlePlayer.Class.DestroyInPlay(new SkillProcessor()));
}
if (battleEnemy.Class.IsDead)
{
parallelVfxPlayer.Register(battleEnemy.Class.DestroyInPlay(new SkillProcessor()));
}
sequentialVfxPlayer.Register(parallelVfxPlayer);
}
break;
}
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(SequentialVfxPlayer.Create(InstantVfx.Create(delegate
{
_networkBattleMgr.BattlePlayer.PlayerBattleView.ResetTouchable();
ToolboxGame.RealTimeNetworkAgent.EndRecovery();
_networkBattleMgr._recoveryController = null;
if (_networkBattleMgr.BattlePlayer.IsSelfTurn || !Data.BattleRecoveryInfo.IsMulliganEnd)
{
RecoveryCreateRegisterAction(delegate
{
if (!_networkBattleMgr.IsBattleEnd)
{
IPlayerView playerBattleView = _networkBattleMgr.BattlePlayer.PlayerBattleView;
playerBattleView.TurnEndButtonUI._isButtonForcedOff = false;
_networkBattleMgr.BattlePlayer.TurnStartEffectEnd();
playerBattleView.ShowTurnEndButton();
}
if (!Data.BattleRecoveryInfo.IsReceivedDeal)
{
_networkBattleMgr.NetworkSender.SendDeal();
}
if (_canNotTouchCardVfx != null)
{
_canNotTouchCardVfx.End();
_canNotTouchCardVfx = null;
}
OpenRecovery(isCheckTimeOutTurnEnd);
});
}
else
{
OpenRecovery(isCheckTimeOutTurnEnd);
}
if (Data.BattleRecoveryInfo.IsMulliganEnd)
{
_networkBattleMgr.BattleUIContainer.Battery.SetActive(value: true);
_networkBattleMgr.BattlePlayer.StatusPanelControl.ShowStatusPanelAlways();
_networkBattleMgr.BattleEnemy.StatusPanelControl.ShowStatusPanelAlways();
}
ToolboxGame.UIManager.CloseInSceneLoadingBattle();
}), sequentialVfxPlayer));
ToolboxGame.RealTimeNetworkAgent.IsNotPlayReceivingData = false;
if (_hasSequenceUri == NetworkBattleDefine.NetworkBattleURI.TurnEndFinal && rESULT_CODE != NetworkBattleReceiver.RESULT_CODE.NotFinish)
{
_networkBattleMgr.SendJudge();
}
if ((_hasSequenceUri == NetworkBattleDefine.NetworkBattleURI.JudgeResult && _hasSequenceResult != 0) || _hasSequenceUri == NetworkBattleDefine.NetworkBattleURI.BattleFinish)
{
if (!_isPlayerSend)
{
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(SequentialVfxPlayer.Create(InstantVfx.Create(delegate
{
RealTimeNetworkAgent realTimeNetworkAgent5 = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent5.OnAck = (Action<Dictionary<string, object>>)Delegate.Combine(realTimeNetworkAgent5.OnAck, new Action<Dictionary<string, object>>(AckBattleFinish));
StartTimeOut(10, isBattleFinish: true);
_networkBattleMgr.BattleFinishToTurnEndFinal(isSelfTurn: false);
})));
}
_networkBattleMgr.NetworkSender.SendRecoveryEnd();
return;
}
if (isCheckTimeOutTurnEnd && _networkBattleMgr.BattlePlayer.IsSelfTurn && (float)TimeUtil.GetElapsedTime(_firstTime, _lastTime.AddSeconds(TimeNativePlugin.GetDeviceOperatingTime())) >= 80f)
{
if (rESULT_CODE != NetworkBattleReceiver.RESULT_CODE.NotFinish)
{
_networkBattleMgr.BattleFinishToTurnEndFinal(_networkBattleMgr.BattlePlayer.IsSelfTurn);
RealTimeNetworkAgent realTimeNetworkAgent2 = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent2.OnAck = (Action<Dictionary<string, object>>)Delegate.Combine(realTimeNetworkAgent2.OnAck, new Action<Dictionary<string, object>>(AckTurnEndFinalToRecoveryEnd));
}
else
{
RealTimeNetworkAgent realTimeNetworkAgent3 = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent3.OnAck = (Action<Dictionary<string, object>>)Delegate.Combine(realTimeNetworkAgent3.OnAck, new Action<Dictionary<string, object>>(AckTurnEndToRecoveryEnd));
}
}
else if (!flag)
{
_networkBattleMgr.NetworkSender.SendRecoveryEnd();
}
if (waitForAck)
{
RealTimeNetworkAgent realTimeNetworkAgent4 = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent4.OnAck = (Action<Dictionary<string, object>>)Delegate.Combine(realTimeNetworkAgent4.OnAck, new Action<Dictionary<string, object>>(AckToComplete));
StartTimeOut(10);
}
else
{
AckToComplete(null);
}
}
private void AckTurnEndToRecoveryEnd(Dictionary<string, object> objs)
{
if (NetworkBattleGenericTool.FindDictionaryURI(objs) == NetworkBattleDefine.NetworkURINames[NetworkBattleDefine.NetworkBattleURI.TurnEnd])
{
RealTimeNetworkAgent realTimeNetworkAgent = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent.OnAck = (Action<Dictionary<string, object>>)Delegate.Remove(realTimeNetworkAgent.OnAck, new Action<Dictionary<string, object>>(AckTurnEndToRecoveryEnd));
_networkBattleMgr.NetworkSender.SendRecoveryEnd();
}
}
private void AckTurnEndFinalToRecoveryEnd(Dictionary<string, object> objs)
{
if (NetworkBattleGenericTool.FindDictionaryURI(objs) == NetworkBattleDefine.NetworkURINames[NetworkBattleDefine.NetworkBattleURI.TurnEndFinal])
{
RealTimeNetworkAgent realTimeNetworkAgent = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent.OnAck = (Action<Dictionary<string, object>>)Delegate.Remove(realTimeNetworkAgent.OnAck, new Action<Dictionary<string, object>>(AckTurnEndFinalToRecoveryEnd));
_networkBattleMgr.NetworkSender.SendJudgeResult(NetworkBattleSender.JUDGE_RESULT_STATUS.RecoveryBattleFinishToJudge);
}
}
private void AckTurnStartToRecoveryEnd(Dictionary<string, object> objs)
{
if (_networkBattleMgr.BattleEnemy.IsExtraTurn && !_isOpponentDisconnect && NetworkBattleGenericTool.FindDictionaryURI(objs) == NetworkBattleDefine.NetworkURINames[NetworkBattleDefine.NetworkBattleURI.Judge])
{
RealTimeNetworkAgent realTimeNetworkAgent = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent.OnAck = (Action<Dictionary<string, object>>)Delegate.Remove(realTimeNetworkAgent.OnAck, new Action<Dictionary<string, object>>(AckTurnStartToRecoveryEnd));
_networkBattleMgr.NetworkSender.SendRecoveryEnd();
}
else if (NetworkBattleGenericTool.FindDictionaryURI(objs) == NetworkBattleDefine.NetworkURINames[NetworkBattleDefine.NetworkBattleURI.TurnStart])
{
RealTimeNetworkAgent realTimeNetworkAgent2 = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent2.OnAck = (Action<Dictionary<string, object>>)Delegate.Remove(realTimeNetworkAgent2.OnAck, new Action<Dictionary<string, object>>(AckTurnStartToRecoveryEnd));
_networkBattleMgr.NetworkSender.SendRecoveryEnd();
}
}
private void AckToComplete(Dictionary<string, object> objs)
{
RealTimeNetworkAgent realTimeNetworkAgent = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent.OnAck = (Action<Dictionary<string, object>>)Delegate.Remove(realTimeNetworkAgent.OnAck, new Action<Dictionary<string, object>>(AckToComplete));
this.OnCompleteRecovery.Call();
}
private void CheckDeckoutResult(SequentialVfxPlayer afterRecoveryResultVfx, bool isDeckoutWin)
{
if (_networkBattleMgr._specialWinVfx != null)
{
RegisterSpecialWin(afterRecoveryResultVfx);
}
else if (_networkBattleMgr != null && _networkBattleMgr.BattleResultControl != null && !_networkBattleMgr.BattleResultControl.IsResultOn)
{
if (_networkBattleMgr.GetBattlePlayer(isDeckoutWin).IsShortageDeck && _networkBattleMgr.GetBattlePlayer(isDeckoutWin).Class.SkillApplyInformation.IsShortageDeckWin)
{
afterRecoveryResultVfx.Register(SendDeckShortage(_networkBattleMgr.GetBattlePlayer(isDeckoutWin)));
}
else
{
afterRecoveryResultVfx.Register(SendDeckShortage(_networkBattleMgr.GetBattlePlayer(!isDeckoutWin)));
}
}
}
private void RegisterSpecialWin(SequentialVfxPlayer afterRecoveryResultVfx)
{
afterRecoveryResultVfx.Register(SequentialVfxPlayer.Create(_networkBattleMgr._specialWinVfx, InstantVfx.Create(delegate
{
if (!_isPlayerSend)
{
_networkBattleMgr.SendEchoRecovery(_networkBattleMgr._lastReceivedData);
}
})));
}
private void AckBattleFinish(Dictionary<string, object> objs)
{
StopTimeOut();
RealTimeNetworkAgent realTimeNetworkAgent = ToolboxGame.RealTimeNetworkAgent;
realTimeNetworkAgent.OnAck = (Action<Dictionary<string, object>>)Delegate.Remove(realTimeNetworkAgent.OnAck, new Action<Dictionary<string, object>>(AckBattleFinish));
this.OnCompleteRecovery.Call();
}
private void OpenRecovery(bool isSetTurnTimeoutTimer)
{
OnFinishRecoveryLogSync.Call();
if (isFirstTimeSet)
{
_pastTime = TimeUtil.GetElapsedTime(_firstTime, _lastTime.AddSeconds(TimeNativePlugin.GetDeviceOperatingTime()));
}
if (isSetTurnTimeoutTimer)
{
_networkBattleMgr.RecoveryTimeOutSetting(0f - _pastTime, Data.BattleRecoveryInfo.IsMulliganEnd, -1L);
_networkBattleMgr.SetTimeDecrementFlag(isTurnStartWithNoAction);
}
ToolboxGame.RealTimeNetworkAgent.StartPreparedStartTimer(_battleStartDate);
}
private void AIOpenRecovery(RecoveryOperationInfo aiBattleRecoveryData)
{
OnFinishRecoveryLogSync.Call();
DateTimeOffset dateTimeOffset = new DateTimeOffset(DateTime.Now.Ticks, new TimeSpan(0, 0, 0));
long num = dateTimeOffset.ToUnixTimeSeconds();
long num2 = (aiBattleRecoveryData.SetupInfo.HasMulliganInfo ? aiBattleRecoveryData.TurnStartTime : aiBattleRecoveryData.MulliganStartTime);
if (num2 == 0L)
{
num2 = aiBattleRecoveryData.OpeningStartTime;
}
if (!_networkBattleMgr.IsBattleEnd)
{
_networkBattleMgr.RecoveryTimeOutSetting(-(num - num2), aiBattleRecoveryData.SetupInfo.HasMulliganInfo, num2);
_networkBattleMgr.SetTimeDecrementFlag(isTurnStartWithNoAction);
}
ToolboxGame.RealTimeNetworkAgent.StartPreparedStartTimer(DateTime.Now.AddSeconds(-(num - num2)));
}
private void RecoveryCreateRegisterAction(Action callback)
{
if (jsonObject == null)
{
OnFinishRecoveryLogSync.Call();
return;
}
if (!jsonObject.Keys.Contains("operations"))
{
RecoveryManagerBase.OpenRecoveryFailedDialog();
return;
}
JsonData jsonData = jsonObject["operations"];
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
for (int i = 0; i < jsonData.Count; i++)
{
Dictionary<string, object> dictionary = new Dictionary<string, object>();
foreach (string key in jsonData[i].Keys)
{
if (key == "abandoned_cards")
{
JsonData jsonData2 = jsonData[i]["abandoned_cards"];
for (int j = 0; j < jsonData2.Count; j++)
{
_mulliganList.Add(jsonData2[j]);
}
}
dictionary.Add(key, jsonData[i][key]);
}
list.Add(dictionary);
}
_networkBattleMgr.BattlePlayer.PlayerBattleView.TurnEndButtonUI._isButtonForcedOff = true;
_networkBattleMgr.BattlePlayer.PlayerBattleView.TurnEndButtonUI.DisableButton();
if (_canNotTouchCardVfx == null)
{
_canNotTouchCardVfx = new CanNotTouchCardVfx();
_networkBattleMgr.VfxMgr.RegisterImmediateVfx(_canNotTouchCardVfx);
}
UIManager.GetInstance().StartCoroutine(StockRecoveryPlayer(list, callback));
}
private void AINetworkRecoveryCreateRegisterAction(Action callback)
{
_networkBattleMgr.BattlePlayer.PlayerBattleView.TurnEndButtonUI._isButtonForcedOff = true;
_networkBattleMgr.BattlePlayer.PlayerBattleView.TurnEndButtonUI.DisableButton();
if (_canNotTouchCardVfx == null)
{
_canNotTouchCardVfx = new CanNotTouchCardVfx();
_networkBattleMgr.VfxMgr.RegisterImmediateVfx(_canNotTouchCardVfx);
}
callback.Call();
}
protected virtual IEnumerator StockRecoveryPlayer(List<Dictionary<string, object>> recoveryDictList, Action callback)
{
bool skipRecoveryData = true;
if (skipRecoveryData && recoveryDictList.Count > 0 && Convert.ToInt32(recoveryDictList.Last()["seq"].ToString()) <= Data.BattleRecoveryInfo.Pub_seq)
{
playIndex = recoveryDictList.Count;
}
while (playIndex < recoveryDictList.Count)
{
if (skipRecoveryData && (bool)ToolboxGame.RealTimeNetworkAgent && !ToolboxGame.RealTimeNetworkAgent.IsPlayReceiveDataOk())
{
yield return null;
continue;
}
try
{
Dictionary<string, object> dictionary = recoveryDictList[playIndex];
new List<BattleCardBase>();
object obj = null;
BattleCardBase selectPlayCard = null;
bool flag = false;
if (Convert.ToInt32(dictionary["seq"].ToString()) > Data.BattleRecoveryInfo.Pub_seq)
{
string text = dictionary["operation"].ToString();
switch (text)
{
case "play":
{
BattleCardBase cardBaseByPrefix5 = GetCardBaseByPrefix(dictionary["index"].ToString());
bool flag3 = int.Parse(dictionary["is_choice_brave"].ToString()) == 1;
if (dictionary.ContainsKey("skill_target"))
{
obj = dictionary["skill_target"];
}
bool isTargetSelectSkill = obj != null;
VfxBase vfxBase = ((!flag3) ? _networkBattleMgr.OperateMgr.InitSetCard(cardBaseByPrefix5, isPlayer: true, isTargetSelectSkill) : NullVfx.GetInstance());
List<BattleCardBase> list = CreateSkillTargetListFromJsonData(isTargetSelectSkill, obj);
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(SequentialVfxPlayer.Create(vfxBase, _networkBattleMgr.OperateMgr.PlayCard(cardBaseByPrefix5, isPlayer: true, list, isRecovery: true, null, flag3)));
break;
}
case "attack":
{
BattleCardBase cardBaseByPrefix3 = GetCardBaseByPrefix(dictionary["index"].ToString());
BattleCardBase cardBaseByPrefix4 = GetCardBaseByPrefix(dictionary["target"].ToString());
RegisterPairToAttackSelectControl(cardBaseByPrefix3, cardBaseByPrefix4);
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(_networkBattleMgr.OperateMgr.Attack(cardBaseByPrefix3, cardBaseByPrefix4, isPlayer: true));
break;
}
case "evolve":
{
BattleCardBase cardBaseByPrefix = GetCardBaseByPrefix(dictionary["index"].ToString());
if (dictionary.ContainsKey("skill_target"))
{
obj = dictionary["skill_target"];
}
bool isTargetSelectSkill = obj != null;
List<BattleCardBase> list = CreateSkillTargetListFromJsonData(isTargetSelectSkill, obj);
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(_networkBattleMgr.OperateMgr.EvolutionCard(cardBaseByPrefix, isPlayer: true, list));
break;
}
case "mulligan":
if (!_networkBattleMgr.networkBattleData.isPlayerMulliganEnd)
{
for (int num = 0; num < _mulliganList.Count; num++)
{
BattleCardBase cardBaseByPrefix2 = GetCardBaseByPrefix(_mulliganList[num].ToString());
_networkBattleMgr.MulliganMgr.PlayerMlgCtrl.RegisterAbandonCard(cardBaseByPrefix2);
}
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(_networkBattleMgr.MulliganMgr.Submit(_networkBattleMgr));
}
break;
case "start_select":
selectPlayCard = GetCardBaseByPrefix(dictionary["index"].ToString());
flag = int.Parse(dictionary["bool"].ToString()) == 1;
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.StartSelect, _networkBattleMgr, selectPlayCard, flag);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).RecordSelectStart(selectPlayCard);
break;
case "select":
{
selectPlayCard = GetCardBaseByPrefix(dictionary["index"].ToString());
flag = int.Parse(dictionary["bool"].ToString()) == 1;
bool flag2 = int.Parse(dictionary["is_burial_rite"].ToString()) == 1;
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.SelectCard, _networkBattleMgr, selectPlayCard, flag, null, null, flag2);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).RecordSelectCard(selectPlayCard, flag2);
break;
}
case "comp_select":
{
selectPlayCard = GetCardBaseByPrefix(dictionary["index"].ToString());
flag = int.Parse(dictionary["bool"].ToString()) == 1;
bool flag2 = int.Parse(dictionary["is_burial_rite"].ToString()) == 1;
bool flag3 = int.Parse(dictionary["is_choice_brave"].ToString()) == 1;
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.CompleteSelect, _networkBattleMgr, selectPlayCard, flag, null, null, flag2, flag3);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).RecordCompleteSelect(selectPlayCard, flag2, flag3);
break;
}
case "cancel_select":
flag = int.Parse(dictionary["bool"].ToString()) == 1;
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.CancelSelect, _networkBattleMgr, null, flag);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).RecordCancelSelect();
break;
case "start_choice":
selectPlayCard = GetCardBaseByPrefix(dictionary["index"].ToString());
flag = int.Parse(dictionary["bool"].ToString()) == 1;
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.StartChoiceSelect, _networkBattleMgr, selectPlayCard, flag);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).RecordStartChoiceSelect(selectPlayCard);
break;
case "comp_choice":
{
selectPlayCard = GetCardBaseByPrefix(dictionary["index"].ToString());
flag = int.Parse(dictionary["bool"].ToString()) == 1;
if (dictionary.ContainsKey("skill_target"))
{
obj = dictionary["skill_target"];
}
bool isTargetSelectSkill = obj != null;
List<BattleCardBase> list = CreateSkillTargetListFromJsonData(isTargetSelectSkill, obj);
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.CompleteChoiceSelect, _networkBattleMgr, selectPlayCard, flag, list);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).RecordCompleteChoiceSelect(list.Select((BattleCardBase c) => c.CardId).ToList());
break;
}
case "cancel_choice":
flag = int.Parse(dictionary["bool"].ToString()) == 1;
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.CancelChoiceSelect, _networkBattleMgr, null, flag);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).RecordCancelChoice();
break;
case "start_fusion":
selectPlayCard = GetCardBaseByPrefix(dictionary["index"].ToString());
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.StartFusionSelect, _networkBattleMgr, selectPlayCard, isEvolveSelect: false);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).RecordStartFusion(selectPlayCard);
break;
case "select_fusion":
selectPlayCard = GetCardBaseByPrefix(dictionary["index"].ToString());
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.SelectFusionIngredient, _networkBattleMgr, selectPlayCard, flag);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).RecordSelectFusion(selectPlayCard);
break;
case "cancel_fusion":
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.CancelSelect, _networkBattleMgr, null, isEvolveSelect: false);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).RecordCancelSelect();
break;
case "comp_fusion":
{
selectPlayCard = GetCardBaseByPrefix(dictionary["index"].ToString());
if (dictionary.ContainsKey("skill_target"))
{
obj = dictionary["skill_target"];
}
bool isTargetSelectSkill = obj != null;
EmitHandUtility.SendSelectSkill(NetworkBattleSender.SELECT_SKILL_OPERATION.CompleteFusionSelect, _networkBattleMgr, selectPlayCard, isEvolveSelect: false);
List<BattleCardBase> list = CreateSkillTargetListFromJsonData(isTargetSelectSkill, obj);
SequentialVfxPlayer vfx = SequentialVfxPlayer.Create(InstantVfx.Create(delegate
{
selectPlayCard.BattleCardView.HideHandCardInfo();
selectPlayCard.BattleCardView.GameObject.transform.localEulerAngles = FusionTargetSelectTouchProcessor.INIT_LOCAL_EULAR_ANGLE;
}), selectPlayCard.SelfBattlePlayer.BattleView.PlayQueueView.AddCardToViewVfx(selectPlayCard.BattleCardView, forceCardIntoPlayQueue: true, isSelectTarget: false, isChoice: false), new SkillSelectHandCardsVfx(list), WaitVfx.Create(0.3f), _networkBattleMgr.OperateMgr.FusionCard(selectPlayCard, isPlayer: true, list));
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(vfx);
_networkBattleMgr.OperateReceive.GetPlayActionsReflection(flag).ClearData();
break;
}
case "turn_end":
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(InstantVfx.Create(delegate
{
}));
break;
default:
Debug.LogError("Auto test \"" + text + "\" is not supported.");
break;
}
}
playIndex++;
}
catch
{
LocalLog.AccumulateTraceLog("Recovery: Failed to recover actions during disconnection. Force quit recovery. actionName:" + recoveryDictList[playIndex]["operation"].ToString() + ", playIndex:" + playIndex);
callback.Call();
yield break;
}
yield return null;
}
callback.Call();
}
private List<BattleCardBase> CreateSkillTargetListFromJsonData(bool isTargetSelectSkill, object jsonDataObject)
{
if (!isTargetSelectSkill)
{
return null;
}
List<BattleCardBase> list = new List<BattleCardBase>();
if (jsonDataObject is IEnumerable enumerable)
{
foreach (object item in enumerable)
{
string text = item.ToString();
BattleCardBase battleCardBase = GetCardBaseByPrefix(text);
if (battleCardBase == null)
{
bool flag = (text.Contains("p") ? true : false);
int num = Convert.ToInt32(text.Replace(flag ? "p" : "e", ""));
if (!CardMaster.GetInstanceForBattle().CardExists(num))
{
continue;
}
battleCardBase = _networkBattleMgr.CreateTransformCardRegisterVfx(null, num, flag);
}
if (battleCardBase != null)
{
list.Add(battleCardBase);
}
}
}
return list;
}
private void RegisterTarget(Dictionary<string, object> jsonData, BattleCardBase actionCard)
{
if (jsonData.ContainsKey("skill_target"))
{
string idxString = jsonData["skill_target"].ToString();
BattleCardBase cardBaseByPrefix = GetCardBaseByPrefix(idxString);
if (cardBaseByPrefix != null)
{
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(_networkBattleMgr.OperateMgr.BattleCardSelect(actionCard, cardBaseByPrefix, isPlayer: true));
}
}
}
private BattleCardBase GetCardBaseByPrefix(string idxString)
{
BattleCardBase result = null;
if (idxString.Contains("p"))
{
int index = Convert.ToInt32(idxString.Replace("p", ""));
result = NetworkBattleGenericTool.GetIndexToCardBase(_networkBattleMgr, _networkBattleMgr.BattlePlayer, index);
}
else if (idxString.Contains("e"))
{
int index2 = Convert.ToInt32(idxString.Replace("e", ""));
result = NetworkBattleGenericTool.GetIndexToCardBase(_networkBattleMgr, _networkBattleMgr.BattleEnemy, index2);
}
return result;
}
private void RegisterPairToAttackSelectControl(BattleCardBase attackCard, BattleCardBase targetCard)
{
AttackSelectControl.AttackPair attackPair = new AttackSelectControl.AttackPair(attackCard.BattleCardView, targetCard.BattleCardView);
AttackSelectControl attackSelectControl = _networkBattleMgr.BattlePlayer.BattleView.AttackSelectControl;
attackPair._attackTarget._isReady = !attackSelectControl.IsCardTranslatable(targetCard.BattleCardView);
attackSelectControl.RegisterAttackPair(attackPair);
}
private VfxBase SendDeckShortage(BattlePlayerBase player)
{
VfxBase result = player.SendShortageDeck();
_networkBattleMgr.BattleFinishToTurnEndFinal(_networkBattleMgr.BattlePlayer.IsSelfTurn);
return result;
}
private void StartTimeOut(int timer, bool isBattleFinish = false)
{
StopTimeOut();
_timeOutCoroutine = UIManager.GetInstance().StartCoroutine(StartTimeOutCorutine(timer, isBattleFinish));
}
private IEnumerator StartTimeOutCorutine(int timer, bool isBattleFinish = false)
{
long oldTimer = TimeUtil.GetAbsoluteTime().Ticks;
while (timer - NetworkUtility.GetTimeSpanSecond(oldTimer) > 0)
{
yield return null;
}
StopTimeOut();
if (isBattleFinish)
{
AckBattleFinish(null);
}
else
{
AckToComplete(null);
}
}
private void StopTimeOut()
{
if (_timeOutCoroutine != null)
{
UIManager.GetInstance().StopCoroutine(_timeOutCoroutine);
_timeOutCoroutine = null;
}
}
protected DateTime GetCulculateWaitTime(double time)
{
return TimeUtil.MicroTimeToFromUnixTime((long)time);
}
public bool isOwner(string idStr)
{
if (Convert.ToInt32(idStr) == GameMgr.GetIns().GetNetworkUserInfoData().GetSelfViewerId())
{
return true;
}
return false;
}
}