65 lines
2.4 KiB
C#
65 lines
2.4 KiB
C#
using System.Xml.Linq;
|
|
|
|
public class MinEventActionSetAmmoOnWeaponLabel : MinEventActionRemoteHoldingBase
|
|
{
|
|
private int slot = 0;
|
|
private bool maxAmmo = false;
|
|
private bool useHoldingItemValue = false;
|
|
private string[] wrap;
|
|
private bool usePattern = false;
|
|
public override bool ParseXmlAttribute(XAttribute _attribute)
|
|
{
|
|
bool flag = base.ParseXmlAttribute(_attribute);
|
|
if (!flag)
|
|
{
|
|
flag = true;
|
|
string name = _attribute.Name.LocalName;
|
|
switch (name)
|
|
{
|
|
case "slot":
|
|
slot = int.Parse(_attribute.Value);
|
|
break;
|
|
case "pattern":
|
|
string str = _attribute.Value;
|
|
wrap = str.Split(new string[] { "[ammo]" }, System.StringSplitOptions.None);
|
|
usePattern = true;
|
|
break;
|
|
case "max_ammo":
|
|
maxAmmo = bool.Parse(_attribute.Value);
|
|
break;
|
|
default:
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return flag;
|
|
}
|
|
|
|
public override bool CanExecute(MinEventTypes _eventType, MinEventParams _params)
|
|
{
|
|
//somehow when onSelfEquipStart is fired, holding item value is not successfully updated in MinEventParams
|
|
useHoldingItemValue = _eventType == MinEventTypes.onSelfEquipStart;
|
|
//consume_ammo = _eventType == MinEventTypes.onSelfRangedBurstShot;
|
|
return base.CanExecute(_eventType, _params);
|
|
}
|
|
|
|
public override void Execute(MinEventParams _params)
|
|
{
|
|
int meta;
|
|
var inv = _params.Self.inventory;
|
|
var value = useHoldingItemValue ? inv.holdingItemItemValue : _params.ItemValue;
|
|
if (!maxAmmo)
|
|
meta = value.Meta;
|
|
else
|
|
meta = (int)EffectManager.GetValue(PassiveEffects.MagazineSize, value, inv.GetHoldingGun().BulletsPerMagazine, _params.Self);
|
|
string str = usePattern ? string.Join(meta.ToString(), wrap) : meta.ToString();
|
|
//int num = consume_ammo ? meta - 1 : meta;
|
|
if (isRemoteHolding || localOnly)
|
|
NetPackageSyncWeaponLabelText.SetWeaponLabelText(_params.Self, slot, str);
|
|
else if (!_params.Self.isEntityRemote)
|
|
NetPackageSyncWeaponLabelText.NetSyncSetWeaponLabelText(_params.Self, slot, str);
|
|
}
|
|
}
|
|
|