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