diff --git a/FreeSR.Gateserver/Manager/Handlers/BattleReqGroup.cs b/FreeSR.Gateserver/Manager/Handlers/BattleReqGroup.cs new file mode 100644 index 0000000..2f9e3db --- /dev/null +++ b/FreeSR.Gateserver/Manager/Handlers/BattleReqGroup.cs @@ -0,0 +1,243 @@ +using FreeSR.Gateserver.Manager.Handlers.Core; +using static FreeSR.Gateserver.Manager.Handlers.LineupReqGroup; +using FreeSR.Gateserver.Network; +using FreeSR.Proto; + +namespace FreeSR.Gateserver.Manager.Handlers +{ + internal static class BattleReqGroup + { + [Handler(CmdType.CmdSetLineupNameCsReq)] + public static void OnSetLineupNameCsReq(NetSession session, int cmdId, object data) + { + var request = data as SetLineupNameCsReq; + if(request.Name == "battle") + { + + var lineupInfo = new LineupInfo + { + ExtraLineupType = ExtraLineupType.LineupNone, + Name = "Squad 1", + Mp = 5, + MaxMp = 5, + LeaderSlot = 0 + }; + List characters = new List { Avatar1, Avatar2, Avatar3, Avatar4 }; + foreach (uint id in characters) + { + if (id == 0) continue; + lineupInfo.AvatarLists.Add(new LineupAvatar + { + Id = id, + Hp = 10000, + Satiety = 100, + Sp = new AmountInfo{CurAmount = 10000,MaxAmount = 10000}, + AvatarType = AvatarType.AvatarFormalType, + Slot = (uint)lineupInfo.AvatarLists.Count + }); + } + + var sceneInfo = new SceneInfo + { + GameModeType = 2, + EntryId = 2010101, + PlaneId = 20101, + FloorId = 20101001 + }; + + var calaxInfoTest = new SceneEntityInfo + { + GroupId = 19, + InstId = 300001, + EntityId = 4194583, + Prop = new Mpdmfpohnnc + { + Hdmeecedleh = 1, + Kkjiblpgfpa = 808 + }, + Motion = new MotionInfo + { + Pos = new Vector + { + X = -570, + Y = 19364, + Z = 4480 + }, + Rot = new Vector + { + Y = 180000 + } + }, + }; + + sceneInfo.EntityLists.Add(calaxInfoTest); + + session.Send(CmdType.CmdEnterSceneByServerScNotify, new EnterSceneByServerScNotify + { + Scene = sceneInfo, + Lineup = lineupInfo + }); + + session.Send(CmdType.CmdSceneEntityMoveScNotify, new SceneEntityMoveScNotify + { + EntryId = 2010101, + EntityId = 0, + Motion = new MotionInfo + { + Pos = new Vector + { + X = -570, + Y = 19364, + Z = 4480 + }, + Rot = new Vector + { + Y = 180000 + } + } + }); + } + + session.Send(CmdType.CmdSetLineupNameScRsp, new SetLineupNameScRsp + { + Retcode = (uint)RetcodeStatus.RetSucc, + Name = request.Name, + Index = request.Index + }); + } + + + [Handler(CmdType.CmdStartCocoonStageCsReq)] + public static void OnStartCocoonStageCsReq(NetSession session, int cmdId, object data) + { + var request = data as StartCocoonStageCsReq; + + Dictionary> monsterIds = new Dictionary> + { + { 1, new List { 3001010, 3001020, 3001020, 3001010 } }, + { 2, new List { 3002030, 3002010, 3002010, 3002030 } }, + { 3, new List { 3011010, 3012020, 3011010 } }, + { 4, new List { 3003010, 3003020 } }, + { 5, new List { 3024020 } }, + { 6, new List { 3014020 } }, + { 7, new List { 3002050 } } + }; + + Dictionary monsterLevels = new Dictionary + { + {1,70},{2,70},{3,60},{4,65},{5,55},{6,60},{7,75} + }; + + //basic + var battleInfo = new SceneBattleInfo + { + StageId = 201012311, + LogicRandomSeed = 639771447, + WorldLevel = 6 + }; + + var testRelic = new BattleRelic + { + Id = 61011, + Level = 999, + MainAffixId = 1, + SubAffixLists = {new RelicAffix + { + AffixId = 4, + Step = 999 + } } + }; + + //avatar + List SkillIdEnds = new List { 1, 2, 3, 4, 7, 101, 102, 103, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210 }; + List characters = new List { Avatar1, Avatar2, Avatar3, Avatar4 }; + foreach (uint avatarId in characters) + { + var avatarData = new BattleAvatar + { + Id = avatarId, + Level = 80, + Promotion = 6, + Rank = 6, + Hp = 10000, + AvatarType = AvatarType.AvatarFormalType, + WorldLevel = 6, + Sp = new AmountInfo { CurAmount = 10000, MaxAmount = 10000 }, + RelicLists = { testRelic }, + EquipmentLists = {new BattleEquipment + { + Id = 23006, + Level = 80, + Rank = 5, + Promotion = 6 + } } + }; + + foreach (uint end in SkillIdEnds) + { + uint level = 1; + if (end == 1) level = 6; + else if (end < 4 || end == 4) level = 10; + if (end > 4) level = 1; + avatarData.SkilltreeLists.Add(new AvatarSkillTree + { + PointId = avatarId * 1000 + end, + Level = level + }); + } + + battleInfo.BattleAvatarLists.Add(avatarData); + } + + //monster + for (uint i = 1; i <= 7; i++) + { + SceneMonsterWave monsterInfo = new SceneMonsterWave + { + Knkmjldpekj = i, + MonsterParam = new SceneMonsterParam + { + Level = monsterLevels[i], + } + }; + + if (monsterIds.ContainsKey(i)) + { + List monsterIdList = monsterIds[i]; + + foreach (uint monsterId in monsterIdList) + { + monsterInfo.MonsterLists.Add(new SceneMonsterInfo + { + MonsterId = monsterId + }); + } + + } + battleInfo.MonsterWaveLists.Add(monsterInfo); + } + + var response = new StartCocoonStageScRsp + { + Retcode = (uint)RetcodeStatus.RetSucc, + CocoonId = request.CocoonId, + Wave = request.Wave, + PropEntityId = request.PropEntityId, + BattleInfo = battleInfo + }; + + session.Send(CmdType.CmdStartCocoonStageScRsp, response); + } + + [Handler(CmdType.CmdPVEBattleResultCsReq)] + public static void OnPVEBattleResultCsReq(NetSession session, int cmdId, object data) + { + var request = data as PVEBattleResultCsReq; + session.Send(CmdType.CmdPVEBattleResultScRsp, new PVEBattleResultScRsp + { + Retcode = (uint)RetcodeStatus.RetSucc, + EndStatus = request.EndStatus + }); + } + } +} diff --git a/FreeSR.Gateserver/Network/NetSession.cs b/FreeSR.Gateserver/Network/NetSession.cs index 02d6a31..6077a9d 100644 --- a/FreeSR.Gateserver/Network/NetSession.cs +++ b/FreeSR.Gateserver/Network/NetSession.cs @@ -28,20 +28,5 @@ await _channel.WriteAndFlushAsync(packet); } - - public async void Send(int cmdId, T data) where T : class - { - var packet = new NetPacket() - { - CmdId = cmdId, - Data = data - }; - - var buffer = Unpooled.Buffer(); - packet.Serialize(buffer); - packet.Buf = buffer; - - await _channel.WriteAndFlushAsync(packet); - } } } diff --git a/FreeSR.Gateserver/Network/NetworkManager.cs b/FreeSR.Gateserver/Network/NetworkManager.cs index 1b019ea..0fd1b63 100644 --- a/FreeSR.Gateserver/Network/NetworkManager.cs +++ b/FreeSR.Gateserver/Network/NetworkManager.cs @@ -33,6 +33,7 @@ NotifyManager.AddReqGroupHandler(typeof(SceneReqGroup)); NotifyManager.AddReqGroupHandler(typeof(GachaReqGroup)); NotifyManager.AddReqGroupHandler(typeof(NPCReqGroup)); + NotifyManager.AddReqGroupHandler(typeof(BattleReqGroup)); NotifyManager.Init(); }