Exemplo n.º 1
0
        public override void Notify_DoBillStarted(Pawn billDoer)
        {
            base.Notify_DoBillStarted(billDoer);
            consumedInitialMedicineDef = null;
            if (GiverPawn.Dead || !recipe.anesthetize || !HealthUtility.TryAnesthetize(GiverPawn))
            {
                return;
            }
            List <ThingCountClass> placedThings = billDoer.CurJob.placedThings;

            for (int i = 0; i < placedThings.Count; i++)
            {
                if (placedThings[i].thing is Medicine)
                {
                    recipe.Worker.ConsumeIngredient(placedThings[i].thing.SplitOff(1), recipe, billDoer.MapHeld);
                    placedThings[i].Count--;
                    consumedInitialMedicineDef = placedThings[i].thing.def;
                    if (placedThings[i].thing.Destroyed || placedThings[i].Count <= 0)
                    {
                        placedThings.RemoveAt(i);
                    }
                    break;
                }
            }
        }
Exemplo n.º 2
0
 public override void Notify_DoBillStarted(Pawn billDoer)
 {
     base.Notify_DoBillStarted(billDoer);
     consumedInitialMedicineDef = null;
     if (!GiverPawn.Dead && recipe.anesthetize && HealthUtility.TryAnesthetize(GiverPawn))
     {
         List <ThingCountClass> placedThings = billDoer.CurJob.placedThings;
         int num = 0;
         while (true)
         {
             if (num >= placedThings.Count)
             {
                 return;
             }
             if (placedThings[num].thing is Medicine)
             {
                 break;
             }
             num++;
         }
         recipe.Worker.ConsumeIngredient(placedThings[num].thing.SplitOff(1), recipe, billDoer.MapHeld);
         placedThings[num].Count--;
         consumedInitialMedicineDef = placedThings[num].thing.def;
         if (placedThings[num].thing.Destroyed || placedThings[num].Count <= 0)
         {
             placedThings.RemoveAt(num);
         }
     }
 }
Exemplo n.º 3
0
 public override void Notify_DoBillStarted(Pawn billDoer)
 {
     base.Notify_DoBillStarted(billDoer);
     this.consumedInitialMedicineDef = null;
     if (!this.GiverPawn.Dead && base.recipe.anesthetize && HealthUtility.TryAnesthetize(this.GiverPawn))
     {
         List <ThingStackPartClass> placedThings = billDoer.CurJob.placedThings;
         int num = 0;
         while (true)
         {
             if (num < placedThings.Count)
             {
                 if (!(placedThings[num].thing is Medicine))
                 {
                     num++;
                     continue;
                 }
                 break;
             }
             return;
         }
         base.recipe.Worker.ConsumeIngredient(placedThings[num].thing.SplitOff(1), base.recipe, billDoer.MapHeld);
         placedThings[num].Count--;
         this.consumedInitialMedicineDef = placedThings[num].thing.def;
         if (!placedThings[num].thing.Destroyed && placedThings[num].Count > 0)
         {
             return;
         }
         placedThings.RemoveAt(num);
     }
 }
 public override void Notify_QuestSignalReceived(Signal signal)
 {
     base.Notify_QuestSignalReceived(signal);
     if (!(signal.tag == inSignal))
     {
         return;
     }
     pawns.RemoveAll((Pawn x) => x.Destroyed);
     if (joinPlayer)
     {
         for (int i = 0; i < pawns.Count; i++)
         {
             if (pawns[i].Faction != Faction.OfPlayer)
             {
                 pawns[i].SetFaction(Faction.OfPlayer);
             }
         }
     }
     else
     {
         if (!makePrisoners)
         {
             return;
         }
         for (int j = 0; j < pawns.Count; j++)
         {
             if (pawns[j].RaceProps.Humanlike)
             {
                 if (!pawns[j].IsPrisonerOfColony)
                 {
                     pawns[j].guest.SetGuestStatus(Faction.OfPlayer, prisoner: true);
                 }
                 HealthUtility.TryAnesthetize(pawns[j]);
             }
         }
     }
 }
