Init enter game

This commit is contained in:
Naruse
2025-06-14 11:15:32 +08:00
commit 6a03b39f07
568 changed files with 92872 additions and 0 deletions

View File

@@ -0,0 +1,189 @@
using KianaBH.GameServer.Game.Player;
using KianaBH.GameServer.Server.Packet;
using KianaBH.KcpSharp;
using KianaBH.KcpSharp.Base;
using KianaBH.Proto;
using KianaBH.Util;
using KianaBH.Util.Extensions;
using KianaBH.Util.Security;
using Google.Protobuf;
using Google.Protobuf.Reflection;
using System.Buffers;
using System.Net;
using System.Reflection;
using Newtonsoft.Json.Linq;
using System.Reflection.PortableExecutable;
using System.Net.Sockets;
using System.Reflection.Emit;
namespace KianaBH.GameServer.Server;
public class Connection(KcpConversation conversation, IPEndPoint remote) : KcpConnection(conversation, remote)
{
private static readonly Logger Logger = new("GameServer");
public PlayerInstance? Player { get; set; }
private static readonly HashSet<string> DummyPacketNames =
[
"AddGoodfeelReq", "ArkPlusActivityGetDataReq", "BuffAssistGetActivityReq", "BwWorldCampActivityGetDataReq",
"ChatworldBeastGetActivityReq", "ChatworldGetPrayInfoReq", "ClientReportReq", "GetAdventureGroupReq",
"GetArmadaDataReq", "GetArmadaStageScoreActivityReq", "GetAskAddFriendListReq", "GetAssistantFrozenListReq",
"GetAvatarMissionActivityReq", "GetBattlePassMissionPanelReq", "GetBlackListReq", "GetCardProductInfoReq",
"GetChapterActivityDataReq", "GetChapterCompensationInfoReq", "GetChatgroupListReq", "GetClientMailDataReq",
"GetConsignedOrderDataReq", "GetCurrencyExchangeInfoReq", "GetExtractReforgeActivityReq",
"GetFarmActivityDataReq", "GetFriendListReq", "GetFriendRemarkListReq", "GetGachaDisplayReq",
"GetGardenScheduleReq", "GetGobackReq", "GetGratuityActivityReq", "GetMasterPupilCardReq",
"GetMasterPupilDataReq", "GetMasterPupilMainDataReq", "GetMosaicActivityReq", "GetNewbieActivityReq",
"GetNinjaActivityReq", "GetOfflineResourceDataReq", "GetOpenworldQuestActivityReq",
"GetRaffleActivityReq", "GetRankScheduleDataReq", "GetRecommendFriendListReq", "GetRecommendGoodsReq",
"GetRoomDataReq", "GetRpgTaleReq", "GetScratchTicketReq", "GetSecurityPasswordReq", "GetShoppingMallListReq",
"GetStageChapterReq", "GetSupportActivityReq", "GetSurveyDataReq",
"GetTradingCardActivityReq", "GetTvtActivityReq", "GetWeeklyRoutineActivityReq", "GrandKeyActivateSkillReq",
"MassiveWarGetActivityReq", "OpenworldGetMechaTeamReq", "OpenworldHuntActivityGetDataReq",
"PjmsGetAchievementDataReq", "PjmsGetConditionDataReq", "PjmsGetCurWorldReq", "PjmsGetStoryDataReq",
"ReunionCookGetActivityReq", "SimplifiedGodWarGetActivityReq",
"StageInnerDataReportReq", "SusannaTrialGetActivityReq", "ThemeWantedRefreshTicketReq",
"UpdateMissionProgressReq", "WaveRushGetActivityReq"
];
public override async void Start()
{
Logger.Info($"New connection from {RemoteEndPoint}.");
State = SessionStateEnum.WAITING_FOR_TOKEN;
await ReceiveLoop();
}
public override async void Stop(bool isServerStop = false)
{
//if (isServerStop) await Player!.SendPacket(new PacketPlayerKickOutScNotify(KickType.KickLoginWhiteTimeout));
Player?.OnLogoutAsync();
KcpListener.UnregisterConnection(this);
base.Stop(isServerStop);
}
protected async Task ReceiveLoop()
{
while (!CancelToken.IsCancellationRequested)
{
// WaitToReceiveAsync call completes when there is at least one message is received or the transport is closed.
var result = await Conversation.WaitToReceiveAsync(CancelToken.Token);
if (result.TransportClosed)
{
Logger.Debug("Connection was closed");
break;
}
var buffer = ArrayPool<byte>.Shared.Rent(result.BytesReceived);
try
{
// TryReceive should not return false here, unless the transport is closed.
// So we don't need to check for result.TransportClosed.
if (!Conversation.TryReceive(buffer, out result))
{
Logger.Error("Failed to receive packet");
break;
}
await ProcessMessageAsync(buffer.AsMemory(0, result.BytesReceived));
}
catch (Exception ex)
{
Logger.Error("Packet parse error", ex);
}
finally
{
ArrayPool<byte>.Shared.Return(buffer);
}
}
Stop();
}
// DO THE PROCESSING OF THE GAME PACKET
private async Task ProcessMessageAsync(Memory<byte> data)
{
var gamePacket = data.ToArray();
await using MemoryStream ms = new(gamePacket);
using BinaryReader br = new(ms);
// Handle
try
{
while (br.BaseStream.Position < br.BaseStream.Length)
{
// Length
if (br.BaseStream.Length - br.BaseStream.Position < 32) return;
// Packet sanity check
var headMagic = br.ReadUInt32BE();
if (headMagic != 0x01234567)
{
Logger.Error($"Bad Data Package Received: got 0x{headMagic:X}, expect 0x01234567");
return; // Bad packet
}
var packetVersion = br.ReadUInt16BE();
var ClientVersion = br.ReadUInt16BE();
var PacketId = br.ReadUInt32BE();
var UserId = br.ReadUInt32BE();
var UserIp = br.ReadUInt32BE();
var Sign = br.ReadUInt32BE();
var SignType = br.ReadUInt16BE();
var CmdId = br.ReadUInt16BE();
var HeaderLength = br.ReadUInt16BE();
var BodyLength = br.ReadUInt32BE();
// Data
var header = br.ReadBytes(HeaderLength);
var Body = br.ReadBytes((int)BodyLength);
var TailMagic = br.ReadUInt32BE();
LogPacket("Recv", CmdId, Body);
await HandlePacket(CmdId, header, Body);
}
}
catch (Exception e)
{
Logger.Error(e.Message, e);
}
}
private async Task HandlePacket(ushort opcode, byte[] header, byte[] payload)
{
var packetName = LogMap.GetValueOrDefault(opcode);
if (DummyPacketNames.Contains(packetName!))
{
await SendDummy(packetName!);
Logger.Info($"[Dummy] Send Dummy {packetName}");
return;
}
// Find the Handler for this opcode
var handler = HandlerManager.GetHandler(opcode);
if (handler != null)
{
// Handle
// Make sure session is ready for packets
var state = State;
try
{
await handler.OnHandle(this, header, payload);
}
catch (Exception e)
{
Logger.Error(e.Message, e);
}
return;
}
}
private async Task SendDummy(string packetName)
{
var respName = packetName.Replace("Req", "Rsp"); // Get the response packet name
if (respName == packetName) return; // do not send rsp when resp name = recv name
var respOpcode = LogMap.FirstOrDefault(x => x.Value == respName).Key; // Get the response opcode
// Send Rsp
await SendPacket(respOpcode);
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.KcpSharp;
namespace KianaBH.GameServer.Server;
public class Listener : KcpListener
{
public static Connection? GetActiveConnection(int uid)
{
var con = Connections.Values.FirstOrDefault(c =>
(c as Connection)?.Player?.Uid == uid && c.State == SessionStateEnum.ACTIVE) as Connection;
return con;
}
}

View File

@@ -0,0 +1,6 @@
namespace KianaBH.GameServer.Server.Packet;
public abstract class Handler
{
public abstract Task OnHandle(Connection connection, byte[] header, byte[] data);
}

View File

@@ -0,0 +1,31 @@
using System.Reflection;
namespace KianaBH.GameServer.Server.Packet;
public static class HandlerManager
{
public static Dictionary<int, Handler> handlers = [];
public static void Init()
{
var classes = Assembly.GetExecutingAssembly().GetTypes(); // Get all classes in the assembly
foreach (var cls in classes)
{
var attribute = (Opcode?)Attribute.GetCustomAttribute(cls, typeof(Opcode));
if (attribute != null) handlers.Add(attribute.CmdId, (Handler)Activator.CreateInstance(cls)!);
}
}
public static Handler? GetHandler(int cmdId)
{
try
{
return handlers[cmdId];
}
catch
{
return null;
}
}
}

View File

@@ -0,0 +1,7 @@
namespace KianaBH.GameServer.Server.Packet;
[AttributeUsage(AttributeTargets.Class)]
public class Opcode(int cmdId) : Attribute
{
public int CmdId = cmdId;
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.ArkPlusActivityGetDataReq)]
public class HandlerArkPlusActivityGetDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketArkPlusActivityGetDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.BuffAssistGetActivityReq)]
public class HandlerBuffAssistGetActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketBuffAssistGetActivityRsp());
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GeneralActivityGetMainInfoReq)]
public class HandlerGeneralActivityGetMainInfoReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = GeneralActivityGetMainInfoReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketGeneralActivityGetMainInfoRsp(req.ActivityIdList));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GeneralActivityGetScheduleReq)]
public class HandlerGeneralActivityGetScheduleReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGeneralActivityGetScheduleRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetActivityMainDataReq)]
public class HandlerGetActivityMainDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetActivityMainDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetActivityRewardStatisticDataReq)]
public class HandlerGetActivityRewardStatisticDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetActivityRewardStatisticDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetBulletinActivityMissionReq)]
public class HandlerGetBulletinActivityMissionReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetBulletinActivityMissionRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetBulletinReq)]
public class HandlerGetBulletinReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetBulletinRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetChapterActivityDataReq)]
public class HandlerGetChapterActivityDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetChapterActivityDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetChapterCompensationInfoReq)]
public class HandlerGetChapterCompensationInfoReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetChapterCompensationInfoRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetDropLimitActivityReq)]
public class HandlerGetDropLimitActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetDropLimitActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetExtractReforgeActivityReq)]
public class HandlerGetExtractReforgeActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetExtractReforgeActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetFarmActivityDataReq)]
public class HandlerGetFarmActivityDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetFarmActivityDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetGardenScheduleReq)]
public class HandlerGetGardenScheduleReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetGardenScheduleRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetInviteActivityInviteeDataReq)]
public class HandlerGetInviteActivityInviteeDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetInviteActivityInviteeDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetInviteActivityInviterDataReq)]
public class HandlerGetInviteActivityInviterDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetInviteActivityInviterDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetLoginActivityReq)]
public class HandlerGetLoginActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetLoginActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetMosaicActivityReq)]
public class HandlerGetMosaicActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetMosaicActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetNewbieActivityReq)]
public class HandlerGetNewbieActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetNewbieActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetNinjaActivityReq)]
public class HandlerGetNinjaActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetNinjaActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Activity;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Activity;
[Opcode(CmdIds.GetThemeWantedReq)]
public class HandlerGetThemeWantedReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetThemeWantedRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Adventure;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Adventure;
[Opcode(CmdIds.GetAdventureGroupReq)]
public class HandlerGetAdventureGroupReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetAdventureGroupRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Adventure;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Adventure;
[Opcode(CmdIds.GetAdventureStorySweepInfoReq)]
public class HandlerGetAdventureStorySweepInfoReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetAdventureStorySweepInfoRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Adventure;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Adventure;
[Opcode(CmdIds.GetConsignedOrderDataReq)]
public class HandlerGetConsignedOrderDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetConsignedOrderDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Armada;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Armada;
[Opcode(CmdIds.GetArmadaActivityListReq)]
public class HandlerGetArmadaActivityListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetArmadaActivityListRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Armada;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Armada;
[Opcode(CmdIds.GetArmadaDataReq)]
public class HandlerGetArmadaDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetArmadaDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Armada;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Armada;
[Opcode(CmdIds.GetArmadaStageScoreActivityReq)]
public class HandlerGetArmadaStageScoreActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetArmadaStageScoreActivityRsp());
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Auth;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Auth;
[Opcode(CmdIds.GetAuthkeyReq)]
public class HandlerGetAuthkeyReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = GetAuthkeyReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketGetAuthkeyRsp(req.AuthAppid));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Avatar;
[Opcode(CmdIds.AddCustomAvatarTeamReq)]
public class HandlerAddCustomAvatarTeamReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketAddCustomAvatarTeamRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Avatar;
[Opcode(CmdIds.AvatarSubSkillLevelUpReq)]
public class HandlerAvatarSubSkillLevelUpReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketAvatarSubSkillLevelUpRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Avatar;
[Opcode(CmdIds.DelCustomAvatarTeamReq)]
public class HandlerDelCustomAvatarTeamReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketDelCustomAvatarTeamRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Avatar;
[Opcode(CmdIds.DressEquipmentReq)]
public class HandlerDressEquipmentReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketDressEquipmentRsp());
}
}

