示例#1
0
            private void LaunchRocket(Vector3 targetPos)
            {
                var rocket = rocketType;

                if (useMixedRockets)
                {
                    if (UnityEngine.Random.Range(1, fireChance) == 1)
                    {
                        rocket = fireRocket;
                    }
                }
                var launchPos = Plane.transform.position;

                ItemDefinition    projectileItem = ItemManager.FindItemDefinition(rocket);
                ItemModProjectile component      = projectileItem.GetComponent <ItemModProjectile>();

                BaseEntity entity = GameManager.server.CreateEntity(component.projectileObject.resourcePath, launchPos, new Quaternion(), true);

                TimedExplosive   rocketExplosion  = entity.GetComponent <TimedExplosive>();
                ServerProjectile rocketProjectile = entity.GetComponent <ServerProjectile>();

                rocketProjectile.speed           = rocketSpeed;
                rocketProjectile.gravityModifier = 0;
                rocketExplosion.timerAmountMin   = 60;
                rocketExplosion.timerAmountMax   = 60;
                for (int i = 0; i < rocketExplosion.damageTypes.Count; i++)
                {
                    rocketExplosion.damageTypes[i].amount *= damageModifier;
                }

                Vector3 newDirection = (targetPos - launchPos);

                entity.SendMessage("InitializeVelocity", (newDirection));
                entity.Spawn();
            }
示例#2
0
    public void FireGunTest()
    {
        if (UnityEngine.Time.time < nextFireTime)
        {
            return;
        }
        nextFireTime = UnityEngine.Time.time + 0.25f;
        numBursted++;
        if (numBursted >= 4)
        {
            nextFireTime = UnityEngine.Time.time + 5f;
            numBursted   = 0;
        }
        Vector3 modifiedAimConeDirection = AimConeUtil.GetModifiedAimConeDirection(2f, CannonMuzzle.rotation * Vector3.forward);
        Vector3 normalized = (CannonPitch.transform.rotation * Vector3.back + base.transform.up * -1f).normalized;

        myRigidBody.AddForceAtPosition(normalized * recoilScale, CannonPitch.transform.position, ForceMode.Impulse);
        Effect.server.Run(mainCannonMuzzleFlash.resourcePath, this, StringPool.Get(CannonMuzzle.gameObject.name), Vector3.zero, Vector3.zero);
        BaseEntity baseEntity = GameManager.server.CreateEntity(mainCannonProjectile.resourcePath, CannonMuzzle.transform.position, Quaternion.LookRotation(modifiedAimConeDirection));

        if (!(baseEntity == null))
        {
            ServerProjectile component = baseEntity.GetComponent <ServerProjectile>();
            if ((bool)component)
            {
                component.InitializeVelocity(modifiedAimConeDirection * component.speed);
            }
            baseEntity.Spawn();
        }
    }
        private bool CanShowPanel(TimedExplosive explosive)
        {
            if (!(explosive?.IsValid() ?? false))
            {
                return(false);
            }

            ServerProjectile proj = explosive.GetComponent <ServerProjectile>();

            if (proj == null)
            {
                return(false);
            }

            //Rain of Fire checks
            if (proj.gravityModifier != 0f ||
                proj.speed != 25f ||
                explosive.timerAmountMin != 300 ||
                explosive.timerAmountMax != 300)
            {
                return(false);
            }

            object result = Interface.Call("MagicPanelCanShow", Name, explosive);

            if (result is bool)
            {
                return((bool)result);
            }

            return(true);
        }
        private BaseEntity CreateRocket(Vector3 startPoint, Vector3 direction, bool isFireRocket)
        {
            ItemDefinition projectileItem;

            if (isFireRocket)
            {
                projectileItem = ItemManager.FindItemDefinition("ammo.rocket.fire");
            }
            else
            {
                projectileItem = ItemManager.FindItemDefinition("ammo.rocket.basic");
            }

            ItemModProjectile component = projectileItem.GetComponent <ItemModProjectile>();
            BaseEntity        entity    = GameManager.server.CreateEntity(component.projectileObject.resourcePath, startPoint, new Quaternion(), true);

            TimedExplosive   timedExplosive   = entity.GetComponent <TimedExplosive>();
            ServerProjectile serverProjectile = entity.GetComponent <ServerProjectile>();

            serverProjectile.gravityModifier = 0;
            serverProjectile.speed           = 25;
            timedExplosive.timerAmountMin    = 300;
            timedExplosive.timerAmountMax    = 300;
            ScaleAllDamage(timedExplosive.damageTypes, configData.DamageControl.DamageMultiplier);

            serverProjectile.InitializeVelocity(direction.normalized * 25);
            entity.Spawn();
            return(entity);
        }
    public void FireGunTest()
    {
        if (UnityEngine.Time.time < this.nextFireTime)
        {
            return;
        }
        this.nextFireTime = UnityEngine.Time.time + 0.25f;
        this.numBursted++;
        if (this.numBursted >= 4)
        {
            this.nextFireTime = UnityEngine.Time.time + 5f;
            this.numBursted   = 0;
        }
        Vector3 modifiedAimConeDirection = AimConeUtil.GetModifiedAimConeDirection(2f, this.CannonMuzzle.rotation * Vector3.forward, true);
        Vector3 cannonPitch = (this.CannonPitch.transform.rotation * Vector3.back) + (base.transform.up * -1f);
        Vector3 vector3     = cannonPitch.normalized;

        this.myRigidBody.AddForceAtPosition(vector3 * this.recoilScale, this.CannonPitch.transform.position, ForceMode.Impulse);
        Effect.server.Run(this.mainCannonMuzzleFlash.resourcePath, this, StringPool.Get(this.CannonMuzzle.gameObject.name), Vector3.zero, Vector3.zero, null, false);
        BaseEntity baseEntity = GameManager.server.CreateEntity(this.mainCannonProjectile.resourcePath, this.CannonMuzzle.transform.position, Quaternion.LookRotation(modifiedAimConeDirection), true);

        if (baseEntity == null)
        {
            return;
        }
        ServerProjectile component = baseEntity.GetComponent <ServerProjectile>();

        if (component)
        {
            component.InitializeVelocity(modifiedAimConeDirection * component.speed);
        }
        baseEntity.Spawn();
    }
