예제 #1
0
        /// <summary>
        /// Gets called whenever a player interacts with a weapon-pickup.
        /// </summary>
        /// <param name="weaponPickedUp"></param>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        public override void OnEvent(WeaponPickedUp weaponPickedUp)
        {
            //Get the player-state who interacted with the weapon-pickup.
            var playerState = weaponPickedUp.Player.GetState <IPlayer>();

            //Get the weapon-pickup-state.
            var weaponPickup = weaponPickedUp.ObjectEntity.GetState <IWeaponPickup>();

            //Get the target-weapon
            var weapon = playerState.Weapons[ConvertWeaponNameToId(weaponPickup.WeaponName)];

            //Cancel if player already has weapon equipped or the stock is empty.
            if (weapon.IsEquipped || weaponPickup.WeaponAmount == 0)
            {
                return;
            }

            //Set the data.
            weapon.IsEquipped            = true;
            weapon.EntireAmmo            = weapon.MagazineSize;
            weapon.CurrentAmmoInMagazine = weapon.MagazineSize;

            //Reduce the stock.
            weaponPickup.WeaponAmount--;

            if (!weapon.DestroyOnPickup)
            {
                return;
            }

            var destroySponge = DestroyGameObject.Create(GlobalTargets.OnlyServer, ReliabilityModes.ReliableOrdered);

            destroySponge.Entity = weaponPickedUp.ObjectEntity;
            destroySponge.Send();
        }
예제 #2
0
        public override void Interact(BoltEntity boltEntity)
        {
            var weaponPickedUp = WeaponPickedUp.Create(GlobalTargets.OnlyServer, ReliabilityModes.ReliableOrdered);

            weaponPickedUp.Player       = boltEntity;
            weaponPickedUp.WeaponType   = weaponType.ToString();
            weaponPickedUp.ObjectEntity = entity;
            weaponPickedUp.Send();
        }