From b5b0331f13868010f678fc83fb4ff588da2fb50c Mon Sep 17 00:00:00 2001 From: Somebody Date: Sun, 27 Oct 2024 10:01:46 +0800 Subject: [PATCH] Rappa Skill --- Common/Enums/Mission/MissionFinishTypeEnum.cs | 3 +- .../Battle/Skill/Action/MazeRemoveMazeBuff.cs | 26 +++++++++++++++ GameServer/Game/Battle/Skill/MazeSkill.cs | 2 +- .../Recv/Scene/HandlerSceneCastSkillCsReq.cs | 33 +++++++++---------- 4 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 GameServer/Game/Battle/Skill/Action/MazeRemoveMazeBuff.cs diff --git a/Common/Enums/Mission/MissionFinishTypeEnum.cs b/Common/Enums/Mission/MissionFinishTypeEnum.cs index 7a10ebf8..b1c88b2f 100644 --- a/Common/Enums/Mission/MissionFinishTypeEnum.cs +++ b/Common/Enums/Mission/MissionFinishTypeEnum.cs @@ -560,5 +560,6 @@ public enum MissionFinishTypeEnum RogueUnlockMedalCnt = 260030, RogueMagicFinishWithAllScepterFuncType = 260031, MusicRhythmFinishAllLevel = 260032, - MusicRhythmFinishAnyLevel = 260033 + MusicRhythmFinishAnyLevel = 260033, + RogueMagicFinishExtraLayerWithDifficulty = 260034 } \ No newline at end of file diff --git a/GameServer/Game/Battle/Skill/Action/MazeRemoveMazeBuff.cs b/GameServer/Game/Battle/Skill/Action/MazeRemoveMazeBuff.cs new file mode 100644 index 00000000..83b31fbd --- /dev/null +++ b/GameServer/Game/Battle/Skill/Action/MazeRemoveMazeBuff.cs @@ -0,0 +1,26 @@ +using EggLink.DanhengServer.GameServer.Game.Player; +using EggLink.DanhengServer.GameServer.Game.Scene.Entity; +using EggLink.DanhengServer.GameServer.Game.Scene; + +namespace EggLink.DanhengServer.GameServer.Game.Battle.Skill.Action; + +public class MazeRemoveMazeBuff(int buffId) : IMazeSkillAction +{ + public int BuffId { get; } = buffId; + + public async ValueTask OnAttack(AvatarSceneInfo avatar, List entities) + { + await System.Threading.Tasks.Task.CompletedTask; + } + + public async ValueTask OnCast(AvatarSceneInfo avatar, PlayerInstance player) + { + await avatar.RemoveBuff(BuffId); + } + + public async ValueTask OnHitTarget(AvatarSceneInfo avatar, List entities) + { + foreach (var entity in entities) + await entity.RemoveBuff(BuffId); + } +} \ No newline at end of file diff --git a/GameServer/Game/Battle/Skill/MazeSkill.cs b/GameServer/Game/Battle/Skill/MazeSkill.cs index bd0f6e2e..0a3d8916 100644 --- a/GameServer/Game/Battle/Skill/MazeSkill.cs +++ b/GameServer/Game/Battle/Skill/MazeSkill.cs @@ -42,7 +42,7 @@ public class MazeSkill Actions.Add(new MazeAddMazeBuff(task.ID, task.LifeTime.GetLifeTime())); break; case TaskTypeEnum.RemoveMazeBuff: - Actions.RemoveAll(a => a is MazeAddMazeBuff buff && buff.BuffId == task.ID); + Actions.Add(new MazeRemoveMazeBuff(task.ID)); break; case TaskTypeEnum.AdventureModifyTeamPlayerHP: break; diff --git a/GameServer/Server/Packet/Recv/Scene/HandlerSceneCastSkillCsReq.cs b/GameServer/Server/Packet/Recv/Scene/HandlerSceneCastSkillCsReq.cs index aace4ecd..b369ddd9 100644 --- a/GameServer/Server/Packet/Recv/Scene/HandlerSceneCastSkillCsReq.cs +++ b/GameServer/Server/Packet/Recv/Scene/HandlerSceneCastSkillCsReq.cs @@ -21,34 +21,33 @@ public class HandlerSceneCastSkillCsReq : Handler if (caster != null) { - // Check if normal attack or technique was used if (req.MazeAbilityStr != "") { - // overwrite whole skill + // overwrite AbilityInfo? ability = null; caster.AvatarInfo.Excel?.MazeAbility.TryGetValue(req.MazeAbilityStr, out ability); if (ability != null) { mazeSkill = MazeSkillManager.GetSkill(caster.AvatarInfo.GetAvatarId(), ability, req); mazeSkill.OnCast(caster, player); - - await connection.SendPacket(new PacketSceneCastSkillScRsp(req.CastEntityId, [])); - return; - } - } - - if (req.SkillIndex > 0) - { - // Cast skill effects - if (caster.AvatarInfo.Excel != null && caster.AvatarInfo.Excel!.MazeSkill != null) - { - mazeSkill = MazeSkillManager.GetSkill(caster.AvatarInfo.GetAvatarId(), (int)req.SkillIndex, req); - mazeSkill.OnCast(caster, player); } } else { - mazeSkill = MazeSkillManager.GetSkill(caster.AvatarInfo.GetAvatarId(), 0, req); + // Check if normal attack or technique was used + if (req.SkillIndex > 0) + { + // Cast skill effects + if (caster.AvatarInfo.Excel != null && caster.AvatarInfo.Excel!.MazeSkill != null) + { + mazeSkill = MazeSkillManager.GetSkill(caster.AvatarInfo.GetAvatarId(), (int)req.SkillIndex, req); + mazeSkill.OnCast(caster, player); + } + } + else + { + mazeSkill = MazeSkillManager.GetSkill(caster.AvatarInfo.GetAvatarId(), 0, req); + } } } @@ -69,7 +68,7 @@ public class HandlerSceneCastSkillCsReq : Handler foreach (var id in req.HitTargetEntityIdList) hitTargetEntityIdList.Add(id); // Start battle - await connection.Player!.BattleManager!.StartBattle(req, mazeSkill!, [.. hitTargetEntityIdList]); + await connection.Player!.BattleManager!.StartBattle(req, mazeSkill, [.. hitTargetEntityIdList]); } } else