/// <summary> /// Attempts to load characters positions from the database. If no position is available, a new position will be created to allow the player to spawn. /// </summary> /// <remarks> /// TODO: /// 1. Confirm the order/position usage when restoring a position from database. Should this always be the lifestone if "Location" is unavailable? /// </remarks> public void LoadCharacterPositions(Character character) { // get a list of positions from the vw_character_positions view Dictionary <PositionType, Position> dbPositions = GetCharacterPositions(character); // Check for positions and insert position for the Position type Locaiont, if missing: if (dbPositions.Count == 0 || !dbPositions.ContainsKey(PositionType.Location)) { Position swapToWorkingLocation = new Position(); // This checks for the best location available from the database // When the first suitable position is found, it will be set as the current location. if (dbPositions.ContainsKey(PositionType.LastPortal)) { // Use the lastportal position swapToWorkingLocation = dbPositions[PositionType.LastPortal]; } else if (dbPositions.ContainsKey(PositionType.Sanctuary)) { // Use lifestone recall position swapToWorkingLocation = dbPositions[PositionType.Sanctuary]; } else { // No suitable database position is available swapToWorkingLocation = CharacterPositionExtensions.StartingPosition(character.Id); // Use default position } // force the position type to location swapToWorkingLocation.PositionType = PositionType.Location; dbPositions.Add(swapToWorkingLocation.PositionType, swapToWorkingLocation); ExecuteConstructedInsertStatement(CharacterPreparedStatement.CharacterPositionInsert, typeof(Position), swapToWorkingLocation); } // This will load each available position from the database, into the object's positions foreach (KeyValuePair <PositionType, Position> position in dbPositions) { character.SetCharacterPosition(position.Value); } }
/// <summary> /// Returns a CharacterPosition object containing the physical location of a player/character. /// </summary> public Position GetLocation(uint id) { Dictionary <string, object> criteria = new Dictionary <string, object>(); criteria.Add("character_id", id); criteria.Add("positionType", PositionType.Location); Position newCharacterPosition = CharacterPositionExtensions.StartingPosition(id); if (ExecuteConstructedGetStatement(CharacterPreparedStatement.CharacterPositionSelect, typeof(Position), criteria, newCharacterPosition)) { return(newCharacterPosition); } newCharacterPosition = CharacterPositionExtensions.StartingPosition(id); // Save new position ExecuteConstructedInsertStatement(CharacterPreparedStatement.CharacterPositionInsert, typeof(Position), newCharacterPosition); return(newCharacterPosition); }
public static void CharacterCreateSetDefaultCharacterPositions(AceCharacter character) { character.Location = CharacterPositionExtensions.StartingPosition(); }
public static void CharacterCreateSetDefaultCharacterPositions(Player player, uint startArea) { player.Location = CharacterPositionExtensions.StartingPosition(startArea); }
public static void CharacterCreateSetDefaultCharacterPositions(Character character) { character.SetCharacterPosition(CharacterPositionExtensions.StartingPosition(character.Id)); }