feat: add some mission handler

This commit is contained in:
StopWuyu
2025-05-31 22:35:56 +08:00
parent c1a9938a6f
commit 20e030fbc0
17 changed files with 165 additions and 69 deletions

View File

@@ -6,14 +6,14 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.addMissionItem)]
public class MissionHandlerAddMissionItem : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player)
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
if (Params.Count < 2) return;
for (var i = 0; i < Params.Count; i += 2)
if (@params.Count < 2) return;
for (var i = 0; i < @params.Count; i += 2)
{
var itemId = Params[i];
var count = Params[i + 1];
await Player.InventoryManager!.AddItem(itemId, count);
var itemId = @params[i];
var count = @params[i + 1];
await player.InventoryManager!.AddItem(itemId, count);
}
}
}

View File

@@ -6,15 +6,15 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.addRecoverMissionItem)]
public class MissionHandlerAddRecoverMissionItem : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player)
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
if (Params.Count < 2) return;
if (@params.Count < 2) return;
for (var i = 0; i < Params.Count; i += 2)
for (var i = 0; i < @params.Count; i += 2)
{
var itemId = Params[i];
var count = Params[i + 1];
await Player.InventoryManager!.AddItem(itemId, count);
var itemId = @params[i];
var count = @params[i + 1];
await player.InventoryManager!.AddItem(itemId, count);
}
}
}

View File

@@ -7,36 +7,36 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.ChangeLineup)]
public class MissionHandlerChangeLineup : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player)
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
Player.LineupManager!.GetCurLineup()!.BaseAvatars!.Clear();
player.LineupManager!.GetCurLineup()!.BaseAvatars!.Clear();
var count = 0;
var avatarCount = Params.Count(value => value != 0) - 1;
foreach (var avatarId in Params)
var avatarCount = @params.Count(value => value != 0) - 1;
foreach (var avatarId in @params)
{
if (count++ >= 4) break;
GameData.SpecialAvatarData.TryGetValue(avatarId * 10 + Player.Data.WorldLevel, out var specialAvatar);
GameData.SpecialAvatarData.TryGetValue(avatarId * 10 + player.Data.WorldLevel, out var specialAvatar);
if (specialAvatar == null)
{
GameData.AvatarConfigData.TryGetValue(avatarId, out var avatar);
if (avatar == null) continue;
var ava = Player.AvatarManager!.GetFormalAvatar(avatarId);
if (ava == null) await Player.AvatarManager!.AddAvatar(avatarId);
await Player.LineupManager!.AddAvatarToCurTeam(avatarId, count == avatarCount);
var ava = player.AvatarManager!.GetFormalAvatar(avatarId);
if (ava == null) await player.AvatarManager!.AddAvatar(avatarId);
await player.LineupManager!.AddAvatarToCurTeam(avatarId, count == avatarCount);
}
else
{
await Player.LineupManager!.AddSpecialAvatarToCurTeam(avatarId * 10 + Player.Data.WorldLevel,
await player.LineupManager!.AddSpecialAvatarToCurTeam(avatarId * 10 + player.Data.WorldLevel,
count == avatarCount);
}
}
GameData.SpecialAvatarData.TryGetValue(Params[4] * 10 + Player.Data.WorldLevel, out var leaderAvatar);
GameData.SpecialAvatarData.TryGetValue(@params[4] * 10 + player.Data.WorldLevel, out var leaderAvatar);
if (leaderAvatar == null)
Player.LineupManager!.GetCurLineup()!.LeaderAvatarId = Params[4];
player.LineupManager!.GetCurLineup()!.LeaderAvatarId = @params[4];
else
Player.LineupManager!.GetCurLineup()!.LeaderAvatarId = leaderAvatar.AvatarID;
player.LineupManager!.GetCurLineup()!.LeaderAvatarId = leaderAvatar.AvatarID;
await Player.SceneInstance!.SyncLineup();
await player.SceneInstance!.SyncLineup();
}
}

View File

@@ -6,17 +6,17 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.ChangeStoryLine)]
public class MissionHandlerChangeStoryLine : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player)
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
var toStoryLineId = Params[0];
var toEntryId = Params[1];
var toAnchorGroup = Params[2];
var toAnchorId = Params[3];
var toStoryLineId = @params[0];
var toEntryId = @params[1];
var toAnchorGroup = @params[2];
var toAnchorId = @params[3];
if (toStoryLineId == 0)
// exit
await Player.StoryLineManager!.FinishStoryLine(toEntryId, toAnchorGroup, toAnchorId);
await player.StoryLineManager!.FinishStoryLine(toEntryId, toAnchorGroup, toAnchorId);
else
await Player.StoryLineManager!.InitStoryLine(toStoryLineId, toEntryId, toAnchorGroup, toAnchorId);
await player.StoryLineManager!.InitStoryLine(toStoryLineId, toEntryId, toAnchorGroup, toAnchorId);
}
}

