public static Relations getRelationsTo(this long identityId, IMyEntity target, Relations breakOn = Relations.NoOwner) { if (identityId == 0L) { return(Relations.NoOwner); } IMyCubeBlock asBlock = target as IMyCubeBlock; if (asBlock != null) { return(getRelationsTo(identityId, asBlock.OwnerId)); } IMyCubeGrid asGrid = target as IMyCubeGrid; if (asGrid != null) { return(getRelationsTo(identityId, asGrid, breakOn)); } IMyCharacter asChar = target as IMyCharacter; if (asChar != null) { if (asChar.IsBot) { return(Relations.Enemy); } IMyPlayer player = asChar.GetPlayer_Safe(); if (player != null) { return(getRelationsTo(identityId, player.IdentityId)); } Logger.DebugLog("character not found, treating as enemy: " + target.getBestName(), Logger.severity.WARNING); return(Relations.Enemy); } if (target is IMyMeteor) { return(Relations.Enemy); } if (target.IsMissile()) { long missileOwner; if (GuidedMissile.TryGetOwnerId(target.EntityId, out missileOwner)) { return(getRelationsTo(identityId, missileOwner)); } return(Relations.Enemy); } Logger.DebugLog("unknown entity, treating as enemy: " + target.getBestName(), Logger.severity.WARNING); return(Relations.Enemy); }
/// <summary> /// Creates a NetworkNode for a character, checking radio communication. /// </summary> /// <param name="character">The character to create the NetworkNode for.</param> public RelayNode(IMyCharacter character) { IMyPlayer player = character.GetPlayer_Safe(); this.m_debugName = () => player.DisplayName; this.m_ownerId = () => player.IdentityId; this.m_entity = character as IMyEntity; this.m_player = player; this.m_comp_radio = ComponentRadio.CreateRadio(character); Registrar.Add(character as IMyEntity, this); }
/// <summary> /// Creates a NetworkNode for a character, checking radio communication. /// </summary> /// <param name="character">The character to create the NetworkNode for.</param> public RelayNode(IMyCharacter character) { IMyPlayer player = character.GetPlayer_Safe(); this.m_loggingName = () => player.DisplayName; this.m_logger = new Logger(GetType().Name, this.m_loggingName) { MinimumLevel = Logger.severity.INFO }; this.m_ownerId = () => player.PlayerID; this.m_entity = character as IMyEntity; this.m_player = player; this.m_comp_radio = ComponentRadio.CreateRadio(character); Registrar.Add(character as IMyEntity, this); }