Core/AreaTriggers: Add AREATRIGGER_ACTION_TAVERN
Port From (https://github.com/TrinityCore/TrinityCore/commit/8e6c7bdc5d9805fdd33bec35cfe2f7b154b4ed58)
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user