mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
perf: allow some avatars create an extra summon unit
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
namespace EggLink.DanhengServer.Data.Config.Task;
|
||||
|
||||
public class DestroySummonUnit : TaskConfigInfo
|
||||
public class CreateSummonUnit : TaskConfigInfo
|
||||
{
|
||||
public int SummonUnitID { get; set; }
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace EggLink.DanhengServer.Data.Config.Task;
|
||||
|
||||
public class CreateSummonUnit : TaskConfigInfo
|
||||
public class DestroySummonUnit : TaskConfigInfo
|
||||
{
|
||||
public int SummonUnitID { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
using EggLink.DanhengServer.Data.Config.SummonUnit;
|
||||
using EggLink.DanhengServer.Enums.Avatar;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
|
||||
namespace EggLink.DanhengServer.Data.Excel;
|
||||
|
||||
@@ -7,6 +10,9 @@ public class SummonUnitDataExcel : ExcelResource
|
||||
{
|
||||
public int ID { get; set; }
|
||||
public string JsonPath { get; set; } = "";
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public SummonUnitUniqueGroupEnum UniqueGroup { get; set; }
|
||||
public bool DestroyOnEnterBattle { get; set; }
|
||||
public bool RemoveMazeBuffOnDestroy { get; set; }
|
||||
|
||||
|
||||
8
Common/Enums/Avatar/SummonUnitUniqueGroupEnum.cs
Normal file
8
Common/Enums/Avatar/SummonUnitUniqueGroupEnum.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace EggLink.DanhengServer.Enums.Avatar;
|
||||
|
||||
public enum SummonUnitUniqueGroupEnum
|
||||
{
|
||||
None = 0,
|
||||
TeamField = 1,
|
||||
_Count = 2
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using EggLink.DanhengServer.Data;
|
||||
using EggLink.DanhengServer.Data.Excel;
|
||||
using EggLink.DanhengServer.Database.Avatar;
|
||||
using EggLink.DanhengServer.Database.Inventory;
|
||||
using EggLink.DanhengServer.GameServer.Game.Player;
|
||||
using EggLink.DanhengServer.GameServer.Game.RogueMagic;
|
||||
@@ -197,7 +198,7 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
InvokeOnPlayerEnterBattle(Player, battleInstance);
|
||||
|
||||
await Player.SendPacket(new PacketSceneEnterStageScRsp(battleInstance));
|
||||
Player.SceneInstance?.ClearSummonUnit();
|
||||
Player.SceneInstance?.OnEnterStage();
|
||||
}
|
||||
|
||||
public async ValueTask<BattleInstance?> StartCocoonStage(int cocoonId, int wave, int worldLevel)
|
||||
@@ -326,15 +327,13 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
// Update battle status
|
||||
foreach (var avatar in req.Stt.BattleAvatarList)
|
||||
{
|
||||
var avatarInstance = Player.AvatarManager!.GetFormalAvatar((int)avatar.Id);
|
||||
BaseAvatarInfo? avatarInstance = Player.AvatarManager!.GetFormalAvatar((int)avatar.Id);
|
||||
var prop = avatar.AvatarStatus;
|
||||
var curHp = (int)Math.Max(Math.Round(prop.LeftHp / prop.MaxHp * 10000), minimumHp);
|
||||
var curSp = (int)prop.LeftSp * 100;
|
||||
if (avatarInstance == null)
|
||||
{
|
||||
GameData.SpecialAvatarData.TryGetValue((int)(avatar.Id * 10 + Player.Data.WorldLevel),
|
||||
out var specialAvatar);
|
||||
if (specialAvatar == null) continue;
|
||||
avatarInstance = Player.AvatarManager!.GetTrialAvatar((int)avatar.Id);
|
||||
avatarInstance?.SetCurHp(curHp, lineup.LineupType != 0);
|
||||
avatarInstance?.SetCurSp(curSp, lineup.LineupType != 0);
|
||||
}
|
||||
|
||||
@@ -60,7 +60,8 @@ public class LineupManager : BasePlayerManager
|
||||
BaseAvatarInfo? avatarInfo = null;
|
||||
if (avatar.SpecialAvatarId > 0)
|
||||
{
|
||||
avatarInfo = Player.AvatarManager!.GetFormalAvatar(avatar.SpecialAvatarId);
|
||||
avatarInfo = Player.AvatarManager!.GetTrialAvatar(avatar.SpecialAvatarId);
|
||||
avatarType = AvatarType.AvatarTrialType;
|
||||
}
|
||||
else if (avatar.AssistUid > 0)
|
||||
{
|
||||
@@ -158,10 +159,13 @@ public class LineupManager : BasePlayerManager
|
||||
|
||||
foreach (var avatarId in baseAvatarIds)
|
||||
{
|
||||
GameData.SpecialAvatarData.TryGetValue(avatarId * 10 + worldLevel, out var specialAvatar);
|
||||
if (specialAvatar != null)
|
||||
var trial = Player.AvatarManager!.GetTrialAvatar(avatarId);
|
||||
if (trial != null)
|
||||
{
|
||||
trial.CheckLevel(worldLevel);
|
||||
lineup.BaseAvatars!.Add(new LineupAvatarInfo
|
||||
{ BaseAvatarId = specialAvatar.AvatarID, SpecialAvatarId = specialAvatar.SpecialAvatarID });
|
||||
{ BaseAvatarId = trial.BaseAvatarId, SpecialAvatarId = trial.SpecialAvatarId });
|
||||
}
|
||||
else
|
||||
lineup.BaseAvatars!.Add(new LineupAvatarInfo { BaseAvatarId = avatarId });
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ public class EntityMonster(
|
||||
public List<SceneBuff> BuffList { get; set; } = [];
|
||||
public SceneBuff? TempBuff { get; set; }
|
||||
public bool IsAlive { get; private set; } = true;
|
||||
public bool IsInSummonUnit { get; set; } = false;
|
||||
|
||||
public int EventID { get; set; } = info.EventID;
|
||||
public int CustomStageID { get; set; } = 0;
|
||||
|
||||
@@ -19,6 +19,7 @@ public class EntitySummonUnit : IGameEntity
|
||||
public int EntityId { get; set; }
|
||||
public int GroupID { get; set; } = 0;
|
||||
public List<SceneBuff> BuffList { get; set; } = [];
|
||||
public HashSet<int> CaughtEntityIds { get; set; } = [];
|
||||
|
||||
public async ValueTask AddBuff(SceneBuff buff)
|
||||
{
|
||||
|
||||
@@ -287,6 +287,8 @@ public class AbilityLevelTask(PlayerInstance player)
|
||||
if (!GameData.SummonUnitDataData.TryGetValue(createSummonUnit.SummonUnitID, out var excel))
|
||||
return new AbilityLevelResult();
|
||||
|
||||
if (excel.IsClient) return new AbilityLevelResult();
|
||||
|
||||
var unit = new EntitySummonUnit
|
||||
{
|
||||
EntityId = 0,
|
||||
@@ -307,7 +309,7 @@ public class AbilityLevelTask(PlayerInstance player)
|
||||
|
||||
public async ValueTask<AbilityLevelResult> DestroySummonUnit(AbilityLevelParam param)
|
||||
{
|
||||
if (param.Act is CreateSummonUnit createSummonUnit) await Player.SceneInstance!.ClearSummonUnit(); // TODO
|
||||
if (param.Act is DestroySummonUnit destroySummonUnit) await Player.SceneInstance!.RemoveSummonUnitById(destroySummonUnit.SummonUnitID); // TODO
|
||||
|
||||
return new AbilityLevelResult();
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ public class HandlerQuickStartCocoonStageCsReq : Handler
|
||||
var battle =
|
||||
await connection.Player!.BattleManager!.StartCocoonStage((int)req.CocoonId, (int)req.Wave,
|
||||
(int)req.WorldLevel);
|
||||
connection.Player.SceneInstance?.ClearSummonUnit();
|
||||
connection.Player.SceneInstance?.OnEnterStage();
|
||||
|
||||
if (battle != null)
|
||||
await connection.SendPacket(new PacketQuickStartCocoonStageScRsp(battle, (int)req.CocoonId, (int)req.Wave));
|
||||
|
||||
@@ -12,7 +12,7 @@ public class HandlerRefreshTriggerByClientCsReq : Handler
|
||||
var req = RefreshTriggerByClientCsReq.Parser.ParseFrom(data);
|
||||
|
||||
var player = connection.Player!;
|
||||
var ret = await player.SceneInstance!.TriggerSummonUnit(req.TriggerName, req.TriggerTargetIdList.ToList());
|
||||
var ret = await player.SceneInstance!.TriggerSummonUnit((int)req.TriggerEntityId, req.TriggerName, req.TriggerTargetIdList.ToList());
|
||||
|
||||
await connection.SendPacket(new PacketRefreshTriggerByClientScRsp(ret, req.TriggerName, req.TriggerEntityId));
|
||||
}
|
||||
|
||||
@@ -16,6 +16,6 @@ public class HandlerSceneCastSkillCsReq : Handler
|
||||
|
||||
await connection.SendPacket(new PacketSceneCastSkillScRsp(res.RetCode, req.CastEntityId, res.Instance,
|
||||
res.TriggerBattleInfos ?? []));
|
||||
if (res.Instance != null) await player.SceneInstance!.ClearSummonUnit();
|
||||
if (res.Instance != null) await player.SceneInstance!.OnEnterStage();
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ public class HandlerStartCocoonStageCsReq : Handler
|
||||
var battle =
|
||||
await connection.Player!.BattleManager!.StartCocoonStage((int)req.CocoonId, (int)req.Wave,
|
||||
(int)req.WorldLevel);
|
||||
connection.Player.SceneInstance?.ClearSummonUnit();
|
||||
connection.Player.SceneInstance?.OnEnterStage();
|
||||
|
||||
if (battle != null)
|
||||
await connection.SendPacket(new PacketStartCocoonStageScRsp(battle, (int)req.CocoonId, (int)req.Wave));
|
||||
|
||||
Reference in New Issue
Block a user