Files

118 lines
4.1 KiB
C#

using MikuSB.Proto;
using System.Text.Json.Nodes;
namespace MikuSB.GameServer.Server.CallGS.Handlers.House;
[HouseFunc("GameEnterMainUI")]
public class ThrowGameEnterMainUI : IHouseFuncHandler
{
public async Task Handle(Connection connection, string param)
{
var rsp = new JsonObject
{
["FuncName"] = "GameEnterMainUI",
["tblockGirlList"] = new JsonArray()
};
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Success(rsp));
}
}
[HouseFunc("ThrowGameTutorialFinish")]
public class ThrowGameTutorialFinish : IHouseFuncHandler
{
private const uint HouseBeachInfoStart = 17000;
private const uint ThrowGameTutorialOffset = 10;
public async Task Handle(Connection connection, string param)
{
var root = HouseJson.ParseObject(param);
if (root == null) return;
var index = Math.Max(0, HouseJson.NumField(root, "Index"));
var sync = new NtfSyncPlayer();
await HouseAttr.SetAsync(connection, HouseBeachInfoStart + ThrowGameTutorialOffset + (uint)index, 1, sync);
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Synthesize(root), sync);
}
}
[HouseFunc("ThrowGameEnter")]
public class ThrowGameEnter : IHouseFuncHandler
{
private static readonly Random Random = new();
public async Task Handle(Connection connection, string param)
{
var rsp = new JsonObject
{
["FuncName"] = "ThrowGameEnter",
["nSeed"] = Random.Next(1, 1_000_000_000)
};
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Success(rsp));
}
}
[HouseFunc("ThrowGameSettlement")]
public class ThrowGameSettlement : IHouseFuncHandler
{
private const uint HouseBeachInfoStart = 17000;
private const uint ThrowGameChallengePointsOffset = 2;
private const uint ThrowGameUnlockDrinkStartOffset = 50;
private const int ThrowGameModeChallenge = 2;
public async Task Handle(Connection connection, string param)
{
var root = HouseJson.ParseObject(param);
if (root == null) return;
var modeType = HouseJson.NumField(root, "nModeType");
var score = Math.Max(0, HouseJson.NumField(root, "nScore"));
var sync = new NtfSyncPlayer();
if (root["tbUnlockDrink"] is JsonObject unlockDrink && unlockDrink["nDrinkIDs"] is JsonArray drinks)
{
foreach (var drinkNode in drinks)
{
var drinkId = HouseJson.ToInt(drinkNode);
if (drinkId <= 0) continue;
var sid = HouseBeachInfoStart + ThrowGameUnlockDrinkStartOffset + (uint)drinkId;
var prev = HouseAttr.Read(connection.Player!, sid);
await HouseAttr.SetAsync(connection, sid, prev + 1, sync);
}
}
if (modeType == ThrowGameModeChallenge && score > 0)
{
var sid = HouseBeachInfoStart + ThrowGameChallengePointsOffset;
var prev = HouseAttr.Read(connection.Player!, sid);
if ((uint)score > prev)
await HouseAttr.SetAsync(connection, sid, (uint)score, sync);
}
var rsp = new JsonObject
{
["nAddExp"] = score,
["FuncName"] = "ThrowGameSettlement"
};
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Success(rsp), sync);
}
}
[HouseFunc("ThrowGameGetLevelReward")]
public class ThrowGameGetLevelReward : IHouseFuncHandler
{
public async Task Handle(Connection connection, string param)
{
var rsp = new JsonObject { ["FuncName"] = "ThrowGameGetLevelReward" };
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Success(rsp));
}
}
[HouseFunc("ThrowGameGetAchReward")]
public class ThrowGameGetAchReward : IHouseFuncHandler
{
public async Task Handle(Connection connection, string param)
{
var rsp = new JsonObject { ["FuncName"] = "ThrowGameGetAchReward" };
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Success(rsp));
}
}