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); }
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); }
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); }