View File

@@ -6,10 +6,10 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.delMission)]
public class MissionHandlerDelMission : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player)
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
if (Params.Count < 1) return;
var missionId = Params[0];
await Player.MissionManager!.FinishSubMission(missionId);
if (@params.Count < 1) return;
var missionId = @params[0];
await player.MissionManager!.FinishSubMission(missionId);
}
}

View File

@@ -6,14 +6,14 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.delMissionItem)]
public class MissionHandlerDelMissionItem : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player)
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
if (Params.Count < 2) return;
for (var i = 0; i < Params.Count; i += 2)
if (@params.Count < 2) return;
for (var i = 0; i < @params.Count; i += 2)
{
var itemId = Params[i];
var count = Params[i + 1];
await Player.InventoryManager!.RemoveItem(itemId, count);
var itemId = @params[i];
var count = @params[i + 1];
await player.InventoryManager!.RemoveItem(itemId, count);
}
}
}

View File

@@ -6,14 +6,14 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.delSubMission)]
public class MissionHandlerDelSubMission : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player)
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
if (Params.Count < 1) return;
if (@params.Count < 1) return;
foreach (var subMissionId in Params)
foreach (var subMissionId in @params)
{
await Player.MissionManager!.AcceptSubMission(subMissionId);
await Player.MissionManager!.FinishSubMission(subMissionId);
await player.MissionManager!.AcceptSubMission(subMissionId);
await player.MissionManager!.FinishSubMission(subMissionId);
}
}
}

View File

@@ -6,12 +6,12 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.EnterEntryIfNotThere)]
public class MissionHandlerEnterEntryIfNotThere : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player)
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
var entryId = Params[0];
var anchorGroup = Params[1];
var anchorId = Params[2];
var entryId = @params[0];
var anchorGroup = @params[1];
var anchorId = @params[2];
await Player.EnterSceneByEntranceId(entryId, anchorGroup, anchorId, true);
await player.EnterSceneByEntranceId(entryId, anchorGroup, anchorId, true);
}
}

View File

@@ -6,11 +6,11 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.MoveToAnchor)]
public class MissionHandlerMoveToAnchor : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player)
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
var entryId = Params[0];
var anchorGroup = Params[1];
var anchorId = Params[2];
await Player.EnterSceneByEntranceId(entryId, anchorGroup, anchorId, true);
var entryId = @params[0];
var anchorGroup = @params[1];
var anchorId = @params[2];
await player.EnterSceneByEntranceId(entryId, anchorGroup, anchorId, true);
}
}

View File

@@ -7,21 +7,21 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.SetFloorSavedValue)]
public class MissionHandlerSetFloorSavedValue : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player)
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
_ = int.TryParse(ParamString[0], out var plane);
_ = int.TryParse(ParamString[1], out var floor);
Player.SceneData!.FloorSavedData.TryGetValue(floor, out var value);
_ = int.TryParse(paramString[0], out var plane);
_ = int.TryParse(paramString[1], out var floor);
player.SceneData!.FloorSavedData.TryGetValue(floor, out var value);
if (value == null)
{
value = [];
Player.SceneData.FloorSavedData[floor] = value;
player.SceneData.FloorSavedData[floor] = value;
}
value[ParamString[2]] = int.Parse(ParamString[3]); // ParamString[2] is the key
await Player.SendPacket(
new PacketUpdateFloorSavedValueNotify(ParamString[2], int.Parse(ParamString[3]), Player));
value[paramString[2]] = int.Parse(paramString[3]); // ParamString[2] is the key
await player.SendPacket(
new PacketUpdateFloorSavedValueNotify(paramString[2], int.Parse(paramString[3]), player));
Player.TaskManager?.SceneTaskTrigger.TriggerFloor(plane, floor);
player.TaskManager?.SceneTaskTrigger.TriggerFloor(plane, floor);
}
}

View File

@@ -0,0 +1,20 @@
using EggLink.DanhengServer.Enums.Mission;
using EggLink.DanhengServer.GameServer.Game.Player;
namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction.Handler;
[MissionFinishAction(FinishActionTypeEnum.SetGroupProperty)]
public class MissionHandlerSetGroupProperty : MissionFinishActionHandler
{
public override async ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player)
{
var groupId = paramString[0];
var propertyName = paramString[1];
var propertyValue = paramString[2];
if (string.IsNullOrEmpty(groupId) || string.IsNullOrEmpty(propertyName) || string.IsNullOrEmpty(propertyValue))
return;
await player.SceneInstance!.UpdateGroupProperty(int.Parse(groupId), propertyName, int.Parse(propertyValue));
}
}

View File

