Пример #1
0
        //咖喱技能3
        public static Command_CastSkill Skill3()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "MagSkill3.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/MagSkill3"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 3f,
                range           = 18f,
                hotKey          = KeyBindingDefOf.Misc4
            };

            ck.action = delegate(Pawn self)
            {
                var mag3s = (Mag3SkillThing)ThingMaker.MakeThing(ThingDef.Named("MagSkill3Item"));
                mag3s.self   = self;
                mag3s.range  = (int)ck.range;
                mag3s.damage = 20 * (1 + (self.GetLevel() / 60f));
                GenSpawn.Spawn(mag3s, self.Position, self.Map);
                SoundDef.Named("Mag_3Skill").PlayOneShot(self);

                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 3,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().skill3mana);
            };


            return(ck);
        }
Пример #2
0
        public static void Postfix(Projectile __instance, Thing hitThing)
        {
            if (hitThing == null)
            {
                return;
            }

            var tv             = Traverse.Create(__instance);
            var launcher       = tv.Field("launcher").GetValue <Thing>();
            var intendedTarget = tv.Field("intendedTarget").GetValue <LocalTargetInfo>();
            var equipmentDef   = tv.Field("equipmentDef").GetValue <ThingDef>();

            if (launcher is not Pawn pawn || !pawn.IsWarframe())
            {
                return;
            }

            foreach (var hef in pawn.health.hediffSet.hediffs)
            {
                if (hef.def.defName == "WFMesa1Skill_End")
                {
                    if (hef is Hediff_Mesa1SkillB hf)
                    {
                        var damage = hf.sdamage;
                        var dinfo  = new DamageInfo(DamageDefOf.Bullet, damage, 1, -1, pawn);
                        WarframeStaticMethods.ShowDamageAmount(hitThing, damage.ToString());
                        if (hitThing is Pawn {
                            Dead: true
                        })
Пример #3
0
        //咖喱4结束action
        public static void EndSkill4(Pawn self)
        {
            SoundDef.Named("Excalibur_ExaltedBladeOff").PlayOneShot(self);
            var wa = WarframeStaticMethods.GetArmor(self);

            self.equipment.Remove(self.equipment.Primary); //.Primary.Destroy(DestroyMode.Vanish);
            ThingWithComps gun = null;

            try
            {
                // gun = WFModBase.Instance._WFcontrolstorage.getOldGun(self);
                gun = wa.oldWeapon[0];
            }
            catch (Exception)
            {
                // Log.Warning("gun is null");
            }

            // WFModBase.Instance._WFcontrolstorage.clearWFandOG(self);
            wa.oldWeapon.Clear();

            if (gun != null)
            {
                self.equipment.AddEquipment(gun);
            }


            wa.tillSkillOpen = 0;
            wa.tillSkillMul  = 1;
        }
        public static void Prefix(Thing __instance, ref DamageInfo dinfo)
        {
            if (__instance is not Pawn pawn)
            {
                return;
            }

            if (!pawn.IsWarframe())
            {
                return;
            }

            foreach (var hed in pawn.health.hediffSet.hediffs)
            {
                if (hed.def.defName != "WFValkyr2Skill_Ally")
                {
                    continue;
                }

                var finaldmg = dinfo.Amount * (1 - (0.25f * (1 + (pawn.GetLevel() * 1f / 30f))));
                var dinfonew = new DamageInfo(dinfo.Def, finaldmg, dinfo.ArmorPenetrationInt, dinfo.Angle,
                                              dinfo.Instigator, null, dinfo.Weapon, DamageInfo.SourceCategory.ThingOrUnknown,
                                              dinfo.IntendedTarget);
                dinfo = dinfonew;
                WarframeStaticMethods.ShowColorText(pawn, "final damage:" + finaldmg, Color.yellow,
                                                    GameFont.Small);
                break;
            }
        }
Пример #5
0
        public override void Tick()
        {
            base.Tick();
            if (ticks > 240)
            {
                Destroy();
            }

            if (!Spawned)
            {
                return;
            }

            ticks++;
            if (ticks == 59)
            {
                affected = new List <Pawn>();
            }


            if (!startBomb)
            {
                return;
            }

            GenDraw.DrawFieldEdges(MagNowCellsAround(self.Position, Map, range * ((ticks - 60) * 1f / 180f)),
                                   new Color(0.4f, 0.4f, 0.8f));

            foreach (var ic in MagNowCellsAround(self.Position, Map, range * ((ticks - 60) * 1f / 180f)))
            {
                foreach (var th in Map.thingGrid.ThingsAt(ic))
                {
                    if (th is not Pawn pawn)
                    {
                        continue;
                    }

                    if (affected.Contains(pawn) || pawn == self)
                    {
                        continue;
                    }

                    if (pawn.Faction.HostileTo(self.Faction))
                    {
                        var dinfo = new DamageInfo(DefDatabase <DamageDef> .GetNamed("Mag"), damage, 0, -1, self,
                                                   null, null, DamageInfo.SourceCategory.ThingOrUnknown, pawn);
                        pawn.TakeDamage(dinfo);
                        var hediff_Magnetize =
                            (Hediff_Volt4Skill)HediffMaker.MakeHediff(HediffDef.Named("Volt4Skill"), self);
                        hediff_Magnetize.level  = (int)self.GetLevel();
                        hediff_Magnetize.damage = 3;
                        pawn.health.AddHediff(hediff_Magnetize);
                        WarframeStaticMethods.ShowDamageAmount(pawn, damage.ToString("f0"));
                        pawn.stances.stunner.StunFor((int)(180 * (1 + (self.GetLevel() * 1f / 30f))), self);
                    }

                    affected.Add(pawn);
                }
            }
        }
Пример #6
0
        //咖喱技能4
        public static Command_CastSkill Skill4()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "ExcaliburSkill4.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/ExcaliburSkill4"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 0.2f,
                range           = 1f,
                hotKey          = KeyBindingDefOf.Misc7
            };

            // WarframeArmor sa = WarframeStaticMethods.getArmor(ck.self);

            ck.action = delegate(Pawn self)
            {
                var wa = WarframeStaticMethods.GetArmor(self);
                if (wa.tillSkillOpen > 0)
                {
                    EndSkill4(self);

                    return;
                }


                Find.CameraDriver.shaker.DoShake(20000f * 15f /
                                                 (self.Position.ToVector3Shifted() - Find.Camera.transform.position)
                                                 .magnitude);
                SoundDef.Named("Excalibur_ExaltedBladePre").PlayOneShot(self);
                {
                    var mote = (Mote)ThingMaker.MakeThing(ThingDef.Named("Mote_2ExFlash"));
                    mote.exactPosition = self.Position.ToVector3Shifted();
                    mote.Scale         = Mathf.Max(10f, 15f);
                    mote.rotationRate  = 1.2f;
                    GenSpawn.Spawn(mote, self.Position + new IntVec3(0, 1, 0), self.Map);
                }

                //WFModBase.Instance._WFcontrolstorage.saveOldGun(self,self.equipment.Primary);
                if (self.equipment.Primary != null)
                {
                    wa.oldWeapon.Add(self.equipment.Primary);
                }

                wa.tillSkillOpen = 4;
                wa.tillSkillMul  = 0.2f;
                self.equipment.Remove(self.equipment.Primary); //Primary.Destroy(DestroyMode.Vanish);
                self.equipment.AddEquipment(
                    (ThingWithComps)ThingMaker.MakeThing(ThingDef.Named("Excalibur_SkillBlade")));
                self.stances.stunner.StunFor(60, self);

                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 4,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().Props.mana4);
            };


            return(ck);
        }
Пример #7
0
 public void DrawHediffExtras()
 {
     var dinfo = new DamageInfo(DefDatabase<DamageDef>.GetNamed("Mag"), damage, 0, -1, pawn, null, null,
         DamageInfo.SourceCategory.ThingOrUnknown, pawn);
     pawn.TakeDamage(dinfo);
     WarframeStaticMethods.ShowDamageAmount(pawn, damage.ToString("f0"));
     FleckMaker.ThrowExplosionInterior(new Vector3(pawn.TrueCenter().x, 0, pawn.TrueCenter().z), pawn.Map,
         FleckDefOf.MicroSparks);
 }
Пример #8
0
        //咖喱技能4
        public static Command_CastSkill Skill4()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "MesaSkill4.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/MesaSkill4"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 0.2f,
                range           = 1f,
                hotKey          = KeyBindingDefOf.Misc7
            };

            // WarframeArmor sa = WarframeStaticMethods.GetArmor(ck.self);

            ck.action = delegate(Pawn self)
            {
                var wa = WarframeStaticMethods.GetArmor(self);
                if (wa.tillSkillOpen > 0)
                {
                    EndSkill4(self);

                    return;
                }


                Find.CameraDriver.shaker.DoShake(20000f * 15f /
                                                 (self.Position.ToVector3Shifted() - Find.Camera.transform.position)
                                                 .magnitude);
                SoundDef.Named("Mesa_4Skill").PlayOneShot(self);
                {
                    FleckMaker.ThrowMicroSparks(self.Position.ToVector3(), self.Map);
                }

                //WFModBase.Instance._WFcontrolstorage.saveOldGun(self,self.equipment.Primary);
                if (self.equipment.Primary != null)
                {
                    wa.oldWeapon.Add(self.equipment.Primary);
                }

                wa.tillSkillOpen = 4;
                wa.tillSkillMul  = 0.6f;
                self.equipment.Remove(self.equipment.Primary); //Primary.Destroy(DestroyMode.Vanish);
                self.equipment.AddEquipment((ThingWithComps)ThingMaker.MakeThing(ThingDef.Named("Mesa_SkillGun")));
                self.stances.stunner.StunFor(10, self);

                var hediff = (Hediff_NoMove)HediffMaker.MakeHediff(HediffDef.Named("WFMesa4Skill_Nomove"), self);

                self.health.AddHediff(hediff);


                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 4,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().Props.mana4);
            };


            return(ck);
        }
