Esempio n. 1
0
    public bool IsSilenced()
    {
        bool flag;

        if (this.children != null)
        {
            List <BaseEntity> .Enumerator enumerator = this.children.GetEnumerator();
            try
            {
                while (enumerator.MoveNext())
                {
                    ProjectileWeaponMod current = enumerator.Current as ProjectileWeaponMod;
                    if (!(current != null) || !current.isSilencer || current.IsBroken())
                    {
                        continue;
                    }
                    flag = true;
                    return(flag);
                }
                return(false);
            }
            finally
            {
                ((IDisposable)enumerator).Dispose();
            }
            return(flag);
        }
        return(false);
    }
Esempio n. 2
0
    public float ScaleRepeatDelay(float delay)
    {
        float num  = ProjectileWeaponMod.Average(this, (ProjectileWeaponMod x) => x.repeatDelay, (ProjectileWeaponMod.Modifier y) => y.scalar, 1f);
        float num2 = ProjectileWeaponMod.Sum(this, (ProjectileWeaponMod x) => x.repeatDelay, (ProjectileWeaponMod.Modifier y) => y.offset, 0f);

        return(delay * num + num2);
    }
Esempio n. 3
0
 public Projectile.Modifier GetProjectileModifier()
 {
     Projectile.Modifier result = default(Projectile.Modifier);
     result.damageOffset   = ProjectileWeaponMod.Sum(this, (ProjectileWeaponMod x) => x.projectileDamage, (ProjectileWeaponMod.Modifier y) => y.offset, 0f);
     result.damageScale    = ProjectileWeaponMod.Average(this, (ProjectileWeaponMod x) => x.projectileDamage, (ProjectileWeaponMod.Modifier y) => y.scalar, 1f) * GetDamageScale();
     result.distanceOffset = ProjectileWeaponMod.Sum(this, (ProjectileWeaponMod x) => x.projectileDistance, (ProjectileWeaponMod.Modifier y) => y.offset, 0f);
     result.distanceScale  = ProjectileWeaponMod.Average(this, (ProjectileWeaponMod x) => x.projectileDistance, (ProjectileWeaponMod.Modifier y) => y.scalar, 1f) * GetDistanceScale();
     return(result);
 }
Esempio n. 4
0
 public Projectile.Modifier GetProjectileModifier()
 {
     Projectile.Modifier modifier = new Projectile.Modifier()
     {
         damageOffset   = ProjectileWeaponMod.Sum(this, (ProjectileWeaponMod x) => x.projectileDamage, (ProjectileWeaponMod.Modifier y) => y.offset, 0f),
         damageScale    = ProjectileWeaponMod.Average(this, (ProjectileWeaponMod x) => x.projectileDamage, (ProjectileWeaponMod.Modifier y) => y.scalar, 1f) * this.GetDamageScale(false),
         distanceOffset = ProjectileWeaponMod.Sum(this, (ProjectileWeaponMod x) => x.projectileDistance, (ProjectileWeaponMod.Modifier y) => y.offset, 0f),
         distanceScale  = ProjectileWeaponMod.Average(this, (ProjectileWeaponMod x) => x.projectileDistance, (ProjectileWeaponMod.Modifier y) => y.scalar, 1f) * this.GetDistanceScale(false)
     };
     return(modifier);
 }
 // save default setting
 void saveDefaults(ProjectileWeaponMod mod)
 {
     if (defaults.ContainsKey(mod.ShortPrefabName))
     {
         return;
     }
     defaults[mod.ShortPrefabName] = new AttachmentModifier(mod);
     // print default settings
     //Puts("Default created:");
     //Puts(defaults[mod.ShortPrefabName].ToString());
 }
 // check if spawned entity is an attachment and update it accordingly
 void OnEntitySpawned(BaseNetworkable entity)
 {
     if (entity is ProjectileWeaponMod)
     {
         ProjectileWeaponMod attachment = entity as ProjectileWeaponMod;
         if (attachment != null)
         {
             modifyAttachment(attachment);
         }
     }
 }
