57 lines
2.0 KiB
C#
57 lines
2.0 KiB
C#
using System.Xml.Linq;
|
|
|
|
public class MinEventActionAmmoAccessBase : MinEventActionItemCountRandomBase
|
|
{
|
|
private bool useMag = false;
|
|
private bool useRounds = false;
|
|
private bool revert = false;
|
|
private float perc = 1;
|
|
protected override int GetCount(MinEventParams _params)
|
|
{
|
|
if (!useMag || !(_params.ItemValue.ItemClass.Actions[_params.ItemActionData.indexInEntityOfAction] is ItemActionRanged _ranged))
|
|
return base.GetCount(_params);
|
|
|
|
if (!useRounds)
|
|
return (int)(_ranged.GetMaxAmmoCount(_params.ItemActionData) * perc);
|
|
|
|
if (!revert)
|
|
return (int)((_params.ItemValue.Meta) * perc);
|
|
|
|
return (int)((_ranged.GetMaxAmmoCount(_params.ItemActionData) - _params.ItemValue.Meta) * perc);
|
|
}
|
|
|
|
public override bool CanExecute(MinEventTypes _eventType, MinEventParams _params)
|
|
{
|
|
return !_params.Self.isEntityRemote && base.CanExecute(_eventType, _params) && _params.ItemActionData is ItemActionRanged.ItemActionDataRanged && _params.ItemValue.ItemClass.Actions[_params.ItemActionData.indexInEntityOfAction] is ItemActionRanged;
|
|
}
|
|
|
|
public override bool ParseXmlAttribute(XAttribute _attribute)
|
|
{
|
|
if (base.ParseXmlAttribute(_attribute))
|
|
return true;
|
|
|
|
if (_attribute.Name.LocalName == "count" && _attribute.Value.Contains("MagazineSize"))
|
|
{
|
|
useMag = true;
|
|
string str = _attribute.Value;
|
|
if (str.StartsWith("%"))
|
|
{
|
|
useRounds = true;
|
|
str = str.Substring(1);
|
|
}
|
|
|
|
if (str.StartsWith("!"))
|
|
{
|
|
revert = true;
|
|
str = str.Substring(1);
|
|
}
|
|
|
|
string[] arr = str.Split(new char[] { '*' }, 2, System.StringSplitOptions.RemoveEmptyEntries);
|
|
if (arr.Length == 2)
|
|
return float.TryParse(arr[1], out perc);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|