Files
7d2dXG/Mods/0A-KFCommonUtilityLib/Scripts/Items/ItemActionRechargeable.cs
Nathaniel Cosford 062dfab2cd Patched
2025-05-30 01:04:40 +09:30

77 lines
3.2 KiB
C#

public class ItemActionRechargeable : ItemActionAltMode
{
protected string[] cvarToConsume = null;
protected string[] cvarConsumption = null;
protected string[] cvarNoConsumptionTemp = null;
public override void ReadFrom(DynamicProperties _props)
{
base.ReadFrom(_props);
string _altString = string.Empty;
_props.ParseString("Cvar_To_Consume", ref _altString);
cvarToConsume = _altString.Split(',');
_altString = string.Empty;
_props.ParseString("Cvar_Consumption", ref _altString);
cvarConsumption = _altString.Split(',');
if (cvarToConsume.Length != cvarConsumption.Length)
Log.Error("cvar to consume count does not match cvar consumption count!");
_altString = string.Empty;
_props.ParseString("Cvar_No_Consumption_Burst_Count", ref _altString);
cvarNoConsumptionTemp = _altString.Split(',');
}
public override void ExecuteAction(ItemActionData _actionData, bool _bReleased)
{
ItemActionDataAltMode _data = _actionData as ItemActionDataAltMode;
EntityAlive holdingEntity = _data.invData.holdingEntity;
ItemValue itemValue = _data.invData.itemValue;
if (!_bReleased)
{
int curAltIndex = _data.modeIndex;
if (curAltIndex >= 0)
InfiniteAmmo = altInfiniteAmmo.Length > curAltIndex ? altInfiniteAmmo[curAltIndex] : false;
else
InfiniteAmmo = originalInfiniteAmmo;
int burstCount = GetBurstCount(_actionData);
if ((_data.curBurstCount >= burstCount && burstCount != -1) || (!InfiniteAmmo && itemValue.Meta <= 0))
{
base.ExecuteAction(_actionData, _bReleased);
return;
}
if (curAltIndex >= 0 && cvarConsumption.Length > curAltIndex && !string.IsNullOrEmpty(cvarConsumption[curAltIndex]))
{
float consumption = holdingEntity.GetCVar(cvarConsumption[curAltIndex]);
if (cvarNoConsumptionTemp.Length > curAltIndex && !string.IsNullOrEmpty(cvarNoConsumptionTemp[curAltIndex]))
{
float isConsumption0 = holdingEntity.GetCVar(cvarNoConsumptionTemp[curAltIndex]);
if (isConsumption0 > 0)
{
consumption = 0;
holdingEntity.SetCVar(cvarNoConsumptionTemp[curAltIndex], --isConsumption0);
}
}
float stock = holdingEntity.GetCVar(cvarToConsume[curAltIndex]);
if (stock < consumption)
{
holdingEntity.PlayOneShot(_data.altSoundEmpty.Length >= curAltIndex ? _data.altSoundEmpty[curAltIndex] : _data.originalSoundEmpty);
return;
}
if (holdingEntity.inventory.holdingItemItemValue.PercentUsesLeft > 0f)
{
float left = stock - consumption;
holdingEntity.SetCVar(cvarToConsume[curAltIndex], left);
}
base.ExecuteAction(_actionData, _bReleased);
return;
}
}
base.ExecuteAction(_actionData, _bReleased);
}
}