mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
feat: Quick Cocoon
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user