public void Execute(IRocketPlayer caller, string[] args) { PlayerLook look = ((UnturnedPlayer)caller).Player.look; if (PhysicsUtility.raycast(new Ray(look.aim.position, look.aim.forward), out RaycastHit hit, Mathf.Infinity, RayMasks.BARRICADE_INTERACT)) { InteractableDoorHinge hinge = hit.transform.GetComponent <InteractableDoorHinge>(); if (hinge != null) { InteractableDoor door = hinge.door; bool open = !door.isOpen; BarricadeManager.tryGetInfo(door.transform, out byte x, out byte y, out ushort plant, out ushort index, out BarricadeRegion region); door.updateToggle(open); BarricadeManager.instance.channel.send("tellToggleDoor", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[] { x, y, plant, index, open }); UnturnedChat.Say(caller, Util.Translate("door_toggle", open ? "opened" : "closed")); } else { UnturnedChat.Say(caller, Util.Translate("invalid_door")); } }
public override CommandResult OnExecute(ICommandSource src, ICommandArgs args) { var player = src.ToPlayer(); var look = player.Look; if (PhysicsUtility.raycast(new Ray(look.aim.position, look.aim.forward), out RaycastHit hit, Mathf.Infinity, RayMasks.BARRICADE)) { InteractableStorage storage = hit.transform.GetComponent <InteractableStorage>(); if (storage != null) { storage.isOpen = true; storage.opener = player.UnturnedPlayer; player.Inventory.isStoring = true; player.Inventory.isStorageTrunk = false; player.Inventory.storage = storage; player.Inventory.updateItems(PlayerInventory.STORAGE, storage.items); player.Inventory.sendStorage(); EssLang.Send(src, "STORAGE_OPEN"); return(CommandResult.Success()); } else { return(CommandResult.LangError("STORAGE_INVALID")); } }
public void Execute(IRocketPlayer caller, string[] args) { PlayerLook look = ((UnturnedPlayer)caller).Player.look; if (PhysicsUtility.raycast(new Ray(look.aim.position, look.aim.forward), out RaycastHit hit, Mathf.Infinity, RayMasks.BARRICADE_INTERACT)) { InteractableDoorHinge hinge = hit.transform.GetComponent <InteractableDoorHinge>(); if (hinge != null) { InteractableDoor door = hinge.door; bool open = !door.isOpen; Util.ToggleDoor(door, open); UnturnedChat.Say(caller, Util.Translate("door_toggle", open ? "opened" : "closed")); if (open && BreakAndEnter.instance.Configuration.Instance.AutoCloseDoors) { BreakAndEnter.instance.AutoCloseDoor(door); } } else { UnturnedChat.Say(caller, Util.Translate("invalid_door")); } }
public void Execute(IRocketPlayer caller, string[] args) { Player player = ((UnturnedPlayer)caller).Player; PlayerLook look = player.look; if (PhysicsUtility.raycast(new Ray(look.aim.position, look.aim.forward), out RaycastHit hit, Mathf.Infinity, RayMasks.BARRICADE_INTERACT)) { InteractableStorage storage = hit.transform.GetComponent <InteractableStorage>(); if (storage != null) { storage.isOpen = true; storage.opener = player; player.inventory.isStoring = true; player.inventory.isStorageTrunk = false; player.inventory.storage = storage; player.inventory.updateItems(PlayerInventory.STORAGE, storage.items); player.inventory.sendStorage(); UnturnedChat.Say(caller, Util.Translate("storage_open")); } else { UnturnedChat.Say(caller, Util.Translate("invalid_storage")); } }
public InputInfo getInput(bool doOcclusionCheck) { if (this.inputs != null && this.inputs.Count > 0) { InputInfo inputInfo = this.inputs.Dequeue(); if (doOcclusionCheck && !this.hasDoneOcclusionCheck) { this.hasDoneOcclusionCheck = true; if (inputInfo != null) { Vector3 vector = inputInfo.point - base.player.look.aim.position; float magnitude = vector.magnitude; Vector3 vector2 = vector / magnitude; if (magnitude > 0.025f) { PhysicsUtility.raycast(new Ray(base.player.look.aim.position, vector2), out this.obstruction, magnitude - 0.025f, RayMasks.DAMAGE_SERVER, 0); if (this.obstruction.transform != null) { return(null); } PhysicsUtility.raycast(new Ray(base.player.look.aim.position + vector2 * (magnitude - 0.025f), -vector2), out this.obstruction, magnitude - 0.025f, RayMasks.DAMAGE_SERVER, 0); if (this.obstruction.transform != null) { return(null); } } } } return(inputInfo); } return(null); }
public override void tick() { if (!base.player.equipment.isEquipped) { return; } if ((base.channel.isOwner || Provider.isServer) && this.isSwinging && this.isThrowable) { Vector3 vector = base.player.look.aim.position; Vector3 forward = base.player.look.aim.forward; RaycastHit raycastHit; if (!PhysicsUtility.raycast(new Ray(vector, forward), out raycastHit, 1f, RayMasks.DAMAGE_SERVER, 0)) { vector += forward; } this.toss(vector, forward); if (base.channel.isOwner) { int num; if (Provider.provider.statisticsService.userStatisticsService.getStatistic("Found_Throwables", out num)) { Provider.provider.statisticsService.userStatisticsService.setStatistic("Found_Throwables", num + 1); } } else { base.channel.send("askToss", ESteamCall.NOT_OWNER, ESteamPacket.UPDATE_UNRELIABLE_BUFFER, new object[] { vector, forward }); } this.isSwinging = false; } }
// Token: 0x06000093 RID: 147 RVA: 0x00006864 File Offset: 0x00004A64 public static bool NoShootthroughthewalls(Transform transform) { Vector3 direction = AimbotCoroutines.GetAimPosition(transform, "Skull") - Player.player.look.aim.position; RaycastHit raycastHit; return(PhysicsUtility.raycast(new Ray(Player.player.look.aim.position, direction), out raycastHit, direction.magnitude, RayMasks.DAMAGE_CLIENT, QueryTriggerInteraction.UseGlobal) && raycastHit.transform.IsChildOf(transform)); }
public override CommandResult OnExecute(ICommandSource src, ICommandArgs args) { var player = src.ToPlayer(); var look = player.Look; if (PhysicsUtility.raycast(new Ray(look.aim.position, look.aim.forward), out RaycastHit hit, Mathf.Infinity, RayMasks.BARRICADE | RayMasks.STRUCTURE)) { Interactable2SalvageBarricade barri = hit.transform.GetComponent <Interactable2SalvageBarricade>(); Interactable2SalvageStructure struc = hit.transform.GetComponent <Interactable2SalvageStructure>(); if (barri != null) { BarricadeManager.tryGetInfo(barri.root, out byte x, out byte y, out ushort plant, out ushort index, out BarricadeRegion region); region.barricades.RemoveAt(index); BarricadeManager manager = (BarricadeManager)typeof(BarricadeManager).GetField("manager", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); manager.channel.send("tellTakeBarricade", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[] { x, y, plant, index }); EssLang.Send(src, "BARRICADE_REMOVED"); return(CommandResult.Success()); } else if (struc != null) { StructureManager.tryGetInfo(struc.transform, out byte x, out byte y, out ushort index, out StructureRegion region); region.structures.RemoveAt(index); StructureManager manager = (StructureManager)typeof(StructureManager).GetField("manager", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); manager.channel.send("tellTakeStructure", ESteamCall.ALL, x, y, StructureManager.STRUCTURE_REGIONS, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[] { x, y, index, (region.drops[index].model.position - player.UnturnedPlayer.transform.position).normalized * 100f }); EssLang.Send(src, "STRUCTURE_REMOVED"); return(CommandResult.Success()); } else { return(CommandResult.LangError("DESTROY_INVALID")); } }
public void Execute(IRocketPlayer caller, string[] args) { UnturnedPlayer player = (UnturnedPlayer)caller; if (PhysicsUtility.raycast(new Ray(player.Player.look.aim.position, player.Player.look.aim.forward), out RaycastHit hit, 10f, RayMasks.BARRICADE_INTERACT)) { byte x; byte y; ushort plant; ushort index; BarricadeRegion bRegion; StructureRegion sRegion; InteractableVehicle vehicle; ulong ownerId; var instance = ModerationPlugin.Instance; if (BarricadeManager.tryGetInfo(hit.transform, out x, out y, out plant, out index, out bRegion)) { ownerId = bRegion.barricades[index].owner; } else if (StructureManager.tryGetInfo(hit.transform, out x, out y, out index, out sRegion)) { ownerId = sRegion.structures[index].owner; } else if ((vehicle = hit.transform.GetComponent <InteractableVehicle>()) != null && vehicle.isLocked) { ownerId = vehicle.lockedOwner.m_SteamID; } else { UnturnedChat.Say(caller, instance.Translate("CheckownerFail")); return; } ThreadPool.QueueUserWorkItem((i) => { var owner = instance.DatabaseManager.GetPlayer(ownerId); if (owner == null) { owner = instance.DatabaseManager.CreatePlayer(new Models.Player(ownerId, ownerId.GetIP())); } TaskDispatcher.QueueOnMainThread(() => { UnturnedChat.Say(caller, instance.Translate("CheckownerSuccess", owner.PlayerName, owner.PlayerId, owner.IsBanned(out var ban))); }); }); } }
public void Execute(IRocketPlayer caller, string[] args) { Player player = ((UnturnedPlayer)caller).Player; PlayerLook look = player.look; if (PhysicsUtility.raycast(new Ray(look.aim.position, look.aim.forward), out RaycastHit hit, Mathf.Infinity, RayMasks.BARRICADE | RayMasks.STRUCTURE)) { Interactable2SalvageBarricade barri = hit.transform.GetComponent <Interactable2SalvageBarricade>(); Interactable2SalvageStructure struc = hit.transform.GetComponent <Interactable2SalvageStructure>(); if (barri != null) { BarricadeManager.tryGetInfo(barri.root, out byte x, out byte y, out ushort plant, out ushort index, out BarricadeRegion region); region.barricades.RemoveAt(index); BarricadeManager manager = (BarricadeManager)typeof(BarricadeManager).GetField("manager", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); manager.channel.send("tellTakeBarricade", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[] { x, y, plant, index }); UnturnedChat.Say(caller, Util.Translate("barricade_removed")); } else if (struc != null) { StructureManager.tryGetInfo(struc.transform, out byte x, out byte y, out ushort index, out StructureRegion region); region.structures.RemoveAt(index); StructureManager manager = (StructureManager)typeof(StructureManager).GetField("manager", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); manager.channel.send("tellTakeStructure", ESteamCall.ALL, x, y, StructureManager.STRUCTURE_REGIONS, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[] { x, y, index, (region.drops[index].model.position - player.transform.position).normalized * 100f }); UnturnedChat.Say(caller, Util.Translate("structure_removed")); } else { UnturnedChat.Say(caller, Util.Translate("invalid_destroy")); } }
public static RaycastInfo OriginalRaycast(Ray ray, float range, int mask) { RaycastHit hit; PhysicsUtility.raycast(ray, out hit, range, mask, QueryTriggerInteraction.UseGlobal); RaycastInfo raycastInfo = new RaycastInfo(hit); raycastInfo.direction = ray.direction; if (raycastInfo.transform != null) { if (raycastInfo.transform.CompareTag("Barricade")) { raycastInfo.transform = DamageTool.getBarricadeRootTransform(raycastInfo.transform); } else if (raycastInfo.transform.CompareTag("Structure")) { raycastInfo.transform = DamageTool.getStructureRootTransform(raycastInfo.transform); } if (raycastInfo.transform.CompareTag("Enemy")) { raycastInfo.player = DamageTool.getPlayer(raycastInfo.transform); } if (raycastInfo.transform.CompareTag("Zombie")) { raycastInfo.zombie = DamageTool.getZombie(raycastInfo.transform); } if (raycastInfo.transform.CompareTag("Animal")) { raycastInfo.animal = DamageTool.getAnimal(raycastInfo.transform); } raycastInfo.limb = DamageTool.getLimb(raycastInfo.transform); if (raycastInfo.transform.CompareTag("Vehicle")) { raycastInfo.vehicle = DamageTool.getVehicle(raycastInfo.transform); } if (raycastInfo.zombie != null && raycastInfo.zombie.isRadioactive) { raycastInfo.material = EPhysicsMaterial.ALIEN_DYNAMIC; } else { raycastInfo.material = DamageTool.getMaterial(hit.point, raycastInfo.transform, raycastInfo.collider); } } return(raycastInfo); }
protected override async UniTask OnExecuteAsync() { if (Context.Parameters.Length > 2) { throw new CommandWrongUsageException(Context); } await UniTask.SwitchToMainThread(); float radius = 10f; if (Context.Parameters.Length > 0) { string radiusTerm = Context.Parameters[0]; if (!float.TryParse(radiusTerm, out radius)) { throw new UserFriendlyException(m_StringLocalizer["explode:bad_radius", new { Radius = radiusTerm }]); } } float damage = 200f; if (Context.Parameters.Length > 1) { string damageTerm = Context.Parameters[1]; if (!float.TryParse(damageTerm, out damage)) { throw new UserFriendlyException(m_StringLocalizer["explode:bad_damage", new { Damage = damageTerm }]); } } UnturnedUser uPlayer = (UnturnedUser)Context.Actor; Transform aim = uPlayer.Player.Player.look.aim; if (!PhysicsUtility.raycast(new Ray(aim.position, aim.forward), out RaycastHit hit, 512f, RayMasks.DAMAGE_SERVER)) { throw new UserFriendlyException(m_StringLocalizer["explode:failure"]); } if (hit.transform == null) { throw new UserFriendlyException(m_StringLocalizer["explode:failure"]); } await UniTask.SwitchToMainThread(); EffectManager.sendEffect(20, EffectManager.MEDIUM, hit.point); DamageTool.explode(hit.point, radius, EDeathCause.KILL, uPlayer.SteamId, damage, damage, damage, damage, damage, damage, damage, damage, out List <EPlayerKill> kills); await Context.Actor.PrintMessageAsync(m_StringLocalizer["explode:success"]); }
public static InteractableDoorHinge Getdoor(UnturnedPlayer player) { PlayerLook look = player.Player.look; RaycastHit raycastHit; if (!PhysicsUtility.raycast(new Ray(look.aim.position, look.aim.forward), out raycastHit, 100, RayMasks.BARRICADE, 0)) { return(null); } InteractableDoorHinge interactabledoorhinge = raycastHit.transform.GetComponent <InteractableDoorHinge>(); return(interactabledoorhinge); }
protected virtual void addFoliage(FoliageInfoAsset foliageAsset, float weightMultiplier) { if (foliageAsset == null) { return; } float num = 3.14159274f * this.brushRadius * this.brushRadius; float newRadius = Mathf.Sqrt(foliageAsset.density / DevkitFoliageToolOptions.instance.densityTarget / 3.14159274f); float num2; if (!this.addWeights.TryGetValue(foliageAsset, out num2)) { this.addWeights.Add(foliageAsset, 0f); } num2 += DevkitFoliageToolOptions.addSensitivity * num * this.brushStrength * weightMultiplier * Time.deltaTime; if (num2 > 1f) { this.previewSamples.Clear(); int num3 = Mathf.FloorToInt(num2); num2 -= (float)num3; for (int i = 0; i < num3; i++) { float num4 = this.brushRadius * Random.value; float brushAlpha = this.getBrushAlpha(num4); if (Random.value >= brushAlpha) { float num5 = 6.28318548f * Random.value; float num6 = Mathf.Cos(num5) * num4; float num7 = Mathf.Sin(num5) * num4; Ray ray; ray..ctor(this.brushWorldPosition + new Vector3(num6, this.brushRadius, num7), new Vector3(0f, -1f, 0f)); RaycastHit raycastHit; if (PhysicsUtility.raycast(ray, out raycastHit, this.brushRadius * 2f, (int)DevkitFoliageToolOptions.instance.surfaceMask, 0)) { SphereVolume sphereVolume = new SphereVolume(raycastHit.point, newRadius); if (foliageAsset.getInstanceCountInVolume(sphereVolume) <= 0) { if (Input.GetKey(323)) { foliageAsset.addFoliageToSurface(raycastHit.point, raycastHit.normal, false, false); } } } } } } this.addWeights[foliageAsset] = num2; }
public static Transform GetStructureTransform(Player player, out StructureData structureData) { structureData = null; RaycastHit hit; if (PhysicsUtility.raycast(new Ray(player.look.aim.position, player.look.aim.forward), out hit, 3, RayMasks.STRUCTURE_INTERACT)) { if (StructureManager.tryGetInfo(hit.transform, out _, out _, out ushort index, out StructureRegion region)) { structureData = region.structures[index]; return(region.drops[index].model); } } return(null); }
// Token: 0x060033AA RID: 13226 RVA: 0x0014F208 File Offset: 0x0014D608 public void Explode() { base.GetComponent <AudioSource>().Play(); if (MainCamera.instance != null) { Vector3 a = base.transform.position - MainCamera.instance.transform.position; if (a.sqrMagnitude < 1024f) { float num = Vector3.Dot(a.normalized, MainCamera.instance.transform.forward); if (num > -0.25f) { float magnitude = a.magnitude; RaycastHit raycastHit; if (magnitude < 0.5f || !PhysicsUtility.raycast(new Ray(MainCamera.instance.transform.position, a / magnitude), out raycastHit, magnitude - 0.5f, RayMasks.DAMAGE_SERVER, QueryTriggerInteraction.Ignore)) { float num2; if (num > 0.5f) { num2 = 1f; } else { num2 = (num + 0.25f) / 0.75f; } float num3; if (magnitude > 8f) { num3 = 1f - (magnitude - 8f) / 24f; } else { num3 = 1f; } PlayerUI.stun(num2 * num3); } } } } AlertTool.alert(base.transform.position, 32f); UnityEngine.Object.Destroy(base.gameObject, 2.5f); }
public void Execute(IRocketPlayer caller, string[] args) { SteamPlayer steamPlayer = PlayerTool.getSteamPlayer(ulong.Parse(caller.Id)); if (InfiniteSentry.Instance.Configuration.Instance.allSentriesInfinite) { InfiniteSentry.Instance.TellPlayer(steamPlayer, Color.red, "disabled"); return; } Player player = ((UnturnedPlayer)caller).Player; PlayerLook look = player.look; if (PhysicsUtility.raycast(new Ray(look.aim.position, look.aim.forward), out RaycastHit hit, Mathf.Infinity, RayMasks.BARRICADE | RayMasks.STRUCTURE)) { // https://github.com/JetBrains/resharper-unity/wiki/Possible-unintended-bypass-of-lifetime-check-of-underlying-Unity-engine-object if (hit.transform == null) { InfiniteSentry.Instance.TellPlayer(steamPlayer, Color.red, "no_sentry"); return; } var sentry = hit.transform.GetComponent <InteractableSentry>(); if (sentry == null) { InfiniteSentry.Instance.TellPlayer(steamPlayer, Color.red, "no_sentry"); return; } var component = sentry.gameObject.GetComponent <SentryTrackerComponent>(); if (component == null) { InfiniteSentry.Instance.TellPlayer(steamPlayer, Palette.SERVER, "added"); sentry.gameObject.AddComponent <SentryTrackerComponent>(); } else { UnityEngine.Object.Destroy(component); InfiniteSentry.Instance.TellPlayer(steamPlayer, Palette.SERVER, "destroyed"); } }
protected override async UniTask OnExecuteAsync() { if (Context.Parameters.Length != 0) { throw new CommandWrongUsageException(Context); } await UniTask.SwitchToMainThread(); UnturnedUser uPlayer = (UnturnedUser)Context.Actor; Transform aim = uPlayer.Player.Player.look.aim; if (!PhysicsUtility.raycast(new Ray(aim.position, aim.forward), out RaycastHit hit, 1024f, COLLISION_NO_SKY)) { throw new UserFriendlyException(m_StringLocalizer["jump:none"]); } await uPlayer.Player.Player.TeleportToLocationUnsafeAsync(hit.point + new Vector3(0f, 2f, 0f)); await uPlayer.PrintMessageAsync(m_StringLocalizer["jump:success"]); }
public static RaycastInfo raycast(Ray ray, float range, int mask) { RaycastHit hit; PhysicsUtility.raycast(ray, out hit, range, mask, 0); RaycastInfo raycastInfo = new RaycastInfo(hit); raycastInfo.direction = ray.direction; if (hit.transform != null) { if (hit.transform.CompareTag("Enemy")) { raycastInfo.player = DamageTool.getPlayer(raycastInfo.transform); } if (hit.transform.CompareTag("Zombie")) { raycastInfo.zombie = DamageTool.getZombie(raycastInfo.transform); } if (hit.transform.CompareTag("Animal")) { raycastInfo.animal = DamageTool.getAnimal(raycastInfo.transform); } raycastInfo.limb = DamageTool.getLimb(raycastInfo.transform); if (hit.transform.CompareTag("Vehicle")) { raycastInfo.vehicle = DamageTool.getVehicle(raycastInfo.transform); } if (raycastInfo.zombie != null && raycastInfo.zombie.isRadioactive) { raycastInfo.material = EPhysicsMaterial.ALIEN_DYNAMIC; } else { raycastInfo.material = DamageTool.getMaterial(hit.point, hit.transform, hit.collider); } } return(raycastInfo); }
public override CommandResult OnExecute(ICommandSource src, ICommandArgs args) { var player = src.ToPlayer(); var look = player.Look; if (PhysicsUtility.raycast(new Ray(look.aim.position, look.aim.forward), out RaycastHit hit, Mathf.Infinity, RayMasks.BARRICADE)) { InteractableDoorHinge hinge = hit.transform.GetComponent <InteractableDoorHinge>(); if (hinge != null) { InteractableDoor door = hinge.door; bool open = !door.isOpen; BarricadeManager.tryGetInfo(door.transform, out byte x, out byte y, out ushort plant, out ushort index, out BarricadeRegion region); BarricadeManager manager = (BarricadeManager)typeof(BarricadeManager).GetField("manager", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); door.updateToggle(open); manager.channel.send("tellToggleDoor", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[] { x, y, plant, index, open }); EssLang.Send(src, "DOOR_TOGGLED", open ? "opened" : "closed"); return(CommandResult.Success()); } else { return(CommandResult.LangError("DOOR_INVALID")); } }
public static Transform GetBarricadeTransform(Player player, out BarricadeData barricadeData, out BarricadeDrop drop) { barricadeData = null; drop = null; RaycastHit hit; if (PhysicsUtility.raycast(new Ray(player.look.aim.position, player.look.aim.forward), out hit, 3, RayMasks.BARRICADE_INTERACT)) { Transform transform = hit.transform; InteractableDoorHinge doorHinge = hit.transform.GetComponent <InteractableDoorHinge>(); if (doorHinge != null) { transform = doorHinge.door.transform; } if (BarricadeManager.tryGetInfo(transform, out _, out _, out _, out ushort index, out BarricadeRegion region, out drop)) { barricadeData = region.barricades[index]; return(region.drops[index].model); } } return(null); }
// Token: 0x06002AEE RID: 10990 RVA: 0x0010AF60 File Offset: 0x00109360 public void simulate(uint simulation, bool inputLeanLeft, bool inputLeanRight) { if (base.player.stance.stance != EPlayerStance.CLIMB && base.player.stance.stance != EPlayerStance.SPRINT && base.player.stance.stance != EPlayerStance.DRIVING && base.player.stance.stance != EPlayerStance.SITTING) { if (inputLeanLeft) { PhysicsUtility.raycast(new Ray(base.transform.position + Vector3.up, -base.transform.right), out this.wall, 1.2f, RayMasks.BLOCK_LEAN, QueryTriggerInteraction.UseGlobal); if (this.wall.transform == null) { this._lean = 1; this.leanObstructed = false; } else { this._lean = 0; this.leanObstructed = true; } } else if (inputLeanRight) { PhysicsUtility.raycast(new Ray(base.transform.position + Vector3.up, base.transform.right), out this.wall, 1.2f, RayMasks.BLOCK_LEAN, QueryTriggerInteraction.UseGlobal); if (this.wall.transform == null) { this._lean = -1; this.leanObstructed = false; } else { this._lean = 0; this.leanObstructed = true; } } else { this._lean = 0; this.leanObstructed = false; } } else { this._lean = 0; this.leanObstructed = false; } if (this.lastLean != this.lean) { this.lastLean = this.lean; if (Provider.isServer) { if ((this.lean == -1 || this.lean == 1) && this.captorStrength > 0) { this.captorStrength -= 1; if (this.captorStrength == 0) { this.captorID = CSteamID.Nil; this.captorItem = 0; this.sendGesture(EPlayerGesture.ARREST_STOP, true); EffectManager.sendEffect(36, EffectManager.MEDIUM, base.transform.position, Vector3.up); } } base.channel.send("tellLean", ESteamCall.NOT_OWNER, ESteamPacket.UPDATE_UNRELIABLE_BUFFER, new object[] { (byte)(this.lean + 1) }); } } }
public void OV_Update() { bool flag = !DrawUtilities.ShouldRun(); if (!flag) { bool flag2 = OptimizationVariables.MainPlayer.stance.stance != EPlayerStance.DRIVING && OptimizationVariables.MainPlayer.stance.stance != EPlayerStance.SITTING && !OptimizationVariables.MainPlayer.life.isDead && !OptimizationVariables.MainPlayer.workzone.isBuilding; if (flag2) { bool flag3 = Time.realtimeSinceStartup - OV_PlayerInteract.lastInteract > 0.1f; if (flag3) { int num = 0; bool flag4 = InteractionOptions.InteractThroughWalls && !PlayerCoroutines.IsSpying; if (flag4) { bool flag5 = !InteractionOptions.NoHitBarricades; if (flag5) { num |= RayMasks.BARRICADE; } bool flag6 = !InteractionOptions.NoHitItems; if (flag6) { num |= RayMasks.ITEM; } bool flag7 = !InteractionOptions.NoHitResources; if (flag7) { num |= RayMasks.RESOURCE; } bool flag8 = !InteractionOptions.NoHitStructures; if (flag8) { num |= RayMasks.STRUCTURE; } bool flag9 = !InteractionOptions.NoHitVehicles; if (flag9) { num |= RayMasks.VEHICLE; } bool flag10 = !InteractionOptions.NoHitEnvironment; if (flag10) { num |= (RayMasks.LARGE | RayMasks.MEDIUM | RayMasks.ENVIRONMENT | RayMasks.GROUND); } } else { num = RayMasks.PLAYER_INTERACT; } OV_PlayerInteract.lastInteract = Time.realtimeSinceStartup; float num2 = (InteractionOptions.InteractThroughWalls && !PlayerCoroutines.IsSpying) ? 20f : 4f; PhysicsUtility.raycast(new Ray(Camera.main.transform.position, Camera.main.transform.forward), out OV_PlayerInteract.hit, (OptimizationVariables.MainPlayer.look.perspective == EPlayerPerspective.THIRD) ? (num2 + 2f) : num2, num, QueryTriggerInteraction.UseGlobal); } Transform transform = (!(OV_PlayerInteract.hit.collider != null)) ? null : OV_PlayerInteract.hit.collider.transform; bool flag11 = transform != OV_PlayerInteract.focus; if (flag11) { bool flag12 = OV_PlayerInteract.focus != null && PlayerInteract.interactable != null; if (flag12) { InteractableDoorHinge componentInParent = OV_PlayerInteract.focus.GetComponentInParent <InteractableDoorHinge>(); bool flag13 = componentInParent != null; if (flag13) { HighlighterTool.unhighlight(componentInParent.door.transform); } else { HighlighterTool.unhighlight(PlayerInteract.interactable.transform); } } OV_PlayerInteract.focus = null; OV_PlayerInteract.target = null; OV_PlayerInteract.interactable = null; OV_PlayerInteract.interactable2 = null; bool flag14 = transform != null; if (flag14) { OV_PlayerInteract.focus = transform; OV_PlayerInteract.interactable = OV_PlayerInteract.focus.GetComponentInParent <Interactable>(); OV_PlayerInteract.interactable2 = OV_PlayerInteract.focus.GetComponentInParent <Interactable2>(); bool flag15 = PlayerInteract.interactable != null; if (flag15) { OV_PlayerInteract.target = PlayerInteract.interactable.transform.FindChildRecursive("Target"); bool flag16 = PlayerInteract.interactable.checkInteractable(); if (flag16) { bool isEnabled = PlayerUI.window.isEnabled; if (isEnabled) { bool flag17 = PlayerInteract.interactable.checkUseable(); if (flag17) { Color green; bool flag18 = !PlayerInteract.interactable.checkHighlight(out green); if (flag18) { green = Color.green; } InteractableDoorHinge componentInParent2 = OV_PlayerInteract.focus.GetComponentInParent <InteractableDoorHinge>(); bool flag19 = componentInParent2 != null; if (flag19) { HighlighterTool.highlight(componentInParent2.door.transform, green); } else { HighlighterTool.highlight(PlayerInteract.interactable.transform, green); } } else { Color red = Color.red; InteractableDoorHinge componentInParent3 = OV_PlayerInteract.focus.GetComponentInParent <InteractableDoorHinge>(); bool flag20 = componentInParent3 != null; if (flag20) { HighlighterTool.highlight(componentInParent3.door.transform, red); } else { HighlighterTool.highlight(PlayerInteract.interactable.transform, red); } } } } else { OV_PlayerInteract.target = null; OV_PlayerInteract.interactable = null; } } } } } else { bool flag21 = OV_PlayerInteract.focus != null && PlayerInteract.interactable != null; if (flag21) { InteractableDoorHinge componentInParent4 = OV_PlayerInteract.focus.GetComponentInParent <InteractableDoorHinge>(); bool flag22 = componentInParent4 != null; if (flag22) { HighlighterTool.unhighlight(componentInParent4.door.transform); } else { HighlighterTool.unhighlight(PlayerInteract.interactable.transform); } } OV_PlayerInteract.focus = null; OV_PlayerInteract.target = null; OV_PlayerInteract.interactable = null; OV_PlayerInteract.interactable2 = null; } bool isDead = OptimizationVariables.MainPlayer.life.isDead; if (!isDead) { bool flag23 = PlayerInteract.interactable != null; if (flag23) { EPlayerMessage message; string text; Color color; bool flag24 = PlayerInteract.interactable.checkHint(out message, out text, out color) && !PlayerUI.window.showCursor; if (flag24) { bool flag25 = PlayerInteract.interactable.CompareTag("Item"); if (flag25) { PlayerUI.hint((!(OV_PlayerInteract.target != null)) ? OV_PlayerInteract.focus : OV_PlayerInteract.target, message, text, color, new object[] { ((InteractableItem)PlayerInteract.interactable).item, ((InteractableItem)PlayerInteract.interactable).asset }); } else { PlayerUI.hint((!(OV_PlayerInteract.target != null)) ? OV_PlayerInteract.focus : OV_PlayerInteract.target, message, text, color, new object[0]); } } } else { bool flag26 = OV_PlayerInteract.purchaseAsset != null && OptimizationVariables.MainPlayer.movement.purchaseNode != null && !PlayerUI.window.showCursor; if (flag26) { PlayerUI.hint(null, EPlayerMessage.PURCHASE, string.Empty, Color.white, new object[] { OV_PlayerInteract.purchaseAsset.itemName, OptimizationVariables.MainPlayer.movement.purchaseNode.cost }); } else { bool flag27 = OV_PlayerInteract.focus != null && OV_PlayerInteract.focus.CompareTag("Enemy"); if (flag27) { Player player = DamageTool.getPlayer(OV_PlayerInteract.focus); bool flag28 = player != null && player != Player.player && !PlayerUI.window.showCursor; if (flag28) { PlayerUI.hint(null, EPlayerMessage.ENEMY, string.Empty, Color.white, new object[] { player.channel.owner }); } } } } EPlayerMessage message2; float data; bool flag29 = PlayerInteract.interactable2 != null && PlayerInteract.interactable2.checkHint(out message2, out data) && !PlayerUI.window.showCursor; if (flag29) { PlayerUI.hint2(EPlayerMessage.ENEMY, (!OV_PlayerInteract.isHoldingKey) ? 0f : ((Time.realtimeSinceStartup - OV_PlayerInteract.lastKeyDown) / this.salvageTime), 1f); } bool flag30 = (OptimizationVariables.MainPlayer.stance.stance == EPlayerStance.DRIVING || OptimizationVariables.MainPlayer.stance.stance == EPlayerStance.SITTING) && !Input.GetKey(KeyCode.LeftShift); if (flag30) { bool keyDown = Input.GetKeyDown(KeyCode.F1); if (keyDown) { this.hotkey(0); } bool keyDown2 = Input.GetKeyDown(KeyCode.F2); if (keyDown2) { this.hotkey(1); } bool keyDown3 = Input.GetKeyDown(KeyCode.F3); if (keyDown3) { this.hotkey(2); } bool keyDown4 = Input.GetKeyDown(KeyCode.F4); if (keyDown4) { this.hotkey(3); } bool keyDown5 = Input.GetKeyDown(KeyCode.F5); if (keyDown5) { this.hotkey(4); } bool keyDown6 = Input.GetKeyDown(KeyCode.F6); if (keyDown6) { this.hotkey(5); } bool keyDown7 = Input.GetKeyDown(KeyCode.F7); if (keyDown7) { this.hotkey(6); } bool keyDown8 = Input.GetKeyDown(KeyCode.F8); if (keyDown8) { this.hotkey(7); } bool keyDown9 = Input.GetKeyDown(KeyCode.F9); if (keyDown9) { this.hotkey(8); } bool keyDown10 = Input.GetKeyDown(KeyCode.F10); if (keyDown10) { this.hotkey(9); } } bool keyDown11 = Input.GetKeyDown(ControlsSettings.interact); if (keyDown11) { OV_PlayerInteract.lastKeyDown = Time.realtimeSinceStartup; OV_PlayerInteract.isHoldingKey = true; } bool flag31 = Input.GetKeyDown(ControlsSettings.inspect) && ControlsSettings.inspect != ControlsSettings.interact && OptimizationVariables.MainPlayer.equipment.canInspect; if (flag31) { OptimizationVariables.MainPlayer.channel.send("askInspect", ESteamCall.SERVER, ESteamPacket.UPDATE_UNRELIABLE_BUFFER, new object[0]); } bool flag32 = OV_PlayerInteract.isHoldingKey; if (flag32) { bool keyUp = Input.GetKeyUp(ControlsSettings.interact); if (keyUp) { OV_PlayerInteract.isHoldingKey = false; bool showCursor = PlayerUI.window.showCursor; if (showCursor) { bool flag33 = OptimizationVariables.MainPlayer.inventory.isStoring && OptimizationVariables.MainPlayer.inventory.shouldInteractCloseStorage; if (flag33) { PlayerDashboardUI.close(); PlayerLifeUI.open(); } else { bool active = PlayerBarricadeSignUI.active; if (active) { PlayerBarricadeSignUI.close(); PlayerLifeUI.open(); } else { bool active2 = PlayerBarricadeStereoUI.active; if (active2) { PlayerBarricadeStereoUI.close(); PlayerLifeUI.open(); } else { bool active3 = PlayerBarricadeLibraryUI.active; if (active3) { PlayerBarricadeLibraryUI.close(); PlayerLifeUI.open(); } else { bool active4 = PlayerBarricadeMannequinUI.active; if (active4) { PlayerBarricadeMannequinUI.close(); PlayerLifeUI.open(); } else { bool active5 = PlayerNPCDialogueUI.active; if (active5) { bool dialogueAnimating = PlayerNPCDialogueUI.dialogueAnimating; if (dialogueAnimating) { PlayerNPCDialogueUI.skipText(); } else { bool dialogueHasNextPage = PlayerNPCDialogueUI.dialogueHasNextPage; if (dialogueHasNextPage) { PlayerNPCDialogueUI.nextPage(); } else { PlayerNPCDialogueUI.close(); PlayerLifeUI.open(); } } } else { bool active6 = PlayerNPCQuestUI.active; if (active6) { PlayerNPCQuestUI.closeNicely(); } else { bool active7 = PlayerNPCVendorUI.active; if (active7) { PlayerNPCVendorUI.closeNicely(); } } } } } } } } } else { bool flag34 = OptimizationVariables.MainPlayer.stance.stance == EPlayerStance.DRIVING || OptimizationVariables.MainPlayer.stance.stance == EPlayerStance.SITTING; if (flag34) { VehicleManager.exitVehicle(); } else { bool flag35 = OV_PlayerInteract.focus != null && PlayerInteract.interactable != null; if (flag35) { bool flag36 = PlayerInteract.interactable.checkUseable(); if (flag36) { PlayerInteract.interactable.use(); } } else { bool flag37 = OV_PlayerInteract.purchaseAsset != null; if (flag37) { bool flag38 = OptimizationVariables.MainPlayer.skills.experience >= OptimizationVariables.MainPlayer.movement.purchaseNode.cost; if (flag38) { OptimizationVariables.MainPlayer.skills.sendPurchase(OptimizationVariables.MainPlayer.movement.purchaseNode); } } else { bool flag39 = ControlsSettings.inspect == ControlsSettings.interact && OptimizationVariables.MainPlayer.equipment.canInspect; if (flag39) { OptimizationVariables.MainPlayer.channel.send("askInspect", ESteamCall.SERVER, ESteamPacket.UPDATE_UNRELIABLE_BUFFER, new object[0]); } } } } } } else { bool flag40 = Time.realtimeSinceStartup - OV_PlayerInteract.lastKeyDown > this.salvageTime; if (flag40) { OV_PlayerInteract.isHoldingKey = false; bool flag41 = !PlayerUI.window.showCursor && PlayerInteract.interactable2 != null; if (flag41) { PlayerInteract.interactable2.use(); } } } } } } }
public static void OnSpied() { Transform transform = OptimizationVariables.MainCam.transform; PhysicsUtility.raycast(new Ray(transform.position, transform.forward), out OV_PlayerInteract.hit, (float)((OptimizationVariables.MainPlayer.look.perspective == EPlayerPerspective.THIRD) ? 6 : 4), RayMasks.PLAYER_INTERACT, QueryTriggerInteraction.UseGlobal); }
// Token: 0x06000094 RID: 148 RVA: 0x000068DC File Offset: 0x00004ADC public static RaycastInfo GenerateOriginalRaycast(Ray ray, float range, int mask) { RaycastHit hit; PhysicsUtility.raycast(ray, out hit, range, mask, QueryTriggerInteraction.UseGlobal); RaycastInfo raycastInfo = new RaycastInfo(hit); raycastInfo.direction = ray.direction; bool flag = !(raycastInfo.transform == null); RaycastInfo result; if (flag) { bool flag2 = raycastInfo.transform.CompareTag("Barricade"); if (flag2) { raycastInfo.transform = DamageTool.getBarricadeRootTransform(raycastInfo.transform); } else { bool flag3 = raycastInfo.transform.CompareTag("Structure"); if (flag3) { raycastInfo.transform = DamageTool.getStructureRootTransform(raycastInfo.transform); } } bool flag4 = raycastInfo.transform.CompareTag("Enemy"); if (flag4) { raycastInfo.player = DamageTool.getPlayer(raycastInfo.transform); } bool flag5 = raycastInfo.transform.CompareTag("Zombie"); if (flag5) { raycastInfo.zombie = DamageTool.getZombie(raycastInfo.transform); } bool flag6 = raycastInfo.transform.CompareTag("Animal"); if (flag6) { raycastInfo.animal = DamageTool.getAnimal(raycastInfo.transform); } raycastInfo.limb = DamageTool.getLimb(raycastInfo.transform); bool flag7 = !RaycastOptions.UseRandomLimb; if (flag7) { bool useCustomLimb = RaycastOptions.UseCustomLimb; if (useCustomLimb) { raycastInfo.limb = RaycastOptions.TargetLimb; } } else { ELimb[] array = (ELimb[])Enum.GetValues(typeof(ELimb)); raycastInfo.limb = array[MathUtilities.Random.Next(0, array.Length)]; } bool flag8 = raycastInfo.transform.CompareTag("Vehicle"); if (flag8) { raycastInfo.vehicle = DamageTool.getVehicle(raycastInfo.transform); } else { bool flag9 = raycastInfo.zombie != null && raycastInfo.zombie.isRadioactive; if (flag9) { raycastInfo.material = EPhysicsMaterial.ALIEN_DYNAMIC; } else { raycastInfo.material = DamageTool.getMaterial(hit.point, raycastInfo.transform, raycastInfo.collider); } } bool alwaysHitHead = RaycastOptions.AlwaysHitHead; if (alwaysHitHead) { raycastInfo.limb = ELimb.SKULL; } result = raycastInfo; } else { result = raycastInfo; } return(result); }
public static bool Prefix(InteractableSentry __instance) { RocketPlayer ownerPlayer = new RocketPlayer(__instance.owner.ToString()); bool hasWeapon = (bool)hasWeaponField.GetValue(__instance); bool isFiring = (bool)isFiringField.GetValue(__instance); bool isAiming = (bool)isAimingField.GetValue(__instance); float lastScan = (float)lastScanField.GetValue(__instance); float lastFire = (float)lastFireField.GetValue(__instance); float fireTime = (float)fireTimeField.GetValue(__instance); float lastAim = (float)lastAimField.GetValue(__instance); ItemWeaponAsset displayAsset = displayAssetField.GetValue(__instance) as ItemWeaponAsset; Attachments attachments = attachmentsField.GetValue(__instance) as Attachments; bool interact = (bool)interactField.GetValue(__instance); var playersInRadius = (List <Player>)playersInRadiusField.GetValue(null); var zombiesInRadius = (List <Zombie>)zombiesInRadiusField.GetValue(null); var animalsInRadius = (List <Animal>)animalsInRadiusField.GetValue(null); var targetPlayer = targetPlayerField.GetValue(__instance) as Player; var targetZombie = targetZombieField.GetValue(__instance) as Zombie; var targetAnimal = targetAnimalField.GetValue(__instance) as Animal; var aimTransform = aimTransformField.GetValue(__instance) as Transform; if (__instance.isPowered) { Vector3 vector3_1 = __instance.transform.position + new Vector3(0.0f, 0.65f, 0.0f); Vector3 vector3_2; if ((double)Time.realtimeSinceStartup - (double)lastScan > 0.100000001490116) { lastScanField.SetValue(__instance, Time.realtimeSinceStartup); float a = 48f; if (hasWeapon) { a = Mathf.Min(a, ((ItemWeaponAsset)displayAsset).range); } float sqrRadius = a * a; float num = sqrRadius; Player player = (Player)null; Zombie zombie = (Zombie)null; Animal animal = (Animal)null; if (Provider.isPvP) { playersInRadius.Clear(); PlayerTool.getPlayersInRadius(vector3_1, sqrRadius, playersInRadius); for (int index = 0; index < playersInRadius.Count; ++index) { Player playersInRadiu = playersInRadius[index]; var currentRocketPlayer = new RocketPlayer(playersInRadiu.channel.owner.playerID.steamID.ToString()); if (currentRocketPlayer.HasPermission(GodPermission)) { continue; } if (!(playersInRadiu.channel.owner.playerID.steamID == __instance.owner) && !playersInRadiu.quests.isMemberOfGroup(__instance.group) && (!playersInRadiu.life.isDead && playersInRadiu.animator.gesture != EPlayerGesture.ARREST_START) && ((!playersInRadiu.movement.isSafe || !playersInRadiu.movement.isSafeInfo.noWeapons) && playersInRadiu.movement.canAddSimulationResultsToUpdates) && (!((UnityEngine.Object)player != (UnityEngine.Object)null) || playersInRadiu.animator.gesture != EPlayerGesture.SURRENDER_START) && (__instance.sentryMode != ESentryMode.FRIENDLY || (double)Time.realtimeSinceStartup - (double)playersInRadiu.equipment.lastPunching < 2.0 || playersInRadiu.equipment.isSelected && playersInRadiu.equipment.asset != null && playersInRadiu.equipment.asset.shouldFriendlySentryTargetUser)) { vector3_2 = playersInRadiu.look.aim.position - vector3_1; float sqrMagnitude = vector3_2.sqrMagnitude; if ((double)sqrMagnitude <= (double)num) { Vector3 vector3_3 = playersInRadiu.look.aim.position - vector3_1; float magnitude = vector3_3.magnitude; Vector3 vector3_4 = vector3_3 / magnitude; if (!((UnityEngine.Object)playersInRadiu != (UnityEngine.Object)targetPlayer) || (double)Vector3.Dot(vector3_4, aimTransform.forward) >= 0.5) { if ((double)magnitude > 0.025000000372529) { RaycastHit hit; PhysicsUtility.raycast(new Ray(vector3_1, vector3_4), out hit, magnitude - 0.025f, RayMasks.BLOCK_SENTRY, QueryTriggerInteraction.UseGlobal); if (!((UnityEngine.Object)hit.transform != (UnityEngine.Object)null) || !((UnityEngine.Object)hit.transform != (UnityEngine.Object)__instance.transform)) { PhysicsUtility.raycast(new Ray(vector3_1 + vector3_4 * (magnitude - 0.025f), -vector3_4), out hit, magnitude - 0.025f, RayMasks.DAMAGE_SERVER, QueryTriggerInteraction.UseGlobal); if ((UnityEngine.Object)hit.transform != (UnityEngine.Object)null && (UnityEngine.Object)hit.transform != (UnityEngine.Object)__instance.transform) { continue; } } else { continue; } } num = sqrMagnitude; player = playersInRadiu; } } } } } zombiesInRadius.Clear(); ZombieManager.getZombiesInRadius(vector3_1, sqrRadius, zombiesInRadius); for (int index = 0; index < zombiesInRadius.Count; ++index) { Zombie zombiesInRadiu = zombiesInRadius[index]; if (!zombiesInRadiu.isDead && zombiesInRadiu.isHunting) { Vector3 position = zombiesInRadiu.transform.position; switch (zombiesInRadiu.speciality) { case EZombieSpeciality.NORMAL: position += new Vector3(0.0f, 1.75f, 0.0f); break; case EZombieSpeciality.MEGA: position += new Vector3(0.0f, 2.625f, 0.0f); break; case EZombieSpeciality.CRAWLER: position += new Vector3(0.0f, 0.25f, 0.0f); break; case EZombieSpeciality.SPRINTER: position += new Vector3(0.0f, 1f, 0.0f); break; } vector3_2 = position - vector3_1; float sqrMagnitude = vector3_2.sqrMagnitude; if ((double)sqrMagnitude <= (double)num) { Vector3 vector3_3 = position - vector3_1; float magnitude = vector3_3.magnitude; Vector3 vector3_4 = vector3_3 / magnitude; if (!((UnityEngine.Object)zombiesInRadiu != (UnityEngine.Object)targetZombie) || (double)Vector3.Dot(vector3_4, aimTransform.forward) >= 0.5) { if ((double)magnitude > 0.025000000372529) { RaycastHit hit; PhysicsUtility.raycast(new Ray(vector3_1, vector3_4), out hit, magnitude - 0.025f, RayMasks.BLOCK_SENTRY, QueryTriggerInteraction.UseGlobal); if (!((UnityEngine.Object)hit.transform != (UnityEngine.Object)null) || !((UnityEngine.Object)hit.transform != (UnityEngine.Object)__instance.transform)) { PhysicsUtility.raycast(new Ray(vector3_1 + vector3_4 * (magnitude - 0.025f), -vector3_4), out hit, magnitude - 0.025f, RayMasks.DAMAGE_SERVER, QueryTriggerInteraction.UseGlobal); if ((UnityEngine.Object)hit.transform != (UnityEngine.Object)null && (UnityEngine.Object)hit.transform != (UnityEngine.Object)__instance.transform) { continue; } } else { continue; } } num = sqrMagnitude; player = (Player)null; zombie = zombiesInRadiu; } } } } animalsInRadius.Clear(); AnimalManager.getAnimalsInRadius(vector3_1, sqrRadius, animalsInRadius); for (int index = 0; index < animalsInRadius.Count; ++index) { Animal animalsInRadiu = animalsInRadius[index]; if (!animalsInRadiu.isDead) { Vector3 position = animalsInRadiu.transform.position; vector3_2 = position - vector3_1; float sqrMagnitude = vector3_2.sqrMagnitude; if ((double)sqrMagnitude <= (double)num) { Vector3 vector3_3 = position - vector3_1; float magnitude = vector3_3.magnitude; Vector3 vector3_4 = vector3_3 / magnitude; if (!((UnityEngine.Object)animalsInRadiu != (UnityEngine.Object)targetAnimal) || (double)Vector3.Dot(vector3_4, aimTransform.forward) >= 0.5) { if ((double)magnitude > 0.025000000372529) { RaycastHit hit; PhysicsUtility.raycast(new Ray(vector3_1, vector3_4), out hit, magnitude - 0.025f, RayMasks.BLOCK_SENTRY, QueryTriggerInteraction.UseGlobal); if (!((UnityEngine.Object)hit.transform != (UnityEngine.Object)null) || !((UnityEngine.Object)hit.transform != (UnityEngine.Object)__instance.transform)) { PhysicsUtility.raycast(new Ray(vector3_1 + vector3_4 * (magnitude - 0.025f), -vector3_4), out hit, magnitude - 0.025f, RayMasks.DAMAGE_SERVER, QueryTriggerInteraction.UseGlobal); if ((UnityEngine.Object)hit.transform != (UnityEngine.Object)null && (UnityEngine.Object)hit.transform != (UnityEngine.Object)__instance.transform) { continue; } } else { continue; } } num = sqrMagnitude; player = (Player)null; zombie = (Zombie)null; animal = animalsInRadiu; } } } } if ((UnityEngine.Object)player != (UnityEngine.Object)targetPlayer || (UnityEngine.Object)zombie != (UnityEngine.Object)targetZombie || (UnityEngine.Object)animal != (UnityEngine.Object)targetAnimal) { targetPlayerField.SetValue(__instance, player); targetZombieField.SetValue(__instance, zombie); targetAnimalField.SetValue(__instance, animal); lastFireField.SetValue(__instance, Time.realtimeSinceStartup + 0.1f); } } if ((UnityEngine.Object)targetPlayer != (UnityEngine.Object)null) { switch (__instance.sentryMode) { case ESentryMode.NEUTRAL: case ESentryMode.FRIENDLY: isFiringField.SetValue(__instance, targetPlayer.animator.gesture != EPlayerGesture.SURRENDER_START); break; case ESentryMode.HOSTILE: isFiringField.SetValue(__instance, true); break; } isAimingField.SetValue(__instance, true); } else if ((UnityEngine.Object)targetZombie != (UnityEngine.Object)null) { isFiringField.SetValue(__instance, true); isAimingField.SetValue(__instance, true); } else if ((UnityEngine.Object)targetAnimal != (UnityEngine.Object)null) { switch (__instance.sentryMode) { case ESentryMode.NEUTRAL: case ESentryMode.FRIENDLY: isFiringField.SetValue(__instance, targetAnimal.isHunting); break; case ESentryMode.HOSTILE: isFiringField.SetValue(__instance, true); break; } isAimingField.SetValue(__instance, true); } else { isFiringField.SetValue(__instance, false); isAimingField.SetValue(__instance, false); } if (isAiming && (double)Time.realtimeSinceStartup - (double)lastAim > (double)Provider.UPDATE_TIME) { lastAimField.SetValue(__instance, Time.realtimeSinceStartup); Transform transform = (Transform)null; Vector3 vector3_3 = Vector3.zero; if ((UnityEngine.Object)targetPlayer != (UnityEngine.Object)null) { transform = targetPlayer.transform; vector3_3 = targetPlayer.look.aim.position; } else if ((UnityEngine.Object)targetZombie != (UnityEngine.Object)null) { transform = targetZombie.transform; vector3_3 = targetZombie.transform.position; switch (targetZombie.speciality) { case EZombieSpeciality.NORMAL: vector3_3 += new Vector3(0.0f, 1.75f, 0.0f); break; case EZombieSpeciality.MEGA: vector3_3 += new Vector3(0.0f, 2.625f, 0.0f); break; case EZombieSpeciality.CRAWLER: vector3_3 += new Vector3(0.0f, 0.25f, 0.0f); break; case EZombieSpeciality.SPRINTER: vector3_3 += new Vector3(0.0f, 1f, 0.0f); break; } } else if ((UnityEngine.Object)targetAnimal != (UnityEngine.Object)null) { transform = targetAnimal.transform; vector3_3 = targetAnimal.transform.position + Vector3.up; } if ((UnityEngine.Object)transform != (UnityEngine.Object)null) { float yaw = Mathf.Atan2(vector3_3.x - vector3_1.x, vector3_3.z - vector3_1.z) * 57.29578f; double num = (double)vector3_3.y - (double)vector3_1.y; vector3_2 = vector3_3 - vector3_1; double magnitude = (double)vector3_2.magnitude; float pitch = Mathf.Sin((float)(num / magnitude)) * 57.29578f; BarricadeManager.sendAlertSentry(__instance.transform, yaw, pitch); } } if (isFiring && hasWeapon && (__instance.displayItem.state[10] > (byte)0 && !__instance.isOpen) && (double)Time.realtimeSinceStartup - (double)lastFire > (double)fireTime) { lastFireField.SetValue(__instance, lastFire + fireTime); if ((double)Time.realtimeSinceStartup - (double)lastFire > (double)fireTime) { lastFire = Time.realtimeSinceStartup; } float num1 = (float)__instance.displayItem.quality / 100f; if (attachments.magazineAsset == null) { return(false); } if (!ownerPlayer.HasPermission(IgnoreAmmoPermission)) { Console.WriteLine("Ammo reduction"); if ((__instance.sentryAsset.infiniteAmmo ? 1 : (((ItemGunAsset)displayAsset).infiniteAmmo ? 1 : 0)) == 0) { --__instance.displayItem.state[10]; } if (!__instance.sentryAsset.infiniteQuality && Provider.modeConfigData.Items.Has_Durability && (__instance.displayItem.quality > (byte)0 && (double)UnityEngine.Random.value < (double)((ItemWeaponAsset)displayAsset).durability)) { if ((int)__instance.displayItem.quality > (int)((ItemWeaponAsset)displayAsset).wear) { __instance.displayItem.quality -= ((ItemWeaponAsset)displayAsset).wear; } else { __instance.displayItem.quality = (byte)0; } } } if (attachments.barrelAsset == null || !attachments.barrelAsset.isSilenced || __instance.displayItem.state[16] == (byte)0) { AlertTool.alert(__instance.transform.position, 48f); } float num2 = ((ItemGunAsset)displayAsset).spreadAim * ((double)num1 < 0.5 ? (float)(1.0 + (1.0 - (double)num1 * 2.0)) : 1f); if (attachments.tacticalAsset != null && interact) { num2 *= attachments.tacticalAsset.spread; } if (attachments.gripAsset != null) { num2 *= attachments.gripAsset.spread; } if (attachments.barrelAsset != null) { num2 *= attachments.barrelAsset.spread; } if (attachments.magazineAsset != null) { num2 *= attachments.magazineAsset.spread; } if ((UnityEngine.Object)((ItemGunAsset)displayAsset).projectile == (UnityEngine.Object)null) { BarricadeManager.sendShootSentry(__instance.transform); byte pellets = attachments.magazineAsset.pellets; for (byte index1 = 0; (int)index1 < (int)pellets; ++index1) { EPlayerKill kill = EPlayerKill.NONE; uint xp = 0; float times = (float)(1.0 * ((double)num1 < 0.5 ? 0.5 + (double)num1 : 1.0)); Transform transform = (Transform)null; float num3 = 0.0f; if ((UnityEngine.Object)targetPlayer != (UnityEngine.Object)null) { transform = targetPlayer.transform; } else if ((UnityEngine.Object)targetZombie != (UnityEngine.Object)null) { transform = __instance.transform; } else if ((UnityEngine.Object)targetAnimal != (UnityEngine.Object)null) { transform = targetAnimal.transform; } if ((UnityEngine.Object)transform != (UnityEngine.Object)null) { vector3_2 = transform.position - __instance.transform.position; num3 = vector3_2.magnitude; } float num4 = (1f - num3 / ((ItemWeaponAsset)displayAsset).range) * (1f - ((ItemGunAsset)displayAsset).spreadHip) * 0.75f; if ((UnityEngine.Object)transform == (UnityEngine.Object)null || (double)UnityEngine.Random.value > (double)num4) { Vector3 forward = aimTransform.forward; forward += aimTransform.right * UnityEngine.Random.Range(-((ItemGunAsset)displayAsset).spreadHip, ((ItemGunAsset)displayAsset).spreadHip) * num2; forward += aimTransform.up * UnityEngine.Random.Range(-((ItemGunAsset)displayAsset).spreadHip, ((ItemGunAsset)displayAsset).spreadHip) * num2; forward.Normalize(); RaycastInfo raycastInfo = DamageTool.raycast(new Ray(aimTransform.position, forward), ((ItemWeaponAsset)displayAsset).range, RayMasks.DAMAGE_SERVER); if (!((UnityEngine.Object)raycastInfo.transform == (UnityEngine.Object)null)) { DamageTool.impact(raycastInfo.point, raycastInfo.normal, raycastInfo.material, (UnityEngine.Object)raycastInfo.vehicle != (UnityEngine.Object)null || raycastInfo.transform.CompareTag("Barricade") || raycastInfo.transform.CompareTag("Structure") || raycastInfo.transform.CompareTag("Resource")); if ((UnityEngine.Object)raycastInfo.vehicle != (UnityEngine.Object)null) { DamageTool.damage(raycastInfo.vehicle, false, Vector3.zero, false, ((ItemWeaponAsset)displayAsset).vehicleDamage, times, true, out kill, new CSteamID(), EDamageOrigin.Sentry); } else if ((UnityEngine.Object)raycastInfo.transform != (UnityEngine.Object)null) { if (raycastInfo.transform.CompareTag("Barricade")) { ushort result; if (ushort.TryParse(raycastInfo.transform.name, NumberStyles.Any, (IFormatProvider)CultureInfo.InvariantCulture, out result)) { ItemBarricadeAsset itemBarricadeAsset = (ItemBarricadeAsset)Assets.find(EAssetType.ITEM, result); if (itemBarricadeAsset != null && (itemBarricadeAsset.isVulnerable || ((ItemWeaponAsset)displayAsset).isInvulnerable)) { DamageTool.damage(raycastInfo.transform, false, ((ItemWeaponAsset)displayAsset).barricadeDamage, times, out kill, new CSteamID(), EDamageOrigin.Sentry); } } } else if (raycastInfo.transform.CompareTag("Structure")) { ushort result; if (ushort.TryParse(raycastInfo.transform.name, NumberStyles.Any, (IFormatProvider)CultureInfo.InvariantCulture, out result)) { ItemStructureAsset itemStructureAsset = (ItemStructureAsset)Assets.find(EAssetType.ITEM, result); if (itemStructureAsset != null && (itemStructureAsset.isVulnerable || ((ItemWeaponAsset)displayAsset).isInvulnerable)) { DamageTool.damage(raycastInfo.transform, false, raycastInfo.direction * Mathf.Ceil((float)attachments.magazineAsset.pellets / 2f), ((ItemWeaponAsset)displayAsset).structureDamage, times, out kill, new CSteamID(), EDamageOrigin.Sentry); } } } else if (raycastInfo.transform.CompareTag("Resource")) { byte x; byte y; ushort index2; if (ResourceManager.tryGetRegion(raycastInfo.transform, out x, out y, out index2)) { ResourceSpawnpoint resourceSpawnpoint = ResourceManager.getResourceSpawnpoint(x, y, index2); if (resourceSpawnpoint != null && !resourceSpawnpoint.isDead && (int)resourceSpawnpoint.asset.bladeID == (int)((ItemWeaponAsset)displayAsset).bladeID) { DamageTool.damage(raycastInfo.transform, raycastInfo.direction * Mathf.Ceil((float)attachments.magazineAsset.pellets / 2f), ((ItemWeaponAsset)displayAsset).resourceDamage, times, 1f, out kill, out xp, new CSteamID(), EDamageOrigin.Sentry); } } } else if (raycastInfo.section < byte.MaxValue) { InteractableObjectRubble componentInParent = raycastInfo.transform.GetComponentInParent <InteractableObjectRubble>(); if ((UnityEngine.Object)componentInParent != (UnityEngine.Object)null && !componentInParent.isSectionDead(raycastInfo.section) && (componentInParent.asset.rubbleIsVulnerable || ((ItemWeaponAsset)displayAsset).isInvulnerable)) { DamageTool.damage(componentInParent.transform, raycastInfo.direction, raycastInfo.section, ((ItemWeaponAsset)displayAsset).objectDamage, times, out kill, out xp, new CSteamID(), EDamageOrigin.Sentry); } } } } } else { Vector3 point = Vector3.zero; if ((UnityEngine.Object)targetPlayer != (UnityEngine.Object)null) { point = targetPlayer.look.aim.position; } else if ((UnityEngine.Object)targetZombie != (UnityEngine.Object)null) { point = targetZombie.transform.position; switch (targetZombie.speciality) { case EZombieSpeciality.NORMAL: point += new Vector3(0.0f, 1.75f, 0.0f); break; case EZombieSpeciality.MEGA: point += new Vector3(0.0f, 2.625f, 0.0f); break; case EZombieSpeciality.CRAWLER: point += new Vector3(0.0f, 0.25f, 0.0f); break; case EZombieSpeciality.SPRINTER: point += new Vector3(0.0f, 1f, 0.0f); break; } } else if ((UnityEngine.Object)targetAnimal != (UnityEngine.Object)null) { point = targetAnimal.transform.position + Vector3.up; } DamageTool.impact(point, -aimTransform.forward, EPhysicsMaterial.FLESH_DYNAMIC, true); Vector3 direction = aimTransform.forward * Mathf.Ceil((float)attachments.magazineAsset.pellets / 2f); if ((UnityEngine.Object)targetPlayer != (UnityEngine.Object)null) { DamageTool.damage(targetPlayer, EDeathCause.SENTRY, ELimb.SPINE, __instance.owner, direction, (IDamageMultiplier)((ItemWeaponAsset)displayAsset).playerDamageMultiplier, times, true, out kill, true, ERagdollEffect.NONE); } else if ((UnityEngine.Object)targetZombie != (UnityEngine.Object)null) { IDamageMultiplier damageMultiplier = ((ItemWeaponAsset)displayAsset).zombieOrPlayerDamageMultiplier; DamageZombieParameters parameters = DamageZombieParameters.make(targetZombie, direction, damageMultiplier, ELimb.SPINE); parameters.times = times; parameters.legacyArmor = true; parameters.instigator = (object)__instance; DamageTool.damageZombie(parameters, out kill, out xp); } else if ((UnityEngine.Object)targetAnimal != (UnityEngine.Object)null) { IDamageMultiplier damageMultiplier = ((ItemWeaponAsset)displayAsset).animalOrPlayerDamageMultiplier; DamageAnimalParameters parameters = DamageAnimalParameters.make(targetAnimal, direction, damageMultiplier, ELimb.SPINE); parameters.times = times; parameters.instigator = (object)__instance; DamageTool.damageAnimal(parameters, out kill, out xp); } } } } __instance.rebuildState(); } } return(false); }
public static RaycastInfo OV_raycast(Ray ray, float range, int mask) { ItemWeaponAsset weapon = (ItemWeaponAsset)Player.player.equipment.asset; /*if (MenuGUI.instance.LongRangeMelee && weapon == null) * { * range = MenuGUI.instance.MeleeRange; * }*/ range = Mathf.Infinity; RaycastHit hit; PhysicsUtility.raycast(ray, out hit, range, mask, 0); RaycastInfo raycastInfo = new RaycastInfo(hit); if (MenuGUI.instance.silentAim) { if (hit.transform == null && Functions.GetDistance(Functions.GetNearestPlayer().transform.position) >= Functions.GetGunDistance()) { return(raycastInfo); } } if (hit.transform.CompareTag("Zombie")) { raycastInfo.zombie = DamageTool.getZombie(raycastInfo.transform); } if (hit.transform.CompareTag("Animal")) { raycastInfo.animal = DamageTool.getAnimal(raycastInfo.transform); } raycastInfo.direction = new Vector3(0, MenuGUI.instance.launchAmount, 0); if (MenuGUI.instance.silentAim && !hit.transform.CompareTag("Zombie")) { if (Functions.GetDistFrom(Functions.GetNearestPlayer().transform.position, Player.player.look.aim.position) <= 15.5) { raycastInfo.point = Player.player.transform.position; } else { raycastInfo.point = Functions.GetLimbPosition(Functions.GetNearestPlayer().transform, "Skull"); } if (MenuGUI.instance.randomLimb) { ELimb[] array = (ELimb[])Enum.GetValues(typeof(ELimb)); raycastInfo.limb = array[Random.Next(0, array.Length)]; } else { raycastInfo.limb = ELimb.SKULL; } raycastInfo.player = Functions.GetNearestPlayer(); } else { raycastInfo.limb = DamageTool.getLimb(hit.transform); if (hit.transform.CompareTag("Enemy")) { raycastInfo.player = DamageTool.getPlayer(raycastInfo.transform); } } if (hit.transform.CompareTag("Vehicle")) { raycastInfo.vehicle = DamageTool.getVehicle(raycastInfo.transform); } if (raycastInfo.zombie != null && raycastInfo.zombie.isRadioactive) { raycastInfo.material = EPhysicsMaterial.ALIEN_DYNAMIC; } else { raycastInfo.material = EPhysicsMaterial.NONE; } return(raycastInfo); }
// Token: 0x06002C0E RID: 11278 RVA: 0x00117EA4 File Offset: 0x001162A4 private void Update() { if (base.channel.isOwner) { if (base.player.stance.stance != EPlayerStance.DRIVING && base.player.stance.stance != EPlayerStance.SITTING && !base.player.life.isDead && !base.player.workzone.isBuilding) { if (Time.realtimeSinceStartup - PlayerInteract.lastInteract > 0.1f) { PlayerInteract.lastInteract = Time.realtimeSinceStartup; if (base.player.look.isCam) { PhysicsUtility.raycast(new Ray(base.player.look.aim.position, base.player.look.aim.forward), out PlayerInteract.hit, 4f, RayMasks.PLAYER_INTERACT, QueryTriggerInteraction.UseGlobal); } else { PhysicsUtility.raycast(new Ray(MainCamera.instance.transform.position, MainCamera.instance.transform.forward), out PlayerInteract.hit, (float)((base.player.look.perspective != EPlayerPerspective.THIRD) ? 4 : 6), RayMasks.PLAYER_INTERACT, QueryTriggerInteraction.UseGlobal); } } if (PlayerInteract.hit.transform != PlayerInteract.focus) { if (PlayerInteract.focus != null && PlayerInteract.interactable != null) { InteractableDoorHinge component = PlayerInteract.focus.GetComponent <InteractableDoorHinge>(); if (component != null) { HighlighterTool.unhighlight(PlayerInteract.focus.parent.parent); } else { HighlighterTool.unhighlight(PlayerInteract.focus); } } PlayerInteract.focus = null; PlayerInteract.target = null; PlayerInteract._interactable = null; PlayerInteract._interactable2 = null; if (PlayerInteract.hit.transform != null) { PlayerInteract.focus = PlayerInteract.hit.transform; PlayerInteract._interactable = PlayerInteract.focus.GetComponent <Interactable>(); PlayerInteract._interactable2 = PlayerInteract.focus.GetComponent <Interactable2>(); if (PlayerInteract.interactable != null) { PlayerInteract.target = PlayerInteract.focus.FindChildRecursive("Target"); if (PlayerInteract.interactable.checkInteractable()) { if (PlayerUI.window.isEnabled) { if (PlayerInteract.interactable.checkUseable()) { Color color; if (!PlayerInteract.interactable.checkHighlight(out color)) { color = Color.green; } InteractableDoorHinge component2 = PlayerInteract.focus.GetComponent <InteractableDoorHinge>(); if (component2 != null) { HighlighterTool.highlight(PlayerInteract.focus.parent.parent, color); } else { HighlighterTool.highlight(PlayerInteract.focus, color); } } else { Color color = Color.red; InteractableDoorHinge component3 = PlayerInteract.focus.GetComponent <InteractableDoorHinge>(); if (component3 != null) { HighlighterTool.highlight(PlayerInteract.focus.parent.parent, color); } else { HighlighterTool.highlight(PlayerInteract.focus, color); } } } } else { PlayerInteract.target = null; PlayerInteract._interactable = null; } } } } } else { if (PlayerInteract.focus != null && PlayerInteract.interactable != null) { InteractableDoorHinge component4 = PlayerInteract.focus.GetComponent <InteractableDoorHinge>(); if (component4 != null) { HighlighterTool.unhighlight(PlayerInteract.focus.parent.parent); } else { HighlighterTool.unhighlight(PlayerInteract.focus); } } PlayerInteract.focus = null; PlayerInteract.target = null; PlayerInteract._interactable = null; PlayerInteract._interactable2 = null; } } if (base.channel.isOwner && !base.player.life.isDead) { if (PlayerInteract.interactable != null) { EPlayerMessage message; string text; Color color2; if (PlayerInteract.interactable.checkHint(out message, out text, out color2) && !PlayerUI.window.showCursor) { if (PlayerInteract.interactable.CompareTag("Item")) { PlayerUI.hint((!(PlayerInteract.target != null)) ? PlayerInteract.focus : PlayerInteract.target, message, text, color2, new object[] { ((InteractableItem)PlayerInteract.interactable).item, ((InteractableItem)PlayerInteract.interactable).asset }); } else { PlayerUI.hint((!(PlayerInteract.target != null)) ? PlayerInteract.focus : PlayerInteract.target, message, text, color2, new object[0]); } } } else if (PlayerInteract.purchaseAsset != null && base.player.movement.purchaseNode != null && !PlayerUI.window.showCursor) { PlayerUI.hint(null, EPlayerMessage.PURCHASE, string.Empty, Color.white, new object[] { PlayerInteract.purchaseAsset.itemName, base.player.movement.purchaseNode.cost }); } else if (PlayerInteract.focus != null && PlayerInteract.focus.CompareTag("Enemy")) { Player player = DamageTool.getPlayer(PlayerInteract.focus); if (player != null && player != Player.player && !PlayerUI.window.showCursor) { PlayerUI.hint(null, EPlayerMessage.ENEMY, string.Empty, Color.white, new object[] { player.channel.owner }); } } EPlayerMessage message2; float data; if (PlayerInteract.interactable2 != null && PlayerInteract.interactable2.checkHint(out message2, out data) && !PlayerUI.window.showCursor) { PlayerUI.hint2(message2, (!PlayerInteract.isHoldingKey) ? 0f : ((Time.realtimeSinceStartup - PlayerInteract.lastKeyDown) / this.salvageTime), data); } if ((base.player.stance.stance == EPlayerStance.DRIVING || base.player.stance.stance == EPlayerStance.SITTING) && !Input.GetKey(KeyCode.LeftShift)) { if (Input.GetKeyDown(KeyCode.F1)) { this.hotkey(0); } if (Input.GetKeyDown(KeyCode.F2)) { this.hotkey(1); } if (Input.GetKeyDown(KeyCode.F3)) { this.hotkey(2); } if (Input.GetKeyDown(KeyCode.F4)) { this.hotkey(3); } if (Input.GetKeyDown(KeyCode.F5)) { this.hotkey(4); } if (Input.GetKeyDown(KeyCode.F6)) { this.hotkey(5); } if (Input.GetKeyDown(KeyCode.F7)) { this.hotkey(6); } if (Input.GetKeyDown(KeyCode.F8)) { this.hotkey(7); } if (Input.GetKeyDown(KeyCode.F9)) { this.hotkey(8); } if (Input.GetKeyDown(KeyCode.F10)) { this.hotkey(9); } } if (Input.GetKeyDown(ControlsSettings.interact)) { PlayerInteract.lastKeyDown = Time.realtimeSinceStartup; PlayerInteract.isHoldingKey = true; } if (Input.GetKeyDown(ControlsSettings.inspect) && ControlsSettings.inspect != ControlsSettings.interact && base.player.equipment.canInspect) { base.channel.send("askInspect", ESteamCall.SERVER, ESteamPacket.UPDATE_UNRELIABLE_BUFFER, new object[0]); } if (PlayerInteract.isHoldingKey) { if (Input.GetKeyUp(ControlsSettings.interact)) { PlayerInteract.isHoldingKey = false; if (PlayerUI.window.showCursor) { if (base.player.inventory.isStoring && base.player.inventory.shouldInteractCloseStorage) { PlayerDashboardUI.close(); PlayerLifeUI.open(); } else if (PlayerBarricadeSignUI.active) { PlayerBarricadeSignUI.close(); PlayerLifeUI.open(); } else if (PlayerBarricadeStereoUI.active) { PlayerBarricadeStereoUI.close(); PlayerLifeUI.open(); } else if (PlayerBarricadeLibraryUI.active) { PlayerBarricadeLibraryUI.close(); PlayerLifeUI.open(); } else if (PlayerBarricadeMannequinUI.active) { PlayerBarricadeMannequinUI.close(); PlayerLifeUI.open(); } else if (PlayerNPCDialogueUI.active) { if (PlayerNPCDialogueUI.dialogueAnimating) { PlayerNPCDialogueUI.skipText(); } else if (PlayerNPCDialogueUI.dialogueHasNextPage) { PlayerNPCDialogueUI.nextPage(); } else { PlayerNPCDialogueUI.close(); PlayerLifeUI.open(); } } else if (PlayerNPCQuestUI.active) { PlayerNPCQuestUI.closeNicely(); } else if (PlayerNPCVendorUI.active) { PlayerNPCVendorUI.closeNicely(); } } else if (base.player.stance.stance == EPlayerStance.DRIVING || base.player.stance.stance == EPlayerStance.SITTING) { VehicleManager.exitVehicle(); } else if (PlayerInteract.focus != null && PlayerInteract.interactable != null) { if (PlayerInteract.interactable.checkUseable()) { PlayerInteract.interactable.use(); } } else if (PlayerInteract.purchaseAsset != null) { if (base.player.skills.experience >= base.player.movement.purchaseNode.cost) { base.player.skills.sendPurchase(base.player.movement.purchaseNode); } } else if (ControlsSettings.inspect == ControlsSettings.interact && base.player.equipment.canInspect) { base.channel.send("askInspect", ESteamCall.SERVER, ESteamPacket.UPDATE_UNRELIABLE_BUFFER, new object[0]); } } else if (Time.realtimeSinceStartup - PlayerInteract.lastKeyDown > this.salvageTime) { PlayerInteract.isHoldingKey = false; if (!PlayerUI.window.showCursor && PlayerInteract.interactable2 != null) { PlayerInteract.interactable2.use(); } } } } }
public static RaycastInfo GenerateOriginalRaycast(Ray ray, float range, int mask) { PhysicsUtility.raycast(ray, out RaycastHit hit, range, mask, QueryTriggerInteraction.UseGlobal); RaycastInfo raycastInfo = new RaycastInfo(hit) { direction = ray.direction }; if (hit.transform == null) { return(raycastInfo); } if (raycastInfo.transform.CompareTag("Barricade")) { raycastInfo.transform = DamageTool.getBarricadeRootTransform(raycastInfo.transform); } else if (raycastInfo.transform.CompareTag("Structure")) { raycastInfo.transform = DamageTool.getStructureRootTransform(raycastInfo.transform); } if (raycastInfo.transform.CompareTag("Enemy")) { raycastInfo.player = DamageTool.getPlayer(raycastInfo.transform); } if (raycastInfo.transform.CompareTag("Zombie")) { raycastInfo.zombie = DamageTool.getZombie(raycastInfo.transform); } if (raycastInfo.transform.CompareTag("Animal")) { raycastInfo.animal = DamageTool.getAnimal(raycastInfo.transform); } raycastInfo.limb = DamageTool.getLimb(raycastInfo.transform); if (RaycastOptions.UseCustomLimb) { raycastInfo.limb = RaycastOptions.TargetLimb; } else if (RaycastOptions.UseRandomLimb) { ELimb[] Limbs = (ELimb[])Enum.GetValues(typeof(ELimb)); raycastInfo.limb = Limbs[MathUtilities.Random.Next(0, Limbs.Length)]; } if (raycastInfo.transform.CompareTag("Vehicle")) { raycastInfo.vehicle = DamageTool.getVehicle(raycastInfo.transform); } if (raycastInfo.zombie != null && raycastInfo.zombie.isRadioactive) { raycastInfo.material = EPhysicsMaterial.ALIEN_DYNAMIC; } else { raycastInfo.material = DamageTool.getMaterial(hit.point, raycastInfo.transform, raycastInfo.collider); } return(raycastInfo); }
private void Update() { if (Provider.isServer && this.power != null && this.power.isWired) { Vector3 vector = base.transform.position + new Vector3(0f, 0.65f, 0f); if (Time.realtimeSinceStartup - this.lastScan > 0.1f) { this.lastScan = Time.realtimeSinceStartup; float num = 48f; if (this.hasWeapon) { num = Mathf.Min(num, ((ItemWeaponAsset)this.displayAsset).range); } float num2 = num * num; float num3 = num2; Player player = null; Zombie zombie = null; if (Provider.isPvP) { InteractableSentry.playersInRadius.Clear(); PlayerTool.getPlayersInRadius(vector, num2, InteractableSentry.playersInRadius); for (int i = 0; i < InteractableSentry.playersInRadius.Count; i++) { Player player2 = InteractableSentry.playersInRadius[i]; if (!(player2.channel.owner.playerID.steamID == base.owner) && !player2.quests.isMemberOfGroup(base.group)) { if (!player2.life.isDead && player2.animator.gesture != EPlayerGesture.ARREST_START) { if ((!player2.movement.isSafe || !player2.movement.isSafeInfo.noWeapons) && player2.movement.canAddSimulationResultsToUpdates) { if (!(player != null) || player2.animator.gesture != EPlayerGesture.SURRENDER_START) { if (this.sentryMode != ESentryMode.FRIENDLY || Time.realtimeSinceStartup - player2.equipment.lastPunching <= 2f || (player2.equipment.isSelected && player2.equipment.asset != null && player2.equipment.asset.isDangerous)) { float sqrMagnitude = (player2.look.aim.position - vector).sqrMagnitude; if (sqrMagnitude <= num3) { Vector3 vector2 = player2.look.aim.position - vector; float magnitude = vector2.magnitude; Vector3 vector3 = vector2 / magnitude; if (!(player2 != this.targetPlayer) || Vector3.Dot(vector3, this.aimTransform.forward) >= 0.5f) { if (magnitude > 0.025f) { RaycastHit raycastHit; PhysicsUtility.raycast(new Ray(vector, vector3), out raycastHit, magnitude - 0.025f, RayMasks.BLOCK_SENTRY, 0); if (raycastHit.transform != null && raycastHit.transform != base.transform) { goto IL_35F; } PhysicsUtility.raycast(new Ray(vector + vector3 * (magnitude - 0.025f), -vector3), out raycastHit, magnitude - 0.025f, RayMasks.DAMAGE_SERVER, 0); if (raycastHit.transform != null && raycastHit.transform != base.transform) { goto IL_35F; } } num3 = sqrMagnitude; player = player2; } } } } } } } IL_35F :; } } InteractableSentry.zombiesInRadius.Clear(); ZombieManager.getZombiesInRadius(vector, num2, InteractableSentry.zombiesInRadius); for (int j = 0; j < InteractableSentry.zombiesInRadius.Count; j++) { Zombie zombie2 = InteractableSentry.zombiesInRadius[j]; if (!zombie2.isDead && zombie2.isHunting) { Vector3 vector4 = zombie2.transform.position; switch (zombie2.speciality) { case EZombieSpeciality.NORMAL: vector4 += new Vector3(0f, 1.75f, 0f); break; case EZombieSpeciality.MEGA: vector4 += new Vector3(0f, 2.625f, 0f); break; case EZombieSpeciality.CRAWLER: vector4 += new Vector3(0f, 0.25f, 0f); break; case EZombieSpeciality.SPRINTER: vector4 += new Vector3(0f, 1f, 0f); break; } float sqrMagnitude2 = (vector4 - vector).sqrMagnitude; if (sqrMagnitude2 <= num3) { Vector3 vector5 = vector4 - vector; float magnitude2 = vector5.magnitude; Vector3 vector6 = vector5 / magnitude2; if (!(zombie2 != this.targetZombie) || Vector3.Dot(vector6, this.aimTransform.forward) >= 0.5f) { if (magnitude2 > 0.025f) { RaycastHit raycastHit2; PhysicsUtility.raycast(new Ray(vector, vector6), out raycastHit2, magnitude2 - 0.025f, RayMasks.BLOCK_SENTRY, 0); if (raycastHit2.transform != null && raycastHit2.transform != base.transform) { goto IL_5B4; } PhysicsUtility.raycast(new Ray(vector + vector6 * (magnitude2 - 0.025f), -vector6), out raycastHit2, magnitude2 - 0.025f, RayMasks.DAMAGE_SERVER, 0); if (raycastHit2.transform != null && raycastHit2.transform != base.transform) { goto IL_5B4; } } num3 = sqrMagnitude2; player = null; zombie = zombie2; } } } IL_5B4 :; } if (player != this.targetPlayer || zombie != this.targetZombie) { this.targetPlayer = player; this.targetZombie = zombie; this.lastFire = Time.realtimeSinceStartup + 0.1f; } } if (this.targetPlayer != null) { ESentryMode esentryMode = this.sentryMode; if (esentryMode != ESentryMode.FRIENDLY && esentryMode != ESentryMode.NEUTRAL) { if (esentryMode == ESentryMode.HOSTILE) { this.isFiring = true; } } else { this.isFiring = (this.targetPlayer.animator.gesture != EPlayerGesture.SURRENDER_START); } this.isAiming = true; } else if (this.targetZombie != null) { this.isFiring = true; this.isAiming = true; } else { this.isFiring = false; this.isAiming = false; } if (this.isAiming && Time.realtimeSinceStartup - this.lastAim > Provider.UPDATE_TIME) { this.lastAim = Time.realtimeSinceStartup; Transform transform = null; Vector3 vector7 = Vector3.zero; if (this.targetPlayer != null) { transform = this.targetPlayer.transform; vector7 = this.targetPlayer.look.aim.position; } else if (this.targetZombie != null) { transform = this.targetZombie.transform; vector7 = this.targetZombie.transform.position; switch (this.targetZombie.speciality) { case EZombieSpeciality.NORMAL: vector7 += new Vector3(0f, 1.75f, 0f); break; case EZombieSpeciality.MEGA: vector7 += new Vector3(0f, 2.625f, 0f); break; case EZombieSpeciality.CRAWLER: vector7 += new Vector3(0f, 0.25f, 0f); break; case EZombieSpeciality.SPRINTER: vector7 += new Vector3(0f, 1f, 0f); break; } } if (transform != null) { float num4 = Mathf.Atan2(vector7.x - vector.x, vector7.z - vector.z) * 57.29578f; float num5 = Mathf.Sin((vector7.y - vector.y) / (vector7 - vector).magnitude) * 57.29578f; BarricadeManager.sendAlertSentry(base.transform, num4, num5); } } if (this.isFiring && this.hasWeapon && this.displayItem.state[10] > 0 && !this.isOpen && Time.realtimeSinceStartup - this.lastFire > this.fireTime) { this.lastFire += this.fireTime; if (Time.realtimeSinceStartup - this.lastFire > this.fireTime) { this.lastFire = Time.realtimeSinceStartup; } float num6 = (float)this.displayItem.quality / 100f; if (this.attachments.magazineAsset == null) { return; } byte[] state = this.displayItem.state; int num7 = 10; state[num7] -= 1; if (this.attachments.barrelAsset == null || !this.attachments.barrelAsset.isSilenced || this.displayItem.state[16] == 0) { AlertTool.alert(base.transform.position, 48f); } if (Provider.modeConfigData.Items.Has_Durability && this.displayItem.quality > 0 && Random.value < ((ItemWeaponAsset)this.displayAsset).durability) { if (this.displayItem.quality > ((ItemWeaponAsset)this.displayAsset).wear) { Item displayItem = this.displayItem; displayItem.quality -= ((ItemWeaponAsset)this.displayAsset).wear; } else { this.displayItem.quality = 0; } } float num8 = ((ItemGunAsset)this.displayAsset).spreadAim * ((num6 >= 0.5f) ? 1f : (1f + (1f - num6 * 2f))); if (this.attachments.tacticalAsset != null && this.interact) { num8 *= this.attachments.tacticalAsset.spread; } if (this.attachments.gripAsset != null) { num8 *= this.attachments.gripAsset.spread; } if (this.attachments.barrelAsset != null) { num8 *= this.attachments.barrelAsset.spread; } if (this.attachments.magazineAsset != null) { num8 *= this.attachments.magazineAsset.spread; } if (((ItemGunAsset)this.displayAsset).projectile == null) { BarricadeManager.sendShootSentry(base.transform); byte pellets = this.attachments.magazineAsset.pellets; for (byte b = 0; b < pellets; b += 1) { EPlayerKill eplayerKill = EPlayerKill.NONE; uint num9 = 0u; float num10 = 1f; num10 *= ((num6 >= 0.5f) ? 1f : (0.5f + num6)); Transform transform2; float magnitude3; if (this.targetPlayer != null) { transform2 = this.targetPlayer.transform; magnitude3 = (transform2.position - base.transform.position).magnitude; } else { transform2 = this.targetZombie.transform; magnitude3 = (transform2.position - base.transform.position).magnitude; } float num11 = magnitude3 / ((ItemWeaponAsset)this.displayAsset).range; num11 = 1f - num11; num11 *= 1f - ((ItemGunAsset)this.displayAsset).spreadHip; num11 *= 0.75f; if (transform2 == null || Random.value > num11) { Vector3 vector8 = this.aimTransform.forward; vector8 += this.aimTransform.right * Random.Range(-((ItemGunAsset)this.displayAsset).spreadHip, ((ItemGunAsset)this.displayAsset).spreadHip) * num8; vector8 += this.aimTransform.up * Random.Range(-((ItemGunAsset)this.displayAsset).spreadHip, ((ItemGunAsset)this.displayAsset).spreadHip) * num8; vector8.Normalize(); Ray ray; ray..ctor(this.aimTransform.position, vector8); RaycastInfo raycastInfo = DamageTool.raycast(ray, ((ItemWeaponAsset)this.displayAsset).range, RayMasks.DAMAGE_SERVER); if (!(raycastInfo.transform == null)) { DamageTool.impact(raycastInfo.point, raycastInfo.normal, raycastInfo.material, raycastInfo.vehicle != null || raycastInfo.transform.CompareTag("Barricade") || raycastInfo.transform.CompareTag("Structure") || raycastInfo.transform.CompareTag("Resource")); if (raycastInfo.vehicle != null) { DamageTool.damage(raycastInfo.vehicle, false, Vector3.zero, false, ((ItemGunAsset)this.displayAsset).vehicleDamage, num10, true, out eplayerKill); } else if (raycastInfo.transform != null) { if (raycastInfo.transform.CompareTag("Barricade")) { ushort id; if (ushort.TryParse(raycastInfo.transform.name, out id)) { ItemBarricadeAsset itemBarricadeAsset = (ItemBarricadeAsset)Assets.find(EAssetType.ITEM, id); if (itemBarricadeAsset != null && (itemBarricadeAsset.isVulnerable || ((ItemWeaponAsset)this.displayAsset).isInvulnerable)) { DamageTool.damage(raycastInfo.transform, false, ((ItemGunAsset)this.displayAsset).barricadeDamage, num10, out eplayerKill); } } } else if (raycastInfo.transform.CompareTag("Structure")) { ushort id2; if (ushort.TryParse(raycastInfo.transform.name, out id2)) { ItemStructureAsset itemStructureAsset = (ItemStructureAsset)Assets.find(EAssetType.ITEM, id2); if (itemStructureAsset != null && (itemStructureAsset.isVulnerable || ((ItemWeaponAsset)this.displayAsset).isInvulnerable)) { DamageTool.damage(raycastInfo.transform, false, raycastInfo.direction * Mathf.Ceil((float)this.attachments.magazineAsset.pellets / 2f), ((ItemGunAsset)this.displayAsset).structureDamage, num10, out eplayerKill); } } } else if (raycastInfo.transform.CompareTag("Resource")) { byte x; byte y; ushort index; if (ResourceManager.tryGetRegion(raycastInfo.transform, out x, out y, out index)) { ResourceSpawnpoint resourceSpawnpoint = ResourceManager.getResourceSpawnpoint(x, y, index); if (resourceSpawnpoint != null && !resourceSpawnpoint.isDead && resourceSpawnpoint.asset.bladeID == ((ItemWeaponAsset)this.displayAsset).bladeID) { DamageTool.damage(raycastInfo.transform, raycastInfo.direction * Mathf.Ceil((float)this.attachments.magazineAsset.pellets / 2f), ((ItemGunAsset)this.displayAsset).resourceDamage, num10, 1f, out eplayerKill, out num9); } } } else if (raycastInfo.section < 255) { InteractableObjectRubble component = raycastInfo.transform.GetComponent <InteractableObjectRubble>(); if (component != null && !component.isSectionDead(raycastInfo.section) && (component.asset.rubbleIsVulnerable || ((ItemWeaponAsset)this.displayAsset).isInvulnerable)) { DamageTool.damage(raycastInfo.transform, raycastInfo.direction, raycastInfo.section, ((ItemGunAsset)this.displayAsset).objectDamage, num10, out eplayerKill, out num9); } } } } } else { Vector3 vector9 = Vector3.zero; if (this.targetPlayer != null) { vector9 = this.targetPlayer.look.aim.position; } else if (this.targetZombie != null) { vector9 = this.targetZombie.transform.position; switch (this.targetZombie.speciality) { case EZombieSpeciality.NORMAL: vector9 += new Vector3(0f, 1.75f, 0f); break; case EZombieSpeciality.MEGA: vector9 += new Vector3(0f, 2.625f, 0f); break; case EZombieSpeciality.CRAWLER: vector9 += new Vector3(0f, 0.25f, 0f); break; case EZombieSpeciality.SPRINTER: vector9 += new Vector3(0f, 1f, 0f); break; } } DamageTool.impact(vector9, -this.aimTransform.forward, EPhysicsMaterial.FLESH_DYNAMIC, true); if (this.targetPlayer != null) { DamageTool.damage(this.targetPlayer, EDeathCause.SENTRY, ELimb.SPINE, base.owner, this.aimTransform.forward * Mathf.Ceil((float)this.attachments.magazineAsset.pellets / 2f), ((ItemGunAsset)this.displayAsset).playerDamageMultiplier, num10, true, out eplayerKill); } else if (this.targetZombie != null) { DamageTool.damage(this.targetZombie, ELimb.SPINE, this.aimTransform.forward * Mathf.Ceil((float)this.attachments.magazineAsset.pellets / 2f), ((ItemGunAsset)this.displayAsset).zombieDamageMultiplier, num10, true, out eplayerKill, out num9); } } } } base.rebuildState(); } } bool flag = Time.realtimeSinceStartup - this.lastAlert < 1f; if (flag != this.isAlert) { this.isAlert = flag; if (!Dedicator.isDedicated) { if (this.isAlert) { EffectManager.effect(92, base.transform.position, Vector3.up); } else { EffectManager.effect(93, base.transform.position, Vector3.up); } } if (!this.isAlert) { this.targetYaw = base.transform.localRotation.eulerAngles.y; } } if (this.power != null) { if (this.power.isWired) { if (this.isAlert) { this.lastDrift = Time.realtimeSinceStartup; this.yaw = Mathf.LerpAngle(this.yaw, this.targetYaw, 4f * Time.deltaTime); } else { this.yaw = Mathf.LerpAngle(this.yaw, this.targetYaw + Mathf.Sin(Time.realtimeSinceStartup - this.lastDrift) * 60f, 4f * Time.deltaTime); } this.pitch = Mathf.LerpAngle(this.pitch, this.targetPitch, 4f * Time.deltaTime); this.yawTransform.rotation = Quaternion.Euler(-90f, 0f, this.yaw); this.pitchTransform.localRotation = Quaternion.Euler(0f, -90f, this.pitch); } if (!Dedicator.isDedicated) { if (this.onGameObject != null) { this.onGameObject.SetActive(this.isAlert && this.power.isWired); } if (this.onModelGameObject != null) { this.onModelGameObject.SetActive(this.isAlert); if (this.onMaterial != null) { this.onMaterial.SetColor("_EmissionColor", (!this.isAlert || !this.power.isWired) ? Color.black : this.onMaterial.color); } } if (this.offGameObject != null) { this.offGameObject.SetActive(!this.isAlert && this.power.isWired); } if (this.offModelGameObject != null) { this.offModelGameObject.SetActive(!this.isAlert); if (this.offMaterial != null) { this.offMaterial.SetColor("_EmissionColor", (this.isAlert || !this.power.isWired) ? Color.black : this.offMaterial.color); } } if ((double)(Time.realtimeSinceStartup - this.lastShot) > 0.05 && this.muzzleEmitter != null) { this.muzzleEmitter.GetComponent <Light>().enabled = false; } } } }