From 5f999c72326492b8ee76b4eaa72194d811bd3ee1 Mon Sep 17 00:00:00 2001 From: Somebody Date: Sat, 25 May 2024 17:33:42 +0800 Subject: [PATCH] fix hero's bugs --- Common/Data/Excel/RaidConfigExcel.cs | 8 ++- Common/Database/Avatar/AvatarData.cs | 58 ++++++++++--------- Common/Database/Lineup/LineupData.cs | 2 +- Common/Enums/Scene/RaidTeamTypeEnum.cs | 17 ++++++ GameServer/Command/Cmd/CommandGiveall.cs | 2 +- GameServer/Game/Battle/BattleManager.cs | 6 +- GameServer/Game/Inventory/InventoryManager.cs | 31 +++++----- GameServer/Game/Lineup/LineupManager.cs | 10 +++- .../MissionHandlerSubMissionFinishCnt.cs | 6 +- GameServer/Game/Mission/MissionManager.cs | 13 ++--- GameServer/Game/Player/PlayerInstance.cs | 13 ++++- .../Recv/Battle/HandlerSceneCastSkillCsReq.cs | 2 +- .../Player/HandlerSetHeroBasicTypeCsReq.cs | 3 +- .../Recv/Player/HandlerSetPlayerInfoCsReq.cs | 1 - .../Recv/Scene/HandlerLeaveRaidCsReq.cs | 17 +++++- .../Recv/Scene/HandlerStartRaidCsReq.cs | 38 +++++++++++- .../Send/Avatar/PacketGetAvatarDataScRsp.cs | 4 +- .../Send/Player/PacketGetArchiveDataScRsp.cs | 5 +- 18 files changed, 165 insertions(+), 71 deletions(-) create mode 100644 Common/Enums/Scene/RaidTeamTypeEnum.cs diff --git a/Common/Data/Excel/RaidConfigExcel.cs b/Common/Data/Excel/RaidConfigExcel.cs index faff3e69..5a0878b2 100644 --- a/Common/Data/Excel/RaidConfigExcel.cs +++ b/Common/Data/Excel/RaidConfigExcel.cs @@ -1,4 +1,7 @@ -using System; +using EggLink.DanhengServer.Enums.Scene; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -14,6 +17,9 @@ namespace EggLink.DanhengServer.Data.Excel public int FinishEntranceID { get; set; } + [JsonConverter(typeof(StringEnumConverter))] + public RaidTeamTypeEnum TeamType { get; set; } + public List TrialAvatarList { get; set; } = []; public List MainMissionIDList { get; set; } = []; public override int GetId() diff --git a/Common/Database/Avatar/AvatarData.cs b/Common/Database/Avatar/AvatarData.cs index 9b8307e3..bcfcb910 100644 --- a/Common/Database/Avatar/AvatarData.cs +++ b/Common/Database/Avatar/AvatarData.cs @@ -78,23 +78,6 @@ namespace EggLink.DanhengServer.Database.Avatar SkillTree = []; if (AvatarId == 8001) { - //bool isMan = HeroId % 2 != 0; - //SkillTreeExtra.Add(isMan ? 8001: 8002, []); - //SkillTreeExtra.Add(isMan ? 8003 : 8004, []); - - //var warriorExcel = GameData.AvatarConfigData[8001]; - //var defenseExcel = GameData.AvatarConfigData[8003]; - - //warriorExcel.DefaultSkillTree.ForEach(skill => - //{ - // SkillTreeExtra[isMan ? 8001 : 8002].Add(skill.PointID, skill.Level); - //}); - - //defenseExcel.DefaultSkillTree.ForEach(skill => - //{ - // SkillTreeExtra[isMan ? 8003 : 8004].Add(skill.PointID, skill.Level); - //}); - // create them in GetSkillTree } else { @@ -105,6 +88,30 @@ namespace EggLink.DanhengServer.Database.Avatar } } + public void ValidateHero() + { + if (HeroId == 0) + { + return; + } + + var isWoman = HeroId % 2 == 0; + + var shouldRemove = new List(); + foreach (var skill in SkillTreeExtra.Keys) + { + if (skill % 2 == 0 != isWoman) // remove + { + shouldRemove.Add(skill); + } + } + + foreach (var skill in shouldRemove) + { + SkillTreeExtra.Remove(skill); + } + } + public bool HasTakenReward(int promotion) { return (Rewards & (1 << promotion)) != 0; @@ -215,16 +222,13 @@ namespace EggLink.DanhengServer.Database.Avatar proto.EquipmentUniqueId = (uint)EquipId; } - if (HeroId == 0) + foreach (var skill in GetSkillTree()) { - foreach (var skill in SkillTree) + proto.SkilltreeList.Add(new AvatarSkillTree() { - proto.SkilltreeList.Add(new AvatarSkillTree() - { - PointId = (uint)skill.Key, - Level = (uint)skill.Value - }); - } + PointId = (uint)skill.Key, + Level = (uint)skill.Value + }); } for (int i = 0; i < Promotion; i++) @@ -260,7 +264,7 @@ namespace EggLink.DanhengServer.Database.Avatar { return new() { - Id = (uint)GetSpecialAvatarId(), + Id = (uint)GetUniqueAvatarId(), Slot = (uint)slot, AvatarType = avatarType, Hp = info.IsExtraLineup() ? (uint)ExtraLineupHp : (uint)CurrentHp, @@ -281,7 +285,7 @@ namespace EggLink.DanhengServer.Database.Avatar Level = (uint)Level, Promotion = (uint)Promotion, Rank = (uint)Rank, - Index = (uint)lineup.GetSlot(GetAvatarId()), + Index = (uint)lineup.GetSlot(GetBaseAvatarId()), Hp = (uint)GetCurHp(lineup.LineupType != 0), SpBar = new() { diff --git a/Common/Database/Lineup/LineupData.cs b/Common/Database/Lineup/LineupData.cs index 0fbc7fca..a439e4ca 100644 --- a/Common/Database/Lineup/LineupData.cs +++ b/Common/Database/Lineup/LineupData.cs @@ -52,7 +52,7 @@ namespace EggLink.DanhengServer.Database.Lineup { foreach (var avatar in BaseAvatars) { - var avatarInfo = AvatarData?.Avatars?.Find(item => item.GetAvatarId() == avatar.BaseAvatarId); + var avatarInfo = AvatarData?.Avatars?.Find(item => item.GetBaseAvatarId() == avatar.BaseAvatarId); if (avatarInfo != null) { if (avatarInfo.GetCurHp(IsExtraLineup()) <= 0 && !allowRevive) diff --git a/Common/Enums/Scene/RaidTeamTypeEnum.cs b/Common/Enums/Scene/RaidTeamTypeEnum.cs new file mode 100644 index 00000000..7c04afdd --- /dev/null +++ b/Common/Enums/Scene/RaidTeamTypeEnum.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EggLink.DanhengServer.Enums.Scene +{ + public enum RaidTeamTypeEnum + { + None, + Player, + TrialOnly, + TrialAndPlayer, + TrialOrPlayer + } +} diff --git a/GameServer/Command/Cmd/CommandGiveall.cs b/GameServer/Command/Cmd/CommandGiveall.cs index cbd21ba3..afb7349c 100644 --- a/GameServer/Command/Cmd/CommandGiveall.cs +++ b/GameServer/Command/Cmd/CommandGiveall.cs @@ -183,7 +183,7 @@ namespace EggLink.DanhengServer.Command.Cmd var items = new List(); foreach (var relic in relicList) { - var item = player.InventoryManager!.AddItem(relic.ID, amount, true, 1, Math.Max(Math.Min(level, relic.MaxLevel), 1), sync: false); + var item = player.InventoryManager!.AddItem(relic.ID, amount, false, 1, Math.Max(Math.Min(level, relic.MaxLevel), 1), sync: false); if (item != null) items.Add(item); diff --git a/GameServer/Game/Battle/BattleManager.cs b/GameServer/Game/Battle/BattleManager.cs index e1a835df..0bfe7e6a 100644 --- a/GameServer/Game/Battle/BattleManager.cs +++ b/GameServer/Game/Battle/BattleManager.cs @@ -172,7 +172,11 @@ namespace EggLink.DanhengServer.Game.Battle public void StartStage(int eventId) { - if (Player.BattleInstance != null) return; + if (Player.BattleInstance != null) + { + Player.SendPacket(new PacketSceneEnterStageScRsp(Player.BattleInstance)); + return; + } GameData.StageConfigData.TryGetValue(eventId, out var stageConfig); if (stageConfig == null) diff --git a/GameServer/Game/Inventory/InventoryManager.cs b/GameServer/Game/Inventory/InventoryManager.cs index 752b46e7..f0955ed7 100644 --- a/GameServer/Game/Inventory/InventoryManager.cs +++ b/GameServer/Game/Inventory/InventoryManager.cs @@ -35,11 +35,16 @@ namespace EggLink.DanhengServer.Game.Inventory public void AddItems(List items, bool notify = true) { + var syncItems = new List(); foreach (var item in items) { - AddItem(item.ItemId, items.Count, false, sync:false); + var i = AddItem(item.ItemId, items.Count, false, sync:false, returnRaw:true); + if (i != null) + { + syncItems.Add(i); + } } - Player.SendPacket(new PacketPlayerSyncScNotify(items)); + Player.SendPacket(new PacketPlayerSyncScNotify(syncItems)); if (notify) { Player.SendPacket(new PacketScenePlaneEventScNotify(items)); @@ -48,7 +53,7 @@ namespace EggLink.DanhengServer.Game.Inventory DatabaseHelper.Instance?.UpdateInstance(Data); } - public ItemData? AddItem(int itemId, int count, bool notify = true, int rank = 1, int level = 1, bool sync = true) + public ItemData? AddItem(int itemId, int count, bool notify = true, int rank = 1, int level = 1, bool sync = true, bool returnRaw = false) { GameData.ItemConfigData.TryGetValue(itemId, out var itemConfig); if (itemConfig == null) return null; @@ -136,6 +141,7 @@ namespace EggLink.DanhengServer.Game.Inventory else { Player.AddAvatar(itemId, sync); + AddItem(itemId + 200000, 1); } break; default: @@ -156,7 +162,7 @@ namespace EggLink.DanhengServer.Game.Inventory } } - return clone ?? itemData; + return returnRaw ? itemData : clone ?? itemData; } public ItemData PutItem(int itemId, int count, int rank = 0, int promotion = 0, int level = 0, int exp = 0, int totalExp = 0, int mainAffix = 0, List? subAffixes = null, int uniqueId = 0) @@ -493,7 +499,7 @@ namespace EggLink.DanhengServer.Game.Inventory { // switch equipAvatar.EquipId = oldItem.UniqueId; - oldItem.EquipAvatar = equipAvatar.GetBaseAvatarId(); + oldItem.EquipAvatar = equipAvatar.GetAvatarId(); Player.SendPacket(new PacketPlayerSyncScNotify(equipAvatar, oldItem)); } } else @@ -501,13 +507,11 @@ namespace EggLink.DanhengServer.Game.Inventory if (oldItem != null) { oldItem.EquipAvatar = 0; + Player.SendPacket(new PacketPlayerSyncScNotify(oldItem)); } } - itemData.EquipAvatar = avatarData.GetBaseAvatarId(); + itemData.EquipAvatar = avatarData.GetAvatarId(); avatarData.EquipId = itemData.UniqueId; - // save - DatabaseHelper.Instance!.UpdateInstance(Data); - DatabaseHelper.Instance!.UpdateInstance(Player.AvatarManager.AvatarData!); Player.SendPacket(new PacketPlayerSyncScNotify(avatarData, itemData)); } @@ -526,7 +530,7 @@ namespace EggLink.DanhengServer.Game.Inventory { // switch equipAvatar.Relic[slot] = oldItem.UniqueId; - oldItem.EquipAvatar = equipAvatar.GetBaseAvatarId(); + oldItem.EquipAvatar = equipAvatar.GetAvatarId(); Player.SendPacket(new PacketPlayerSyncScNotify(equipAvatar, oldItem)); } } else @@ -534,9 +538,10 @@ namespace EggLink.DanhengServer.Game.Inventory if (oldItem != null) { oldItem.EquipAvatar = 0; + Player.SendPacket(new PacketPlayerSyncScNotify(oldItem)); } } - itemData.EquipAvatar = avatarData.GetBaseAvatarId(); + itemData.EquipAvatar = avatarData.GetAvatarId(); avatarData.Relic[slot] = itemData.UniqueId; // save DatabaseHelper.Instance!.UpdateInstance(Data); @@ -553,8 +558,6 @@ namespace EggLink.DanhengServer.Game.Inventory if (itemData == null) return; avatarData.Relic.Remove(slot); itemData.EquipAvatar = 0; - DatabaseHelper.Instance!.UpdateInstance(Data); - DatabaseHelper.Instance!.UpdateInstance(Player.AvatarManager.AvatarData!); Player.SendPacket(new PacketPlayerSyncScNotify(avatarData, itemData)); } @@ -566,8 +569,6 @@ namespace EggLink.DanhengServer.Game.Inventory if (itemData == null) return; itemData.EquipAvatar = 0; avatarData.EquipId = 0; - DatabaseHelper.Instance!.UpdateInstance(Data); - DatabaseHelper.Instance!.UpdateInstance(Player.AvatarManager.AvatarData!); Player.SendPacket(new PacketPlayerSyncScNotify(avatarData, itemData)); } diff --git a/GameServer/Game/Lineup/LineupManager.cs b/GameServer/Game/Lineup/LineupManager.cs index 0cfbc24a..dd95cef2 100644 --- a/GameServer/Game/Lineup/LineupManager.cs +++ b/GameServer/Game/Lineup/LineupManager.cs @@ -161,12 +161,18 @@ namespace EggLink.DanhengServer.Game.Lineup foreach (var avatarId in baseAvatarIds) { - lineup.BaseAvatars!.Add(new() { BaseAvatarId = avatarId }); + GameData.SpecialAvatarData.TryGetValue(avatarId * 10 + Player.Data.WorldLevel, out var specialAvatar); + if (specialAvatar != null) + { + lineup.BaseAvatars!.Add(new() { BaseAvatarId = specialAvatar.AvatarID, SpecialAvatarId = specialAvatar.GetId() }); + } else + { + lineup.BaseAvatars!.Add(new() { BaseAvatarId = avatarId }); + } } LineupData.Lineups.Add(index, lineup); LineupData.CurExtraLineup = index; - DatabaseHelper.Instance?.UpdateInstance(LineupData); } public void AddAvatar(int lineupIndex, int avatarId, bool sendPacket = true) diff --git a/GameServer/Game/Mission/FinishType/Handler/MissionHandlerSubMissionFinishCnt.cs b/GameServer/Game/Mission/FinishType/Handler/MissionHandlerSubMissionFinishCnt.cs index df9acb19..ddddfb46 100644 --- a/GameServer/Game/Mission/FinishType/Handler/MissionHandlerSubMissionFinishCnt.cs +++ b/GameServer/Game/Mission/FinishType/Handler/MissionHandlerSubMissionFinishCnt.cs @@ -15,17 +15,17 @@ namespace EggLink.DanhengServer.Game.Mission.FinishType.Handler public override void HandleFinishType(PlayerInstance player, SubMissionInfo info, object? arg) { var finish = info.Operation == OperationEnum.And; - foreach (var missionId in info.ParamIntList) + foreach (var missionId in info.ParamIntList ?? []) { var status = player.MissionManager!.GetSubMissionStatus(missionId); - if (status != MissionPhaseEnum.Finish) + if (status != MissionPhaseEnum.Finish && status != MissionPhaseEnum.None && status != MissionPhaseEnum.Cancel) { if (info.Operation == OperationEnum.And) { finish = false; break; } - } else if (status == MissionPhaseEnum.Finish) + } else if (status == MissionPhaseEnum.Finish || status == MissionPhaseEnum.None || status == MissionPhaseEnum.Cancel) { if (info.Operation == OperationEnum.Or) { diff --git a/GameServer/Game/Mission/MissionManager.cs b/GameServer/Game/Mission/MissionManager.cs index 0de28294..0d0bbd7b 100644 --- a/GameServer/Game/Mission/MissionManager.cs +++ b/GameServer/Game/Mission/MissionManager.cs @@ -24,7 +24,7 @@ namespace EggLink.DanhengServer.Game.Mission public Dictionary ActionHandlers = []; public Dictionary FinishTypeHandlers = []; - public readonly List SkipSubMissionList = [101030104]; // bug + public readonly List SkipSubMissionList = [101030104, 101050116]; // bug public MissionManager(PlayerInstance player) : base(player) { @@ -207,17 +207,15 @@ namespace EggLink.DanhengServer.Game.Mission HandleMissionReward(missionId); HandleFinishType(MissionFinishTypeEnum.FinishMission); - DatabaseHelper.Instance?.UpdateInstance(Data); - - GameData.RaidConfigData.TryGetValue(Player.CurRaidId, out var raidConfig); + GameData.RaidConfigData.TryGetValue(Player.CurRaidId * 100 + 0, out var raidConfig); if (raidConfig != null) { - bool leave = false; + bool leave = true; foreach (var id in raidConfig.MainMissionIDList) { - if (GetMainMissionStatus(id) == MissionPhaseEnum.Finish) + if (GetMainMissionStatus(id) != MissionPhaseEnum.Finish) { - leave = true; + leave = false; } } if (leave) @@ -320,7 +318,6 @@ namespace EggLink.DanhengServer.Game.Mission if (missionId == 101140201) { Player.ChangeHeroBasicType(Enums.Avatar.HeroBasicTypeEnum.Knight); - Player.SendPacket(new PacketPlayerSyncScNotify(Player.AvatarManager!.GetHero()!)); } if (missionId == 100040117 || missionId == 100040118) diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs index 429303c9..9d4771dc 100644 --- a/GameServer/Game/Player/PlayerInstance.cs +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -29,6 +29,7 @@ using EggLink.DanhengServer.Server.Packet.Send.Scene; using EggLink.DanhengServer.Util; using EggLink.DanhengServer.Enums.Avatar; using EggLink.DanhengServer.Server.Packet.Send.Avatar; +using System.Numerics; namespace EggLink.DanhengServer.Game.Player { @@ -202,7 +203,9 @@ namespace EggLink.DanhengServer.Game.Player if (Data.CurBasicType == id) return; Data.CurBasicType = id; AvatarManager!.GetHero()!.HeroId = id; + AvatarManager!.GetHero()!.ValidateHero(); SendPacket(new PacketHeroBasicTypeChangedNotify(id)); + SendPacket(new PacketPlayerSyncScNotify(AvatarManager!.GetHero()!)); } public void AddAvatar(int avatarId, bool sync = true) @@ -332,6 +335,7 @@ namespace EggLink.DanhengServer.Game.Player if (oldState == PropStateEnum.ChestClosed && newState == PropStateEnum.ChestUsed) { // TODO: Add treasure chest handling + InventoryManager!.HandlePlaneEvent(prop.PropInfo.EventID); } break; case PropTypeEnum.PROP_DESTRUCT: @@ -577,8 +581,15 @@ namespace EggLink.DanhengServer.Game.Player public void LeaveRaid() { if (CurRaidId == 0) return; - GameData.RaidConfigData.TryGetValue(CurRaidId, out var config); + GameData.RaidConfigData.TryGetValue(CurRaidId * 100 + 0, out var config); if (config == null) return; + + if (config.TeamType == RaidTeamTypeEnum.TrialOnly) + { + LineupManager!.SetExtraLineup(ExtraLineupType.LineupNone, []); + SendPacket(new PacketSyncLineupNotify(LineupManager!.GetCurLineup()!)); + } + if (config.FinishEntranceID > 0) { EnterScene(config.FinishEntranceID, 0, true); diff --git a/GameServer/Server/Packet/Recv/Battle/HandlerSceneCastSkillCsReq.cs b/GameServer/Server/Packet/Recv/Battle/HandlerSceneCastSkillCsReq.cs index 6ed3bf40..cebbae3e 100644 --- a/GameServer/Server/Packet/Recv/Battle/HandlerSceneCastSkillCsReq.cs +++ b/GameServer/Server/Packet/Recv/Battle/HandlerSceneCastSkillCsReq.cs @@ -25,7 +25,7 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Battle if (info != null) // cast by player { - mazeSkill = MazeSkillManager.GetSkill(info.AvatarInfo.AvatarId, (int)req.SkillIndex); + mazeSkill = MazeSkillManager.GetSkill(info.AvatarInfo.GetAvatarId(), (int)req.SkillIndex); } if (req.HitTargetEntityIdList.Count == 0) diff --git a/GameServer/Server/Packet/Recv/Player/HandlerSetHeroBasicTypeCsReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerSetHeroBasicTypeCsReq.cs index 52491b17..10ca2197 100644 --- a/GameServer/Server/Packet/Recv/Player/HandlerSetHeroBasicTypeCsReq.cs +++ b/GameServer/Server/Packet/Recv/Player/HandlerSetHeroBasicTypeCsReq.cs @@ -25,10 +25,9 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Player } avatar.HeroId = (int)req.BasicType; - DatabaseHelper.Instance!.UpdateInstance(player.AvatarManager.AvatarData!); player.Data.CurBasicType = (int)req.BasicType; - DatabaseHelper.Instance!.UpdateInstance(player.Data); + connection.SendPacket(new PacketPlayerSyncScNotify(avatar)); connection.SendPacket(new PacketSetHeroBasicTypeScRsp((uint)req.BasicType)); } } diff --git a/GameServer/Server/Packet/Recv/Player/HandlerSetPlayerInfoCsReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerSetPlayerInfoCsReq.cs index 4484fc7b..30eab77a 100644 --- a/GameServer/Server/Packet/Recv/Player/HandlerSetPlayerInfoCsReq.cs +++ b/GameServer/Server/Packet/Recv/Player/HandlerSetPlayerInfoCsReq.cs @@ -15,7 +15,6 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Player player.Data.Name = req.Nickname; if (req.Gender == Gender.None) { - DatabaseHelper.Instance?.UpdateInstance(player.Data); connection.SendPacket(new PacketSetPlayerInfoScRsp(player, req.IsModify)); return; } diff --git a/GameServer/Server/Packet/Recv/Scene/HandlerLeaveRaidCsReq.cs b/GameServer/Server/Packet/Recv/Scene/HandlerLeaveRaidCsReq.cs index 5ed2e4f1..396c522c 100644 --- a/GameServer/Server/Packet/Recv/Scene/HandlerLeaveRaidCsReq.cs +++ b/GameServer/Server/Packet/Recv/Scene/HandlerLeaveRaidCsReq.cs @@ -1,4 +1,7 @@ -using EggLink.DanhengServer.Proto; +using EggLink.DanhengServer.Data; +using EggLink.DanhengServer.Enums.Scene; +using EggLink.DanhengServer.Game.Lineup; +using EggLink.DanhengServer.Proto; using System; using System.Collections.Generic; using System.Linq; @@ -19,6 +22,18 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Scene return; } + GameData.RaidConfigData.TryGetValue(player.CurRaidId * 100 + 0, out var config); + if (config == null) + { + connection.SendPacket(CmdIds.LeaveRaidScRsp); + return; + } + + if (config.TeamType == RaidTeamTypeEnum.TrialOnly) + { + player.LineupManager!.SetExtraLineup(ExtraLineupType.LineupNone, []); + } + player.CurRaidId = 0; player.EnterScene(player.OldEntryId, 0, true); player.MoveTo(player.LastPos!, player.LastRot!); diff --git a/GameServer/Server/Packet/Recv/Scene/HandlerStartRaidCsReq.cs b/GameServer/Server/Packet/Recv/Scene/HandlerStartRaidCsReq.cs index 5ec80f5f..27daf275 100644 --- a/GameServer/Server/Packet/Recv/Scene/HandlerStartRaidCsReq.cs +++ b/GameServer/Server/Packet/Recv/Scene/HandlerStartRaidCsReq.cs @@ -1,5 +1,6 @@ using EggLink.DanhengServer.Data; using EggLink.DanhengServer.Proto; +using EggLink.DanhengServer.Server.Packet.Send.Lineup; using EggLink.DanhengServer.Server.Packet.Send.Scene; using System; using System.Collections.Generic; @@ -36,8 +37,43 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Scene entranceId = 2013301; } else { - entranceId = raidConfig.RaidID; + if (GameData.RaidConfigData.ContainsKey(raidConfig.RaidID)) + { + entranceId = raidConfig.RaidID; + } + else + { + entranceId = raidConfig.RaidID * 100 + 1; + GameData.MapEntranceData.TryGetValue(entranceId, out var entrance); + if (entrance != null) + { + // set + var firstMission = raidConfig.MainMissionIDList[0]; + var subMissionId = GameData.MainMissionData[firstMission].MissionInfo!.StartSubMissionList[0]; + var subMission = GameData.SubMissionData[subMissionId]; + if (entrance.FloorID != subMission.SubMissionInfo!.LevelFloorID) + { + entranceId = raidConfig.RaidID * 100 + 2; + } + else + { + entranceId = raidConfig.RaidID * 100 + 1; + } + } + else + { + entranceId = raidConfig.RaidID * 100 + 1; + } + } } + + if (raidConfig.TeamType == Enums.Scene.RaidTeamTypeEnum.TrialOnly) + { + // set lineup + player.LineupManager!.SetExtraLineup(ExtraLineupType.LineupHeliobus, raidConfig.TrialAvatarList); + player.SendPacket(new PacketSyncLineupNotify(player.LineupManager!.GetCurLineup()!)); + } + player.EnterScene(entranceId, 0, true); connection.SendPacket(new PacketRaidInfoNotify((uint)raidConfig.RaidID)); } diff --git a/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarDataScRsp.cs b/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarDataScRsp.cs index 1c0bc791..65ccbe5c 100644 --- a/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarDataScRsp.cs +++ b/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarDataScRsp.cs @@ -14,8 +14,10 @@ namespace EggLink.DanhengServer.Server.Packet.Send.Avatar player.AvatarManager?.AvatarData?.Avatars?.ForEach(avatar => { - proto.AvatarList.Add(avatar.ToProto()); + if (avatar.GetBaseAvatarId() != 8001) + proto.AvatarList.Add(avatar.ToProto()); }); + proto.AvatarList.Add(player.AvatarManager!.GetHero()!.ToProto()); SetData(proto); } diff --git a/GameServer/Server/Packet/Send/Player/PacketGetArchiveDataScRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetArchiveDataScRsp.cs index 909a4d51..2eb18ca0 100644 --- a/GameServer/Server/Packet/Send/Player/PacketGetArchiveDataScRsp.cs +++ b/GameServer/Server/Packet/Send/Player/PacketGetArchiveDataScRsp.cs @@ -25,10 +25,7 @@ namespace EggLink.DanhengServer.Server.Packet.Send.Player }); }); - GameData.AvatarConfigData.Values.ToList().ForEach(avatar => - { - info.ArchiveAvatarIdList.Add((uint)avatar.GetId()); - }); + info.ArchiveAvatarIdList.Add(23027); GameData.EquipmentConfigData.Values.ToList().ForEach(equipment => {