mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 14:23:58 +00:00
98 lines
3.2 KiB
C#
98 lines
3.2 KiB
C#
using MikuSB.Proto;
|
|
using System.Text.Json.Nodes;
|
|
|
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.House;
|
|
|
|
[HouseFunc("ChangeNpcSuit")]
|
|
public class ChangeNpcSuit : IHouseFuncHandler
|
|
{
|
|
public async Task Handle(Connection connection, string 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
|
|
{
|
|
["NpcId"] = npcId,
|
|
["SuitId"] = suitId,
|
|
["npcSuit"] = new JsonObject
|
|
{
|
|
["NpcId"] = npcId,
|
|
["SuitId"] = suitId
|
|
},
|
|
["FuncName"] = "ChangeNpcSuitSuccess"
|
|
};
|
|
await CallGSRouter.SendScript(connection, "House_Request", HouseRequestScript.Success(rsp), sync);
|
|
}
|
|
}
|
|
|
|
[HouseFunc("ChangeNpcSuitByAreaId")]
|
|
public class ChangeNpcSuitByAreaId : IHouseFuncHandler
|
|
{
|
|
public async Task Handle(Connection connection, string param)
|
|
{
|
|
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)
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
|
|
[HouseFunc("ChangeGirlBeachSuitId")]
|
|
public class ChangeGirlBeachSuitId : IHouseFuncHandler
|
|
{
|
|
public async Task Handle(Connection connection, string 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();
|
|
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);
|
|
}
|
|
}
|