View File

@@ -0,0 +1,25 @@
using KianaBH.Database.Avatar;
using KianaBH.GameServer.Game.Player;
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Avatar;
[Opcode(CmdIds.GetAvatarDataReq)]
public class HandlerGetAvatarDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = GetAvatarDataReq.Parser.ParseFrom(data);
var player = connection.Player!;
var avatars = req.AvatarIdList.Any(id => id != 0)
? req.AvatarIdList
.Select(id => player.AvatarManager!.GetAvatar(id))
.Where(avatar => avatar != null)
.ToList()!
: player.AvatarManager?.AvatarData?.Avatars?.ToList();
bool isAll = !req.AvatarIdList.Any(id => id != 0);
await connection.SendPacket(new PacketGetAvatarDataRsp(avatars!, isAll));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Avatar;
[Opcode(CmdIds.GetAvatarMissionActivityReq)]
public class HandlerGetAvatarMissionActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetAvatarMissionActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Avatar;
[Opcode(CmdIds.GetAvatarRollDataReq)]
public class HandlerGetAvatarRollDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetAvatarRollDataRsp(connection.Player!));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Avatar;
[Opcode(CmdIds.GetAvatarTeamDataReq)]
public class HandlerGetAvatarTeamDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetAvatarTeamDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Avatar;
[Opcode(CmdIds.UpdateCustomAvatarTeamReq)]
public class HandlerUpdateCustomAvatarTeamReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketUpdateCustomAvatarTeamRsp());
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Battle;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Battle;
[Opcode(CmdIds.GetBuffEffectReq)]
public class HandlerGetBuffEffectReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = GetBuffEffectReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketGetBuffEffectRsp(req.EffectIdList));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.BattlePass;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.BattlePass;
[Opcode(CmdIds.GetBattlePassMissionPanelReq)]
public class HandlerGetBattlePassMissionPanelReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetBattlePassMissionPanelRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Challenge;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Challenge;
[Opcode(CmdIds.GetChallengeStepCompensationInfoReq)]
public class HandlerGetChallengeStepCompensationInfoReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetChallengeStepCompensationInfoRsp());
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Chapter;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Chapter;
[Opcode(CmdIds.ChapterArkGetDataReq)]
public class HandlerChapterArkGetDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = ChapterArkGetDataReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketChapterArkGetDataRsp(req.ChapterId));
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Chapter;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Chapter;
[Opcode(CmdIds.ChapterBwWorldGetDataReq)]
public class HandlerChapterBwWorldGetDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = ChapterBwWorldGetDataReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketChapterBwWorldGetDataRsp(req.ChapterId));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Chapter;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Chapter;
[Opcode(CmdIds.ChapterGroupGetDataReq)]
public class HandlerChapterGroupGetDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketChapterGroupGetDataRsp());
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Chapter;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Chapter;
[Opcode(CmdIds.ChapterKnightRichManGetDataReq)]
public class HandlerChapterKnightRichManGetDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = ChapterKnightRichManGetDataReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketChapterKnightRichManGetDataRsp(req.RichManId));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Chapter;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Chapter;
[Opcode(CmdIds.GetEliteChapterCompensationInfoReq)]
public class HandlerGetEliteChapterCompensationInfoReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetEliteChapterCompensationInfoRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Chat;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Chat;
[Opcode(CmdIds.ChatworldBeastGetActivityReq)]
public class HandlerChatworldBeastGetActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketChatworldBeastGetActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Chat;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Chat;
[Opcode(CmdIds.ChatworldGetActivityScheduleReq)]
public class HandlerChatworldGetActivityScheduleReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketChatworldGetActivityScheduleRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Chat;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Chat;
[Opcode(CmdIds.ChatworldGetPrayInfoReq)]
public class HandlerChatworldGetPrayInfoReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketChatworldGetPrayInfoRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Chat;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Chat;
[Opcode(CmdIds.EnterWorldChatroomReq)]
public class HandlerEnterWorldChatroomReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketEnterWorldChatroomRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Chat;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Chat;
[Opcode(CmdIds.GetChatgroupListReq)]
public class HandlerGetChatgroupListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetChatgroupListRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Client;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Client;
[Opcode(CmdIds.ClientReportReq)]
public class HandlerClientReportReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketClientReportRsp());
}
}

