コード例 #1
0
        public static void CopperProc(FargoSoulsPlayer modPlayer, NPC target)
        {
            if (modPlayer.Player.GetToggleValue("Copper") && modPlayer.CopperProcCD == 0)
            {
                target.AddBuff(BuffID.Electrified, 180);

                int dmg        = 20;
                int maxTargets = 1;
                int cdLength   = 300;

                if (modPlayer.TerraForce)
                {
                    dmg        = 100;
                    maxTargets = 10;
                    cdLength   = 200;
                }

                List <int> npcIndexes  = new List <int>();
                float      closestDist = 500f;
                NPC        closestNPC;

                for (int i = 0; i < maxTargets; i++)
                {
                    closestNPC = null;

                    //find closest npc to target that has not been chained to yet
                    for (int j = 0; j < Main.maxNPCs; j++)
                    {
                        NPC npc = Main.npc[j];

                        if (npc.active && npc.whoAmI != target.whoAmI && npc.CanBeChasedBy() && npc.Distance(target.Center) < closestDist && !npcIndexes.Contains(npc.whoAmI) &&
                            Collision.CanHitLine(npc.Center, 0, 0, target.Center, 0, 0))
                        {
                            closestNPC  = npc;
                            closestDist = npc.Distance(target.Center);
                            //break;
                        }
                    }

                    if (closestNPC != null)
                    {
                        npcIndexes.Add(closestNPC.whoAmI);

                        Vector2 ai       = closestNPC.Center - target.Center;
                        float   ai2      = Main.rand.Next(100);
                        Vector2 velocity = Vector2.Normalize(ai) * 20;

                        Projectile p = FargoSoulsUtil.NewProjectileDirectSafe(modPlayer.Player.GetSource_ItemUse(modPlayer.Player.HeldItem), target.Center, velocity, ModContent.ProjectileType <CopperLightning>(), FargoSoulsUtil.HighestDamageTypeScaling(modPlayer.Player, dmg), 0f, modPlayer.Player.whoAmI, ai.ToRotation(), ai2);
                    }
                    else
                    {
                        break;
                    }

                    target = closestNPC;
                }

                modPlayer.CopperProcCD = cdLength;
            }
        }
コード例 #2
0
        public override void AI()
        {
            if (!yoyosSpawned && projectile.owner == Main.myPlayer)
            {
                int maxYoyos = 5;
                for (int i = 0; i < maxYoyos; i++)
                {
                    float      radians = (360f / (float)maxYoyos) * i * (float)(Math.PI / 180);
                    Projectile yoyo    = FargoSoulsUtil.NewProjectileDirectSafe(projectile.Center, Vector2.Zero,
                                                                                ModContent.ProjectileType <BlenderOrbital>(), projectile.damage, projectile.knockBack, projectile.owner, i, radians);
                    yoyo.localAI[0] = projectile.identity;
                }

                yoyosSpawned = true;
            }

            if (soundtimer > 0)
            {
                soundtimer--;
            }

            if (Main.player[projectile.owner].HeldItem.type == ModContent.ItemType <Items.Weapons.SwarmDrops.Blender>())
            {
                projectile.damage    = Main.player[projectile.owner].GetWeaponDamage(Main.player[projectile.owner].HeldItem);
                projectile.knockBack = Main.player[projectile.owner].GetWeaponKnockback(Main.player[projectile.owner].HeldItem, Main.player[projectile.owner].HeldItem.knockBack);
            }
        }
コード例 #3
0
        public override void AI()
        {
            if (!yoyosSpawned && Projectile.owner == Main.myPlayer)
            {
                float localAI1 = 0;

                for (int i = 0; i < Main.maxProjectiles; i++)
                {
                    if (Main.projectile[i].active && Main.projectile[i].friendly && Main.projectile[i].owner == Projectile.owner && Main.projectile[i].type == ModContent.ProjectileType <BlenderOrbital>())
                    {
                        localAI1 = Main.projectile[i].localAI[1] + MathHelper.Pi;
                        break;
                    }
                }

                int maxYoyos = 5;
                for (int i = 0; i < maxYoyos; i++)
                {
                    float      radians = (360f / (float)maxYoyos) * i * (float)(Math.PI / 180);
                    Projectile yoyo    = FargoSoulsUtil.NewProjectileDirectSafe(Projectile.GetSource_FromThis(), Projectile.Center, Vector2.Zero,
                                                                                ModContent.ProjectileType <BlenderOrbital>(), Projectile.damage, Projectile.knockBack, Projectile.owner, i, radians);
                    if (yoyo != null)
                    {
                        yoyo.localAI[0] = Projectile.identity;
                        yoyo.localAI[1] = localAI1;
                    }
                }

                yoyosSpawned = true;
            }

            if (soundtimer > 0)
            {
                soundtimer--;
            }

            if (Main.player[Projectile.owner].HeldItem.type == ModContent.ItemType <Items.Weapons.SwarmDrops.Blender>())
            {
                Projectile.damage    = Main.player[Projectile.owner].GetWeaponDamage(Main.player[Projectile.owner].HeldItem);
                Projectile.knockBack = Main.player[Projectile.owner].GetWeaponKnockback(Main.player[Projectile.owner].HeldItem, Main.player[Projectile.owner].HeldItem.knockBack);
            }
        }
コード例 #4
0
        public static void CobaltHurt(Player player, double damage)
        {
            if (player.GetToggleValue("Cobalt") && player.whoAmI == Main.myPlayer)
            {
                FargoSoulsPlayer modPlayer = player.GetModPlayer <FargoSoulsPlayer>();

                int baseDamage = 50;
                int multiplier = 2;
                int cap        = 150;

                if (modPlayer.EarthForce)
                {
                    baseDamage = 50;
                    multiplier = 4;
                    cap        = 250;
                }

                if (modPlayer.TerrariaSoul)
                {
                    baseDamage = 250;
                    multiplier = 5;
                    cap        = 500;
                }

                int explosionDamage = baseDamage + (int)damage * multiplier;
                if (explosionDamage > cap)
                {
                    explosionDamage = cap;
                }

                Projectile p = FargoSoulsUtil.NewProjectileDirectSafe(player.GetSource_Accessory(modPlayer.CobaltEnchantItem), player.Center, Vector2.Zero, ModContent.ProjectileType <Explosion>(), (int)(explosionDamage * player.ActualClassDamage(DamageClass.Melee)), 0f, Main.myPlayer);
                if (p != null)
                {
                    p.GetGlobalProjectile <FargoSoulsGlobalProjectile>().CanSplit = false;
                }
            }
        }