public virtual void PostPostImpactEffects(Thing hitThing) { if (hitThing != null && hitThing is Pawn hitPawn && !hitPawn.Dead && !hitPawn.Downed) { // Log.Message(string.Format("hit {0}", hitThing)); if (OriginalPawn != null) { // Log.Message(string.Format("OriginalPawn {0}", OriginalPawn)); } else { // Log.Message(string.Format("OriginalPawn null {0}", OriginalPawn)); } Hediff hediff = HediffMaker.MakeHediff(YautjaDefOf.RRY_Hediff_BouncedProjectile, hitPawn); Hediff_Bouncer bouncer = (Hediff_Bouncer)hediff; bouncer.OriginalPawn = this.OriginalPawn; bouncer.OriginalWeapon = this.OriginalWeapon; bouncer.OriginalProjectile = this.OriginalProjectile; bouncer.TimesBounced = this.timesBounced; if (hitPawn != OriginalPawn) { hitPawn.health.AddHediff(bouncer); } else { // Log.Message(string.Format("hitPawn:{0} != OriginalPawn: {1}", hitThing, OriginalPawn)); // Log.Message(string.Format("Making Projectile projectile")); Projectile projectile = (Projectile)ThingMaker.MakeThing(ReturnDef, null); // Log.Message(string.Format("Target OriginalPawn {0}", OriginalPawn)); GenSpawn.Spawn(projectile, base.Position, launcher.Map, 0); // Log.Message(string.Format("Launch projectile2 {0} at {1}", projectile, OriginalPawn)); projectile.Launch(OriginalWeapon, base.Position.ToVector3ShiftedWithAltitude(AltitudeLayer.Projectile), OriginalPawn, OriginalPawn, ProjectileHitFlags.IntendedTarget, OriginalWeapon); } }
public virtual void PostPostImpactEffects(Thing hitThing) { if (hitThing is Pawn hitPawn && !hitPawn.Dead && !hitPawn.Downed) { Hediff hediff = HediffMaker.MakeHediff(YautjaDefOf.RRY_Hediff_BouncedProjectile, hitPawn); Hediff_Bouncer bouncer = (Hediff_Bouncer)hediff; if (this.timesBounced == 0) { this.OriginalPawn = (Pawn)launcher; this.OriginalWeapon = launcher; this.OriginalProjectile = this; } bouncer.OriginalPawn = this.OriginalPawn; bouncer.OriginalWeapon = this.OriginalWeapon; bouncer.OriginalProjectile = this.OriginalProjectile; bouncer.TimesBounced = this.timesBounced; if (hitPawn != OriginalPawn) { hitPawn.health.AddHediff(bouncer); } else { Projectile projectile2 = (Projectile)ThingMaker.MakeThing(DefDatabase <ThingDef> .GetNamed("RRY_SmartDisk_Returning"), null); GenSpawn.Spawn(projectile2, base.PositionHeld, launcher.Map, 0); projectile2.Launch(this, base.PositionHeld.ToVector3(), launcher, launcher, ProjectileHitFlags.IntendedTarget, launcher); } }