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()); } }
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); }
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; }