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,
|
||||
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)
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,13 +6611,28 @@ 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);
|
||||
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace Game.Entities
|
||||
{
|
||||
Player _player;
|
||||
long _restTime;
|
||||
uint _innAreaTriggerId;
|
||||
InnAreaTrigger _innAreaTrigger;
|
||||
float[] _restBonus = new float[(int)RestTypes.Max];
|
||||
RestFlag _restFlagMask;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user