示例#6
0
        private BaseEntity CreateRocket(Vector3 startPoint, Vector3 direction, bool isFireRocket)
        {
            ItemDefinition projectileItem;

            if (isFireRocket)
            {
                projectileItem = GetFireRocket();
            }
            else
            {
                projectileItem = GetRocket();
            }

            ItemModProjectile component = projectileItem.GetComponent <ItemModProjectile>();
            BaseEntity        entity    = GameManager.server.CreateEntity(component.projectileObject.resourcePath, startPoint, new Quaternion(), true);

            TimedExplosive   timedExplosive   = entity.GetComponent <TimedExplosive>();
            ServerProjectile serverProjectile = entity.GetComponent <ServerProjectile>();

            serverProjectile.gravityModifier = gravityModifier;
            serverProjectile.speed           = projectileSpeed;
            timedExplosive.timerAmountMin    = detonationTime;
            timedExplosive.timerAmountMax    = detonationTime;
            ScaleAllDamage(timedExplosive.damageTypes, configData.DamageControl.DamageMultiplier);

            entity.SendMessage("InitializeVelocity", (object)(direction * 1f));
            entity.Spawn();
            return(entity);
        }
示例#7
0
        private BaseEntity CreateRocket(Vector3 startPoint, Vector3 direction, bool isFireRocket)
        {
            ItemDefinition projectileItem;

            if (isFireRocket)
            {
                projectileItem = GetFireRocket();
            }
            else
            {
                projectileItem = GetRocket();
            }

            ItemModProjectile component = projectileItem.GetComponent <ItemModProjectile>();
            BaseEntity        entity    = GameManager.server.CreateEntity(component.projectileObject.resourcePath, startPoint, new Quaternion(), true);

            TimedExplosive   timedExplosive   = entity.GetComponent <TimedExplosive>();
            ServerProjectile serverProjectile = entity.GetComponent <ServerProjectile>();

            serverProjectile.gravityModifier = gravityModifier;
            serverProjectile.speed           = projectileSpeed;
            timedExplosive.timerAmountMin    = detonationTime;
            timedExplosive.timerAmountMax    = detonationTime;
            timedExplosive.explosionRadius   = 1000f;
            timedExplosive.canStick          = true;

            entity.SendMessage("InitializeVelocity", (object)(direction * 2f));
            entity.Spawn(true);

            return(entity);
        }
示例#8
0
    public override void ServerUse(float damageModifier, Transform originOverride = null)
    {
        ItemModProjectile component = primaryMagazine.ammoType.GetComponent <ItemModProjectile>();

        if (!component)
        {
            return;
        }
        if (primaryMagazine.contents <= 0)
        {
            SignalBroadcast(Signal.DryFire);
            StartAttackCooldown(1f);
            return;
        }
        if (!component.projectileObject.Get().GetComponent <ServerProjectile>())
        {
            base.ServerUse(damageModifier, originOverride);
            return;
        }
        primaryMagazine.contents--;
        if (primaryMagazine.contents < 0)
        {
            primaryMagazine.contents = 0;
        }
        Vector3 vector   = MuzzlePoint.transform.forward;
        Vector3 position = MuzzlePoint.transform.position;
        float   num      = GetAimCone() + component.projectileSpread;

        if (num > 0f)
        {
            vector = AimConeUtil.GetModifiedAimConeDirection(num, vector);
        }
        float      num2 = 1f;
        RaycastHit hitInfo;

        if (UnityEngine.Physics.Raycast(position, vector, out hitInfo, num2, 1236478737))
        {
            num2 = hitInfo.distance - 0.1f;
        }
        BaseEntity baseEntity = GameManager.server.CreateEntity(component.projectileObject.resourcePath, position + vector * num2);

        if (!(baseEntity == null))
        {
            BasePlayer       ownerPlayer = GetOwnerPlayer();
            bool             flag        = ownerPlayer != null && ownerPlayer.IsNpc;
            ServerProjectile component2  = baseEntity.GetComponent <ServerProjectile>();
            if ((bool)component2)
            {
                component2.InitializeVelocity(vector * component2.speed);
            }
            baseEntity.SendMessage("SetDamageScale", flag ? npcDamageScale : turretDamageScale);
            baseEntity.Spawn();
            StartAttackCooldown(ScaleRepeatDelay(repeatDelay));
            SignalBroadcast(Signal.Attack, string.Empty);
            GetOwnerItem()?.LoseCondition(UnityEngine.Random.Range(1f, 2f));
        }
    }
