public override void AI(Projectile projectile) { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (projectile.minion && projectile.minionSlots > 0 && modPlayer.pursuitScroll) { runeCounter++; if (runeCounter >= 180 / projectile.minionSlots) { Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((1 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((1 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((2 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((2 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((3 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((3 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer); runeCounter = 0; } } else if (projectile.minion && projectile.sentry && modPlayer.pursuitScroll) { runeCounter++; if (runeCounter >= 90) { Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((1 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((1 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((2 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((2 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer); Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos((3 * 2 * Math.PI) / 3) * runeSpeed, (float)Math.Sin((3 * 2 * Math.PI) / 3) * runeSpeed, mod.ProjectileType("PursuitRuneFreindly"), (int)(50 * player.minionDamage), 3f, Main.myPlayer); runeCounter = 0; } } }
public override void AI() { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (modPlayer.HydraHeadMinion) { projectile.timeLeft = 2; } if (Main.LocalPlayer == player) { projectile.ai[0] = Main.MouseWorld.X; projectile.ai[1] = Main.MouseWorld.Y; projectile.netUpdate = true; //projectile.netUpdate = true; } projectile.rotation = (new Vector2(projectile.ai[0], projectile.ai[1]) - projectile.Center).ToRotation(); tarX = (float)Math.Cos(projectile.rotation) * 10; tarY = (float)Math.Sin(projectile.rotation) * 10; // Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 24); if (player.maxMinions - player.numMinions >= 1 && Main.netMode != 2 && modPlayer.HydraHeadMinion && Main.myPlayer == projectile.owner) { Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, projectile.Center.X, projectile.Center.Y, mod.ProjectileType("MinionHead"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f); } varTime++; if (varTime == 30 && Main.netMode != 2 && Main.myPlayer == projectile.owner) { Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, tarX, tarY, mod.ProjectileType("MinionBreath"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f); } if (varTime >= 60) { if (Main.netMode != 2 && Main.myPlayer == projectile.owner) { Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, tarX, tarY, mod.ProjectileType("MinionBreath"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f); } YvarOld = Yvar; XvarOld = Xvar; varTime = 0; if (Main.netMode != 2) { Yvar = Main.rand.Next(0, 80); Xvar = Main.rand.Next(-80, 80); } } Vector2 moveTo = new Vector2(player.Center.X + Xvar, player.Center.Y - Yvar) - projectile.Center; projectile.velocity = (moveTo) * .04f; }
public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack) { QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod); Vector2 trueSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(15)); bool yes = true; float anotherSpeedVariable = trueSpeed.Length(); modPlayer.PickRandomAmmo(GetReference(95), ref type, ref anotherSpeedVariable, ref yes, ref damage, ref knockBack, Main.rand.Next(2) == 0); Projectile.NewProjectile(position.X, position.Y, trueSpeed.X, trueSpeed.Y, type, damage, knockBack, player.whoAmI); return(false); }
public override void AI(Projectile projectile) { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (modPlayer.minionFang && projectile.minion) { projectile.melee = true; } else if (projectile.minion) { projectile.melee = false; } }
public override void AI() { Player player = Main.player[projectile.owner]; //Main.NewText(moveTo); QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod); sniperCount = player.ownedProjectileCounts[mod.ProjectileType("ChlorophyteSniper")]; if (modPlayer.chlorophyteSniper) { projectile.timeLeft = 2; } for (int p = 0; p < 1000; p++) { if (Main.projectile[p].type == mod.ProjectileType("ChlorophyteSniper")) { if (p == projectile.whoAmI) { break; } else { identity++; } } } timer++; if (sniperCount != 0) { projectile.ai[0] = 40f; flyTo = player.Center + QwertyMethods.PolarVector(projectile.ai[0], -modPlayer.mythrilPrismRotation + (2f * (float)Math.PI * identity) / sniperCount); projectile.velocity = (flyTo - projectile.Center) * .1f; if (QwertyMethods.ClosestNPC(ref target, 100000, projectile.Center, false, player.MinionAttackTargetNPC) && timer > 180) { Projectile.NewProjectile(projectile.Center, QwertyMethods.PolarVector(10, (target.Center - projectile.Center).ToRotation()), mod.ProjectileType("ChlorophyteSnipe"), projectile.damage, projectile.knockBack, player.whoAmI); timer = 0; } //Main.NewText(projectile.Center);/ //projectile.Center = flyTo; } identity = 0; }
public override void AI() { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); varTime++; if (varTime >= 60) { varTime = 0; if (Main.netMode != 2) { Yvar = Main.rand.Next(0, 80); Xvar = Main.rand.Next(-80, 80); } } Vector2 moveTo = new Vector2(player.Center.X + Xvar, player.Center.Y - Yvar) - projectile.Center; projectile.velocity = (moveTo) * .04f; if (modPlayer.LuneArcher) { projectile.timeLeft = 2; } timer++; if (QwertyMethods.ClosestNPC(ref target, 10000, player.Center, false, player.MinionAttackTargetNPC)) { projectile.rotation = (target.Center - projectile.Center).ToRotation(); if (timer > 90) { int weaponDamage = projectile.damage; float weaponKnockback = projectile.knockBack; player.PickAmmo(QwertyMethods.MakeItemFromID(39), ref arrow, ref speedB, ref canShoot, ref weaponDamage, ref weaponKnockback, Main.rand.Next(2) == 0); if (Main.netMode != 1) { Projectile bul = Main.projectile[Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos(projectile.rotation) * BulVel, (float)Math.Sin(projectile.rotation) * BulVel, arrow, weaponDamage, weaponKnockback, Main.myPlayer)]; bul.ranged = false; bul.minion = true; if (Main.netMode == 1) { QwertysRandomContent.UpdateProjectileClass(bul); } } timer = 0; } projectile.rotation += (float)Math.PI / 2; } }
public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack) { //reset damage and knockback to avoid ammo modifing damage = (int)(item.damage * player.meleeDamage); knockBack = item.knockBack * knockBack; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); Vector2 trueSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(1)); bool yes = true; float anotherSpeedVariable = trueSpeed.Length(); modPlayer.PickRandomAmmo(item, ref type, ref anotherSpeedVariable, ref yes, ref damage, ref knockBack, Main.rand.Next(2) == 0); Projectile.NewProjectile(position.X, position.Y, trueSpeed.X, trueSpeed.Y, type, damage, knockBack, player.whoAmI); return(false); }
public override void Update(Player player, ref int buffIndex) { QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (player.ownedProjectileCounts[mod.ProjectileType("AncientMinionFreindly")] > 0 || player.ownedProjectileCounts[mod.ProjectileType("RunicMinionFreindly")] > 0) { modPlayer.AncientMinion = true; } if (!modPlayer.AncientMinion) { player.DelBuff(buffIndex); buffIndex--; } else { player.buffTime[buffIndex] = 18000; } }
public override void Update(Player player, ref int buffIndex) { QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (player.ownedProjectileCounts[mod.ProjectileType("MinionHead")] > 0) { modPlayer.HydraHeadMinion = true; } if (!modPlayer.HydraHeadMinion) { player.DelBuff(buffIndex); buffIndex--; } else { player.buffTime[buffIndex] = 18000; } }
public override void Update(Player player, ref int buffIndex) { QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod); if (player.ownedProjectileCounts[mod.ProjectileType("SpaceFighter")] > 0) { modPlayer.SpaceFighter = true; } if (!modPlayer.SpaceFighter) { player.DelBuff(buffIndex); buffIndex--; } else { player.buffTime[buffIndex] = 18000; } }
/*------------------------------------------------- */ public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack) { int numberProjectiles = 1 + Main.rand.Next(16); for (int i = 0; i < numberProjectiles; i++) { QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod); Vector2 trueSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(20)); float scale = Main.rand.NextFloat(.7f, 2.3f); trueSpeed = trueSpeed * scale; bool yes = true; float anotherSpeedVariable = trueSpeed.Length(); modPlayer.PickRandomAmmo(GetReference(39), ref type, ref anotherSpeedVariable, ref yes, ref damage, ref knockBack, Main.rand.Next(2) == 0); Projectile.NewProjectile(position.X + Main.rand.Next(-18, 18), position.Y + Main.rand.Next(-18, 18), trueSpeed.X, trueSpeed.Y, type, damage, knockBack, player.whoAmI); } return(false); }
public override void AI() { Player player = Main.player[projectile.owner]; shader = player.miscDyes[1].dye; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (!player.active) { projectile.active = false; return; } if (player.dead) { modPlayer.Lightling = false; } if (modPlayer.Lightling) { projectile.timeLeft = 2; } Vector2 flyTo = player.Center - projectile.Center; //float dir = flyTo.ToRotation(); //flyTo = (player.Center +QwertyMethods.PolarVector(-200, dir)) - projectile.Center; // Main.NewText(flyTo.Length()); if (flyTo.Length() < 120) { projectile.velocity = Vector2.Zero; } else { projectile.velocity = flyTo * .01f; } projectile.frameCounter++; if (projectile.frameCounter % 10 == 0) { projectile.frame = 1; } else if (projectile.frameCounter % 5 == 0) { projectile.frame = 0; } }
/*------------------------------------------------- */ public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack) { int numberProjectiles = 2 + Main.rand.Next(7); for (int i = 0; i < numberProjectiles; i++) { QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); Vector2 trueSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(15)); float scale = Main.rand.NextFloat(1, 2); trueSpeed = trueSpeed * scale; bool yes = true; float anotherSpeedVariable = trueSpeed.Length(); int currentDmg = (int)(item.damage * player.rangedDamage); float currentKnockBack = item.knockBack * knockBack; modPlayer.PickRandomAmmo(item, ref type, ref anotherSpeedVariable, ref yes, ref currentDmg, ref currentKnockBack, Main.rand.Next(2) == 0); Projectile.NewProjectile(position.X + Main.rand.Next(-12, 12), position.Y + Main.rand.Next(-12, 12), trueSpeed.X, trueSpeed.Y, type, currentDmg, currentKnockBack, player.whoAmI); } return(false); }
public override void AI() { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (modPlayer.HydraHeadMinion) { projectile.timeLeft = 2; } projectile.rotation = (QwertysRandomContent.LocalCursor[projectile.owner] - projectile.Center).ToRotation(); if (player.maxMinions - player.numMinions >= 1 && Main.netMode != 2 && modPlayer.HydraHeadMinion && Main.myPlayer == projectile.owner) { Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, projectile.Center.X, projectile.Center.Y, mod.ProjectileType("MinionHead"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f); } varTime++; if (varTime == 30 && projectile.owner == Main.myPlayer) { Projectile.NewProjectile(projectile.Center, QwertyMethods.PolarVector(10, projectile.rotation), mod.ProjectileType("MinionBreath"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f); } if (varTime >= 60) { if (projectile.owner == Main.myPlayer) { Projectile.NewProjectile(projectile.Center, QwertyMethods.PolarVector(10, projectile.rotation), mod.ProjectileType("MinionBreath"), projectile.damage, projectile.knockBack, projectile.owner, 0f, 0f); } varTime = 0; if (Main.netMode != 2 && Main.myPlayer == projectile.owner) { Yvar = Main.rand.Next(0, 80); Xvar = Main.rand.Next(-80, 80); projectile.netUpdate = true; } } Vector2 moveTo = new Vector2(player.Center.X + Xvar, player.Center.Y - Yvar) - projectile.Center; projectile.velocity = (moveTo) * .04f; }
/*------------------------------------------------- */ public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack) { if (player.altFunctionUse == 2) { QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod); Vector2 trueSpeed = new Vector2(speedX, speedY); bool yes = true; float anotherSpeedVariable = trueSpeed.Length(); modPlayer.PickRandomAmmo(GetReference(39), ref type, ref anotherSpeedVariable, ref yes, ref damage, ref knockBack, Main.rand.Next(2) == 0); Projectile.NewProjectile(position.X, position.Y, speedX, speedY, type, damage, knockBack, player.whoAmI); return(false); } else { return(true); } }
public override void AI() { if (spin) { projectile.rotation += projectile.velocity.Length() * (float)Math.PI / 60 * (projectile.velocity.X > 0 ? 1 : -1); } spin = true; Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (modPlayer.GlassSpike) { projectile.timeLeft = 2; } if ((player.Center - projectile.Center).Length() > 400) { projectile.tileCollide = false; } if (projectile.tileCollide) { projectile.velocity.Y = 7; projectile.velocity.X *= .9f; } else { Vector2 flyTo = player.Center + new Vector2(orientation, -20); if ((projectile.Center - flyTo).Length() < 20) { projectile.tileCollide = true; } Vector2 vel = (flyTo - projectile.Center) * .07f; if (vel.Length() < 3) { vel = vel.SafeNormalize(-Vector2.UnitY) * 3; } projectile.velocity = vel; } }
public override void AI(Projectile projectile) { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod); if (player.maxMinions - player.numMinions >= projectile.minionSlots && Main.netMode != 2 && projectile.minionSlots > 0 && projectile.active && modPlayer.hydraCharm) { if (wait >= 20 && projectile.active) { Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0, -4, projectile.type, projectile.damage, projectile.knockBack, Main.myPlayer, 0f, 0f); wait = 0; } else { wait++; } } else { wait = 0; } }
public override void AI(Projectile projectile) { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (player.maxMinions - player.numMinions >= projectile.minionSlots && Main.netMode != 2 && projectile.minionSlots > 0 && projectile.active && modPlayer.hydraCharm && projectile.type != mod.ProjectileType("SwordMinion") && (projectile.type < ProjectileID.StardustDragon1 || projectile.type > ProjectileID.StardustDragon4)) { if (wait >= 20 && projectile.active) { Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0, -4, projectile.type, projectile.damage, projectile.knockBack, Main.myPlayer, 0f, 0f); wait = 0; } else { wait++; } } else { wait = 0; } }
public override void AI() { Player player = Main.player[projectile.owner]; //Main.NewText(moveTo); QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); prismCount = player.ownedProjectileCounts[mod.ProjectileType("MythrilPrism")]; if (modPlayer.mythrilPrism) { projectile.timeLeft = 2; } for (int p = 0; p < 1000; p++) { if (Main.projectile[p].type == mod.ProjectileType("MythrilPrism")) { if (p == projectile.whoAmI) { break; } else { identity++; } } } if (player.MinionAttackTargetNPC != -1) { for (int k = 0; k < 200; k++) { possibleTarget = Main.npc[k]; distance = (possibleTarget.Center - player.Center).Length(); if (distance < maxDistance && possibleTarget.active && !possibleTarget.dontTakeDamage && !possibleTarget.friendly && possibleTarget.lifeMax > 5 && !possibleTarget.immortal) { target = Main.npc[k]; foundTarget = true; maxDistance = (target.Center - player.Center).Length(); } } } else { for (int k = 0; k < 200; k++) { possibleTarget = Main.npc[k]; distance = (possibleTarget.Center - player.Center).Length(); if (distance < maxDistance && possibleTarget.active && !possibleTarget.dontTakeDamage && !possibleTarget.friendly && possibleTarget.lifeMax > 5 && !possibleTarget.immortal) { target = Main.npc[k]; foundTarget = true; maxDistance = (target.Center - player.Center).Length(); } } } if (runOnce) { Beam = Main.projectile[Projectile.NewProjectile(projectile.Center, Vector2.Zero, mod.ProjectileType("MiniBeam"), projectile.damage, projectile.knockBack, projectile.owner, projectile.whoAmI, 0)]; runOnce = false; } if (prismCount != 0) { projectile.ai[0] = 40f; if (foundTarget) { flyTo = target.Center + QwertyMethods.PolarVector(maxDistance / 2f, (player.Center - target.Center).ToRotation() + (.5f * (float)Math.PI * (identity + 1)) / (prismCount + 1) - (float)Math.PI * .25f); Beam.ai[1] = target.whoAmI; } else { Beam.ai[1] = -1; flyTo = player.Center + QwertyMethods.PolarVector(projectile.ai[0], modPlayer.mythrilPrismRotation + (2f * (float)Math.PI * identity) / prismCount); } projectile.velocity = (flyTo - projectile.Center) * .1f; //Main.NewText(projectile.Center);/ //projectile.Center = flyTo; } identity = 0; maxDistance = beamRange * 2; foundTarget = false; }
public override void AI() { bool spinAttack = false; bladeLength = 24 + 16 + 14 * projectile.minionSlots; counter++; if (counter % projectile.localNPCHitCooldown == 0) { turnOffset *= -1; } yetAnotherTrigCounter += (float)Math.PI / 120; Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (modPlayer.SwordMinion) { projectile.timeLeft = 2; } if ((player.Center - projectile.Center).Length() > 1000) { returningToPlayer = true; } if ((player.Center - projectile.Center).Length() < 300) { returningToPlayer = false; } Vector2 flyTo = player.Center + new Vector2(-50 * player.direction, -50 - 14 * projectile.minionSlots) + Vector2.UnitY * (float)Math.Sin(yetAnotherTrigCounter) * 20; float turnTo = (float)Math.PI / 2; float speed = 10f; if (returningToPlayer) { speed = (player.Center - projectile.Center).Length() / 30f; } if (QwertyMethods.ClosestNPC(ref target, 800, projectile.Center, false, player.MinionAttackTargetNPC) && !returningToPlayer) { Vector2 difference2 = projectile.Center - target.Center; flyTo = target.Center + QwertyMethods.PolarVector(bladeLength / 2, difference2.ToRotation()); turnTo = (target.Center - projectile.Center).ToRotation(); int nerabyEnemies = 0; foreach (NPC npc in Main.npc) { if (npc.active && npc.chaseable && !npc.dontTakeDamage && !npc.friendly && npc.lifeMax > 5 && !npc.immortal && (npc.Center - projectile.Center).Length() < bladeLength) { nerabyEnemies++; } } if (nerabyEnemies > 2) { spinAttack = true; } if (difference2.Length() < bladeLength) { turnTo += turnOffset; } } Vector2 difference = flyTo - projectile.Center; if (difference.Length() < speed) { projectile.Center = flyTo; projectile.velocity = Vector2.Zero; } else { projectile.velocity = difference.SafeNormalize(Vector2.UnitY) * speed; } if (spinAttack) { projectile.rotation += (float)Math.PI / 15; } else { projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, turnTo, 6); } }
public override void AI() { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod); if (modPlayer.AncientMinion) { projectile.timeLeft = 2; } if (runOnce) { //Main.PlaySound(SoundID.Item8); if (Main.netMode != 2) { moveTo.X = projectile.Center.X; moveTo.Y = projectile.Center.Y; projectile.netUpdate = true; } runOnce = false; } if (QwertyMethods.ClosestNPC(ref target, maxDistance, player.Center, true, player.MinionAttackTargetNPC)) { timer++; if (timer > waitTime + chargeTime) { for (int k = 0; k < 200; k++) { projectile.localNPCImmunity[k] = 0; } for (int i = 0; i < minionRingDustQty; i++) { float theta = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI); Dust dust = Dust.NewDustPerfect(projectile.Center + QwertyMethods.PolarVector(minionRingRadius, theta), mod.DustType("AncientGlow"), QwertyMethods.PolarVector(-minionRingRadius / 10, theta)); dust.noGravity = true; } if (Main.netMode != 2) { projectile.ai[1] = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI); projectile.netUpdate = true; } moveTo = new Vector2(target.Center.X + (float)Math.Cos(projectile.ai[1]) * 100, target.Center.Y + (float)Math.Sin(projectile.ai[1]) * 100); if (Main.netMode != 2) { projectile.netUpdate = true; } justTeleported = true; timer = 0; noTargetTimer = 0; } else if (timer > waitTime) { charging = true; } else { if (timer == 2) { Main.PlaySound(SoundID.Item8); for (int i = 0; i < minionRingDustQty; i++) { float theta = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI); Dust dust = Dust.NewDustPerfect(projectile.Center, mod.DustType("AncientGlow"), QwertyMethods.PolarVector(minionRingRadius / 10, theta)); dust.noGravity = true; } } charging = false; } if (charging) { projectile.velocity = new Vector2((float)Math.Cos(projectile.rotation) * chargeSpeed, (float)Math.Sin(projectile.rotation) * chargeSpeed); } else { projectile.Center = new Vector2(moveTo.X, moveTo.Y); projectile.velocity = new Vector2(0, 0); float targetAngle = new Vector2(target.Center.X - projectile.Center.X, target.Center.Y - projectile.Center.Y).ToRotation(); projectile.rotation = targetAngle; } } else { noTargetTimer++; if (noTargetTimer == 2) { Main.PlaySound(SoundID.Item8); for (int i = 0; i < minionRingDustQty; i++) { float theta = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI); Dust dust = Dust.NewDustPerfect(projectile.Center, mod.DustType("AncientGlow"), QwertyMethods.PolarVector(minionRingRadius / 10, theta)); dust.noGravity = true; } } if ((projectile.Center - player.Center).Length() > 300) { if (Main.netMode != 2) { projectile.ai[1] = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI); projectile.netUpdate = true; } for (int i = 0; i < minionRingDustQty; i++) { float theta = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI); Dust dust = Dust.NewDustPerfect(projectile.Center + QwertyMethods.PolarVector(minionRingRadius, theta), mod.DustType("AncientGlow"), QwertyMethods.PolarVector(-minionRingRadius / 10, theta)); dust.noGravity = true; } noTargetTimer = 0; moveTo = new Vector2(player.Center.X + (float)Math.Cos(projectile.ai[1]) * 100, player.Center.Y + (float)Math.Sin(projectile.ai[1]) * 100); justTeleported = true; } projectile.Center = moveTo; float targetAngle = new Vector2(player.Center.X - projectile.Center.X, player.Center.Y - projectile.Center.Y).ToRotation(); projectile.rotation = targetAngle; } if (justTeleported) { justTeleported = false; } projectile.frameCounter++; }
public override void AI() { parent = Main.projectile[(int)projectile.ai[0]]; Player player = Main.player[projectile.owner]; if (runOnce) { projectile.rotation = projectile.velocity.ToRotation(); runOnce = false; } QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (!parent.active) { projectile.Kill(); } fighterTimer++; if (returnToParent) { swimDirection = (parent.Center - projectile.Center).ToRotation(); if (Collision.CheckAABBvAABBCollision(projectile.position, new Vector2(projectile.width, projectile.height), parent.position, new Vector2(parent.width, parent.height))) { Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/Ur-Quan/UrQuan-Recover").WithVolume(.8f)); projectile.Kill(); } } else if (fighterTimer > 600) { returnToParent = true; } if (fighterTimer > 10) { // Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 24); if (!returnToParent) { if (player.MinionAttackTargetNPC != -1) { prey = Main.npc[player.MinionAttackTargetNPC]; foundTarget = true; swimDirection = (prey.Center - projectile.Center).ToRotation(); maxDistance = (prey.Center - projectile.Center).Length(); } else { for (int k = 0; k < 200; k++) { possiblePrey = Main.npc[k]; distance = (possiblePrey.Center - projectile.Center).Length(); distFromPlayer = (possiblePrey.Center - player.Center).Length(); if (distance < maxDistance && possiblePrey.active && !possiblePrey.dontTakeDamage && !possiblePrey.friendly && possiblePrey.lifeMax > 5 && !possiblePrey.immortal && distFromPlayer < 800) { prey = Main.npc[k]; foundTarget = true; swimDirection = (prey.Center - projectile.Center).ToRotation(); maxDistance = (prey.Center - projectile.Center).Length(); if (maxDistance + prey.width / 2 < 50) { close = true; } else { close = true; } } } } } if (!foundTarget) { returnToParent = true; } else { } swimDirection = new Vector2((float)Math.Cos(swimDirection), (float)Math.Sin(swimDirection)).ToRotation(); actDirection = swimDirection; actDirection = new Vector2((float)Math.Cos(actDirection), (float)Math.Sin(actDirection)).ToRotation(); if (foundTarget) { if (maxDistance < 50) { varTime++; if (varTime >= 15) { drawLaser = true; } else if (varTime >= 5) { drawLaser = false; } if (varTime >= 20) { Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/Ur-Quan/UrQuan-Fighter").WithVolume(.2f)); Projectile.NewProjectile(prey.Center, new Vector2(0, 0), mod.ProjectileType("FighterShot"), projectile.damage, projectile.knockBack, Main.myPlayer, 0f, 0f); varTime = 0; } projectile.velocity.X = prey.velocity.X; projectile.velocity.Y = prey.velocity.Y; } else { drawLaser = false; projectile.velocity.X = (float)Math.Cos(actDirection) * swimSpeed; projectile.velocity.Y = (float)Math.Sin(actDirection) * swimSpeed; } for (int k = 0; k < 200; k++) { if (Main.projectile[k].type == mod.ProjectileType("Fighter") && k != projectile.whoAmI) { if (Collision.CheckAABBvAABBCollision(projectile.position, new Vector2(projectile.width, projectile.height), Main.projectile[k].position, new Vector2(Main.projectile[k].width, Main.projectile[k].height))) { projectile.velocity += new Vector2((float)Math.Cos((projectile.Center - Main.projectile[k].Center).ToRotation()) * 3, (float)Math.Sin((projectile.Center - Main.projectile[k].Center).ToRotation()) * 3); } } } } else { drawLaser = false; projectile.velocity.X = (float)Math.Cos(actDirection) * swimSpeed; projectile.velocity.Y = (float)Math.Sin(actDirection) * swimSpeed; } projectile.rotation = actDirection; foundTarget = false; maxDistance = 10000f; /* * debugTimer++; * if(debugTimer %10==0) * { * CombatText.NewText(player.getRect(), new Color(38, 126, 126), (int)MathHelper.ToDegrees(swimDirection), true, false); * CombatText.NewText(projectile.getRect(), new Color(38, 126, 126), (int)MathHelper.ToDegrees(actDirection), true, false); * } */ close = false; } }
public override void AI() { Player player = Main.player[projectile.owner]; // Main.NewText(player.MinionAttackTargetNPC); if (runOnce) { projectile.ai[0] = 6; noTargetwander = new Vector2(Main.rand.Next(-200, 200), Main.rand.Next(-200, 200)); runOnce = false; } if ((projectile.Center - player.Center).Length() > 2000) { projectile.position = player.Center; } QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (modPlayer.Dreadnought) { projectile.timeLeft = 2; } // Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 24); if (player.MinionAttackTargetNPC != -1) { prey = Main.npc[player.MinionAttackTargetNPC]; foundTarget = true; swimDirection = (prey.Center - projectile.Center).ToRotation(); maxDistance = (prey.Center - projectile.Center).Length(); } else { for (int k = 0; k < 200; k++) { possiblePrey = Main.npc[k]; distance = (possiblePrey.Center - projectile.Center).Length(); distFromPlayer = (possiblePrey.Center - player.Center).Length(); if (distance < maxDistance && possiblePrey.active && !possiblePrey.dontTakeDamage && !possiblePrey.friendly && possiblePrey.lifeMax > 5 && !possiblePrey.immortal && distFromPlayer < 800) { prey = Main.npc[k]; foundTarget = true; swimDirection = (prey.Center - projectile.Center).ToRotation(); maxDistance = (prey.Center - projectile.Center).Length(); } } } if (!foundTarget) { targetwanderTimer++; if (targetwanderTimer % 120 == 0 && Main.netMode != 2 && Main.myPlayer == projectile.owner) { noTargetwander = new Vector2(Main.rand.Next(-200, 200), Main.rand.Next(-200, 200)); projectile.netUpdate = true; } swimDirection = (noTargetwander + player.Center - projectile.Center).ToRotation(); } else { fighterTimer++; if (fighterTimer % 60 == 0) { if (projectile.ai[0] > 0) { Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/Ur-Quan/UrQuan-Launch").WithVolume(.8f)); Projectile.NewProjectile(((float)Math.Cos(actDirection + (float)Math.PI) * projectile.width / 2) + projectile.Center.X, ((float)Math.Sin(actDirection + (float)Math.PI) * projectile.height / 2) + projectile.Center.Y, (float)Math.Cos(actDirection + (float)Math.PI + (float)Math.PI / 4) * shotSpeed, (float)Math.Sin(actDirection + (float)Math.PI + (float)Math.PI / 4) * shotSpeed, mod.ProjectileType("Fighter"), projectile.damage / 6, projectile.knockBack, Main.myPlayer, projectile.whoAmI, 0f); projectile.ai[0]--; } if (projectile.ai[0] > 0) { Projectile.NewProjectile(((float)Math.Cos(actDirection + (float)Math.PI) * projectile.width / 2) + projectile.Center.X, ((float)Math.Sin(actDirection + (float)Math.PI) * projectile.height / 2) + projectile.Center.Y, (float)Math.Cos(actDirection + (float)Math.PI - (float)Math.PI / 4) * shotSpeed, (float)Math.Sin(actDirection + (float)Math.PI - (float)Math.PI / 4) * shotSpeed, mod.ProjectileType("Fighter"), projectile.damage / 6, projectile.knockBack, Main.myPlayer, projectile.whoAmI, 0f); projectile.ai[0]--; } } } if (Math.Abs(actDirection - swimDirection) > Math.PI) { f = -1; } else { f = 1; } swimDirection = new Vector2((float)Math.Cos(swimDirection), (float)Math.Sin(swimDirection)).ToRotation(); if (actDirection <= swimDirection + MathHelper.ToRadians(4) && actDirection >= swimDirection - MathHelper.ToRadians(4)) { actDirection = swimDirection; } else if (actDirection <= swimDirection) { actDirection += MathHelper.ToRadians(2) * f; } else if (actDirection >= swimDirection) { actDirection -= MathHelper.ToRadians(2) * f; } actDirection = new Vector2((float)Math.Cos(actDirection), (float)Math.Sin(actDirection)).ToRotation(); if (foundTarget) { if (maxDistance < 300) { varTime++; if (varTime >= 45) { Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/Ur-Quan/UrQuan-Fusion").WithVolume(.8f)); Projectile.NewProjectile(((float)Math.Cos(actDirection) * projectile.width / 2) + projectile.Center.X, ((float)Math.Sin(actDirection) * projectile.height / 2) + projectile.Center.Y, (float)Math.Cos(actDirection) * shotSpeed, (float)Math.Sin(actDirection) * shotSpeed, mod.ProjectileType("Fusion"), projectile.damage, projectile.knockBack, Main.myPlayer, 0f, 0f); varTime = 0; } projectile.velocity.X = 0; projectile.velocity.Y = 0; } else { projectile.velocity.X = (float)Math.Cos(actDirection) * swimSpeed; projectile.velocity.Y = (float)Math.Sin(actDirection) * swimSpeed; } for (int k = 0; k < 200; k++) { if (Main.projectile[k].type == mod.ProjectileType("Dreadnought") && k != projectile.whoAmI) { if (Collision.CheckAABBvAABBCollision(projectile.position + new Vector2(projectile.width / 4, projectile.height / 4), new Vector2(projectile.width / 2, projectile.height / 2), Main.projectile[k].position + new Vector2(Main.projectile[k].width / 4, Main.projectile[k].height / 4), new Vector2(Main.projectile[k].width / 2, Main.projectile[k].height / 2))) { projectile.velocity += new Vector2((float)Math.Cos((projectile.Center - Main.projectile[k].Center).ToRotation()) * 10, (float)Math.Sin((projectile.Center - Main.projectile[k].Center).ToRotation()) * 10); } } } } else { projectile.velocity.X = (float)Math.Cos(actDirection) * swimSpeed; projectile.velocity.Y = (float)Math.Sin(actDirection) * swimSpeed; } projectile.rotation = actDirection; foundTarget = false; maxDistance = 10000f; close = false; /* * debugTimer++; * if(debugTimer %10==0) * { * CombatText.NewText(player.getRect(), new Color(38, 126, 126), (int)MathHelper.ToDegrees(swimDirection), true, false); * CombatText.NewText(projectile.getRect(), new Color(38, 126, 126), (int)MathHelper.ToDegrees(actDirection), true, false); * } */ }
public override void AI() { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); shotCounter++; if (modPlayer.SpaceFighter) { projectile.timeLeft = 2; } if (QwertyMethods.ClosestNPC(ref target, 1000, projectile.Center, false, player.MinionAttackTargetNPC) && (player.Center - projectile.Center).Length() < 1000) { projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, (target.Center - projectile.Center).ToRotation(), 6); if ((target.Center - projectile.Center).Length() < 300) { if (shotCounter >= 20) { shotCounter = 0; Projectile l = Main.projectile[Projectile.NewProjectile(projectile.Center, QwertyMethods.PolarVector(12f, projectile.rotation), ProjectileID.GreenLaser, projectile.damage, projectile.knockBack, projectile.owner)]; l.magic = false; l.minion = true; //l.scale = .5f; l.penetrate = 1; //l.alpha = 0; if (Main.netMode == 1) { QwertysRandomContent.UpdateProjectileClass(l); } Main.PlaySound(SoundID.Item12, projectile.position); } } else { Thrust(); } } else { projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, (player.Center - projectile.Center).ToRotation(), 6); if ((player.Center - projectile.Center).Length() < 300) { } else { Thrust(); } } for (int k = 0; k < 1000; k++) { if (Main.projectile[k].type == projectile.type && k != projectile.whoAmI) { if (Collision.CheckAABBvAABBCollision(projectile.position + new Vector2(projectile.width / 4, projectile.height / 4), new Vector2(projectile.width / 2, projectile.height / 2), Main.projectile[k].position + new Vector2(Main.projectile[k].width / 4, Main.projectile[k].height / 4), new Vector2(Main.projectile[k].width / 2, Main.projectile[k].height / 2))) { projectile.velocity += new Vector2((float)Math.Cos((projectile.Center - Main.projectile[k].Center).ToRotation()) * .1f, (float)Math.Sin((projectile.Center - Main.projectile[k].Center).ToRotation()) * .1f); } } } if (projectile.velocity.Length() > maxSpeed) { projectile.velocity = projectile.velocity.SafeNormalize(-Vector2.UnitY) * maxSpeed; } }
public override void AI() { if (projectile.alpha > 0) { projectile.alpha -= 255 / 5; } Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (modPlayer.AncientMinion) { projectile.timeLeft = 2; } if (player.MinionAttackTargetNPC != -1) { target = Main.npc[player.MinionAttackTargetNPC]; foundTarget = true; } else { for (int k = 0; k < 200; k++) { possibleTarget = Main.npc[k]; distance = (possibleTarget.Center - player.Center).Length(); if (distance < maxDistance && possibleTarget.active && !possibleTarget.dontTakeDamage && !possibleTarget.friendly && possibleTarget.lifeMax > 5 && !possibleTarget.immortal) { target = Main.npc[k]; foundTarget = true; maxDistance = (target.Center - player.Center).Length(); } } } maxDistance = 1000f; if (runOnce) { //Main.PlaySound(SoundID.Item8); if (Main.netMode != 2) { moveTo.X = projectile.Center.X; moveTo.Y = projectile.Center.Y; projectile.netUpdate = true; } runOnce = false; } if (foundTarget) { timer++; if (timer > waitTime + chargeTime) { for (int k = 0; k < 200; k++) { projectile.localNPCImmunity[k] = 0; } for (int i = 0; i < 100; i++) { Dust.NewDust(projectile.position, projectile.width, projectile.height, mod.DustType("LeechRuneDeath")); } if (Main.netMode != 2) { projectile.ai[1] = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI); projectile.netUpdate = true; } moveTo = new Vector2(target.Center.X + (float)Math.Cos(projectile.ai[1]) * 100, target.Center.Y + (float)Math.Sin(projectile.ai[1]) * 100); if (Main.netMode != 2) { projectile.netUpdate = true; } justTeleported = true; timer = 0; } else if (timer > waitTime) { charging = true; } else { charging = false; } if (charging) { projectile.rotation += MathHelper.ToRadians(3); projectile.velocity = new Vector2((float)Math.Cos(targetAngle) * chargeSpeed, (float)Math.Sin(targetAngle) * chargeSpeed); } else { projectile.Center = new Vector2(moveTo.X, moveTo.Y); projectile.velocity = new Vector2(0, 0); targetAngle = new Vector2(target.Center.X - projectile.Center.X, target.Center.Y - projectile.Center.Y).ToRotation(); //projectile.rotation = targetAngle; } } else { if ((projectile.Center - player.Center).Length() > 300) { if (Main.netMode != 2) { projectile.ai[1] = Main.rand.NextFloat(-(float)Math.PI, (float)Math.PI); projectile.netUpdate = true; } for (int d = 0; d < 300; d++) { Dust.NewDust(projectile.position, projectile.width, projectile.height, mod.DustType("LeechRuneDeath")); } moveTo = new Vector2(player.Center.X + (float)Math.Cos(projectile.ai[1]) * 100, player.Center.Y + (float)Math.Sin(projectile.ai[1]) * 100); justTeleported = true; } projectile.Center = moveTo; targetAngle = new Vector2(player.Center.X - projectile.Center.X, player.Center.Y - projectile.Center.Y).ToRotation(); //projectile.rotation = targetAngle; } if (justTeleported) { projectile.alpha = 255; Main.PlaySound(SoundID.Item8, projectile.position); for (int d = 0; d < 300; d++) { Dust.NewDust(projectile.position, projectile.width, projectile.height, mod.DustType("LeechRuneDeath")); } justTeleported = false; } foundTarget = false; }
public override void AI() { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (modPlayer.ShieldMinion) { projectile.timeLeft = 2; } for (int p = 0; p < 1000; p++) { if (Main.projectile[p].type == mod.ProjectileType("ShieldMinion") && Main.projectile[p].active && Main.projectile[p].owner == projectile.owner && Main.projectile[p].ai[1] == projectile.ai[1]) { ShieldCount++; } } for (int p = 0; p < 1000; p++) { if (Main.projectile[p].type == mod.ProjectileType("ShieldMinion") && Main.projectile[p].active && Main.projectile[p].owner == projectile.owner && Main.projectile[p].ai[1] == projectile.ai[1]) { if (p == projectile.whoAmI) { break; } else { identity++; } } } projectile.friendly = (projectile.ai[1] == charging); if (projectile.ai[1] != charging) { if (player.velocity.Length() > .1f) { LatestValidVelocity = player.velocity; } float myOffset = (((float)Math.PI / 2) * (float)(identity + 1)) / (ShieldCount + 1) - (float)Math.PI / 4; flyTo = player.Center + QwertyMethods.PolarVector(projectile.ai[1] == guarding ? 120 : -50, (QwertysRandomContent.LocalCursor[projectile.owner] - player.Center).ToRotation() + myOffset); if (flyTo != null && flyTo != Vector2.Zero) { projectile.velocity = (flyTo - projectile.Center) * .1f; } } switch ((int)projectile.ai[1]) { case guarding: projectile.frame = 0; foreach (Projectile OtherProjectile in Main.projectile) { if (OtherProjectile.hostile && OtherProjectile.active && OtherProjectile.velocity != Vector2.Zero && OtherProjectile.damage > 0 && Collision.CheckAABBvAABBCollision(projectile.position, projectile.Size, OtherProjectile.position, OtherProjectile.Size)) { if (OtherProjectile.damage * 2 * (Main.expertMode ? 2 : 1) < projectile.damage) { OtherProjectile.Kill(); } projectile.ai[1] = cooling; chargeTimer = -300; break; } } if (QwertyMethods.ClosestNPC(ref target, 1000, player.Center, true, player.MinionAttackTargetNPC)) { eyeOffset = (target.Center - projectile.Center).SafeNormalize(-Vector2.UnitY); eyeOffset.X *= horizontalEyeMultiploer; eyeOffset.Y *= verticalEyeMultiplier; if ((target.Center - projectile.Center).Length() < 120) { projectile.velocity = QwertyMethods.PolarVector(24, (target.Center - projectile.Center).ToRotation()); projectile.ai[1] = charging; chargeTimer = 10; break; } } else { eyeOffset = Vector2.Zero; } break; case charging: projectile.frame = 0; chargeTimer--; if (chargeTimer <= 0) { projectile.ai[1] = cooling; chargeTimer = -300; } break; case cooling: projectile.frame = 1; chargeTimer++; if (chargeTimer >= 0) { projectile.ai[1] = guarding; } break; } identity = 0; ShieldCount = 0; }
public override void AI() { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod); drifterCount = player.ownedProjectileCounts[mod.ProjectileType("OrichalcumDrifter")]; if (modPlayer.OrichalcumDrifter) { projectile.timeLeft = 2; } for (int p = 0; p < 1000; p++) { if (Main.projectile[p].type == mod.ProjectileType("OrichalcumDrifter")) { if (p == projectile.whoAmI) { break; } else { identity++; } } } if ((player.Center - projectile.Center).Length() > 750 || flyBack) { flyTo = player.Center; if (Collision.CheckAABBvAABBCollision(player.position, player.Size, projectile.position, projectile.Size)) { flyBack = false; speed = 3; turnSpeed = 2; } else { flyBack = true; speed = 12; turnSpeed = 20; } } else { if (QwertyMethods.ClosestNPC(ref target, maxDistance, projectile.Center, false, player.MinionAttackTargetNPC)) { flyTo = target.Center; } else { if (drifterCount != 0) { projectile.ai[0] = 40f; flyTo = player.Center + QwertyMethods.PolarVector(projectile.ai[0], (2f * (float)Math.PI * identity) / drifterCount); } else { flyTo = player.Center; } } speed = 3; turnSpeed = 2; } flyDirection = QwertyMethods.SlowRotation(flyDirection, (flyTo - projectile.Center).ToRotation(), turnSpeed); projectile.velocity = QwertyMethods.PolarVector(speed, flyDirection); driftTimer += (float)Math.PI / 120; driftVariance = (float)Math.Cos(driftTimer); projectile.velocity += QwertyMethods.PolarVector(driftVariance, flyDirection + (float)Math.PI / 2); projectile.rotation = projectile.velocity.ToRotation(); // Main.NewText((player.Center - projectile.Center).Length()); }
public override void AI() { Player player = Main.player[projectile.owner]; QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); if (modPlayer.miniTank) { projectile.timeLeft = 2; } tankCount = player.ownedProjectileCounts[mod.ProjectileType("MiniTank")]; identity = 0; for (int p = 0; p < 1000; p++) { if (Main.projectile[p].type == mod.ProjectileType("MiniTank") && Main.projectile[p].active) { if (p == projectile.whoAmI) { break; } else { identity++; } } } if (returnToPlayer) { projectile.velocity = (player.Top - projectile.Center) * .1f; if ((player.Top - projectile.Center).Length() < 200) { returnToPlayer = false; } projectile.tileCollide = false; } else { if ((player.Center - projectile.Center).Length() > 1500) { returnToPlayer = true; } projectile.tileCollide = true; if (projectile.velocity.Y < terminalVelocity) { projectile.velocity.Y += garvityAcceleration; } gotoX = player.Center.X + -player.direction * (player.width / 2 + spacing + (identity * spacing)); projectile.velocity.X = (gotoX - projectile.Center.X) * .1f; if (Math.Abs(projectile.velocity.X) > maxSpeedX) { projectile.velocity.X = projectile.velocity.X > 0 ? maxSpeedX : -maxSpeedX; } projectile.spriteDirection = projectile.velocity.X > 0 ? 1 : -1; if (QwertyMethods.ClosestNPC(ref target, 1000, projectile.Top, false, player.MinionAttackTargetNPC)) { if (target.Center.Y > projectile.Top.Y) { if (target.Center.X > projectile.Top.X) { aim = 0; } else { aim = (float)Math.PI; } } else { aim = (target.Center - projectile.Top).ToRotation(); } if (shootCounter >= 60) { shootCounter = 0; Projectile.NewProjectile(projectile.Top + QwertyMethods.PolarVector(30, gunRotation), QwertyMethods.PolarVector(10, gunRotation), mod.ProjectileType("MiniTankCannonBallFreindly"), projectile.damage, projectile.knockBack, player.whoAmI); } } else { aim = projectile.spriteDirection == 1 ? 0 : (float)Math.PI; } shootCounter++; gunRotation = QwertyMethods.SlowRotation(gunRotation, aim, 3); if (gunRotation > 0) { if (gunRotation > (float)Math.PI / 2) { gunRotation = (float)Math.PI; } else { gunRotation = 0; } } //projectile.velocity = Collision.TileCollision(projectile.position, projectile.velocity, projectile.width, projectile.height, player.Center.Y > projectile.Bottom.Y, player.Center.Y > projectile.Bottom.Y); } }
public override void AI() { Player player = Main.player[projectile.owner]; //Main.NewText(moveTo); QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod); if (modPlayer.PlatinumDagger) { projectile.timeLeft = 2; } distanceFromPlayer = (player.Center - projectile.Center).Length(); timer++; switch (AttackMode) { case idle: projectile.tileCollide = true; attackTimer++; if (timer > 60) { if (Main.netMode != 2 && projectile.owner == Main.myPlayer) { projectile.ai[0] = Main.rand.Next(0, 80); projectile.ai[1] = Main.rand.Next(-80, 80); if (Main.netMode == 1) { QwertysRandomContent.ProjectileAIUpdate(projectile); } projectile.netUpdate = true; } timer = 0; } moveTo = new Vector2(player.Center.X + projectile.ai[1], player.Center.Y - projectile.ai[0]); if (attackTimer > attackCooldown) { if (QwertyMethods.ClosestNPC(ref target, targetMaxDistanceFromPlayer, player.Center, false, player.MinionAttackTargetNPC)) { chargeTime = (int)((targetMaxDistanceFromPlayer + 100) / chargeSpeed); for (int k = 0; k < 200; k++) { projectile.localNPCImmunity[k] = 0; } projectile.velocity = (target.Center - projectile.Center).SafeNormalize(-Vector2.UnitY) * chargeSpeed; attackTimer = 0; AttackMode = charging; } } if (distanceFromPlayer > maxDistanceFromPlayer) { AttackMode = returning; } break; case charging: projectile.tileCollide = true; attackTimer++; if (attackTimer > chargeTime) { AttackMode = returning; attackTimer = 0; //projectile.velocity = Vector2.Zero; } break; case returning: projectile.tileCollide = false; moveTo = player.Center; if (Collision.CheckAABBvAABBCollision(player.position, player.Size, projectile.position, projectile.Size)) { AttackMode = idle; } break; } if (AttackMode == charging) { projectile.friendly = true; projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2; } else { projectile.friendly = false; projectile.velocity += (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * acceleration; if (projectile.velocity.Length() > maxSpeed) { projectile.velocity = (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * maxSpeed; } projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, projectile.velocity.ToRotation() + (float)Math.PI / 2, 3); } //projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2; }
public override void AI() { Player player = Main.player[projectile.owner]; //Main.NewText(moveTo); QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(); distanceFromPlayer = (player.Center - projectile.Center).Length(); timer++; switch (AttackMode) { case idle: projectile.timeLeft = 120; attackTimer++; if (timer > 60) { if (Main.netMode != 2 && projectile.owner == Main.myPlayer) { projectile.ai[0] = Main.rand.Next(0, 80); projectile.ai[1] = Main.rand.Next(-80, 80); if (Main.netMode == 1) { QwertysRandomContent.ProjectileAIUpdate(projectile); } projectile.netUpdate = true; } timer = 0; } moveTo = new Vector2(player.Center.X + projectile.ai[1], player.Center.Y - projectile.ai[0]); if (Main.mouseRight && Main.myPlayer == projectile.owner) { projectile.velocity = (Main.MouseWorld - projectile.Center).SafeNormalize(-Vector2.UnitY) * chargeSpeed; attackTimer = 0; AttackMode = charging; } break; case charging: attackTimer++; break; } if (AttackMode == charging) { projectile.friendly = true; projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2; } else { projectile.friendly = false; projectile.velocity += (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * acceleration; if (projectile.velocity.Length() > maxSpeed) { projectile.velocity = (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * maxSpeed; } projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, projectile.velocity.ToRotation() + (float)Math.PI / 2, 3); } targetMaxDistanceFromPlayer = 400; foundTarget = false; //projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2; }