Пример #9
0
        //咖喱技能1
        public static Command_CastSkillTargeting Skill1()
        {
            var ck = new Command_CastSkillTargeting
            {
                defaultLabel    = "AshSkill1.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/AshSkill1"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 0.2f,
                range           = 35f
            };

            ck.finishAction = delegate
            {
                //GenDraw.DrawFieldEdges(WarframeStaticMethods.GetCellsAround(ck.self.Position, ck.self.Map, ck.range));
                GenDraw.DrawRadiusRing(ck.self.Position, ck.range);
            };
            ck.hotKey = KeyBindingDefOf.Misc5;
            ck.action = delegate(Pawn self, Thing target)
            {
                // GenExplosion.DoExplosion(self.Position, self.Map, 3.5f, DamageDefOf.Bomb, self, -1, -1, null, null, null, null, null, 0, 1, false, null, 0, 1, 0, false);
                if (!target.Position.InHorDistOf(self.Position,
                                                 ck.range)) //(!WarframeStaticMethods.GetCellsAround(self.Position, self.Map, ck.range).Contains(target.Position))
                {
                    SoundDefOf.ClickReject.PlayOneShotOnCamera();
                    return;
                }

                var linec = WarframeStaticMethods.GetLineCell(self, target);
                if (linec == null)
                {
                    Messages.Message("BeBlockedByBuilding".Translate(), MessageTypeDefOf.RejectInput, false);
                    return;
                }


                SoundDef.Named("Ash_1Skill").PlayOneShot(self);
                var time = 1;
                if (self.GetLevel() > 15)
                {
                    time = 2;
                }

                for (var i = 0; i < time; i++)
                {
                    var projectile2 = (Bullet_1Ash)GenSpawn.Spawn(ThingDef.Named("Bullet_Ash1Bullet"),
                                                                  self.Position + new IntVec3(i, 0, 0), self.Map);
                    var   hitTypes = ProjectileHitFlags.All;
                    Thing gun      = null;
                    projectile2.target = target as Pawn;
                    if (self.equipment is { Primary: { } })
                    {
                        gun = self.equipment.Primary;
                    }

                    projectile2.Launch(self, target.Position, target, hitTypes, false, gun);
                }
Пример #10
0
        //咖喱技能2
        public static Command_CastSkill Skill2()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "ExcaliburSkill2.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/ExcaliburSkill2"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 0.2f,
                range           = 18f,
                hotKey          = KeyBindingDefOf.Misc8
            };

            ck.action = delegate(Pawn self)
            {
                SoundDef.Named("Excalibur_RadialBlind").PlayOneShot(self);
                foreach (var iv in WarframeStaticMethods.GetCellsAround(self.Position, self.Map, ck.range))
                {
                    foreach (var t in self.Map.thingGrid.ThingsAt(iv))
                    {
                        if (t is not Pawn pawn)
                        {
                            continue;
                        }

                        if (pawn != self)
                        {
                            if (pawn.Faction != self.Faction)
                            {
                                pawn.stances.stunner.StunFor(
                                    (int)(7f * 60f * (1f + (WarframeStaticMethods.GetWFLevel(self) / 30f))), self);
                            }
                        }
                        else
                        {
                            self.stances.stunner.StunFor(60, self);
                        }
                    }
                }

                {
                    var mote = (Mote)ThingMaker.MakeThing(ThingDef.Named("Mote_ExFlash"));
                    mote.exactPosition = self.Position.ToVector3Shifted();
                    mote.Scale         = Mathf.Max(23, 25) * 6f;
                    mote.rotationRate  = 1.2f;

                    GenSpawn.Spawn(mote, self.Position + new IntVec3(0, 1, 0), self.Map);
                }

                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 2,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().Props.mana2);
            };


            return(ck);
        }
