Pikacuq is tweaking A-Bot :)



So in the meantime when bot is running not dying and happily looting, maintaining drones and killing EWAR targets as top priority. I’ve been playing with my fittings.

Then I’ve came up with armor instead of shield fits and that made me tweaking my bot even more :wink: And because I did not like recompiling every time I’ll change fit… I have made some changes :wink:
So, for those interested in some bits of my code

This bit takes care about armor/shield fits and accordingly maintaining all my security protocols valid. (otherwise bot will warp off on armor fit when shields are below 15% :wink:

				// armor ship
				if (armorRepairers.Count() > 0)
					ActualHitpoins = armorHitPoints;
					if (bot?.ConfigConstants.ArmorPermaTank == true)
						yield return bot.EnsureIsActive(armorRepairers);
						Random rnd = new Random();
						int RepairStartAt = rnd.Next(520, 850);
						int RepairEndAt = rnd.Next(870, 1000);

						if (ActualHitpoins < RepairStartAt)
							yield return bot.EnsureIsActive(armorRepairers);
						else if (ActualHitpoins > RepairEndAt)
							yield return bot.DeactivateModule(filteredArmorRepairers);
				// shield ship
					ActualHitpoins = shieldHitPoints;

If you are wondering why there are Random generated numbers, wonder not! :slight_smile:

I do run capstable fits, but am not running armor-reppers all the time, simply because Dreads have neuts and in some cases you’ll not be able to warpoff in time when you get hit by neut. So maitaining as full cap as possible is very important.
Secondly randomizing when armor rep will run and when not is more closer to humans as it usually never occurs at exact numbers. So randomizing when to turn them on/off makes it way more difficult to even recognize this bot …:slight_smile:

This code simply starts repping somewhere between 52 - 85percent of armor, and turn them down between 87 to 100percent

note: of course this can be applied to shield boosters easily as well.



Can somebody please give me a hand with bit of EWar tweaking?

I’m perfectly able to recognize, target and kill EWar targets first, that’s not an issue anymore, but as I live in space which have mostly EWar which is not harmful (like damperers, tracking distruptors) I want to get rid of those and focus only on those which are potentially deadly in case of emergency (scram,disturb,neut,ecm)

What I’m doing now, is this:

var listOverviewEWarToAttack =
						memoryMeasurement?.WindowOverview?.FirstOrDefault()?.ListView?.Entry?.Where(entry => !(entry?.EWarType?.IsNullOrEmpty()) ?? false)
						?.OrderBy(entry => bot.AttackPriorityIndex(entry))

This code gives me a list of targets which has got active EWar on me. Which is kind of ok, I do have then logic to deal with it.

But How I can adjust this code to select only those with mentioned EWar before?
I know there is in BotExtensions already Enum with relevant types, but as far as I’ve tried I’m not able to use it well.

I want to achieve something like

var listOverviewEWarToAttack =
						memoryMeasurement?.WindowOverview?.FirstOrDefault()?.ListView?.Entry?.Where(entry => entry?.EWarType?.isInDefinedList() ?? false)
						?.OrderBy(entry => bot.AttackPriorityIndex(entry))

where “isInDefinedList” will contain “WarpScram” “WarpDisturb” etc.

In Sanderling I can see this information is already present
But I’m not able to figure out how to access this information in code above :wink:

Any help will be highly appreciated!

maybe @Terpla ? :slight_smile:


As i understand you need entryes ONLY with ECM, that you discribe in some array?

EWarTypeEnum[] listEWarPriorityGroupTeamplate=
		EWarTypeEnum.WarpDisrupt, EWarTypeEnum.WarpScramble, EWarTypeEnum.ECM, EWarTypeEnum.Web

var listOverviewEWarToAttackEWarOnly =
				.Where(entry => !(entry?.EWarType?.IsNullOrEmpty() ?? false) && listEWarPriorityGroupTeamplate.Intersect(entry.EWarType).Any())
				?.OrderBy(entry => bot.AttackPriorityIndex(entry))

So we create some array and looking intersection of two arrays: a template and from the overview.


Dear @Terpla thank you very much!
works like a charm :slight_smile:

had to change brackets, as your code was giving me null exceptions

var listOverviewEWarToAttackEWarOnly =
				.Where(entry => (!(entry?.EWarType?.IsNullOrEmpty() ?? false) && listEWarPriorityGroupTeamplate.Intersect(entry.EWarType).Any()))
				?.OrderBy(entry => bot.AttackPriorityIndex(entry))


updated first post :wink:


you can take also the asteroids :slight_smile: ( a good source of rats/faction stuffs)
for changing the ship , i worked at one moment, you enter in station, check the active ship and the name , after that, in the left part , right clik and make active ( after the name); The problem is to make the only one time, you need an fitted ship with an specifiq name ( alibaba ( vexor navy issue) because if you have more ships vni , you will have a problem.
launch the mtu is working like a charm. but if you have more than one, you will have a problem ( he will try to launch all of them). I think at counting the anomalys and launching the mtu: for anom.1 mtu1, etc

Making an bookmark is working ( still not every time, from my tests), but you make more than one. will appear a window who tell you if you wanna make the second one, and you can close the think.
salvaging is not a problem, but you have to change the sanderling dll. you must make define the salvager on his own; like weapons, miner, etc… In sanderling is working from some tests, but Im not sure if is working all the time.
you have to create a new task, like skip anomaly, and make the salvager.

I explored the ideea of project discovery, but is not working, the graphs are not read…and sometime are too complicated, so if somebody can create an algorithm/soft to read and tell where is a planet or not; wel his place is at nasa :))

