/// <summary> /// Close all linked doors in the building /// </summary> /// <param name="privilege"></param> /// <param name="player"></param> private void CloseDoors(BuildingPrivlidge privilege, BasePlayer player) { uint doorCount = 0; BaseEntity baseLock = privilege.GetSlot(BaseEntity.Slot.Lock); if (baseLock is CodeLock) { CodeLock masterLock = baseLock as CodeLock; BuildingManager.Building building = privilege.GetBuilding(); foreach (DecayEntity entity in building.decayEntities) { if (entity.GetSlot(BaseEntity.Slot.Lock) is CodeLock && entity is Door) { CodeLock codeLock = (entity.GetSlot(BaseEntity.Slot.Lock) as CodeLock); if (masterLock.code == codeLock.code && masterLock != codeLock) { if ((entity as Door).HasFlag(BaseEntity.Flags.Open)) { (entity as Door).SetFlag(BaseEntity.Flags.Open, false); (entity as Door).SendNetworkUpdate(); doorCount++; } } } } player.ChatMessage(Lang("ClosedDoors", player.UserIDString, doorCount)); } }
/// <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(); } } } } }
/// <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)); } }