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, Cast = 0,
AddAura = 1, AddAura = 1,
Teleport = 2, Teleport = 2,
Max = 3 Tavern = 3,
Max
} }
public enum AreaTriggerActionUserTypes 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.NumUnitsInside), _insideUnits.Count);
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.NumPlayersInside), _insideUnits.Count(guid => guid.IsPlayer())); SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.NumPlayersInside), _insideUnits.Count(guid => guid.IsPlayer()));
if (IsStaticSpawn())
SetActive(!_insideUnits.Empty());
} }
public AreaTriggerTemplate GetTemplate() public AreaTriggerTemplate GetTemplate()
@@ -1017,6 +1020,16 @@ namespace Game.Entities
} }
} }
break; break;
case AreaTriggerActionTypes.Tavern:
{
Player player = caster.ToPlayer();
if (player != null)
{
player.GetRestMgr().SetInnTrigger(new InnAreaTrigger(false));
player.GetRestMgr().SetRestFlag(RestFlag.Tavern);
}
break;
}
default: default:
break; break;
} }
@@ -1031,8 +1044,21 @@ namespace Game.Entities
{ {
foreach (AreaTriggerAction action in GetTemplate().Actions) foreach (AreaTriggerAction action in GetTemplate().Actions)
{ {
if (action.ActionType == AreaTriggerActionTypes.Cast || action.ActionType == AreaTriggerActionTypes.AddAura) switch (action.ActionType)
unit.RemoveAurasDueToSpell(action.Param, GetCasterGuid()); {
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;
}
} }
} }
} }
+24 -7
View File
@@ -4875,7 +4875,8 @@ namespace Game.Entities
foundPet = true; foundPet = true;
} }
} }
}; }
;
FindAndRemovePet(m_petStable.ActivePets); FindAndRemovePet(m_petStable.ActivePets);
FindAndRemovePet(m_petStable.StabledPets); FindAndRemovePet(m_petStable.StabledPets);
@@ -5562,7 +5563,8 @@ namespace Game.Entities
if (creature.HasNpcFlag2(npcFlags2)) if (creature.HasNpcFlag2(npcFlags2))
return true; return true;
return false; return false;
}; }
;
if (!hasNpcFlags()) if (!hasNpcFlags())
return null; return null;
@@ -6609,12 +6611,27 @@ namespace Game.Entities
public void UpdateTavernRestingState() 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))) return;
_restMgr.RemoveRestFlag(RestFlag.Tavern); }
else if (!_restMgr.HasRestFlag(RestFlag.Tavern) && IsInAreaTrigger(atEntry))
_restMgr.SetRestFlag(RestFlag.Tavern); 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) public void SendSysMessage(CypherStrings str, params object[] args)
+16 -4
View File
@@ -6,7 +6,7 @@ namespace Game.Entities
{ {
Player _player; Player _player;
long _restTime; long _restTime;
uint _innAreaTriggerId; InnAreaTrigger _innAreaTrigger;
float[] _restBonus = new float[(int)RestTypes.Max]; float[] _restBonus = new float[(int)RestTypes.Max];
RestFlag _restFlagMask; RestFlag _restFlagMask;
@@ -111,7 +111,7 @@ namespace Game.Entities
uint rested_loss = rested_bonus; uint rested_loss = rested_bonus;
if (restType == RestTypes.XP) 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); SetRestBonus(restType, GetRestBonus(restType) - rested_loss);
@@ -157,7 +157,19 @@ namespace Game.Entities
public float GetRestBonus(RestTypes restType) { return _restBonus[(int)restType]; } public float GetRestBonus(RestTypes restType) { return _restBonus[(int)restType]; }
public bool HasRestFlag(RestFlag restFlag) { return (_restFlagMask & restFlag) != 0; } public bool HasRestFlag(RestFlag restFlag) { return (_restFlagMask & restFlag) != 0; }
public uint GetInnTriggerId() { return _innAreaTriggerId; } public InnAreaTrigger GetInnTrigger() { return _innAreaTrigger; }
public void SetInnTriggerID(uint id) { _innAreaTriggerId = id; } 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 // set resting flag we are in the inn
if (packet.Entered) if (packet.Entered)
player.GetRestMgr().SetInnTriggerID(atEntry.Id); {
player.GetRestMgr().SetInnTrigger(new InnAreaTrigger(true, atEntry.Id));
}
else else
{
player.GetRestMgr().RemoveRestFlag(RestFlag.Tavern); player.GetRestMgr().RemoveRestFlag(RestFlag.Tavern);
player.GetRestMgr().SetInnTrigger(null);
}
if (Global.WorldMgr.IsFFAPvPRealm()) if (Global.WorldMgr.IsFFAPvPRealm())
{ {