mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 12:43:58 +00:00
Added several CallGS handlers.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -369,3 +369,4 @@ FodyWeavers.xsd
|
|||||||
/GameServer/OriginalProto
|
/GameServer/OriginalProto
|
||||||
*.rar
|
*.rar
|
||||||
/Lua_Script
|
/Lua_Script
|
||||||
|
/.note
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
namespace MikuSB.GameServer.Server.CallGS.Handlers.Achievement;
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Achievement;
|
||||||
|
|
||||||
|
// Client requests a reward for a completed achievement.
|
||||||
|
// param: {nId}
|
||||||
|
// Response: {}
|
||||||
[CallGSApi("Achievement_GetReward")]
|
[CallGSApi("Achievement_GetReward")]
|
||||||
public class Achievement_GetReward : ICallGSHandler
|
public class Achievement_GetReward : ICallGSHandler
|
||||||
{
|
{
|
||||||
public async Task Handle(Connection connection, string param, ushort seqNo)
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
{
|
{
|
||||||
// param: json.encode({nId = nId})
|
// TODO: validate achievement completion and grant reward items
|
||||||
// TODO: implement reward logic
|
|
||||||
|
|
||||||
await CallGSRouter.SendScript(connection, "Achievement_GetReward", "{}", seqNo);
|
await CallGSRouter.SendScript(connection, "Achievement_GetReward", "{}", seqNo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Achievement;
|
||||||
|
|
||||||
|
// Client notifies the server that an achievement trigger condition was met. No response required.
|
||||||
|
// param: {nType}
|
||||||
|
[CallGSApi("Achievement_OnAddSomeOne")]
|
||||||
|
public class Achievement_OnAddSomeOne : ICallGSHandler
|
||||||
|
{
|
||||||
|
public Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
// TODO: process achievement progress for the given nType
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Activity;
|
||||||
|
|
||||||
|
// Updates the lobby activity face (presentation effect).
|
||||||
|
// param: {nType(1=equip, 2=unequip, 3=set flag), nId, bFlag}
|
||||||
|
// Response: {nFaceId, nId, nType} — nFaceId=0 means no next face
|
||||||
|
[CallGSApi("ActivityFace_Update")]
|
||||||
|
public class ActivityFace_Update : ICallGSHandler
|
||||||
|
{
|
||||||
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
// TODO: process face equip/unequip state and return the next face to display
|
||||||
|
await CallGSRouter.SendScript(connection, "ActivityFace_Update", "{\"nFaceId\":0,\"nId\":0,\"nType\":0}", seqNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Activity;
|
||||||
|
|
||||||
|
// Client requests an activity state refresh. No s2c callback registered on client side.
|
||||||
|
// param: {nId}
|
||||||
|
[CallGSApi("Activity_Refresh")]
|
||||||
|
public class Activity_Refresh : ICallGSHandler
|
||||||
|
{
|
||||||
|
public Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
// TODO: refresh activity state for the given nId
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Chapter;
|
||||||
|
|
||||||
|
// Client syncs completed guide level data to the server. No response required.
|
||||||
|
// param: {tbData = [{nLevelID, passTime}, ...]}
|
||||||
|
[CallGSApi("Chapter_SyncGuideLevelPassData")]
|
||||||
|
public class Chapter_SyncGuideLevelPassData : ICallGSHandler
|
||||||
|
{
|
||||||
|
public Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
// TODO: persist guide level pass data to player save
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Daily;
|
||||||
|
|
||||||
|
// Returns daily activity info for each activity type.
|
||||||
|
// Response: {activityId: tbActivity}
|
||||||
|
[CallGSApi("Daily_GetActivityInfo")]
|
||||||
|
public class Daily_GetActivityInfo : ICallGSHandler
|
||||||
|
{
|
||||||
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
// TODO: return actual daily activity data
|
||||||
|
await CallGSRouter.SendScript(connection, "Daily_GetActivityInfo", "{}", seqNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
10
GameServer/Server/CallGS/Handlers/Misc/LanguageChange.cs
Normal file
10
GameServer/Server/CallGS/Handlers/Misc/LanguageChange.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Misc;
|
||||||
|
|
||||||
|
// Client notifies the server of its language setting. No response required.
|
||||||
|
// param: {nType, sLan, sEx}
|
||||||
|
[CallGSApi("LanguageChange")]
|
||||||
|
public class LanguageChange : ICallGSHandler
|
||||||
|
{
|
||||||
|
public Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
=> Task.CompletedTask;
|
||||||
|
}
|
||||||
16
GameServer/Server/CallGS/Handlers/Misc/ZoneTime_ReqTime.cs
Normal file
16
GameServer/Server/CallGS/Handlers/Misc/ZoneTime_ReqTime.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using MikuSB.Util.Extensions;
|
||||||
|
|
||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Misc;
|
||||||
|
|
||||||
|
// Client requests server time to calculate timezone offset.
|
||||||
|
// nTime1/nTime2 are DST transition reference timestamps; returning the same value means no offset.
|
||||||
|
[CallGSApi("ZoneTime_ReqTime")]
|
||||||
|
public class ZoneTime_ReqTime : ICallGSHandler
|
||||||
|
{
|
||||||
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
var now = Extensions.GetUnixSec();
|
||||||
|
var arg = $"{{\"nTime1\":{now},\"nTime2\":{now}}}";
|
||||||
|
await CallGSRouter.SendScript(connection, "ZoneTime_ChangeTime", arg, seqNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Preview;
|
||||||
|
|
||||||
|
// Returns the green (unlocked) level for each skin manifestation.
|
||||||
|
// Response: [{skinId, greenLevel}, ...]
|
||||||
|
[CallGSApi("ReqEntranceGreenLevel")]
|
||||||
|
public class ReqEntranceGreenLevel : ICallGSHandler
|
||||||
|
{
|
||||||
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
// TODO: return actual skin green levels from player data
|
||||||
|
await CallGSRouter.SendScript(connection, "ReqEntranceGreenLevel", "[]", seqNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Shop;
|
||||||
|
|
||||||
|
// Returns the open/close timestamps for each shop tab.
|
||||||
|
// Response: {shopId: {nBegin, nEnd}}
|
||||||
|
[CallGSApi("ShopLogic_GetOpenTime")]
|
||||||
|
public class ShopLogic_GetOpenTime : ICallGSHandler
|
||||||
|
{
|
||||||
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
// TODO: return actual shop open times from config
|
||||||
|
await CallGSRouter.SendScript(connection, "ShopLogic_GetOpenTime", "{}", seqNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using MikuSB.GameServer.Server.CallGS;
|
using MikuSB.GameServer.Server.CallGS;
|
||||||
using MikuSB.Proto;
|
using MikuSB.Proto;
|
||||||
|
|
||||||
namespace MikuSB.GameServer.Server.Packet.Recv.Player;
|
namespace MikuSB.GameServer.Server.Packet.Recv;
|
||||||
|
|
||||||
[Opcode(CmdIds.ReqCallGS)]
|
[Opcode(CmdIds.ReqCallGS)]
|
||||||
public class HandlerReqCallGS : Handler
|
public class HandlerReqCallGS : Handler
|
||||||
Reference in New Issue
Block a user