示例#9
0
    public void FireProjectile(Vector3 origin, Vector3 direction, BaseCombatEntity target)
    {
        BaseEntity entity = GameManager.server.CreateEntity(this.projectileTest.resourcePath, origin, Quaternion.LookRotation(direction, Vector3.get_up()), true);

        if (Object.op_Equality((Object)entity, (Object)null))
        {
            return;
        }
        entity.creatorEntity = (BaseEntity)this;
        ServerProjectile component = (ServerProjectile)((Component)entity).GetComponent <ServerProjectile>();

        if (Object.op_Implicit((Object)component))
        {
            component.InitializeVelocity(Vector3.op_Addition(this.GetInheritedProjectileVelocity(), Vector3.op_Multiply(direction, component.speed)));
        }
        entity.Spawn();
    }
示例#10
0
    public void FireProjectile(Vector3 origin, Vector3 direction, BaseCombatEntity target)
    {
        BaseEntity baseEntity = GameManager.server.CreateEntity(this.projectileTest.resourcePath, origin, Quaternion.LookRotation(direction, Vector3.up), true);

        if (baseEntity == null)
        {
            return;
        }
        baseEntity.creatorEntity = this;
        ServerProjectile component = baseEntity.GetComponent <ServerProjectile>();

        if (component)
        {
            component.InitializeVelocity(this.GetInheritedProjectileVelocity() + (direction * component.speed));
        }
        baseEntity.Spawn();
    }
示例#11
0
        /**
         * Spawns a Meteor in the location specified by Vector3(location).
         */
        private void spawnMeteor(Vector3 origin)
        {
            float launchAngle  = UnityEngine.Random.Range(this.minLaunchAngle, this.maxLaunchAngle);
            float launchHeight = UnityEngine.Random.Range(this.minLaunchHeight, this.maxLaunchHeight);

            Vector3 launchDirection = (Vector3.up * -launchAngle + Vector3.right).normalized;
            Vector3 launchPosition  = origin - launchDirection * launchHeight;

            int r = UnityEngine.Random.Range(0, 3);

            ItemDefinition projectileItem;

            // Fetch rocket of type <x>:
            switch (r)
            {
            case 0:
                projectileItem = getBasicRocket();
                break;

            case 1:
                projectileItem = getHighVelocityRocket();
                break;

            case 2:
                projectileItem = getSmokeRocket();
                break;

            default:
                projectileItem = getFireRocket();
                break;
            }

            // Create the in-game "Meteor" entity:
            ItemModProjectile component = projectileItem.GetComponent <ItemModProjectile>();
            BaseEntity        entity    = GameManager.server.CreateEntity(component.projectileObject.resourcePath, launchPosition, new Quaternion(), true);

            // Set Meteor speed:
            ServerProjectile serverProjectile = entity.GetComponent <ServerProjectile>();

            serverProjectile.speed = UnityEngine.Random.Range(this.minLaunchVelocity, this.maxLaunchVelocity);

            entity.SendMessage("InitializeVelocity", (object)(launchDirection * 1.0f));
            entity.Spawn(true);
        }
    public void FireRocket()
    {
        RaycastHit raycastHit;
        string     str;

        this.numRocketsLeft--;
        this.lastRocketTime = UnityEngine.Time.realtimeSinceStartup;
        float single = 4f;
        bool  flag   = this.leftTubeFiredLast;

        this.leftTubeFiredLast = !this.leftTubeFiredLast;
        Transform transforms           = (flag ? this.helicopterBase.rocket_tube_left.transform : this.helicopterBase.rocket_tube_right.transform);
        Vector3   vector3              = transforms.position + (transforms.forward * 1f);
        Vector3   strafeTargetPosition = (this.strafe_target_position - vector3).normalized;

        if (single > 0f)
        {
            strafeTargetPosition = AimConeUtil.GetModifiedAimConeDirection(single, strafeTargetPosition, true);
        }
        if (UnityEngine.Physics.Raycast(vector3, strafeTargetPosition, out raycastHit, 1f, 1236478737))
        {
        }
        Effect.server.Run(this.helicopterBase.rocket_fire_effect.resourcePath, this.helicopterBase, StringPool.Get((flag ? "rocket_tube_left" : "rocket_tube_right")), Vector3.zero, Vector3.forward, null, true);
        GameManager gameManager = GameManager.server;

        str = (this.useNapalm ? this.rocketProjectile_Napalm.resourcePath : this.rocketProjectile.resourcePath);
        Quaternion quaternion = new Quaternion();
        BaseEntity baseEntity = gameManager.CreateEntity(str, vector3, quaternion, true);

        if (baseEntity == null)
        {
            return;
        }
        ServerProjectile component = baseEntity.GetComponent <ServerProjectile>();

        if (component)
        {
            component.InitializeVelocity(strafeTargetPosition * component.speed);
        }
        baseEntity.Spawn();
    }
