mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 08:23:58 +00:00
change main scene work now
This commit is contained in:
@@ -213,7 +213,7 @@ public class PlayerInstance(PlayerGameData data)
|
|||||||
Data.ShowItems[index - 1] = itemId;
|
Data.ShowItems[index - 1] = itemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static uint ToPackedAttrKey(uint gid, uint sid)
|
public uint ToPackedAttrKey(uint gid, uint sid)
|
||||||
{
|
{
|
||||||
if (gid == 0)
|
if (gid == 0)
|
||||||
return sid;
|
return sid;
|
||||||
@@ -221,7 +221,7 @@ public class PlayerInstance(PlayerGameData data)
|
|||||||
return (gid * 10000) + sid;
|
return (gid * 10000) + sid;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static uint ToShiftedAttrKey(uint gid, uint sid)
|
public uint ToShiftedAttrKey(uint gid, uint sid)
|
||||||
{
|
{
|
||||||
if (gid == 0)
|
if (gid == 0)
|
||||||
return sid;
|
return sid;
|
||||||
@@ -272,6 +272,9 @@ public class PlayerInstance(PlayerGameData data)
|
|||||||
yield return (21, levelId, 7);
|
yield return (21, levelId, 7);
|
||||||
yield return (22, levelId, 1_700_000_000);
|
yield return (22, levelId, 1_700_000_000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Main Scene 0 mean default scene
|
||||||
|
yield return (132, 1, 0);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,51 @@
|
|||||||
namespace MikuSB.GameServer.Server.CallGS.Handlers.Scene;
|
using MikuSB.Database.Player;
|
||||||
|
using MikuSB.Proto;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Scene;
|
||||||
|
|
||||||
// Response:{sErr:true or false}
|
// Response:{sErr:true or false}
|
||||||
[CallGSApi("ChangeMainScene")]
|
[CallGSApi("ChangeMainScene")]
|
||||||
public class ChangeMainScene : ICallGSHandler
|
public class ChangeMainScene : ICallGSHandler
|
||||||
{
|
{
|
||||||
|
private const int MainSceneGID = 132;
|
||||||
|
private const int MainSceneSID = 1;
|
||||||
|
|
||||||
public async Task Handle(Connection connection, string param, ushort seqNo)
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
{
|
{
|
||||||
string rsp = $"{{\"sErr\":false}}";
|
string rsp = $"{{\"sErr\":false}}";
|
||||||
// TODO change scene with ExtraSync
|
var req = JsonSerializer.Deserialize<ChangeMainSceneParam>(param);
|
||||||
await CallGSRouter.SendScript(connection, "ChangeMainScene", rsp);
|
if (req == null)
|
||||||
|
{
|
||||||
|
await CallGSRouter.SendScript(connection, "ChangeMainScene", rsp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var player = connection.Player!;
|
||||||
|
var mainSceneAttr = player.Data.Attrs
|
||||||
|
.FirstOrDefault(x => x.Gid == MainSceneGID && x.Sid == MainSceneSID);
|
||||||
|
|
||||||
|
if (mainSceneAttr == null)
|
||||||
|
{
|
||||||
|
mainSceneAttr = new PlayerAttr
|
||||||
|
{
|
||||||
|
Gid = MainSceneGID,
|
||||||
|
Sid = MainSceneSID
|
||||||
|
};
|
||||||
|
player.Data.Attrs.Add(mainSceneAttr);
|
||||||
|
}
|
||||||
|
var sync = new NtfSyncPlayer();
|
||||||
|
mainSceneAttr.Val = req.Id;
|
||||||
|
|
||||||
|
sync.Custom[player.ToPackedAttrKey(MainSceneGID, MainSceneSID)] = mainSceneAttr.Val;
|
||||||
|
sync.Custom[player.ToShiftedAttrKey(MainSceneGID, MainSceneSID)] = mainSceneAttr.Val;
|
||||||
|
await CallGSRouter.SendScript(connection, "ChangeMainScene", rsp, sync);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal sealed class ChangeMainSceneParam
|
||||||
|
{
|
||||||
|
[JsonPropertyName("nId")]
|
||||||
|
public uint Id { get; set; }
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user