mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
feat: era flipper
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user