Hi Community,
here comes the changelog for the latest PBDO update.
We weren't quite able to release on time, but we did some additional coding on the cloud logic,
so you have the possibility to try out a kind of "private cloud" if you have two or more ships on the same map, on the same server.
Task API will be updated within the next minutes.
Also example tasks will follow.
Thread for your comments ->
Changelog v.1.1.1.43 -> v.1.2.1.69
Client:
* session tab
+ displaying selected enemy on map
+ "edit task" button
+ "join action" button
+ booster tab (on session tab -> cargo)
+ players tab (on session tab)
+ added player kills to statistics
* account settings
* private cloud checkbox added
+ if we are attacked by players a alarm can be set at "main settings" -> "sounds"
* improved the way the bot interacts with the DO server
+ added some ship types
Logic:
* Sell
* will sell if you are in base and have ressources on board
+ PvP logic
+ Answer attacks, we will shoot at our attacker while fleeing to the next gate
+ search for enemy player ships and attack them
+ Galaxy gate Kappa
+ Cloud Logic
Task:
+ bool AnswerAttacks // if attacked by a player we will fight
+ bool AttackPlayers // attacking players on sight
+ int AttackPlayersMaxHp
+ int AttackPlayersMinDistanceToGate
+ List<string> AttackPlayersIgnoreUserList
+ List<Enums.ShipType> AttackPlayersShipsList;
* bool DefendInPrivacyRadius; //working now
* int PrivacyRadius; // working now
+ bool ExtremeBotting; // the bot will not stop over boxes
+ int CloudBoxesCollectRadius;
Api.Cloud
+ CloudPluginApi
+ CloudMessage OutputMessage(); //used to get cloud messages FROM this instance
+ void InputMessage(Cloudmessage message); // used to deliver cloud messages TO this instance
Please check out the following example tasks:
a) defend in privacy
b) answer attacks
c) hunting players on lower maps for MMO (seek & destroy)
You will also find the *.cs files attached to this post.
defend in privacy:
Code:
using System.Threading;
using System.Collections.Generic;
using PBDOBot.Helper;
using PBDOBot.Api;
using PBDOBot.Api.Task;
namespace Tasks
{
public class Task : BBaseTask
{
public override void OnReset()
{
Enums.ResourceType[] collection = new Enums.ResourceType[] { Enums.ResourceType.ore_promerium };
this.ProtectResourcesList.AddRange(collection);
Dictionary<string, Enums.ResourceType> boostCollection = new Dictionary<string, Enums.ResourceType>();
boostCollection.Add("Speed", Enums.ResourceType.ore_promerium);
boostCollection.Add("Shield", Enums.ResourceType.ore_promerium);
boostCollection.Add("Lasers", Enums.ResourceType.ore_promerium);
boostCollection.Add("Rockets", Enums.ResourceType.ore_promerium );
this.BoostDictionary = boostCollection;
UseRocketLauncher = true;
// LaserAmmoType = Enums.LaserAmmoType.UCB_100;
// RocketAmmoType = Enums.RocketAmmoType.PLT_2021;
// RocketLauncherAmmoType = Enums.RocketLauncherAmmoType.UBR100;
LaserAmmoType = Enums.LaserAmmoType.MCB_50;
RocketAmmoType = Enums.RocketAmmoType.PLT_2026;
RocketLauncherAmmoType = Enums.RocketLauncherAmmoType.ECO10;
Restock = false;
Refine = false;
Sell = false;
Cloak = true;
CollectResources = false;
CollectBonusBoxes = true;
CollectSpecialBoxes = true;
CollectCargoBoxes = false;
DefendInPrivacyRadius = true;
PrivacyRadius = 1200;
FleeOnAttacked = true;
FleeOnEnemyInRadius = false;
FleeRadius = 4000;
AnswerAttacks = false;
IgnorePlayersOnTravel = true;
SwitchConfigWhenShieldLow = true;
SwitchConfigShieldPercent = 5;
Repair = true;
MinDurability = 60;
MaxDurability = 99;
MinFreeSlots = 300;
GateToUseExtraEnergyFor = GalaxyGateType.Alpha;
SafeBotting = false;
ExtremeBotting = true;
TimeBetweenBoxes = 0;
BoxesPerHour = 5000;
UsePet = false;
}
public override void ChooseLogic()
{
Dictionary<TaskLoadDelegate, int> TaskLoadDictionary = new Dictionary<TaskLoadDelegate, int>();
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("defend in privacy task x-7"))
{
BMain.WriteLog("defend in privacy task: x-7");
Reset();
TaskMap = "x-7";
ActionList.Add("defend in privacy task x-7");
}
}, 35);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("defend in privacy task x-6"))
{
BMain.WriteLog("defend in privacy task: x-6");
Reset();
TaskMap = "x-6";
ActionList.Add("defend in privacy task x-6");
}
}, 30);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("defend in privacy task x-5"))
{
BMain.WriteLog("defend in privacy task: x-5");
Reset();
TaskMap = "x-6";
ActionList.Add("defend in privacy task x-5");
}
}, 25);
CycleTaskDictionary = TaskLoadDictionary;
}
}
}
answer attacks:
Code:
using System.Threading;
using System.Collections.Generic;
using PBDOBot.Helper;
using PBDOBot.Api;
using PBDOBot.Api.Task;
namespace Tasks
{
public class Task : BBaseTask
{
public override void OnReset()
{
Enums.ResourceType[] collection = new Enums.ResourceType[] { Enums.ResourceType.ore_promerium };
this.ProtectResourcesList.AddRange(collection);
Dictionary<string, Enums.ResourceType> boostCollection = new Dictionary<string, Enums.ResourceType>();
boostCollection.Add("Speed", Enums.ResourceType.ore_promerium);
boostCollection.Add("Shield", Enums.ResourceType.ore_promerium);
boostCollection.Add("Lasers", Enums.ResourceType.ore_promerium);
boostCollection.Add("Rockets", Enums.ResourceType.ore_promerium );
this.BoostDictionary = boostCollection;
UseRocketLauncher = true;
// LaserAmmoType = Enums.LaserAmmoType.UCB_100;
// RocketAmmoType = Enums.RocketAmmoType.PLT_2021;
// RocketLauncherAmmoType = Enums.RocketLauncherAmmoType.UBR100;
LaserAmmoType = Enums.LaserAmmoType.MCB_50;
RocketAmmoType = Enums.RocketAmmoType.PLT_2026;
RocketLauncherAmmoType = Enums.RocketLauncherAmmoType.ECO10;
Restock = false;
Refine = false;
Sell = false;
Cloak = true;
CollectResources = false;
CollectBonusBoxes = true;
CollectSpecialBoxes = true;
CollectCargoBoxes = false;
FleeOnAttacked = true;
AnswerAttacks = true;
IgnorePlayersOnTravel = true;
SwitchConfigWhenShieldLow = true;
SwitchConfigShieldPercent = 5;
Repair = true;
MinDurability = 60;
MaxDurability = 99;
MinFreeSlots = 300;
GateToUseExtraEnergyFor = GalaxyGateType.Alpha;
SafeBotting = false;
ExtremeBotting = true;
TimeBetweenBoxes = 0;
BoxesPerHour = 5000;
UsePet = false;
}
public override void ChooseLogic()
{
Dictionary<TaskLoadDelegate, int> TaskLoadDictionary = new Dictionary<TaskLoadDelegate, int>();
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("answer attacks task x-7"))
{
BMain.WriteLog("answer attacks task: x-7");
Reset();
TaskMap = "x-7";
ActionList.Add("answer attacks task x-7");
}
}, 35);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("answer attacks task x-6"))
{
BMain.WriteLog("answer attacks task: x-6");
Reset();
TaskMap = "x-6";
ActionList.Add("answer attacks task x-6");
}
}, 30);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("answer attacks task x-5"))
{
BMain.WriteLog("answer attacks task: x-5");
Reset();
TaskMap = "x-6";
ActionList.Add("answer attacks task x-5");
}
}, 25);
CycleTaskDictionary = TaskLoadDictionary;
}
}
}
MMO hunting players:
Code:
using System.Threading;
using System.Collections.Generic;
using PBDOBot.Helper;
using PBDOBot.Api;
using PBDOBot.Api.Task;
namespace Tasks
{
public class Task : BBaseTask
{
public override void OnReset()
{
Enums.ResourceType[] collection = new Enums.ResourceType[] { Enums.ResourceType.ore_promerium };
this.ProtectResourcesList.AddRange(collection);
Dictionary<string, Enums.ResourceType> boostCollection = new Dictionary<string, Enums.ResourceType>();
boostCollection.Add("Speed", Enums.ResourceType.ore_promerium);
boostCollection.Add("Shield", Enums.ResourceType.ore_promerium);
boostCollection.Add("Lasers", Enums.ResourceType.ore_promerium);
boostCollection.Add("Rockets", Enums.ResourceType.ore_promerium );
this.BoostDictionary = boostCollection;
IgnorePlayersOnTravel = true;
DefendInPrivacyRadius = false;
FleeOnAttacked = true;
AnswerAttacks = true;
AttackPlayers = true;
FleeRadius = 4000;
AttackPlayersMinDistanceToGate = 3500;
AttackPlayersShipsList.Clear();
AttackPlayersShipsList.Add(Enums.ShipType.Phoenix);
AttackPlayersShipsList.Add(Enums.ShipType.Liberator);
AttackPlayersShipsList.Add(Enums.ShipType.Yamato);
AttackPlayersShipsList.Add(Enums.ShipType.Leonov);
AttackPlayersShipsList.Add(Enums.ShipType.Defcom);
AttackPlayersShipsList.Add(Enums.ShipType.Piranha);
AttackPlayersShipsList.Add(Enums.ShipType.Nostromo);
AttackPlayersShipsList.Add(Enums.ShipType.Bigboy);
AttackPlayersShipsList.Add(Enums.ShipType.Leonov_Home);
AttackPlayersShipsList.Add(Enums.ShipType.Spearhead);
//public enum ShipType { Unknown = 0, Phoenix = 1, Yamato = 2, Leonov = 3, Defcom = 4, Liberator = 5, Piranha = 6, Nostromo = 7, Vengeance = 8, Bigboy = 9, Goliath = 10, Vengeance_Adept = 16, Vengeance_Lightning = 18, Leonov_Home = 30, Goliath_Enforcer = 56, Goliath_Venom = 67, Vengeance_Revenge = 58, Goliath_Bastion = 59, Vengeance_Avenger = 60, Goliath_Veteran = 61, Goliath_Exalted = 62, Goliath_Solace = 63, Goliath_Sentinel = 66, Goliath_Dimisher = 66, Spearhead = 70, Aegis = 49, Citadel = 69 }
AttackPlayersIgnoreUserList.AddRange(new string[] { "-::clanmate::-", "_-RealLifeFriend-_" });
UseRocketLauncher = true;
// LaserAmmoType = Enums.LaserAmmoType.UCB_100;
// RocketAmmoType = Enums.RocketAmmoType.PLT_2021;
// RocketLauncherAmmoType = Enums.RocketLauncherAmmoType.UBR100;
LaserAmmoType = Enums.LaserAmmoType.MCB_50;
RocketAmmoType = Enums.RocketAmmoType.PLT_2026;
RocketLauncherAmmoType = Enums.RocketLauncherAmmoType.ECO10;
Refine = true;
Sell = false;
CollectResources = false;
CollectBonusBoxes = true;
CollectSpecialBoxes = true;
CollectCargoBoxes = true;
SwitchConfigWhenShieldLow = true;
SwitchConfigShieldPercent = 5;
GateToUseExtraEnergyFor = GalaxyGateType.Alpha;
Repair = true;
MinDurability = 60;
MaxDurability = 99;
MinFreeSlots = 300;
SafeBotting = false;
ExtremeBotting = true;
TimeBetweenBoxes = 0;
BoxesPerHour = 5000;
UsePet = false;
}
public override void ChooseLogic()
{
Dictionary<TaskLoadDelegate, int> TaskLoadDictionary = new Dictionary<TaskLoadDelegate, int>();
if (BMain.Deaths < 20)
{
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("pvp MMO task 2-2"))
{
BMain.WriteLog("pvp MMO task 2-2");
Reset();
TaskMap = "2-2";
ActionList.Add("pvp MMO task 2-2");
}
}, 10);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("pvp MMO task 2-3"))
{
BMain.WriteLog("pvp MMO task 2-3");
Reset();
TaskMap = "2-3";
ActionList.Add("pvp MMO task 2-3");
}
}, 10);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("pvp MMO task 2-4"))
{
BMain.WriteLog("pvp MMO task 2-4");
Reset();
TaskMap = "2-4";
ActionList.Add("pvp MMO task 2-4");
}
}, 10);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("pvp MMO task 3-2"))
{
BMain.WriteLog("pvp MMO task 3-2");
Reset();
TaskMap = "3-2";
ActionList.Add("pvp MMO task 3-2");
}
}, 10);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("pvp MMO task 3-3"))
{
BMain.WriteLog("pvp MMO task 3-3");
Reset();
TaskMap = "3-3";
ActionList.Add("pvp MMO task 3-3");
}
}, 10);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("pvp MMO task 3-4"))
{
BMain.WriteLog("pvp MMO task 3-4");
Reset();
TaskMap = "3-4";
ActionList.Add("pvp MMO task 3-4");
}
}, 10);
}
else
{
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("gather task x-2"))
{
BMain.WriteLog("gather task x-2");
Reset();
TaskMap = "x-2";
FleeOnAttacked = true;
FleeOnEnemyInRadius = true;
FleeRadius = 4000;
AnswerAttacks = true;
IgnorePlayersOnTravel = true;
ActionList.Add("gather task x-2");
}
}, 25);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("gather task x-3"))
{
BMain.WriteLog("gather task x-3");
Reset();
TaskMap = "x-3";
FleeOnAttacked = true;
FleeOnEnemyInRadius = true;
FleeRadius = 4000;
AnswerAttacks = true;
IgnorePlayersOnTravel = true;
ActionList.Add("gather task x-3");
}
}, 25);
TaskLoadDictionary.Add(
delegate()
{
if (!ActionList.Contains("gather task x-4"))
{
BMain.WriteLog("gather task x-4");
Reset();
TaskMap = "x-4";
FleeOnAttacked = true;
FleeOnEnemyInRadius = true;
FleeRadius = 4000;
AnswerAttacks = true;
IgnorePlayersOnTravel = true;
ActionList.Add("gather task x-4");
}
}, 25);
}
CycleTaskDictionary = TaskLoadDictionary;
}
}
}