/// <summary> /// Attempt to enter a building at a coordinate /// Will load new map if successful /// </summary> /// <param name="xy">position of building</param> /// <param name="bWasSuccessful">true if successfully entered</param> /// <returns>output string</returns> public string EnterBuilding(Point2D xy, out bool bWasSuccessful) { bool isOnBuilding = LargeMapRef.IsMapXYEnterable(State.TheVirtualMap.CurrentPosition); string retStr; if (isOnBuilding) { SmallMapReferences.SingleMapReference.Location location = LargeMapRef.GetLocationByMapXY(State.TheVirtualMap.CurrentPosition); //Point2D startingXY = SmallMapReferences.GetStartingXYByLocation(location); State.TheVirtualMap.LoadSmallMap(SmallMapRef.GetSingleMapByLocation(location, 0), State.CharacterRecords, false); // set us to the front of the building State.TheVirtualMap.CurrentPosition = SmallMapReferences.GetStartingXYByLocation(location); retStr = (DataOvlRef.StringReferences.GetString(DataOvlReference.WorldStrings.ENTER_SPACE) + SmallMapRef.GetLocationTypeStr(location)) + "\n" + SmallMapRef.GetLocationName(location); bWasSuccessful = true; } else { retStr = DataOvlRef.StringReferences.GetString(DataOvlReference.WorldStrings.ENTER_SPACE) + DataOvlRef.StringReferences.GetString(DataOvlReference.WorldStrings.WHAT); bWasSuccessful = false; } PassTime(); return(retStr); }
/// <summary> /// Climbs the ladder on the current tile that the Avatar occupies /// </summary> public string TryToKlimb(out KlimbResult klimbResult) { string getKlimbOutput(string output = "") { if (output == "") { return(DataOvlRef.StringReferences.GetString(DataOvlReference.TravelStrings.KLIMB)); } return(DataOvlRef.StringReferences.GetString(DataOvlReference.TravelStrings.KLIMB) + output); } TileReference curTileRef = State.TheVirtualMap.GetTileReferenceOnCurrentTile(); // if it's a large map, we either klimb with the grapple or don't klimb at all if (State.TheVirtualMap.IsLargeMap) { if (State.HasGrapple) // we don't have a grapple, so we can't klimb { klimbResult = KlimbResult.RequiresDirection; return(getKlimbOutput()); } klimbResult = KlimbResult.CantKlimb; return(getKlimbOutput(DataOvlRef.StringReferences.GetString(DataOvlReference.KlimbingStrings.WITH_WHAT))); } // we can't klimb on the current tile, so we need to pick a direction if (!SpriteTileReferences.IsLadder(curTileRef.Index) && !SpriteTileReferences.IsGrate(curTileRef.Index)) { klimbResult = KlimbResult.RequiresDirection; return(getKlimbOutput()); } SmallMapReferences.SingleMapReference.Location location = State.TheVirtualMap.CurrentSingleMapReference.MapLocation; int nCurrentFloor = State.TheVirtualMap.CurrentSingleMapReference.Floor; bool hasBasement = State.TheVirtualMap.SmallMapRefs.HasBasement(location); int nTotalFloors = State.TheVirtualMap.SmallMapRefs.GetNumberOfFloors(location); int nTopFloor = hasBasement ? nTotalFloors - 1 : nTotalFloors; TileReference tileReference = State.TheVirtualMap.GetTileReference(State.TheVirtualMap.CurrentPosition); if (SpriteTileReferences.IsLadderDown(tileReference.Index) || SpriteTileReferences.IsGrate(tileReference.Index)) { if ((hasBasement && nCurrentFloor >= 0) || nCurrentFloor > 0) { State.TheVirtualMap.LoadSmallMap(SmallMapRef.GetSingleMapByLocation(location, nCurrentFloor - 1), State.CharacterRecords, false); klimbResult = KlimbResult.Success; return(getKlimbOutput(DataOvlRef.StringReferences.GetString(DataOvlReference.TravelStrings.DOWN))); } } else if (SpriteTileReferences.IsLadderUp(tileReference.Index)) { if (nCurrentFloor + 1 < nTopFloor) { State.TheVirtualMap.LoadSmallMap(SmallMapRef.GetSingleMapByLocation(location, nCurrentFloor + 1), State.CharacterRecords, false); klimbResult = KlimbResult.Success; return(getKlimbOutput(DataOvlRef.StringReferences.GetString(DataOvlReference.TravelStrings.UP))); } } klimbResult = KlimbResult.RequiresDirection; return(getKlimbOutput()); }