示例#1
0
        /// <summary>
        /// Digs out the success info from a dictionary
        /// This is the place where this target got succeeded
        /// </summary>
        /// <param name="info"></param>
        public void GetSuccessInfo(IDictionary <string, object> info)
        {
            if (info.ContainsKey(k.locationID))
            {
                var             locationId = info.GetValue <int>(k.locationID);
                MissionLocation location;
                if (_missionDataCache.GetLocationById(locationId, out location))
                {
                    _successZoneId = location.ZoneConfig.Id;
                    _successX      = location.MyPosition.intX;
                    _successY      = location.MyPosition.intY;
                    _successTime   = DateTime.Now;
                }
            }
            else
            {
                int      zoneId;
                Position position;

                if (info.ContainsKey(k.zoneID))
                {
                    zoneId = info.GetValue <int>(k.zoneID);
                }
                else
                {
                    Logger.Error("no zoneId was found in success info " + this);
                    throw new PerpetuumException(ErrorCodes.ServerError);
                }


                if (info.ContainsKey(k.position))
                {
                    position = info.GetValue <Position>(k.position);
                }
                else
                {
                    Logger.Error("no position was found in success info " + this);
                    throw new PerpetuumException(ErrorCodes.ServerError);
                }

                _successZoneId = zoneId;
                _successX      = position.intX;
                _successY      = position.intY;
                _successTime   = DateTime.Now;
            }

            Logger.Info("success info obtained zoneId:" + _successZoneId + " x:" + _successX + " y:" + _successY + " " + this);
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var missionId    = request.Data.GetOrDefault <int>(k.missionID);
                var spreadInGang = request.Data.GetOrDefault(k.spreading, 1) == 1;
                var character    = request.Session.Character;
                var level        = request.Data.GetOrDefault <int>(k.level);

                level = level.Clamp(0, 9);

                var locationId = request.Data.GetOrDefault(k.location, 1);

                MissionLocation location;
                _missionDataCache.GetLocationById(locationId, out location).ThrowIfFalse(ErrorCodes.InvalidMissionLocation);

                spreadInGang = true; //force gang mode

                var result = _missionProcessor.AdminMissionStartByRequest(character, spreadInGang, missionId, location, level);

                Message.Builder.FromRequest(request).WithData(result).Send();

                scope.Complete();
            }
        }
示例#3
0
 public void MissionStartFromFieldTerminal(Character character, int locationId, MissionCategory missionCategory, int level)
 {
     try
     {
         _missionDataCache.GetLocationById(locationId, out MissionLocation location).ThrowIfNull(ErrorCodes.ItemNotFound);
         var result = MissionStartForRequest(character, missionCategory, level, location);
         Message.Builder.ToCharacter(character).WithData(result).SetCommand(Commands.MissionStart).Send();
     }
     catch (PerpetuumException exception)
     {
         Logger.Exception(exception);
         character.CreateErrorMessage(Commands.MissionStart, exception.error).Send();
     }
 }
示例#4
0
        public void AddKeys(IDictionary <string, object> dictionary)
        {
            dictionary.Add(k.guid, missionGuid);
            dictionary.Add(k.definition, definition);
            dictionary.Add(k.progressCount, ProgressCount);
            dictionary.Add(k.completed, IsCompleted);
            dictionary.Add(k.location, locationId);
            dictionary.Add(k.missionID, missionId);
            dictionary.Add(k.targetID, targetId);
            dictionary.Add(k.assistingCharacterID, assisting.Id);
            dictionary.Add(k.useGang, 1);

            if (IsCompleted)
            {
                MissionLocation location;
                if (_missionDataCache.GetLocationById(locationId, out location))
                {
                    dictionary.Add(k.zoneID, location.ZoneConfig.Id);
                    dictionary.Add(k.position, location.MyPosition);
                }
            }
        }