74 lines
No EOL
2.8 KiB
C#
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);
|
|
}
|
|
}
|
|
} |