Core/AreaTriggers: Added ActionSet flags for serverside areatriggers

Port From (https://github.com/TrinityCore/TrinityCore/commit/1426f58ff007eac2d9719b41f9189d82b733789e)
This commit is contained in:
Hondacrx
2024-09-01 17:25:52 -04:00
parent 3945a662eb
commit 382b983820
9 changed files with 101 additions and 22 deletions
@@ -606,8 +606,55 @@ namespace Game.Entities
if (GetTemplate() != null)
{
var conditions = Global.ConditionMgr.GetConditionsForAreaTrigger(GetTemplate().Id.Id, GetTemplate().Id.IsCustom);
if (conditions != null && !conditions.Empty())
targetList.RemoveAll(target => !Global.ConditionMgr.IsObjectMeetToConditions(target, conditions));
targetList.RemoveAll(target =>
{
if (GetCasterGuid() == target.GetGUID())
{
if (HasActionSetFlag(AreaTriggerActionSetFlag.NotTriggeredbyCaster))
return true;
}
else
{
if (HasActionSetFlag(AreaTriggerActionSetFlag.OnlyTriggeredByCaster))
return true;
if (HasActionSetFlag(AreaTriggerActionSetFlag.CreatorsPartyOnly))
{
Unit caster = GetCaster();
if (caster == null)
return true;
if (!caster.IsInRaidWith(target))
return true;
}
}
Player player = target.ToPlayer();
if (player != null)
{
switch (player.GetDeathState())
{
case DeathState.Dead:
if (!HasActionSetFlag(AreaTriggerActionSetFlag.AllowWhileGhost))
return true;
break;
case DeathState.Corpse:
if (!HasActionSetFlag(AreaTriggerActionSetFlag.AllowWhileDead))
return true;
break;
default:
break;
}
}
if (!HasActionSetFlag(AreaTriggerActionSetFlag.CanAffectUninteractible) && target.IsUninteractible())
return true;
if (conditions != null)
return !Global.ConditionMgr.IsObjectMeetToConditions(target, conditions);
return false;
});
}
HandleUnitEnterExit(targetList);
@@ -615,7 +662,7 @@ namespace Game.Entities
void SearchUnits(List<Unit> targetList, float radius, bool check3D)
{
var check = new AnyUnitInObjectRangeCheck(this, radius, check3D);
var check = new AnyUnitInObjectRangeCheck(this, radius, check3D, false);
if (IsStaticSpawn())
{
List<Player> temp = new List<Player>();
@@ -770,6 +817,9 @@ namespace Game.Entities
player.SendSysMessage(CypherStrings.DebugAreatriggerEntityEntered, GetEntry(), IsCustom(), IsStaticSpawn(), _spawnId);
player.UpdateQuestObjectiveProgress(QuestObjectiveType.AreaTriggerEnter, (int)GetEntry(), 1);
if (GetTemplate().ActionSetId != 0)
player.UpdateCriteria(CriteriaType.EnterAreaTriggerWithActionSet, GetTemplate().ActionSetId);
}
DoActions(unit);
@@ -789,6 +839,9 @@ namespace Game.Entities
player.SendSysMessage(CypherStrings.DebugAreatriggerEntityLeft, GetEntry(), IsCustom(), IsStaticSpawn(), _spawnId);
player.UpdateQuestObjectiveProgress(QuestObjectiveType.AreaTriggerExit, (int)GetEntry(), 1);
if (GetTemplate().ActionSetId != 0)
player.UpdateCriteria(CriteriaType.LeaveAreaTriggerWithActionSet, GetTemplate().ActionSetId);
}
UndoActions(leavingUnit);
@@ -1344,6 +1397,7 @@ namespace Game.Entities
public bool IsCustom() { return _areaTriggerTemplate.Id.IsCustom; }
public bool IsServerSide() { return _areaTriggerTemplate.Flags.HasFlag(AreaTriggerFlag.IsServerSide); }
public bool IsStaticSpawn() { return _spawnId != 0; }
public bool HasActionSetFlag(AreaTriggerActionSetFlag flag) { return _areaTriggerTemplate.ActionSetFlags.HasFlag(flag); }
[System.Diagnostics.Conditional("DEBUG")]
void DebugVisualizePosition()