server-master/srcs/_plugins/Plugin.QuestImpl/RunScriptHandlers/TeleportRunScriptHandler.cs
2026-02-10 18:21:30 +01:00

74 lines
No EOL
2.8 KiB
C#

using System.Linq;
using System.Threading.Tasks;
using WingsEmu.DTOs.Maps;
using WingsEmu.DTOs.Quests;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Configurations;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Maps;
using WingsEmu.Game.Networking;
using WingsEmu.Game.Quests;
using WingsEmu.Game.Quests.Event;
namespace Plugin.QuestImpl.RunScriptHandlers
{
public class TeleportRunScriptHandler : IRunScriptHandler
{
private readonly IGameLanguageService _gameLanguageService;
private readonly IMapManager _mapManager;
private readonly IQuestManager _questManager;
private readonly QuestTeleportDialogConfiguration _questTeleportDialogConfiguration;
public TeleportRunScriptHandler(QuestTeleportDialogConfiguration questTeleportDialogConfiguration, IQuestManager questManager, IGameLanguageService gameLanguageService, IMapManager mapManager)
{
_questTeleportDialogConfiguration = questTeleportDialogConfiguration;
_questManager = questManager;
_gameLanguageService = gameLanguageService;
_mapManager = mapManager;
}
public int[] RunIds => new[] { 200, 201, 202, 203, 204 };
public async Task ExecuteAsync(IClientSession session, RunScriptEvent e)
{
QuestTeleportDialogInfo questTeleport = _questTeleportDialogConfiguration.FirstOrDefault(s => s.RunId == e.RunId);
if (questTeleport == null)
{
return;
}
TutorialDto scriptWithTp = _questManager.GetScriptsTutorialByType(TutorialActionType.RUN).FirstOrDefault(s => s.Data == e.RunId);
if (scriptWithTp == null)
{
return;
}
TutorialDto completedScript = _questManager.GetScriptTutorialById(scriptWithTp.Id - 1);
if (!session.PlayerEntity.HasCompletedScriptByIndex(completedScript.ScriptId, completedScript.ScriptIndex))
{
return;
}
if (!session.CurrentMapInstance.HasMapFlag(MapFlags.IS_BASE_MAP))
{
return;
}
if (session.CantPerformActionOnAct4())
{
return;
}
if (questTeleport.AskForTeleport)
{
session.SendDialog($"guri 1000 {questTeleport.MapId} {questTeleport.PositionX} {questTeleport.PositionY}", "guri 9999",
_gameLanguageService.GetLanguage(GameDialogKey.QUEST_DIALOG_TELEPORT_TO_OBJECTIVE, session.UserLanguage));
return;
}
IMapInstance mapInstance = _mapManager.GetBaseMapInstanceByMapId(questTeleport.MapId);
session.ChangeMap(mapInstance.Id, questTeleport.PositionX, questTeleport.PositionY);
}
}
}