Пример #11
0
        public override void Tick()
        {
            base.Tick();
            if (Find.TickManager.TicksGame - 60 < createdTick)
            {
                return;
            }

            float damage = 120 + (8 * WarframeStaticMethods.GetWFLevel(self) / 5);


            foreach (var iv in WarframeStaticMethods.GetCellsAround(self.Position, self.Map, range))
            {
                foreach (var t in self.Map.thingGrid.ThingsAt(iv))
                {
                    if (t is not Pawn pawn)
                    {
                        continue;
                    }

                    if (pawn == self || pawn.Faction == self.Faction)
                    {
                        continue;
                    }

                    WarframeStaticMethods.ShowDamageAmount(pawn, damage.ToString("f0"));
                    // float totaldamage = 0;
                    var dinfo = new DamageInfo(DamageDefOf.Cut, damage, 1, -1, self);

                    /*
                     *          foreach (BodyPartRecord bpr in (t as Pawn).health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined, BodyPartDepth.Outside))
                     *          {
                     *              (t as Pawn).TakeDamage(dinfo);
                     *              totaldamage += bpr.def.hitPoints;
                     *              dinfo.SetAmount(damage - totaldamage);
                     *              if (totaldamage > damage)
                     *              {
                     *                  break;
                     *              }
                     *          }
                     */
                    pawn.TakeDamage(dinfo);
                    {
                        var mote = (Mote)ThingMaker.MakeThing(ThingDef.Named("Mote_2ExFlash"));
                        mote.exactPosition = pawn.Position.ToVector3Shifted();
                        mote.Scale         = Mathf.Max(10f, 15f);
                        mote.rotationRate  = 1.2f;
                        // mote.Scale = 0.2f;
                        GenSpawn.Spawn(mote, pawn.Position + new IntVec3(0, 1, 0), self.Map);
                    }
                }
            }

            Destroy();
        }
Пример #12
0
        //咖喱技能1
        public static Command_CastSkill Skill1()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "MesaSkill1.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/MesaSkill1"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 0.2f,
                range           = 1f,
                hotKey          = KeyBindingDefOf.Misc5
            };

            ck.action = delegate(Pawn self)
            {
                foreach (var hef in self.health.hediffSet.hediffs)
                {
                    if (hef.def.defName == "WFMesa1Skill_Start")
                    {
                        var hediffA = hef as Hediff_Mesa1SkillA;
                        var hediffB =
                            (Hediff_Mesa1SkillB)HediffMaker.MakeHediff(HediffDef.Named("WFMesa1Skill_End"), self);
                        if (hediffA != null)
                        {
                            hediffB.sdamage = hediffA.sdamage;
                        }

                        self.health.RemoveHediff(hef);
                        self.health.AddHediff(hediffB);
                        return;
                    }

                    if (hef.def.defName != "WFMesa1Skill_End")
                    {
                        continue;
                    }

                    Messages.Message("MesaSkillUsing".Translate(), MessageTypeDefOf.RejectInput, false);
                    return;
                }


                SoundDef.Named("Mesa_1Skill").PlayOneShot(self);
                var hediff = (Hediff_Mesa1SkillA)HediffMaker.MakeHediff(HediffDef.Named("WFMesa1Skill_Start"), self);
                hediff.sdamage = 0;
                self.health.AddHediff(hediff);


                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 1,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().Props.mana1);
            };


            return(ck);
        }
Пример #13
0
        public void resetSpeed()
        {
            if (lastShotTick == 0 || Find.TickManager.TicksGame - lastShotTick < 60)
            {
                return;
            }

            newWarmupTime = verbProps.warmupTime;
            lastShotTick  = 0;
            WarframeStaticMethods.ShowColorText(caster, "ShootSpeedReset!", Color.cyan, GameFont.Medium);
        }
Пример #14
0
        //咖喱技能2
        public static Command_CastSkill Skill2()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "ValkyrSkill2.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/ValkyrSkill2"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 2f,
                range           = 16f,
                hotKey          = KeyBindingDefOf.Misc8
            };

            ck.action = delegate(Pawn self)
            {
                SoundDef.Named("Valkyr_2Skill").PlayOneShot(self);
                self.stances.stunner.StunFor(40, self);

                foreach (var ic in WarframeStaticMethods.GetCellsAround(self.Position, self.Map, ck.range))
                {
                    foreach (var th in self.Map.thingGrid.ThingsAt(ic))
                    {
                        if (th is not Pawn pawn)
                        {
                            continue;
                        }

                        if (pawn.HostileTo(self.Faction))
                        {
                            var hediff =
                                (Hediff_Valkyr2Skill)HediffMaker.MakeHediff(
                                    HediffDef.Named("WFValkyr2Skill_Enemy"), self);
                            hediff.self = self;
                            pawn.health.AddHediff(hediff);
                        }
                        else
                        {
                            var hediff =
                                (Hediff_Valkyr2Skill)HediffMaker.MakeHediff(HediffDef.Named("WFValkyr2Skill_Ally"),
                                                                            self);
                            hediff.self = self;
                            pawn.health.AddHediff(hediff);
                        }
                    }
                }


                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime * (1 + (self.GetLevel() * 1f / 10f)), 2,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().Props.mana2);
            };


            return(ck);
        }