View File

@@ -0,0 +1,15 @@
using KianaBH.GameServer.Server.Packet.Send.Client;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Client;
[Opcode(CmdIds.GetClientDataReq)]
public class HandlerGetClientDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = GetClientDataReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketGetClientDataRsp(req.Id,req.Type, connection.Player!));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Client;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Client;
[Opcode(CmdIds.GetClientMailDataReq)]
public class HandlerGetClientMailDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetClientMailDataRsp());
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Client;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Client;
[Opcode(CmdIds.GetClientSettingReq)]
public class HandlerGetClientSettingReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = GetClientSettingReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketGetClientSettingRsp(req.ClientSettingType));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Client;
[Opcode(CmdIds.KeepAliveNotify)]
public class HandlerKeepAliveNotify : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.Player!.OnHeartBeat();
await connection.SendPacket(CmdIds.KeepAliveNotify);
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Client;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Client;
[Opcode(CmdIds.ReportClientDataVersionReq)]
public class HandlerReportClientDataVersionReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = ReportClientDataVersionReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketReportClientDataVersionRsp(req.Version));
}
}

View File

@@ -0,0 +1,27 @@
using KianaBH.GameServer.Game.Player;
using KianaBH.GameServer.Server.Packet.Send.Client;
using KianaBH.Proto;
using KianaBH.Database.Client;
namespace KianaBH.GameServer.Server.Packet.Recv.Client;
[Opcode(CmdIds.SetClientDataReq)]
public class HandlerSetClientDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = SetClientDataReq.Parser.ParseFrom(data);
PlayerInstance player = connection.Player!;
var clientData = player.ClientData!.Clients.FirstOrDefault(c => c.Id == req.ClientData.Id && c.Type == req.ClientData.Type);
if (clientData == null)
{
player.ClientData.Clients.Add(new ClientDBData
{
Id = req.ClientData.Id,
Type = req.ClientData.Type,
Data = req.ClientData.Data.ToByteArray(),
});
}
await connection.SendPacket(new PacketSetClientDataRsp(req.ClientData.Id,req.ClientData.Type));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Collection;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Collection;
[Opcode(CmdIds.GetCollectionListReq)]
public class HandlerGetCollectionListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetCollectionListRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.DLC;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.DLC;
[Opcode(CmdIds.GetDLCAvatarReq)]
public class HandlerGetDLCAvatarReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetDLCAvatarRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.DLC;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.DLC;
[Opcode(CmdIds.GetDLCReq)]
public class HandlerGetDLCReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetDLCRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.DLC;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.DLC;
[Opcode(CmdIds.GetDLCTowerReq)]
public class HandlerGetDLCTowerReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetDLCTowerRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dorm;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dorm;
[Opcode(CmdIds.GetDormDataReq)]
public class HandlerGetDormDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetDormDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetPlotListReq)]
public class HandlerGetPlotListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetPlotListRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetPrivilegeInfoReq)]
public class HandlerGetPrivilegeInfoReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetPrivilegeInfoRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetProductListReq)]
public class HandlerGetProductListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetProductListRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetProductRecommendListReq)]
public class HandlerGetProductRecommendListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetProductRecommendListRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetRaffleActivityReq)]
public class HandlerGetRaffleActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetRaffleActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetRankScheduleDataReq)]
public class HandlerGetRankScheduleDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetRankScheduleDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetRecommendFriendListReq)]
public class HandlerGetRecommendFriendListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetRecommendFriendListRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetRecommendGoodsReq)]
public class HandlerGetRecommendGoodsReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetRecommendGoodsRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetRewardLineActivityReq)]
public class HandlerGetRewardLineActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetRewardLineActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetRoomDataReq)]
public class HandlerGetRoomDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetRoomDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetRpgTaleReq)]
public class HandlerGetRpgTaleReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetRpgTaleRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetScratchTicketReq)]
public class HandlerGetScratchTicketReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetScratchTicketRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetSecurityPasswordReq)]
public class HandlerGetSecurityPasswordReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetSecurityPasswordRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetShopListReq)]
public class HandlerGetShopListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetShopListRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetShoppingMallListReq)]
public class HandlerGetShoppingMallListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetShoppingMallListRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetSupportActivityReq)]
public class HandlerGetSupportActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetSupportActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetSurveyDataReq)]
public class HandlerGetSurveyDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetSurveyDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetTowerRaidActivityReq)]
public class HandlerGetTowerRaidActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetTowerRaidActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetTradingCardActivityReq)]
public class HandlerGetTradingCardActivityReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetTradingCardActivityRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetTrialAvatarReq)]
public class HandlerGetTrialAvatarReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetTrialAvatarRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetVipRewardDataReq)]
public class HandlerGetVipRewardDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetVipRewardDataRsp());
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Dummy;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Dummy;
[Opcode(CmdIds.GetVirtualAvatarGroupDetailReq)]
public class HandlerGetVirtualAvatarGroupDetailReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = GetVirtualAvatarGroupDetailReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketGetVirtualAvatarGroupDetailRsp(req.GroupId));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Elf;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Elf;
[Opcode(CmdIds.GetElfDataReq)]
public class HandlerGetElfDataReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetElfDataRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Endless;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Endless;
[Opcode(CmdIds.GetEndlessStatusReq)]
public class HandlerGetEndlessStatusReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetEndlessStatusRsp());
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.Event;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Event;
[Opcode(CmdIds.GetGalInteractTriggerEventReq)]
public class HandlerGetGalInteractTriggerEventReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = GetGalInteractTriggerEventReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketGetGalInteractTriggerEventRsp(req.AvatarId));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.ExBoss;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.ExBoss;
[Opcode(CmdIds.ExBossStageBeginReq)]
public class HandlerExBossStageBeginReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketExBossStageBeginRsp());
}
}

