public bool CheckPlayerExempt(ProtectedItem.ProtectionSettings settings, MyCubeGrid grid, ulong remoteUserId ) { if ( settings.AllExempt ) return true; if (settings.AdminExempt && PlayerManager.Instance.IsUserAdmin(remoteUserId)) return true; long playerId = PlayerMap.Instance.GetFastPlayerIdFromSteamId( remoteUserId ); if (settings.BigOwnerExempt) { //fast check to see if the player's current live identity is an owner if (grid.BigOwners.Contains(playerId)) return true; //check old, dead identities. this is much slower var playerIds = PlayerMap.Instance.GetPlayerIdsFromSteamId(remoteUserId, false); foreach (var owner in grid.BigOwners) if (playerIds.Contains(owner)) return true; } if ( settings.SmallOwnerExempt ) { //fast check to see if the player's current live identity is an owner if ( grid.SmallOwners.Contains( playerId ) ) return true; //check old, dead identities. this is much slower var playerIds = PlayerMap.Instance.GetPlayerIdsFromSteamId( remoteUserId, false ); foreach ( var owner in grid.SmallOwners ) if ( playerIds.Contains( owner ) ) return true; } if ( settings.FactionExempt && grid.BigOwners.Count > 0) { var fac = MySession.Static.Factions.GetPlayerFaction( grid.BigOwners[0] ); if ( fac != null && fac.IsMember( playerId ) ) return true; } if (settings.Factions == null) return false; foreach ( var facId in settings.Factions ) { var fac = MySession.Static.Factions.TryGetFactionById( facId ); if ( fac != null && fac.IsMember( playerId ) ) return true; } //if ( settings.ExemptSteamIds.Contains( remoteUserId.ToString() ) ) // return true; return false; }
private void ProtectedEntity(IMyEntity entity, ProtectedItem item) { //Logging.WriteLineAndConsole(string.Format("Protecting: {0}", entity.EntityId)); //CubeGridEntity gridEntity = new CubeGridEntity((MyObjectBuilder_CubeGrid)entity.GetObjectBuilder(), entity); CubeGridEntity gridEntity = (CubeGridEntity)GameEntityManager.GetEntity(entity.EntityId); MyObjectBuilder_CubeGrid grid = (MyObjectBuilder_CubeGrid)entity.GetObjectBuilder(); int count = 0; while (gridEntity.IsLoading) { if (count >= 20) return; Thread.Sleep(100); count++; } bool found = false; /* foreach(CubeBlockEntity block in gridEntity.CubeBlocks) { if (block.IntegrityPercent != item.IntegrityIncrease || block.BuildPercent != item.IntegrityIncrease || block.BoneDamage > 0f) { found = true; block.FixBones(0, 100); block.IntegrityPercent = item.IntegrityIncrease; block.BuildPercent = item.IntegrityIncrease; } } */ if(found) Logging.WriteLineAndConsole(string.Format("Repaired Grid: {0}", gridEntity.EntityId)); }