private void UpdateDutyForChattelOrGuard(Pawn p, Pawn trader)
        {
            TraderCaravanRole traderCaravanRole = p.GetTraderCaravanRole();

            if (traderCaravanRole == TraderCaravanRole.Chattel)
            {
                if (trader != null)
                {
                    p.mindState.duty = new PawnDuty(DutyDefOf.Escort, trader, 14f);
                }
                else if (!this.TryToDefendClosestCarrier(p, 14f))
                {
                    p.mindState.duty            = new PawnDuty(DutyDefOf.ExitMapBestAndDefendSelf);
                    p.mindState.duty.radius     = 10f;
                    p.mindState.duty.locomotion = LocomotionUrgency.Jog;
                }
            }
            else if (!this.TryToDefendClosestCarrier(p, 26f))
            {
                if (trader != null)
                {
                    p.mindState.duty = new PawnDuty(DutyDefOf.Escort, trader, 26f);
                }
                else
                {
                    p.mindState.duty            = new PawnDuty(DutyDefOf.ExitMapBestAndDefendSelf);
                    p.mindState.duty.radius     = 18f;
                    p.mindState.duty.locomotion = LocomotionUrgency.Jog;
                }
            }
        }
Esempio n. 2
0
 private static void Postfix(Pawn p, ref TraderCaravanRole __result)
 {
     if (__result == TraderCaravanRole.Guard && p.kindDef is RaceAddonPawnKindDef pkd && RaceAddonTools.IsSlave(pkd))
     {
         __result = TraderCaravanRole.Chattel;
     }
 }
 static void Postfix(ref TraderCaravanRole __result, ref Pawn __state)
 {
     if (__state != null && __state.kindDef.RaceProps.packAnimal && !__state.inventory.innerContainer.Any)
     {
         __result = TraderCaravanRole.Chattel;
     }
 }
 public static void Postfix(Pawn p, ref TraderCaravanRole __result)
 {
     if (PawnKindDefExtension.Get(p.kindDef).countAsSlave)
     {
         __result = TraderCaravanRole.Chattel;
     }
 }
        public static bool CheckCanCarryGift(List <Tradeable> tradeables, ITrader trader)
        {
            Pawn pawn = trader as Pawn;

            if (pawn == null)
            {
                return(true);
            }
            float num  = 0f;
            float num2 = 0f;
            Lord  lord = pawn.GetLord();

            if (lord != null)
            {
                for (int i = 0; i < lord.ownedPawns.Count; i++)
                {
                    Pawn pawn2 = lord.ownedPawns[i];
                    TraderCaravanRole traderCaravanRole = pawn2.GetTraderCaravanRole();
                    if ((pawn2.RaceProps.Humanlike && traderCaravanRole != TraderCaravanRole.Guard) || traderCaravanRole == TraderCaravanRole.Carrier)
                    {
                        num  += MassUtility.Capacity(pawn2);
                        num2 += MassUtility.GearAndInventoryMass(pawn2);
                    }
                }
            }
            else
            {
                num  = MassUtility.Capacity(pawn);
                num2 = MassUtility.GearAndInventoryMass(pawn);
            }
            float num3 = 0f;

            for (int j = 0; j < tradeables.Count; j++)
            {
                if (tradeables[j].ActionToDo == TradeAction.PlayerSells)
                {
                    int num4 = Mathf.Min(tradeables[j].CountToTransferToDestination, tradeables[j].CountHeldBy(Transactor.Colony));
                    if (num4 > 0)
                    {
                        num3 += tradeables[j].AnyThing.GetStatValue(StatDefOf.Mass) * (float)num4;
                    }
                }
            }
            if (num2 + num3 <= num)
            {
                return(true);
            }
            float num5 = num - num2;

            if (num5 <= 0f)
            {
                Messages.Message("MessageCantGiveGiftBecauseCantCarryEncumbered".Translate(), MessageTypeDefOf.RejectInput, historical: false);
            }
            else
            {
                Messages.Message("MessageCantGiveGiftBecauseCantCarry".Translate(num3.ToStringMass(), num5.ToStringMass()), MessageTypeDefOf.RejectInput, historical: false);
            }
            return(false);
        }
 public override void UpdateAllDuties()
 {
     UpdateTraderDuty(out var trader);
     UpdateCarriersDuties(trader);
     for (int i = 0; i < lord.ownedPawns.Count; i++)
     {
         Pawn p = lord.ownedPawns[i];
         TraderCaravanRole traderCaravanRole = p.GetTraderCaravanRole();
         if (traderCaravanRole != TraderCaravanRole.Carrier && traderCaravanRole != TraderCaravanRole.Trader)
         {
             UpdateDutyForChattelOrGuard(p, trader);
         }
     }
 }
        static void Postfix(Pawn p, ref TraderCaravanRole __result)
        {
            //Log.Message("GetTraderCaravanRole called");
            if (p.RaceProps.Animal)
            {
                //Log.Message("animal!");
                ExtendedPawnData pawnData = Base.GetExtendedDataStorage().GetExtendedDataFor(p);

                if (pawnData.ownedBy != null)
                {
                    //Log.Message("animal master set, setting role to guard");
                    __result = TraderCaravanRole.Guard;
                }
            }
        }