示例#13
0
            private void LaunchRocket()
            {
                if (rocketsFired >= rocketOptions.Amount)
                {
                    entity.CancelInvoke(LaunchRocket);
                    return;
                }
                var rocketType = rocketOptions.Type == "Normal" ? basicRocket : fireRocket;

                if (rocketOptions.Mixed && UnityEngine.Random.Range(1, rocketOptions.FireChance) == 1)
                {
                    rocketType = fireRocket;
                }

                Vector3 launchPos = entity.transform.position;
                Vector3 newTarget = Quaternion.Euler(GetRandom(), GetRandom(), GetRandom()) * targetPos;

                BaseEntity rocket = GameManager.server.CreateEntity(rocketType, launchPos, new Quaternion(), true);

                TimedExplosive   rocketExplosion  = rocket.GetComponent <TimedExplosive>();
                ServerProjectile rocketProjectile = rocket.GetComponent <ServerProjectile>();

                rocketProjectile.speed           = rocketOptions.Speed;
                rocketProjectile.gravityModifier = 0;
                rocketExplosion.timerAmountMin   = 60;
                rocketExplosion.timerAmountMax   = 60;
                for (int i = 0; i < rocketExplosion.damageTypes.Count; i++)
                {
                    rocketExplosion.damageTypes[i].amount *= rocketOptions.Damage;
                }

                Vector3 newDirection = (newTarget - launchPos);

                rocket.SendMessage("InitializeVelocity", (newDirection));
                rocket.Spawn();
                ++rocketsFired;
            }
示例#14
0
            public void FireRocket()
            {
                RaycastHit raycastHit;
                string     str;

                this.lastRocketTime = Time.realtimeSinceStartup;
                float     single     = 4f;
                Transform transforms = this.entity.frontWheel.transform;
                Vector3   vector3    = transforms.position + (transforms.forward * 1f);

                if (single > 0f)
                {
                    strafeTargetPosition = AimConeUtil.GetModifiedAimConeDirection(single, entity.frontWheel.transform.rotation * Vector3.forward, true);
                }
                if (Physics.Raycast(vector3, strafeTargetPosition, out raycastHit, 1f, 1236478737))
                {
                }
                //Effect.server.Run(this.helicopterBase.rocket_fire_effect.resourcePath, this.helicopterBase, StringPool.Get((flag ? "rocket_tube_left" : "rocket_tube_right")), Vector3.zero, Vector3.forward, null, true);
                GameManager gameManager = GameManager.server;

                str = "assets/prefabs/npc/patrol helicopter/rocket_heli_airburst.prefab";
                Quaternion quaternion = new Quaternion();
                BaseEntity baseEntity = gameManager.CreateEntity(str, vector3, quaternion, true);

                if (baseEntity == null)
                {
                    return;
                }
                ServerProjectile component = baseEntity.GetComponent <ServerProjectile>();

                if (component)
                {
                    component.InitializeVelocity(strafeTargetPosition * component.speed);
                }
                baseEntity.Spawn();
            }
示例#15
0
    public void ThrowEgg(RPCMessage msg)
    {
        BasePlayer player = msg.player;

        if (!VerifyClientAttack(player))
        {
            SendNetworkUpdate();
        }
        else
        {
            if (!HasAmmo())
            {
                return;
            }
            UseAmmo();
            Vector3    vector  = msg.read.Vector3();
            Vector3    vector2 = msg.read.Vector3().normalized;
            bool       num     = msg.read.Bit();
            BaseEntity mounted = player.GetParentEntity();
            if (mounted == null)
            {
                mounted = player.GetMounted();
            }
            if (num)
            {
                if (mounted != null)
                {
                    vector  = mounted.transform.TransformPoint(vector);
                    vector2 = mounted.transform.TransformDirection(vector2);
                }
                else
                {
                    vector  = player.eyes.position;
                    vector2 = player.eyes.BodyForward();
                }
            }
            if (!ValidateEyePos(player, vector))
            {
                return;
            }
            float num2 = 2f;
            if (num2 > 0f)
            {
                vector2 = AimConeUtil.GetModifiedAimConeDirection(num2, vector2);
            }
            float      num3 = 1f;
            RaycastHit hitInfo;
            if (UnityEngine.Physics.Raycast(vector, vector2, out hitInfo, num3, 1236478737))
            {
                num3 = hitInfo.distance - 0.1f;
            }
            BaseEntity baseEntity = GameManager.server.CreateEntity(eggProjectile.resourcePath, vector + vector2 * num3);
            if (!(baseEntity == null))
            {
                baseEntity.creatorEntity = player;
                ServerProjectile component = baseEntity.GetComponent <ServerProjectile>();
                if ((bool)component)
                {
                    component.InitializeVelocity(GetInheritedVelocity(player) + vector2 * component.speed);
                }
                baseEntity.Spawn();
                GetOwnerItem()?.LoseCondition(UnityEngine.Random.Range(1f, 2f));
            }
        }
    }
