public override void Authorize(BasePlayer player) { if (!CodeLock.guestPlayers.Contains(player.userID)) { CodeLock.guestPlayers.Add(player.userID); } CodeLock.SendNetworkUpdate(); }
public static void On_DoorCode(CodeLock doorLock, BaseEntity.RPCMessage rpc) { if (!doorLock.IsLocked()) { return; } string code = rpc.read.String(); DoorCodeEvent dc = new DoorCodeEvent(doorLock, rpc.player, code); OnNext("On_DoorCode", dc); if ((!dc.IsCorrect() || !dc.allowed) && !dc.forceAllow) { Effect.server.Run(doorLock.effectDenied.resourcePath, doorLock, 0u, Vector3.zero, Vector3.forward); rpc.player.Hurt(1f, Rust.DamageType.ElectricShock, doorLock, true); return; } Effect.server.Run(doorLock.effectUnlocked.resourcePath, doorLock, 0u, Vector3.zero, Vector3.forward); doorLock.SetFlag(BaseEntity.Flags.Locked, false); doorLock.SendNetworkUpdate(BasePlayer.NetworkQueue.Update); List <ulong> whitelist = new List <ulong>(); whitelist = (List <ulong>)doorLock.GetFieldValue("whitelistPlayers"); if (!whitelist.Contains(rpc.player.userID)) { whitelist.Add(rpc.player.userID); doorLock.SetFieldValue("whitelistPlayers", whitelist); } }
private bool RemoveFromWhiteList(CodeLock cl, BasePlayer player) { List <ulong> whitelist = codelockwhitelist.GetValue(cl) as List <ulong>; if (!whitelist.Contains(player.userID)) { return(false); } whitelist.Remove(player.userID); codelockwhitelist.SetValue(cl, whitelist); cl.SendNetworkUpdate(); return(true); }
/// <summary> /// Called from <c>CodeLock.UnlockWithCode(BaseEntity.RPCMessage)</c> /// </summary> public static void On_DoorCodeEntered(CodeLock codeLock, BaseEntity.RPCMessage rpc) { if (!codeLock.IsLocked()) return; string code = rpc.read.String(); Pre<DoorCodeEvent> preDoorCodeEvent = new Pre<DoorCodeEvent>(codeLock, rpc.player, code); OnNext("Pre_DoorCodeEntered", preDoorCodeEvent); if (preDoorCodeEvent.IsCanceled || (!preDoorCodeEvent.Event.IsCorrect() && !preDoorCodeEvent.Event.ForceAllow)) { Effect.server.Run(codeLock.effectDenied.resourcePath, codeLock, 0u, Vector3.zero, Vector3.forward); rpc.player.Hurt(1f, global::Rust.DamageType.ElectricShock, codeLock, true); return; } Effect.server.Run(codeLock.effectUnlocked.resourcePath, codeLock, 0u, Vector3.zero, Vector3.forward); codeLock.SetFlag(BaseEntity.Flags.Locked, false); codeLock.SendNetworkUpdate(BasePlayer.NetworkQueue.Update); List<ulong> whitelist = new List<ulong>(); whitelist = (List<ulong>) codeLock.GetFieldValue("whitelistPlayers"); if (!whitelist.Contains(rpc.player.userID)) { whitelist.Add(rpc.player.userID); codeLock.SetFieldValue("whitelistPlayers", whitelist); } OnNext("On_DoorCodeEntered", preDoorCodeEvent.Event); }
public static void DoorCode(CodeLock doorLock, BaseEntity.RPCMessage rpc) { if (!doorLock.IsLocked()) return; string code = rpc.read.String(); DoorCodeEvent dc = new DoorCodeEvent(doorLock, rpc.player, code); OnDoorCode.OnNext(dc); if ((!dc.IsCorrect() || !dc.allowed) && !dc.forceAllow) { Effect.server.Run(doorLock.effectDenied, doorLock, 0u, Vector3.zero, Vector3.forward); rpc.player.Hurt(1f, Rust.DamageType.ElectricShock, doorLock, true); return; } Effect.server.Run(doorLock.effectUnlocked, doorLock, 0u, Vector3.zero, Vector3.forward); doorLock.SetFlag(BaseEntity.Flags.Locked, false); doorLock.SendNetworkUpdate(BasePlayer.NetworkQueue.Update); List<ulong> whitelist = new List<ulong>(); whitelist = (List<ulong>)doorLock.GetFieldValue("whitelistPlayers"); if (!whitelist.Contains(rpc.player.userID)) { whitelist.Add(rpc.player.userID); doorLock.SetFieldValue("whitelistPlayers", whitelist); } }
private object OnCodeEntered(CodeLock codeLock, BasePlayer player, string code) { if (player.IPlayer.HasPermission(PermissionIgnore)) { return(null); } var isCodeAdmin = codeLock.code == code; var isCodeGuest = codeLock.guestCode == code; if (!isCodeAdmin && !isCodeGuest) { return(null); } var limit = Configuration.Limit.Find(codeLock.ShortPrefabName); if (limit == null) { return(null); } var total = codeLock.guestPlayers.Count + codeLock.whitelistPlayers.Count; if (total < limit.MaxAuthorized) { return(null); } var entity = codeLock.GetParentEntity(); if (entity == null || !entity.IsValid()) { return(null); } if (limit.NoDecaying && IsDecaying(entity.GetBuildingPrivilege())) { return(null); } if (limit.Deauthorize) { if (isCodeAdmin && codeLock.whitelistPlayers.Count > 0) { if (limit.DeauthorizeAll) { codeLock.whitelistPlayers.Clear(); } else { codeLock.whitelistPlayers.RemoveAt(0); } codeLock.SendNetworkUpdate(); } if (isCodeGuest && codeLock.guestPlayers.Count > 0) { if (limit.DeauthorizeAll) { codeLock.guestPlayers.Clear(); } else { codeLock.guestPlayers.RemoveAt(0); } codeLock.SendNetworkUpdate(); } NotifyDeauthorize(limit, entity, player); } else { NotifyAuthorize(limit, entity, player); } if (limit.Enforce) { return(true); } return(null); }