public static void ApplyWarp(Configs.Warp config) { try { if (!string.IsNullOrEmpty(config.Conditions) && !ModEntry.SHelper.Conditions().ValidateConditions(config.Conditions)) { return; } StardewValley.Warp warp = new StardewValley.Warp(config.TileX, config.TileY, config.TargetName, config.TargetX, config.TargetY, false); GameLocation loc = Game1.getLocationFromName(config.MapName); loc.warps.Filter(a => a.X != warp.X || a.Y != warp.Y); loc.warps.Add(warp); } catch (Exception err) { ModEntry.Logger.ExitGameImmediately("Unable to patch warp, a unexpected error occured: " + config, err); } }
internal static void ApplyWarp(Configs.Warp warp) { try { if (!string.IsNullOrEmpty(warp.Conditions) && !ModEntry.SHelper.Conditions().ValidateConditions(warp.Conditions)) { return; } Warp _warp = new Warp(warp.TileX, warp.TileY, warp.TargetName, warp.TargetX, warp.TargetY, false); GameLocation loc = Game1.getLocationFromName(warp.MapName); loc.warps.RemoveAll((a) => a.X == _warp.X && a.Y == _warp.Y); loc.warps.Add(_warp); } catch (Exception err) { ModEntry.Logger.ExitGameImmediately("Unable to patch warp, a unexpected error occured: " + warp.ToString(), err); } }
internal static void ApplyWarp(Configs.Warp warp) { try { if (!string.IsNullOrEmpty(warp.Conditions) && !Conditions.CheckConditionList(warp.Conditions, AdvancedLocationLoaderMod.ConditionResolver)) { AdvancedLocationLoaderMod.Logger.Log(warp.ToString() + "~> false", LogLevel.Trace); return; } Warp _warp = new Warp(warp.TileX, warp.TileY, warp.TargetName, warp.TargetX, warp.TargetY, false); GameLocation loc = Game1.getLocationFromName(warp.MapName); loc.warps.RemoveAll((a) => a.X == _warp.X && a.Y == _warp.Y); loc.warps.Add(_warp); AdvancedLocationLoaderMod.Logger.Log(warp.ToString() + "~> true", LogLevel.Trace); } catch (Exception err) { AdvancedLocationLoaderMod.Logger.ExitGameImmediately("Unable to patch warp, a unexpected error occured: " + warp.ToString(), err); } }
private bool CheckWarp(MapData.Warp mtnWarp, StardewValley.Warp sdvWarp) { return(mtnWarp.TargetMap == sdvWarp.TargetName && mtnWarp.FromX == sdvWarp.X && mtnWarp.FromY == sdvWarp.Y); }
private void moveCharacter(GameTime time) { Rectangle rectangle = new Rectangle(this.pathToEndPoint.Peek().X *Game1.tileSize, this.pathToEndPoint.Peek().Y *Game1.tileSize, Game1.tileSize, Game1.tileSize); rectangle.Inflate(-2, 0); Rectangle boundingBox = this.character.GetBoundingBox(); if ((rectangle.Contains(boundingBox) || boundingBox.Width > rectangle.Width && rectangle.Contains(boundingBox.Center)) && rectangle.Bottom - boundingBox.Bottom >= 2) { this.timerSinceLastCheckPoint = 0; this.pathToEndPoint.Pop(); this.character.stopWithoutChangingFrame(); if (this.pathToEndPoint.Count != 0) { return; } this.character.Halt(); if (this.finalFacingDirection != -1) { this.character.faceDirection(this.finalFacingDirection); } if (this.NPCSchedule) { (this.character as NPC).DirectionsToNewLocation = (SchedulePathDescription)null; (this.character as NPC).endOfRouteMessage = (this.character as NPC).nextEndOfRouteMessage; } if (this.endBehaviorFunction == null) { return; } this.endBehaviorFunction(this.character, this.location); } else { if (this.character is Farmer) { (this.character as Farmer).movementDirections.Clear(); } else { foreach (NPC character in this.location.characters) { if (!character.Equals((object)this.character) && (character.GetBoundingBox().Intersects(boundingBox) && character.isMoving() && string.Compare(character.name, this.character.name) < 0)) { this.character.Halt(); return; } } } if (boundingBox.Left < rectangle.Left && boundingBox.Right < rectangle.Right) { this.character.SetMovingRight(true); } else if (boundingBox.Right > rectangle.Right && boundingBox.Left > rectangle.Left) { this.character.SetMovingLeft(true); } else if (boundingBox.Top <= rectangle.Top) { this.character.SetMovingDown(true); } else if (boundingBox.Bottom >= rectangle.Bottom - 2) { this.character.SetMovingUp(true); } this.character.MovePosition(time, Game1.viewport, this.location); if (!this.NPCSchedule) { return; } Warp warp = this.location.isCollidingWithWarpOrDoor(this.character.nextPosition(this.character.getDirection())); if (warp == null) { return; } if (this.character is NPC && (this.character as NPC).isMarried() && (this.character as NPC).followSchedule) { NPC character = this.character as NPC; if (this.location is FarmHouse) { warp = new Warp(warp.X, warp.Y, "BusStop", 0, 23, false); } if (this.location is BusStop && warp.X <= 0) { warp = new Warp(warp.X, warp.Y, character.getHome().name, (character.getHome() as FarmHouse).getEntryLocation().X, (character.getHome() as FarmHouse).getEntryLocation().Y, false); } if (character.temporaryController != null && character.controller != null) { character.controller.location = Game1.getLocationFromName(warp.TargetName); } } Game1.warpCharacter(this.character as NPC, warp.TargetName, new Vector2((float)warp.TargetX, (float)warp.TargetY), false, this.location.isOutdoors); this.location.characters.Remove(this.character as NPC); if (this.location.Equals((object)Game1.currentLocation) && Utility.isOnScreen(new Vector2((float)(warp.X * Game1.tileSize), (float)(warp.Y * Game1.tileSize)), Game1.tileSize * 6) && this.location.doors.ContainsKey(new Point(warp.X, warp.Y))) { Game1.playSound("doorClose"); } this.location = Game1.getLocationFromName(warp.TargetName); if (this.location.Equals((object)Game1.currentLocation) && Utility.isOnScreen(new Vector2((float)(warp.TargetX * Game1.tileSize), (float)(warp.TargetY * Game1.tileSize)), Game1.tileSize * 6) && this.location.doors.ContainsKey(new Point(warp.TargetX, warp.TargetY - 1))) { Game1.playSound("doorClose"); } if (this.pathToEndPoint.Count > 0) { this.pathToEndPoint.Pop(); } while (this.pathToEndPoint.Count > 0 && (Math.Abs(this.pathToEndPoint.Peek().X - this.character.getTileX()) > 1 || Math.Abs(this.pathToEndPoint.Peek().Y - this.character.getTileY()) > 1)) { this.pathToEndPoint.Pop(); } } }