private static void CheckForCharacterInteractionAtTilePostfix(Utility __instance, Vector2 tileLocation, Farmer who) { NPC character = Game1.currentLocation.isCharacterAtTile(tileLocation); if (CompanionManager.IsCustomCompanion(character)) { Companion companion = character as Companion; if (companion.owner is null && companion.model != null && !String.IsNullOrEmpty(companion.model.InspectionDialogue)) { Game1.mouseCursor = 4; Game1.mouseCursorTransparency = Utility.tileWithinRadiusOfPlayer((int)tileLocation.X, (int)tileLocation.Y, 1, who) ? 1f : 0.5f; } } }
private static void IsThereAFarmerOrCharacterWithinDistancePostfix(Utility __instance, ref Character __result, Vector2 tileLocation, int tilesAway, GameLocation environment) { if (__result != null && CompanionManager.IsCustomCompanion(__result)) { foreach (NPC c in environment.characters.Where(c => !CompanionManager.IsCustomCompanion(c))) { if (Vector2.Distance(c.getTileLocation(), tileLocation) <= tilesAway) { __result = c; return; } } __result = null; } }
private void RemoveAllCompanions(string owner = null, GameLocation targetLocation = null) { foreach (GameLocation location in Game1.locations.Where(l => l != null && (targetLocation is null || l == targetLocation))) { if (location.characters != null) { foreach (var creature in location.characters.Where(c => CompanionManager.IsCustomCompanion(c) && (owner is null || (c as Companion).model.Owner.Equals(owner, StringComparison.OrdinalIgnoreCase))).ToList()) { location.characters.Remove(creature); } } if (location is BuildableGameLocation) { foreach (Building building in (location as BuildableGameLocation).buildings) { GameLocation indoorLocation = building.indoors.Value; if (indoorLocation is null) { continue; } if (indoorLocation.characters != null) { foreach (var creature in indoorLocation.characters.Where(c => CompanionManager.IsCustomCompanion(c) && (owner is null || (c as Companion).model.Owner.Equals(owner, StringComparison.OrdinalIgnoreCase))).ToList()) { indoorLocation.characters.Remove(creature); } } } } } this.Reset(); }