diff --git a/Source/Game/Achievements/CriteriaHandler.cs b/Source/Game/Achievements/CriteriaHandler.cs index e89a2cfba..38f42a387 100644 --- a/Source/Game/Achievements/CriteriaHandler.cs +++ b/Source/Game/Achievements/CriteriaHandler.cs @@ -136,7 +136,9 @@ namespace Game.Achievements case CriteriaType.DeliveredKillingBlow: case CriteriaType.PVPKillInArea: case CriteriaType.WinArena: // This also behaves like CriteriaType.WinAnyRankedArena + case CriteriaType.PlayerTriggerGameEvent: case CriteriaType.Login: + case CriteriaType.AnyoneTriggerGameEventScenario: case CriteriaType.BattlePetReachLevel: case CriteriaType.ActivelyEarnPetLevel: case CriteriaType.PlaceGarrisonBuilding: @@ -414,10 +416,8 @@ namespace Game.Achievements case CriteriaType.CompleteAnyChallengeMode: case CriteriaType.KilledAllUnitsInSpawnRegion: case CriteriaType.CompleteChallengeMode: - case CriteriaType.PlayerTriggerGameEvent: case CriteriaType.CreatedItemsByCastingSpellWithLimit: case CriteriaType.BattlePetAchievementPointsEarned: - case CriteriaType.AnyoneTriggerGameEventScenario: case CriteriaType.ReleasedSpirit: case CriteriaType.AccountKnownPet: case CriteriaType.DefeatDungeonEncounterWhileElegibleForLoot: diff --git a/Source/Game/DataStorage/Structs/M_Records.cs b/Source/Game/DataStorage/Structs/M_Records.cs index c802ddcb6..89e9c9c64 100644 --- a/Source/Game/DataStorage/Structs/M_Records.cs +++ b/Source/Game/DataStorage/Structs/M_Records.cs @@ -66,6 +66,7 @@ namespace Game.DataStorage public bool IsBattleground() { return InstanceType == MapTypes.Battleground; } public bool IsBattleArena() { return InstanceType == MapTypes.Arena; } public bool IsBattlegroundOrArena() { return InstanceType == MapTypes.Battleground || InstanceType == MapTypes.Arena; } + public bool IsScenario() { return InstanceType == MapTypes.Scenario; } public bool IsWorldMap() { return InstanceType == MapTypes.Common; } public bool GetEntrancePos(out uint mapid, out float x, out float y) diff --git a/Source/Game/Events/GameEventSender.cs b/Source/Game/Events/GameEventSender.cs index 722eab05d..5b593fd93 100644 --- a/Source/Game/Events/GameEventSender.cs +++ b/Source/Game/Events/GameEventSender.cs @@ -57,7 +57,15 @@ namespace Game { Map map = source.GetMap(); if (map.Instanceable()) + { source.StartCriteriaTimer(CriteriaStartEvent.SendEvent, gameEventId); + source.ResetCriteria(CriteriaFailEvent.SendEvent, gameEventId); + } + + source.UpdateCriteria(CriteriaType.PlayerTriggerGameEvent, gameEventId, 0, 0, source); + + if (map.IsScenario()) + source.UpdateCriteria(CriteriaType.AnyoneTriggerGameEventScenario, gameEventId, 0, 0, source); } public static void TriggerForMap(uint gameEventId, Map map, WorldObject source = null, WorldObject target = null) diff --git a/Source/Game/Maps/Map.cs b/Source/Game/Maps/Map.cs index ac60f9c95..2865cdc94 100644 --- a/Source/Game/Maps/Map.cs +++ b/Source/Game/Maps/Map.cs @@ -3778,6 +3778,11 @@ namespace Game.Maps return i_mapRecord != null && i_mapRecord.IsBattlegroundOrArena(); } + public bool IsScenario() + { + return i_mapRecord != null && i_mapRecord.IsScenario(); + } + public bool IsGarrison() { return i_mapRecord != null && i_mapRecord.IsGarrison();