Пример #15
0
        //咖喱技能2
        public static Command_CastSkill Skill2()
        {
            var ck = new Command_CastSkillTargeting
            {
                defaultLabel    = "MagSkill2.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/MagSkill2"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 0.2f,
                range           = 18f,
                hotKey          = KeyBindingDefOf.Misc8
            };

            ck.finishAction = delegate
            {
                GenDraw.DrawFieldEdges(
                    WarframeStaticMethods.GetCellsAround(ck.self.Position, ck.self.Map, ck.range));
            };
            ck.action = delegate(Pawn self, Thing target)
            {
                if (!WarframeStaticMethods.GetCellsAround(self.Position, self.Map, ck.range)
                    .Contains(target.Position) || target.Faction == self.Faction)
                {
                    SoundDefOf.ClickReject.PlayOneShotOnCamera();
                    return;
                }

                SoundDef.Named("Mag_2Skill").PlayOneShot(self);
                var linec = WarframeStaticMethods.GetLineCell(self, target);
                if (linec == null)
                {
                    Messages.Message("BeBlockedByBuilding".Translate(), MessageTypeDefOf.RejectInput, false);
                    return;
                }


                var hediff_Magnetize =
                    (Hediff_Magnetize)HediffMaker.MakeHediff(HediffDef.Named("Magnetize"), target as Pawn);
                hediff_Magnetize.self = self;
                (target as Pawn)?.health.AddHediff(hediff_Magnetize);


                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 2,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().skill2mana);
            };


            return(ck);
        }
Пример #16
0
        public static void Prefix(Thing __instance, ref DamageInfo dinfo)
        {
            if (__instance is not Pawn)
            {
                return;
            }

            if (dinfo.Instigator is not Pawn wf || !wf.IsWarframe())
            {
                return;
            }

            if (wf.kindDef.defName != "Warframe_Valkyr")
            {
                return;
            }

            foreach (var hed in wf.health.hediffSet.hediffs)
            {
                if (hed.def.defName != "WFGod")
                {
                    continue;
                }

                var finaldmg = dinfo.Amount * (1 + (wf.GetLevel() * 1f / 20f)) * criMul();
                var heal     = finaldmg * 0.01f * (1 + (wf.GetLevel() / 6f));


                var dinfonew = new DamageInfo(dinfo.Def, finaldmg, dinfo.ArmorPenetrationInt, dinfo.Angle,
                                              dinfo.Instigator, null, dinfo.Weapon, DamageInfo.SourceCategory.ThingOrUnknown,
                                              dinfo.IntendedTarget);
                dinfo = dinfonew;


                if ((from x in wf.health.hediffSet.GetHediffs <Hediff_Injury>()
                     where x.CanHealNaturally() || x.CanHealFromTending()
                     select x).TryRandomElement(out var hediff_Injury))
                {
                    hediff_Injury.Heal(10f);
                    WarframeStaticMethods.ShowColorText(wf, "HP+" + heal, new Color(0.2f, 1, 0.1f),
                                                        GameFont.Small);
                }


                //  WarframeStaticMethods.ShowColorText(wf, "final damage:" + finaldmg, Color.yellow, GameFont.Small);
                break;
            }
        }
Пример #17
0
        // Token: 0x060026E7 RID: 9959 RVA: 0x00127F60 File Offset: 0x00126360
        protected override void Impact(Thing hitThing)
        {
            var map = Map;

            base.Impact(hitThing);
            var battleLogEntry_RangedImpact = new BattleLogEntry_RangedImpact(launcher, hitThing,
                                                                              intendedTarget.Thing, equipmentDef, def, targetCoverDef);

            Find.BattleLog.Add(battleLogEntry_RangedImpact);
            if (hitThing != null)
            {
                var   damageDef        = def.projectile.damageDef;
                float amount           = DamageAmount;
                var   armorPenetration = ArmorPenetration;
                var   y          = ExactRotation.eulerAngles.y;
                var   instigator = launcher;
                var   thingDef   = equipmentDef;
                var   finaldmg   = changeDamage(amount);
                var   dinfo      = new DamageInfo(damageDef, finaldmg, armorPenetration, y, instigator, null, thingDef,
                                                  DamageInfo.SourceCategory.ThingOrUnknown, intendedTarget.Thing);
                if (isCR)
                {
                    WarframeStaticMethods.ShowColorText(hitThing, "X3 -" + finaldmg, Color.magenta, GameFont.Medium);
                }
                else
                {
                    WarframeStaticMethods.ShowDamageAmount(hitThing, finaldmg + "");
                }

                hitThing.TakeDamage(dinfo).AssociateWithLog(battleLogEntry_RangedImpact);
                if (hitThing is Pawn {
                    stances : { }
                } pawn&& pawn.BodySize <= def.projectile.StoppingPower + 0.001f)
                {
                    pawn.stances.StaggerFor(95);
                }
            }
            else
            {
                SoundDefOf.BulletImpact_Ground.PlayOneShot(new TargetInfo(Position, map));
                FleckMaker.Static(ExactPosition, map, FleckDefOf.ShotHit_Dirt);
                if (Position.GetTerrain(map).takeSplashes)
                {
                    FleckMaker.WaterSplash(ExactPosition, map, Mathf.Sqrt(DamageAmount) * 1f, 4f);
                }
            }
        }
Пример #18
0
        public override void Tick()
        {
            base.Tick();
            if (Find.TickManager.TicksGame - startTick < 15)
            {
                return;
            }

            GenDraw.DrawLineBetween(self.Position.ToVector3Shifted(), target.DrawPos, SimpleColor.Red);
            if (Find.TickManager.TicksGame - startTick == 25)
            {
                if (!target.AnimalOrWildMan() && (target.Faction == self.Faction || !target.HostileTo(self)))
                {
                    self.pather.StartPath(target.Position, PathEndMode.Touch);
                    self.Position = target.Position;
                    self.pather.StopDead();
                    if (self.jobs.curJob != null)
                    {
                        self.jobs.curDriver.Notify_PatherArrived();
                    }
                }
                else if (target.AnimalOrWildMan() || target.HostileTo(self))
                {
                    var pos = getPos(target);
                    target.pather.StartPath(pos, PathEndMode.Touch);
                    target.Position = pos;
                    target.pather.StopDead();
                    if (target.jobs.curJob != null)
                    {
                        target.jobs.curDriver.Notify_PatherArrived();
                    }

                    target.stances.stunner.StunFor(120, self);
                    var amount = getDMG();
                    WarframeStaticMethods.ShowDamageAmount(target, amount + "");
                    var dinfo = new DamageInfo(DamageDefOf.Cut, amount, 0, -1, self, null, null,
                                               DamageInfo.SourceCategory.ThingOrUnknown, target);

                    target.TakeDamage(dinfo);
                }
            }

            if (Find.TickManager.TicksGame - startTick >= 40)
            {
                Destroy();
            }
        }