for relic: I camped 2 days in one empty wh, i didnt find any clue to do that. Ofcourse, with an ocr based bot, you can make him and establish some rules: rule of 6,5,4, rule to go in oposite corner, or going to horizontal in some ocasions . In my case , is a feeling where the jackpot it is, i make my way there and i have an accuracy of 80-90% with an alpha. in omega state maxed for relic… hmmmm in 3 months I missed 3-5 cans. But you have to work daily for that. but the data cans are harder. Also i saw its depends; angel relic are different than serpentis etc. also even for same race, in the wh, the type ( c1/c6) change the place of jackpot but also if is pulsar or wolf.

Bon, in the end, you dont have to thanks me… at one point i had problems with almost every point implement by you and my knowledges block me. Also almost all of my stuffs are … translated from sanderling scripts :slight_smile:


more than one mtu is not an issue, as you can read from overview if there is already one on grid and if so, do nothing.

But in general MTU are shit because they are very easily scannable (way more quicker than ships) and can be bookmarked.
So for my personal usage I will not be working on it as I said, because ONLY loot you really want is faction spaw, which is already covered.
Same situation for Salvager.

It can be done, quite easily, but not worth time to do so.

more ships in hangar shouldnt be problem as well, as you can check if you are in same ship type and if yes, do nothing.
But again, not worth time.

Relic is different and from WIndowOther I can see there is everything what is probably needed. But algorythm will be tricky as well as scanning anomalies.

As fun projects, why not, whilst current bot is making isks :stuck_out_tongue:


from one point of view, the salvaging +mtu has his value, since sometime the loot+salvage = or even > than the bounty’s …
anyway, a good salvage ship with t2 rigs and modules go up to 150-200 m, but the better is an dedicated char… in one man corp show. you save the spots in corp folder and he came alone. Also you can use the fleet channel like an alternative to trigger the warp and start the salvage.

if you say you have all you need on windowother, then play with relic.


i take argument null exception for both cases ( i just copy paste the code.) sanderling says the second param from listEWarPriorityGroupTeamplate.Intersect(entry.EWarType).Any()) isn’t good.
: second
à System.Linq.Enumerable.Intersect[TSource](IEnumerable1 first, IEnumerable1 second)
à Sanderling.ABot.Bot.Task.CombatTask.<>c__DisplayClass9_0.<get_Component>b__22(IOverviewEntry entry) in …//



Just check for not null condition

var listOverviewEWarTargets =
						.Where(entry => entry != null && (!entry.EWarType?.IsNullOrEmpty() ?? false) &&
						?.OrderBy(entry => bot.AttackPriorityIndex(entry))


heh, thank you :slight_smile:


look at my bot.conf
“TargetsCountMax” : “2”,//how many targets to be at minimum
“DroneNumbers”: “5”,//change number of drones
“AnomalyColumnheader”: “name”,//header anomaly to take
“AnomalyName”: “forsaken hub”,//anomaly to take
“IgnoreAnomalyName”: “Belt|asteroid|drone|forlorn|rally|sanctum|blood hub|serpentis hub|hidden|haven”,// what anomaly to ignore
“IgnoreColumnheader”: “Name”,//the heador of anomaly to ignore
//the commander name and his wreck
“CommanderName”: “Commander|Dark Blood|true|Shadow Serpentis|Dread Gurista|Domination Saint|Gurista Distributor|Sentient|Overseer|Spearhead|Dread Guristas|Estamel|Vepas|Thon|Kaikka|True Sansha|Chelm|Vizan|Selynne|Brokara|Dark Blood|Draclira|Ahremen|Raysere|Tairei|Shadow|Cormack|Setele|Tuvan|Brynn|Domination|Tobias|Gotan|Hakim|Mizuro”,
“RunFromRats”: “Dreadnought”,// you run from him
“TargetRange”: “60000”,// if dist> than this, you will orbit the rat

“TakeTravelRoute”: “true”,// if you travel, set this “true” and set your destination.
“TakeAsteroids”: “false”,// if you take the asteroids , just in the case you dont have anomaly in system;set true if you want them; in work

“AvoidAnomalys”: “Chemical Factory”,//Anomaly with celestial type to avoid, you warp there from anomaly window, but you run
“CelestialOrbit”: “broken|pirate gate”,//your anchor, celestial
“RetreatBookmark”: “home”,
“RetreatSafe”: “safe”,
“UnloadBookmark”: “home”,
“StationName” : “Keepstar|Fortizar|Raitaru|Astrahus|Athanor|Azbel|Sotiyo|tatara”,//useful for instalign , let only one who interest you(after type , not the name; so you can use this in more systems)
“UnloadDestContainerName”: “Item Hangar”,//in work


Hello, where i can find this very interesting A-Bot fork please ? :slight_smile:


you can’t it’s on my localhost :slight_smile:

Randomness in a bot

Noticed something …

Ratting in site … a friendly warps in … the bot warps out without recalling drones … anyway to fix this?

Using Pikacuq code for detecting friendlies upon warp in


check if you correctly using ownanomaly variable.
my code is not warping out when u are there first



Where can the Orbiting version be downloaded from, if you wanted to run anoms in VNI?

Thank you! @pikacuq



Where can I possibly get a copy of this?




I would like to also get a copy of the VNI ratting issue.



Hey there!

I’d love to test out the .exe with you guys.

I’m also interested in learning more on modifying these scripts for more personalized play styles, but could use some guidance. Would anyone be interested in starting up a Discord server so we can get some live discussions going?