Core/Maps: Add Map::DoOnPlayers helper function

Port From (https://github.com/TrinityCore/TrinityCore/commit/543a7b79c3e5259ed3da413a6d91f00dfd85977e)
This commit is contained in:
hondacrx
2022-05-09 13:23:28 -04:00
parent 94eea137ae
commit ac97b9b15b
2 changed files with 28 additions and 57 deletions
+22 -57
View File
@@ -360,17 +360,18 @@ namespace Game.Maps
switch (state) switch (state)
{ {
case EncounterState.InProgress: case EncounterState.InProgress:
{ {
uint resInterval = GetCombatResurrectionChargeInterval(); uint resInterval = GetCombatResurrectionChargeInterval();
InitializeCombatResurrections(1, resInterval); InitializeCombatResurrections(1, resInterval);
SendEncounterStart(1, 9, resInterval, resInterval); SendEncounterStart(1, 9, resInterval, resInterval);
var playerList = instance.GetPlayers(); instance.DoOnPlayers(player =>
foreach (var player in playerList) {
if (player.IsAlive()) if (player.IsAlive())
Unit.ProcSkillsAndAuras(player, null, new ProcFlagsInit(ProcFlags.EncounterStart), new ProcFlagsInit(ProcFlags.None), ProcFlagsSpellType.MaskAll, ProcFlagsSpellPhase.None, ProcFlagsHit.None, null, null, null); Unit.ProcSkillsAndAuras(player, null, new ProcFlagsInit(ProcFlags.EncounterStart), new ProcFlagsInit(), ProcFlagsSpellType.MaskAll, ProcFlagsSpellPhase.None, ProcFlagsHit.None, null, null, null);
break; });
} break;
}
case EncounterState.Fail: case EncounterState.Fail:
case EncounterState.Done: case EncounterState.Done:
ResetCombatResurrections(); ResetCombatResurrections();
@@ -577,70 +578,38 @@ namespace Game.Maps
} }
public void DoUpdateWorldState(uint uiStateId, uint uiStateData) public void DoUpdateWorldState(uint uiStateId, uint uiStateData)
{ {
var lPlayers = instance.GetPlayers(); instance.DoOnPlayers(player => player.SendUpdateWorldState(uiStateId, uiStateData));
if (!lPlayers.Empty())
{
foreach (var player in lPlayers)
player.SendUpdateWorldState(uiStateId, uiStateData);
}
else
Log.outDebug(LogFilter.Scripts, "DoUpdateWorldState attempt send data but no players in map.");
} }
// Send Notify to all players in instance // Send Notify to all players in instance
void DoSendNotifyToInstance(string format, params object[] args) void DoSendNotifyToInstance(string format, params object[] args)
{ {
var players = instance.GetPlayers(); instance.DoOnPlayers(player => player.GetSession()?.SendNotification(format, args));
if (!players.Empty())
{
foreach (var player in players)
{
WorldSession session = player.GetSession();
if (session != null)
session.SendNotification(format, args);
}
}
} }
// Update Achievement Criteria for all players in instance // Update Achievement Criteria for all players in instance
public void DoUpdateCriteria(CriteriaType type, uint miscValue1 = 0, uint miscValue2 = 0, Unit unit = null) public void DoUpdateCriteria(CriteriaType type, uint miscValue1 = 0, uint miscValue2 = 0, Unit unit = null)
{ {
var PlayerList = instance.GetPlayers(); instance.DoOnPlayers(player => player.UpdateCriteria(type, miscValue1, miscValue2, 0, unit));
if (!PlayerList.Empty())
foreach (var player in PlayerList)
player.UpdateCriteria(type, miscValue1, miscValue2, 0, unit);
} }
// Start timed achievement for all players in instance // Start timed achievement for all players in instance
public void DoStartCriteriaTimer(CriteriaStartEvent startEvent, uint entry) public void DoStartCriteriaTimer(CriteriaStartEvent startEvent, uint entry)
{ {
var PlayerList = instance.GetPlayers(); instance.DoOnPlayers(player => player.StartCriteriaTimer(startEvent, entry));
if (!PlayerList.Empty())
foreach (var player in PlayerList)
player.StartCriteriaTimer(startEvent, entry);
} }
// Stop timed achievement for all players in instance // Stop timed achievement for all players in instance
public void DoStopCriteriaTimer(CriteriaStartEvent startEvent, uint entry) public void DoStopCriteriaTimer(CriteriaStartEvent startEvent, uint entry)
{ {
var PlayerList = instance.GetPlayers(); instance.DoOnPlayers(player => player.RemoveCriteriaTimer(startEvent, entry));
if (!PlayerList.Empty())
foreach (var player in PlayerList)
player.RemoveCriteriaTimer(startEvent, entry);
} }
// Remove Auras due to Spell on all players in instance // Remove Auras due to Spell on all players in instance
public void DoRemoveAurasDueToSpellOnPlayers(uint spell, bool includePets = false, bool includeControlled = false) public void DoRemoveAurasDueToSpellOnPlayers(uint spell, bool includePets = false, bool includeControlled = false)
{ {
var playerList = instance.GetPlayers(); instance.DoOnPlayers(player => DoRemoveAurasDueToSpellOnPlayer(player, spell, includePets, includeControlled));
foreach (var player in playerList)
DoRemoveAurasDueToSpellOnPlayer(player, spell, includePets, includeControlled);
} }
public void DoRemoveAurasDueToSpellOnPlayer(Player player, uint spell, bool includePets = false, bool includeControlled = false) public void DoRemoveAurasDueToSpellOnPlayer(Player player, uint spell, bool includePets = false, bool includeControlled = false)
@@ -679,9 +648,7 @@ namespace Game.Maps
// Cast spell on all players in instance // Cast spell on all players in instance
public void DoCastSpellOnPlayers(uint spell, bool includePets = false, bool includeControlled = false) public void DoCastSpellOnPlayers(uint spell, bool includePets = false, bool includeControlled = false)
{ {
var playerList = instance.GetPlayers(); instance.DoOnPlayers(player => DoCastSpellOnPlayer(player, spell, includePets, includeControlled));
foreach (var player in playerList)
DoCastSpellOnPlayer(player, spell, includePets, includeControlled);
} }
public void DoCastSpellOnPlayer(Player player, uint spell, bool includePets = false, bool includeControlled = false) public void DoCastSpellOnPlayer(Player player, uint spell, bool includePets = false, bool includeControlled = false)
@@ -816,7 +783,7 @@ namespace Game.Maps
if (encounter.lastEncounterDungeon != 0) if (encounter.lastEncounterDungeon != 0)
{ {
dungeonId = encounter.lastEncounterDungeon; dungeonId = encounter.lastEncounterDungeon;
Log.outDebug(LogFilter.Lfg, "UpdateEncounterState: Instance {0} (instanceId {1}) completed encounter {2}. Credit Dungeon: {3}", Log.outDebug(LogFilter.Lfg, "UpdateEncounterState: Instance {0} (instanceId {1}) completed encounter {2}. Credit Dungeon: {3}",
instance.GetMapName(), instance.GetInstanceId(), encounter.dbcEntry.Name[Global.WorldMgr.GetDefaultDbcLocale()], dungeonId); instance.GetMapName(), instance.GetInstanceId(), encounter.dbcEntry.Name[Global.WorldMgr.GetDefaultDbcLocale()], dungeonId);
break; break;
} }
@@ -841,9 +808,7 @@ namespace Game.Maps
void UpdatePhasing() void UpdatePhasing()
{ {
var players = instance.GetPlayers(); instance.DoOnPlayers(player => PhasingHandler.SendToPlayer(player));
foreach (var player in players)
PhasingHandler.SendToPlayer(player);
} }
public void UpdateCombatResurrection(uint diff) public void UpdateCombatResurrection(uint diff)
@@ -942,7 +907,7 @@ namespace Game.Maps
public void MarkAreaTriggerDone(uint id) { _activatedAreaTriggers.Add(id); } public void MarkAreaTriggerDone(uint id) { _activatedAreaTriggers.Add(id); }
public void ResetAreaTriggerDone(uint id) { _activatedAreaTriggers.Remove(id); } public void ResetAreaTriggerDone(uint id) { _activatedAreaTriggers.Remove(id); }
public bool IsAreaTriggerDone(uint id) { return _activatedAreaTriggers.Contains(id); } public bool IsAreaTriggerDone(uint id) { return _activatedAreaTriggers.Contains(id); }
public virtual void FillInitialWorldStates(InitWorldStates data) { } public virtual void FillInitialWorldStates(InitWorldStates data) { }
public int GetEncounterCount() { return bosses.Count; } public int GetEncounterCount() { return bosses.Count; }
+6
View File
@@ -3814,6 +3814,12 @@ namespace Game.Maps
i_worldObjects.Remove(obj); i_worldObjects.Remove(obj);
} }
public void DoOnPlayers(Action<Player> action)
{
foreach (var player in GetPlayers())
action(player);
}
public List<Player> GetPlayers() public List<Player> GetPlayers()
{ {
return m_activePlayers; return m_activePlayers;