feat: Quick Cocoon

This commit is contained in:
StopWuyu
2024-12-07 17:06:22 +08:00
parent cfec284f2d
commit f53be0318e
4 changed files with 68 additions and 13 deletions

View File

@@ -245,15 +245,14 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
Player.SceneInstance?.ClearSummonUnit();
}
public async ValueTask StartCocoonStage(int cocoonId, int wave, int worldLevel)
public async ValueTask<BattleInstance?> StartCocoonStage(int cocoonId, int wave, int worldLevel)
{
if (Player.BattleInstance != null) return;
if (Player.BattleInstance != null) return null;
GameData.CocoonConfigData.TryGetValue(cocoonId * 100 + worldLevel, out var config);
if (config == null)
{
await Player.SendPacket(new PacketStartCocoonStageScRsp());
return;
return null;
}
wave = Math.Min(Math.Max(wave, 1), config.MaxWave);
@@ -261,8 +260,7 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
var cost = config.StaminaCost * wave;
if (Player.Data.Stamina < cost)
{
await Player.SendPacket(new PacketStartCocoonStageScRsp());
return;
return null;
}
List<StageConfigExcel> stageConfigExcels = [];
@@ -277,8 +275,7 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
if (stageConfigExcels.Count == 0)
{
await Player.SendPacket(new PacketStartCocoonStageScRsp());
return;
return null;
}
BattleInstance battleInstance = new(Player, Player.LineupManager!.GetCurLineup()!, stageConfigExcels)
@@ -299,9 +296,8 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
Player.QuestManager!.OnBattleStart(battleInstance);
InvokeOnPlayerEnterBattle(Player, battleInstance);
await Player.SendPacket(new PacketStartCocoonStageScRsp(battleInstance, cocoonId, wave));
Player.SceneInstance?.ClearSummonUnit();
await ValueTask.CompletedTask;
return battleInstance;
}
public (Retcode, BattleInstance?) StartBattleCollege(int collegeId)

View File

@@ -0,0 +1,21 @@
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Adventure;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Adventure;
[Opcode(CmdIds.QuickStartCocoonStageCsReq)]
public class HandlerQuickStartCocoonStageCsReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = QuickStartCocoonStageCsReq.Parser.ParseFrom(data);
var battle = await connection.Player!.BattleManager!.StartCocoonStage((int)req.CocoonId, (int)req.Wave, (int)req.WorldLevel);
connection.Player.SceneInstance?.ClearSummonUnit();
if (battle != null)
await connection.SendPacket(new PacketQuickStartCocoonStageScRsp(battle, (int)req.CocoonId, (int)req.Wave));
else
await connection.SendPacket(new PacketQuickStartCocoonStageScRsp());
}
}

View File

@@ -1,4 +1,5 @@
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Scene;
@@ -9,6 +10,12 @@ public class HandlerStartCocoonStageCsReq : Handler
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = StartCocoonStageCsReq.Parser.ParseFrom(data);
await connection.Player!.BattleManager!.StartCocoonStage((int)req.CocoonId, (int)req.Wave, (int)req.WorldLevel);
var battle = await connection.Player!.BattleManager!.StartCocoonStage((int)req.CocoonId, (int)req.Wave, (int)req.WorldLevel);
connection.Player.SceneInstance?.ClearSummonUnit();
if (battle != null)
await connection.SendPacket(new PacketStartCocoonStageScRsp(battle, (int)req.CocoonId, (int)req.Wave));
else
await connection.SendPacket(new PacketStartCocoonStageScRsp());
}
}

View File

@@ -0,0 +1,31 @@
using EggLink.DanhengServer.GameServer.Game.Battle;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Adventure;
public class PacketQuickStartCocoonStageScRsp : BasePacket
{
public PacketQuickStartCocoonStageScRsp() : base(CmdIds.QuickStartCocoonStageScRsp)
{
var rsp = new QuickStartCocoonStageScRsp
{
Retcode = 1
};
SetData(rsp);
}
public PacketQuickStartCocoonStageScRsp(BattleInstance battle, int cocoonId, int wave) : base(
CmdIds.QuickStartCocoonStageScRsp)
{
var rsp = new QuickStartCocoonStageScRsp
{
CocoonId = (uint)cocoonId,
Wave = (uint)wave,
BattleInfo = battle.ToProto()
};
SetData(rsp);
}
}