예제 #1
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            setup_ticks();
            parteners.Add(Partner);            // add job starter, so this wont fail, before Initiator starts his job

            var get_raped = new Toil();

            get_raped.defaultCompleteMode = ToilCompleteMode.Never;
            get_raped.handlingFacing      = true;
            get_raped.initAction          = delegate
            {
                pawn.pather.StopDead();
                pawn.jobs.curDriver.asleep = false;

                SexUtility.BeeingRapedAlert(Partner, pawn);
            };
            get_raped.tickAction = delegate
            {
                --ticks_remaining;
                if ((parteners.Count > 0) && (pawn.IsHashIntervalTick(ticks_between_hearts / parteners.Count)))
                {
                    if (pawn.IsHashIntervalTick(ticks_between_hearts))
                    {
                        if (xxx.is_masochist(pawn))
                        {
                            ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Mote_Heart);
                        }
                        else
                        {
                            ThrowMetaIcon(pawn.Position, pawn.Map, xxx.mote_noheart);
                        }
                    }
                }
            };
            get_raped.AddEndCondition(new Func <JobCondition>(() =>
            {
                if ((ticks_remaining <= 0) || (parteners.Count <= 0))
                {
                    return(JobCondition.Succeeded);
                }
                return(JobCondition.Ongoing);
            }));
            get_raped.AddFinishAction(delegate
            {
                if (xxx.is_human(pawn))
                {
                    pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
                }

                if (Bed != null && pawn.Downed)
                {
                    Job tobed   = JobMaker.MakeJob(JobDefOf.Rescue, pawn, Bed);
                    tobed.count = 1;
                    Partner.jobs.jobQueue.EnqueueFirst(tobed);
                    //Log.Message(xxx.get_pawnname(Initiator) + ": job tobed:" + tobed);
                }
                else if (pawn.HostileTo(Partner))
                {
                    pawn.health.AddHediff(HediffDef.Named("Hediff_Submitting"));
                }
                else
                {
                    pawn.stances.stunner.StunFor(600, pawn);
                }
            });
            get_raped.socialMode = RandomSocialMode.Off;
            yield return(get_raped);
        }