Files
2026-09-19 14:39:03 +01:00

132 lines
4.5 KiB
C#

using System;
using System.Reflection;
using static MonopolyPokerHelper.LoggerHelper;
namespace MonopolyPokerHelper;
internal static class FreeDailyCurrencyHandler
{
// FreeBonusManager
private static Type _freeBonusMgrType;
private static PropertyInfo _freeBonusInstance;
private static PropertyInfo _canClaimFreeBonus;
private static MethodInfo _collectBonus;
public static bool IsResolved { get; private set; }
public static void ResolveReflection()
{
try
{
if (IsResolved)
{
LogInfo("FreeDailyCurrencyHandler reflection already resolved.");
return;
}
const BindingFlags all = BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.Static;
_freeBonusMgrType = ReflectionHelper.FindType("FreeBonusManager");
if (_freeBonusMgrType != null)
{
_freeBonusInstance = _freeBonusMgrType.GetProperty("Instance", all)
?? _freeBonusMgrType.BaseType?.GetProperty("Instance", all);
_canClaimFreeBonus = _freeBonusMgrType.GetProperty("CanClaimFreeBonus", all);
_collectBonus = _freeBonusMgrType.GetMethod("CollectBonus", all);
LogInfo($"FreeBonusManager: found={_freeBonusMgrType != null} " +
$"instance={_freeBonusInstance != null} " +
$"canClaim={_canClaimFreeBonus != null} " +
$"collect={_collectBonus != null}");
IsResolved = true;
}
else
{
LogError("FreeBonusManager type not found!");
throw new TypeLoadException("FreeDailyCurrencyHandler failed to resolve required type 'FreeBonusManager'.");
}
}
catch (Exception ex)
{
LogError($"Failed to resolve FreeBonusManager reflection: {ex}");
}
}
public static void Update()
{
if (!IsResolved) return;
TryCollectFreeBonus(0, "Chips");
TryCollectFreeBonus(1, "M-Money");
}
private static void TryCollectFreeBonus(int channel, string label)
{
try
{
if (_freeBonusMgrType == null || _freeBonusInstance == null)
{
throw new InvalidOperationException($"FreeBonusManager type or instance property not found, cannot claim free {label}.");
}
var instance = _freeBonusInstance.GetValue(null);
if (instance == null) { LogError($"FreeBonusManager instance is null"); return; }
var canClaim = _canClaimFreeBonus?.GetValue(instance);
if (canClaim == null) { LogError($"canClaimFreeBonus instance is null") ; return; }
bool canClaimChannel;
if (canClaim is bool[] boolArr)
{
if (channel >= boolArr.Length) return;
canClaimChannel = boolArr[channel];
}
else
{
var getMethod = canClaim.GetType().GetMethod("get_Item")
?? canClaim.GetType().GetMethod("Get");
if (getMethod != null)
{
var result = getMethod.Invoke(canClaim, new object[] { channel });
canClaimChannel = Convert.ToBoolean(result);
}
else
{
var indexer = canClaim.GetType().GetProperty("Item");
if (indexer != null)
{
canClaimChannel = Convert.ToBoolean(indexer.GetValue(canClaim, new object[] { channel }));
}
else
{
LogError($"Could not read CanClaimFreeBonus[{channel}]");
return;
}
}
}
if (!canClaimChannel)
{
LogDebug($"Free {label} not available (already claimed or on cooldown).");
return;
}
_collectBonus.Invoke(instance, new object[] { channel });
LogInfo($">>> Claimed free {label} (channel {channel})!");
}
catch (Exception ex)
{
LogError($"Error collecting free {label}: {ex.Message}");
}
}
public static void Reset()
{
//_chipsClaimed = false;
//_mMoneyClaimed = false;
}
}