can enter 1st story quest

This commit is contained in:
Naruse
2026-04-20 16:18:43 +08:00
parent 8a8b0b9f5d
commit 41d9992efc
5 changed files with 96 additions and 12 deletions

View File

@@ -1,6 +1,4 @@
using MikuSB.Common.Util; using MikuSB.Util.Extensions;
using MikuSB.Proto;
using MikuSB.Util.Extensions;
using SqlSugar; using SqlSugar;
namespace MikuSB.Database.Player; namespace MikuSB.Database.Player;
@@ -14,10 +12,63 @@ public class PlayerGameData : BaseDatabaseDataHelper
public int Exp { get; set; } = 0; public int Exp { get; set; } = 0;
public long RegisterTime { get; set; } = Extensions.GetUnixSec(); public long RegisterTime { get; set; } = Extensions.GetUnixSec();
public long LastActiveTime { get; set; } public long LastActiveTime { get; set; }
[SugarColumn(IsJson = true)] public List<PlayerAttrs> Attrs { get; set; } = [];
public static PlayerGameData? GetPlayerByUid(long uid) public static PlayerGameData? GetPlayerByUid(long uid)
{ {
var result = DatabaseHelper.GetInstance<PlayerGameData>((int)uid); var result = DatabaseHelper.GetInstance<PlayerGameData>((int)uid);
return result; return result;
} }
public Proto.Player ToProto()
{
var proto = new Proto.Player
{
Pid = (ulong)Uid,
Account = Name,
Name = Name,
Level = Level,
};
foreach (var x in Attrs)
{
uint gid = x.Gid;
uint sid = x.Sid;
uint val = x.Val;
if (gid == 0)
{
proto.Attrs[sid] = val;
continue;
}
proto.Attrs[ToPackedAttrKey(gid, sid)] = val;
proto.Attrs[ToShiftedAttrKey(gid, sid)] = val;
}
return proto;
}
private static uint ToPackedAttrKey(uint gid, uint sid)
{
if (gid == 0)
return sid;
return (gid * 10000) + sid;
}
private static uint ToShiftedAttrKey(uint gid, uint sid)
{
if (gid == 0)
return sid;
return (gid << 16) | sid;
}
}
public class PlayerAttrs
{
public uint Gid { get; set; }
public uint Sid { get; set; }
public uint Val { get; set; }
} }

View File

@@ -0,0 +1,27 @@
using MikuSB.Database.Player;
using MikuSB.Proto;
namespace MikuSB.GameServer.Server.Packet.Recv.Login;
[Opcode(CmdIds.NtfSetAttr)]
public class HandlerNtfSetAttr : Handler
{
public override async Task OnHandle(Connection connection, byte[] data, ushort seqNo)
{
var req = NtfSetAttr.Parser.ParseFrom(data);
var player = connection.Player!;
var attr = player.Data.Attrs
.FirstOrDefault(x => x.Gid == req.Gid && x.Sid == req.Sid);
if (attr != null) attr.Val = req.Val;
else
{
player.Data.Attrs.Add(new PlayerAttrs
{
Gid = req.Gid,
Sid = req.Sid,
Val = req.Val
});
}
await player.OnHeartBeat();
}
}

View File

@@ -0,0 +1,12 @@
using MikuSB.Proto;
namespace MikuSB.GameServer.Server.Packet.Recv.Login;
[Opcode(CmdIds.ReqRename)]
public class HandlerReqRename : Handler
{
public override async Task OnHandle(Connection connection, byte[] data, ushort seqNo)
{
await connection.SendPacket(CmdIds.RspRename);
}
}

View File

@@ -14,13 +14,7 @@ public class PacketRspLogin : BasePacket
Timestamp = (uint)Extensions.GetUnixSec(), Timestamp = (uint)Extensions.GetUnixSec(),
WorldChannel = 1, WorldChannel = 1,
AreaId = 1, AreaId = 1,
Data = new Player Data = player.Data.ToProto(),
{
Pid = (ulong)player.Data.Uid,
Account = player.Data.Name,
Name = player.Data.Name,
Level = 80
},
NeedRename = false NeedRename = false
}; };

View File

@@ -9,8 +9,8 @@ public class CmdIds
public const int RspReconnect = 4; public const int RspReconnect = 4;
public const int ReqRename = 5; public const int ReqRename = 5;
public const int RspRename = 6; public const int RspRename = 6;
public const int ReqCallGs = 7; public const int ReqCallGS = 7;
public const int RspCallGs = 8; public const int RspCallGS = 8;
public const int ReqUseItem = 9; public const int ReqUseItem = 9;
public const int RspUseItem = 10; public const int RspUseItem = 10;
public const int ReqReadMail = 11; public const int ReqReadMail = 11;