示例#16
0
        void OnPlayerInput(BasePlayer player, InputState input)
        {
            GunshipPilot pilot;

            if (pilots.TryGetValue(player.userID, out pilot))
            {
                MiniCopter miniCopter = pilot.miniCopterRef.Get(true) as MiniCopter;

                if (!miniCopter)
                {
                    if (pilots.ContainsKey(player.userID))
                    {
                        pilots.Remove(player.userID);
                    }

                    return;
                }

                if ((input.current.buttons & (int)BUTTON.FIRE_SECONDARY) != 0)
                {
                    if (Time.time > pilot.lastSecondaryAttackTime + pilot.secondaryAttackPeriod)
                    {
                        Vector3        launchPos       = miniCopter.transform.position + (miniCopter.transform.rotation * new Vector3(-1.0f, 0, 1.0f));
                        BaseEntity     rocket          = GameManager.server.CreateEntity("assets/prefabs/ammo/rocket/rocket_basic.prefab", launchPos, new Quaternion(), true);
                        TimedExplosive rocketExplosion = rocket.GetComponent <TimedExplosive>();

                        ServerProjectile proj = rocket.GetComponent <ServerProjectile>();
                        GameObject.Destroy(proj);
                        var rocketProjectile = rocket.gameObject.AddComponent <PerforatorRocket>() as PerforatorRocket;

                        rocketProjectile.gravityModifier = 0.5f;
                        rocketProjectile.AddIgnore(miniCopter);
                        rocketProjectile.launcher = miniCopter;

                        rocketExplosion.timerAmountMin = 60;
                        rocketExplosion.timerAmountMax = 60;

                        for (int i = 0; i < rocketExplosion.damageTypes.Count; i++)
                        {
                            rocketExplosion.damageTypes[i].amount *= 100;
                        }

                        rocketProjectile.InitializeVelocity(miniCopter.transform.forward * 50 + miniCopter.rigidBody.velocity);
                        rocket.Spawn();
                        pilot.lastSecondaryAttackTime = Time.time;
                    }
                }

                if ((input.current.buttons & (int)BUTTON.FIRE_PRIMARY) != 0)
                {
                    if (Time.time > pilot.lastPrimaryAttackTime + pilot.primaryAttackPeriod)
                    {
                        pilot.lastPrimaryAttackTime = Time.time;
                        Vector3 muzzleOffset = new Vector3(0, 0.6f, 0.5f);

                        if (pilot.fireRight)
                        {
                            muzzleOffset.x += 0.65f;
                        }
                        else
                        {
                            muzzleOffset.x += -0.65f;
                        }

                        pilot.fireRight = !pilot.fireRight;

                        Vector3 forward = miniCopter.transform.forward;
                        forward = Quaternion.AngleAxis(pilot.gunElevation, miniCopter.transform.right) * forward;
                        Vector3 velocity = forward * 200;
                        velocity += UnityEngine.Random.insideUnitSphere * 2;
                        velocity += miniCopter.rigidBody.velocity;
                        Vector3 position = miniCopter.transform.position + (miniCopter.transform.rotation * muzzleOffset);

                        Effect.server.Run("assets/prefabs/npc/m2bradley/effects/maincannonattack.prefab", position);
                        projectileSimulator.FireProjectile(player, position, velocity);
                        //Effect.server.Run("assets/prefabs/weapons/ak47u/effects/attack.prefab", position);
                        //muzzleOffset.y = 0;
                        //miniCopter.rigidBody.AddForceAtPosition(-velocity.normalized * 25, miniCopter.transform.position + (miniCopter.transform.rotation * muzzleOffset), ForceMode.Impulse);
                    }
                }
            }
        }
