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