Exemple #1
0
        /// <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);
        }
Exemple #3
0
 public static void CharacterCreateSetDefaultCharacterPositions(AceCharacter character)
 {
     character.Location = CharacterPositionExtensions.StartingPosition();
 }
 public static void CharacterCreateSetDefaultCharacterPositions(Player player, uint startArea)
 {
     player.Location = CharacterPositionExtensions.StartingPosition(startArea);
 }
Exemple #5
0
 public static void CharacterCreateSetDefaultCharacterPositions(Character character)
 {
     character.SetCharacterPosition(CharacterPositionExtensions.StartingPosition(character.Id));
 }