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); } }
public void Whitelist() { List <ulong> whitelist = new List <ulong>(); whitelist = (List <ulong>)codeLock.GetFieldValue("whitelistPlayers"); whitelist.Add(Player.GameID); codeLock.SetFieldValue("whitelistPlayers", whitelist); }
public StructureComponent(BuildingPart bp, SerializedVector3 v3, SerializedQuaternion q) { Grade = bp.buildingBlock.grade; Prefab = bp.buildingBlock.LookupPrefabName(); LocalPosition = v3; LocalRotation = q; Health = (float)((int)Math.Floor((double)(bp.Health / 85)) * 85); if (bp.buildingBlock.HasSlot(BaseEntity.Slot.Lock)) { var baseLock = bp.buildingBlock.GetSlot(BaseEntity.Slot.Lock) as BaseLock; if (baseLock == null) { HasCodeLock = false; HasKeyLock = false; } else if (baseLock.GetComponent <CodeLock>()) { HasCodeLock = true; HasKeyLock = false; CodeLock codeLock = baseLock.GetComponent <CodeLock>(); if (!string.IsNullOrEmpty((string)codeLock.GetFieldValue("code"))) { LockCode = (string)codeLock.GetFieldValue("code"); LockWList = new List <ulong>(); LockWList = (List <ulong>)codeLock.GetFieldValue("whitelistPlayers"); } } else if (baseLock.GetComponent <KeyLock>()) { HasCodeLock = false; HasKeyLock = true; KeyLock keyLock = baseLock.GetComponent <KeyLock>(); int keyCode = (int)keyLock.GetFieldValue("keyCode"); keyCode = (bool)keyLock.GetFieldValue("firstKeyCreated") ? keyCode |= 0x80 : (int)keyLock.GetFieldValue("keyCode"); LockCode = keyCode.ToString(); } } }
/// <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 DeployableComponent(Deployable deployable, SerializedVector3 v3, SerializedQuaternion q) { Prefab = deployable.GetComponent <BaseNetworkable>().LookupPrefabName(); LocalPosition = v3; LocalRotation = q; if (deployable.GetComponent <SleepingBag>()) { SleepingBag sleepingBag = deployable.GetComponent <SleepingBag>(); DeployedBy = sleepingBag.deployerUserID; BagName = sleepingBag.niceName; HasOwner = true; HasStorage = false; HasPainting = false; IsCupBoard = false; } else if (deployable.GetComponent <BuildingPrivlidge>()) { IsCupBoard = true; BuildingPrivlidge buildingPrivlidge = deployable.GetComponent <BuildingPrivlidge>(); AuthedPlayers = new List <ProtoBuf.PlayerNameID>(); AuthedPlayers = buildingPrivlidge.authorizedPlayers; } else if (deployable.GetComponent <StorageContainer>()) { HasOwner = false; HasStorage = true; HasPainting = false; IsCupBoard = false; StorageContainer storageContainer = deployable.GetComponent <StorageContainer>(); ItemList = new List <Dictionary <string, object> >(); foreach (Item item in storageContainer.inventory.itemList) { var itemData = new Dictionary <string, object>(); itemData.Add("blueprint", item.IsBlueprint()); itemData.Add("id", item.info.itemid); itemData.Add("amount", item.amount); ItemList.Add(itemData); } if (storageContainer.HasSlot(BaseEntity.Slot.Lock)) { var baseLock = storageContainer.GetSlot(BaseEntity.Slot.Lock) as BaseLock; if (baseLock == null) { HasCodeLock = false; HasKeyLock = false; } else if (baseLock.GetComponent <CodeLock>()) { HasCodeLock = true; HasKeyLock = false; CodeLock codeLock = baseLock.GetComponent <CodeLock>(); if (!string.IsNullOrEmpty((string)codeLock.GetFieldValue("code"))) { LockCode = (string)codeLock.GetFieldValue("code"); LockWList = new List <ulong>(); LockWList = (List <ulong>)codeLock.GetFieldValue("whitelistPlayers"); } } else if (baseLock.GetComponent <KeyLock>()) { HasCodeLock = false; HasKeyLock = true; KeyLock keyLock = baseLock.GetComponent <KeyLock>(); int keyCode = (int)keyLock.GetFieldValue("keyCode"); keyCode = (bool)keyLock.GetFieldValue("firstKeyCreated") ? keyCode |= 0x80 : (int)keyLock.GetFieldValue("keyCode"); LockCode = keyCode.ToString(); } } } else if (deployable.GetComponent <Signage>()) { HasOwner = false; HasStorage = false; HasPainting = true; IsCupBoard = false; Signage signage = deployable.GetComponent <Signage>(); byte[] tempImg = FileStorage.server.Get(signage.textureID, FileStorage.Type.png, signage.net.ID); if (signage.textureID > 0 && tempImg != null) { Painting = tempImg; } PaintingLocked = signage.IsLocked(); } else { HasOwner = false; HasStorage = false; HasPainting = false; IsCupBoard = false; } }
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); } }
public DoorCodeEvent(CodeLock doorLock, BaseEntity.RPCMessage msg) { this.msg = msg; codeLock = doorLock; doorCode = (string)doorLock.GetFieldValue("code"); }