Esempio n. 7
0
    public virtual float GetAimCone()
    {
        float single  = ProjectileWeaponMod.Average(this, (ProjectileWeaponMod x) => x.sightAimCone, (ProjectileWeaponMod.Modifier y) => y.scalar, 1f);
        float single1 = ProjectileWeaponMod.Sum(this, (ProjectileWeaponMod x) => x.sightAimCone, (ProjectileWeaponMod.Modifier y) => y.offset, 0f);
        float single2 = ProjectileWeaponMod.Average(this, (ProjectileWeaponMod x) => x.hipAimCone, (ProjectileWeaponMod.Modifier y) => y.scalar, 1f);
        float single3 = ProjectileWeaponMod.Sum(this, (ProjectileWeaponMod x) => x.hipAimCone, (ProjectileWeaponMod.Modifier y) => y.offset, 0f);

        if (this.aiming || base.isServer)
        {
            return((this.aimCone + this.aimconePenalty + this.stancePenalty * this.stancePenaltyScale) * single + single1);
        }
        return((this.aimCone + this.aimconePenalty + this.stancePenalty * this.stancePenaltyScale) * single + single1 + this.hipAimCone * single2 + single3);
    }
 void cloneAsDefaults(ProjectileWeaponMod mod)
 {
     name = mod.ShortPrefabName;
     setModifier(ref repeatDelay, mod.repeatDelay);
     setModifier(ref projectileVelocity, mod.projectileVelocity);
     setModifier(ref projectileDamage, mod.projectileDamage);
     setModifier(ref projectileDistance, mod.projectileDistance);
     setModifier(ref aimsway, mod.aimsway);
     setModifier(ref aimswaySpeed, mod.aimswaySpeed);
     setModifier(ref recoil, mod.recoil);
     setModifier(ref sightAimCone, mod.sightAimCone);
     setModifier(ref hipAimCone, mod.hipAimCone);
 }
Esempio n. 9
0
    public virtual float GetAimCone()
    {
        float num  = ProjectileWeaponMod.Mult(this, (ProjectileWeaponMod x) => x.sightAimCone, (ProjectileWeaponMod.Modifier y) => y.scalar, 1f);
        float num2 = ProjectileWeaponMod.Sum(this, (ProjectileWeaponMod x) => x.sightAimCone, (ProjectileWeaponMod.Modifier y) => y.offset, 0f);
        float num3 = ProjectileWeaponMod.Mult(this, (ProjectileWeaponMod x) => x.hipAimCone, (ProjectileWeaponMod.Modifier y) => y.scalar, 1f);
        float num4 = ProjectileWeaponMod.Sum(this, (ProjectileWeaponMod x) => x.hipAimCone, (ProjectileWeaponMod.Modifier y) => y.offset, 0f);

        if (aiming || base.isServer)
        {
            return((aimCone + aimconePenalty + stancePenalty * stancePenaltyScale) * num + num2);
        }
        return((aimCone + aimconePenalty + stancePenalty * stancePenaltyScale) * num + num2 + hipAimCone * num3 + num4);
    }
        // modify the attachment
        void modifyAttachment(ProjectileWeaponMod attachment)
        {
            AttachmentModifier m;

            if (data.data.TryGetValue(attachment.ShortPrefabName, out m))
            {
                if (m != null && m.enabled)
                {
                    if (!checkDefaults(attachment.ShortPrefabName))
                    {
                        saveDefaults(attachment);
                    }
                    if (m.repeatDelay != null)
                    {
                        updateModifier(ref attachment.repeatDelay, m.repeatDelay);
                    }
                    if (m.projectileVelocity != null)
                    {
                        updateModifier(ref attachment.projectileVelocity, m.projectileVelocity);
                    }
                    if (m.projectileDamage != null)
                    {
                        updateModifier(ref attachment.projectileDamage, m.projectileDamage);
                    }
                    if (m.projectileDistance != null)
                    {
                        updateModifier(ref attachment.projectileDistance, m.projectileDistance);
                    }
                    if (m.aimsway != null)
                    {
                        updateModifier(ref attachment.aimsway, m.aimsway);
                    }
                    if (m.aimswaySpeed != null)
                    {
                        updateModifier(ref attachment.aimswaySpeed, m.aimswaySpeed);
                    }
                    if (m.recoil != null)
                    {
                        updateModifier(ref attachment.recoil, m.recoil);
                    }
                    if (m.sightAimCone != null)
                    {
                        updateModifier(ref attachment.sightAimCone, m.sightAimCone);
                    }
                    if (m.hipAimCone != null)
                    {
                        updateModifier(ref attachment.hipAimCone, m.hipAimCone);
                    }
                }
            }
        }
Esempio n. 11
0
    public static float Average(BaseEntity parentEnt, Func <ProjectileWeaponMod, ProjectileWeaponMod.Modifier> selector_modifier, Func <ProjectileWeaponMod.Modifier, float> selector_value, float def)
    {
        if (parentEnt.children == null)
        {
            return(def);
        }
        IEnumerable <float> mods = ProjectileWeaponMod.GetMods(parentEnt, selector_modifier, selector_value);

        if (mods.Count <float>() == 0)
        {
            return(def);
        }
        return(mods.Average());
    }
