muffin v7.5.13

This commit is contained in:
alydev 2026-08-22 10:25:22 +10:00
parent 911ed68baa
commit acf3e3cb18
69 changed files with 2731 additions and 1425 deletions

View file

@ -29,12 +29,28 @@ internal sealed class ItemUseModule : ICombatModule
private long _continueAt;
private bool _isWaitingToUseItem;
private bool _itemUsePending;
private long _itemUsePendingUntil;
private int _itemCountBeforeUse;
public ICombatModule? Delegate => _delegate;
public bool IsItemUseInProgress
{
get
{
if (_isWaitingToUseItem || _itemUsePending)
{
return Environment.TickCount64 < _itemUsePendingUntil;
}
return false;
}
}
public ItemUseModule(IServiceProvider serviceProvider, ICondition condition, ILogger<ItemUseModule> logger)
{
_serviceProvider = serviceProvider;
@ -62,6 +78,7 @@ internal sealed class ItemUseModule : ICombatModule
_combatData = combatData;
_isDoingRotation = true;
_continueAt = Environment.TickCount64;
_isWaitingToUseItem = false;
_itemUsePending = false;
return true;
}
@ -73,11 +90,13 @@ internal sealed class ItemUseModule : ICombatModule
if (_isDoingRotation)
{
_delegate.Stop();
_isDoingRotation = false;
_combatData = null;
_delegate = null;
_continueAt = Environment.TickCount64;
}
_isDoingRotation = false;
_isWaitingToUseItem = false;
_itemUsePending = false;
_combatData = null;
_delegate = null;
_continueAt = Environment.TickCount64;
return true;
}
@ -93,43 +112,78 @@ internal sealed class ItemUseModule : ICombatModule
}
else if (_combatData.KillEnemyDataIds.Contains(nextTarget.BaseId) || _combatData.ComplexCombatDatas.Any((ComplexCombatData x) => x.DataId == nextTarget.BaseId && (!x.NameId.HasValue || (nextTarget is ICharacter character && x.NameId == character.NameId))))
{
if (_isDoingRotation)
int inventoryItemCount = InventoryManager.Instance()->GetInventoryItemCount(_combatData.CombatItemUse.ItemId, isHq: false, checkEquipped: true, checkArmory: true, 0);
if (_itemUsePending)
{
int inventoryItemCount = InventoryManager.Instance()->GetInventoryItemCount(_combatData.CombatItemUse.ItemId, isHq: false, checkEquipped: true, checkArmory: true, 0);
if (_itemUsePending)
if (inventoryItemCount < _itemCountBeforeUse)
{
if (Environment.TickCount64 < _itemUsePendingUntil)
{
_logger.LogDebug("Item use pending; ignoring temporary inventory count={Count}", inventoryItemCount);
}
else
{
_itemUsePending = false;
}
_itemUsePending = false;
return;
}
if (!_itemUsePending && inventoryItemCount == 0)
if (_condition[ConditionFlag.Casting])
{
_itemUsePendingUntil = Environment.TickCount64 + 1000;
}
if (Environment.TickCount64 < _itemUsePendingUntil)
{
_logger.LogDebug("Item use pending; inventory count={Count}", inventoryItemCount);
return;
}
_logger.LogDebug("Item use was not observed; retrying");
_itemUsePending = false;
_isWaitingToUseItem = true;
_itemUsePendingUntil = Environment.TickCount64 + 4000;
_continueAt = Environment.TickCount64 + 1000;
}
else if (_isDoingRotation)
{
if (inventoryItemCount == 0)
{
_delegate.Update(nextTarget);
}
else if (ShouldUseItem(nextTarget))
{
_logger.LogDebug("Attempting to use item {ItemId}", _combatData.CombatItemUse.ItemId);
_itemUsePending = true;
_itemUsePendingUntil = Environment.TickCount64 + 3000;
AgentInventoryContext.Instance()->UseItem(_combatData.CombatItemUse.ItemId, InventoryType.Invalid, 0u, 0);
_continueAt = Environment.TickCount64 + 2000;
_logger.LogDebug("Pausing rotation before using item {ItemId}", _combatData.CombatItemUse.ItemId);
_isDoingRotation = false;
_isWaitingToUseItem = true;
_delegate.Stop();
_continueAt = Environment.TickCount64 + 3000;
_itemUsePendingUntil = Environment.TickCount64 + 4000;
}
else
{
_delegate.Update(nextTarget);
}
}
else if (_isWaitingToUseItem)
{
if (_condition[ConditionFlag.Casting])
{
_continueAt = Environment.TickCount64 + 500;
_itemUsePendingUntil = Environment.TickCount64 + 4000;
return;
}
if (!ShouldUseItem(nextTarget) || inventoryItemCount == 0)
{
_isWaitingToUseItem = false;
return;
}
_logger.LogDebug("Attempting to use item {ItemId}", _combatData.CombatItemUse.ItemId);
long num = AgentInventoryContext.Instance()->UseItem(_combatData.CombatItemUse.ItemId, InventoryType.Invalid, 0u, 0);
_logger.LogDebug("UseItem result: {Result}", num);
bool itemUsePending = (((ulong)num <= 1uL) ? true : false);
_itemUsePending = itemUsePending;
_isWaitingToUseItem = !_itemUsePending;
_itemCountBeforeUse = inventoryItemCount;
_itemUsePendingUntil = Environment.TickCount64 + 3000;
_continueAt = Environment.TickCount64 + (_itemUsePending ? 2000 : 500);
}
else if (_condition[ConditionFlag.Casting])
{
long num = Environment.TickCount64 + 500;
if (num > _continueAt)
long num2 = Environment.TickCount64 + 500;
if (num2 > _continueAt)
{
_continueAt = num;
_continueAt = num2;
}
}
else