mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-06 03:43:59 +00:00
I rewrote House_Request based on the code provided by undownding.
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
using System.Text.Json;
|
||||
using MikuSB.Proto;
|
||||
using System.Text.Json.Nodes;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MikuSB.GameServer.Server.CallGS.Handlers.House;
|
||||
|
||||
@@ -9,14 +8,26 @@ public class ChangeNpcSuit : IHouseFuncHandler
|
||||
{
|
||||
public async Task Handle(Connection connection, string param)
|
||||
{
|
||||
var req = JsonSerializer.Deserialize<NpcSuitParam>(param);
|
||||
var root = HouseJson.ParseObject(param);
|
||||
if (root == null) return;
|
||||
|
||||
var npcId = HouseJson.NumField(root, "NpcId");
|
||||
var suitId = HouseJson.NumField(root, "SuitId");
|
||||
var sync = new NtfSyncPlayer();
|
||||
await HouseAttr.SetAsync(connection, (uint)(npcId * 50 + 7), (uint)Math.Max(0, suitId), sync, sendImmediate: true);
|
||||
|
||||
var rsp = new JsonObject
|
||||
{
|
||||
["FuncName"] = "ChangeNpcSuitSuccess",
|
||||
["NpcId"] = req?.NpcId ?? 0,
|
||||
["SuitId"] = req?.SuitId ?? 0
|
||||
["NpcId"] = npcId,
|
||||
["SuitId"] = suitId,
|
||||
["npcSuit"] = new JsonObject
|
||||
{
|
||||
["NpcId"] = npcId,
|
||||
["SuitId"] = suitId
|
||||
},
|
||||
["FuncName"] = "ChangeNpcSuitSuccess"
|
||||
};
|
||||
await CallGSRouter.SendScript(connection, "House_Request", rsp.ToJsonString());
|
||||
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Success(rsp), sync);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,14 +36,45 @@ public class ChangeNpcSuitByAreaId : IHouseFuncHandler
|
||||
{
|
||||
public async Task Handle(Connection connection, string param)
|
||||
{
|
||||
var req = JsonSerializer.Deserialize<NpcSuitParam>(param);
|
||||
var rsp = new JsonObject
|
||||
var root = HouseJson.ParseObject(param);
|
||||
if (root == null) return;
|
||||
|
||||
var npcId = HouseJson.NumField(root, "NpcId");
|
||||
var areaId = HouseJson.NumField(root, "AreaId");
|
||||
var suitId = HouseJson.NumField(root, "SuitId");
|
||||
var sync = new NtfSyncPlayer();
|
||||
|
||||
if (npcId > 0 && areaId > 0)
|
||||
{
|
||||
["FuncName"] = "ChangeNpcSuitByAreaIdRsp",
|
||||
["NpcId"] = req?.NpcId ?? 0,
|
||||
["SuitId"] = req?.SuitId ?? 0
|
||||
};
|
||||
await CallGSRouter.SendScript(connection, "House_Request", rsp.ToJsonString());
|
||||
uint[] slotSids = Enumerable.Range(24, 6).Select(i => (uint)(npcId * 50 + i)).ToArray();
|
||||
uint? chosenSid = null;
|
||||
foreach (var sid in slotSids)
|
||||
{
|
||||
if ((HouseAttr.Read(connection.Player!, sid) & 0xffffu) == (uint)areaId)
|
||||
{
|
||||
chosenSid = sid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (chosenSid == null)
|
||||
{
|
||||
foreach (var sid in slotSids)
|
||||
{
|
||||
if (HouseAttr.Read(connection.Player!, sid) == 0)
|
||||
{
|
||||
chosenSid = sid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
chosenSid ??= slotSids[0];
|
||||
var packed = (((uint)suitId & 0xffffu) << 16) | ((uint)areaId & 0xffffu);
|
||||
await HouseAttr.SetAsync(connection, chosenSid.Value, packed, sync, sendImmediate: true);
|
||||
}
|
||||
|
||||
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Synthesize(root), sync);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,19 +83,15 @@ public class ChangeGirlBeachSuitId : IHouseFuncHandler
|
||||
{
|
||||
public async Task Handle(Connection connection, string param)
|
||||
{
|
||||
var req = JsonSerializer.Deserialize<NpcSuitParam>(param);
|
||||
var rsp = new JsonObject
|
||||
{
|
||||
["FuncName"] = "ChangeGirlBeachSuitIdSuccess",
|
||||
["NpcId"] = req?.NpcId ?? 0,
|
||||
["SuitId"] = req?.SuitId ?? 0
|
||||
};
|
||||
await CallGSRouter.SendScript(connection, "House_Request", rsp.ToJsonString());
|
||||
var root = HouseJson.ParseObject(param);
|
||||
if (root == null) return;
|
||||
|
||||
var npcId = HouseJson.NumField(root, "NpcId");
|
||||
var suitId = HouseJson.NumField(root, "SuitId");
|
||||
var sync = new NtfSyncPlayer();
|
||||
if (npcId > 0)
|
||||
await HouseAttr.SetAsync(connection, (uint)(npcId * 50 + 8), (uint)Math.Max(0, suitId), sync, sendImmediate: true);
|
||||
|
||||
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Synthesize(root), sync);
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class NpcSuitParam
|
||||
{
|
||||
[JsonPropertyName("NpcId")] public int NpcId { get; set; }
|
||||
[JsonPropertyName("SuitId")] public int SuitId { get; set; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user