private Color GetColorBySpotType(MissionSpotType missionSpotType)
        {
            switch (missionSpotType)
            {
            case MissionSpotType.fieldterminal:
                return(_fieldTerminalColor);

            case MissionSpotType.mswitch:
                return(_switchColor);

            case MissionSpotType.kiosk:
                return(_kioskColor);

            case MissionSpotType.itemsupply:
                return(_itemSupplyColor);

            case MissionSpotType.randompoint:
                return(_randomPointColor);

            case MissionSpotType.terminal:
                return(_dockingBaseColor);

            case MissionSpotType.teleport:
                return(_teleportColor);

            case MissionSpotType.sap:
                return(_sapColor);

            default:
                throw new ArgumentOutOfRangeException("missionSpotType");
            }
        }
 private int CountSelectableByType(MissionSpotType missionSpotType, List <MissionSpot> spots)
 {
     return(spots.Count(s => s.type == missionSpotType &&
                        position.ToPoint().ToPosition().TotalDistance2D((Point)s.position.ToPoint()) > 0.5 &&
                        position.IsInRangeOf2D(s.position, s.findRadius) &&
                        _missionDataCache.IsTargetSelectionValid(Zone, position, s.position)));
 }
        public int GetAmountByType(MissionSpotType missionSpotType)
        {
            int amount;

            if (_selectableSpots.TryGetValue(missionSpotType, out amount))
            {
                return(amount);
            }

            return(0);
        }
Exemplo n.º 4
0
        private void MakeASnapshot(MissionSpotType spotType, List <Point> freePoints)
        {
            var pointsCopy = new List <Point>(freePoints);

            _counter++;
            var fileName = spotType + "_freepoints." + $"{_counter:0000}";

            Task.Run(() =>
            {
                var bmp = _zone.CreateBitmap();

                foreach (var point in pointsCopy)
                {
                    bmp.SetPixel(point.X, point.Y, Color.White);
                }

                _saveBitmapHelper.SaveBitmap(_zone, bmp, fileName);
            });
        }
        private void WriteReportByType(MissionSpotType missionSpotType, List <MissionSpotStat> spotStats, Bitmap bitmap)
        {
            var lines   = new List <string>(spotStats.Count);
            var ordered = spotStats.OrderBy(s => s.GetAmountByType(missionSpotType)).ToArray();


            foreach (var missionSpotStat in ordered)
            {
                var amount = missionSpotStat.GetAmountByType(missionSpotType);

                if (amount < 3)
                {
                    var color = GetColorBySpotType(missionSpotType);
                    DrawEllipseOnPoint(color, 3 + _addtoradius, missionSpotStat.position, bitmap);
                }

                var message = amount + " " + missionSpotType + " around " + missionSpotStat.type + " at gotoxy " + missionSpotStat.position.intX + " " + missionSpotStat.position.intY;
                Logger.Info(message);
                lines.Add(message);
            }

            _addtoradius += 3;
            _fileSystem.WriteAllLines("worstSpots_" + missionSpotType + "_z" + _zone.Id + "_.txt", lines);
        }
Exemplo n.º 6
0
        private void PlaceOneType(List <MissionSpot> spotInfos, MissionSpotType type, int targetAmount, Dictionary <MissionSpotType, int> distanceInfos, Dictionary <MissionSpotType, List <Position> > staticObjects, AccuracyInfo accuracyInfo)
        {
            var distanceToMyType = distanceInfos[type];
            var zoneWidth        = _zone.Size.Width;
            var borderWidthMax   = zoneWidth;

            //to make it fast
            //border increase 200
            //start border 200

            var borderIncrease = accuracyInfo.borderIncrease;
            var currentBorder  = accuracyInfo.initialBorder;
            var foundTotal     = 0;

            var freePoints = new List <Point>(_zone.Configuration.Size.Width * _zone.Configuration.Size.Height);

            InitPoints(spotInfos, distanceInfos, staticObjects, freePoints);

            while (true)
            {
                if (currentBorder > borderWidthMax)
                {
                    Logger.Info("Max border reached " + type);
                    return;
                }

                Logger.Info("border:" + currentBorder);

                var maxAttempts = freePoints.Count;
                var attempts    = 0;
                while (true)
                {
                    if (freePoints.Count == 0)
                    {
                        Logger.Info("no more free points");
                        return;
                    }

                    attempts++;
                    if (attempts > maxAttempts)
                    {
                        currentBorder += borderIncrease;
                        Logger.Info("MAX attempts reached!");
                        break;
                    }

                    if (attempts % 50000 == 0)
                    {
                        Logger.Info(type + " working " + attempts);
                    }

                    var pickedIndex    = FastRandom.NextInt(freePoints.Count - 1);
                    var pickedPosition = freePoints[pickedIndex].ToPosition();



                    //super turbo mode, skips border check when it generates random points
                    //if (type != MissionSpotType.randompoint)
                    //{ is keep distance }


                    //good if the distance is kept
                    if (!IsKeepDistance(pickedPosition, spotInfos, distanceInfos, staticObjects, 0, currentBorder))
                    {
                        continue;
                    }


                    if (!CheckConditionsAroundPosition(pickedPosition, accuracyInfo.blockRadius, accuracyInfo.islandRadius))
                    {
                        freePoints.Remove(pickedPosition);
                        continue;
                    }

                    //--- yay! position found!

                    var si = new MissionSpot(type, pickedPosition, _zone.Id);

                    spotInfos.Add(si);
                    SaveInfoAsync(si);

                    foundTotal++;
                    if (foundTotal >= targetAmount)
                    {
                        Logger.Info(foundTotal + " " + type + " was found successfully. Target amount reached!");
                        return;
                    }

                    CleanUpOneSpot(pickedPosition, distanceToMyType, ref freePoints);
                    //MakeSnap(type,freeKeys);
                    Logger.Info(type + "\t\t" + foundTotal + "\tattempts:" + attempts);
                    break;
                }
            }
        }
 public MissionSpot(MissionSpotType missionSpotType, Position position, int zoneId)
 {
     type          = missionSpotType;
     this.position = position;
     this.zoneId   = zoneId;
 }
 public void SetSelectableSpotAmount(MissionSpotType missionSpotType, int amount)
 {
     _selectableSpots[missionSpotType] = amount;
 }
 public MissionSpotStat(MissionSpotType missionSpotType, Position position, int zoneId) : base(missionSpotType, position, zoneId)
 {
 }
        public static List <MissionSpot> GenerateMissionSpotsFromPositions(IZone zone, MissionSpotType missionSpotType, List <Position> positions)
        {
            var result = new List <MissionSpot>(positions.Count);

            foreach (var pos in positions)
            {
                var ms = new MissionSpot(missionSpotType, pos, zone.Id);

                result.Add(ms);
            }

            return(result);
        }