Пример #19
0
        // Token: 0x060026E7 RID: 9959 RVA: 0x00127F60 File Offset: 0x00126360
        protected override void Impact(Thing hitThingf)
        {
            Thing hitThing = target;
            var   unused   = Map;

            base.Impact(hitThing);
            var battleLogEntry_RangedImpact = new BattleLogEntry_RangedImpact(launcher, hitThing,
                                                                              intendedTarget.Thing, equipmentDef, def, targetCoverDef);

            Find.BattleLog.Add(battleLogEntry_RangedImpact);
            if (hitThing == null)
            {
                return;
            }

            var   damageDef        = def.projectile.damageDef;
            float Baseamount       = DamageAmount;
            var   armorPenetration = ArmorPenetration;
            var   y          = ExactRotation.eulerAngles.y;
            var   instigator = launcher;
            var   thingDef   = equipmentDef;
            var   amount     = Baseamount * (1 + ((instigator as Pawn).GetLevel() / 6f));
            var   dinfo      = new DamageInfo(damageDef, amount, armorPenetration, y, instigator, null, thingDef,
                                              DamageInfo.SourceCategory.ThingOrUnknown, intendedTarget.Thing);

            WarframeStaticMethods.ShowDamageAmount(target, amount.ToString());
            hitThing.TakeDamage(dinfo).AssociateWithLog(battleLogEntry_RangedImpact);
            if (hitThing is Pawn {
                stances : { }
            } pawn&& pawn.BodySize <= def.projectile.StoppingPower + 0.001f)
            {
                pawn.stances.StaggerFor(95);
            }

            /*
             * else
             * {
             *  SoundDefOf.BulletImpact_Ground.PlayOneShot(new TargetInfo(base.Position, map, false));
             *  MoteMaker.MakeStaticMote(this.ExactPosition, map, ThingDefOf.Mote_ShotHit_Dirt, 1f);
             *  if (base.Position.GetTerrain(map).takeSplashes)
             *  {
             *      MoteMaker.MakeWaterSplash(this.ExactPosition, map, Mathf.Sqrt((float)base.DamageAmount) * 1f, 4f);
             *  }
             * }
             */
        }
Пример #20
0
        public override void Tick()
        {
            ageTicks++;
            if (ageTicks > 600 * (1 + (WarframeStaticMethods.GetWFLevel(self) * 1.0f / 60f)))
            {
                TimeOut();
            }

            DrawHediffExtras();


            //GenDraw.DrawFieldEdges(this.CellsAdjacent8WayAndInsidePlus(this.pawn).ToList());
            foreach (var ic in CellsAdjacent8WayAndInsidePlus(pawn))
            {
                if (ic == pawn.Position)
                {
                    continue;
                }

                foreach (var th in pawn.Map.thingGrid.ThingsAt(ic))
                {
                    if (th is not Projectile projectile)
                    {
                        continue;
                    }

                    if (projectile.def.projectile.flyOverhead)
                    {
                        continue;
                    }

                    //bullets.Add(th as Projectile);

                    var bdef = projectile.def;


                    projectile.Destroy();

                    var projectile2 = (Projectile)GenSpawn.Spawn(bdef, pawn.Position, pawn.Map);

                    var   hitTypes = ProjectileHitFlags.All;
                    Thing gun      = null;
                    if (pawn.equipment is { Primary: { } })
Пример #21
0
        //咖喱4结束action
        public static void EndSkill4(Pawn self)
        {
            SoundDef.Named("Valkyr_4SkillEnd").PlayOneShot(self);
            var wa = WarframeStaticMethods.GetArmor(self);

            self.equipment.Remove(self.equipment.Primary); //.Primary.Destroy(DestroyMode.Vanish);
            ThingWithComps gun = null;

            try
            {
                // gun = WFModBase.Instance._WFcontrolstorage.getOldGun(self);
                gun = wa.oldWeapon[0];
            }
            catch (Exception)
            {
                // Log.Warning("gun is null");
            }

            // WFModBase.Instance._WFcontrolstorage.clearWFandOG(self);
            wa.oldWeapon.Clear();

            if (gun != null)
            {
                self.equipment.AddEquipment(gun);
            }


            wa.tillSkillOpen = 0;
            wa.tillSkillMul  = 1;

            foreach (var hef in self.health.hediffSet.hediffs)
            {
                if (hef.def.defName != "WFGod")
                {
                    continue;
                }

                self.health.RemoveHediff(hef);
                break;
            }
        }
Пример #22
0
        //咖喱技能2
        public static Command_CastSkill Skill2()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "VoltSkill2.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/VoltSkill2"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 0.2f,
                range           = 2f,
                hotKey          = KeyBindingDefOf.Misc8
            };

            ck.action = delegate(Pawn self)
            {
                SoundDef.Named("Volt_2Skill").PlayOneShot(self);
                foreach (var ic in WarframeStaticMethods.GetCellsAround(self.Position, self.Map, ck.range))
                {
                    foreach (var th in self.Map.thingGrid.ThingsAt(ic))
                    {
                        if (!(th is Pawn pawn) || pawn.Faction == null || pawn.Faction != self.Faction ||
                            !pawn.IsWarframe())
                        {
                            continue;
                        }

                        var hediff_Magnetize =
                            (Hediff_VoltSpeedUp)HediffMaker.MakeHediff(HediffDef.Named("VoltSpeedUp"), self);
                        hediff_Magnetize.level = (int)self.GetLevel();
                        pawn.health.AddHediff(hediff_Magnetize);
                        WarframeStaticMethods.ShowColorText(pawn, "Speed Up!", new Color(0.2f, 0.4f, 0.8f),
                                                            GameFont.Small);
                    }
                }

                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 2,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().skill2mana);
            };


            return(ck);
        }
