mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
feat: scene component
This commit is contained in:
7
GameServer/Game/Scene/Component/BaseSceneComponent.cs
Normal file
7
GameServer/Game/Scene/Component/BaseSceneComponent.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace EggLink.DanhengServer.GameServer.Game.Scene.Component;
|
||||
|
||||
public abstract class BaseSceneComponent(SceneInstance scene)
|
||||
{
|
||||
public SceneInstance SceneInst { get; } = scene;
|
||||
public abstract ValueTask Initialize();
|
||||
}
|
||||
60
GameServer/Game/Scene/Component/EraFlipperSceneComponent.cs
Normal file
60
GameServer/Game/Scene/Component/EraFlipperSceneComponent.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.EraFlipper;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.Scene.Component;
|
||||
|
||||
public class EraFlipperSceneComponent(SceneInstance scene) : BaseSceneComponent(scene)
|
||||
{
|
||||
public int CurRegionId { get; set; }
|
||||
public int RegionState { get; set; }
|
||||
|
||||
public override async ValueTask Initialize()
|
||||
{
|
||||
CurRegionId = SceneInst.Player.SceneData!.EraFlipperData.CurRegionId;
|
||||
if (CurRegionId != 0)
|
||||
{
|
||||
RegionState = SceneInst.Player.SceneData!.EraFlipperData.RegionState.GetValueOrDefault(CurRegionId, 0);
|
||||
|
||||
await SceneInst.Player.SendPacket(
|
||||
new PacketEraFlipperDataChangeScNotify(SceneInst.FloorId, CurRegionId, RegionState));
|
||||
}
|
||||
}
|
||||
|
||||
public void EnterEraFlipperRegion(int regionId, int state)
|
||||
{
|
||||
CurRegionId = regionId;
|
||||
RegionState = state;
|
||||
|
||||
SceneInst.Player.SceneData!.EraFlipperData.CurRegionId = regionId;
|
||||
SceneInst.Player.SceneData!.EraFlipperData.RegionState[CurRegionId] = state;
|
||||
}
|
||||
|
||||
public void LeaveFlipperRegion()
|
||||
{
|
||||
CurRegionId = 0;
|
||||
RegionState = 0;
|
||||
|
||||
SceneInst.Player.SceneData!.EraFlipperData.CurRegionId = 0;
|
||||
}
|
||||
|
||||
public void ChangeEraFlipperState(int state)
|
||||
{
|
||||
if (CurRegionId == 0) return;
|
||||
RegionState = state;
|
||||
|
||||
// save
|
||||
SceneInst.Player.SceneData!.EraFlipperData.RegionState[CurRegionId] = state;
|
||||
}
|
||||
|
||||
public void ChangeEraFlipperStates(List<EraFlipperData> dataList)
|
||||
{
|
||||
foreach (var data in dataList)
|
||||
{
|
||||
SceneInst.Player.SceneData!.EraFlipperData.RegionState[(int)data.EraFlipperRegionId] = (int)data.State;
|
||||
if (data.EraFlipperRegionId == CurRegionId)
|
||||
{
|
||||
RegionState = (int)data.State;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace EggLink.DanhengServer.GameServer.Game.Scene.Component;
|
||||
|
||||
public class RotatableRegionSceneComponent(SceneInstance scene) : BaseSceneComponent(scene)
|
||||
{
|
||||
public override async ValueTask Initialize()
|
||||
{
|
||||
// TODO
|
||||
await ValueTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using EggLink.DanhengServer.Enums.Mission;
|
||||
using EggLink.DanhengServer.GameServer.Game.Scene.Component;
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.EraFlipper;
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
@@ -13,9 +14,14 @@ public class HandlerChangeEraFlipperDataCsReq : Handler
|
||||
{
|
||||
var req = ChangeEraFlipperDataCsReq.Parser.ParseFrom(data);
|
||||
|
||||
var floorId = connection.Player!.SceneInstance!.FloorId;
|
||||
var component = connection.Player!.SceneInstance!.GetComponent<EraFlipperSceneComponent>();
|
||||
if (component == null)
|
||||
{
|
||||
await connection.SendPacket(new PacketChangeEraFlipperDataScRsp(Retcode.RetAdventureMapNotExist));
|
||||
return;
|
||||
}
|
||||
|
||||
if (connection.Player.SceneInstance.FloorInfo?.FloorSavedValue.Find(x => x.Name == "FSV_FlashBackCount") !=
|
||||
if (connection.Player!.SceneInstance!.FloorInfo?.FloorSavedValue.Find(x => x.Name == "FSV_FlashBackCount") !=
|
||||
null)
|
||||
{
|
||||
// should save
|
||||
@@ -38,6 +44,7 @@ public class HandlerChangeEraFlipperDataCsReq : Handler
|
||||
connection.Player.MissionManager?.HandleFinishType(MissionFinishTypeEnum.FloorSavedValue);
|
||||
}
|
||||
|
||||
component.ChangeEraFlipperStates(req.Data.EraFlipperDataList_.ToList());
|
||||
await connection.SendPacket(new PacketChangeEraFlipperDataScRsp(req));
|
||||
//await connection.SendPacket(new PacketEraFlipperDataChangeScNotify(req, floorId));
|
||||
}
|
||||
|
||||
@@ -14,4 +14,14 @@ public class PacketChangeEraFlipperDataScRsp : BasePacket
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
|
||||
public PacketChangeEraFlipperDataScRsp(Retcode code) : base(CmdIds.ChangeEraFlipperDataScRsp)
|
||||
{
|
||||
var proto = new ChangeEraFlipperDataScRsp
|
||||
{
|
||||
Retcode = (uint)code
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -14,4 +14,14 @@ public class PacketEnterEraFlipperRegionScRsp : BasePacket
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
|
||||
public PacketEnterEraFlipperRegionScRsp(Retcode code) : base(CmdIds.EnterEraFlipperRegionScRsp)
|
||||
{
|
||||
var proto = new EnterEraFlipperRegionScRsp
|
||||
{
|
||||
Retcode = (uint)code
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,28 @@ public class PacketEraFlipperDataChangeScNotify : BasePacket
|
||||
SetData(proto);
|
||||
}
|
||||
|
||||
public PacketEraFlipperDataChangeScNotify(int floorId, int regionId, int state) : base(
|
||||
CmdIds.EraFlipperDataChangeScNotify)
|
||||
{
|
||||
var proto = new EraFlipperDataChangeScNotify
|
||||
{
|
||||
Data = new EraFlipperDataList
|
||||
{
|
||||
EraFlipperDataList_ =
|
||||
{
|
||||
new EraFlipperData
|
||||
{
|
||||
EraFlipperRegionId = (uint)regionId,
|
||||
State = (uint)state
|
||||
}
|
||||
}
|
||||
},
|
||||
FloorId = (uint)floorId
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
|
||||
public PacketEraFlipperDataChangeScNotify(int floorId) : base(CmdIds.EraFlipperDataChangeScNotify)
|
||||
{
|
||||
var proto = new EraFlipperDataChangeScNotify
|
||||
|
||||
@@ -8,7 +8,20 @@ public class PacketGetEraFlipperDataScRsp : BasePacket
|
||||
{
|
||||
public PacketGetEraFlipperDataScRsp(PlayerInstance player) : base(CmdIds.GetEraFlipperDataScRsp)
|
||||
{
|
||||
var proto = new GetEraFlipperDataScRsp();
|
||||
var proto = new GetEraFlipperDataScRsp
|
||||
{
|
||||
Data = new EraFlipperDataList
|
||||
{
|
||||
EraFlipperDataList_ =
|
||||
{
|
||||
player.SceneData!.EraFlipperData.RegionState.Select(x => new EraFlipperData
|
||||
{
|
||||
EraFlipperRegionId = (uint)x.Key,
|
||||
State = (uint)x.Value
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.EraFlipper;
|
||||
|
||||
public class PacketResetEraFlipperDataScRsp : BasePacket
|
||||
{
|
||||
public PacketResetEraFlipperDataScRsp(int regionId, int state, bool leave) : base(CmdIds.ResetEraFlipperDataScRsp)
|
||||
{
|
||||
var proto = new ResetEraFlipperDataScRsp
|
||||
{
|
||||
Data = new EraFlipperDataList
|
||||
{
|
||||
EraFlipperDataList_ =
|
||||
{
|
||||
new EraFlipperData
|
||||
{
|
||||
EraFlipperRegionId = (uint)regionId,
|
||||
State = (uint)state
|
||||
}
|
||||
}
|
||||
},
|
||||
PAHMAGPFDDJ = leave
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
|
||||
public PacketResetEraFlipperDataScRsp(Retcode code) : base(CmdIds.ResetEraFlipperDataScRsp)
|
||||
{
|
||||
var proto = new ResetEraFlipperDataScRsp
|
||||
{
|
||||
Retcode = (uint)code
|
||||
};
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user