public override void CompTick() { base.CompTick(); if (parent.IsHashIntervalTick(120)) { CheckAutoload(); } if (parent.Spawned && dropEverythingOnArrival && parent.IsHashIntervalTick(60)) { if (Transporter.innerContainer.Any()) { Thing thing = Transporter.innerContainer[0]; IntVec3 dropLoc = parent.Position + IntVec3.South; Pawn pawn; if (Transporter.innerContainer.TryDrop_NewTmp(thing, dropLoc, parent.Map, ThingPlaceMode.Near, out Thing _, null, (IntVec3 c) => ((pawn = (Transporter.innerContainer[0] as Pawn)) == null || !pawn.Downed || c.GetFirstPawn(parent.Map) == null) ? true : false, playDropSound: false)) { Transporter.Notify_ThingRemoved(thing); } } else { TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter)); Send(); } } if (leaveASAP && parent.Spawned) { if (!LoadingInProgressOrReadyToLaunch) { TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter)); } Send(); } if (leaveImmediatelyWhenSatisfied && AllRequiredThingsLoaded) { Send(); } }
private void OffloadShuttleOrSend() { Thing thingToDrop = null; float num = 0f; for (int i = 0; i < Transporter.innerContainer.Count; i++) { Thing thing = Transporter.innerContainer[i]; float num2 = GetDropPriority(thing); if (num2 > num) { thingToDrop = thing; num = num2; } } if (thingToDrop != null) { IntVec3 dropLoc = parent.Position + DropoffSpotOffset; if (!Transporter.innerContainer.TryDrop_NewTmp(thingToDrop, dropLoc, parent.Map, ThingPlaceMode.Near, out var _, null, delegate(IntVec3 c) { if (c.Fogged(parent.Map)) { return(false); } Pawn pawn2; return(((pawn2 = thingToDrop as Pawn) == null || !pawn2.Downed || c.GetFirstPawn(parent.Map) == null) ? true : false); }, playDropSound: false)) { return; } Transporter.Notify_ThingRemoved(thingToDrop); droppedOnArrival.Add(thingToDrop); Pawn pawn; if ((pawn = thingToDrop as Pawn) != null) { if (pawn.IsColonist && pawn.Spawned && !parent.Map.IsPlayerHome) { pawn.drafter.Drafted = true; } if (pawn.guest != null && pawn.guest.IsPrisoner) { pawn.guest.WaitInsteadOfEscapingForDefaultTicks(); } } } else { if (!Transporter.LoadingInProgressOrReadyToLaunch) { TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter)); } if (!stayAfterDroppedEverythingOnArrival || (sendAwayIfQuestFinished != null && sendAwayIfQuestFinished.Historical)) { Send(); } else { dropEverythingOnArrival = false; } } float GetDropPriority(Thing t) { if (droppedOnArrival.Contains(t)) { return(0f); } Pawn p; if ((p = t as Pawn) != null) { Lord lord = p.GetLord(); LordToil_EnterShuttleOrLeave lordToil_EnterShuttleOrLeave; if (lord?.CurLordToil != null && (lordToil_EnterShuttleOrLeave = lord.CurLordToil as LordToil_EnterShuttleOrLeave) != null && lordToil_EnterShuttleOrLeave.shuttle == parent) { return(0f); } LordToil_LoadAndEnterTransporters lordToil_LoadAndEnterTransporters; if (lord?.CurLordToil != null && (lordToil_LoadAndEnterTransporters = lord.CurLordToil as LordToil_LoadAndEnterTransporters) != null && lordToil_LoadAndEnterTransporters.transportersGroup == parent.TryGetComp <CompTransporter>().groupID) { return(0f); } if (!p.AnimalOrWildMan()) { return(1f); } return(0.5f); } return(0.25f); } }