mirror of
https://github.com/ACEmulator/ACE
synced 2026-08-17 12:26:06 -04:00
* Switch Lifespan to RealTime instead of GameTime * Update WorldObject_Tick.cs * Update WorldObject_Tick.cs
67 lines
2.3 KiB
C#
67 lines
2.3 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
using ACE.Entity.Enum;
|
|
using ACE.Server.Network.GameMessages.Messages;
|
|
|
|
namespace ACE.Server.WorldObjects
|
|
{
|
|
partial class Container
|
|
{
|
|
public override void Heartbeat(double currentUnixTime)
|
|
{
|
|
// TODO: fix bug for landblock containers w/ no heartbeat
|
|
Inventory_Tick(this);
|
|
|
|
foreach (var subcontainer in Inventory.Values.OfType<Container>())
|
|
subcontainer.Inventory_Tick(this);
|
|
|
|
// for landblock containers
|
|
if (IsOpen && CurrentLandblock != null)
|
|
{
|
|
var viewer = CurrentLandblock.GetObject(Viewer) as Player;
|
|
if (viewer == null)
|
|
{
|
|
Close(null);
|
|
return;
|
|
}
|
|
var withinUseRadius = CurrentLandblock.WithinUseRadius(viewer, Guid, out var targetValid);
|
|
if (!withinUseRadius)
|
|
{
|
|
Close(viewer);
|
|
return;
|
|
}
|
|
}
|
|
base.Heartbeat(currentUnixTime);
|
|
}
|
|
|
|
public void Inventory_Tick(Container rootOwner)
|
|
{
|
|
var expireItems = new List<WorldObject>();
|
|
|
|
// added where clause
|
|
foreach (var wo in Inventory.Values.Where(i => i.EnchantmentManager.HasEnchantments || i.Lifespan.HasValue))
|
|
{
|
|
// FIXME: wo.NextHeartbeatTime is double.MaxValue here
|
|
//if (wo.NextHeartbeatTime <= currentUnixTime)
|
|
//wo.Heartbeat(currentUnixTime);
|
|
|
|
// just go by parent heartbeats, only for enchantments?
|
|
if (wo.EnchantmentManager.HasEnchantments)
|
|
wo.EnchantmentManager.HeartBeat(CachedHeartbeatInterval);
|
|
|
|
if (wo.IsLifespanSpent)
|
|
expireItems.Add(wo);
|
|
}
|
|
|
|
// delete items when RemainingLifespan <= 0
|
|
foreach (var expireItem in expireItems)
|
|
{
|
|
expireItem.DeleteObject(rootOwner);
|
|
|
|
if (rootOwner is Player player)
|
|
player.Session.Network.EnqueueSend(new GameMessageSystemChat($"Its lifespan finished, your {expireItem.Name} crumbles to dust.", ChatMessageType.Broadcast));
|
|
}
|
|
}
|
|
}
|
|
}
|