muffin v7.5.13
This commit is contained in:
parent
911ed68baa
commit
acf3e3cb18
69 changed files with 2731 additions and 1425 deletions
|
|
@ -56,19 +56,19 @@ internal sealed class BossModModule : ICombatModule, IDisposable
|
|||
if ((uint)(valueOrDefault - 3) <= 1u)
|
||||
{
|
||||
flag = true;
|
||||
goto IL_00bd;
|
||||
goto IL_00be;
|
||||
}
|
||||
}
|
||||
flag = false;
|
||||
goto IL_00bd;
|
||||
goto IL_00be;
|
||||
}
|
||||
goto IL_012e;
|
||||
IL_00bd:
|
||||
goto IL_012f;
|
||||
IL_00be:
|
||||
bool flag2 = flag;
|
||||
_logger.LogDebug("BossModModule.Start: isRanged={IsRanged}, job role={Role}", flag2, localPlayer.ClassJob.ValueNullable?.Role);
|
||||
_bossModIpc.SetRangeStrategy(BossModIpc.EPreset.Active, flag2);
|
||||
goto IL_012e;
|
||||
IL_012e:
|
||||
goto IL_012f;
|
||||
IL_012f:
|
||||
return true;
|
||||
}
|
||||
catch (IpcError exception)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue