コード例 #1
0
ファイル: DoorCodeEvent.cs プロジェクト: professorlust/Pluton
 public void RemoveCode()
 {
     codeLock.SetFieldValue("code", "");
     codeLock.SetFieldValue("hasCode", false);
     codeLock.SetFlag(BaseEntity.Flags.Locked, false);
     Allow();
 }
コード例 #2
0
        ////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Create a CodeLock add the players code to it and add them to the whitelist. Then place the codelock on the door
        /// </summary>
        /// <param name="player">player who placed the door</param>
        /// <param name="door">the door the codelock is going to be attached too</param>
        /// <param name="container">the container the codelock is going to be attached too</param>
        /// ////////////////////////////////////////////////////////////////////////
        private void AddLockToEntity(BasePlayer player, BaseEntity entity, string code)
        {
            //Create a CodeLock
            BaseEntity lockentity = GameManager.server.CreateEntity(CodeLockPrefabLocation, Vector3.zero, new Quaternion());

            lockentity.OnDeployed(entity);

            //Add the player to the codelock whitelist
            List <ulong> whitelist = (List <ulong>)_whitelistField.GetValue(lockentity);

            whitelist.Add(player.userID);
            _whitelistField.SetValue(lockentity, whitelist);

            if (ValidCode(code))
            {
                CodeLock @lock = lockentity.GetComponent <CodeLock>();
                _codelockField.SetValue(@lock, code);
                @lock.SetFlag(BaseEntity.Flags.Locked, true);
            }
            else
            {
                PrintToChat(player, $"{_pluginConfig.Prefix} {Lang("ParseFailed", player.UserIDString, code)}");
            }

            //Add the codelock to the door
            if (!lockentity)
            {
                return;
            }
            lockentity.gameObject.Identity();
            lockentity.SetParent(entity, "lock");
            lockentity.Spawn();
            entity.SetSlot(BaseEntity.Slot.Lock, lockentity);
        }
コード例 #3
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);
            }
        }
コード例 #4
0
        void AddLock(BaseEntity ent)
        {
            CodeLock alock = GameManager.server.CreateEntity(lockPrefab) as CodeLock;

            alock.Spawn();
            alock.code = "789456789123";
            alock.SetParent(ent, ent.GetSlotAnchorName(BaseEntity.Slot.Lock));
            alock.transform.localScale += new Vector3(-50, -50, -50);
            ent.SetSlot(BaseEntity.Slot.Lock, alock);
            alock.SetFlag(BaseEntity.Flags.Locked, true);
            alock.SendNetworkUpdateImmediate();
        }
コード例 #5
0
        /// <summary>
        /// Initialize locks in a building
        /// </summary>
        /// <param name="privilege"></param>
        private void InitializeMasterLock(BuildingPrivlidge privilege)
        {
            BaseEntity baseLock = privilege.GetSlot(BaseEntity.Slot.Lock);

            if (baseLock is CodeLock)
            {
                string code = (baseLock as CodeLock).code;

                BuildingManager.Building building = privilege.GetBuilding();
                foreach (BuildingBlock block in building.buildingBlocks)
                {
                    if (block.GetSlot(BaseEntity.Slot.Lock) is CodeLock)
                    {
                        CodeLock codeLock = (block.GetSlot(BaseEntity.Slot.Lock) as CodeLock);
                        if (!codeLock.IsLocked())
                        {
                            codeLock.code = code;
                            codeLock.SetFlag(BaseEntity.Flags.Locked, true);
                            foreach (ProtoBuf.PlayerNameID player in privilege.authorizedPlayers)
                            {
                                codeLock.whitelistPlayers.Add(player.userid);
                            }
                            codeLock.SendNetworkUpdateImmediate();
                        }
                    }
                }
                foreach (DecayEntity entity in building.decayEntities)
                {
                    if (entity.GetSlot(BaseEntity.Slot.Lock) is CodeLock)
                    {
                        CodeLock codeLock = (entity.GetSlot(BaseEntity.Slot.Lock) as CodeLock);
                        if (!codeLock.IsLocked())
                        {
                            codeLock.code = code;
                            codeLock.SetFlag(BaseEntity.Flags.Locked, true);
                            foreach (ProtoBuf.PlayerNameID player in privilege.authorizedPlayers)
                            {
                                codeLock.whitelistPlayers.Add(player.userid);
                            }
                            codeLock.SendNetworkUpdateImmediate();
                        }
                    }
                }
            }
        }
コード例 #6
0
        private void PlayerSetLocks(BasePlayer player, string code, bool guest = false)
        {
            bool HasLocks = false;
            int  num      = 0;

            foreach (var entry in UnityEngine.Object.FindObjectsOfType <BaseEntity>().Where(k => k.GetSlot(BaseEntity.Slot.Lock) != null && (k.OwnerID == player.userID || (player.IsAdmin && k.OwnerID == 0))))
            {
                BaseEntity lockSlot = entry.GetSlot(BaseEntity.Slot.Lock);
                CodeLock   codelock = lockSlot?.GetComponent <CodeLock>();
                if (codelock != null)
                {
                    HasLocks = true;
                    if (guest)
                    {
                        CurrentGuestCode.SetValue(codelock, code);
                        hasGuestCode.SetValue(codelock, true);
                        hasCode.SetValue(codelock, true);
                    }
                    else
                    {
                        CurrentCode.SetValue(codelock, code);
                        hasGuestCode.SetValue(codelock, true);
                        hasCode.SetValue(codelock, true);
                        List <ulong> whitelisted = CodeLockWhiteList.GetValue(codelock) as List <ulong>;
                        if (!whitelisted.Contains(player.userID))
                        {
                            whitelisted.Add(player.userID);
                        }
                        CodeLockWhiteList.SetValue(codelock, whitelisted);
                        codelock.SetFlag(BaseEntity.Flags.Locked, true);
                    }
                    num++;
                }
            }
            if (!HasLocks)
            {
                GetSendMSG(player, "NoCodeLocksFound");
            }
            else
            {
                GetSendMSG(player, "NumberCodeLocksReset", num.ToString());
            }
        }
コード例 #7
0
        void SetupCodelock(ulong uid, CodeLock codeLock)
        {
            codeLock.OwnerID = uid;
            codeLocks.Add(codeLock);
            var owner = GetCodeLockOwner(codeLock);

            var cfg = GetPlayerCfg(owner);

            if (!cfg.AutoLock)
            {
                return;
            }

            codeLock.code = RandomString(4);
            codeLock.SetFlag(BaseEntity.Flags.Locked, true);
            codeLock.whitelistPlayers = new List <ulong>()
            {
                owner
            };
        }
コード例 #8
0
 /// <summary>
 /// Set code on new lock in master lock privilege area
 /// </summary>
 /// <param name="entity"></param>
 void OnEntitySpawned(BaseNetworkable entity)
 {
     if (!initialized)
     {
         return;
     }
     if (entity is CodeLock)
     {
         CodeLock          codeLock  = entity as CodeLock;
         BuildingPrivlidge privilege = codeLock.GetBuildingPrivilege();
         if (!privilege)
         {
             return;
         }
         if (data.buildings.ContainsKey(privilege.net.ID))
         {
             if (data.buildings[privilege.net.ID])
             {
                 BaseEntity lockEntity = privilege.GetSlot(BaseEntity.Slot.Lock);
                 if (lockEntity is CodeLock)
                 {
                     codeLock.code = (lockEntity as CodeLock).code;
                     codeLock.SetFlag(BaseEntity.Flags.Locked, true);
                     foreach (ProtoBuf.PlayerNameID player in privilege.authorizedPlayers)
                     {
                         codeLock.whitelistPlayers.Add(player.userid);
                     }
                     codeLock.SendNetworkUpdateImmediate();
                 }
             }
         }
     }
     else if (entity is BuildingPrivlidge && (bool)Config["Display Tooltips"])
     {
         BasePlayer player = BasePlayer.FindByID((entity as BuildingPrivlidge).OwnerID);
         ShowGameTip(player, Lang("AddLock", player.UserIDString));
     }
 }
コード例 #9
0
ファイル: Hooks.cs プロジェクト: Notulp/Pluton.Rust
        /// <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);
        }
コード例 #10
0
ファイル: Hooks.cs プロジェクト: Viproz/Pluton
 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);
     }
 }
コード例 #11
0
 public void Build(Vector3 spawnAt)
 {
     foreach (StructureComponent component in StructureComponents.Values)
     {
         Vector3    v3  = (component.LocalPosition.ToVector3() + spawnAt);
         BaseEntity ent = GameManager.server.CreateEntity(component.Prefab, v3, component.LocalRotation.ToQuaternion());
         ent.SpawnAsMapEntity();
         BuildingBlock bb = ent.GetComponent <BuildingBlock>();
         bb.blockDefinition = PrefabAttribute.server.Find <Construction>(bb.prefabID);
         bb.grade           = component.Grade;
         bb.health          = component.Health;
         if (bb.HasSlot(BaseEntity.Slot.Lock))
         {
             if (component.HasCodeLock)
             {
                 BaseEntity baseEntity = GameManager.server.CreateEntity("build/locks/lock.code", Vector3.zero, new Quaternion());
                 baseEntity.OnDeployed(bb);
                 if (!string.IsNullOrEmpty(component.LockCode))
                 {
                     CodeLock codeLock = baseEntity.GetComponent <CodeLock>();
                     codeLock.SetFlag(BaseEntity.Flags.Locked, true);
                     codeLock.SetFieldValue("code", component.LockCode);
                     codeLock.SetFieldValue("whitelistPlayers", component.LockWList);
                 }
                 baseEntity.gameObject.Identity();
                 baseEntity.SetParent(bb, "lock");
                 baseEntity.Spawn();
                 bb.SetSlot(BaseEntity.Slot.Lock, baseEntity);
             }
             else if (component.HasKeyLock)
             {
                 BaseEntity baseEntity = GameManager.server.CreateEntity("build/locks/lock.key", Vector3.zero, new Quaternion());
                 baseEntity.OnDeployed(bb);
                 int code = int.Parse(component.LockCode);
                 if ((code & 0x80) != 0)
                 {
                     KeyLock keyLock = baseEntity.GetComponent <KeyLock>();
                     keyLock.SetFieldValue("keycode", (code & 0x7F));
                     keyLock.SetFieldValue("firstKeyCreated", true);
                     keyLock.SetFlag(BaseEntity.Flags.Locked, true);
                 }
                 baseEntity.gameObject.Identity();
                 baseEntity.SetParent(bb, "lock");
                 baseEntity.Spawn();
                 bb.SetSlot(BaseEntity.Slot.Lock, baseEntity);
             }
         }
         bb.SendNetworkUpdateImmediate();
     }
     foreach (DeployableComponent component in DeployableComponents.Values)
     {
         Vector3    v3  = (component.LocalPosition.ToVector3() + spawnAt);
         BaseEntity ent = GameManager.server.CreateEntity(component.Prefab, v3, component.LocalRotation.ToQuaternion());
         ent.SpawnAsMapEntity();
         if (component.HasOwner)
         {
             SleepingBag sleepingBag = ent.GetComponent <SleepingBag>();
             sleepingBag.deployerUserID = component.DeployedBy;
             sleepingBag.niceName       = component.BagName;
         }
         else if (component.IsCupBoard)
         {
             BuildingPrivlidge buildingPrivlidge = ent.GetComponent <BuildingPrivlidge>();
             buildingPrivlidge.authorizedPlayers = component.AuthedPlayers;
         }
         else if (component.HasStorage)
         {
             StorageContainer storageContainer = ent.GetComponent <StorageContainer>();
             var items = component.ItemList;
             foreach (var item in items)
             {
                 Item newItem = ItemManager.CreateByItemID((int)item["id"], (int)item["amount"], (bool)item["blueprint"]);
                 newItem.MoveToContainer(storageContainer.inventory);
             }
             if (ent.HasSlot(BaseEntity.Slot.Lock))
             {
                 if (component.HasCodeLock)
                 {
                     BaseEntity baseEntity = GameManager.server.CreateEntity("build/locks/lock.code", Vector3.zero, new Quaternion());
                     baseEntity.OnDeployed(ent);
                     if (!string.IsNullOrEmpty(component.LockCode))
                     {
                         CodeLock codeLock = baseEntity.GetComponent <CodeLock>();
                         codeLock.SetFlag(BaseEntity.Flags.Locked, true);
                         codeLock.SetFieldValue("code", component.LockCode);
                         codeLock.SetFieldValue("whitelistPlayers", component.LockWList);
                     }
                     baseEntity.gameObject.Identity();
                     baseEntity.SetParent(ent, "lock");
                     baseEntity.Spawn();
                     ent.SetSlot(BaseEntity.Slot.Lock, baseEntity);
                 }
                 else if (component.HasKeyLock)
                 {
                     BaseEntity baseEntity = GameManager.server.CreateEntity("build/locks/lock.key", Vector3.zero, new Quaternion());
                     baseEntity.OnDeployed(ent);
                     int code = int.Parse(component.LockCode);
                     if ((code & 0x80) != 0)
                     {
                         KeyLock keyLock = baseEntity.GetComponent <KeyLock>();
                         keyLock.SetFieldValue("keycode", (code & 0x7F));
                         keyLock.SetFieldValue("firstKeyCreated", true);
                         keyLock.SetFlag(BaseEntity.Flags.Locked, true);
                     }
                     baseEntity.gameObject.Identity();
                     baseEntity.SetParent(ent, "lock");
                     baseEntity.Spawn();
                     ent.SetSlot(BaseEntity.Slot.Lock, baseEntity);
                 }
             }
         }
         else if (component.HasPainting)
         {
             Signage signage = ent.GetComponent <Signage>();
             if (component.Painting != null)
             {
                 byte[] painting = component.Painting;
                 signage.textureID = FileStorage.server.Store(painting, FileStorage.Type.png, signage.net.ID);
             }
             if (component.PaintingLocked)
             {
                 signage.SetFlag(BaseEntity.Flags.Locked, true);
             }
             signage.SendNetworkUpdate();
         }
         ent.SendNetworkUpdateImmediate();
     }
     foreach (SpawnableComponent component in SpawnableComponents.Values)
     {
         Vector3    v3  = (component.LocalPosition.ToVector3() + spawnAt);
         BaseEntity ent = GameManager.server.CreateEntity(component.Prefab, v3, component.LocalRotation.ToQuaternion());
         ent.SpawnAsMapEntity();
         ent.SendNetworkUpdateImmediate();
     }
 }
