public static bool Prefix(NetworkConnection conn, DisarmMessage msg) { try { if (!DisarmingHandlers.ServerCheckCooldown(conn) || !ReferenceHub.TryGetHub(conn.identity.gameObject, out ReferenceHub hub)) { return(false); } if (!msg.PlayerIsNull) { Vector3 vector3 = msg.PlayerToDisarm.transform.position - hub.transform.position; if (vector3.sqrMagnitude > 20.0 || (msg.PlayerToDisarm.inventory.CurInstance is not null && msg.PlayerToDisarm.inventory.CurInstance.TierFlags != ItemTierFlags.Common)) { return(false); } } bool flag1 = !msg.PlayerIsNull && msg.PlayerToDisarm.inventory.IsDisarmed(); bool flag2 = !msg.PlayerIsNull && hub.CanDisarm(msg.PlayerToDisarm); if (flag1 && !msg.Disarm) { if (!hub.inventory.IsDisarmed()) { var ev = new RemovingHandcuffsEventArgs(API.Features.Player.Get(hub), API.Features.Player.Get(msg.PlayerToDisarm)); Player.OnRemovingHandcuffs(ev); if (!ev.IsAllowed) { return(false); } msg.PlayerToDisarm.inventory.SetDisarmedStatus(null); } } else if (!flag1 & flag2 && msg.Disarm) { if (msg.PlayerToDisarm.inventory.CurInstance is null || msg.PlayerToDisarm.inventory.CurInstance.CanHolster()) { if (msg.PlayerToDisarm.characterClassManager.CurRole.team == Team.MTF && hub.characterClassManager.CurClass == RoleType.ClassD) { AchievementHandlerBase.ServerAchieve(hub.networkIdentity.connectionToClient, AchievementName.TablesHaveTurned); } var ev = new HandcuffingEventArgs(API.Features.Player.Get(hub), API.Features.Player.Get(msg.PlayerToDisarm)); Player.OnHandcuffing(ev); if (!ev.IsAllowed) { return(false); } msg.PlayerToDisarm.inventory.SetDisarmedStatus(hub.inventory); } } else { hub.networkIdentity.connectionToClient.Send <DisarmedPlayersListMessage>(DisarmingHandlers.NewDisarmedList, 0); return(false); } DisarmingHandlers.NewDisarmedList.SendToAuthenticated <DisarmedPlayersListMessage>(); return(false); } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.RemovingHandcuffs: {e}\n{e.StackTrace}"); return(true); } }
private static bool OnDisarm(NetworkConnection conn, DisarmMessage msg) { try { var cuffer = conn.GetPlayer(); var target = msg.PlayerToDisarm?.GetPlayer(); if (!msg.PlayerIsNull) { if ((msg.PlayerToDisarm.transform.position - cuffer.Position).sqrMagnitude > 20f) { return(false); } if (msg.PlayerToDisarm.inventory.CurInstance != null && msg.PlayerToDisarm.inventory.CurInstance.TierFlags != ItemTierFlags.Common) { return(false); } } var flag = !msg.PlayerIsNull && msg.PlayerToDisarm.inventory.IsDisarmed(); var flag2 = !msg.PlayerIsNull && DisarmedPlayers.CanDisarm(cuffer.Hub, msg.PlayerToDisarm); if (flag && !msg.Disarm) { if (!cuffer.IsCuffed) { SynapseController.Server.Events.Player.InvokeUncuff(cuffer, target, out var allow); if (!allow) { return(false); } msg.PlayerToDisarm.inventory.SetDisarmedStatus(null); } } else { if (flag || !flag2 || !msg.Disarm) { cuffer.NetworkIdentity.connectionToClient.Send(DisarmingHandlers.NewDisarmedList, 0); return(false); } if (msg.PlayerToDisarm.inventory.CurInstance == null || msg.PlayerToDisarm.inventory.CurInstance.CanHolster()) { SynapseController.Server.Events.Player.InvokePlayerCuffTargetEvent(target, cuffer, out var allow2); if (!allow2) { return(false); } msg.PlayerToDisarm.inventory.SetDisarmedStatus(cuffer.VanillaInventory); } } NetworkServer.SendToAll(DisarmingHandlers.NewDisarmedList, 0, false); return(false); } catch (Exception e) { Synapse.Api.Logger.Get.Error($"Synapse-Event: PlayerCuffTarget event failed!!\n{e}"); return(true); } }