public Verb CopyAndReturnNewVerb(Verb newVerb = null) { if (newVerb != null) { deflectVerb = null; deflectVerb = (Verb_Deflected)Activator.CreateInstance(typeof(Verb_Deflected)); deflectVerb.caster = GetPawn; //Initialize VerbProperties VerbProperties newVerbProps = new VerbProperties(); //Copy values over to a new verb props newVerbProps.hasStandardCommand = newVerb.verbProps.hasStandardCommand; newVerbProps.projectileDef = newVerb.verbProps.projectileDef; newVerbProps.range = newVerb.verbProps.range; newVerbProps.muzzleFlashScale = newVerb.verbProps.muzzleFlashScale; newVerbProps.warmupTime = 0; newVerbProps.defaultCooldownTime = 0; newVerbProps.soundCast = this.Props.deflectSound; //Apply values deflectVerb.verbProps = newVerbProps; } else { if (deflectVerb == null) { deflectVerb = (Verb_Deflected)Activator.CreateInstance(typeof(Verb_Deflected)); deflectVerb.caster = GetPawn; deflectVerb.verbProps = this.Props.DeflectVerb; } } return(deflectVerb); }
protected override IEnumerable <Toil> MakeNewToils() { ////Log.Message("DeflecVErbcalls"); yield return(Toils_Misc.ThrowColonistAttackingMote(TargetIndex.A)); //Toil getInRangeToil = Toils_Combat.GotoCastPosition(TargetIndex.A, false); //yield return getInRangeToil; Verb_Deflected verb = this.pawn.CurJob.verbToUse as Verb_Deflected; //Find.Targeter.targetingVerb = verb; yield return(Toils_Combat.CastVerb(TargetIndex.A, false)); }
public virtual void GiveDeflectJob(DamageInfo dinfo) { try { Pawn pawn2 = dinfo.Instigator as Pawn; if (pawn2 != null) { Job job = new Job(CompDeflectorDefOf.CastDeflectVerb); job.playerForced = true; job.locomotionUrgency = LocomotionUrgency.Sprint; if (pawn2.equipment != null) { CompEquippable compEquip = pawn2.equipment.PrimaryEq; if (compEquip != null) { if (compEquip.PrimaryVerb != null) { Verb_Deflected verbToUse = (Verb_Deflected)CopyAndReturnNewVerb(compEquip.PrimaryVerb); verbToUse = (Verb_Deflected)ReflectionHandler(deflectVerb); verbToUse.lastShotReflected = this.lastShotReflected; pawn2 = ResolveDeflectionTarget(pawn2); bool shouldContinue = false; CriticalFailureHandler(dinfo, pawn2, out shouldContinue); if (shouldContinue) { job.targetA = pawn2; job.verbToUse = verbToUse; job.killIncappedTarget = pawn2.Downed; GetPawn.jobs.TryTakeOrderedJob(job); } } } } } } catch (NullReferenceException) { } ////Log.Message("TryToTakeOrderedJob Called"); }