Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB425_tagSCTurnFightReportSign.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/BattleField/BattleField.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/BattleField/StoryBattleField.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/BattleManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/KnapSack/Logic/ItemLogicUtility.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Main/AutoFightModel.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Main/MainWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB425_tagSCTurnFightReportSign.cs
@@ -29,7 +29,8 @@ base.Done(vNetPack); HB425_tagSCTurnFightReportSign vNetData = vNetPack as HB425_tagSCTurnFightReportSign; //主线才有的包 BattleManager.Instance.isWaitServerStory = false; // 截断 PackageRegedit Distribute 里的封包 // 直到sign = 1; Main/System/Battle/BattleField/BattleField.cs
@@ -60,6 +60,7 @@ public BattleRootNode battleRootNode; private BattleMode battleMode; public event Action<BattleMode> ChangeBattleModeEvent; public Action<bool> OnBattlePause; @@ -120,6 +121,12 @@ { battleMode = _battleMode; CreateAgent(); ChangeBattleModeEvent?.Invoke(battleMode); } public BattleMode GetBattleMode() { return battleMode; } public virtual void Release() @@ -438,7 +445,7 @@ { // 战斗失败 Debug.LogError("战斗失败"); HaveRest(); // HaveRest(); } IsBattleFinish = true; Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs
@@ -3,33 +3,24 @@ public class AutoModeOperationAgent : IOperationAgent { protected StoryBattleField storyBattleField; public AutoModeOperationAgent(BattleField battleField) : base(battleField) { storyBattleField = battleField as StoryBattleField; } float lastTime; public override void Run() { if (!battleField.IsBattleFinish) { //最低1秒 if (Time.time - lastTime < 1f) return; } base.Run(); if (!battleField.recordPlayer.IsPlaying()) { DoNext(); } lastTime = Time.time; DoNext(); } public override void DoNext() { base.DoNext(); if (!battleField.recordPlayer.IsPlaying()) { // ask for next action } storyBattleField.RequestFight(); } } Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs
@@ -23,75 +23,7 @@ base.DoNext(); // 当前没有在播放战斗录像 if (!battleField.recordPlayer.IsPlaying()) { BattleDebug.LogError("HandModeOperationAgent DoNext 1"); // 没有下一个包可以发了 if (!BattleManager.Instance.DistributeNextPackage()) { // 请求下一个战斗包 或者检查战斗是否结束 // ReqType; // 0-停止战斗回城;1-设置消耗倍值;2-挑战关卡小怪;3-挑战关卡boss;4-继续战斗; // 如果在休息 点一下之后应该是挑战小怪或者挑战关卡 // 如果在战斗 战斗是否结束/战斗持续中 结束应该是挑战下一关 持续应该是继续战斗 // 检查一下锤子的消耗 //useHarmerCount 用于记录消耗战锤倍数,小于等于1时默认1倍,大于1时为对应消耗倍值,0418刷新类型22 BattleDebug.LogError("HandModeOperationAgent DoNext 2"); long costRate = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.UseHarmerCount); long cost = (costRate > 1 ? costRate : 1) * 1; // 1是默认消耗 BattleDebug.LogError("HandModeOperationAgent DoNext 3"); byte reqType; if (storyBattleField.battleState == StoryBattleState.Break) { reqType = 2; } else if (storyBattleField.battleState == StoryBattleState.Battle) { if (battleField.IsBattleEnd()) { reqType = 2; // 继续挑战小怪 } else { reqType = 4; // 继续战斗 } } else { BattleDebug.LogError("unknown battle state"); return; } BattleDebug.LogError("HandModeOperationAgent DoNext 4 reqType is " + reqType); // 检查一下锤子的消耗 if (!ItemLogicUtility.CheckCurrencyCount(41, cost, true)) { return; } // 如果请求的是2 说明要初始化一下战场 BattleManager.Instance.MainFightRequest(reqType); // 初始化战场后本来不会自动打 那么就需要再请求一次4继续战斗 来开始战斗 if (reqType == 2) { BattleManager.Instance.MainFightRequest(4); } } } else { BattleDebug.LogError("action doesnt finish, wait a moment please"); } storyBattleField.RequestFight(); } Main/System/Battle/BattleField/StoryBattleField.cs
@@ -49,7 +49,7 @@ battleState = StoryBattleState.Battle; } LoadBattleMode(); // LoadBattleMode(); chapter = FuncLineID / 10000; wave = MapID == 1 ? FuncLineID % 100 : 1;//第几波怪 @@ -70,18 +70,23 @@ protected void LoadBattleMode() { string savedStr = LocalSave.GetString("StoryBattleFieldBattleMode"); if (string.IsNullOrEmpty(savedStr)) //主线模式:stop休息 无怪;Hand/Auto 有怪 等待指令 BattleMode mode = BattleMode.Hand; if (AutoFightModel.Instance.isAutoAttackSet) { savedStr = "Hand"; mode = BattleMode.Auto; } SetBattleMode((BattleMode)Enum.Parse(typeof(BattleMode), savedStr)); if (GetBattleMode() == mode) return; SetBattleMode(mode); } public override void AutoSetBattleMode() { LoadBattleMode(); } public override void TurnFightState(int TurnNum, int State, uint FuncLineID, JsonData extendData) @@ -149,18 +154,99 @@ // // HaveRest(); // } // public override void Run() // { // // 一定要记住这个 // if (IsPause) // return; // base.Run(); // } public override void Run() { if (operationAgent == null) { //防范异常 HaveRest(); return; } base.Run(); } public override void DistributeNextPackage() { // 不要调用base的函数 BattleManager.Instance.DistributeNextPackage(); } //请求单次战斗 public void RequestFight() { if (IsPause) { //还需考虑其他不可战斗状况,主线的BOSS战斗也是另外一个场景且不能切出来 等跳过或者结束 //外部统一控制 IsPause return; } if (BattleManager.Instance.isWaitServerStory) return; // 当前没有在播放战斗录像 if (!recordPlayer.IsPlaying()) { BattleDebug.LogError("HandModeOperationAgent DoNext 1"); // 没有下一个包可以发了 if (!BattleManager.Instance.DistributeNextPackage()) { BattleDebug.LogError("HandModeOperationAgent DoNext 2"); // 检查一下锤子的消耗 if (!ItemLogicUtility.CheckCurrencyCount(41, PlayerDatas.Instance.baseData.UseHarmerCount, 2)) { //多次防范 if (GetBattleMode() != BattleMode.Stop) HaveRest(); return; } // 请求下一个战斗包 或者检查战斗是否结束 // ReqType; // 0-停止战斗回城;1-设置消耗倍值;2-挑战关卡小怪;3-挑战关卡boss;4-继续战斗; // 如果在战斗 战斗是否结束/战斗持续中 结束应该是挑战下一关 持续应该是继续战斗 BattleDebug.LogError("HandModeOperationAgent DoNext 3"); byte reqType; if (battleState == StoryBattleState.Break) { reqType = 2; } else if (battleState == StoryBattleState.Battle) { if (IsBattleEnd()) { reqType = 2; // 继续挑战小怪 } else { reqType = 4; // 继续战斗 } } else { BattleDebug.LogError("unknown battle state"); return; } BattleDebug.LogError("HandModeOperationAgent DoNext 4 reqType is " + reqType); // 如果请求的是2 说明要初始化一下战场 BattleManager.Instance.MainFightRequest(reqType); // 初始化战场后本来不会自动打 那么就需要再请求一次4继续战斗 来开始战斗 if (reqType == 2) { BattleManager.Instance.MainFightRequest(4); } } } // else // { // BattleDebug.LogError("action doesnt finish, wait a moment please"); // } } } Main/System/Battle/BattleManager.cs
@@ -15,12 +15,16 @@ public Action<string, BattleField> onBattleFieldDestroy; public bool isWaitServerStory = false; //主线等服务端回报 0425 public override void Init() { base.Init(); LogicEngine.Instance.OnUpdate += Run; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerInit; } public override void Release() @@ -28,6 +32,7 @@ base.Release(); LogicEngine.Instance.OnUpdate -= Run; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerInit; } protected void OnPlayerLoginOk() @@ -39,6 +44,11 @@ int FuncLineID = (int)exAttr2; CreateStoryBattle(MapID, FuncLineID, null, null); } void BeforePlayerInit() { isWaitServerStory = false; //后续考虑断线重连 } // 上游戏的时候 等战斗阵容更新完毕 创建主线副本 敌方的数据可以暂时不显示 己方表现为睡觉 @@ -322,22 +332,34 @@ { BattleField battleField = null; bool isCreate = true; if (battleFields.TryGetValue(guid, out battleField)) { BattleDebug.LogError("战场已存在 先进行销毁"); battleField.Destroy(); //主线战场需一直存在 if (string.IsNullOrEmpty(guid)) { isCreate = false; } else { BattleDebug.LogError("战场已存在 先进行销毁"); battleField.Destroy(); } } battleField = BattleFieldFactory.CreateBattleField(guid, MapID, FuncLineID, extendData, redTeamList, blueTeamList); if (isCreate) { battleField = BattleFieldFactory.CreateBattleField(guid, MapID, FuncLineID, extendData, redTeamList, blueTeamList); onBattleFieldCreate?.Invoke(guid, battleField); onBattleFieldCreate?.Invoke(guid, battleField); if (string.IsNullOrEmpty(guid)) { storyBattleField = (StoryBattleField)battleField; if (string.IsNullOrEmpty(guid)) { storyBattleField = (StoryBattleField)battleField; } battleFields.Add(guid, battleField); } battleFields.Add(guid, battleField); battleField.Init(MapID, FuncLineID, extendData, redTeamList, blueTeamList); @@ -383,6 +405,8 @@ req.ReqValue = reqValue; GameNetSystem.Instance.SendInfo(req); if (reqType >= 2) isWaitServerStory = true; } Main/System/KnapSack/Logic/ItemLogicUtility.cs
@@ -296,7 +296,8 @@ return isEnough; } public static bool CheckCurrencyCount(int moneyType, long needCount, bool needTips = false) /// <param name="needTips">0 不响应 1 弹提示 2 弹获取途径tips</param> public static bool CheckCurrencyCount(int moneyType, long needCount, int needTips = 0) { if (needCount <= 0) { @@ -307,9 +308,16 @@ bool isEnough = haveCount >= needCount; if (!isEnough && needTips) if (!isEnough) { SysNotifyMgr.Instance.ShowTip("LackMoney", moneyType); if (needTips == 1) { SysNotifyMgr.Instance.ShowTip("LackMoney", moneyType); } else if (needTips == 2) { ItemTipUtility.ShowMoneyTip(moneyType); } } return isEnough; Main/System/Main/AutoFightModel.cs
@@ -76,11 +76,15 @@ { ParseConfig(); DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk; BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField; } public override void Release() { DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk; BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField; } void ParseConfig() @@ -104,6 +108,15 @@ PlayerDatas.Instance.baseData.UseHarmerCount = fightCost; BattleManager.Instance.MainFightRequest(1, (uint)fightCost); } StoryBattleField storyBattleField = BattleManager.Instance.storyBattleField; if (storyBattleField != null && storyBattleField.GetBattleMode() != BattleMode.Stop) { //战斗中改变模式 storyBattleField.AutoSetBattleMode(); } QuickSetting.Instance.SendPackage(); ChangeAutoEvent?.Invoke(); } @@ -114,7 +127,7 @@ { if (!isAutoAttack) return false; if (item == null) return true; @@ -129,11 +142,63 @@ { if (isStopFightByBetterEquip) return false; EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)item.gridIndex }, 1); return true; } } #region 战斗 public void StartFight() { if (isAutoAttack) return; StoryBattleField storyBattleField = BattleManager.Instance.storyBattleField; if (storyBattleField == null) { return; } if (UIHelper.GetMoneyCnt(41) < PlayerDatas.Instance.baseData.UseHarmerCount) { if (storyBattleField.GetBattleMode() != BattleMode.Stop) storyBattleField.HaveRest(); return; } if (isAutoAttackSet) { isAutoAttack = true; } //手动会一直进入这个逻辑, 自动触发一次 storyBattleField.AutoSetBattleMode(); storyBattleField.operationAgent.DoNext(); } void OnCreateBattleField(string guid, BattleField battleField) { if (string.IsNullOrEmpty(guid) && BattleManager.Instance.storyBattleField != null) { BattleManager.Instance.storyBattleField.ChangeBattleModeEvent -= ChangeBattleModeEvent; BattleManager.Instance.storyBattleField.ChangeBattleModeEvent += ChangeBattleModeEvent; } } void ChangeBattleModeEvent(BattleMode _battleMode) { if (_battleMode == BattleMode.Stop) { isAutoAttack = false; } } #endregion } Main/System/Main/MainWin.cs
@@ -132,17 +132,8 @@ { if (currentSubUI != null && currentSubUI.name == "HomeWin") { Debug.Log("点击主界面按钮"); //打开主界面的情况下再点击按钮,执行攻击逻辑 if (AutoFightModel.Instance.isAutoAttackSet) { AutoFightModel.Instance.isAutoAttack = true; } StoryBattleField storyBattleField = BattleManager.Instance.storyBattleField; if (storyBattleField != null) { storyBattleField.operationAgent.DoNext(); } //手动自动一起处理 AutoFightModel.Instance.StartFight(); } } SelectBottomTab(index);