public virtual void Effect()
        {
            try
            {
                var comp = CasterPawn.GetComp <CompWizardry>();
                comp.SecondTarget = null;

                var t          = currentTarget;
                var targetCell = t.Cell;

                launchableThing = t.Cell.GetFirstPawn(CasterPawn.Map);

                if (launchableThing == null)
                {
                    var cellThings = t.Cell.GetThingList(CasterPawn.Map);
                    for (var i = 0; i < cellThings.Count; i++)
                    {
                        if (!cellThings[i].def.EverHaulable)
                        {
                            continue;
                        }

                        launchableThing = cellThings[i];
                        i = cellThings.Count;
                    }
                }

                if (launchableThing == null)
                {
                    return;
                }

                if (targetCell.InBounds(base.CasterPawn.Map) && targetCell.IsValid)
                {
                    LongEventHandler.QueueLongEvent(delegate
                    {
                        var flyingObject = (Manwe_FlyingObject_WindControl)GenSpawn.Spawn(
                            ThingDef.Named("FlyingObject_WindControl"), currentTarget.Cell, CasterPawn.Map);
                        flyingObject.Launch(CasterPawn, t.Cell, launchableThing);
                    }, "LaunchingFlyer", false, null);
                }
                else
                {
                    Log.Message("invalid map or cell");
                }

                Find.Targeter.StopTargeting();
                BeginTargetingWithVerb(WizardryDefOf.CompVerb, WizardryDefOf.CompVerb.MainVerb.targetParams,
                                       delegate(LocalTargetInfo info)
                {
                    action            = info;
                    comp              = CasterPawn.GetComp <CompWizardry>();
                    comp.SecondTarget = info;
                }, CasterPawn);
            }
            catch (NullReferenceException ex)
            {
                Log.Message(ex.ToString());
            }
        }
Ejemplo n.º 2
0
        protected override bool TryCastShot()
        {
            bool flag = false;

            this.TargetsAoE.Clear();
            this.FindTargets();
            CompAbilityUserMagic comp = CasterPawn.GetComp <CompAbilityUserMagic>();

            if (comp != null && comp.MagicData != null)
            {
                pwrVal    = TM_Calc.GetMagicSkillLevel(CasterPawn, comp.MagicData.MagicPowerSkill_Hex, "TM_Hex", "_pwr", true);
                verVal    = TM_Calc.GetMagicSkillLevel(CasterPawn, comp.MagicData.MagicPowerSkill_Hex, "TM_Hex", "_ver", true);
                arcaneDmg = comp.arcaneDmg;
            }
            bool flag2 = this.UseAbilityProps.AbilityTargetCategory != AbilityTargetCategory.TargetAoE && this.TargetsAoE.Count > 1;

            if (flag2)
            {
                this.TargetsAoE.RemoveRange(0, this.TargetsAoE.Count - 1);
            }
            bool addAbilities       = false;
            bool shouldAddAbilities = comp.HexedPawns.Count <= 0;

            for (int i = 0; i < this.TargetsAoE.Count; i++)
            {
                Pawn newPawn = this.TargetsAoE[i].Thing as Pawn;
                if (newPawn.RaceProps.IsFlesh && !TM_Calc.IsUndead(newPawn))
                {
                    if (Rand.Chance(.4f + (.1f * pwrVal * TM_Calc.GetSpellSuccessChance(this.CasterPawn, newPawn, true))))
                    {
                        HealthUtility.AdjustSeverity(newPawn, TorannMagicDefOf.TM_HexHD, 1f);
                        var hexedPawns = comp.HexedPawns;
                        if (!hexedPawns.Contains(newPawn))
                        {
                            hexedPawns.Add(newPawn);
                        }
                        addAbilities = true;
                        TM_MoteMaker.ThrowGenericMote(TorannMagicDefOf.Mote_Hex, newPawn.DrawPos, newPawn.Map, .6f, .1f, .2f, .2f, 0, 0, 0, 0);
                    }
                    else
                    {
                        MoteMaker.ThrowText(newPawn.DrawPos, newPawn.Map, "TM_ResistedSpell".Translate(), -1);
                    }
                }
            }
            if (shouldAddAbilities && addAbilities)
            {
                comp.AddPawnAbility(TorannMagicDefOf.TM_Hex_CriticalFail);
                comp.AddPawnAbility(TorannMagicDefOf.TM_Hex_Pain);
                comp.AddPawnAbility(TorannMagicDefOf.TM_Hex_MentalAssault);
            }
            this.PostCastShot(flag, out flag);
            return(flag);
        }
Ejemplo n.º 3
0
        public override void PostCastShot(bool inResult, out bool outResult)
        {
            var comp = base.CasterPawn.GetComp <CompWizardry>();

            comp.SecondTarget = null;

            Find.Targeter.StopTargeting();
            BeginTargetingWithVerb(WizardryDefOf.CompVerb, WizardryDefOf.CompVerb.MainVerb.targetParams,
                                   delegate(LocalTargetInfo info)
            {
                action            = info;
                comp              = CasterPawn.GetComp <CompWizardry>();
                comp.SecondTarget = info;
            }, CasterPawn);
            outResult = inResult;
        }