Exemplo n.º 5
0
        public override void DoWindowContents(Rect inRect)
        {
            //grab before anchor/font
            GameFont   fontBefore   = Text.Font;
            TextAnchor anchorBefore = Text.Anchor;

            //top label
            Text.Font   = GameFont.Small;
            Text.Anchor = TextAnchor.MiddleCenter;



            Text.Anchor = TextAnchor.MiddleLeft;

            int i = 0;

            foreach (FCPrisoner prisoner in prisoners)
            {
                Rect Box;
                Rect PawnIcon;
                Rect PawnName;
                Rect PawnHealth;
                Rect PawnUnrest;
                Rect PawnWorkload;
                Rect ButtonInfo;
                Rect ButtonAction;

                Box          = optionBox;
                PawnIcon     = optionPawnIcon;
                PawnName     = optionPawnName;
                PawnHealth   = optionPawnHealth;
                PawnUnrest   = optionPawnUnrest;
                PawnWorkload = optionPawnWorkload;
                ButtonInfo   = optionButtonInfo;
                ButtonAction = optionButtonAction;

                Box.y          += scroll + optionHeight * i;
                PawnIcon.y     += scroll + optionHeight * i;
                PawnName.y     += scroll + optionHeight * i;
                PawnHealth.y   += scroll + optionHeight * i;
                PawnUnrest.y   += scroll + optionHeight * i;
                PawnWorkload.y += scroll + optionHeight * i;
                ButtonInfo.y   += scroll + optionHeight * i;
                ButtonAction.y += scroll + optionHeight * i;


                //display stuff now
                Widgets.DrawMenuSection(Box);
                //on every other box
                if (i % 2 == 0)
                {
                    Widgets.DrawHighlight(Box);
                }

                //show pawn;
                Widgets.ThingIcon(PawnIcon, prisoner.prisoner);
                //Pawn Name
                Widgets.Label(PawnName, prisoner.prisoner.Name.ToString());
                //Pawn Health
                Widgets.Label(PawnHealth, "Health".Translate().CapitalizeFirst() + " " + prisoner.health);
                //Pawn Unrest
                //Widgets.Label(PawnUnrest, "Unrest".Translate().CapitalizeFirst() + " " + prisoner.unrest);



                //Pawn Workload
                string workload;
                switch (prisoner.workload)
                {
                case FCWorkLoad.Heavy:
                    workload = "FCHeavy".Translate().CapitalizeFirst();
                    break;

                case FCWorkLoad.Medium:
                    workload = "FCMedium".Translate().CapitalizeFirst();
                    break;

                case FCWorkLoad.Light:
                    workload = "FCLight".Translate().CapitalizeFirst();
                    break;

                default:
                    workload = "null";
                    break;
                }
                if (Widgets.ButtonText(PawnWorkload, "FCWorkload".Translate().CapitalizeFirst() + ": " + workload))
                {
                    List <FloatMenuOption> list = new List <FloatMenuOption>();
                    list.Add(new FloatMenuOption("FCHeavy".Translate().CapitalizeFirst() + " - " + "FCHeavyExplanation".Translate(), delegate
                    {
                        prisoner.workload = FCWorkLoad.Heavy;
                    }));
                    list.Add(new FloatMenuOption("FCMedium".Translate().CapitalizeFirst() + " - " + "FCMediumExplanation".Translate(), delegate
                    {
                        prisoner.workload = FCWorkLoad.Medium;
                    }));
                    list.Add(new FloatMenuOption("FCLight".Translate().CapitalizeFirst() + " - " + "FCLightExplanation".Translate(), delegate
                    {
                        prisoner.workload = FCWorkLoad.Light;
                    }));
                    FloatMenu menu = new FloatMenu(list);
                    Find.WindowStack.Add(menu);
                }

                //Info Button
                if (Widgets.ButtonTextSubtle(ButtonInfo, "ViewInfo".Translate()))
                {
                    Pawn pawn = new Pawn();
                    pawn = prisoner.prisoner;

                    if (prisoner.healthTracker != null)
                    {
                        prisoner.prisoner.health = prisoner.healthTracker;
                    }
                    else
                    {
                        prisoner.prisoner.health = new Pawn_HealthTracker(prisoner.prisoner);
                        prisoner.healthTracker   = new Pawn_HealthTracker(prisoner.prisoner);
                    }

                    pawn.health = prisoner.healthTracker;


                    Find.WindowStack.Add(new Dialog_InfoCard(pawn));
                }

                //Action button
                if (Widgets.ButtonTextSubtle(ButtonAction, "Actions".Translate()))
                {
                    List <FloatMenuOption> list = new List <FloatMenuOption>();

                    list.Add(new FloatMenuOption("SellPawn".Translate() + " $" + prisoner.prisoner.MarketValue + " " + "SellPawnInfo".Translate(), delegate

                    {
                        settlement.addSilverIncome(prisoner.prisoner.MarketValue);

                        //reset window
                        prisoners.Remove(prisoner);
                        WindowUpdate();
                        return;
                    }));

                    list.Add(new FloatMenuOption("ReturnToPlayer".Translate(), delegate
                    {
                        if (prisoner.healthTracker != null)
                        {
                            prisoner.prisoner.health = prisoner.healthTracker;
                        }
                        else
                        {
                            prisoner.prisoner.health = new Pawn_HealthTracker(prisoner.prisoner);
                            prisoner.healthTracker   = new Pawn_HealthTracker(prisoner.prisoner);
                        }

                        if (!HealthUtility.TryAnesthetize(prisoner.prisoner))
                        {
                            HealthUtility.DamageUntilDowned(prisoner.prisoner, false);
                        }

                        if (prisoner.prisoner.guest == null)
                        {
                            prisoner.prisoner.guest = new Pawn_GuestTracker();
                        }
                        prisoner.prisoner.guest.guestStatusInt = GuestStatus.Prisoner;
                        FieldInfo hostFaction = typeof(Pawn_GuestTracker).GetField("hostFactionInt", BindingFlags.NonPublic | BindingFlags.Instance);
                        hostFaction.SetValue(prisoner.prisoner.guest, Find.FactionManager.OfPlayer);

                        DeliveryEvent.CreateDeliveryEvent(new FCEvent
                        {
                            location   = Find.AnyPlayerHomeMap.Tile,
                            source     = settlement.mapLocation,
                            planetName = settlement.planetName,
                            goods      = new List <Thing> {
                                prisoner.prisoner
                            },
                            customDescription = "aPrisonerIsBeingDeliveredToYou".Translate(),
                            timeTillTrigger   = Find.TickManager.TicksGame + FactionColonies.ReturnTicksToArrive(settlement.mapLocation, Find.AnyPlayerHomeMap.Tile)
                        });

                        //reset window
                        prisoners.Remove(prisoner);
                        WindowUpdate();
                        return;
                    }));


                    FloatMenu menu = new FloatMenu(list);
                    Find.WindowStack.Add(menu);
                }



                //increment i
                i++;
            }

            Text.Font   = fontBefore;
            Text.Anchor = anchorBefore;

            if (Event.current.type == EventType.ScrollWheel)
            {
                scrollWindow(Event.current.delta.y);
            }
        }
