feat: era flipper

This commit is contained in:
Somebody
2025-05-30 19:56:52 +08:00
parent be6a8be26a
commit 6867869ede
7 changed files with 72 additions and 9 deletions

View File

@@ -821,7 +821,7 @@ public class PlayerInstance(PlayerData data)
Data.Pos = pos;
Data.Rot = rot;
var notSendMove = true;
if (planeId != Data.PlaneId || floorId != Data.FloorId || entryId != Data.EntryId)
if (planeId != Data.PlaneId || floorId != Data.FloorId || entryId != Data.EntryId || !mapTp)
{
SceneInstance instance = new(this, plane, floorId, entryId);
InvokeOnPlayerLoadScene(this, instance);

View File

@@ -252,7 +252,7 @@ public class SceneEntityLoader(SceneInstance scene)
if (info.IsClientOnly || info.IsDelete || !info.LoadOnInitial) return null;
GameData.MazePropData.TryGetValue(info.PropID, out var excel);
if (excel == null) return null;
if (excel == null) return null;
var prop = new EntityProp(Scene, excel, group, info);
@@ -294,13 +294,15 @@ public class SceneEntityLoader(SceneInstance scene)
{
if (prop.PropInfo.MappingInfoID != 2220) return prop;
await prop.SetState(PropStateEnum.Open);
await Scene.AddEntity(prop, sendPacket);
}
else
if (prop.PropInfo.PropID == 104006)
{
await Scene.AddEntity(prop, sendPacket);
await prop.SetState(PropStateEnum.Open);
}
await Scene.AddEntity(prop, sendPacket);
return prop;
}
}

View File

@@ -133,7 +133,7 @@ public class SceneInstance
Player.MissionManager!.OnLoadScene(sceneInfo);
// unlock section
if (ConfigManager.Config.ServerOption.EnableMission)
if (!ConfigManager.Config.ServerOption.AutoLightSection)
{
Player.SceneData!.UnlockSectionIdList.TryGetValue(FloorId, out var unlockSectionList);
if (unlockSectionList != null)

View File

@@ -1,6 +1,13 @@
using EggLink.DanhengServer.GameServer.Server.Packet.Send.EraFlipper;
using EggLink.DanhengServer.Database.Scene;
using EggLink.DanhengServer.Enums.Mission;
using EggLink.DanhengServer.GameServer.Game.Mission;
using EggLink.DanhengServer.GameServer.Game.Scene;
using EggLink.DanhengServer.GameServer.Game.Task;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.EraFlipper;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.EraFlipper;
@@ -12,7 +19,28 @@ public class HandlerChangeEraFlipperDataCsReq : Handler
var req = ChangeEraFlipperDataCsReq.Parser.ParseFrom(data);
var floorId = connection.Player!.SceneInstance!.FloorId;
if (connection.Player.SceneInstance.FloorInfo?.FloorSavedValue.Find(x => x.Name == "FSV_FlashBackCount") != null)
{
// should save
var plane = connection.Player.SceneInstance.PlaneId;
var floor = connection.Player.SceneInstance.FloorId;
connection.Player.SceneData!.FloorSavedData.TryGetValue(floor, out var value);
if (value == null)
{
value = [];
connection.Player.SceneData.FloorSavedData[floor] = value;
}
value["FSV_FlashBackCount"] = 0;
value["FSV_FlashBackCount"] = value.GetValueOrDefault("FSV_FlashBackCount", 0) + 1; // ParamString[2] is the key
await connection.SendPacket(new PacketUpdateFloorSavedValueNotify("FSV_FlashBackCount", value["FSV_FlashBackCount"], connection.Player));
connection.Player.TaskManager?.SceneTaskTrigger.TriggerFloor(plane, floor);
connection.Player.MissionManager?.HandleFinishType(MissionFinishTypeEnum.FloorSavedValue);
}
await connection.SendPacket(new PacketChangeEraFlipperDataScRsp(req));
await connection.SendPacket(new PacketEraFlipperDataChangeScNotify(req, floorId));
//await connection.SendPacket(new PacketEraFlipperDataChangeScNotify(req, floorId));
}
}

View File

@@ -0,0 +1,16 @@
using EggLink.DanhengServer.GameServer.Server.Packet.Send.EraFlipper;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.EraFlipper;
[Opcode(CmdIds.EnterEraFlipperRegionCsReq)]
public class HandlerEnterEraFlipperRegionCsReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = EnterEraFlipperRegionCsReq.Parser.ParseFrom(data);
await connection.SendPacket(new PacketEnterEraFlipperRegionScRsp(req.EraFlipperRegionId));
}
}

View File

@@ -0,0 +1,17 @@
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.EraFlipper;
public class PacketEnterEraFlipperRegionScRsp : BasePacket
{
public PacketEnterEraFlipperRegionScRsp(uint regionId) : base(CmdIds.EnterEraFlipperRegionScRsp)
{
var proto = new EnterEraFlipperRegionScRsp
{
EraFlipperRegionId = regionId
};
SetData(proto);
}
}

View File

@@ -83,7 +83,7 @@ public class PacketGetSceneMapInfoScRsp : BasePacket
mazeMap.MazePropList.Add(mazeProp);
}
if (ConfigManager.Config.ServerOption.EnableMission)
if (!ConfigManager.Config.ServerOption.AutoLightSection)
{
player.SceneData!.UnlockSectionIdList.TryGetValue(mapData.FloorID, out var sections);
foreach (var section in sections ?? []) mazeMap.LightenSectionList.Add((uint)section);