public void EnqueueProductionMissionTarget(MissionTargetType targetType, Character character, int locationId, int?definition = null, int?quantity = null)
        {
            if (locationId <= 0)
            {
                return;                  //gamma or something unknown
            }
            Logger.Info("++ Enqueue mission target type " + targetType + " characterId:" + character.Id + " definition:" + definition + " quantity:" + quantity);

            var data = new Dictionary <string, object>
            {
                { k.characterID, character.Id },
                { k.type, targetType },
                { k.locationID, locationId },
                { k.useGang, 1 }   //spread this action to gang within the mission engine
            };

            if (definition != null)
            {
                data.Add(k.definition, (int)definition);
            }

            if (quantity != null)
            {
                data.Add(k.quantity, (int)quantity);
            }

            _missionProcessor.EnqueueMissionTargetAsync(data);
        }
Ejemplo n.º 2
0
        public void CreateLog(MissionTargetType type, int netId, int parm1, int parm2, int parm3)
        {
            var log = m_logFactory.GetLogInstance(type);

            log.Reset(netId, parm1, parm2, parm3);
            m_LogsCurTick.Add(log);
        }
Ejemplo n.º 3
0
        private void MissionTargetAdvanceByType(Character character, MissionTargetType targetType, bool isComplete, Dictionary <string, object> data)
        {
            Logger.DebugInfo("process target by type: " + targetType);

            var kvpList = GetTargetInProgress_and_missionInProgressByTargetType(character, targetType);

            if (kvpList.IsNullOrEmpty())
            {
                return;
            }

            Logger.Info("processing " + kvpList.Count + " running targets for type: " + targetType);

            foreach (var pair in kvpList)
            {
                var missionTargetInProgress = pair.Key;
                var missionInProgress       = pair.Value;

                ProcessTargetAdvancementLocked(missionInProgress, missionTargetInProgress, isComplete, data);

                if (WasProgress(data))
                {
                    return;
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Inserts a mission target that will be used as a possible target spot
        /// </summary>
        public static void InsertMissionTargetSpot(string name, MissionTargetType targetType, double x, double y, int zoneId, int findRadius)
        {
            var query = @"
INSERT dbo.missiontargets
        ( name ,
          description ,
          targettype ,
          targetpositionx ,
          targetpositiony ,
          targetpositionzone ,
          findradius 
        )
VALUES  ( @name ,
          @name,
          @targetType,
          @x,
          @y,
          @zoneId,
          @findRadius
        )";

            var res = Db.Query().CommandText(query)
                      .SetParameter("@name", name)
                      .SetParameter("@targetType", (int)targetType)
                      .SetParameter("@x", x)
                      .SetParameter("@y", y)
                      .SetParameter("@zoneId", zoneId)
                      .SetParameter("@findRadius", findRadius)
                      .ExecuteNonQuery();

            (res == 1).ThrowIfFalse(ErrorCodes.SQLInsertError);
        }
Ejemplo n.º 5
0
        private DO_Mission getMissionDatas(short ID)
        {
            DO_Mission mission = new DO_Mission();

            mission.m_id = short.Parse(m_missionDatas[ID]["MissionID"].ToString());
            mission.m_missionOccupation = (OccupationType)Enum.Parse(typeof(OccupationType), m_missionDatas[ID]["MissionOccupation"].ToString());
            JsonData tempData;

            mission.m_acceptingNPCID  = int.Parse(m_missionDatas[ID]["AcceptingNPCID"].ToString());
            mission.m_deliveringNPCID = int.Parse(m_missionDatas[ID]["DeliveringNPCID"].ToString());
            tempData = m_missionDatas[ID]["ConversationsWhenAccepting"];

            /**mission.m_conversationsWhenAccepting = new String[tempData.Count];
             * //for (int i = 0; i < tempData.Count; i++)
             * {
             *  mission.m_conversationsWhenAccepting[i] = tempData[i].ToString();
             * }
             * tempData = m_missionDatas[ID]["ConversationsWhenDelivering"];
             * mission.m_conversationWhenDelivering = new String[tempData.Count];
             * for (int i = 0; i < tempData.Count; i++)
             * {
             *  mission.m_conversationWhenDelivering[i] = tempData[i].ToString();
             * }**/
            mission.m_bonusMoney      = long.Parse(m_missionDatas[ID]["BonusMoney"].ToString());
            mission.m_bonusExperience = int.Parse(m_missionDatas[ID]["BonusExperience"].ToString());
            mission.m_levelInNeed     = short.Parse(m_missionDatas[ID]["LevelInNeed"].ToString());
            tempData = m_missionDatas[ID]["FatherMissionList"];
            mission.m_fatherMissionIdArr = new short[tempData.Count];

            for (int i = 0; i < tempData.Count; i++)
            {
                mission.m_fatherMissionIdArr[i] = (short.Parse(tempData[i].ToString()));
            }
            tempData = m_missionDatas[ID]["ChildrenMissionList"];
            mission.m_childrenMissionArr = new short[tempData.Count];

            for (int i = 0; i < tempData.Count; i++)
            {
                mission.m_childrenMissionArr[i] = (short.Parse(tempData[i].ToString()));
            }
            tempData = m_missionDatas[ID]["MissionTarget"];
            mission.m_missionTargetArr = new ValueTuple <MissionTargetType, short> [tempData.Count];
            for (int i = 0; i < tempData.Count; i++)
            {
                String            tempstr1   = tempData[i][0].ToString();
                MissionTargetType mt         = (MissionTargetType)Enum.Parse(typeof(MissionTargetType), tempstr1);
                short             parameter1 = short.Parse(tempData[i][1].ToString());

                mission.m_missionTargetArr[i] = new ValueTuple <MissionTargetType, short> (mt, parameter1);
            }
            tempData = m_missionDatas[ID]["BonusItems"];
            mission.m_bonusItemIdAndNumArr = new ValueTuple <short, short> [tempData.Count];

            for (int i = 0; i < tempData.Count; i++)
            {
                mission.m_bonusItemIdAndNumArr[i] = (short.Parse(tempData[i].ToString().Split(' ') [0]), short.Parse(tempData[i].ToString().Split(' ') [1]));
            }
            return(mission);
        }
 public DDO_MissionLog(MissionTargetType type, int charId, int parm1, int parm2, int parm3)
 {
     m_misTarType = type;
     m_charId     = charId;
     m_parm1      = parm1;
     m_parm2      = parm2;
     m_parm3      = parm3;
 }
Ejemplo n.º 7
0
 public static int CountTypeOnZone(MissionTargetType missionTargetType, int zoneId)
 {
     return
         (Db.Query().CommandText("SELECT COUNT(DISTINCT name) FROM dbo.missiontargets WHERE targetpositionzone=@zoneId AND targettype=@targetType")
          .SetParameter("@zoneId", zoneId)
          .SetParameter("@targetType", (int)missionTargetType)
          .ExecuteScalar <int>());
 }
Ejemplo n.º 8
0
        public Task EnqueueMissionTargetAsync(Character character, MissionTargetType targetType, Action <IDictionary <string, object> > dictionaryBuilder)
        {
            var dictionary = new Dictionary <string, object>
            {
                { k.characterID, character.Id },
                { k.type, (int)targetType }
            };

            dictionaryBuilder(dictionary);
            return(EnqueueMissionTargetAsync(dictionary));
        }
Ejemplo n.º 9
0
        public static void WriteSuccessLog(int zoneId, int x, int y, Guid guid, MissionTargetType targetType, long locationEid, MissionCategory missionCategory)
        {
            var res = Db.Query().CommandText("INSERT dbo.missiontargetslog ( zoneid, x, y, targettype, guid, locationeid, missioncategory ) VALUES ( @zoneId, @x, @y, @targetType, @guid, @locationeid, @category )")
                      .SetParameter("@x", x)
                      .SetParameter("@y", y)
                      .SetParameter("@zoneId", zoneId)
                      .SetParameter("@guid", guid)
                      .SetParameter("@targetType", (int)targetType)
                      .SetParameter("@locationeid", locationEid)
                      .SetParameter("@category", (int)missionCategory)
                      .ExecuteNonQuery();

            (res == 1).ThrowIfFalse(ErrorCodes.SQLInsertError);
        }
Ejemplo n.º 10
0
        public static string GenerateName(MissionTargetType targetType, int zoneId, string prefix)
        {
            var countOnZone = CountTypeOnZone(targetType, zoneId);

            countOnZone++;

            var name = MakeName(prefix, targetType, zoneId, countOnZone);

            while (IsTargetNameTaken(name))
            {
                countOnZone += 1;
                name         = MakeName(prefix, targetType, zoneId, countOnZone);
            }

            return(name);
        }
Ejemplo n.º 11
0
        public List <IZoneMissionTarget> CollectTargetsFromAllGangMembers(MissionTargetType missionTargetType)
        {
            var targets = new List <IZoneMissionTarget>(CurrentTargetsByType(missionTargetType));

            var gang = _player.Gang;

            if (gang == null)
            {
                return(targets);
            }

            var affectedPlayers = _zone.GetGangMembers(gang).Where(p => p != _player).ToList();

            foreach (var targetsAtCurrentPlayer in affectedPlayers.Select(affectedPlayer => affectedPlayer.MissionHandler.CurrentTargetsByType(missionTargetType)))
            {
                targets.AddRange(targetsAtCurrentPlayer);
            }

            return(targets);
        }
Ejemplo n.º 12
0
 public E_MissionLog GetLogInstance(MissionTargetType type)
 {
     return((E_MissionLog)m_pool[type].GetInstanceObj());
 }
Ejemplo n.º 13
0
        private List <MissionTarget> SearchForMinimalAmountOfStructures(MissionInProgress missionInProgress, MissionTargetType targetType, List <MissionTarget> alreadySelected)
        {
            var attempt     = 1;
            var rangeExtend = 0;
            var structures  = GetPossibleStructureTargets(missionInProgress, targetType, rangeExtend).Except(alreadySelected).ToList();

            Log(" " + structures.Count + " " + targetType + " structures found. attempt:" + attempt);


            while (structures.Count < MinimumAmountOfStructures && rangeExtend < MaxRangeExtend)
            {
                attempt++;
                rangeExtend += StructureRangeExtend;
                structures   = GetPossibleStructureTargets(missionInProgress, targetType, rangeExtend).Except(alreadySelected).ToList();
                Log(" " + structures.Count + " " + targetType + " structures found. range extend:" + rangeExtend + " attempt:" + attempt);
            }

            return(structures);
        }
Ejemplo n.º 14
0
 private List <MissionTarget> GetPossibleStructureTargets(MissionInProgress missionInProgress, MissionTargetType targetType, double rangeExtension)
 {
     return(missionDataCache.GetAllMissionTargets
            .Where(t => t.Type == targetType &&
                   t.ValidFindRadiusSet &&
                   t.ValidMissionStructureEidSet &&
                   t.ValidPositionSet &&
                   t.ValidZoneSet &&
                   t.ZoneId == missionInProgress.myLocation.ZoneConfig.Id &&
                   missionInProgress.SearchOrigin.IsInRangeOf2D(t.targetPosition, t.FindRadius + rangeExtension) &&
                   missionDataCache.IsTargetSelectionValid(missionInProgress.myLocation.Zone, missionInProgress.SearchOrigin, t.targetPosition)
                   ).ToList());
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Currently used by the NpcEgg
 ///
 /// Makes sure that the NpcEgg is only deployed at the target's location
 /// </summary>
 /// <param name="sourcePosition"></param>
 /// <param name="definition"></param>
 /// <param name="missionTargetType"></param>
 /// <returns></returns>
 public bool IsMissionTargetLoadedForPositionAndDefinition(Position sourcePosition, int definition, MissionTargetType missionTargetType)
 {
     return(_cachedMissionTargets.Values.Any(t =>
                                             t.MyTarget.Type == missionTargetType && t.IsMyTurn &&
                                             t.MyTarget.Definition == definition &&
                                             !t.IsCompleted &&
                                             t.MyTarget.CheckPosition &&
                                             sourcePosition.IsInRangeOf2D(t.MyTarget.targetPosition, t.MyTarget.TargetPositionRange)
                                             ));
 }
Ejemplo n.º 16
0
        protected MissionTarget SelectRandomMissionStructure(MissionInProgress missionInProgress, MissionTargetType targetType)
        {
            var structures = SearchForMinimalAmountOfStructures(missionInProgress, targetType, missionInProgress.SelectedTargets);

            if (structures.Count == 0)
            {
                Log("no possible structure targets to select from. " + targetType + " " + this + " " + missionInProgress);
                return(null);
            }

            var selectedTarget = structures.RandomElement();

            missionInProgress.AddToSelectedTargets(selectedTarget);
            return(selectedTarget);
        }
Ejemplo n.º 17
0
        public bool ResolveMissionStructureLocations(MissionInProgress missionInProgress, MissionTargetType targetType)
        {
            var selectedTarget = SelectRandomMissionStructure(missionInProgress, targetType);

            //search failed
            if (selectedTarget == null)
            {
                return(false);
            }

            missionStructureEid = selectedTarget.MissionStructureEid;

            CopyZoneInfo(selectedTarget);

            missionInProgress.SearchOrigin = new Position(targetPositionX ?? 0, targetPositionY ?? 0);

            SetTargetPosition_RandomTarget();

            return(true);
        }
Ejemplo n.º 18
0
 private IList <IZoneMissionTarget> CurrentTargetsByType(MissionTargetType missionTargetType)
 {
     return(CurrentTargets.Where(t => t.MyTarget.Type == missionTargetType).ToList());
 }
Ejemplo n.º 19
0
 protected AlarmSwitch(MissionTargetType targetType) : base(targetType)
 {
 }
Ejemplo n.º 20
0
 protected MissionSwitch(MissionTargetType targetType = MissionTargetType.use_switch) : base(targetType)
 {
 }
Ejemplo n.º 21
0
 private static string MakeName(string prefix, MissionTargetType targetType, int zoneId, int countOnZone)
 {
     return(prefix + "_" + targetType + "_z" + zoneId + "_n" + countOnZone);
 }
Ejemplo n.º 22
0
 protected MissionStructure(MissionTargetType targetType)
 {
     _targetType = targetType;
 }
Ejemplo n.º 23
0
        private void MissionTargetAdvanced(Character character, MissionTargetType targetType, bool explicitGangHandling, Dictionary <string, object> originalData)
        {
            //explicit gang handling not set
            if (!explicitGangHandling)
            {
                MissionTargetAdvancedSingle(originalData);

                if (WasProgress(originalData))
                {
                    SendRunningMissionListAsync(character);
                }

                return;
            }

            //ok, lets get deeper, we must use the gang

            //first enqueue for myself, we are the priority here
            MissionTargetAdvancedSingle(originalData);

            if (WasProgress(originalData))
            {
                //yes, this request advanced one of my targets, we are done here, send running list if all done.
                SendRunningMissionListAsync(character);
                return;
            }

            //do gang

            var others = GetGangMembersCached(character).Where(m => m.Id != character.Id);

            foreach (var other in others)
            {
                //any mission running?
                if (!MissionAdministrator.GetMissionInProgressCollector(other, out MissionInProgressCollector collector))
                {
                    continue;
                }

                //any targets waiting?
                if (!collector.GetMissionsInProgress().SelectMany(m => m.CollectIncompleteTargetsByType(targetType)).Any(t => t.IsMyTurn))
                {
                    continue;
                }

                var info = originalData.Clone();

                //fake the source character
                info[k.characterID] = other.Id;

                //force add participation info
                info[k.assistingCharacterID] = character.Id;

                MissionTargetAdvancedSingle(info);

                //if event got used up => end of its life
                if (WasProgress(originalData))
                {
                    return;
                }
            }
        }
Ejemplo n.º 24
0
        /// <summary>
        /// Get all targets with the given type in pairs to process advancement
        ///
        /// Since the target is wrapped into mission and mission wrapped into collectors getting a target is always:
        /// get collector by character, get mission, get target
        ///
        /// </summary>
        /// <param name="character"></param>
        /// <param name="targetType"></param>
        /// <returns></returns>
        private List <KeyValuePair <MissionTargetInProgress, MissionInProgress> > GetTargetInProgress_and_missionInProgressByTargetType(Character character, MissionTargetType targetType)
        {
            var resultList = new List <KeyValuePair <MissionTargetInProgress, MissionInProgress> >();

            if (!MissionAdministrator.GetMissionInProgressCollector(character, out MissionInProgressCollector collector))
            {
                return(resultList);
            }

            foreach (var missionInProgress in collector.GetMissionsInProgress())
            {
                var list = missionInProgress.CollectIncompleteTargetsByType(targetType).ToArray();

                if (list.IsNullOrEmpty())
                {
                    continue;
                }

                foreach (var missionTargetInProgress in list)
                {
                    resultList.Add(new KeyValuePair <MissionTargetInProgress, MissionInProgress>(missionTargetInProgress, missionInProgress));
                }
            }

            return(resultList);
        }
Ejemplo n.º 25
0
 public int GetRewardByType(MissionTargetType targetType)
 {
     return(_rewardByType.GetOrDefault(targetType, 1));
 }
Ejemplo n.º 26
0
 public void CreateLogOffline(MissionTargetType type, int charId, int parm1, int parm2 = 0, int parm3 = 0)
 {
     m_dds.InsertMissionLog(new DDO_MissionLog(type, charId, parm1, parm2, parm3));
 }
Ejemplo n.º 27
0
 private void CreateLog(MissionTargetType type, int netId, int parm1 = 0, int parm2 = 0, int parm3 = 0)
 {
     EM_MissionLog.s_instance.CreateLog(type, netId, parm1, parm2, parm3);
 }