Exemplo n.º 6
0
        public override void Notify_QuestSignalReceived(Signal signal)
        {
            base.Notify_QuestSignalReceived(signal);
            if (!(signal.tag == inSignal))
            {
                return;
            }
            pawns.RemoveAll((Pawn x) => x.Destroyed);
            items.RemoveAll((Thing x) => x.Destroyed);
            Thing thing  = Things.Where((Thing x) => x is Pawn).MaxByWithFallback((Thing x) => x.MarketValue);
            Thing thing2 = Things.MaxByWithFallback((Thing x) => x.MarketValue * (float)x.stackCount);

            if (mapParent != null && mapParent.HasMap && Things.Any())
            {
                Map     map    = mapParent.Map;
                IntVec3 intVec = (dropSpot.IsValid ? dropSpot : GetRandomDropSpot());
                if (sendStandardLetter)
                {
                    TaggedString title;
                    TaggedString text;
                    if (joinPlayer && pawns.Count == 1 && pawns[0].RaceProps.Humanlike)
                    {
                        text  = "LetterRefugeeJoins".Translate(pawns[0].Named("PAWN"));
                        title = "LetterLabelRefugeeJoins".Translate(pawns[0].Named("PAWN"));
                        PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref title, pawns[0]);
                    }
                    else
                    {
                        text  = "LetterQuestDropPodsArrived".Translate(GenLabel.ThingsLabel(Things));
                        title = "LetterLabelQuestDropPodsArrived".Translate();
                        PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(pawns, ref title, ref text, "LetterRelatedPawnsNeutralGroup".Translate(Faction.OfPlayer.def.pawnsPlural), informEvenIfSeenBefore: true);
                    }
                    title = (customLetterLabel.NullOrEmpty() ? title : customLetterLabel.Formatted(title.Named("BASELABEL")));
                    text  = (customLetterText.NullOrEmpty() ? text : customLetterText.Formatted(text.Named("BASETEXT")));
                    Find.LetterStack.ReceiveLetter(title, text, customLetterDef ?? LetterDefOf.PositiveEvent, new TargetInfo(intVec, map), null, quest);
                }
                if (joinPlayer)
                {
                    for (int i = 0; i < pawns.Count; i++)
                    {
                        if (pawns[i].Faction != Faction.OfPlayer)
                        {
                            pawns[i].SetFaction(Faction.OfPlayer);
                        }
                    }
                }
                else if (makePrisoners)
                {
                    for (int j = 0; j < pawns.Count; j++)
                    {
                        if (pawns[j].RaceProps.Humanlike)
                        {
                            if (!pawns[j].IsPrisonerOfColony)
                            {
                                pawns[j].guest.SetGuestStatus(Faction.OfPlayer, prisoner: true);
                            }
                            HealthUtility.TryAnesthetize(pawns[j]);
                        }
                    }
                }
                for (int k = 0; k < pawns.Count; k++)
                {
                    pawns[k].needs.SetInitialLevels();
                }
                DropPodUtility.DropThingsNear(intVec, map, Things, 110, canInstaDropDuringInit: false, leaveSlag: false, !useTradeDropSpot, forbid: false);
                importantLookTarget = items.Find((Thing x) => x.GetInnerIfMinified() is MonumentMarker).GetInnerIfMinified();
                items.Clear();
            }
            if (!outSignalResult.NullOrEmpty())
            {
                if (thing != null)
                {
                    Find.SignalManager.SendSignal(new Signal(outSignalResult, thing.Named("SUBJECT")));
                }
                else if (thing2 != null)
                {
                    Find.SignalManager.SendSignal(new Signal(outSignalResult, thing2.Named("SUBJECT")));
                }
                else
                {
                    Find.SignalManager.SendSignal(new Signal(outSignalResult));
                }
            }
        }