/// <summary> /// Grabs a new currentOrderPosition and updates the toils with it /// </summary> private void UpdateOrderPosition() { currentOrderPosition = deployedMilitaryCommandMenu.currentOrderPositionDic[squad]; lordToil_DefendPoint.SetDefendPoint(deployedMilitaryCommandMenu.currentOrderPositionDic[squad]); lordToil_HuntEnemies = new LordToil_HuntEnemies(deployedMilitaryCommandMenu.currentOrderPositionDic[squad]); //((LordToilData_HuntEnemies)lordToil_HuntEnemies.data).fallbackLocation = deployedMilitaryCommandMenu.currentOrderPositionDic[squad]; lord.CurLordToil.UpdateAllDuties(); }
public override void Tick() { base.Tick(); if (this.count++ > 1) { this.count = 0; List <Lord> lords = base.Map.lordManager.lords; IntVec3 position = base.Position; checked { for (int i = 0; i < lords.Count; i++) { Lord lord = lords[i]; if (lord.LordJob is LordJob_TradeWithColony) { FieldInfo field = lord.LordJob.GetType().GetField("chillSpot", BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); IntVec3 intVec = (IntVec3)field.GetValue(lord.LordJob); if (intVec.x != position.x || intVec.y != position.y || intVec.z != position.z) { field.SetValue(lord.LordJob, position); } LordToil curLordToil = lord.CurLordToil; if (curLordToil is LordToil_Travel) { LordToil_Travel lordToil_Travel = (LordToil_Travel)curLordToil; if (lordToil_Travel.FlagLoc != position) { lordToil_Travel.SetDestination(position); lordToil_Travel.UpdateAllDuties(); } } else if (curLordToil is LordToil_DefendPoint) { LordToil_DefendPoint lordToil_DefendPoint = (LordToil_DefendPoint)curLordToil; if (lordToil_DefendPoint.FlagLoc != position) { lordToil_DefendPoint.SetDefendPoint(position); lordToil_DefendPoint.UpdateAllDuties(); } } foreach (Pawn current in lord.ownedPawns) { if (current.RaceProps.Animal) { if (current.needs != null && current.needs.food != null && current.needs.food.CurLevel <= current.needs.food.MaxLevel) { current.needs.food.CurLevel = current.needs.food.MaxLevel; } } } } } } } }
public void ChangeDefendPoint(Faction faction) { Lord defendLord = null; List <Lord> allLords = this.SingleMap.lordManager.lords; for (int i = 0; i < allLords.Count; i++) { Lord lord = allLords[i]; if (lord.faction != null && lord.faction == faction) { if (lord.CurLordToil != null && lord.CurLordToil is LordToil_DefendPoint) { defendLord = lord; LordToil_DefendPoint lordToil = defendLord.CurLordToil as LordToil_DefendPoint; lordToil.SetDefendPoint(this.centerLocation.ToIntVec3); } } } defendLord.CurLordToil.UpdateAllDuties(); }
public override void DoAction(Transition trans) { LordToil_DefendPoint lordToil_DefendPoint = (LordToil_DefendPoint)trans.target; lordToil_DefendPoint.SetDefendPoint(lordToil_DefendPoint.lord.ownedPawns.RandomElement().Position); }
public void SendAssaultWave(Faction faction, bool finalAssault = false) { Lord assaultLord = null; Lord defendLord = null; List <Lord> allLords = this.SingleMap.lordManager.lords; for (int i = 0; i < allLords.Count; i++) { Lord lord = allLords[i]; if (lord.faction != null && lord.faction == faction) { if (lord.CurLordToil != null && lord.CurLordToil is LordToil_DefendPoint) { defendLord = lord; LordToil_DefendPoint lordToil = defendLord.CurLordToil as LordToil_DefendPoint; lordToil.SetDefendPoint(this.centerLocation.ToIntVec3); } else if (lord.CurLordToil != null && lord.CurLordToil is LordToil_AssaultColony) { assaultLord = lord; } } } if (assaultLord == null) { LordJob_AssaultColony lordJob = new LordJob_AssaultColony(faction, false, false, false, false, false); Traverse.Create(root: lordJob).Field(name: "canTimeoutOrFlee").SetValue(false); assaultLord = LordMaker.MakeNewLord(faction, lordJob, this.SingleMap, null); } if (defendLord == null) { LordJob_DefendPoint lordJob = new LordJob_DefendPoint(this.centerLocation.ToIntVec3); defendLord = LordMaker.MakeNewLord(faction, lordJob, this.SingleMap, null); } List <Pawn> allPawns = this.SingleMap.mapPawns.AllPawnsSpawned; for (int i = 0; i < allPawns.Count; i++) { if (allPawns[i].Faction != null && allPawns[i].Faction == faction) { Lord pawnLord = allPawns[i].GetLord(); if (allPawns[i].def == TorannMagicDefOf.TM_SkeletonR && pawnLord != null) { if (pawnLord != null) { if (pawnLord != assaultLord && (Rand.Chance(.4f) || finalAssault)) { allPawns[i].GetLord()?.Notify_PawnLost(allPawns[i], PawnLostCondition.ForcedToJoinOtherLord); assaultLord.AddPawn(allPawns[i]); } } else { defendLord.AddPawn(allPawns[i]); } } if (allPawns[i].def == TorannMagicDefOf.TM_GiantSkeletonR && pawnLord != null) { if (pawnLord != null) { if (pawnLord != assaultLord && (Rand.Chance(.25f) || finalAssault)) { allPawns[i].GetLord()?.Notify_PawnLost(allPawns[i], PawnLostCondition.ForcedToJoinOtherLord); assaultLord.AddPawn(allPawns[i]); } } else { defendLord.AddPawn(allPawns[i]); } } if (allPawns[i].def == TorannMagicDefOf.TM_SkeletonLichR) { if (finalAssault) { if (pawnLord != null && pawnLord != assaultLord) { allPawns[i].GetLord()?.Notify_PawnLost(allPawns[i], PawnLostCondition.ForcedToJoinOtherLord); //pawnLord.ownedPawns.Remove(allPawns[i]); } assaultLord.AddPawn(allPawns[i]); } } } } }