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