fix: partly entry mission of Zagreus

This commit is contained in:
Somebody
2025-06-14 20:16:54 +08:00
parent c3c27e7ac0
commit 8fbdd0c8ce
5 changed files with 75 additions and 27 deletions

View File

@@ -18,4 +18,36 @@ public class CommandRaid : ICommand
await arg.SendMsg(I18NManager.Translate("Game.Command.Raid.Leaved"));
}
[CommandMethod("0 reset")]
public async ValueTask Reset(CommandArg arg)
{
if (arg.Target == null)
{
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 2)
{
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
if (!int.TryParse(arg.BasicArgs[0], out var raidId))
{
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.InvalidMissionId"));
return;
}
if (!int.TryParse(arg.BasicArgs[1], out var level))
{
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.InvalidMissionId"));
return;
}
await arg.Target.Player!.RaidManager!.ClearRaid(raidId, level);
await arg.SendMsg(I18NManager.Translate("Game.Command.Raid.Leaved"));
}
}

View File

@@ -271,15 +271,33 @@ public class RaidManager : BasePlayerManager
GameData.RaidConfigData.TryGetValue(raidId * 100 + worldLevel, out var config);
if (config == null) return;
config.MainMissionIDList.ForEach(async missionId =>
HashSet<int> floorIds = [];
foreach (var missionId in config.MainMissionIDList)
{
await Player.MissionManager!.RemoveMainMission(missionId);
});
GameData.MainMissionData.TryGetValue(missionId, out var mission);
if (mission?.MissionInfo.SubMissionList == null) continue;
foreach (var i in mission.MissionInfo.SubMissionList.Select(x => x.LevelFloorID).ToHashSet())
{
floorIds.Add(i);
}
}
dict.Remove(worldLevel);
if (dict.Count == 0) RaidData.RaidRecordDatas.Remove(raidId);
// reset scene data
foreach (var floorId in floorIds)
{
Player.SceneData!.PropTimelineData.Remove(floorId);
Player.SceneData!.GroupPropertyData.Remove(floorId);
Player.SceneData!.FloorTargetPuzzleGroupData.Remove(floorId);
Player.SceneData!.FloorSavedData.Remove(floorId);
Player.SceneData!.ScenePropData.Remove(floorId);
}
await Player.SendPacket(new PacketDelSaveRaidScNotify(raidId, worldLevel));
}

View File

@@ -18,6 +18,8 @@ using EggLink.DanhengServer.GameServer.Game.Scene.Entity;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene;
using EggLink.DanhengServer.Proto;
using EggLink.DanhengServer.Util;
using System.Management;
using EggLink.DanhengServer.Enums.Mission;
namespace EggLink.DanhengServer.GameServer.Game.Scene;
@@ -340,6 +342,12 @@ public class SceneInstance
floorSavedData[name] = value;
await Player.SendPacket(new PacketUpdateFloorSavedValueNotify(name, value, Player));
await Player.MissionManager!.HandleFinishType(MissionFinishTypeEnum.FloorSavedValue);
}
public int GetFloorSavedValue(string name)
{
return Player.SceneData!.GetFloorSavedValue(FloorId, name);
}
public int GetGroupProperty(int groupId, string name)

View File

@@ -1,7 +1,6 @@
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;
using EggLink.DanhengServer.Proto;
@@ -21,27 +20,18 @@ public class HandlerChangeEraFlipperDataCsReq : Handler
return;
}
if (req.Data.EraFlipperDataList_.Any(x => x.EraFlipperRegionId == 2) && connection.Player!.SceneInstance!.FloorInfo?.FloorSavedValue.Find(x => x.Name == "FSV_FlashBackCount") !=
null)
if (req.Data.EraFlipperDataList_.Any(x => x.EraFlipperRegionId == 2))
{
// 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;
}
var curValue = connection.Player.SceneInstance!.GetFloorSavedValue("FSV_FlashBackCount") + 1;
await connection.Player!.SceneInstance!.UpdateFloorSavedValue("FSV_FlashBackCount", curValue);
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);
Dictionary<int, int> gpValueDict = [];
gpValueDict.Add(1, 2);
gpValueDict.Add(2, 3);
gpValueDict.Add(3, 5);
gpValueDict.Add(4, 6);
var gpValue = gpValueDict.GetValueOrDefault(curValue, 0);
await connection.Player.SceneInstance!.UpdateGroupProperty(74, "MimiGoStep", gpValue);
}
component.ChangeEraFlipperStates(req.Data.EraFlipperDataList_.ToList());

View File

@@ -14,11 +14,11 @@ public class PacketGetEraFlipperDataScRsp : BasePacket
{
EraFlipperDataList_ =
{
player.SceneData!.EraFlipperData.RegionState.Select(x => new EraFlipperData
{
EraFlipperRegionId = (uint)x.Key,
State = (uint)x.Value
})
//player.SceneData!.EraFlipperData.RegionState.Select(x => new EraFlipperData
//{
// EraFlipperRegionId = (uint)x.Key,
// State = (uint)x.Value
//})
}
}
};