Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 3
0
        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");
        }