View File

@@ -0,0 +1,14 @@
using KianaBH.GameServer.Server.Packet.Send.ExBoss;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.ExBoss;
[Opcode(CmdIds.ExBossStageEndReq)]
public class HandlerExBossStageEndReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = ExBossStageEndReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketExBossStageEndRsp(req.BossId,req.EndStatus));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.ExBoss;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.ExBoss;
[Opcode(CmdIds.GetExBossInfoReq)]
public class HandlerGetExBossInfoReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetExBossInfoRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.ExBoss;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.ExBoss;
[Opcode(CmdIds.GetExBossRankReq)]
public class HandlerGetExBossRankReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetExBossRankRsp(connection.Player!));
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.ExBoss;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.ExBoss;
[Opcode(CmdIds.GetExBossScheduleReq)]
public class HandlerGetExBossScheduleReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetExBossScheduleRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Exchange;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Exchange;
[Opcode(CmdIds.GetCurrencyExchangeInfoReq)]
public class HandlerGetCurrencyExchangeInfoReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetCurrencyExchangeInfoRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Friend;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Friend;
[Opcode(CmdIds.GetAskAddFriendListReq)]
public class HandlerGetAskAddFriendListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetAskAddFriendListRsp());
}
}

View File

@@ -0,0 +1,13 @@
using KianaBH.GameServer.Server.Packet.Send.Friend;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Friend;
[Opcode(CmdIds.GetFriendListReq)]
public class HandlerGetFriendListReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketGetFriendListRsp());
}
}

Some files were not shown because too many files have changed in this diff Show More