mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-05 16:43:59 +00:00
I rewrote House_Request based on the code provided by undownding.
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
using MikuSB.Proto;
|
||||
using System.Text.Json.Nodes;
|
||||
|
||||
namespace MikuSB.GameServer.Server.CallGS.Handlers.House;
|
||||
|
||||
// GameEnterMainUI (Throw) — tblockGirlList empty = no blocked girls.
|
||||
[HouseFunc("GameEnterMainUI")]
|
||||
public class ThrowGameEnterMainUI : IHouseFuncHandler
|
||||
{
|
||||
@@ -13,21 +13,28 @@ public class ThrowGameEnterMainUI : IHouseFuncHandler
|
||||
["FuncName"] = "GameEnterMainUI",
|
||||
["tblockGirlList"] = new JsonArray()
|
||||
};
|
||||
await CallGSRouter.SendScript(connection, "House_Request", rsp.ToJsonString());
|
||||
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 rsp = new JsonObject { ["FuncName"] = "ThrowGameTutorialFinish" };
|
||||
await CallGSRouter.SendScript(connection, "House_Request", rsp.ToJsonString());
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
// ThrowGameEnter — returns nSeed for level generation.
|
||||
[HouseFunc("ThrowGameEnter")]
|
||||
public class ThrowGameEnter : IHouseFuncHandler
|
||||
{
|
||||
@@ -40,18 +47,52 @@ public class ThrowGameEnter : IHouseFuncHandler
|
||||
["FuncName"] = "ThrowGameEnter",
|
||||
["nSeed"] = Random.Next(1, 1_000_000_000)
|
||||
};
|
||||
await CallGSRouter.SendScript(connection, "House_Request", rsp.ToJsonString());
|
||||
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Success(rsp));
|
||||
}
|
||||
}
|
||||
|
||||
// ThrowGameSettlement — nAddExp=0 on private server.
|
||||
[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 rsp = new JsonObject { ["FuncName"] = "ThrowGameSettlement", ["nAddExp"] = 0 };
|
||||
await CallGSRouter.SendScript(connection, "House_Request", rsp.ToJsonString());
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,7 +102,7 @@ public class ThrowGameGetLevelReward : IHouseFuncHandler
|
||||
public async Task Handle(Connection connection, string param)
|
||||
{
|
||||
var rsp = new JsonObject { ["FuncName"] = "ThrowGameGetLevelReward" };
|
||||
await CallGSRouter.SendScript(connection, "House_Request", rsp.ToJsonString());
|
||||
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Success(rsp));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,6 +112,6 @@ public class ThrowGameGetAchReward : IHouseFuncHandler
|
||||
public async Task Handle(Connection connection, string param)
|
||||
{
|
||||
var rsp = new JsonObject { ["FuncName"] = "ThrowGameGetAchReward" };
|
||||
await CallGSRouter.SendScript(connection, "House_Request", rsp.ToJsonString());
|
||||
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Success(rsp));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user