示例#17
0
    private void SV_Launch(RPCMessage msg)
    {
        BasePlayer player = msg.player;

        if (!VerifyClientAttack(player))
        {
            SendNetworkUpdate();
            return;
        }
        if (reloadFinished && HasReloadCooldown())
        {
            AntiHack.Log(player, AntiHackType.ProjectileHack, "Reloading (" + base.ShortPrefabName + ")");
            player.stats.combat.Log(this, "reload_cooldown");
            return;
        }
        reloadStarted  = false;
        reloadFinished = false;
        if (primaryMagazine.contents <= 0)
        {
            AntiHack.Log(player, AntiHackType.ProjectileHack, "Magazine empty (" + base.ShortPrefabName + ")");
            player.stats.combat.Log(this, "magazine_empty");
            return;
        }
        primaryMagazine.contents--;
        SignalBroadcast(Signal.Attack, string.Empty, player.net.connection);
        Vector3    vector  = msg.read.Vector3();
        Vector3    vector2 = msg.read.Vector3().normalized;
        bool       num     = msg.read.Bit();
        BaseEntity mounted = player.GetParentEntity();

        if (mounted == null)
        {
            mounted = player.GetMounted();
        }
        if (num)
        {
            if (mounted != null)
            {
                vector  = mounted.transform.TransformPoint(vector);
                vector2 = mounted.transform.TransformDirection(vector2);
            }
            else
            {
                vector  = player.eyes.position;
                vector2 = player.eyes.BodyForward();
            }
        }
        if (!ValidateEyePos(player, vector))
        {
            return;
        }
        ItemModProjectile component = primaryMagazine.ammoType.GetComponent <ItemModProjectile>();

        if (!component)
        {
            AntiHack.Log(player, AntiHackType.ProjectileHack, "Item mod not found (" + base.ShortPrefabName + ")");
            player.stats.combat.Log(this, "mod_missing");
            return;
        }
        float num2 = GetAimCone() + component.projectileSpread;

        if (num2 > 0f)
        {
            vector2 = AimConeUtil.GetModifiedAimConeDirection(num2, vector2);
        }
        float      num3 = 1f;
        RaycastHit hitInfo;

        if (UnityEngine.Physics.Raycast(vector, vector2, out hitInfo, num3, 1236478737))
        {
            num3 = hitInfo.distance - 0.1f;
        }
        BaseEntity baseEntity = GameManager.server.CreateEntity(component.projectileObject.resourcePath, vector + vector2 * num3);

        if (!(baseEntity == null))
        {
            baseEntity.creatorEntity = player;
            ServerProjectile component2 = baseEntity.GetComponent <ServerProjectile>();
            if ((bool)component2)
            {
                component2.InitializeVelocity(GetInheritedVelocity(player) + vector2 * component2.speed);
            }
            baseEntity.Spawn();
            StartAttackCooldown(ScaleRepeatDelay(repeatDelay));
            Interface.CallHook("OnRocketLaunched", player, baseEntity);
            GetOwnerItem()?.LoseCondition(UnityEngine.Random.Range(1f, 2f));
        }
    }
示例#18
0
    private void SV_Launch(BaseEntity.RPCMessage msg)
    {
        BasePlayer player = msg.player;

        if (!this.VerifyClientAttack(player))
        {
            this.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        }
        else if (this.reloadFinished && this.HasReloadCooldown())
        {
            AntiHack.Log(player, AntiHackType.ProjectileHack, "Reloading (" + this.ShortPrefabName + ")");
            player.stats.combat.Log((AttackEntity)this, "reload_cooldown");
        }
        else
        {
            this.reloadStarted  = false;
            this.reloadFinished = false;
            if (this.primaryMagazine.contents <= 0)
            {
                AntiHack.Log(player, AntiHackType.ProjectileHack, "Magazine empty (" + this.ShortPrefabName + ")");
                player.stats.combat.Log((AttackEntity)this, "magazine_empty");
            }
            else
            {
                --this.primaryMagazine.contents;
                this.SignalBroadcast(BaseEntity.Signal.Attack, string.Empty, player.net.get_connection());
                Vector3    eyePos     = msg.read.Vector3();
                Vector3    vector3    = msg.read.Vector3();
                Vector3    inputVec   = ((Vector3) ref vector3).get_normalized();
                int        num1       = msg.read.Bit() ? 1 : 0;
                BaseEntity baseEntity = player.GetParentEntity();
                if (Object.op_Equality((Object)baseEntity, (Object)null))
                {
                    baseEntity = (BaseEntity)player.GetMounted();
                }
                if (num1 != 0)
                {
                    if (Object.op_Inequality((Object)baseEntity, (Object)null))
                    {
                        eyePos   = ((Component)baseEntity).get_transform().TransformPoint(eyePos);
                        inputVec = ((Component)baseEntity).get_transform().TransformDirection(inputVec);
                    }
                    else
                    {
                        eyePos   = player.eyes.position;
                        inputVec = player.eyes.BodyForward();
                    }
                }
                if (!this.ValidateEyePos(player, eyePos))
                {
                    return;
                }
                ItemModProjectile component1 = (ItemModProjectile)((Component)this.primaryMagazine.ammoType).GetComponent <ItemModProjectile>();
                if (!Object.op_Implicit((Object)component1))
                {
                    AntiHack.Log(player, AntiHackType.ProjectileHack, "Item mod not found (" + this.ShortPrefabName + ")");
                    player.stats.combat.Log((AttackEntity)this, "mod_missing");
                }
                else
                {
                    float aimCone = this.GetAimCone() + component1.projectileSpread;
                    if ((double)aimCone > 0.0)
                    {
                        inputVec = AimConeUtil.GetModifiedAimConeDirection(aimCone, inputVec, true);
                    }
                    float      num2 = 1f;
                    RaycastHit raycastHit;
                    if (Physics.Raycast(eyePos, inputVec, ref raycastHit, num2, 1236478737))
                    {
                        num2 = ((RaycastHit) ref raycastHit).get_distance() - 0.1f;
                    }
                    BaseEntity entity = GameManager.server.CreateEntity(component1.projectileObject.resourcePath, Vector3.op_Addition(eyePos, Vector3.op_Multiply(inputVec, num2)), (Quaternion)null, true);
                    if (Object.op_Equality((Object)entity, (Object)null))
                    {
                        return;
                    }
                    entity.creatorEntity = (BaseEntity)player;
                    ServerProjectile component2 = (ServerProjectile)((Component)entity).GetComponent <ServerProjectile>();
                    if (Object.op_Implicit((Object)component2))
                    {
                        component2.InitializeVelocity(Vector3.op_Addition(player.GetInheritedProjectileVelocity(), Vector3.op_Multiply(inputVec, component2.speed)));
                    }
                    entity.Spawn();
                    this.StartAttackCooldown(this.ScaleRepeatDelay(this.repeatDelay));
                    Interface.CallHook("OnRocketLaunched", (object)player, (object)entity);
                    this.GetOwnerItem()?.LoseCondition(Random.Range(1f, 2f));
                }
            }
        }
    }
