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); }
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); }
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); }
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); } } }
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); }
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); } } } }
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()); }
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); }
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(); } }