Пример #23
0
        //咖喱技能2
        public static Command_CastSkill Skill2()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "MesaSkill2.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/MesaSkill2"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 1f,
                range           = 1f,
                hotKey          = KeyBindingDefOf.Misc8
            };

            ck.action = delegate(Pawn self)
            {
                foreach (var hef in self.health.hediffSet.hediffs)
                {
                    if (hef.def.defName != "WFMesa2Skill_Mesa")
                    {
                        continue;
                    }

                    Messages.Message("MesaSkillUsing".Translate(), MessageTypeDefOf.RejectInput, false);
                    return;
                }


                SoundDef.Named("Mesa_2Skill").PlayOneShot(self);
                var hediff = (Hediff_Mesa2Skill)HediffMaker.MakeHediff(HediffDef.Named("WFMesa2Skill_Mesa"), self);
                hediff.level = (int)self.GetLevel();
                self.health.AddHediff(hediff);


                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime * (1 + (self.GetLevel() * 1f / 10f)), 2,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().Props.mana2);
            };


            return(ck);
        }
Пример #24
0
        //咖喱技能4
        public static Command_CastSkill Skill4()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "MagSkill4.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/MagSkill4"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 4f,
                range           = 12f,
                hotKey          = KeyBindingDefOf.Misc7
            };

            // WarframeArmor sa = WarframeStaticMethods.getArmor(ck.self);

            ck.action = delegate(Pawn self)
            {
                SoundDef.Named("Mag_4Skill").PlayOneShot(self);
                {
                    var mote = (Mote)ThingMaker.MakeThing(ThingDef.Named("Mote_2ExFlash"));
                    mote.exactPosition = self.Position.ToVector3Shifted();
                    mote.Scale         = Mathf.Max(10f, 15f);
                    mote.rotationRate  = 1.2f;
                    GenSpawn.Spawn(mote, self.Position + new IntVec3(0, 1, 0), self.Map);
                }

                var thing = (Mag4SkillThing)ThingMaker.MakeThing(ThingDef.Named("MagSkill4Item"));
                thing.self   = self;
                thing.range  = (int)ck.range;
                thing.damage = 60 * (1 + (self.GetLevel() / 60f));
                GenSpawn.Spawn(thing, self.Position, self.Map);
                self.stances.stunner.StunFor(180, self);

                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 4,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().skill4mana);
            };


            return(ck);
        }
Пример #25
0
        //咖喱技能3
        public static Command_CastSkill Skill3()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "ValkyrSkill3.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/ValkyrSkill3"),
                targetingParams = WarframeStaticMethods.JumpTP(),
                cooldownTime    = 0.2f,
                range           = 10f,
                hotKey          = KeyBindingDefOf.Misc4
            };

            ck.action = delegate(Pawn self)
            {
                SoundDef.Named("Valkyr_3Skill").PlayOneShot(self);
                var wb       = WarframeStaticMethods.GetBelt(self);
                var damage   = wb.Energy * 5;
                var levelmul = 2 + (1 * self.GetLevel() / 30f);
                damage *= levelmul;


                foreach (var ic in WarframeStaticMethods.GetCellsAround(self.Position, self.Map, ck.range))
                {
                    foreach (var th in self.Map.thingGrid.ThingsAt(ic))
                    {
                        if (th is not Pawn pawn)
                        {
                            continue;
                        }

                        if (!pawn.HostileTo(self.Faction))
                        {
                            continue;
                        }

                        pawn.stances.stunner.StunFor(150, self);
                        var dinfo = new DamageInfo(DamageDefOf.Blunt, damage, 0, -1, self, null, null,
                                                   DamageInfo.SourceCategory.ThingOrUnknown, pawn);
                        WarframeStaticMethods.ShowDamageAmount(pawn, damage + "");
                        pawn.TakeDamage(dinfo);

                        var dataStatic = FleckMaker.GetDataStatic(pawn.Position.ToVector3(), self.Map,
                                                                  FleckDefOf.Smoke, Rand.Range(1.5f, 2.5f));
                        dataStatic.rotationRate  = Rand.Range(-30f, 30f);
                        dataStatic.velocityAngle = Rand.Range(30, 40);
                        dataStatic.velocitySpeed = Rand.Range(0.5f, 0.7f);
                        dataStatic.instanceColor = Color.white;
                        self.Map.flecks.CreateFleck(dataStatic);
                    }
                }


                var adde = wb.Energy * -0.33f;
                wb.AddEnergy(adde * 100);
                var wfdinfo = new DamageInfo(DamageDefOf.Stun, 1, 0, -1, self, null, null,
                                             DamageInfo.SourceCategory.ThingOrUnknown, self);
                self.TakeDamage(wfdinfo);

                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 3,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().Props.mana3);
            };


            return(ck);
        }
Пример #26
0
        //咖喱技能1
        public static Command_CastSkillTargeting Skill1()
        {
            var ck = new Command_CastSkillTargeting
            {
                defaultLabel    = "ValkyrSkill1.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/ValkyrSkill1"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 0.7f,
                range           = 35f
            };

            ck.finishAction = delegate
            {
                //GenDraw.DrawFieldEdges(WarframeStaticMethods.GetCellsAround(ck.self.Position, ck.self.Map, ck.range));
                GenDraw.DrawRadiusRing(ck.self.Position, ck.range);
            };
            ck.hotKey = KeyBindingDefOf.Misc5;
            ck.action = delegate(Pawn self, Thing target)
            {
                // GenExplosion.DoExplosion(self.Position, self.Map, 3.5f, DamageDefOf.Bomb, self, -1, -1, null, null, null, null, null, 0, 1, false, null, 0, 1, 0, false);
                if (!target.Position.InHorDistOf(self.Position,
                                                 ck.range)) //(!WarframeStaticMethods.GetCellsAround(self.Position, self.Map, ck.range).Contains(target.Position))
                {
                    SoundDefOf.ClickReject.PlayOneShotOnCamera();
                    return;
                }

                var linec = WarframeStaticMethods.GetLineCell(self, target);
                if (linec == null)
                {
                    Messages.Message("BeBlockedByBuilding".Translate(), MessageTypeDefOf.RejectInput, false);
                    return;
                }


                SoundDef.Named("Valkyr_1Skill").PlayOneShot(self);
                var ash4t = (Valkyr1Thing)ThingMaker.MakeThing(ThingDef.Named("ValkyrSkill1Item"));
                ash4t.self      = self;
                ash4t.target    = target as Pawn;
                ash4t.startTick = Find.TickManager.TicksGame;
                GenSpawn.Spawn(ash4t, self.Position, self.Map);

                var hediff = (Hediff_Valkyr1Skill)HediffMaker.MakeHediff(HediffDef.Named("WFValkyr1Skill_Mul"), self);
                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 1,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().Props.mana1);

                foreach (var hef in self.health.hediffSet.hediffs)
                {
                    if (hef.def.defName != "WFValkyr1Skill_Mul")
                    {
                        continue;
                    }

                    if (hef is Hediff_Valkyr1Skill hev)
                    {
                        hev.mul += 2;
                    }

                    return;
                }


                self.health.AddHediff(hediff);
            };


            return(ck);
        }