示例#19
0
    private void SV_Launch(BaseEntity.RPCMessage msg)
    {
        RaycastHit raycastHit;
        BasePlayer basePlayer = msg.player;

        if (!this.VerifyClientAttack(basePlayer))
        {
            base.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
            return;
        }
        if (this.reloadFinished && base.HasReloadCooldown())
        {
            AntiHack.Log(basePlayer, AntiHackType.ProjectileHack, string.Concat("Reloading (", base.ShortPrefabName, ")"));
            basePlayer.stats.combat.Log(this, "reload_cooldown");
            return;
        }
        this.reloadStarted  = false;
        this.reloadFinished = false;
        if (this.primaryMagazine.contents <= 0)
        {
            AntiHack.Log(basePlayer, AntiHackType.ProjectileHack, string.Concat("Magazine empty (", base.ShortPrefabName, ")"));
            basePlayer.stats.combat.Log(this, "magazine_empty");
            return;
        }
        this.primaryMagazine.contents--;
        base.SignalBroadcast(BaseEntity.Signal.Attack, string.Empty, basePlayer.net.connection);
        Vector3    vector3 = msg.read.Vector3();
        Vector3    modifiedAimConeDirection = msg.read.Vector3().normalized;
        bool       flag         = msg.read.Bit();
        BaseEntity parentEntity = basePlayer.GetParentEntity();

        if (parentEntity == null)
        {
            parentEntity = basePlayer.GetMounted();
        }
        if (flag)
        {
            if (parentEntity == null)
            {
                vector3 = basePlayer.eyes.position;
                modifiedAimConeDirection = basePlayer.eyes.BodyForward();
            }
            else
            {
                vector3 = parentEntity.transform.TransformPoint(vector3);
                modifiedAimConeDirection = parentEntity.transform.TransformDirection(modifiedAimConeDirection);
            }
        }
        if (!base.ValidateEyePos(basePlayer, vector3))
        {
            return;
        }
        ItemModProjectile component = this.primaryMagazine.ammoType.GetComponent <ItemModProjectile>();

        if (!component)
        {
            AntiHack.Log(basePlayer, AntiHackType.ProjectileHack, string.Concat("Item mod not found (", base.ShortPrefabName, ")"));
            basePlayer.stats.combat.Log(this, "mod_missing");
            return;
        }
        float aimCone = this.GetAimCone() + component.projectileSpread;

        if (aimCone > 0f)
        {
            modifiedAimConeDirection = AimConeUtil.GetModifiedAimConeDirection(aimCone, modifiedAimConeDirection, true);
        }
        float single = 1f;

        if (UnityEngine.Physics.Raycast(vector3, modifiedAimConeDirection, out raycastHit, single, 1236478737))
        {
            single = raycastHit.distance - 0.1f;
        }
        GameManager gameManager = GameManager.server;
        string      str         = component.projectileObject.resourcePath;
        Vector3     vector31    = vector3 + (modifiedAimConeDirection * single);
        Quaternion  quaternion  = new Quaternion();
        BaseEntity  baseEntity  = gameManager.CreateEntity(str, vector31, quaternion, true);

        if (baseEntity == null)
        {
            return;
        }
        baseEntity.creatorEntity = basePlayer;
        ServerProjectile serverProjectile = baseEntity.GetComponent <ServerProjectile>();

        if (serverProjectile)
        {
            serverProjectile.InitializeVelocity(basePlayer.GetInheritedProjectileVelocity() + (modifiedAimConeDirection * serverProjectile.speed));
        }
        baseEntity.Spawn();
        base.StartAttackCooldown(base.ScaleRepeatDelay(this.repeatDelay));
        Interface.CallHook("OnRocketLaunched", basePlayer, baseEntity);
        Item ownerItem = base.GetOwnerItem();

        if (ownerItem == null)
        {
            return;
        }
        ownerItem.LoseCondition(UnityEngine.Random.Range(1f, 2f));
    }
