/// <summary> /// 行为过程 /// </summary> /// <returns></returns> protected override IEnumerable <Toil> MakeNewToils() { Pawn prisoner = (Pawn)Target; //小人身上已经存在锁链 if (prisoner.HasChains()) { yield break; } this.FailOnDestroyedOrNull(TargetIndex.A); this.FailOnDestroyedOrNull(TargetIndex.B); //this.FailOnDespawnedNullOrForbidden(TargetIndex.A);//如果物品没有forbidden组件千万不要用这个条件,会直接判断失败 this.FailOnAggroMentalStateAndHostile(TargetIndex.B); //B精神不正常 yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch)); //走到道具 yield return(new Toil { initAction = () => { pawn.carryTracker.TryStartCarry(Thing, 1, true); }, defaultCompleteMode = ToilCompleteMode.Instant }); yield return(Toils_Goto.GotoThing(TargetIndex.B, PathEndMode.Touch));//走到囚犯 //捆绑操作 if (!prisoner.Dead) { yield return(Toils_General.WaitWith(TargetIndex.B, 60, true, true)); //交互1秒 yield return(Toils_Reserve.Release(TargetIndex.A)); //释放 yield return(Toils_Reserve.Release(TargetIndex.B)); //家具的效果 yield return(new Toil { initAction = delegate() { if (Thing != null) { CompUseEffect compUseEffect = Thing.TryGetComp <CompUseEffect>(); if (compUseEffect != null) { compUseEffect.DoEffect(prisoner); MoteMaker.ThrowText(Target.PositionHeld.ToVector3(), Target.MapHeld, "SR_Bound".Translate(), 4f); } } }, defaultCompleteMode = ToilCompleteMode.Instant }); } yield break; }
/// <summary> /// 行为过程 /// </summary> /// <returns></returns> protected override IEnumerable <Toil> MakeNewToils() { Pawn prisoner = (Pawn)Target; this.FailOnDestroyedOrNull(TargetIndex.A); this.FailOnDestroyedOrNull(TargetIndex.B); //this.FailOnDespawnedNullOrForbidden(TargetIndex.A);//如果物品没有forbidden组件千万不要用这个条件,会直接判断失败 this.FailOnAggroMentalStateAndHostile(TargetIndex.B); //B精神不正常 yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch)); //走到道具 yield return(new Toil { initAction = () => { pawn.carryTracker.TryStartCarry(Thing, 1, true); }, defaultCompleteMode = ToilCompleteMode.Instant }); yield return(Toils_Goto.GotoThing(TargetIndex.B, PathEndMode.Touch));//走到囚犯 if (!prisoner.Dead) { yield return(Toils_General.WaitWith(TargetIndex.B, 60, true, true)); //交互1秒 yield return(Toils_Reserve.Release(TargetIndex.A)); //释放 yield return(Toils_Reserve.Release(TargetIndex.B)); yield return(new Toil { initAction = delegate() { if (Thing != null) { CompUseEffect compUseEffect = Thing.TryGetComp <CompUseEffect>(); if (compUseEffect != null) { compUseEffect.DoEffect(prisoner); //获得快感 pawn.needs.mood.thoughts.memories.TryGainMemory(Thought.ThoughtDefOf.SR_Thought_Maltreat); } } }, defaultCompleteMode = ToilCompleteMode.Instant }); } yield break; }