Пример #27
0
        protected void aImpact(Thing hitThing)
        {
            var unused = Map;

            GenClamor.DoClamor(this, 2.1f, ClamorDefOf.Impact);
            var instigator = launcher;
            var weaponDef  = equipmentDef;
            var battleLogEntry_RangedImpact = new BattleLogEntry_RangedImpact(instigator, hitThing,
                                                                              intendedTarget.Thing,
                                                                              weaponDef, def, targetCoverDef);

            Find.BattleLog.Add(battleLogEntry_RangedImpact);
            if (hitThing == null)
            {
                return;
            }

            if (hitThing is Pawn thing)
            {
                if (thing.Faction == launcher.Faction)
                {
                    return;
                }
            }

            var   damageDef        = def.projectile.damageDef;
            float amount           = DamageAmount;
            var   armorPenetration = ArmorPenetration;
            var   y = ExactRotation.eulerAngles.y;

            instigator = launcher;
            weaponDef  = equipmentDef;
            var dinfo = new DamageInfo(damageDef, amount, armorPenetration, y, instigator, null, weaponDef,
                                       DamageInfo.SourceCategory.ThingOrUnknown, intendedTarget.Thing);

            WarframeStaticMethods.ShowDamageAmount(hitThing, amount.ToString("f0"));
            hitThing.TakeDamage(dinfo).AssociateWithLog(battleLogEntry_RangedImpact);
            try
            {
                if (hitThing is Pawn {
                    stances : { }
                } pawn&& pawn.BodySize <= def.projectile.StoppingPower + 0.001f)
                {
                    pawn.stances.StaggerFor(95);
                }
            }
            catch (Exception)
            {
                // ignored
            }

            /*
             * else
             * {
             * // SoundDefOf.BulletImpact_Ground.PlayOneShot(new TargetInfo(base.Position, map, false));
             * //  MoteMaker.MakeStaticMote(this.ExactPosition, map, ThingDefOf.Mote_ShotHit_Dirt, 1f);
             *  if (base.Position.GetTerrain(map).takeSplashes)
             *  {
             *      MoteMaker.MakeWaterSplash(this.ExactPosition, map, Mathf.Sqrt((float)base.DamageAmount) * 1f, 4f);
             *  }
             * }
             */
        }
Пример #28
0
        //咖喱技能3
        public static Command_CastSkill Skill3()
        {
            var ck = new Command_CastSkill
            {
                defaultLabel    = "ExcaliburSkill3.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/ExcaliburSkill3"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 0.2f,
                range           = 18f,
                hotKey          = KeyBindingDefOf.Misc4
            };

            ck.action = delegate(Pawn self)
            {
                /*
                 * float damage = 120 + (8 * WarframeStaticMethods.getWFLevel(self) / 5);
                 *
                 * SoundDef.Named("Excalibur_RadialJavelin").PlayOneShot(self);
                 * foreach (IntVec3 iv in WarframeStaticMethods.getCellsAround(self.Position, self.Map, ck.range))
                 * {
                 *  foreach (Thing t in self.Map.thingGrid.ThingsAt(iv))
                 *  {
                 *      if (t is Pawn)
                 *      {
                 *          if ((t as Pawn) != self && (t as Pawn).Faction!=self.Faction)
                 *          {
                 *              WarframeStaticMethods.showDamageAmount(t, damage.ToString("f0"));
                 *              float totaldamage = 0;
                 *              DamageInfo dinfo = new DamageInfo(DamageDefOf.Cut, damage, 1, -1, self, null, null, DamageInfo.SourceCategory.ThingOrUnknown, null);
                 *              foreach (BodyPartRecord bpr in (t as Pawn).health.hediffSet.GetNotMissingParts(BodyPartHeight.Undefined,BodyPartDepth.Outside))
                 *              {
                 *
                 *
                 *
                 *                      //dinfo.SetHitPart(bpr);
                 *
                 *                  (t as Pawn).TakeDamage(dinfo);
                 *                      totaldamage += bpr.def.hitPoints;
                 *                      dinfo.SetAmount(damage-totaldamage);
                 *
                 *
                 *                  if (totaldamage > damage)
                 *                  {
                 *                      break;
                 *                  }
                 *              }
                 *
                 *
                 *
                 *
                 *
                 *
                 *
                 *
                 *              {
                 *                   Mote mote = (Mote)ThingMaker.MakeThing(ThingDef.Named("Mote_2ExFlash"), null);
                 *                  mote.exactPosition = t.Position.ToVector3Shifted();
                 *                  mote.Scale = (float)Mathf.Max(10f,15f);
                 *                  mote.rotationRate = 1.2f;
                 *                 // mote.Scale = 0.2f;
                 *                  GenSpawn.Spawn(mote, t.Position + new IntVec3(0, 1, 0), self.Map, WipeMode.Vanish);
                 *              }
                 *          }
                 *      }
                 *  }
                 * }
                 */
                SoundDef.Named("Excalibur_RadialJavelin").PlayOneShot(self);
                self.stances.stunner.StunFor(60, self);
                {
                    var mote = (Mote)ThingMaker.MakeThing(ThingDef.Named("Mote_2ExFlash"));
                    mote.exactPosition = self.Position.ToVector3Shifted();
                    mote.Scale         = Mathf.Max(10f, 15f);
                    mote.rotationRate  = 1.2f;
                    GenSpawn.Spawn(mote, self.Position + new IntVec3(0, 1, 0), self.Map);
                }
                var thing = (ExcaliburSkill3Item)ThingMaker.MakeThing(ThingDef.Named("ExcaliburSkill3Item"));
                thing.self  = self;
                thing.range = ck.range;

                thing.createdTick = Find.TickManager.TicksGame;
                GenSpawn.Spawn(thing, self.Position, self.Map);
                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 3,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().Props.mana3);
            };


            return(ck);
        }
