public void UpdateSquadMission(ConquestDroneSquad squad) { ConquestMission mission = null; if (squad.Mission() != null && squad.Mission().MissionType == ActionTypes.Patrol) { mission = GenerateMission(squad, true); if (mission != null) { squad.IssueMission(mission); squad.SetOwner(GetMothershipID()); Util.GetInstance().Log("[ConquestDroneManager.UpdateSquadMission] Switching from patrol mission to assist Mission " + squad.myid, logpath); } } if (mission == null) { mission = squad.ReadyForNewMission(ticks) ? GenerateMission(squad) : squad.Mission(); squad.IssueMission(mission); squad.SetOwner(GetMothershipID()); } }
public void IssueMission(ConquestMission mis) { mission = mis; }
private ConquestMission GenerateMission(ConquestDroneSquad squad, bool assistOnly = false) { bool readyForNewMission = squad.ReadyForNewMission(ticks); bool previousMissionGuard = squad.Mission() != null && squad.Mission().MissionType == ActionTypes.Guard; if (!readyForNewMission && !assistOnly) { return(null); } if (!previousMissionGuard) { Util.GetInstance().Log("[ConquestDroneManager.GenerateMission] PreviousMission Expired " + squad.myid, logpath); } if (squad.Mission() != null && squad.Mission().IsAsteroid) { _asteroids[squad.Mission().asteroid] = _asteroids[squad.Mission().asteroid] + 1; } bool ong = false; Vector3D loc = Vector3D.Zero; int start = ticks; ConquestMission mission = null; if (!assistOnly) { //try to patrol around the mothership if there are open positions if (NumGuardingDroneSquads < MaxNumGuardingDroneSquads) { loc = _mothershipLocation; // the 0 is to make this mission always last only one command cycle, so if the squad dies I wont have to so multipule updates removing it as a guarding squad mission = new ConquestMission(ong, loc, start, ActionTypes.Guard); //Util.GetInstance().Log("[ConquestDroneManager.GenerateMission] guard Home "+squad.myid, logpath); NumGuardingDroneSquads++; return(mission); } } //if any drones are in need of assistance then assist them foreach (var pair in _combatSites) { if (!(CalculateTargetPriority(pair.Key) >= _combatSites[pair.Key] + 1)) { continue; } Util.GetInstance() .Log( "[ConquestDroneManager.GenerateMission] Number of combat sites in need of help " + _combatSites.Count(), logpath); loc = pair.Key * 3000; _combatSites[pair.Key] = _combatSites[pair.Key] + 1; mission = new ConquestMission(ong, loc, start, ActionTypes.Assist); Util.GetInstance() .Log("[ConquestDroneManager.GenerateMission] joining in combat " + squad.myid, logpath); return(mission); } //i dont think visiting asteroids is nessessary, they explore enough to find players as is //if (!assistOnly) //{ // var asteroids = // _asteroids.OrderBy(x => x.Value) // .Where(y => (y.Key.GetPosition() - squad.GetLocation()).Length() < DroneMaxRange); // //if there are nearby unexplored asteroids explore them // foreach (var pair in asteroids) // { // int max = _asteroids.Values.Max(); // if (pair.Value < max || _asteroids.Count == _asteroids.Count(x=>x.Value == max)) // { // loc = pair.Key.GetPosition(); // mission = new ConquestMission(ong, loc, start, ActionTypes.Assist, DroneMaxRange/15, true, // pair.Key); // Util.GetInstance() // .Log("[ConquestDroneManager.GenerateMission] orbit asteroid " + squad.myid, logpath); // } // return mission; // } //} if (assistOnly) { return(mission); } //generate a random patrol route int X = r.Next(-DroneMaxRange, DroneMaxRange); int Y = r.Next(-DroneMaxRange, DroneMaxRange); int Z = r.Next(-DroneMaxRange, DroneMaxRange); loc = _mothershipLocation + new Vector3D(X, Y, Z); Util.GetInstance().Log("[ConquestDroneManager.GenerateMission] Patrol loc:" + loc + " " + squad.myid, logpath); mission = new ConquestMission(ong, loc, start, ActionTypes.Patrol, DroneMaxRange / 1000 * 60); return(mission); }
private ConquestMission GenerateMission(ConquestDroneSquad squad, bool assistOnly = false) { bool readyForNewMission = squad.ReadyForNewMission(ticks); bool previousMissionGuard = squad.Mission() != null && squad.Mission().MissionType == ActionTypes.Guard; if (!readyForNewMission && !assistOnly) return null; if (!previousMissionGuard) Util.GetInstance().Log("[ConquestDroneManager.GenerateMission] PreviousMission Expired " + squad.myid, logpath); if (squad.Mission() != null && squad.Mission().IsAsteroid) _asteroids[squad.Mission().asteroid] = _asteroids[squad.Mission().asteroid] + 1; bool ong = false; Vector3D loc = Vector3D.Zero; int start = ticks; ConquestMission mission = null; if(!assistOnly) //try to patrol around the mothership if there are open positions if (NumGuardingDroneSquads < MaxNumGuardingDroneSquads) { loc = _mothershipLocation; // the 0 is to make this mission always last only one command cycle, so if the squad dies I wont have to so multipule updates removing it as a guarding squad mission = new ConquestMission(ong, loc, start, ActionTypes.Guard); //Util.GetInstance().Log("[ConquestDroneManager.GenerateMission] guard Home "+squad.myid, logpath); NumGuardingDroneSquads++; return mission; } //if any drones are in need of assistance then assist them foreach (var pair in _combatSites) { if (!(CalculateTargetPriority(pair.Key) >= _combatSites[pair.Key] + 1)) continue; Util.GetInstance() .Log( "[ConquestDroneManager.GenerateMission] Number of combat sites in need of help " + _combatSites.Count(), logpath); loc = pair.Key*3000; _combatSites[pair.Key] = _combatSites[pair.Key] + 1; mission = new ConquestMission(ong, loc, start, ActionTypes.Assist); Util.GetInstance() .Log("[ConquestDroneManager.GenerateMission] joining in combat " + squad.myid, logpath); return mission; } //i dont think visiting asteroids is nessessary, they explore enough to find players as is //if (!assistOnly) //{ // var asteroids = // _asteroids.OrderBy(x => x.Value) // .Where(y => (y.Key.GetPosition() - squad.GetLocation()).Length() < DroneMaxRange); // //if there are nearby unexplored asteroids explore them // foreach (var pair in asteroids) // { // int max = _asteroids.Values.Max(); // if (pair.Value < max || _asteroids.Count == _asteroids.Count(x=>x.Value == max)) // { // loc = pair.Key.GetPosition(); // mission = new ConquestMission(ong, loc, start, ActionTypes.Assist, DroneMaxRange/15, true, // pair.Key); // Util.GetInstance() // .Log("[ConquestDroneManager.GenerateMission] orbit asteroid " + squad.myid, logpath); // } // return mission; // } //} if (assistOnly) return mission; //generate a random patrol route int X = r.Next(-DroneMaxRange,DroneMaxRange); int Y = r.Next(-DroneMaxRange,DroneMaxRange); int Z = r.Next(-DroneMaxRange, DroneMaxRange); loc = _mothershipLocation + new Vector3D(X, Y, Z); Util.GetInstance().Log("[ConquestDroneManager.GenerateMission] Patrol loc:" +loc+" "+ squad.myid, logpath); mission = new ConquestMission(ong, loc, start, ActionTypes.Patrol, DroneMaxRange/1000*60); return mission; }