Esempio n. 8
0
 public override bool ActivateOn(Lord lord, TriggerSignal signal)
 {
     if (signal.type == TriggerSignalType.PawnLost && (signal.condition == PawnLostCondition.IncappedOrKilled || signal.condition == PawnLostCondition.MadePrisoner))
     {
         TraderCaravanRole traderCaravanRole = signal.Pawn.GetTraderCaravanRole();
         if (traderCaravanRole == TraderCaravanRole.Trader || signal.Pawn.RaceProps.packAnimal)
         {
             return(true);
         }
         if (lord.numPawnsLostViolently > 0 && (float)lord.numPawnsLostViolently / (float)lord.numPawnsEverGained >= 0.5f)
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 9
0
 public override bool ActivateOn(Lord lord, TriggerSignal signal)
 {
     if (signal.type == TriggerSignalType.PawnLost)
     {
         for (int i = 0; i < lord.ownedPawns.Count; i++)
         {
             TraderCaravanRole traderCaravanRole = lord.ownedPawns[i].GetTraderCaravanRole();
             if (traderCaravanRole == TraderCaravanRole.Trader || traderCaravanRole == TraderCaravanRole.Guard)
             {
                 return(false);
             }
         }
         return(true);
     }
     return(false);
 }
        public override void UpdateAllDuties()
        {
            Pawn trader = default(Pawn);

            this.UpdateTraderDuty(out trader);
            this.UpdateCarriersDuties(trader);
            for (int i = 0; i < base.lord.ownedPawns.Count; i++)
            {
                Pawn p = base.lord.ownedPawns[i];
                TraderCaravanRole traderCaravanRole = p.GetTraderCaravanRole();
                if (traderCaravanRole != TraderCaravanRole.Carrier && traderCaravanRole != TraderCaravanRole.Trader)
                {
                    this.UpdateDutyForChattelOrGuard(p, trader);
                }
            }
        }
 public override void UpdateAllDuties()
 {
     for (int i = 0; i < this.lord.ownedPawns.Count; i++)
     {
         Pawn pawn = this.lord.ownedPawns[i];
         TraderCaravanRole traderCaravanRole = pawn.GetTraderCaravanRole();
         if (traderCaravanRole == TraderCaravanRole.Carrier || traderCaravanRole == TraderCaravanRole.Chattel)
         {
             pawn.mindState.duty            = new PawnDuty(DutyDefOf.ExitMapBest);
             pawn.mindState.duty.locomotion = LocomotionUrgency.Jog;
         }
         else
         {
             pawn.mindState.duty = new PawnDuty(DutyDefOf.ExitMapBestAndDefendSelf);
         }
     }
 }
Esempio n. 12
0
 public override bool ActivateOn(Lord lord, TriggerSignal signal)
 {
     if (signal.type == TriggerSignalType.PawnLost)
     {
         int num = 0;
         while (num < lord.ownedPawns.Count)
         {
             TraderCaravanRole traderCaravanRole = lord.ownedPawns[num].GetTraderCaravanRole();
             if (traderCaravanRole != TraderCaravanRole.Trader && traderCaravanRole != TraderCaravanRole.Guard)
             {
                 num++;
                 continue;
             }
             return(false);
         }
         return(true);
     }
     return(false);
 }
        public override bool ActivateOn(Lord lord, TriggerSignal signal)
        {
            if (signal.type == TriggerSignalType.PawnLost && (signal.condition == PawnLostCondition.IncappedOrKilled || signal.condition == PawnLostCondition.MadePrisoner))
            {
                TraderCaravanRole traderCaravanRole = signal.Pawn.GetTraderCaravanRole();
                if (traderCaravanRole != TraderCaravanRole.Trader && traderCaravanRole != TraderCaravanRole.Carrier)
                {
                    if (lord.numPawnsLostViolently > 0 && (float)lord.numPawnsLostViolently / (float)lord.numPawnsEverGained >= 0.5)
                    {
                        return(true);
                    }
                    goto IL_006b;
                }
                return(true);
            }
            goto IL_006b;
IL_006b:
            return(false);
        }