/// <summary> /// Clear lock's whitelist /// </summary> /// <param name="privilege"></param> void ClearAuthorizations(BuildingPrivlidge privilege) { BaseEntity baseLock = privilege.GetSlot(BaseEntity.Slot.Lock); if (baseLock is CodeLock) { CodeLock masterLock = baseLock as CodeLock; 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 (masterLock.code == codeLock.code) { codeLock.whitelistPlayers.Clear(); 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 (masterLock.code == codeLock.code) { codeLock.whitelistPlayers.Clear(); codeLock.SendNetworkUpdateImmediate(); } } } } }
void OnItemDeployed(Deployer deployer, BaseEntity entity) { if (entity?.GetParentEntity() != null && (entity.GetParentEntity() is MiniCopter)) { CodeLock cLock = entity.GetComponentInChildren <CodeLock>(); cLock.transform.localPosition = new Vector3(0.0f, 0.3f, 0.298f); cLock.transform.localRotation = Quaternion.Euler(new Vector3(0, 90, 0)); cLock.SendNetworkUpdateImmediate(); } }
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(); }
/// <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(); } } } } }
/// <summary> /// Remove player from lock's whitelist /// </summary> /// <param name="privilege"></param> /// <param name="player"></param> void RemoveAuthorization(BuildingPrivlidge privilege, BasePlayer player) { uint deauthCount = 0; BaseEntity baseLock = privilege.GetSlot(BaseEntity.Slot.Lock); if (baseLock is CodeLock) { CodeLock masterLock = baseLock as CodeLock; 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 (masterLock.code == codeLock.code) { codeLock.whitelistPlayers.Remove(player.userID); codeLock.SendNetworkUpdateImmediate(); deauthCount++; } } } foreach (DecayEntity entity in building.decayEntities) { if (entity.GetSlot(BaseEntity.Slot.Lock) is CodeLock) { CodeLock codeLock = (entity.GetSlot(BaseEntity.Slot.Lock) as CodeLock); if (masterLock.code == codeLock.code) { codeLock.whitelistPlayers.Remove(player.userID); codeLock.SendNetworkUpdateImmediate(); deauthCount++; } } } if (deauthCount > 0) { player.ChatMessage(Lang("RemoveAuthorization", player.UserIDString, player.displayName, deauthCount)); } } }
/// <summary> /// Update all locks following the master lock /// </summary> /// <param name="privilege"></param> /// <param name="newCode"></param> private uint UpdateCode(BuildingPrivlidge privilege, string newCode) { BaseEntity baseLock = privilege.GetSlot(BaseEntity.Slot.Lock); uint codeLocks = 0; if (baseLock is CodeLock) { CodeLock masterLock = baseLock as CodeLock; 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 (masterLock.code == codeLock.code && masterLock != codeLock) { codeLock.code = newCode; codeLock.SendNetworkUpdateImmediate(); codeLocks++; } } } foreach (DecayEntity entity in building.decayEntities) { if (entity.GetSlot(BaseEntity.Slot.Lock) is CodeLock) { CodeLock codeLock = (entity.GetSlot(BaseEntity.Slot.Lock) as CodeLock); if (masterLock.code == codeLock.code && masterLock != codeLock) { codeLock.code = newCode; codeLock.SendNetworkUpdateImmediate(); codeLocks++; } } } } return(codeLocks); }
/// <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)); } }