コード例 #12
0
        private void CmdLockQuarry(IPlayer iplayer)
        {
            if (iplayer == null)
            {
                return;
            }
            BasePlayer player = iplayer.Object as BasePlayer;

            if (player == null)
            {
                return;
            }

            if (configData.globalSettings.usePermission && !permission.UserHasPermission(iplayer.Id, PERMISSION_USE))
            {
                if (!configData.globalSettings.adminsAllowed || !iplayer.IsAdmin)
                {
                    Print(iplayer, Lang("NotAllowed", iplayer.Id));
                    return;
                }
            }

            RaycastHit rhit;
            BaseEntity entity = null;

            if (Physics.Raycast(player.eyes.HeadRay(), out rhit))
            {
                entity = rhit.GetEntity();
            }
            if (entity == null)
            {
                Print(iplayer, Lang("NotLookingAtQuarry", iplayer.Id));
                return;
            }

            Vector3 cordinates;

            if (entity.ShortPrefabName == "mining.pumpjack")
            {
                cordinates = new Vector3(-3.38f, 6.30f, -0.30f);
            }
            else if (entity.ShortPrefabName == "mining_quarry")
            {
                cordinates = new Vector3(1.35f, 10.15f, 0.00f);
            }
            else
            {
                Print(iplayer, Lang("NotAQuarry", iplayer.Id));
                return;
            }

            if (entity.OwnerID != player.userID)
            {
                Print(iplayer, Lang("Ownership", iplayer.Id));
                return;
            }

            if (entity.GetComponentInChildren <CodeLock>() != null)
            {
                Print(iplayer, Lang("Already", iplayer.Id));
                return;
            }

            if (player.inventory.FindItemID(1159991980) == null)
            {
                Print(iplayer, Lang("NoLock", iplayer.Id));
                return;
            }

            player.inventory.Take(null, 1159991980, 1);
            CodeLock codelock = GameManager.server.CreateEntity("assets/prefabs/locks/keypad/lock.code.prefab", cordinates) as CodeLock;

            if (codelock != null)
            {
                codelock.Spawn();
                codelock.SetParent(entity.GetComponent <BaseResourceExtractor>());
                if (configData.globalSettings.autoLock)
                {
                    codelock.code = Random.Range(1000, 9999).ToString();
                    codelock.SetFlag(BaseEntity.Flags.Locked, true);
                    codelock.whitelistPlayers.Add(player.userID);
                }
                Print(iplayer, Lang("Added", iplayer.Id));
            }
        }
コード例 #13
0
 public void SetIsLocked(bool locked)
 {
     PlayEffectAtEntity(locked ? CodeLock.effectLocked : CodeLock.effectUnlocked);
     CodeLock.SetFlag(BaseEntity.Flags.Locked, locked, false);
     CodeLock.SendNetworkUpdate();
 }