Esempio n. 1
0
 public override void Authorize(BasePlayer player)
 {
     if (!CodeLock.guestPlayers.Contains(player.userID))
     {
         CodeLock.guestPlayers.Add(player.userID);
     }
     CodeLock.SendNetworkUpdate();
 }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
 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);
     }
 }
Esempio n. 6
0
        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);
        }