77 lines
3.2 KiB
C#
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);
|
|
}
|
|
}
|
|
|