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; } } }
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; } } }
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); }
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); } } }
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); }