Esempio n. 1
0
        /// <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]);
                        }
                    }
                }
            }
        }