示例#20
0
    public void Reload()
    {
        BaseProjectile attachedWeapon = GetAttachedWeapon();

        if (attachedWeapon == null)
        {
            return;
        }
        nextShotTime = Mathf.Max(nextShotTime, UnityEngine.Time.time + Mathf.Min(attachedWeapon.GetReloadDuration() * 0.5f, 2f));
        AmmoTypes ammoTypes = attachedWeapon.primaryMagazine.definition.ammoTypes;

        if (attachedWeapon.primaryMagazine.contents > 0)
        {
            base.inventory.AddItem(attachedWeapon.primaryMagazine.ammoType, attachedWeapon.primaryMagazine.contents, 0uL);
            attachedWeapon.primaryMagazine.contents = 0;
        }
        List <Item> obj = Facepunch.Pool.GetList <Item>();

        base.inventory.FindAmmo(obj, ammoTypes);
        if (obj.Count > 0)
        {
            Effect.server.Run(reloadEffect.resourcePath, this, StringPool.Get("WeaponAttachmentPoint"), Vector3.zero, Vector3.zero);
            totalAmmoDirty = true;
            attachedWeapon.primaryMagazine.ammoType = obj[0].info;
            int num = 0;
            while (attachedWeapon.primaryMagazine.contents < attachedWeapon.primaryMagazine.capacity && num < obj.Count)
            {
                if (obj[num].info == attachedWeapon.primaryMagazine.ammoType)
                {
                    int b = attachedWeapon.primaryMagazine.capacity - attachedWeapon.primaryMagazine.contents;
                    b = Mathf.Min(obj[num].amount, b);
                    obj[num].UseItem(b);
                    attachedWeapon.primaryMagazine.contents += b;
                }
                num++;
            }
        }
        ItemDefinition ammoType = attachedWeapon.primaryMagazine.ammoType;

        if ((bool)ammoType)
        {
            ItemModProjectile component  = ammoType.GetComponent <ItemModProjectile>();
            GameObject        gameObject = component.projectileObject.Get();
            if ((bool)gameObject)
            {
                if ((bool)gameObject.GetComponent <Projectile>())
                {
                    currentAmmoGravity  = 0f;
                    currentAmmoVelocity = component.GetMaxVelocity();
                }
                else
                {
                    ServerProjectile component2 = gameObject.GetComponent <ServerProjectile>();
                    if ((bool)component2)
                    {
                        currentAmmoGravity  = component2.gravityModifier;
                        currentAmmoVelocity = component2.speed;
                    }
                }
            }
        }
        Facepunch.Pool.FreeList(ref obj);
        attachedWeapon.SendNetworkUpdate();
    }
示例#21
0
    public void ThrowEgg(BaseEntity.RPCMessage msg)
    {
        RaycastHit raycastHit;
        BasePlayer basePlayer = msg.player;

        if (!this.VerifyClientAttack(basePlayer))
        {
            base.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
            return;
        }
        if (!this.HasAmmo())
        {
            return;
        }
        this.UseAmmo();
        Vector3    vector3 = msg.read.Vector3();
        Vector3    modifiedAimConeDirection = msg.read.Vector3().normalized;
        bool       flag         = msg.read.Bit();
        BaseEntity parentEntity = basePlayer.GetParentEntity();

        if (parentEntity == null)
        {
            parentEntity = basePlayer.GetMounted();
        }
        if (flag)
        {
            if (parentEntity == null)
            {
                vector3 = basePlayer.eyes.position;
                modifiedAimConeDirection = basePlayer.eyes.BodyForward();
            }
            else
            {
                vector3 = parentEntity.transform.TransformPoint(vector3);
                modifiedAimConeDirection = parentEntity.transform.TransformDirection(modifiedAimConeDirection);
            }
        }
        if (!base.ValidateEyePos(basePlayer, vector3))
        {
            return;
        }
        float single = 2f;

        if (single > 0f)
        {
            modifiedAimConeDirection = AimConeUtil.GetModifiedAimConeDirection(single, modifiedAimConeDirection, true);
        }
        float single1 = 1f;

        if (UnityEngine.Physics.Raycast(vector3, modifiedAimConeDirection, out raycastHit, single1, 1236478737))
        {
            single1 = raycastHit.distance - 0.1f;
        }
        GameManager gameManager = GameManager.server;
        string      str         = this.eggProjectile.resourcePath;
        Vector3     vector31    = vector3 + (modifiedAimConeDirection * single1);
        Quaternion  quaternion  = new Quaternion();
        BaseEntity  baseEntity  = gameManager.CreateEntity(str, vector31, quaternion, true);

        if (baseEntity == null)
        {
            return;
        }
        baseEntity.creatorEntity = basePlayer;
        ServerProjectile component = baseEntity.GetComponent <ServerProjectile>();

        if (component)
        {
            component.InitializeVelocity(basePlayer.GetInheritedProjectileVelocity() + (modifiedAimConeDirection * component.speed));
        }
        baseEntity.Spawn();
        Item ownerItem = base.GetOwnerItem();

        if (ownerItem == null)
        {
            return;
        }
        ownerItem.LoseCondition(UnityEngine.Random.Range(1f, 2f));
    }