Пример #29
0
        protected void aImpact(Thing hitThing)
        {
            var unused = Map;

            GenClamor.DoClamor(this, 2.1f, ClamorDefOf.Impact);
            var instigator = launcher;
            var weaponDef  = equipmentDef;
            var battleLogEntry_RangedImpact = new BattleLogEntry_RangedImpact(instigator, hitThing,
                                                                              intendedTarget.Thing,
                                                                              weaponDef, def, targetCoverDef);

            Find.BattleLog.Add(battleLogEntry_RangedImpact);
            if (hitThing == null)
            {
                return;
            }

            if (hitThing is Pawn thing)
            {
                if (thing.Faction == launcher.Faction)
                {
                    return;
                }
            }

            var tg = hitThing as Pawn;


            var   damageDef        = def.projectile.damageDef;
            float amount           = DamageAmount;
            var   armorPenetration = ArmorPenetration;
            var   y = ExactRotation.eulerAngles.y;

            instigator = launcher;
            weaponDef  = equipmentDef;

            var bpr = tg?.health.hediffSet.GetRandomNotMissingPart(damageDef, BodyPartHeight.Undefined,
                                                                   BodyPartDepth.Inside);

            var dinfo = new DamageInfo(damageDef, amount, armorPenetration, y, instigator, null, weaponDef,
                                       DamageInfo.SourceCategory.ThingOrUnknown, intendedTarget.Thing);

            dinfo.SetHitPart(bpr);
            WarframeStaticMethods.ShowDamageAmount(hitThing, amount.ToString("f0"));
            hitThing.TakeDamage(dinfo).AssociateWithLog(battleLogEntry_RangedImpact);
            try
            {
                if (hitThing is Pawn {
                    stances : { }
                } pawn&& pawn.BodySize <= def.projectile.StoppingPower + 0.001f)
                {
                    pawn.stances.StaggerFor(95);
                }
            }
            catch (Exception)
            {
                // ignored
            }

            Destroy();
        }
Пример #30
0
        //咖喱技能1
        public static Command_CastSkillTargeting Skill1()
        {
            var ck = new Command_CastSkillTargeting
            {
                defaultLabel    = "MagSkill1.name".Translate(),
                icon            = ContentFinder <Texture2D> .Get("Skills/MagSkill1"),
                targetingParams = WarframeStaticMethods.OnlyPawn(),
                cooldownTime    = 0.2f,
                range           = 20f
            };

            ck.finishAction = delegate
            {
                GenDraw.DrawFieldEdges(
                    WarframeStaticMethods.GetCellsAround(ck.self.Position, ck.self.Map, ck.range));
            };
            ck.hotKey = KeyBindingDefOf.Misc5;
            ck.action = delegate(Pawn self, Thing target)
            {
                // GenExplosion.DoExplosion(self.Position, self.Map, 3.5f, DamageDefOf.Bomb, self, -1, -1, null, null, null, null, null, 0, 1, false, null, 0, 1, 0, false);
                if (!WarframeStaticMethods.GetCellsAround(self.Position, self.Map, ck.range).Contains(target.Position))
                {
                    SoundDefOf.ClickReject.PlayOneShotOnCamera();
                    return;
                }

                var linec = WarframeStaticMethods.GetLineCell(self, target);
                if (linec == null)
                {
                    Messages.Message("BeBlockedByBuilding".Translate(), MessageTypeDefOf.RejectInput, false);
                    return;
                }

                if (!(target is Pawn pawn))
                {
                    return;
                }


                var eway     = self.CellsAdjacent8WayAndInside().ToList();
                var finalpoc = self.Position;
                if (pawn.Position.x == self.Position.x)
                {
                    finalpoc = pawn.Position.z > self.Position.z ? eway[5] : eway[3];
                }
                else if (pawn.Position.z == self.Position.z)
                {
                    finalpoc = pawn.Position.x > self.Position.x ? eway[7] : eway[1];
                }
                else if (pawn.Position.x > self.Position.x)
                {
                    finalpoc = pawn.Position.z > self.Position.z ? eway[8] : eway[6];
                }
                else if (pawn.Position.x < self.Position.x)
                {
                    finalpoc = pawn.Position.z > self.Position.z ? eway[2] : eway[0];
                }


                var finalPawn = new List <Pawn>();
                foreach (var ic in pawn.CellsAdjacent8WayAndInside())
                {
                    foreach (var tt in pawn.Map.thingGrid.ThingsAt(ic))
                    {
                        if (tt is not Pawn thing || tt == self || tt == pawn || thing.Position == self.Position)
                        {
                            continue;
                        }

                        if (thing.Faction != self.Faction)
                        {
                            finalPawn.Add(thing);
                        }
                    }
                }

                if (pawn.Faction != self.Faction)
                {
                    finalPawn.Add(pawn);
                }

                foreach (var ttg in finalPawn)
                {
                    ttg.pather.StartPath(finalpoc, PathEndMode.Touch);
                    ttg.Position = finalpoc;
                    ttg.pather.StopDead();
                    if (ttg.jobs.curJob != null)
                    {
                        ttg.jobs.curDriver.Notify_PatherArrived();
                    }

                    ttg.stances.stunner.StunFor(120, self);
                }


                SoundDef.Named("Mag_1Skill").PlayOneShot(self);
                float damage = 30 + (2 * WarframeStaticMethods.GetWFLevel(self) / 5);
                var   dinfo  = new DamageInfo(DefDatabase <DamageDef> .GetNamed("Mag"), damage, 1, -1, self, null, null,
                                              DamageInfo.SourceCategory.ThingOrUnknown, pawn);
                foreach (var p in finalPawn)
                {
                    if (p.Faction == self.Faction)
                    {
                        continue;
                    }

                    WarframeStaticMethods.ShowDamageAmount(p, damage.ToString("f0"));
                    p.TakeDamage(dinfo);
                }

                // WarframeStaticMethods.showDamageAmount(self, damage.ToString("f0"));
                WarframeStaticMethods.StartCooldown(self, ck.cooldownTime, 1,
                                                    WarframeStaticMethods.GetArmor(self).TryGetComp <CompWarframeSkill>().Props.mana1);
            };


            return(ck);
        }