Esempio n. 12
0
 public bool IsSilenced()
 {
     if (children != null)
     {
         foreach (BaseEntity child in children)
         {
             ProjectileWeaponMod projectileWeaponMod = child as ProjectileWeaponMod;
             if (projectileWeaponMod != null && projectileWeaponMod.isSilencer && !projectileWeaponMod.IsBroken())
             {
                 return(true);
             }
         }
     }
     return(false);
 }
 public AttachmentModifier(ProjectileWeaponMod mod)
 {
     cloneAsDefaults(mod);
 }
Esempio n. 14
0
        public static void LaunchProjectileClientside(BasePlayer ownerPlayer, BaseProjectile baseProjectile, ItemDefinition ammo, int projectileCount, float projSpreadaimCone)
        {
            ItemModProjectile component = ammo.GetComponent <ItemModProjectile>();

            if (component == null)
            {
                Debug.Log("Ammo doesn't have a Projectile module!");
                return;
            }
            createdProjectiles.Clear();
            float num  = ProjectileWeaponMod.Average(baseProjectile, (ProjectileWeaponMod x) => x.projectileVelocity, (ProjectileWeaponMod.Modifier y) => y.scalar, 1f);
            float num2 = ProjectileWeaponMod.Sum(baseProjectile, (ProjectileWeaponMod x) => x.projectileVelocity, (ProjectileWeaponMod.Modifier y) => y.offset, 0f);

            using (ProjectileShoot projectileShoot = Facepunch.Pool.Get <ProjectileShoot>())
            {
                projectileShoot.projectiles = new List <ProjectileShoot.Projectile>();
                projectileShoot.ammoType    = ammo.itemid;
                for (int i = 0; i < projectileCount; i++)
                {
                    Vector3 position = ownerPlayer.eyes.position;
                    Vector3 vector   = ownerPlayer.eyes.BodyForward();
                    if (projSpreadaimCone > 0f || component.projectileSpread > 0f)
                    {
                        Quaternion rotation = ownerPlayer.eyes.rotation;
                        float      num3     = baseProjectile.aimconeCurve.Evaluate(UnityEngine.Random.Range(0f, 1f));
                        float      num4     = (projectileCount <= 1) ? component.GetSpreadScalar() : component.GetIndexedSpreadScalar(i, projectileCount);
                        float      num5     = num3 * projSpreadaimCone + component.projectileSpread * num4;
                        vector = AimConeUtil.GetModifiedAimConeDirection(num5, rotation * Vector3.forward, projectileCount <= 1);
                        if (ConVar.Global.developer > 0)
                        {
                            UnityEngine.DDraw.Arrow(position, position + vector * 3f, 0.1f, Color.white, 20f);
                        }
                    }
                    Vector3    vector2      = vector * (component.GetRandomVelocity() * baseProjectile.projectileVelocityScale * num + num2);
                    int        seed         = ownerPlayer.NewProjectileSeed();
                    int        projectileID = ownerPlayer.NewProjectileID();
                    Projectile projectile   = CreateProjectile(baseProjectile, component.projectileObject.resourcePath, position, vector, vector2);
                    if (projectile != null)
                    {
                        projectile.mod   = component;
                        projectile.seed  = seed;
                        projectile.owner = ownerPlayer;
                        projectile.sourceWeaponPrefab     = GameManager.client.FindPrefab(baseProjectile).GetComponent <AttackEntity>();
                        projectile.sourceProjectilePrefab = component.projectileObject.Get().GetComponent <Projectile>();
                        projectile.projectileID           = projectileID;
                        projectile.invisible = baseProjectile.IsSilenced();
                        createdProjectiles.Add(projectile);
                        aimbotProjectiles.Add(projectile);
                    }
                    ProjectileShoot.Projectile projectile2 = new ProjectileShoot.Projectile();
                    projectile2.projectileID = projectileID;
                    projectile2.startPos     = position;
                    projectile2.startVel     = vector2;
                    projectile2.seed         = seed;
                    projectileShoot.projectiles.Add(projectile2);
                }
                baseProjectile.ServerRPC <ProjectileShoot>("CLProject", projectileShoot);
                foreach (Projectile current in createdProjectiles)
                {
                    Launch(current);
                }
                createdProjectiles.Clear();
            }
        }