@@ -4,5 +4,5 @@ namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishAction;
public abstract class MissionFinishActionHandler
{
public abstract ValueTask OnHandle(List<int> Params, List<string> ParamString, PlayerInstance Player);
public abstract ValueTask OnHandle(List<int> @params, List<string> paramString, PlayerInstance player);
}

View File

@@ -0,0 +1,34 @@
using EggLink.DanhengServer.Data.Config;
using EggLink.DanhengServer.Data.Excel;
using EggLink.DanhengServer.Enums.Mission;
using EggLink.DanhengServer.GameServer.Game.Player;
namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishType.Handler;
[MissionFinishType(MissionFinishTypeEnum.GroupPropertyValue)]
public class MissionHandlerGroupPropertyValue : MissionFinishTypeHandler
{
public override async ValueTask HandleMissionFinishType(PlayerInstance player, SubMissionInfo info, object? arg)
{
var floorId = info.LevelFloorID;
var groupId = info.ParamInt1;
var value = info.ParamInt2;
var name = info.ParamStr1;
if (player.SceneInstance?.FloorId != floorId) return;
var prop = player.SceneInstance.GetGroupProperty(groupId, name);
if (prop == value) await player.MissionManager!.FinishSubMission(info.ID);
}
public override async ValueTask HandleQuestFinishType(PlayerInstance player, QuestDataExcel quest, FinishWayExcel excel, object? arg)
{
var floorId = excel.MazeFloorID;
var groupId = excel.ParamInt1;
var value = excel.ParamInt2;
var name = excel.ParamStr1;
if (player.SceneInstance?.FloorId != floorId) return;
var prop = player.SceneInstance.GetGroupProperty(groupId, name);
if (prop == value) await player.QuestManager!.AddQuestProgress(quest.QuestID, 1);
}
}

View File

@@ -0,0 +1,22 @@
using EggLink.DanhengServer.Data.Config;
using EggLink.DanhengServer.Data.Excel;
using EggLink.DanhengServer.Enums.Mission;
using EggLink.DanhengServer.GameServer.Game.Player;
namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishType.Handler;
[MissionFinishType(MissionFinishTypeEnum.StoryLineAddTrialAvatar)]
public class MissionHandlerStoryLineAddTrialAvatar : MissionFinishTypeHandler
{
public override async ValueTask HandleMissionFinishType(PlayerInstance player, SubMissionInfo info, object? arg)
{
await player.MissionManager!.FinishSubMission(info.ID);
}
public override async ValueTask HandleQuestFinishType(PlayerInstance player, QuestDataExcel quest,
FinishWayExcel excel, object? arg)
{
// this type wont be used in quest
await ValueTask.CompletedTask;
}
}

View File

@@ -39,6 +39,6 @@ public class MissionHandlerTimeLineSetState : MissionFinishTypeHandler
// compare
if (Encoding.UTF8.GetString(Convert.FromBase64String(data.ByteValue)) != value) return;
await player.MissionManager!.FinishSubMission(excel.ID);
await player.QuestManager!.AddQuestProgress(excel.ID, 1);
}
}

View File

@@ -590,6 +590,16 @@ public class PlayerInstance(PlayerData data)
await MissionManager!.OnPlayerInteractWithProp();
}
if (prop.Excel.ID == 104039)
{
foreach (var p in SceneInstance.GetEntitiesInGroup<EntityProp>(prop.GroupId))
{
await p.SetState(newState);
}
await MissionManager!.OnPlayerInteractWithProp();
}
if (prop.PropInfo.Name.Contains("Piece"))
{
var pieceDone = SceneInstance.GetEntitiesInGroup<EntityProp>(prop.GroupId)

View File

@@ -201,9 +201,19 @@ public class LevelTask(PlayerInstance player)
}
}
public async ValueTask StoryLineReplaceTrialPlayer(TaskConfigInfo act, SubMissionExcel subMission, GroupInfo? group = null)
{
if (subMission.SubMissionInfo?.FinishType == MissionFinishTypeEnum.StoryLineAddTrialAvatar)
{
var ids = Player.LineupManager!.GetCurLineup()?.BaseAvatars?.ToList() ?? [];
ids.ForEach(async void (x) => await Player.LineupManager!.RemoveAvatarFromCurTeam(x.BaseAvatarId, false));
await Player.LineupManager!.AddAvatarToCurTeam(subMission.SubMissionInfo.ParamInt1);
}
}
public async ValueTask ReplaceVirtualTeam(TaskConfigInfo act, SubMissionExcel subMission, GroupInfo? group = null)
{
if (!(Player.LineupManager!.GetCurLineup()?.IsExtraLineup() == true)) return;
if (Player.LineupManager!.GetCurLineup()?.IsExtraLineup() != true) return;
if (subMission.SubMissionInfo?.FinishType == MissionFinishTypeEnum.GetTrialAvatar)
{