Core/AreaTriggers: Add AREATRIGGER_ACTION_TAVERN

Port From (https://github.com/TrinityCore/TrinityCore/commit/8e6c7bdc5d9805fdd33bec35cfe2f7b154b4ed58)
This commit is contained in:
Hondacrx
2025-08-18 10:43:18 -04:00
parent 32d166380c
commit 8d0b667dd4
5 changed files with 79 additions and 17 deletions
@@ -14,7 +14,9 @@ namespace Framework.Constants
Cast = 0,
AddAura = 1,
Teleport = 2,
Max = 3
Tavern = 3,
Max
}
public enum AreaTriggerActionUserTypes
@@ -856,6 +856,9 @@ namespace Game.Entities
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.NumUnitsInside), _insideUnits.Count);
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.NumPlayersInside), _insideUnits.Count(guid => guid.IsPlayer()));
if (IsStaticSpawn())
SetActive(!_insideUnits.Empty());
}
public AreaTriggerTemplate GetTemplate()
@@ -1017,6 +1020,16 @@ namespace Game.Entities
}
}
break;
case AreaTriggerActionTypes.Tavern:
{
Player player = caster.ToPlayer();
if (player != null)
{
player.GetRestMgr().SetInnTrigger(new InnAreaTrigger(false));
player.GetRestMgr().SetRestFlag(RestFlag.Tavern);
}
break;
}
default:
break;
}
@@ -1031,8 +1044,21 @@ namespace Game.Entities
{
foreach (AreaTriggerAction action in GetTemplate().Actions)
{
if (action.ActionType == AreaTriggerActionTypes.Cast || action.ActionType == AreaTriggerActionTypes.AddAura)
unit.RemoveAurasDueToSpell(action.Param, GetCasterGuid());
switch (action.ActionType)
{
case AreaTriggerActionTypes.Cast:
goto case AreaTriggerActionTypes.AddAura;
case AreaTriggerActionTypes.AddAura:
unit.RemoveAurasDueToSpell(action.Param, GetCasterGuid());
break;
case AreaTriggerActionTypes.Tavern:
Player player = unit.ToPlayer();
if (player != null)
player.GetRestMgr().SetInnTrigger(null);
break;
default:
break;
}
}
}
}
+26 -9
View File
@@ -4591,7 +4591,7 @@ namespace Game.Entities
else
m_deathExpireTime = now + PlayerConst.DeathExpireStep;
}
public int CalculateCorpseReclaimDelay(bool load = false)
{
Corpse corpse = GetCorpse();
@@ -4629,7 +4629,7 @@ namespace Game.Entities
return (int)(delay * Time.InMilliseconds);
}
public void SendCorpseReclaimDelay(int delay)
{
CorpseReclaimDelay packet = new();
@@ -4875,7 +4875,8 @@ namespace Game.Entities
foundPet = true;
}
}
};
}
;
FindAndRemovePet(m_petStable.ActivePets);
FindAndRemovePet(m_petStable.StabledPets);
@@ -5562,7 +5563,8 @@ namespace Game.Entities
if (creature.HasNpcFlag2(npcFlags2))
return true;
return false;
};
}
;
if (!hasNpcFlags())
return null;
@@ -6609,12 +6611,27 @@ namespace Game.Entities
public void UpdateTavernRestingState()
{
var atEntry = CliDB.AreaTriggerStorage.LookupByKey(_restMgr.GetInnTriggerId());
InnAreaTrigger innTrigger = _restMgr.GetInnTrigger();
if (innTrigger == null)
{
if (_restMgr.HasRestFlag(RestFlag.Tavern))
_restMgr.RemoveRestFlag(RestFlag.Tavern);
if (_restMgr.HasRestFlag(RestFlag.Tavern) && (atEntry == null || !IsInAreaTrigger(atEntry)))
_restMgr.RemoveRestFlag(RestFlag.Tavern);
else if (!_restMgr.HasRestFlag(RestFlag.Tavern) && IsInAreaTrigger(atEntry))
_restMgr.SetRestFlag(RestFlag.Tavern);
return;
}
if (innTrigger.IsDBC)
{
var atEntry = CliDB.AreaTriggerStorage.LookupByKey(innTrigger.AreaTriggerEntryId);
if (_restMgr.HasRestFlag(RestFlag.Tavern) && (atEntry == null || !IsInAreaTrigger(atEntry)))
{
_restMgr.RemoveRestFlag(RestFlag.Tavern);
_restMgr.SetInnTrigger(null);
}
else if (!_restMgr.HasRestFlag(RestFlag.Tavern) && IsInAreaTrigger(atEntry))
_restMgr.SetRestFlag(RestFlag.Tavern);
}
}
public void SendSysMessage(CypherStrings str, params object[] args)
+16 -4
View File
@@ -6,7 +6,7 @@ namespace Game.Entities
{
Player _player;
long _restTime;
uint _innAreaTriggerId;
InnAreaTrigger _innAreaTrigger;
float[] _restBonus = new float[(int)RestTypes.Max];
RestFlag _restFlagMask;
@@ -111,7 +111,7 @@ namespace Game.Entities
uint rested_loss = rested_bonus;
if (restType == RestTypes.XP)
MathFunctions.AddPct(ref rested_loss, _player.GetTotalAuraModifier(AuraType.ModRestedXpConsumption));
MathFunctions.AddPct(ref rested_loss, _player.GetTotalAuraModifier(AuraType.ModRestedXpConsumption));
SetRestBonus(restType, GetRestBonus(restType) - rested_loss);
@@ -157,7 +157,19 @@ namespace Game.Entities
public float GetRestBonus(RestTypes restType) { return _restBonus[(int)restType]; }
public bool HasRestFlag(RestFlag restFlag) { return (_restFlagMask & restFlag) != 0; }
public uint GetInnTriggerId() { return _innAreaTriggerId; }
public void SetInnTriggerID(uint id) { _innAreaTriggerId = id; }
public InnAreaTrigger GetInnTrigger() { return _innAreaTrigger; }
public void SetInnTrigger(InnAreaTrigger trigger) { _innAreaTrigger = trigger; }
}
public class InnAreaTrigger
{
public bool IsDBC = true;
public uint AreaTriggerEntryId;
public InnAreaTrigger(bool isDBC, uint areaTriggerEntryId = 0)
{
IsDBC = isDBC;
AreaTriggerEntryId = areaTriggerEntryId;
}
}
}
+6 -1
View File
@@ -245,9 +245,14 @@ namespace Game
{
// set resting flag we are in the inn
if (packet.Entered)
player.GetRestMgr().SetInnTriggerID(atEntry.Id);
{
player.GetRestMgr().SetInnTrigger(new InnAreaTrigger(true, atEntry.Id));
}
else
{
player.GetRestMgr().RemoveRestFlag(RestFlag.Tavern);
player.GetRestMgr().SetInnTrigger(null);
}
if (Global.WorldMgr.IsFFAPvPRealm())
{