// Summary: // Get the array of Active NPCs public NPC[] getActiveNPCs() { NPC[] npcs = null; int npcCount = 0; for (int i = 0; i < Main.npc.Length-1; i++) { if (Main.npc[i].active) { npcCount++; } } if (npcCount > 0) { npcs = new NPC[npcCount]; npcCount = 0; for (int i = 0; i < Main.npc.Length-1; i++) { if (Main.npc[i].active) { npcs[npcCount] = Main.npc[i]; npcCount++; } } } return npcs; }
// 12 private void AISkeletronHand(NPC npc, bool flag) { npc.spriteDirection = -(int)npc.ai[0]; if (!Main.npcs[(int)npc.ai[1]].Active || Main.npcs[(int)npc.ai[1]].aiStyle != 11) { npc.ai[2] += 10f; if (npc.ai[2] > 50f) { npc.life = -1; npc.HitEffect(0, 10.0); npc.Active = false; } } if (npc.ai[2] == 0f || npc.ai[2] == 3f) { if (Main.npcs[(int)npc.ai[1]].ai[1] == 3f && npc.timeLeft > 10) { npc.timeLeft = 10; } if (Main.npcs[(int)npc.ai[1]].ai[1] != 0f) { if (npc.Position.Y > Main.npcs[(int)npc.ai[1]].Position.Y - 100f) { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.96f; } npc.Velocity.Y = npc.Velocity.Y - 0.07f; if (npc.Velocity.Y > 6f) { npc.Velocity.Y = 6f; } } else { if (npc.Position.Y < Main.npcs[(int)npc.ai[1]].Position.Y - 100f) { if (npc.Velocity.Y < 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.96f; } npc.Velocity.Y = npc.Velocity.Y + 0.07f; if (npc.Velocity.Y < -6f) { npc.Velocity.Y = -6f; } } } if (npc.Position.X + (float)(npc.Width / 2) > Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) - 120f * npc.ai[0]) { if (npc.Velocity.X > 0f) { npc.Velocity.X = npc.Velocity.X * 0.96f; } npc.Velocity.X = npc.Velocity.X - 0.1f; if (npc.Velocity.X > 8f) { npc.Velocity.X = 8f; } } if (npc.Position.X + (float)(npc.Width / 2) < Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) - 120f * npc.ai[0]) { if (npc.Velocity.X < 0f) { npc.Velocity.X = npc.Velocity.X * 0.96f; } npc.Velocity.X = npc.Velocity.X + 0.1f; if (npc.Velocity.X < -8f) { npc.Velocity.X = -8f; } } } else { npc.ai[3] += 1f; if (npc.ai[3] >= 300f) { npc.ai[2] += 1f; npc.ai[3] = 0f; npc.netUpdate = true; } if (npc.Position.Y > Main.npcs[(int)npc.ai[1]].Position.Y + 230f) { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.96f; } npc.Velocity.Y = npc.Velocity.Y - 0.04f; if (npc.Velocity.Y > 3f) { npc.Velocity.Y = 3f; } } else { if (npc.Position.Y < Main.npcs[(int)npc.ai[1]].Position.Y + 230f) { if (npc.Velocity.Y < 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.96f; } npc.Velocity.Y = npc.Velocity.Y + 0.04f; if (npc.Velocity.Y < -3f) { npc.Velocity.Y = -3f; } } } if (npc.Position.X + (float)(npc.Width / 2) > Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) - 200f * npc.ai[0]) { if (npc.Velocity.X > 0f) { npc.Velocity.X = npc.Velocity.X * 0.96f; } npc.Velocity.X = npc.Velocity.X - 0.07f; if (npc.Velocity.X > 8f) { npc.Velocity.X = 8f; } } if (npc.Position.X + (float)(npc.Width / 2) < Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) - 200f * npc.ai[0]) { if (npc.Velocity.X < 0f) { npc.Velocity.X = npc.Velocity.X * 0.96f; } npc.Velocity.X = npc.Velocity.X + 0.07f; if (npc.Velocity.X < -8f) { npc.Velocity.X = -8f; } } } Vector2 vector15 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num125 = Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) - 200f * npc.ai[0] - vector15.X; float num126 = Main.npcs[(int)npc.ai[1]].Position.Y + 230f - vector15.Y; Math.Sqrt((double)(num125 * num125 + num126 * num126)); npc.rotation = (float)Math.Atan2((double)num126, (double)num125) + 1.57f; return; } if (npc.ai[2] == 1f) { Vector2 vector16 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num127 = Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) - 200f * npc.ai[0] - vector16.X; float num128 = Main.npcs[(int)npc.ai[1]].Position.Y + 230f - vector16.Y; float num129 = (float)Math.Sqrt((double)(num127 * num127 + num128 * num128)); npc.rotation = (float)Math.Atan2((double)num128, (double)num127) + 1.57f; npc.Velocity.X = npc.Velocity.X * 0.95f; npc.Velocity.Y = npc.Velocity.Y - 0.1f; if (npc.Velocity.Y < -8f) { npc.Velocity.Y = -8f; } if (npc.Position.Y < Main.npcs[(int)npc.ai[1]].Position.Y - 200f) { npc.TargetClosest(true); npc.ai[2] = 2f; vector16 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); num127 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector16.X; num128 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector16.Y; num129 = (float)Math.Sqrt((double)(num127 * num127 + num128 * num128)); num129 = 18f / num129; npc.Velocity.X = num127 * num129; npc.Velocity.Y = num128 * num129; npc.netUpdate = true; return; } } else { if (npc.ai[2] == 2f) { if (npc.Position.Y > Main.players[npc.target].Position.Y || npc.Velocity.Y < 0f) { npc.ai[2] = 3f; return; } } else { if (npc.ai[2] == 4f) { Vector2 vector17 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num130 = Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) - 200f * npc.ai[0] - vector17.X; float num131 = Main.npcs[(int)npc.ai[1]].Position.Y + 230f - vector17.Y; float num132 = (float)Math.Sqrt((double)(num130 * num130 + num131 * num131)); npc.rotation = (float)Math.Atan2((double)num131, (double)num130) + 1.57f; npc.Velocity.Y = npc.Velocity.Y * 0.95f; npc.Velocity.X = npc.Velocity.X + 0.1f * -npc.ai[0]; if (npc.Velocity.X < -8f) { npc.Velocity.X = -8f; } if (npc.Velocity.X > 8f) { npc.Velocity.X = 8f; } if (npc.Position.X + (float)(npc.Width / 2) < Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) - 500f || npc.Position.X + (float)(npc.Width / 2) > Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) + 500f) { npc.TargetClosest(true); npc.ai[2] = 5f; vector17 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); num130 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector17.X; num131 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector17.Y; num132 = (float)Math.Sqrt((double)(num130 * num130 + num131 * num131)); num132 = 17f / num132; npc.Velocity.X = num130 * num132; npc.Velocity.Y = num131 * num132; npc.netUpdate = true; return; } } else { if (npc.ai[2] == 5f && ((npc.Velocity.X > 0f && npc.Position.X + (float)(npc.Width / 2) > Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2)) || (npc.Velocity.X < 0f && npc.Position.X + (float)(npc.Width / 2) < Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2)))) { npc.ai[2] = 0f; return; } } } } }
// 16 private void AIFish(NPC npc, bool flag) { if (npc.direction == 0) { npc.TargetClosest(true); } if (npc.wet) { if (npc.collideX) { npc.Velocity.X = npc.Velocity.X * -1f; npc.direction *= -1; } if (npc.collideY) { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = Math.Abs(npc.Velocity.Y) * -1f; npc.directionY = -1; npc.ai[0] = -1f; } else { if (npc.Velocity.Y < 0f) { npc.Velocity.Y = Math.Abs(npc.Velocity.Y); npc.directionY = 1; npc.ai[0] = 1f; } } } bool flag16 = false; if (!npc.friendly) { npc.TargetClosest(false); if (Main.players[npc.target].wet && !Main.players[npc.target].dead) { flag16 = true; } } if (flag16) { npc.TargetClosest(true); if (npc.Type == 65) { npc.Velocity.X = npc.Velocity.X + (float)npc.direction * 0.15f; npc.Velocity.Y = npc.Velocity.Y + (float)npc.directionY * 0.15f; if (npc.Velocity.X > 5f) { npc.Velocity.X = 5f; } if (npc.Velocity.X < -5f) { npc.Velocity.X = -5f; } if (npc.Velocity.Y > 3f) { npc.Velocity.Y = 3f; } if (npc.Velocity.Y < -3f) { npc.Velocity.Y = -3f; } } else { npc.Velocity.X = npc.Velocity.X + (float)npc.direction * 0.1f; npc.Velocity.Y = npc.Velocity.Y + (float)npc.directionY * 0.1f; if (npc.Velocity.X > 3f) { npc.Velocity.X = 3f; } if (npc.Velocity.X < -3f) { npc.Velocity.X = -3f; } if (npc.Velocity.Y > 2f) { npc.Velocity.Y = 2f; } if (npc.Velocity.Y < -2f) { npc.Velocity.Y = -2f; } } } else { npc.Velocity.X = npc.Velocity.X + (float)npc.direction * 0.1f; if (npc.Velocity.X < -1f || npc.Velocity.X > 1f) { npc.Velocity.X = npc.Velocity.X * 0.95f; } if (npc.ai[0] == -1f) { npc.Velocity.Y = npc.Velocity.Y - 0.01f; if ((double)npc.Velocity.Y < -0.3) { npc.ai[0] = 1f; } } else { npc.Velocity.Y = npc.Velocity.Y + 0.01f; if ((double)npc.Velocity.Y > 0.3) { npc.ai[0] = -1f; } } int num163 = (int)(npc.Position.X + (float)(npc.Width / 2)) / 16; int num164 = (int)(npc.Position.Y + (float)(npc.Height / 2)) / 16; if (Main.tile.At(num163, num164 - 1).Exists && Main.tile.At(num163, num164 - 1).Liquid > 128) { if (Main.tile.At(num163, num164 + 1).Active) { npc.ai[0] = -1f; } else { if (Main.tile.At(num163, num164 + 2).Active) { npc.ai[0] = -1f; } } } if ((double)npc.Velocity.Y > 0.4 || (double)npc.Velocity.Y < -0.4) { npc.Velocity.Y = npc.Velocity.Y * 0.95f; } } } else { if (npc.Velocity.Y == 0f) { if (npc.Type == 65) { npc.Velocity.X = npc.Velocity.X * 0.94f; if ((double)npc.Velocity.X > -0.2 && (double)npc.Velocity.X < 0.2) { npc.Velocity.X = 0f; } } else { npc.Velocity.Y = (float)Main.rand.Next(-50, -20) * 0.1f; npc.Velocity.X = (float)Main.rand.Next(-20, 20) * 0.1f; npc.netUpdate = true; } } npc.Velocity.Y = npc.Velocity.Y + 0.3f; if (npc.Velocity.Y > 10f) { npc.Velocity.Y = 10f; } npc.ai[0] = 1f; } npc.rotation = npc.Velocity.Y * (float)npc.direction * 0.1f; if ((double)npc.rotation < -0.2) { npc.rotation = -0.2f; } if ((double)npc.rotation > 0.2) { npc.rotation = 0.2f; return; } }
// 4 private void AIEoC(NPC npc, bool flag) { if (npc.target < 0 || npc.target == 255 || Main.players[npc.target].dead || !Main.players[npc.target].Active) { npc.TargetClosest(true); } bool dead = Main.players[npc.target].dead; float num6 = npc.Position.X + (float)(npc.Width / 2) - Main.players[npc.target].Position.X - (float)(Main.players[npc.target].Width / 2); float num7 = npc.Position.Y + (float)npc.Height - 59f - Main.players[npc.target].Position.Y - (float)(Main.players[npc.target].Height / 2); float num8 = (float)Math.Atan2((double)num7, (double)num6) + 1.57f; if (num8 < 0f) { num8 += 6.283f; } else { if ((double)num8 > 6.283) { num8 -= 6.283f; } } float num9 = 0f; if (npc.ai[0] == 0f && npc.ai[1] == 0f) { num9 = 0.02f; } if (npc.ai[0] == 0f && npc.ai[1] == 2f && npc.ai[2] > 40f) { num9 = 0.05f; } if (npc.ai[0] == 3f && npc.ai[1] == 0f) { num9 = 0.05f; } if (npc.ai[0] == 3f && npc.ai[1] == 2f && npc.ai[2] > 40f) { num9 = 0.08f; } if (npc.rotation < num8) { if ((double)(num8 - npc.rotation) > 3.1415) { npc.rotation -= num9; } else { npc.rotation += num9; } } else { if (npc.rotation > num8) { if ((double)(npc.rotation - num8) > 3.1415) { npc.rotation += num9; } else { npc.rotation -= num9; } } } if (npc.rotation > num8 - num9 && npc.rotation < num8 + num9) { npc.rotation = num8; } if (npc.rotation < 0f) { npc.rotation += 6.283f; } else { if ((double)npc.rotation > 6.283) { npc.rotation -= 6.283f; } } if (npc.rotation > num8 - num9 && npc.rotation < num8 + num9) { npc.rotation = num8; } if (Main.dayTime || dead) { npc.Velocity.Y = npc.Velocity.Y - 0.04f; if (npc.timeLeft > 10) { npc.timeLeft = 10; return; } } else { if (npc.ai[0] == 0f) { if (npc.ai[1] == 0f) { float num11 = 5f; float num12 = 0.04f; Vector2 vector = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num13 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector.X; float num14 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - 200f - vector.Y; float num15 = (float)Math.Sqrt((double)(num13 * num13 + num14 * num14)); float num16 = num15; num15 = num11 / num15; num13 *= num15; num14 *= num15; if (npc.Velocity.X < num13) { npc.Velocity.X = npc.Velocity.X + num12; if (npc.Velocity.X < 0f && num13 > 0f) { npc.Velocity.X = npc.Velocity.X + num12; } } else { if (npc.Velocity.X > num13) { npc.Velocity.X = npc.Velocity.X - num12; if (npc.Velocity.X > 0f && num13 < 0f) { npc.Velocity.X = npc.Velocity.X - num12; } } } if (npc.Velocity.Y < num14) { npc.Velocity.Y = npc.Velocity.Y + num12; if (npc.Velocity.Y < 0f && num14 > 0f) { npc.Velocity.Y = npc.Velocity.Y + num12; } } else { if (npc.Velocity.Y > num14) { npc.Velocity.Y = npc.Velocity.Y - num12; if (npc.Velocity.Y > 0f && num14 < 0f) { npc.Velocity.Y = npc.Velocity.Y - num12; } } } npc.ai[2] += 1f; if (npc.ai[2] >= 600f) { npc.ai[1] = 1f; npc.ai[2] = 0f; npc.ai[3] = 0f; npc.target = 255; npc.netUpdate = true; } else { if (npc.Position.Y + (float)npc.Height < Main.players[npc.target].Position.Y && num16 < 500f) { if (!Main.players[npc.target].dead) { npc.ai[3] += 1f; } if (npc.ai[3] >= 110f) { npc.ai[3] = 0f; npc.rotation = num8; float num17 = 5f; float num18 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector.X; float num19 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector.Y; float num20 = (float)Math.Sqrt((double)(num18 * num18 + num19 * num19)); num20 = num17 / num20; Vector2 vector2 = vector; Vector2 vector3; vector3.X = num18 * num20; vector3.Y = num19 * num20; vector2.X += vector3.X * 10f; vector2.Y += vector3.Y * 10f; int num21 = NPC.NewNPC((int)vector2.X, (int)vector2.Y, 5, 0); Main.npcs[num21].Velocity.X = vector3.X; Main.npcs[num21].Velocity.Y = vector3.Y; if (num21 < MAX_NPCS) { NetMessage.SendData(23, -1, -1, "", num21, 0f, 0f, 0f, 0); } } } } } else { if (npc.ai[1] == 1f) { npc.rotation = num8; float num22 = 6f; Vector2 vector4 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num23 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector4.X; float num24 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector4.Y; float num25 = (float)Math.Sqrt((double)(num23 * num23 + num24 * num24)); num25 = num22 / num25; npc.Velocity.X = num23 * num25; npc.Velocity.Y = num24 * num25; npc.ai[1] = 2f; } else { if (npc.ai[1] == 2f) { npc.ai[2] += 1f; if (npc.ai[2] >= 40f) { npc.Velocity.X = npc.Velocity.X * 0.98f; npc.Velocity.Y = npc.Velocity.Y * 0.98f; if ((double)npc.Velocity.X > -0.1 && (double)npc.Velocity.X < 0.1) { npc.Velocity.X = 0f; } if ((double)npc.Velocity.Y > -0.1 && (double)npc.Velocity.Y < 0.1) { npc.Velocity.Y = 0f; } } else { npc.rotation = (float)Math.Atan2((double)npc.Velocity.Y, (double)npc.Velocity.X) - 1.57f; } if (npc.ai[2] >= 150f) { npc.ai[3] += 1f; npc.ai[2] = 0f; npc.target = 255; npc.rotation = num8; if (npc.ai[3] >= 3f) { npc.ai[1] = 0f; npc.ai[3] = 0f; } else { npc.ai[1] = 1f; } } } } } if ((double)npc.life < (double)npc.lifeMax * 0.5) { npc.ai[0] = 1f; npc.ai[1] = 0f; npc.ai[2] = 0f; npc.ai[3] = 0f; npc.netUpdate = true; return; } } else { if (npc.ai[0] == 1f || npc.ai[0] == 2f) { if (npc.ai[0] == 1f) { npc.ai[2] += 0.005f; if ((double)npc.ai[2] > 0.5) { npc.ai[2] = 0.5f; } } else { npc.ai[2] -= 0.005f; if (npc.ai[2] < 0f) { npc.ai[2] = 0f; } } npc.rotation += npc.ai[2]; npc.ai[1] += 1f; if (npc.ai[1] == 100f) { npc.ai[0] += 1f; npc.ai[1] = 0f; if (npc.ai[0] == 3f) { npc.ai[2] = 0f; } } npc.Velocity.X = npc.Velocity.X * 0.98f; npc.Velocity.Y = npc.Velocity.Y * 0.98f; if ((double)npc.Velocity.X > -0.1 && (double)npc.Velocity.X < 0.1) { npc.Velocity.X = 0f; } if ((double)npc.Velocity.Y > -0.1 && (double)npc.Velocity.Y < 0.1) { npc.Velocity.Y = 0f; return; } } else { npc.damage = 23; npc.defense = 0; if (npc.ai[1] == 0f) { float num26 = 6f; float num27 = 0.07f; Vector2 vector5 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num28 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector5.X; float num29 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - 120f - vector5.Y; float num30 = (float)Math.Sqrt((double)(num28 * num28 + num29 * num29)); num30 = num26 / num30; num28 *= num30; num29 *= num30; if (npc.Velocity.X < num28) { npc.Velocity.X = npc.Velocity.X + num27; if (npc.Velocity.X < 0f && num28 > 0f) { npc.Velocity.X = npc.Velocity.X + num27; } } else { if (npc.Velocity.X > num28) { npc.Velocity.X = npc.Velocity.X - num27; if (npc.Velocity.X > 0f && num28 < 0f) { npc.Velocity.X = npc.Velocity.X - num27; } } } if (npc.Velocity.Y < num29) { npc.Velocity.Y = npc.Velocity.Y + num27; if (npc.Velocity.Y < 0f && num29 > 0f) { npc.Velocity.Y = npc.Velocity.Y + num27; } } else { if (npc.Velocity.Y > num29) { npc.Velocity.Y = npc.Velocity.Y - num27; if (npc.Velocity.Y > 0f && num29 < 0f) { npc.Velocity.Y = npc.Velocity.Y - num27; } } } npc.ai[2] += 1f; if (npc.ai[2] >= 200f) { npc.ai[1] = 1f; npc.ai[2] = 0f; npc.ai[3] = 0f; npc.target = 255; npc.netUpdate = true; return; } } else { if (npc.ai[1] == 1f) { npc.rotation = num8; float num31 = 6.8f; Vector2 vector6 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num32 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector6.X; float num33 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector6.Y; float num34 = (float)Math.Sqrt((double)(num32 * num32 + num33 * num33)); num34 = num31 / num34; npc.Velocity.X = num32 * num34; npc.Velocity.Y = num33 * num34; npc.ai[1] = 2f; return; } if (npc.ai[1] == 2f) { npc.ai[2] += 1f; if (npc.ai[2] >= 40f) { npc.Velocity.X = npc.Velocity.X * 0.97f; npc.Velocity.Y = npc.Velocity.Y * 0.97f; if ((double)npc.Velocity.X > -0.1 && (double)npc.Velocity.X < 0.1) { npc.Velocity.X = 0f; } if ((double)npc.Velocity.Y > -0.1 && (double)npc.Velocity.Y < 0.1) { npc.Velocity.Y = 0f; } } else { npc.rotation = (float)Math.Atan2((double)npc.Velocity.Y, (double)npc.Velocity.X) - 1.57f; } if (npc.ai[2] >= 130f) { npc.ai[3] += 1f; npc.ai[2] = 0f; npc.target = 255; npc.rotation = num8; if (npc.ai[3] >= 3f) { npc.ai[1] = 0f; npc.ai[3] = 0f; return; } npc.ai[1] = 1f; return; } } } } } } }
// 10 private void AICursedSkull(NPC npc, bool flag) { float num110 = 1f; float num111 = 0.011f; npc.TargetClosest(true); Vector2 vector12 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num112 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector12.X; float num113 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector12.Y; float num114 = (float)Math.Sqrt((double)(num112 * num112 + num113 * num113)); float num115 = num114; npc.ai[1] += 1f; if (npc.ai[1] > 600f) { num111 *= 8f; num110 = 4f; if (npc.ai[1] > 650f) { npc.ai[1] = 0f; } } else { if (num115 < 250f) { npc.ai[0] += 0.9f; if (npc.ai[0] > 0f) { npc.Velocity.Y = npc.Velocity.Y + 0.019f; } else { npc.Velocity.Y = npc.Velocity.Y - 0.019f; } if (npc.ai[0] < -100f || npc.ai[0] > 100f) { npc.Velocity.X = npc.Velocity.X + 0.019f; } else { npc.Velocity.X = npc.Velocity.X - 0.019f; } if (npc.ai[0] > 200f) { npc.ai[0] = -200f; } } } if (num115 > 350f) { num110 = 5f; num111 = 0.3f; } else { if (num115 > 300f) { num110 = 3f; num111 = 0.2f; } else { if (num115 > 250f) { num110 = 1.5f; num111 = 0.1f; } } } num114 = num110 / num114; num112 *= num114; num113 *= num114; if (Main.players[npc.target].dead) { num112 = (float)npc.direction * num110 / 2f; num113 = -num110 / 2f; } if (npc.Velocity.X < num112) { npc.Velocity.X = npc.Velocity.X + num111; } else { if (npc.Velocity.X > num112) { npc.Velocity.X = npc.Velocity.X - num111; } } if (npc.Velocity.Y < num113) { npc.Velocity.Y = npc.Velocity.Y + num111; } else { if (npc.Velocity.Y > num113) { npc.Velocity.Y = npc.Velocity.Y - num111; } } if (num112 > 0f) { npc.spriteDirection = -1; npc.rotation = (float)Math.Atan2((double)num113, (double)num112); } if (num112 < 0f) { npc.spriteDirection = 1; npc.rotation = (float)Math.Atan2((double)num113, (double)num112) + 3.14f; return; } }
// 24 private void AIBird(NPC npc, bool flag) { npc.noGravity = true; if (npc.ai[0] == 0f) { npc.noGravity = false; npc.TargetClosest(true); if (npc.Velocity.X != 0f || npc.Velocity.Y < 0f || (double)npc.Velocity.Y > 0.3) { npc.ai[0] = 1f; npc.netUpdate = true; npc.direction = -npc.direction; } else { Rectangle rectangle7 = new Rectangle((int)Main.players[npc.target].Position.X, (int)Main.players[npc.target].Position.Y, Main.players[npc.target].Width, Main.players[npc.target].Height); Rectangle rectangle8 = new Rectangle((int)npc.Position.X - 100, (int)npc.Position.Y - 100, npc.Width + 200, npc.Height + 200); if (rectangle8.Intersects(rectangle7) || npc.life < npc.lifeMax) { npc.ai[0] = 1f; npc.Velocity.Y = npc.Velocity.Y - 6f; npc.netUpdate = true; npc.direction = -npc.direction; } } } else { if (!Main.players[npc.target].dead) { if (npc.collideX) { npc.direction *= -1; npc.Velocity.X = npc.oldVelocity.X * -0.5f; if (npc.direction == -1 && npc.Velocity.X > 0f && npc.Velocity.X < 2f) npc.Velocity.X = 2f; if (npc.direction == 1 && npc.Velocity.X < 0f && npc.Velocity.X > -2f) npc.Velocity.X = -2f; } if (npc.collideY) { npc.Velocity.Y = npc.oldVelocity.Y * -0.5f; if (npc.Velocity.Y > 0f && npc.Velocity.Y < 1f) npc.Velocity.Y = 1f; if (npc.Velocity.Y < 0f && npc.Velocity.Y > -1f) npc.Velocity.Y = -1f; } if (npc.direction == -1 && npc.Velocity.X > -3f) { npc.Velocity.X = npc.Velocity.X - 0.1f; if (npc.Velocity.X > 3f) npc.Velocity.X = npc.Velocity.X - 0.1f; else if (npc.Velocity.X > 0f) npc.Velocity.X = npc.Velocity.X - 0.05f; if (npc.Velocity.X < -3f) npc.Velocity.X = -3f; } else { if (npc.direction == 1 && npc.Velocity.X < 3f) { npc.Velocity.X = npc.Velocity.X + 0.1f; if (npc.Velocity.X < -3f) npc.Velocity.X = npc.Velocity.X + 0.1f; else if (npc.Velocity.X < 0f) npc.Velocity.X = npc.Velocity.X + 0.05f; if (npc.Velocity.X > 3f) npc.Velocity.X = 3f; } } int num276 = (int)((npc.Position.X + (float)(npc.Width / 2)) / 16f) + npc.direction; int num277 = (int)((npc.Position.Y + (float)npc.Height) / 16f); bool flag30 = true; int num278 = 15; bool flag31 = false; for (int num279 = num277; num279 < num277 + num278; num279++) { if ((Main.tile.At(num276, num279).Active && Main.tileSolid[(int)Main.tile.At(num276, num279).Type]) || Main.tile.At(num276, num279).Liquid > 0) { if (num279 < num277 + 5)flag31 = true; flag30 = false; break; } } if (flag30) npc.Velocity.Y = npc.Velocity.Y + 0.1f; else npc.Velocity.Y = npc.Velocity.Y - 0.1f; if (flag31) npc.Velocity.Y = npc.Velocity.Y - 0.2f; if (npc.Velocity.Y > 3f) npc.Velocity.Y = 3f; if (npc.Velocity.Y < -4f) npc.Velocity.Y = -4f; } } if (npc.wet) { if (npc.Velocity.Y > 0f) npc.Velocity.Y = npc.Velocity.Y * 0.95f; npc.Velocity.Y = npc.Velocity.Y - 0.5f; if (npc.Velocity.Y < -4f) npc.Velocity.Y = -4f; npc.TargetClosest(true); return; } }
static bool InvokeNpcCreationHook(int x, int y, string type, out NPC npc) { npc = null; if (!WorldModify.gen) { var ctx = new HookContext { }; var args = new HookArgs.NpcCreation { X = x, Y = y, Name = type, }; HookPoints.NpcCreation.Invoke (ref ctx, ref args); if (ctx.Result == HookResult.IGNORE) return false; npc = args.CreatedNpc; } return true; }
// 8 private void AIWizard(NPC npc, bool flag) { npc.TargetClosest(true); npc.Velocity.X = npc.Velocity.X * 0.93f; if ((double)npc.Velocity.X > -0.1 && (double)npc.Velocity.X < 0.1) { npc.Velocity.X = 0f; } if (npc.ai[0] == 0f) { npc.ai[0] = 500f; } if (npc.ai[2] != 0f && npc.ai[3] != 0f) { npc.Position.X = npc.ai[2] * 16f - (float)(npc.Width / 2) + 8f; npc.Position.Y = npc.ai[3] * 16f - (float)npc.Height; npc.Velocity.X = 0f; npc.Velocity.Y = 0f; npc.ai[2] = 0f; npc.ai[3] = 0f; } npc.ai[0] += 1f; if (npc.ai[0] == 100f || npc.ai[0] == 200f || npc.ai[0] == 300f) { npc.ai[1] = 30f; npc.netUpdate = true; } else { if (npc.ai[0] >= 650f) { npc.ai[0] = 1f; int num90 = (int)Main.players[npc.target].Position.X / 16; int num91 = (int)Main.players[npc.target].Position.Y / 16; int num92 = (int)npc.Position.X / 16; int num93 = (int)npc.Position.Y / 16; int num94 = 20; int num95 = 0; bool flag14 = false; if (Math.Abs(npc.Position.X - Main.players[npc.target].Position.X) + Math.Abs(npc.Position.Y - Main.players[npc.target].Position.Y) > 2000f) { num95 = 100; flag14 = true; } while (!flag14 && num95 < 100) { num95++; int num96 = Main.rand.Next(num90 - num94, num90 + num94); int num97 = Main.rand.Next(num91 - num94, num91 + num94); for (int num98 = num97; num98 < num91 + num94; num98++) { if ((num98 < num91 - 4 || num98 > num91 + 4 || num96 < num90 - 4 || num96 > num90 + 4) && (num98 < num93 - 1 || num98 > num93 + 1 || num96 < num92 - 1 || num96 > num92 + 1) && Main.tile.At(num96, num98).Active) { bool flag15 = true; if (npc.Type == 32 && Main.tile.At(num96, num98 - 1).Wall == 0) { flag15 = false; } else { if (Main.tile.At(num96, num98 - 1).Lava) { flag15 = false; } } if (flag15 && Main.tileSolid[(int)Main.tile.At(num96, num98).Type] && !Collision.SolidTiles(num96 - 1, num96 + 1, num98 - 4, num98 - 1)) { npc.ai[1] = 20f; npc.ai[2] = (float)num96; npc.ai[3] = (float)num98; flag14 = true; break; } } } } npc.netUpdate = true; } } if (npc.ai[1] > 0f) { npc.ai[1] -= 1f; if (npc.ai[1] == 25f) { if (npc.Type == 29 || npc.Type == 45) { NPC.NewNPC((int)npc.Position.X + npc.Width / 2, (int)npc.Position.Y - 8, 30, 0); } else { if (npc.Type == 32) { NPC.NewNPC((int)npc.Position.X + npc.Width / 2, (int)npc.Position.Y - 8, 33, 0); } else { NPC.NewNPC((int)npc.Position.X + npc.Width / 2 + npc.direction * 8, (int)npc.Position.Y + 20, 25, 0); } } } } if (npc.Type == 29 || npc.Type == 45) { if (Main.rand.Next(5) == 0) { return; } } else { if (npc.Type == 32) { if (Main.rand.Next(2) == 0) { return; } } else { if (Main.rand.Next(2) == 0) { return; } } } }
// 9 private void AISphere(NPC npc, bool flag) { if (npc.target == 255) { npc.TargetClosest(true); float num102 = 6f; if (npc.Type == 25) { num102 = 5f; } Vector2 vector11 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num103 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector11.X; float num104 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector11.Y; float num105 = (float)Math.Sqrt((double)(num103 * num103 + num104 * num104)); num105 = num102 / num105; npc.Velocity.X = num103 * num105; npc.Velocity.Y = num104 * num105; } if (npc.timeLeft > 100) { npc.timeLeft = 100; } npc.rotation += 0.4f * (float)npc.direction; return; }
// 31 private void AISpazmatism(NPC npc, bool flag) { if (npc.target < 0 || npc.target == 255 || Main.players[npc.target].dead || !Main.players[npc.target].Active) { npc.TargetClosest(true); } bool dead3 = Main.players[npc.target].dead; float num355 = npc.Position.X + (float)(npc.Width / 2) - Main.players[npc.target].Position.X - (float)(Main.players[npc.target].Width / 2); float num356 = npc.Position.Y + (float)npc.Height - 59f - Main.players[npc.target].Position.Y - (float)(Main.players[npc.target].Height / 2); float num357 = (float)Math.Atan2((double)num356, (double)num355) + 1.57f; if (num357 < 0f) num357 += 6.283f; else if ((double)num357 > 6.283) num357 -= 6.283f; float num358 = 0.15f; if (npc.rotation < num357) { if ((double)(num357 - npc.rotation) > 3.1415) npc.rotation -= num358; else npc.rotation += num358; } else if (npc.rotation > num357) { if ((double)(npc.rotation - num357) > 3.1415) npc.rotation += num358; else npc.rotation -= num358; } if (npc.rotation > num357 - num358 && npc.rotation < num357 + num358) npc.rotation = num357; if (npc.rotation < 0f) npc.rotation += 6.283f; else if ((double)npc.rotation > 6.283) npc.rotation -= 6.283f; if (npc.rotation > num357 - num358 && npc.rotation < num357 + num358) npc.rotation = num357; if (Main.dayTime || dead3) { npc.Velocity.Y = npc.Velocity.Y - 0.04f; if (npc.timeLeft > 10) { npc.timeLeft = 10; return; } } else { if (npc.ai[0] == 0f) { if (npc.ai[1] == 0f) { npc.TargetClosest(true); float num360 = 12f; float num361 = 0.4f; int num362 = 1; if (npc.Position.X + (float)(npc.Width / 2) < Main.players[npc.target].Position.X + (float)Main.players[npc.target].Width) num362 = -1; Vector2 vector36 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num363 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) + (float)(num362 * 400) - vector36.X; float num364 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector36.Y; float num365 = (float)Math.Sqrt((double)(num363 * num363 + num364 * num364)); num365 = num360 / num365; num363 *= num365; num364 *= num365; if (npc.Velocity.X < num363) { npc.Velocity.X = npc.Velocity.X + num361; if (npc.Velocity.X < 0f && num363 > 0f) npc.Velocity.X = npc.Velocity.X + num361; } else { if (npc.Velocity.X > num363) { npc.Velocity.X = npc.Velocity.X - num361; if (npc.Velocity.X > 0f && num363 < 0f) npc.Velocity.X = npc.Velocity.X - num361; } } if (npc.Velocity.Y < num364) { npc.Velocity.Y = npc.Velocity.Y + num361; if (npc.Velocity.Y < 0f && num364 > 0f) npc.Velocity.Y = npc.Velocity.Y + num361; } else { if (npc.Velocity.Y > num364) { npc.Velocity.Y = npc.Velocity.Y - num361; if (npc.Velocity.Y > 0f && num364 < 0f) npc.Velocity.Y = npc.Velocity.Y - num361; } } npc.ai[2] += 1f; if (npc.ai[2] >= 600f) { npc.ai[1] = 1f; npc.ai[2] = 0f; npc.ai[3] = 0f; npc.target = 255; npc.netUpdate = true; } else { if (!Main.players[npc.target].dead) npc.ai[3] += 1f; if (npc.ai[3] >= 60f) { npc.ai[3] = 0f; vector36 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); num363 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector36.X; num364 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector36.Y; float num366 = 12f; int num367 = 25; int num368 = 96; num365 = (float)Math.Sqrt((double)(num363 * num363 + num364 * num364)); num365 = num366 / num365; num363 *= num365; num364 *= num365; num363 += (float)Main.rand.Next(-40, 41) * 0.05f; num364 += (float)Main.rand.Next(-40, 41) * 0.05f; vector36.X += num363 * 4f; vector36.Y += num364 * 4f; Projectile.NewProjectile(vector36.X, vector36.Y, num363, num364, num368, num367, 0f, Main.myPlayer); } } } else { if (npc.ai[1] == 1f) { npc.rotation = num357; float num369 = 13f; Vector2 vector37 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num370 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector37.X; float num371 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector37.Y; float num372 = (float)Math.Sqrt((double)(num370 * num370 + num371 * num371)); num372 = num369 / num372; npc.Velocity.X = num370 * num372; npc.Velocity.Y = num371 * num372; npc.ai[1] = 2f; } else { if (npc.ai[1] == 2f) { npc.ai[2] += 1f; if (npc.ai[2] >= 8f) { npc.Velocity.X = npc.Velocity.X * 0.9f; npc.Velocity.Y = npc.Velocity.Y * 0.9f; if ((double)npc.Velocity.X > -0.1 && (double)npc.Velocity.X < 0.1) { npc.Velocity.X = 0f; } if ((double)npc.Velocity.Y > -0.1 && (double)npc.Velocity.Y < 0.1) { npc.Velocity.Y = 0f; } } else { npc.rotation = (float)Math.Atan2((double)npc.Velocity.Y, (double)npc.Velocity.X) - 1.57f; } if (npc.ai[2] >= 42f) { npc.ai[3] += 1f; npc.ai[2] = 0f; npc.target = 255; npc.rotation = num357; if (npc.ai[3] >= 10f) { npc.ai[1] = 0f; npc.ai[3] = 0f; } else { npc.ai[1] = 1f; } } } } } if ((double)npc.life < (double)npc.lifeMax * 0.5) { npc.ai[0] = 1f; npc.ai[1] = 0f; npc.ai[2] = 0f; npc.ai[3] = 0f; npc.netUpdate = true; return; } } else { if (npc.ai[0] == 1f || npc.ai[0] == 2f) { if (npc.ai[0] == 1f) { npc.ai[2] += 0.005f; if ((double)npc.ai[2] > 0.5) { npc.ai[2] = 0.5f; } } else { npc.ai[2] -= 0.005f; if (npc.ai[2] < 0f) { npc.ai[2] = 0f; } } npc.rotation += npc.ai[2]; npc.ai[1] += 1f; if (npc.ai[1] == 100f) { npc.ai[0] += 1f; npc.ai[1] = 0f; if (npc.ai[0] == 3f) { npc.ai[2] = 0f; } } npc.Velocity.X = npc.Velocity.X * 0.98f; npc.Velocity.Y = npc.Velocity.Y * 0.98f; if ((double)npc.Velocity.X > -0.1 && (double)npc.Velocity.X < 0.1) { npc.Velocity.X = 0f; } if ((double)npc.Velocity.Y > -0.1 && (double)npc.Velocity.Y < 0.1) { npc.Velocity.Y = 0f; return; } } else { //npc.soundHit = 4; npc.damage = (int)((double)npc.defDamage * 1.5); npc.defense = npc.defDefense + 25; if (npc.ai[1] == 0f) { float num375 = 4f; float num376 = 0.1f; int num377 = 1; if (npc.Position.X + (float)(npc.Width / 2) < Main.players[npc.target].Position.X + (float)Main.players[npc.target].Width) { num377 = -1; } Vector2 vector38 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num378 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) + (float)(num377 * 180) - vector38.X; float num379 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector38.Y; float num380 = (float)Math.Sqrt((double)(num378 * num378 + num379 * num379)); num380 = num375 / num380; num378 *= num380; num379 *= num380; if (npc.Velocity.X < num378) { npc.Velocity.X = npc.Velocity.X + num376; if (npc.Velocity.X < 0f && num378 > 0f) { npc.Velocity.X = npc.Velocity.X + num376; } } else { if (npc.Velocity.X > num378) { npc.Velocity.X = npc.Velocity.X - num376; if (npc.Velocity.X > 0f && num378 < 0f) { npc.Velocity.X = npc.Velocity.X - num376; } } } if (npc.Velocity.Y < num379) { npc.Velocity.Y = npc.Velocity.Y + num376; if (npc.Velocity.Y < 0f && num379 > 0f) { npc.Velocity.Y = npc.Velocity.Y + num376; } } else { if (npc.Velocity.Y > num379) { npc.Velocity.Y = npc.Velocity.Y - num376; if (npc.Velocity.Y > 0f && num379 < 0f) { npc.Velocity.Y = npc.Velocity.Y - num376; } } } npc.ai[2] += 1f; if (npc.ai[2] >= 400f) { npc.ai[1] = 1f; npc.ai[2] = 0f; npc.ai[3] = 0f; npc.target = 255; npc.netUpdate = true; } if (Collision.CanHit(npc.Position, npc.Width, npc.Height, Main.players[npc.target].Position, Main.players[npc.target].Width, Main.players[npc.target].Height)) { npc.localAI[2] += 1f; if (npc.localAI[2] > 22f) { npc.localAI[2] = 0f; } npc.localAI[1] += 1f; if ((double)npc.life < (double)npc.lifeMax * 0.75) { npc.localAI[1] += 1f; } if ((double)npc.life < (double)npc.lifeMax * 0.5) { npc.localAI[1] += 1f; } if ((double)npc.life < (double)npc.lifeMax * 0.25) { npc.localAI[1] += 1f; } if ((double)npc.life < (double)npc.lifeMax * 0.1) { npc.localAI[1] += 2f; } if (npc.localAI[1] > 8f) { npc.localAI[1] = 0f; float num381 = 6f; int num382 = 30; int num383 = 101; vector38 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); num378 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector38.X; num379 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector38.Y; num380 = (float)Math.Sqrt((double)(num378 * num378 + num379 * num379)); num380 = num381 / num380; num378 *= num380; num379 *= num380; num379 += (float)Main.rand.Next(-40, 41) * 0.01f; num378 += (float)Main.rand.Next(-40, 41) * 0.01f; num379 += npc.Velocity.Y * 0.5f; num378 += npc.Velocity.X * 0.5f; vector38.X -= num378 * 1f; vector38.Y -= num379 * 1f; Projectile.NewProjectile(vector38.X, vector38.Y, num378, num379, num383, num382, 0f, Main.myPlayer); return; } } } else { if (npc.ai[1] == 1f) { npc.rotation = num357; float num384 = 14f; Vector2 vector39 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num385 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector39.X; float num386 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector39.Y; float num387 = (float)Math.Sqrt((double)(num385 * num385 + num386 * num386)); num387 = num384 / num387; npc.Velocity.X = num385 * num387; npc.Velocity.Y = num386 * num387; npc.ai[1] = 2f; return; } if (npc.ai[1] == 2f) { npc.ai[2] += 1f; if (npc.ai[2] >= 50f) { npc.Velocity.X = npc.Velocity.X * 0.93f; npc.Velocity.Y = npc.Velocity.Y * 0.93f; if ((double)npc.Velocity.X > -0.1 && (double)npc.Velocity.X < 0.1) { npc.Velocity.X = 0f; } if ((double)npc.Velocity.Y > -0.1 && (double)npc.Velocity.Y < 0.1) { npc.Velocity.Y = 0f; } } else { npc.rotation = (float)Math.Atan2((double)npc.Velocity.Y, (double)npc.Velocity.X) - 1.57f; } if (npc.ai[2] >= 80f) { npc.ai[3] += 1f; npc.ai[2] = 0f; npc.target = 255; npc.rotation = num357; if (npc.ai[3] >= 6f) { npc.ai[1] = 0f; npc.ai[3] = 0f; return; } npc.ai[1] = 1f; return; } } } } } } }
// 22 private void AISlowDebuffFlying(NPC npc, bool flag) { bool flag25 = false; if (npc.justHit) { npc.ai[2] = 0f; } if (npc.ai[2] >= 0f) { int num258 = 16; bool flag26 = false; bool flag27 = false; if (npc.Position.X > npc.ai[0] - (float)num258 && npc.Position.X < npc.ai[0] + (float)num258) { flag26 = true; } else { if ((npc.Velocity.X < 0f && npc.direction > 0) || (npc.Velocity.X > 0f && npc.direction < 0)) { flag26 = true; } } num258 += 24; if (npc.Position.Y > npc.ai[1] - (float)num258 && npc.Position.Y < npc.ai[1] + (float)num258) { flag27 = true; } if (flag26 && flag27) { npc.ai[2] += 1f; if (npc.ai[2] >= 30f && num258 == 16) { flag25 = true; } if (npc.ai[2] >= 60f) { npc.ai[2] = -200f; npc.direction *= -1; npc.Velocity.X = npc.Velocity.X * -1f; npc.collideX = false; } } else { npc.ai[0] = npc.Position.X; npc.ai[1] = npc.Position.Y; npc.ai[2] = 0f; } npc.TargetClosest(true); } else { npc.ai[2] += 1f; if (Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) > npc.Position.X + (float)(npc.Width / 2)) { npc.direction = -1; } else { npc.direction = 1; } } int num259 = (int)((npc.Position.X + (float)(npc.Width / 2)) / 16f) + npc.direction * 2; int num260 = (int)((npc.Position.Y + (float)npc.Height) / 16f); bool flag28 = true; bool flag29 = false; int num261 = 3; if (npc.Type == 122) { if (npc.justHit) { npc.ai[3] = 0f; npc.localAI[1] = 0f; } float num262 = 7f; Vector2 vector27 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num263 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector27.X; float num264 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector27.Y; float num265 = (float)Math.Sqrt((double)(num263 * num263 + num264 * num264)); num265 = num262 / num265; num263 *= num265; num264 *= num265; if (npc.ai[3] == 32f) { int num266 = 25; int num267 = 84; Projectile.NewProjectile(vector27.X, vector27.Y, num263, num264, num267, num266, 0f, Main.myPlayer); } num261 = 8; if (npc.ai[3] > 0f) { npc.ai[3] += 1f; if (npc.ai[3] >= 64f) { npc.ai[3] = 0f; } } if (npc.ai[3] == 0f) { npc.localAI[1] += 1f; if (npc.localAI[1] > 120f && Collision.CanHit(npc.Position, npc.Width, npc.Height, Main.players[npc.target].Position, Main.players[npc.target].Width, Main.players[npc.target].Height)) { npc.localAI[1] = 0f; npc.ai[3] = 1f; npc.netUpdate = true; } } } else if (npc.Type == 75) num261 = 4; for (int num269 = num260; num269 < num260 + num261; num269++) { if ((Main.tile.At(num259, num269).Active && Main.tileSolid[(int)Main.tile.At(num259, num269).Type]) || Main.tile.At(num259, num269).Liquid > 0) { if (num269 <= num260 + 1)flag29 = true; flag28 = false; break; } } if (flag25) { flag29 = false; flag28 = true; } if (flag28) { if (npc.Type == 75) { npc.Velocity.Y = npc.Velocity.Y + 0.2f; if (npc.Velocity.Y > 2f) npc.Velocity.Y = 2f; } else { npc.Velocity.Y = npc.Velocity.Y + 0.1f; if (npc.Velocity.Y > 3f) npc.Velocity.Y = 3f; } } else { if (npc.Type == 75) { if ((npc.directionY < 0 && npc.Velocity.Y > 0f) || flag29) npc.Velocity.Y = npc.Velocity.Y - 0.2f; } else { if (npc.directionY < 0 && npc.Velocity.Y > 0f) npc.Velocity.Y = npc.Velocity.Y - 0.1f; } if (npc.Velocity.Y < -4f) npc.Velocity.Y = -4f; } if (npc.Type == 75 && npc.wet) { npc.Velocity.Y = npc.Velocity.Y - 0.2f; if (npc.Velocity.Y < -2f) npc.Velocity.Y = -2f; } if (npc.collideX) { npc.Velocity.X = npc.oldVelocity.X * -0.4f; if (npc.direction == -1 && npc.Velocity.X > 0f && npc.Velocity.X < 1f) npc.Velocity.X = 1f; if (npc.direction == 1 && npc.Velocity.X < 0f && npc.Velocity.X > -1f) npc.Velocity.X = -1f; } if (npc.collideY) { npc.Velocity.Y = npc.oldVelocity.Y * -0.25f; if (npc.Velocity.Y > 0f && npc.Velocity.Y < 1f) npc.Velocity.Y = 1f; if (npc.Velocity.Y < 0f && npc.Velocity.Y > -1f) npc.Velocity.Y = -1f; } float num270 = 2f; if (npc.Type == 75) { num270 = 3f; } if (npc.direction == -1 && npc.Velocity.X > -num270) { npc.Velocity.X = npc.Velocity.X - 0.1f; if (npc.Velocity.X > num270) npc.Velocity.X = npc.Velocity.X - 0.1f; else if (npc.Velocity.X > 0f) npc.Velocity.X = npc.Velocity.X + 0.05f; if (npc.Velocity.X < -num270) npc.Velocity.X = -num270; } else if (npc.direction == 1 && npc.Velocity.X < num270) { npc.Velocity.X = npc.Velocity.X + 0.1f; if (npc.Velocity.X < -num270) npc.Velocity.X = npc.Velocity.X + 0.1f; else if (npc.Velocity.X < 0f) npc.Velocity.X = npc.Velocity.X - 0.05f; if (npc.Velocity.X > num270) npc.Velocity.X = num270; } if (npc.directionY == -1 && (double)npc.Velocity.Y > -1.5) { npc.Velocity.Y = npc.Velocity.Y - 0.04f; if ((double)npc.Velocity.Y > 1.5) npc.Velocity.Y = npc.Velocity.Y - 0.05f; else if (npc.Velocity.Y > 0f) npc.Velocity.Y = npc.Velocity.Y + 0.03f; if ((double)npc.Velocity.Y < -1.5) npc.Velocity.Y = -1.5f; } else if (npc.directionY == 1 && (double)npc.Velocity.Y < 1.5) { npc.Velocity.Y = npc.Velocity.Y + 0.04f; if ((double)npc.Velocity.Y < -1.5) npc.Velocity.Y = npc.Velocity.Y + 0.05f; else if (npc.Velocity.Y < 0f) npc.Velocity.Y = npc.Velocity.Y - 0.03f; if ((double)npc.Velocity.Y > 1.5) npc.Velocity.Y = 1.5f; } }
public static int NewNPC(int x, int y, NPC npc, int npcIndex) { npc.Position.X = (float)(x - npc.Width / 2); npc.Position.Y = (float)(y - npc.Height); npc.Active = true; npc.timeLeft = (int)((double)NPC.active_TIME * 1.25); npc.wet = Collision.WetCollision(npc.Position, npc.Width, npc.Height); Main.npcs[npcIndex] = npc; return npcIndex; }
// 1 private void AISlime(NPC npc, bool flagg) { bool flag = (!Main.dayTime) || (npc.life != npc.lifeMax) || (npc.Position.Y > Main.worldSurface * 16.0) || (npc.Type == 81); if (npc.ai[2] > 1f) { npc.ai[2] -= 1f; } if (npc.wet) { if (this.collideY) { this.Velocity.Y = -2f; } if (npc.Velocity.Y < 0f && npc.ai[3] == npc.Position.X) { npc.direction *= -1; npc.ai[2] = 200f; } if (npc.Velocity.Y > 0f) { npc.ai[3] = npc.Position.X; } if (npc.Type == 59) { if (npc.Velocity.Y > 2f) { npc.Velocity.Y = npc.Velocity.Y * 0.9f; } else { if (npc.directionY < 0) { npc.Velocity.Y = npc.Velocity.Y - 0.8f; } } npc.Velocity.Y = npc.Velocity.Y - 0.5f; if (npc.Velocity.Y < -10f) { npc.Velocity.Y = -10f; } } else { if (npc.Velocity.Y > 2f) { npc.Velocity.Y = npc.Velocity.Y * 0.9f; } npc.Velocity.Y = npc.Velocity.Y - 0.5f; if (npc.Velocity.Y < -4f) { npc.Velocity.Y = -4f; } } if (npc.ai[2] == 1f && flag) { npc.TargetClosest(true); } } npc.aiAction = 0; if (npc.ai[2] == 0f) { npc.ai[0] = -100f; npc.ai[2] = 1f; npc.TargetClosest(true); } if (npc.Velocity.Y == 0f) { if (npc.ai[3] == npc.Position.X) { npc.direction *= -1; npc.ai[2] = 200f; } npc.ai[3] = 0f; npc.Velocity.X = npc.Velocity.X * 0.8f; if ((double)npc.Velocity.X > -0.1 && (double)npc.Velocity.X < 0.1) { npc.Velocity.X = 0f; } if (flag) { npc.ai[0] += 1f; } npc.ai[0] += 1f; if (npc.Type == 59) { npc.ai[0] += 2f; } if (npc.Type == 71) { npc.ai[0] += 3f; } if (this.Type == 138) { this.ai[0] += 2f; } if (this.Type == 81) { if (this.scale >= 0f) { this.ai[0] += 4f; } else { this.ai[0] += 1f; } } if (npc.ai[0] >= 0f) { npc.netUpdate = true; if (flag && npc.ai[2] == 1f) { npc.TargetClosest(true); } if (npc.ai[1] == 2f) { npc.Velocity.Y = -8f; if (npc.Type == 59) { npc.Velocity.Y = npc.Velocity.Y - 2f; } npc.Velocity.X = npc.Velocity.X + (float)(3 * npc.direction); if (npc.Type == 59) { npc.Velocity.X = npc.Velocity.X + 0.5f * (float)npc.direction; } npc.ai[0] = -200f; npc.ai[1] = 0f; npc.ai[3] = npc.Position.X; } else { npc.Velocity.Y = -6f; npc.Velocity.X = npc.Velocity.X + (float)(2 * npc.direction); if (npc.Type == 59) { npc.Velocity.X = npc.Velocity.X + (float)(2 * npc.direction); } npc.ai[0] = -120f; npc.ai[1] += 1f; } if (this.Type == 141) { this.Velocity.Y = this.Velocity.Y * 1.3f; this.Velocity.X = this.Velocity.X * 1.2f; return; } } else { if (npc.ai[0] >= -30f) { npc.aiAction = 1; return; } } } else { if (npc.target < 255 && ((npc.direction == 1 && npc.Velocity.X < 3f) || (npc.direction == -1 && npc.Velocity.X > -3f))) { if ((npc.direction == -1 && (double)npc.Velocity.X < 0.1) || (npc.direction == 1 && (double)npc.Velocity.X > -0.1)) { npc.Velocity.X = npc.Velocity.X + 0.2f * (float)npc.direction; return; } npc.Velocity.X = npc.Velocity.X * 0.93f; return; } } }
// 32 private void AISkeletronPrime(NPC npc, bool flag) { npc.damage = npc.defDamage; npc.defense = npc.defDefense; if (npc.ai[0] == 0f) { npc.TargetClosest(true); npc.ai[0] = 1f; if (npc.Type != 68) { int num388 = NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)npc.Position.Y + npc.Height / 2, 128, npc.whoAmI); Main.npcs[num388].ai[0] = -1f; Main.npcs[num388].ai[1] = (float)npc.whoAmI; Main.npcs[num388].target = npc.target; Main.npcs[num388].netUpdate = true; num388 = NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)npc.Position.Y + npc.Height / 2, 129, npc.whoAmI); Main.npcs[num388].ai[0] = 1f; Main.npcs[num388].ai[1] = (float)npc.whoAmI; Main.npcs[num388].target = npc.target; Main.npcs[num388].netUpdate = true; num388 = NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)npc.Position.Y + npc.Height / 2, 130, npc.whoAmI); Main.npcs[num388].ai[0] = -1f; Main.npcs[num388].ai[1] = (float)npc.whoAmI; Main.npcs[num388].target = npc.target; Main.npcs[num388].ai[3] = 150f; Main.npcs[num388].netUpdate = true; num388 = NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)npc.Position.Y + npc.Height / 2, 131, npc.whoAmI); Main.npcs[num388].ai[0] = 1f; Main.npcs[num388].ai[1] = (float)npc.whoAmI; Main.npcs[num388].target = npc.target; Main.npcs[num388].netUpdate = true; Main.npcs[num388].ai[3] = 150f; } } if (npc.Type == 68 && npc.ai[1] != 3f && npc.ai[1] != 2f) { npc.ai[1] = 2f; } if (Main.players[npc.target].dead || Math.Abs(npc.Position.X - Main.players[npc.target].Position.X) > 6000f || Math.Abs(npc.Position.Y - Main.players[npc.target].Position.Y) > 6000f) { npc.TargetClosest(true); if (Main.players[npc.target].dead || Math.Abs(npc.Position.X - Main.players[npc.target].Position.X) > 6000f || Math.Abs(npc.Position.Y - Main.players[npc.target].Position.Y) > 6000f) { npc.ai[1] = 3f; } } if (Main.dayTime && npc.ai[1] != 3f && npc.ai[1] != 2f) { npc.ai[1] = 2f; } if (npc.ai[1] == 0f) { npc.ai[2] += 1f; if (npc.ai[2] >= 600f) { npc.ai[2] = 0f; npc.ai[1] = 1f; npc.TargetClosest(true); npc.netUpdate = true; } npc.rotation = npc.Velocity.X / 15f; if (npc.Position.Y > Main.players[npc.target].Position.Y - 200f) { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.98f; } npc.Velocity.Y = npc.Velocity.Y - 0.1f; if (npc.Velocity.Y > 2f) { npc.Velocity.Y = 2f; } } else { if (npc.Position.Y < Main.players[npc.target].Position.Y - 500f) { if (npc.Velocity.Y < 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.98f; } npc.Velocity.Y = npc.Velocity.Y + 0.1f; if (npc.Velocity.Y < -2f) { npc.Velocity.Y = -2f; } } } if (npc.Position.X + (float)(npc.Width / 2) > Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) + 100f) { if (npc.Velocity.X > 0f) { npc.Velocity.X = npc.Velocity.X * 0.98f; } npc.Velocity.X = npc.Velocity.X - 0.1f; if (npc.Velocity.X > 8f) { npc.Velocity.X = 8f; } } if (npc.Position.X + (float)(npc.Width / 2) < Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - 100f) { if (npc.Velocity.X < 0f) { npc.Velocity.X = npc.Velocity.X * 0.98f; } npc.Velocity.X = npc.Velocity.X + 0.1f; if (npc.Velocity.X < -8f) { npc.Velocity.X = -8f; return; } } } else { if (npc.ai[1] == 1f) { npc.defense *= 2; npc.damage *= 2; npc.ai[2] += 1f; if (npc.ai[2] >= 400f) { npc.ai[2] = 0f; npc.ai[1] = 0f; } npc.rotation += (float)npc.direction * 0.3f; Vector2 vector40 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num389 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector40.X; float num390 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector40.Y; float num391 = (float)Math.Sqrt((double)(num389 * num389 + num390 * num390)); num391 = 2f / num391; npc.Velocity.X = num389 * num391; npc.Velocity.Y = num390 * num391; return; } if (npc.ai[1] == 2f) { npc.damage = 9999; npc.defense = 9999; npc.rotation += (float)npc.direction * 0.3f; Vector2 vector41 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num392 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector41.X; float num393 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector41.Y; float num394 = (float)Math.Sqrt((double)(num392 * num392 + num393 * num393)); num394 = 8f / num394; npc.Velocity.X = num392 * num394; npc.Velocity.Y = num393 * num394; return; } if (npc.ai[1] == 3f) { npc.Velocity.Y = npc.Velocity.Y + 0.1f; if (npc.Velocity.Y < 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.95f; } npc.Velocity.X = npc.Velocity.X * 0.95f; if (npc.timeLeft > 500) { npc.timeLeft = 500; return; } } } }
// 11 private void AISkeletronHead(NPC npc, bool flag) { if (npc.ai[0] == 0f) { npc.TargetClosest(true); npc.ai[0] = 1f; if (npc.Type != 68) { int num116 = NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)npc.Position.Y + npc.Height / 2, 36, npc.whoAmI); Main.npcs[num116].ai[0] = -1f; Main.npcs[num116].ai[1] = (float)npc.whoAmI; Main.npcs[num116].target = npc.target; Main.npcs[num116].netUpdate = true; num116 = NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)npc.Position.Y + npc.Height / 2, 36, npc.whoAmI); Main.npcs[num116].ai[0] = 1f; Main.npcs[num116].ai[1] = (float)npc.whoAmI; Main.npcs[num116].ai[3] = 150f; Main.npcs[num116].target = npc.target; Main.npcs[num116].netUpdate = true; } } if (npc.Type == 68 && npc.ai[1] != 3f && npc.ai[1] != 2f) { npc.ai[1] = 2f; } if (Main.players[npc.target].dead || Math.Abs(npc.Position.X - Main.players[npc.target].Position.X) > 2000f || Math.Abs(npc.Position.Y - Main.players[npc.target].Position.Y) > 2000f) { npc.TargetClosest(true); if (Main.players[npc.target].dead || Math.Abs(npc.Position.X - Main.players[npc.target].Position.X) > 2000f || Math.Abs(npc.Position.Y - Main.players[npc.target].Position.Y) > 2000f) { npc.ai[1] = 3f; } } if (Main.dayTime && npc.ai[1] != 3f && npc.ai[1] != 2f) { npc.ai[1] = 2f; } if (npc.ai[1] == 0f) { npc.defense = 10; npc.ai[2] += 1f; if (npc.ai[2] >= 800f) { npc.ai[2] = 0f; npc.ai[1] = 1f; npc.TargetClosest(true); npc.netUpdate = true; } npc.rotation = npc.Velocity.X / 15f; if (npc.Position.Y > Main.players[npc.target].Position.Y - 250f) { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.98f; } npc.Velocity.Y = npc.Velocity.Y - 0.02f; if (npc.Velocity.Y > 2f) { npc.Velocity.Y = 2f; } } else { if (npc.Position.Y < Main.players[npc.target].Position.Y - 250f) { if (npc.Velocity.Y < 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.98f; } npc.Velocity.Y = npc.Velocity.Y + 0.02f; if (npc.Velocity.Y < -2f) { npc.Velocity.Y = -2f; } } } if (npc.Position.X + (float)(npc.Width / 2) > Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2)) { if (npc.Velocity.X > 0f) { npc.Velocity.X = npc.Velocity.X * 0.98f; } npc.Velocity.X = npc.Velocity.X - 0.05f; if (npc.Velocity.X > 8f) { npc.Velocity.X = 8f; } } if (npc.Position.X + (float)(npc.Width / 2) < Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2)) { if (npc.Velocity.X < 0f) { npc.Velocity.X = npc.Velocity.X * 0.98f; } npc.Velocity.X = npc.Velocity.X + 0.05f; if (npc.Velocity.X < -8f) { npc.Velocity.X = -8f; } } } else { if (npc.ai[1] == 1f) { npc.defense = 0; npc.ai[2] += 1f; if (npc.ai[2] >= 400f) { npc.ai[2] = 0f; npc.ai[1] = 0f; } npc.rotation += (float)npc.direction * 0.3f; Vector2 vector13 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num117 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector13.X; float num118 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector13.Y; float num119 = (float)Math.Sqrt((double)(num117 * num117 + num118 * num118)); num119 = 1.5f / num119; npc.Velocity.X = num117 * num119; npc.Velocity.Y = num118 * num119; } else { if (npc.ai[1] == 2f) { npc.damage = 9999; npc.defense = 9999; npc.rotation += (float)npc.direction * 0.3f; Vector2 vector14 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num120 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector14.X; float num121 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector14.Y; float num122 = (float)Math.Sqrt((double)(num120 * num120 + num121 * num121)); num122 = 8f / num122; npc.Velocity.X = num120 * num122; npc.Velocity.Y = num121 * num122; } else { if (npc.ai[1] == 3f) { npc.Velocity.Y = npc.Velocity.Y + 0.1f; if (npc.Velocity.Y < 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.95f; } npc.Velocity.X = npc.Velocity.X * 0.95f; if (npc.timeLeft > 500) { npc.timeLeft = 500; } } } } } if (npc.ai[1] != 2f && npc.ai[1] != 3f && npc.Type != 68) { return; } }
// 27 private void AIWallOfFlesh(NPC npc, bool flag) { if (npc.Position.X < 160f || npc.Position.X > (float)((Main.maxTilesX - 10) * 16)) npc.Active = false; if (npc.localAI[0] == 0f) { npc.localAI[0] = 1f; Main.WallOfFlesh_B = -1; Main.WallOfFlesh_T = -1; } npc.ai[1] += 1f; if (npc.ai[2] == 0f) { if ((double)npc.life < (double)npc.lifeMax * 0.5) npc.ai[1] += 1f; if ((double)npc.life < (double)npc.lifeMax * 0.2) npc.ai[1] += 1f; if (npc.ai[1] > 2700f) npc.ai[2] = 1f; } if (npc.ai[2] > 0f && npc.ai[1] > 60f) { int num285 = 3; if ((double)npc.life < (double)npc.lifeMax * 0.3) num285++; npc.ai[2] += 1f; npc.ai[1] = 0f; if (npc.ai[2] > (float)num285) npc.ai[2] = 0f; int num286 = NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)(npc.Position.Y + (float)(npc.Height / 2) + 20f), 117, 1); Main.npcs[num286].Velocity.X = (float)(npc.direction * 8); } npc.localAI[3] += 1f; if (npc.localAI[3] >= (float)(600 + Main.rand.Next(1000))) { npc.localAI[3] = (float)(-(float)Main.rand.Next(200)); } Main.WallOfFlesh = npc.whoAmI; int num287 = (int)(npc.Position.X / 16f); int num288 = (int)((npc.Position.X + (float)npc.Width) / 16f); int num289 = (int)((npc.Position.Y + (float)(npc.Height / 2)) / 16f); int num290 = 0; int tileY = num289 + 7; while (num290 < 15 && tileY > Main.maxTilesY - 200) { tileY++; for (int num292 = num287; num292 <= num288; num292++) { try { if (WorldModify.SolidTile(num292, tileY) || Main.tile.At(num292, tileY).Liquid > 0) num290++; } catch { num290 += 15; } } } tileY += 4; if (Main.WallOfFlesh_B == -1) Main.WallOfFlesh_B = tileY * 16; else if (Main.WallOfFlesh_B > tileY * 16) { Main.WallOfFlesh_B--; if (Main.WallOfFlesh_B < tileY * 16) Main.WallOfFlesh_B = tileY * 16; } else if (Main.WallOfFlesh_B < tileY * 16) { Main.WallOfFlesh_B++; if (Main.WallOfFlesh_B > tileY * 16) { Main.WallOfFlesh_B = tileY * 16; } } num290 = 0; tileY = num289 - 7; while (num290 < 15 && tileY < Main.maxTilesY - 10) { tileY--; for (int tileX = num287; tileX <= num288; tileX++) { try { if (WorldModify.SolidTile(tileX, tileY) || Main.tile.At(tileX, tileY).Liquid > 0) { num290++; } } catch { num290 += 15; } } } tileY -= 4; if (Main.WallOfFlesh_T == -1) Main.WallOfFlesh_T = tileY * 16; else if (Main.WallOfFlesh_T > tileY * 16) { Main.WallOfFlesh_T--; if (Main.WallOfFlesh_T < tileY * 16) Main.WallOfFlesh_T = tileY * 16; } else if (Main.WallOfFlesh_T < tileY * 16) { Main.WallOfFlesh_T++; if (Main.WallOfFlesh_T > tileY * 16) Main.WallOfFlesh_T = tileY * 16; } float num294 = (float)((Main.WallOfFlesh_B + Main.WallOfFlesh_T) / 2 - npc.Height / 2); if (npc.Position.Y > num294 + 1f) npc.Velocity.Y = -1f; else if (npc.Position.Y < num294 - 1f) npc.Velocity.Y = 1f; npc.Velocity.Y = 0f; npc.Position.Y = num294; float num295 = 1.5f; if ((double)npc.life < (double)npc.lifeMax * 0.75) { num295 += 0.25f; } if ((double)npc.life < (double)npc.lifeMax * 0.5) num295 += 0.4f; if ((double)npc.life < (double)npc.lifeMax * 0.25) num295 += 0.5f; if ((double)npc.life < (double)npc.lifeMax * 0.1) num295 += 0.6f; if (npc.Velocity.X == 0f) { npc.TargetClosest(true); npc.Velocity.X = (float)npc.direction; } if (npc.Velocity.X < 0f) { npc.Velocity.X = -num295; npc.direction = -1; } else { npc.Velocity.X = num295; npc.direction = 1; } npc.spriteDirection = npc.direction; Vector2 vector29 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num296 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector29.X; float num297 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector29.Y; float num298 = (float)Math.Sqrt((double)(num296 * num296 + num297 * num297)); num296 *= num298; num297 *= num298; if (npc.direction > 0) { if (Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) > npc.Position.X + (float)(npc.Width / 2)) npc.rotation = (float)Math.Atan2((double)(-(double)num297), (double)(-(double)num296)) + 3.14f; else npc.rotation = 0f; } else { if (Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) < npc.Position.X + (float)(npc.Width / 2)) npc.rotation = (float)Math.Atan2((double)num297, (double)num296) + 3.14f; else npc.rotation = 0f; } if (npc.localAI[0] == 1f) { npc.localAI[0] = 2f; num294 = (float)((Main.WallOfFlesh_B + Main.WallOfFlesh_T) / 2); num294 = (num294 + (float)Main.WallOfFlesh_T) / 2f; int num299 = NPC.NewNPC((int)npc.Position.X, (int)num294, 114, npc.whoAmI); Main.npcs[num299].ai[0] = 1f; num294 = (float)((Main.WallOfFlesh_B + Main.WallOfFlesh_T) / 2); num294 = (num294 + (float)Main.WallOfFlesh_B) / 2f; num299 = NPC.NewNPC((int)npc.Position.X, (int)num294, 114, npc.whoAmI); Main.npcs[num299].ai[0] = -1f; num294 = (float)((Main.WallOfFlesh_B + Main.WallOfFlesh_T) / 2); num294 = (num294 + (float)Main.WallOfFlesh_B) / 2f; for (int num300 = 0; num300 < 11; num300++) { num299 = NPC.NewNPC((int)npc.Position.X, (int)num294, 115, npc.whoAmI); Main.npcs[num299].ai[0] = (float)num300 * 0.1f - 0.05f; } return; } }
// 28 private void AIWallOfFlesh_Eye(NPC npc, bool flag) { if (Main.WallOfFlesh < 0) { npc.Active = false; return; } npc.realLife = Main.WallOfFlesh; npc.TargetClosest(true); npc.Position.X = Main.npcs[Main.WallOfFlesh].Position.X; npc.direction = Main.npcs[Main.WallOfFlesh].direction; npc.spriteDirection = npc.direction; float num301 = (float)((Main.WallOfFlesh_B + Main.WallOfFlesh_T) / 2); if (npc.ai[0] > 0f) { num301 = (num301 + (float)Main.WallOfFlesh_T) / 2f; } else { num301 = (num301 + (float)Main.WallOfFlesh_B) / 2f; } num301 -= (float)(npc.Height / 2); if (npc.Position.Y > num301 + 1f) { npc.Velocity.Y = -1f; } else { if (npc.Position.Y < num301 - 1f) { npc.Velocity.Y = 1f; } else { npc.Velocity.Y = 0f; npc.Position.Y = num301; } } if (npc.Velocity.Y > 5f) { npc.Velocity.Y = 5f; } if (npc.Velocity.Y < -5f) { npc.Velocity.Y = -5f; } Vector2 vector30 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num302 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector30.X; float num303 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector30.Y; float num304 = (float)Math.Sqrt((double)(num302 * num302 + num303 * num303)); num302 *= num304; num303 *= num304; bool flag33 = true; if (npc.direction > 0) { if (Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) > npc.Position.X + (float)(npc.Width / 2)) { npc.rotation = (float)Math.Atan2((double)(-(double)num303), (double)(-(double)num302)) + 3.14f; } else { npc.rotation = 0f; flag33 = false; } } else { if (Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) < npc.Position.X + (float)(npc.Width / 2)) { npc.rotation = (float)Math.Atan2((double)num303, (double)num302) + 3.14f; } else { npc.rotation = 0f; flag33 = false; } } int num305 = 4; npc.localAI[1] += 1f; if ((double)Main.npcs[Main.WallOfFlesh].life < (double)Main.npcs[Main.WallOfFlesh].lifeMax * 0.75) { npc.localAI[1] += 1f; num305++; } if ((double)Main.npcs[Main.WallOfFlesh].life < (double)Main.npcs[Main.WallOfFlesh].lifeMax * 0.5) { npc.localAI[1] += 1f; num305++; } if ((double)Main.npcs[Main.WallOfFlesh].life < (double)Main.npcs[Main.WallOfFlesh].lifeMax * 0.25) { npc.localAI[1] += 1f; num305 += 2; } if ((double)Main.npcs[Main.WallOfFlesh].life < (double)Main.npcs[Main.WallOfFlesh].lifeMax * 0.1) { npc.localAI[1] += 2f; num305 += 3; } if (npc.localAI[2] == 0f) { if (npc.localAI[1] > 600f) { npc.localAI[2] = 1f; npc.localAI[1] = 0f; return; } } else { if (npc.localAI[1] > 45f && Collision.CanHit(npc.Position, npc.Width, npc.Height, Main.players[npc.target].Position, Main.players[npc.target].Width, Main.players[npc.target].Height)) { npc.localAI[1] = 0f; npc.localAI[2] += 1f; if (npc.localAI[2] >= (float)num305) { npc.localAI[2] = 0f; } if (flag33) { float num306 = 9f; int num307 = 11; int num308 = 83; if ((double)Main.npcs[Main.WallOfFlesh].life < (double)Main.npcs[Main.WallOfFlesh].lifeMax * 0.5) { num307++; num306 += 1f; } if ((double)Main.npcs[Main.WallOfFlesh].life < (double)Main.npcs[Main.WallOfFlesh].lifeMax * 0.25) { num307++; num306 += 1f; } if ((double)Main.npcs[Main.WallOfFlesh].life < (double)Main.npcs[Main.WallOfFlesh].lifeMax * 0.1) { num307 += 2; num306 += 2f; } vector30 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); num302 = Main.players[npc.target].Position.X + (float)Main.players[npc.target].Width * 0.5f - vector30.X; num303 = Main.players[npc.target].Position.Y + (float)Main.players[npc.target].Height * 0.5f - vector30.Y; num304 = (float)Math.Sqrt((double)(num302 * num302 + num303 * num303)); num304 = num306 / num304; num302 *= num304; num303 *= num304; vector30.X += num302; vector30.Y += num303; Projectile.NewProjectile(vector30.X, vector30.Y, num302, num303, num308, num307, 0f, Main.myPlayer); return; } } } }
// 20 private void AISpikedBall(NPC npc, bool flag) { if (npc.ai[0] == 0f) { npc.TargetClosest(true); npc.direction *= -1; npc.directionY *= -1; npc.Position.Y = npc.Position.Y + (float)(npc.Height / 2 + 8); npc.ai[1] = npc.Position.X + (float)(npc.Width / 2); npc.ai[2] = npc.Position.Y + (float)(npc.Height / 2); if (npc.direction == 0) { npc.direction = 1; } if (npc.directionY == 0) { npc.directionY = 1; } npc.ai[3] = 1f + (float)Main.rand.Next(15) * 0.1f; npc.Velocity.Y = (float)(npc.directionY * 6) * npc.ai[3]; npc.ai[0] += 1f; npc.netUpdate = true; return; } else { float num186 = 6f * npc.ai[3]; float num187 = 0.2f * npc.ai[3]; float num188 = num186 / num187 / 2f; if (npc.ai[0] >= 1f && npc.ai[0] < (float)((int)num188)) { npc.Velocity.Y = (float)npc.directionY * num186; npc.ai[0] += 1f; return; } if (npc.ai[0] >= (float)((int)num188)) { npc.netUpdate = true; npc.Velocity.Y = 0f; npc.directionY *= -1; npc.Velocity.X = num186 * (float)npc.direction; npc.ai[0] = -1f; return; } if (npc.directionY > 0) { if (npc.Velocity.Y >= num186) { npc.netUpdate = true; npc.directionY *= -1; npc.Velocity.Y = num186; } } else { if (npc.directionY < 0 && npc.Velocity.Y <= -num186) { npc.directionY *= -1; npc.Velocity.Y = -num186; } } if (npc.direction > 0) { if (npc.Velocity.X >= num186) { npc.direction *= -1; npc.Velocity.X = num186; } } else { if (npc.direction < 0 && npc.Velocity.X <= -num186) { npc.direction *= -1; npc.Velocity.X = -num186; } } npc.Velocity.X = npc.Velocity.X + num187 * (float)npc.direction; npc.Velocity.Y = npc.Velocity.Y + num187 * (float)npc.directionY; return; } }
// 6 private void AIWorm(NPC npc, bool flag) { if (npc.target < 0 || npc.target == 255 || Main.players[npc.target].dead) { npc.TargetClosest(true); } if (Main.players[npc.target].dead && npc.timeLeft > 10) { npc.timeLeft = 10; } if ((npc.Type == 7 || npc.Type == 8 || npc.Type == 10 || npc.Type == 11 || npc.Type == 13 || npc.Type == 14 || npc.Type == 39 || npc.Type == 40) && npc.ai[0] == 0f) { if (npc.Type == 7 || npc.Type == 10 || npc.Type == 13 || npc.Type == 39) { npc.ai[2] = (float)Main.rand.Next(8, 13); if (npc.Type == 10) { npc.ai[2] = (float)Main.rand.Next(4, 7); } if (npc.Type == 13) { npc.ai[2] = (float)Main.rand.Next(45, 56); } if (npc.Type == 39) { npc.ai[2] = (float)Main.rand.Next(12, 19); } npc.ai[0] = (float)NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)(npc.Position.Y + (float)npc.Height), npc.Type + 1, npc.whoAmI); } else { if ((npc.Type == 8 || npc.Type == 11 || npc.Type == 14 || npc.Type == 40) && npc.ai[2] > 0f) { npc.ai[0] = (float)NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)(npc.Position.Y + (float)npc.Height), npc.Type, npc.whoAmI); } else { npc.ai[0] = (float)NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)(npc.Position.Y + (float)npc.Height), npc.Type + 1, npc.whoAmI); } } Main.npcs[(int)npc.ai[0]].ai[1] = (float)npc.whoAmI; Main.npcs[(int)npc.ai[0]].ai[2] = npc.ai[2] - 1f; npc.netUpdate = true; } if ((npc.Type == 8 || npc.Type == 9 || npc.Type == 11 || npc.Type == 12 || npc.Type == 40 || npc.Type == 41) && (!Main.npcs[(int)npc.ai[1]].Active || Main.npcs[(int)npc.ai[1]].aiStyle != npc.aiStyle)) { npc.life = 0; npc.HitEffect(0, 10.0); npc.Active = false; } if ((npc.Type == 7 || npc.Type == 8 || npc.Type == 10 || npc.Type == 11 || npc.Type == 39 || npc.Type == 40) && !Main.npcs[(int)npc.ai[0]].Active) { npc.life = 0; npc.HitEffect(0, 10.0); npc.Active = false; } if (npc.type == NPCType.N13_EATER_OF_WORLDS_HEAD || npc.type == NPCType.N14_EATER_OF_WORLDS_BODY || npc.type == NPCType.N15_EATER_OF_WORLDS_TAIL) { //If this segment has no segment before or after it, DIE! if (!Main.npcs[(int)npc.ai[1]].Active && !Main.npcs[(int)npc.ai[0]].Active) { npc.life = 0; npc.HitEffect(0, 10.0); npc.Active = false; } //If we are a head connected to nothing, DIE! if (npc.type == NPCType.N13_EATER_OF_WORLDS_HEAD && !Main.npcs[(int)npc.ai[0]].Active) { npc.life = 0; npc.HitEffect(0, 10.0); npc.Active = false; } //If we are a tail connected to nothing, DIE! if (npc.type == NPCType.N15_EATER_OF_WORLDS_TAIL && !Main.npcs[(int)npc.ai[1]].Active) { npc.life = 0; npc.HitEffect(0, 10.0); npc.Active = false; } //If the next segment forward has died, become a head if (npc.type == NPCType.N14_EATER_OF_WORLDS_BODY && !Main.npcs[(int)npc.ai[1]].Active) { npc.type = NPCType.N13_EATER_OF_WORLDS_HEAD; int num52 = npc.whoAmI; float num53 = (float)npc.life / (float)npc.lifeMax; float num54 = npc.ai[0]; //npc.SetDefaults(npc.Type, -1f); //npc = Registries.NPC.Create(npc.Type); WTF!? Registries.NPC.SetDefaults(npc, 13); //FIXME: remember to tweak npc.Active = true; npc.life = (int)((float)npc.lifeMax * num53); npc.ai[0] = num54; npc.TargetClosest(true); npc.netUpdate = true; npc.whoAmI = num52; } //If the next segment behind us has died, become a tail if (npc.type == NPCType.N14_EATER_OF_WORLDS_BODY && !Main.npcs[(int)npc.ai[0]].Active) { npc.type = NPCType.N15_EATER_OF_WORLDS_TAIL; int num55 = npc.whoAmI; float num56 = (float)npc.life / (float)npc.lifeMax; float num57 = npc.ai[1]; //npc.SetDefaults(npc.Type, -1f); //npc = Registries.NPC.Create(npc.Type); Registries.NPC.SetDefaults(npc, 14); //FIXME: remember to tweak npc.Active = true; npc.life = (int)((float)npc.lifeMax * num56); npc.ai[1] = num57; npc.TargetClosest(true); npc.netUpdate = true; npc.whoAmI = num55; } if (npc.life == 0) { bool flag6 = true; for (int l = 0; l < MAX_NPCS; l++) { if (Main.npcs[l].Active && (Main.npcs[l].type == NPCType.N13_EATER_OF_WORLDS_HEAD || Main.npcs[l].type == NPCType.N14_EATER_OF_WORLDS_BODY || Main.npcs[l].type == NPCType.N15_EATER_OF_WORLDS_TAIL)) { flag6 = false; break; } } if (flag6) { npc.boss = true; npc.NPCLoot(); } } } if (!npc.Active) { NetMessage.SendData(28, -1, -1, "", npc.whoAmI, -1f, 0f, 0f, 0); } int num58 = (int)(npc.Position.X / 16f) - 1; int num59 = (int)((npc.Position.X + (float)npc.Width) / 16f) + 2; int num60 = (int)(npc.Position.Y / 16f) - 1; int num61 = (int)((npc.Position.Y + (float)npc.Height) / 16f) + 2; if (num58 < 0) { num58 = 0; } if (num59 > Main.maxTilesX) { num59 = Main.maxTilesX; } if (num60 < 0) { num60 = 0; } if (num61 > Main.maxTilesY) { num61 = Main.maxTilesY; } bool flag7 = false; for (int m = num58; m < num59; m++) { for (int n = num60; n < num61; n++) { if (Main.tile.At(m, n).Exists && ((Main.tile.At(m, n).Active && (Main.tileSolid[(int)Main.tile.At(m, n).Type] || (Main.tileSolidTop[(int)Main.tile.At(m, n).Type] && Main.tile.At(m, n).FrameY == 0))) || Main.tile.At(m, n).Liquid > 64)) { Vector2 vector9; vector9.X = (float)(m * 16); vector9.Y = (float)(n * 16); if (npc.Position.X + (float)npc.Width > vector9.X && npc.Position.X < vector9.X + 16f && npc.Position.Y + (float)npc.Height > vector9.Y && npc.Position.Y < vector9.Y + 16f) { flag7 = true; if (Main.rand.Next(40) == 0 && Main.tile.At(m, n).Active) { WorldModify.KillTile(m, n, true, true, false); } //if (Main.tile.At(m, n).Type == 2) //{ // byte arg_4656_0 = Main.tile.At(m, n - 1).Type; //} } } } } if (!flag7 && (npc.Type == 7 || npc.Type == 10 || npc.Type == 13 || npc.Type == 39)) { Rectangle rectangle = new Rectangle((int)npc.Position.X, (int)npc.Position.Y, npc.Width, npc.Height); int num62 = 1000; bool flag8 = true; for (int num63 = 0; num63 < 255; num63++) { if (Main.players[num63].Active) { Rectangle rectangle2 = new Rectangle((int)Main.players[num63].Position.X - num62, (int)Main.players[num63].Position.Y - num62, num62 * 2, num62 * 2); if (rectangle.Intersects(rectangle2)) { flag8 = false; break; } } } if (flag8) { flag7 = true; } } float num64 = 8f; float num65 = 0.07f; if (npc.Type == 10) { num64 = 6f; num65 = 0.05f; } if (npc.Type == 13) { num64 = 10f; num65 = 0.07f; } Vector2 vector10 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num66 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector10.X; float num67 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector10.Y; float num68 = (float)Math.Sqrt((double)(num66 * num66 + num67 * num67)); if (npc.ai[1] > 0f) { num66 = Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) - vector10.X; num67 = Main.npcs[(int)npc.ai[1]].Position.Y + (float)(Main.npcs[(int)npc.ai[1]].Height / 2) - vector10.Y; npc.rotation = (float)Math.Atan2((double)num67, (double)num66) + 1.57f; num68 = (float)Math.Sqrt((double)(num66 * num66 + num67 * num67)); num68 = (num68 - (float)npc.Width) / num68; num66 *= num68; num67 *= num68; npc.Velocity = default(Vector2); npc.Position.X = npc.Position.X + num66; npc.Position.Y = npc.Position.Y + num67; return; } if (!flag7) { npc.TargetClosest(true); npc.Velocity.Y = npc.Velocity.Y + 0.11f; if (npc.Velocity.Y > num64) { npc.Velocity.Y = num64; } if ((double)(Math.Abs(npc.Velocity.X) + Math.Abs(npc.Velocity.Y)) < (double)num64 * 0.4) { if (npc.Velocity.X < 0f) { npc.Velocity.X = npc.Velocity.X - num65 * 1.1f; } else { npc.Velocity.X = npc.Velocity.X + num65 * 1.1f; } } else { if (npc.Velocity.Y == num64) { if (npc.Velocity.X < num66) { npc.Velocity.X = npc.Velocity.X + num65; } else { if (npc.Velocity.X > num66) { npc.Velocity.X = npc.Velocity.X - num65; } } } else { if (npc.Velocity.Y > 4f) { if (npc.Velocity.X < 0f) { npc.Velocity.X = npc.Velocity.X + num65 * 0.9f; } else { npc.Velocity.X = npc.Velocity.X - num65 * 0.9f; } } } } } else { if (npc.soundDelay == 0) { float num69 = num68 / 40f; if (num69 < 10f) { num69 = 10f; } if (num69 > 20f) { num69 = 20f; } npc.soundDelay = (int)num69; } num68 = (float)Math.Sqrt((double)(num66 * num66 + num67 * num67)); float num70 = Math.Abs(num66); float num71 = Math.Abs(num67); num68 = num64 / num68; num66 *= num68; num67 *= num68; if ((npc.Type == 13 || npc.Type == 7) && !Main.players[npc.target].zoneEvil) { bool flag9 = true; for (int num72 = 0; num72 < 255; num72++) { if (Main.players[num72].Active && !Main.players[num72].dead && Main.players[num72].zoneEvil) { flag9 = false; } } if (flag9) { if ((double)(npc.Position.Y / 16f) > (Main.rockLayer + (double)Main.maxTilesY) / 2.0) { npc.Active = false; int num73 = (int)npc.ai[0]; while (num73 > 0 && num73 < MAX_NPCS && Main.npcs[num73].Active && Main.npcs[num73].aiStyle == npc.aiStyle) { int num74 = (int)Main.npcs[num73].ai[0]; Main.npcs[num73].Active = false; npc.life = 0; NetMessage.SendData(23, -1, -1, "", num73, 0f, 0f, 0f, 0); num73 = num74; } NetMessage.SendData(23, -1, -1, "", npc.whoAmI, 0f, 0f, 0f, 0); } num66 = 0f; num67 = num64; } } if ((npc.Velocity.X > 0f && num66 > 0f) || (npc.Velocity.X < 0f && num66 < 0f) || (npc.Velocity.Y > 0f && num67 > 0f) || (npc.Velocity.Y < 0f && num67 < 0f)) { if (npc.Velocity.X < num66) { npc.Velocity.X = npc.Velocity.X + num65; } else { if (npc.Velocity.X > num66) { npc.Velocity.X = npc.Velocity.X - num65; } } if (npc.Velocity.Y < num67) { npc.Velocity.Y = npc.Velocity.Y + num65; } else { if (npc.Velocity.Y > num67) { npc.Velocity.Y = npc.Velocity.Y - num65; } } } else { if (num70 > num71) { if (npc.Velocity.X < num66) { npc.Velocity.X = npc.Velocity.X + num65 * 1.1f; } else { if (npc.Velocity.X > num66) { npc.Velocity.X = npc.Velocity.X - num65 * 1.1f; } } if ((double)(Math.Abs(npc.Velocity.X) + Math.Abs(npc.Velocity.Y)) < (double)num64 * 0.5) { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y + num65; } else { npc.Velocity.Y = npc.Velocity.Y - num65; } } } else { if (npc.Velocity.Y < num67) { npc.Velocity.Y = npc.Velocity.Y + num65 * 1.1f; } else { if (npc.Velocity.Y > num67) { npc.Velocity.Y = npc.Velocity.Y - num65 * 1.1f; } } if ((double)(Math.Abs(npc.Velocity.X) + Math.Abs(npc.Velocity.Y)) < (double)num64 * 0.5) { if (npc.Velocity.X > 0f) { npc.Velocity.X = npc.Velocity.X + num65; } else { npc.Velocity.X = npc.Velocity.X - num65; } } } } } npc.rotation = (float)Math.Atan2((double)npc.Velocity.Y, (double)npc.Velocity.X) + 1.57f; return; }
// 37 private void AITheDestroyer(NPC npc, bool flag) { if (npc.ai[3] > 0f) { npc.realLife = (int)npc.ai[3]; } if (npc.target < 0 || npc.target == 255 || Main.players[npc.target].dead) { npc.TargetClosest(true); } if (npc.Type > 134) { bool flag34 = false; if (npc.ai[1] <= 0f) { flag34 = true; } else { if (Main.npcs[(int)npc.ai[1]].life <= 0) { flag34 = true; } } if (flag34) { npc.life = 0; npc.HitEffect(0, 10.0); npc.checkDead(); } } if (npc.ai[0] == 0f && npc.Type == 134) { npc.ai[3] = (float)npc.whoAmI; npc.realLife = npc.whoAmI; int num447 = npc.whoAmI; int num448 = 80; for (int num449 = 0; num449 <= num448; num449++) { int num450 = 135; if (num449 == num448) { num450 = 136; } int num451 = NPC.NewNPC((int)(npc.Position.X + (float)(npc.Width / 2)), (int)(npc.Position.Y + (float)npc.Height), num450, npc.whoAmI); Main.npcs[num451].ai[3] = (float)npc.whoAmI; Main.npcs[num451].realLife = npc.whoAmI; Main.npcs[num451].ai[1] = (float)num447; Main.npcs[num447].ai[0] = (float)num451; NetMessage.SendData(23, -1, -1, "", num451, 0f, 0f, 0f, 0); num447 = num451; } } if (npc.Type == 135) { npc.localAI[0] += (float)Main.rand.Next(4); if (npc.localAI[0] >= (float)Main.rand.Next(1400, 26000)) { npc.localAI[0] = 0f; npc.TargetClosest(true); if (Collision.CanHit(npc.Position, npc.Width, npc.Height, Main.players[npc.target].Position, Main.players[npc.target].Width, Main.players[npc.target].Height)) { float num452 = 8f; Vector2 vector56 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)(npc.Height / 2)); float num453 = Main.players[npc.target].Position.X + (float)Main.players[npc.target].Width * 0.5f - vector56.X + (float)Main.rand.Next(-20, 21); float num454 = Main.players[npc.target].Position.Y + (float)Main.players[npc.target].Height * 0.5f - vector56.Y + (float)Main.rand.Next(-20, 21); float num455 = (float)Math.Sqrt((double)(num453 * num453 + num454 * num454)); num455 = num452 / num455; num453 *= num455; num454 *= num455; num453 += (float)Main.rand.Next(-20, 21) * 0.05f; num454 += (float)Main.rand.Next(-20, 21) * 0.05f; int num456 = 22; int num457 = 100; vector56.X += num453 * 5f; vector56.Y += num454 * 5f; int num458 = Projectile.NewProjectile(vector56.X, vector56.Y, num453, num454, num457, num456, 0f, Main.myPlayer); Main.projectile[num458].timeLeft = 300; npc.netUpdate = true; } } } int num459 = (int)(npc.Position.X / 16f) - 1; int num460 = (int)((npc.Position.X + (float)npc.Width) / 16f) + 2; int num461 = (int)(npc.Position.Y / 16f) - 1; int num462 = (int)((npc.Position.Y + (float)npc.Height) / 16f) + 2; if (num459 < 0) { num459 = 0; } if (num460 > Main.maxTilesX) { num460 = Main.maxTilesX; } if (num461 < 0) { num461 = 0; } if (num462 > Main.maxTilesY) { num462 = Main.maxTilesY; } bool flag35 = false; if (!flag35) { for (int num463 = num459; num463 < num460; num463++) { for (int num464 = num461; num464 < num462; num464++) { if (((Main.tile.At(num463, num464).Active && (Main.tileSolid[(int)Main.tile.At(num463, num464).Type] || (Main.tileSolidTop[(int)Main.tile.At(num463, num464).Type] && Main.tile.At(num463, num464).FrameY == 0))) || Main.tile.At(num463, num464).Liquid > 64)) { Vector2 vector57; vector57.X = (float)(num463 * 16); vector57.Y = (float)(num464 * 16); if (npc.Position.X + (float)npc.Width > vector57.X && npc.Position.X < vector57.X + 16f && npc.Position.Y + (float)npc.Height > vector57.Y && npc.Position.Y < vector57.Y + 16f) { flag35 = true; break; } } } } } if (!flag35) { npc.localAI[1] = 1f; if (npc.Type == 134) { Rectangle rectangle11 = new Rectangle((int)npc.Position.X, (int)npc.Position.Y, npc.Width, npc.Height); int num465 = 1000; bool flag36 = true; if (npc.Position.Y > Main.players[npc.target].Position.Y) { for (int num466 = 0; num466 < 255; num466++) { if (Main.players[num466].Active) { Rectangle rectangle12 = new Rectangle((int)Main.players[num466].Position.X - num465, (int)Main.players[num466].Position.Y - num465, num465 * 2, num465 * 2); if (rectangle11.Intersects(rectangle12)) { flag36 = false; break; } } } if (flag36) { flag35 = true; } } } } else { npc.localAI[1] = 0f; } float num467 = 16f; if (Main.dayTime || Main.players[npc.target].dead) { flag35 = false; npc.Velocity.Y = npc.Velocity.Y + 1f; if ((double)npc.Position.Y > Main.worldSurface * 16.0) { npc.Velocity.Y = npc.Velocity.Y + 1f; num467 = 32f; } if ((double)npc.Position.Y > Main.rockLayer * 16.0) { for (int num468 = 0; num468 < 200; num468++) { if (Main.npcs[num468].aiStyle == npc.aiStyle) { Main.npcs[num468].Active = false; } } } } float num469 = 0.1f; float num470 = 0.15f; Vector2 vector58 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num471 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2); float num472 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2); num471 = (float)((int)(num471 / 16f) * 16); num472 = (float)((int)(num472 / 16f) * 16); vector58.X = (float)((int)(vector58.X / 16f) * 16); vector58.Y = (float)((int)(vector58.Y / 16f) * 16); num471 -= vector58.X; num472 -= vector58.Y; float num473 = (float)Math.Sqrt((double)(num471 * num471 + num472 * num472)); if (npc.ai[1] > 0f && npc.ai[1] < (float)Main.npcs.Length) { try { vector58 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); num471 = Main.npcs[(int)npc.ai[1]].Position.X + (float)(Main.npcs[(int)npc.ai[1]].Width / 2) - vector58.X; num472 = Main.npcs[(int)npc.ai[1]].Position.Y + (float)(Main.npcs[(int)npc.ai[1]].Height / 2) - vector58.Y; } catch { } npc.rotation = (float)Math.Atan2((double)num472, (double)num471) + 1.57f; num473 = (float)Math.Sqrt((double)(num471 * num471 + num472 * num472)); int num474 = (int)(44f * npc.scale); num473 = (num473 - (float)num474) / num473; num471 *= num473; num472 *= num473; npc.Velocity = default(Vector2); npc.Position.X = npc.Position.X + num471; npc.Position.Y = npc.Position.Y + num472; return; } if (!flag35) { npc.TargetClosest(true); npc.Velocity.Y = npc.Velocity.Y + 0.15f; if (npc.Velocity.Y > num467) { npc.Velocity.Y = num467; } if ((double)(Math.Abs(npc.Velocity.X) + Math.Abs(npc.Velocity.Y)) < (double)num467 * 0.4) { if (npc.Velocity.X < 0f) { npc.Velocity.X = npc.Velocity.X - num469 * 1.1f; } else { npc.Velocity.X = npc.Velocity.X + num469 * 1.1f; } } else { if (npc.Velocity.Y == num467) { if (npc.Velocity.X < num471) { npc.Velocity.X = npc.Velocity.X + num469; } else { if (npc.Velocity.X > num471) { npc.Velocity.X = npc.Velocity.X - num469; } } } else { if (npc.Velocity.Y > 4f) { if (npc.Velocity.X < 0f) { npc.Velocity.X = npc.Velocity.X + num469 * 0.9f; } else { npc.Velocity.X = npc.Velocity.X - num469 * 0.9f; } } } } } else { if (npc.soundDelay == 0) { float num475 = num473 / 40f; if (num475 < 10f) { num475 = 10f; } if (num475 > 20f) { num475 = 20f; } npc.soundDelay = (int)num475; } num473 = (float)Math.Sqrt((double)(num471 * num471 + num472 * num472)); float num476 = Math.Abs(num471); float num477 = Math.Abs(num472); float num478 = num467 / num473; num471 *= num478; num472 *= num478; if (((npc.Velocity.X > 0f && num471 > 0f) || (npc.Velocity.X < 0f && num471 < 0f)) && ((npc.Velocity.Y > 0f && num472 > 0f) || (npc.Velocity.Y < 0f && num472 < 0f))) { if (npc.Velocity.X < num471) { npc.Velocity.X = npc.Velocity.X + num470; } else { if (npc.Velocity.X > num471) { npc.Velocity.X = npc.Velocity.X - num470; } } if (npc.Velocity.Y < num472) { npc.Velocity.Y = npc.Velocity.Y + num470; } else { if (npc.Velocity.Y > num472) { npc.Velocity.Y = npc.Velocity.Y - num470; } } } if ((npc.Velocity.X > 0f && num471 > 0f) || (npc.Velocity.X < 0f && num471 < 0f) || (npc.Velocity.Y > 0f && num472 > 0f) || (npc.Velocity.Y < 0f && num472 < 0f)) { if (npc.Velocity.X < num471) { npc.Velocity.X = npc.Velocity.X + num469; } else { if (npc.Velocity.X > num471) { npc.Velocity.X = npc.Velocity.X - num469; } } if (npc.Velocity.Y < num472) { npc.Velocity.Y = npc.Velocity.Y + num469; } else { if (npc.Velocity.Y > num472) { npc.Velocity.Y = npc.Velocity.Y - num469; } } if ((double)Math.Abs(num472) < (double)num467 * 0.2 && ((npc.Velocity.X > 0f && num471 < 0f) || (npc.Velocity.X < 0f && num471 > 0f))) { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y + num469 * 2f; } else { npc.Velocity.Y = npc.Velocity.Y - num469 * 2f; } } if ((double)Math.Abs(num471) < (double)num467 * 0.2 && ((npc.Velocity.Y > 0f && num472 < 0f) || (npc.Velocity.Y < 0f && num472 > 0f))) { if (npc.Velocity.X > 0f) { npc.Velocity.X = npc.Velocity.X + num469 * 2f; } else { npc.Velocity.X = npc.Velocity.X - num469 * 2f; } } } else { if (num476 > num477) { if (npc.Velocity.X < num471) { npc.Velocity.X = npc.Velocity.X + num469 * 1.1f; } else { if (npc.Velocity.X > num471) { npc.Velocity.X = npc.Velocity.X - num469 * 1.1f; } } if ((double)(Math.Abs(npc.Velocity.X) + Math.Abs(npc.Velocity.Y)) < (double)num467 * 0.5) { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y + num469; } else { npc.Velocity.Y = npc.Velocity.Y - num469; } } } else { if (npc.Velocity.Y < num472) { npc.Velocity.Y = npc.Velocity.Y + num469 * 1.1f; } else { if (npc.Velocity.Y > num472) { npc.Velocity.Y = npc.Velocity.Y - num469 * 1.1f; } } if ((double)(Math.Abs(npc.Velocity.X) + Math.Abs(npc.Velocity.Y)) < (double)num467 * 0.5) { if (npc.Velocity.X > 0f) { npc.Velocity.X = npc.Velocity.X + num469; } else { npc.Velocity.X = npc.Velocity.X - num469; } } } } } npc.rotation = (float)Math.Atan2((double)npc.Velocity.Y, (double)npc.Velocity.X) + 1.57f; if (npc.Type == 134) { if (flag35) { if (npc.localAI[0] != 1f) { npc.netUpdate = true; } npc.localAI[0] = 1f; } else { if (npc.localAI[0] != 0f) { npc.netUpdate = true; } npc.localAI[0] = 0f; } if (((npc.Velocity.X > 0f && npc.oldVelocity.X < 0f) || (npc.Velocity.X < 0f && npc.oldVelocity.X > 0f) || (npc.Velocity.Y > 0f && npc.oldVelocity.Y < 0f) || (npc.Velocity.Y < 0f && npc.oldVelocity.Y > 0f)) && !npc.justHit) { npc.netUpdate = true; } } }
// 19 private void AIAntlion(NPC npc, bool flag) { npc.TargetClosest(true); float num174 = 12f; Vector2 vector22 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num175 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector22.X; float num176 = Main.players[npc.target].Position.Y - vector22.Y; float num177 = (float)Math.Sqrt((double)(num175 * num175 + num176 * num176)); num177 = num174 / num177; num175 *= num177; num176 *= num177; bool flag18 = false; if (npc.directionY < 0) { npc.rotation = (float)(Math.Atan2((double)num176, (double)num175) + 1.57); flag18 = ((double)npc.rotation >= -1.2 && (double)npc.rotation <= 1.2); if ((double)npc.rotation < -0.8) { npc.rotation = -0.8f; } else { if ((double)npc.rotation > 0.8) { npc.rotation = 0.8f; } } if (npc.Velocity.X != 0f) { npc.Velocity.X = npc.Velocity.X * 0.9f; if ((double)npc.Velocity.X > -0.1 || (double)npc.Velocity.X < 0.1) { npc.netUpdate = true; npc.Velocity.X = 0f; } } } if (npc.ai[0] > 0f) { npc.ai[0] -= 1f; } if (flag18 && npc.ai[0] == 0f && Collision.CanHit(npc.Position, npc.Width, npc.Height, Main.players[npc.target].Position, Main.players[npc.target].Width, Main.players[npc.target].Height)) { npc.ai[0] = 200f; int num178 = 10; int num179 = 31; int num180 = Projectile.NewProjectile(vector22.X, vector22.Y, num175, num176, num179, num178, 0f, Main.myPlayer); Main.projectile[num180].ai[0] = 2f; Main.projectile[num180].timeLeft = 300; Main.projectile[num180].friendly = false; NetMessage.SendData(27, -1, -1, "", num180, 0f, 0f, 0f, 0); npc.netUpdate = true; } try { int num181 = (int)npc.Position.X / 16; int num182 = (int)(npc.Position.X + (float)(npc.Width / 2)) / 16; int num183 = (int)(npc.Position.X + (float)npc.Width) / 16; int num184 = (int)(npc.Position.Y + (float)npc.Height) / 16; bool flag19 = false; if ((Main.tile.At(num181, num184).Active && Main.tileSolid[ (int)Main.tile.At(num181, num184).Type]) || (Main.tile.At(num182, num184).Active && Main.tileSolid[ (int)Main.tile.At(num182, num184).Type]) || (Main.tile.At(num183, num184).Active && Main.tileSolid[ (int)Main.tile.At(num183, num184).Type])) { flag19 = true; } if (flag19) { npc.noGravity = true; npc.noTileCollide = true; npc.Velocity.Y = -0.2f; } else { npc.noGravity = false; npc.noTileCollide = false; } return; } catch { return; } }
// 29 private void AITheHungry(NPC npc, bool flag) { if (npc.justHit) npc.ai[1] = 10f; if (Main.WallOfFlesh < 0) { npc.Active = false; return; } npc.TargetClosest(true); float num309 = 0.1f; float num310 = 300f; if ((double)Main.npcs[Main.WallOfFlesh].life < (double)Main.npcs[Main.WallOfFlesh].lifeMax * 0.25) { npc.damage = 75; npc.defense = 40; num310 = 900f; } else if ((double)Main.npcs[Main.WallOfFlesh].life < (double)Main.npcs[Main.WallOfFlesh].lifeMax * 0.5) { npc.damage = 60; npc.defense = 30; num310 = 700f; } else if ((double)Main.npcs[Main.WallOfFlesh].life < (double)Main.npcs[Main.WallOfFlesh].lifeMax * 0.75) { npc.damage = 45; npc.defense = 20; num310 = 500f; } float num311 = Main.npcs[Main.WallOfFlesh].Position.X + (float)(Main.npcs[Main.WallOfFlesh].Width / 2); float num312 = Main.npcs[Main.WallOfFlesh].Position.Y; float num313 = (float)(Main.WallOfFlesh_B - Main.WallOfFlesh_T); num312 = (float)Main.WallOfFlesh_T + num313 * npc.ai[0]; npc.ai[2] += 1f; if (npc.ai[2] > 100f) { num310 = (float)((int)(num310 * 1.3f)); if (npc.ai[2] > 200f) npc.ai[2] = 0f; } Vector2 vector31 = new Vector2(num311, num312); float num314 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - (float)(npc.Width / 2) - vector31.X; float num315 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - (float)(npc.Height / 2) - vector31.Y; float num316 = (float)Math.Sqrt((double)(num314 * num314 + num315 * num315)); if (npc.ai[1] == 0f) { if (num316 > num310) { num316 = num310 / num316; num314 *= num316; num315 *= num316; } if (npc.Position.X < num311 + num314) { npc.Velocity.X = npc.Velocity.X + num309; if (npc.Velocity.X < 0f && num314 > 0f) npc.Velocity.X = npc.Velocity.X + num309 * 2.5f; } else if (npc.Position.X > num311 + num314) { npc.Velocity.X = npc.Velocity.X - num309; if (npc.Velocity.X > 0f && num314 < 0f) npc.Velocity.X = npc.Velocity.X - num309 * 2.5f; } if (npc.Position.Y < num312 + num315) { npc.Velocity.Y = npc.Velocity.Y + num309; if (npc.Velocity.Y < 0f && num315 > 0f) npc.Velocity.Y = npc.Velocity.Y + num309 * 2.5f; } else if (npc.Position.Y > num312 + num315) { npc.Velocity.Y = npc.Velocity.Y - num309; if (npc.Velocity.Y > 0f && num315 < 0f) npc.Velocity.Y = npc.Velocity.Y - num309 * 2.5f; } if (npc.Velocity.X > 4f) npc.Velocity.X = 4f; if (npc.Velocity.X < -4f) npc.Velocity.X = -4f; if (npc.Velocity.Y > 4f) npc.Velocity.Y = 4f; if (npc.Velocity.Y < -4f) npc.Velocity.Y = -4f; } else { if (npc.ai[1] > 0f) npc.ai[1] -= 1f; else npc.ai[1] = 0f; } if (num314 > 0f) { npc.spriteDirection = 1; npc.rotation = (float)Math.Atan2((double)num315, (double)num314); } if (num314 < 0f) { npc.spriteDirection = -1; npc.rotation = (float)Math.Atan2((double)num315, (double)num314) + 3.14f; } }
// 21 private void AIBlazingWheel(NPC npc, bool flag) { if (npc.ai[0] == 0f) { npc.TargetClosest(true); npc.directionY = 1; npc.ai[0] = 1f; } int num189 = 6; if (npc.ai[1] == 0f) { npc.rotation += (float)(npc.direction * npc.directionY) * 0.13f; if (npc.collideY) { npc.ai[0] = 2f; } if (!npc.collideY && npc.ai[0] == 2f) { npc.direction = -npc.direction; npc.ai[1] = 1f; npc.ai[0] = 1f; } if (npc.collideX) { npc.directionY = -npc.directionY; npc.ai[1] = 1f; } } else { npc.rotation -= (float)(npc.direction * npc.directionY) * 0.13f; if (npc.collideX) { npc.ai[0] = 2f; } if (!npc.collideX && npc.ai[0] == 2f) { npc.directionY = -npc.directionY; npc.ai[1] = 0f; npc.ai[0] = 1f; } if (npc.collideY) { npc.direction = -npc.direction; npc.ai[1] = 0f; } } npc.Velocity.X = (float)(num189 * npc.direction); npc.Velocity.Y = (float)(num189 * npc.directionY); return; }
// 23 private void AITool(NPC npc, bool flag) { npc.noGravity = true; npc.noTileCollide = true; if (npc.target < 0 || npc.target == 255 || Main.players[npc.target].dead) { npc.TargetClosest(true); } if (npc.ai[0] == 0f) { float num271 = 9f; Vector2 vector28 = new Vector2(npc.Position.X + (float)npc.Width * 0.5f, npc.Position.Y + (float)npc.Height * 0.5f); float num272 = Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2) - vector28.X; float num273 = Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2) - vector28.Y; float num274 = (float)Math.Sqrt((double)(num272 * num272 + num273 * num273)); num274 = num271 / num274; num272 *= num274; num273 *= num274; npc.Velocity.X = num272; npc.Velocity.Y = num273; npc.rotation = (float)Math.Atan2((double)npc.Velocity.Y, (double)npc.Velocity.X) + 0.785f; npc.ai[0] = 1f; npc.ai[1] = 0f; return; } if (npc.ai[0] == 1f) { if (npc.justHit) { npc.ai[0] = 2f; npc.ai[1] = 0f; } npc.Velocity *= 0.99f; npc.ai[1] += 1f; if (npc.ai[1] >= 100f) { npc.ai[0] = 2f; npc.ai[1] = 0f; npc.Velocity.X = 0f; npc.Velocity.Y = 0f; return; } } else { if (npc.justHit) { npc.ai[0] = 2f; npc.ai[1] = 0f; } npc.Velocity *= 0.96f; npc.ai[1] += 1f; float num275 = npc.ai[1] / 120f; num275 = 0.1f + num275 * 0.4f; npc.rotation += num275 * (float)npc.direction; if (npc.ai[1] >= 120f) { npc.netUpdate = true; npc.ai[0] = 0f; npc.ai[1] = 0f; return; } } }
// 2 private void AIDemonEye(NPC npc, bool flag) { npc.noGravity = true; if (npc.collideX) { npc.Velocity.X = npc.oldVelocity.X * -0.5f; if (npc.direction == -1 && npc.Velocity.X > 0f && npc.Velocity.X < 2f) { npc.Velocity.X = 2f; } if (npc.direction == 1 && npc.Velocity.X < 0f && npc.Velocity.X > -2f) { npc.Velocity.X = -2f; } } if (npc.collideY) { npc.Velocity.Y = npc.oldVelocity.Y * -0.5f; if (npc.Velocity.Y > 0f && npc.Velocity.Y < 1f) { npc.Velocity.Y = 1f; } if (npc.Velocity.Y < 0f && npc.Velocity.Y > -1f) { npc.Velocity.Y = -1f; } } if (Main.dayTime && (double)npc.Position.Y <= Main.worldSurface * 16.0 && npc.Type == 2) { if (npc.timeLeft > 10) { npc.timeLeft = 10; } npc.directionY = -1; if (npc.Velocity.Y > 0f) { npc.direction = 1; } npc.direction = -1; if (npc.Velocity.X > 0f) { npc.direction = 1; } } else { npc.TargetClosest(true); } if (npc.direction == -1 && npc.Velocity.X > -4f) { npc.Velocity.X = npc.Velocity.X - 0.1f; if (npc.Velocity.X > 4f) { npc.Velocity.X = npc.Velocity.X - 0.1f; } else { if (npc.Velocity.X > 0f) { npc.Velocity.X = npc.Velocity.X + 0.05f; } } if (npc.Velocity.X < -4f) { npc.Velocity.X = -4f; } } else { if (npc.direction == 1 && npc.Velocity.X < 4f) { npc.Velocity.X = npc.Velocity.X + 0.1f; if (npc.Velocity.X < -4f) { npc.Velocity.X = npc.Velocity.X + 0.1f; } else { if (npc.Velocity.X < 0f) { npc.Velocity.X = npc.Velocity.X - 0.05f; } } if (npc.Velocity.X > 4f) { npc.Velocity.X = 4f; } } } if (npc.directionY == -1 && (double)npc.Velocity.Y > -1.5) { npc.Velocity.Y = npc.Velocity.Y - 0.04f; if ((double)npc.Velocity.Y > 1.5) { npc.Velocity.Y = npc.Velocity.Y - 0.05f; } else { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y + 0.03f; } } if ((double)npc.Velocity.Y < -1.5) { npc.Velocity.Y = -1.5f; } } else { if (npc.directionY == 1 && (double)npc.Velocity.Y < 1.5) { npc.Velocity.Y = npc.Velocity.Y + 0.04f; if ((double)npc.Velocity.Y < -1.5) { npc.Velocity.Y = npc.Velocity.Y + 0.05f; } else { if (npc.Velocity.Y < 0f) { npc.Velocity.Y = npc.Velocity.Y - 0.03f; } } if ((double)npc.Velocity.Y > 1.5) { npc.Velocity.Y = 1.5f; } } } if (npc.wet) { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.95f; } npc.Velocity.Y = npc.Velocity.Y - 0.5f; if (npc.Velocity.Y < -4f) { npc.Velocity.Y = -4f; } npc.TargetClosest(true); return; } }
// 26 private void AIUnicorn(NPC npc, bool flag) { int num281 = 30; bool flag32 = false; if (npc.Velocity.Y == 0f && ((npc.Velocity.X > 0f && npc.direction < 0) || (npc.Velocity.X < 0f && npc.direction > 0))) { flag32 = true; npc.ai[3] += 1f; } if (npc.Position.X == npc.oldPosition.X || npc.ai[3] >= (float)num281 || flag32) { npc.ai[3] += 1f; } else { if (npc.ai[3] > 0f) { npc.ai[3] -= 1f; } } if (npc.ai[3] > (float)(num281 * 10)) { npc.ai[3] = 0f; } if (npc.justHit) { npc.ai[3] = 0f; } if (npc.ai[3] == (float)num281) { npc.netUpdate = true; } if (npc.ai[3] < (float)num281) { npc.TargetClosest(true); } else { if (npc.Velocity.X == 0f) { if (npc.Velocity.Y == 0f) { npc.ai[0] += 1f; if (npc.ai[0] >= 2f) { npc.direction *= -1; npc.spriteDirection = npc.direction; npc.ai[0] = 0f; } } } else { npc.ai[0] = 0f; } npc.directionY = -1; if (npc.direction == 0) { npc.direction = 1; } } float num282 = 6f; if (npc.Velocity.Y == 0f || npc.wet || (npc.Velocity.X <= 0f && npc.direction < 0) || (npc.Velocity.X >= 0f && npc.direction > 0)) { if (npc.Velocity.X < -num282 || npc.Velocity.X > num282) { if (npc.Velocity.Y == 0f) { npc.Velocity *= 0.8f; } } else { if (npc.Velocity.X < num282 && npc.direction == 1) { npc.Velocity.X = npc.Velocity.X + 0.07f; if (npc.Velocity.X > num282) { npc.Velocity.X = num282; } } else { if (npc.Velocity.X > -num282 && npc.direction == -1) { npc.Velocity.X = npc.Velocity.X - 0.07f; if (npc.Velocity.X < -num282) { npc.Velocity.X = -num282; } } } } } if (npc.Velocity.Y == 0f) { int num283 = (int)((npc.Position.X + (float)(npc.Width / 2) + (float)((npc.Width / 2 + 2) * npc.direction) + npc.Velocity.X * 5f) / 16f); int num284 = (int)((npc.Position.Y + (float)npc.Height - 15f) / 16f); if ((npc.Velocity.X < 0f && npc.spriteDirection == -1) || (npc.Velocity.X > 0f && npc.spriteDirection == 1)) { if (Main.tile.At(num283, num284 - 2).Active && Main.tileSolid[(int)Main.tile.At(num283, num284 - 2).Type]) { if (Main.tile.At(num283, num284 - 3).Active && Main.tileSolid[(int)Main.tile.At(num283, num284 - 3).Type]) { npc.Velocity.Y = -8.5f; npc.netUpdate = true; return; } npc.Velocity.Y = -7.5f; npc.netUpdate = true; return; } else { if (Main.tile.At(num283, num284 - 1).Active && Main.tileSolid[(int)Main.tile.At(num283, num284 - 1).Type]) { npc.Velocity.Y = -7f; npc.netUpdate = true; return; } if (Main.tile.At(num283, num284).Active && Main.tileSolid[(int)Main.tile.At(num283, num284).Type]) { npc.Velocity.Y = -6f; npc.netUpdate = true; return; } if ((npc.directionY < 0 || Math.Abs(npc.Velocity.X) > 3f) && (!Main.tile.At(num283, num284 + 1).Active || !Main.tileSolid[(int)Main.tile.At(num283, num284 + 1).Type]) && (!Main.tile.At(num283 + npc.direction, num284 + 1).Active || !Main.tileSolid[(int)Main.tile.At(num283 + npc.direction, num284 + 1).Type])) { npc.Velocity.Y = -8f; npc.netUpdate = true; return; } } } } }
// 3 private void AIFighter(NPC npc, bool flag) { int num3 = 60; bool flag2 = false; if (npc.Velocity.Y == 0f && ((npc.Velocity.X > 0f && npc.direction < 0) || (npc.Velocity.X < 0f && npc.direction > 0))) { flag2 = true; } if (npc.Position.X == npc.oldPosition.X || npc.ai[3] >= (float)num3 || flag2) { npc.ai[3] += 1f; } else { if ((double)Math.Abs(npc.Velocity.X) > 0.9 && npc.ai[3] > 0f) { npc.ai[3] -= 1f; } } if (npc.ai[3] > (float)(num3 * 10)) { npc.ai[3] = 0f; } if (npc.justHit) { npc.ai[3] = 0f; } if (npc.ai[3] == (float)num3) { npc.netUpdate = true; } if ((!Main.dayTime || (double)npc.Position.Y > Main.worldSurface * 16.0 || npc.Type == 26 || npc.Type == 27 || npc.Type == 28 || npc.Type == 31 || npc.Type == 47 || npc.Type == 67 || npc.Type == 73) && npc.ai[3] < (float)num3) { npc.TargetClosest(true); } else { if (Main.dayTime && (double)(npc.Position.Y / 16f) < Main.worldSurface && npc.timeLeft > 10) { npc.timeLeft = 10; } if (npc.Velocity.X == 0f) { if (npc.Velocity.Y == 0f) { npc.ai[0] += 1f; if (npc.ai[0] >= 2f) { npc.direction *= -1; npc.spriteDirection = npc.direction; npc.ai[0] = 0f; } } } else { npc.ai[0] = 0f; } if (npc.direction == 0) { npc.direction = 1; } } if (npc.Type == 27) { if (npc.Velocity.X < -2f || npc.Velocity.X > 2f) { if (npc.Velocity.Y == 0f) { npc.Velocity *= 0.8f; } } else { if (npc.Velocity.X < 2f && npc.direction == 1) { npc.Velocity.X = npc.Velocity.X + 0.07f; if (npc.Velocity.X > 2f) { npc.Velocity.X = 2f; } } else { if (npc.Velocity.X > -2f && npc.direction == -1) { npc.Velocity.X = npc.Velocity.X - 0.07f; if (npc.Velocity.X < -2f) { npc.Velocity.X = -2f; } } } } } else { if (npc.Type == 21 || npc.Type == 26 || npc.Type == 31 || npc.Type == 47 || npc.Type == 73) { if (npc.Velocity.X < -1.5f || npc.Velocity.X > 1.5f) { if (npc.Velocity.Y == 0f) { npc.Velocity *= 0.8f; } } else { if (npc.Velocity.X < 1.5f && npc.direction == 1) { npc.Velocity.X = npc.Velocity.X + 0.07f; if (npc.Velocity.X > 1.5f) { npc.Velocity.X = 1.5f; } } else { if (npc.Velocity.X > -1.5f && npc.direction == -1) { npc.Velocity.X = npc.Velocity.X - 0.07f; if (npc.Velocity.X < -1.5f) { npc.Velocity.X = -1.5f; } } } } } else { if (npc.Type == 67) { if (npc.Velocity.X < -0.5f || npc.Velocity.X > 0.5f) { if (npc.Velocity.Y == 0f) { npc.Velocity *= 0.7f; } } else { if (npc.Velocity.X < 0.5f && npc.direction == 1) { npc.Velocity.X = npc.Velocity.X + 0.03f; if (npc.Velocity.X > 0.5f) { npc.Velocity.X = 0.5f; } } else { if (npc.Velocity.X > -0.5f && npc.direction == -1) { npc.Velocity.X = npc.Velocity.X - 0.03f; if (npc.Velocity.X < -0.5f) { npc.Velocity.X = -0.5f; } } } } } else { if (npc.Velocity.X < -1f || npc.Velocity.X > 1f) { if (npc.Velocity.Y == 0f) { npc.Velocity *= 0.8f; } } else { if (npc.Velocity.X < 1f && npc.direction == 1) { npc.Velocity.X = npc.Velocity.X + 0.07f; if (npc.Velocity.X > 1f) { npc.Velocity.X = 1f; } } else { if (npc.Velocity.X > -1f && npc.direction == -1) { npc.Velocity.X = npc.Velocity.X - 0.07f; if (npc.Velocity.X < -1f) { npc.Velocity.X = -1f; } } } } } } } if (npc.Velocity.Y != 0f) { npc.ai[1] = 0f; npc.ai[2] = 0f; return; } int tileX = (int)((npc.Position.X + (float)(npc.Width / 2) + (float)(15 * npc.direction)) / 16f); int tileY = (int)((npc.Position.Y + (float)npc.Height - 15f) / 16f); if (!(npc.Type == 47 || npc.Type == 67)) { if (Main.tile.At(tileX, tileY - 1).Active && Main.tile.At(tileX, tileY - 1).Type == 10) { npc.ai[2] += 1f; npc.ai[3] = 0f; if (npc.ai[2] >= 60f) { if (!Main.bloodMoon && npc.Type == 3) { npc.ai[1] = 0f; } npc.Velocity.X = 0.5f * (float)(-(float)npc.direction); npc.ai[1] += 1f; if (npc.Type == 27) { npc.ai[1] += 1f; } if (npc.Type == 31) { npc.ai[1] += 6f; } npc.ai[2] = 0f; bool flag4 = false; if (npc.ai[1] >= 10f) { flag4 = true; npc.ai[1] = 10f; } WorldModify.KillTile(tileX, tileY - 1, true, false, false); if (flag4) { if (npc.Type == 26) { WorldModify.KillTile(tileX, tileY - 1, false, false, false); NetMessage.SendData(17, -1, -1, "", 0, (float)tileX, (float)(tileY - 1), 0f, 0); return; } else { bool flag5 = WorldModify.OpenDoor(tileX, tileY, npc.direction, npc); if (!flag5) { npc.ai[3] = (float)num3; npc.netUpdate = true; } else { NetMessage.SendData(19, -1, -1, "", 0, (float)tileX, (float)tileY, (float)npc.direction, 0); return; } } } } } else { if ((npc.Velocity.X < 0f && npc.spriteDirection == -1) || (npc.Velocity.X > 0f && npc.spriteDirection == 1)) { if (Main.tile.At(tileX, tileY - 2).Active && Main.tileSolid[(int)Main.tile.At(tileX, tileY - 2).Type]) { if (Main.tile.At(tileX, tileY - 3).Active && Main.tileSolid[(int)Main.tile.At(tileX, tileY - 3).Type]) { npc.Velocity.Y = -8f; npc.netUpdate = true; } else { npc.Velocity.Y = -7f; npc.netUpdate = true; } } else { if (Main.tile.At(tileX, tileY - 1).Active && Main.tileSolid[(int)Main.tile.At(tileX, tileY - 1).Type]) { npc.Velocity.Y = -6f; npc.netUpdate = true; } else { if (Main.tile.At(tileX, tileY).Active && Main.tileSolid[(int)Main.tile.At(tileX, tileY).Type]) { npc.Velocity.Y = -5f; npc.netUpdate = true; } else { if (npc.directionY < 0 && npc.Type != 67 && (!Main.tile.At(tileX, tileY + 1).Active || !Main.tileSolid[(int)Main.tile.At(tileX, tileY + 1).Type]) && (!Main.tile.At(tileX + npc.direction, tileY + 1).Active || !Main.tileSolid[(int)Main.tile.At(tileX + npc.direction, tileY + 1).Type])) { npc.Velocity.Y = -8f; npc.Velocity.X = npc.Velocity.X * 1.5f; npc.netUpdate = true; } else { npc.ai[1] = 0f; npc.ai[2] = 0f; } } } } } if ((npc.Type == 31 || npc.Type == 47) && npc.Velocity.Y == 0f && Math.Abs(npc.Position.X + (float)(npc.Width / 2) - (Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2))) < 100f && Math.Abs(npc.Position.Y + (float)(npc.Height / 2) - (Main.players[npc.target].Position.Y + (float)(Main.players[npc.target].Height / 2))) < 50f && ((npc.direction > 0 && npc.Velocity.X >= 1f) || (npc.direction < 0 && npc.Velocity.X <= -1f))) { npc.Velocity.X = npc.Velocity.X * 2f; if (npc.Velocity.X > 3f) { npc.Velocity.X = 3f; } if (npc.Velocity.X < -3f) { npc.Velocity.X = -3f; } npc.Velocity.Y = -4f; npc.netUpdate = true; return; } } } }
// 0 private void AIUnknown(NPC npc, bool flag) { npc.Velocity.X = npc.Velocity.X * 0.93f; if ((double)npc.Velocity.X > -0.1 && (double)npc.Velocity.X < 0.1) { npc.Velocity.X = 0f; return; } }
/// <summary> /// Add buff to npc /// </summary> /// <param name="type">Tyep of buff</param> /// <param name="npc">NPC to add to</param> public void StatusNPC(int type, NPC npc) { switch (type) { case 121: if (Main.rand.Next(2) == 0) npc.AddBuff(24, 180, false); return; case 122: if (Main.rand.Next(10) == 0) npc.AddBuff(24, 180, false); return; case 190: if (Main.rand.Next(4) == 0) npc.AddBuff(20, 420, false); return; case 217: if(Main.rand.Next(5) == 0) npc.AddBuff(24, 180, false); return; } }
// 17 private void AIVulture(NPC npc, bool flag) { npc.noGravity = true; if (npc.ai[0] == 0f) { npc.noGravity = false; npc.TargetClosest(true); if (npc.Velocity.X != 0f || npc.Velocity.Y < 0f || (double)npc.Velocity.Y > 0.3) { npc.ai[0] = 1f; npc.netUpdate = true; } else { Rectangle rectangle5 = new Rectangle((int)Main.players[npc.target].Position.X, (int)Main.players[npc.target].Position.Y, Main.players[npc.target].Width, Main.players[npc.target].Height); Rectangle rectangle6 = new Rectangle((int)npc.Position.X - 100, (int)npc.Position.Y - 100, npc.Width + 200, npc.Height + 200); if (rectangle6.Intersects(rectangle5) || npc.life < npc.lifeMax) { npc.ai[0] = 1f; npc.Velocity.Y = npc.Velocity.Y - 6f; npc.netUpdate = true; } } } else { if (!Main.players[npc.target].dead) { if (npc.collideX) { npc.Velocity.X = npc.oldVelocity.X * -0.5f; if (npc.direction == -1 && npc.Velocity.X > 0f && npc.Velocity.X < 2f) { npc.Velocity.X = 2f; } if (npc.direction == 1 && npc.Velocity.X < 0f && npc.Velocity.X > -2f) { npc.Velocity.X = -2f; } } if (npc.collideY) { npc.Velocity.Y = npc.oldVelocity.Y * -0.5f; if (npc.Velocity.Y > 0f && npc.Velocity.Y < 1f) { npc.Velocity.Y = 1f; } if (npc.Velocity.Y < 0f && npc.Velocity.Y > -1f) { npc.Velocity.Y = -1f; } } npc.TargetClosest(true); if (npc.direction == -1 && npc.Velocity.X > -3f) { npc.Velocity.X = npc.Velocity.X - 0.1f; if (npc.Velocity.X > 3f) { npc.Velocity.X = npc.Velocity.X - 0.1f; } else { if (npc.Velocity.X > 0f) { npc.Velocity.X = npc.Velocity.X - 0.05f; } } if (npc.Velocity.X < -3f) { npc.Velocity.X = -3f; } } else { if (npc.direction == 1 && npc.Velocity.X < 3f) { npc.Velocity.X = npc.Velocity.X + 0.1f; if (npc.Velocity.X < -3f) { npc.Velocity.X = npc.Velocity.X + 0.1f; } else { if (npc.Velocity.X < 0f) { npc.Velocity.X = npc.Velocity.X + 0.05f; } } if (npc.Velocity.X > 3f) { npc.Velocity.X = 3f; } } } float num165 = Math.Abs(npc.Position.X + (float)(npc.Width / 2) - (Main.players[npc.target].Position.X + (float)(Main.players[npc.target].Width / 2))); float num166 = Main.players[npc.target].Position.Y - (float)(npc.Height / 2); if (num165 > 50f) { num166 -= 100f; } if (npc.Position.Y < num166) { npc.Velocity.Y = npc.Velocity.Y + 0.05f; if (npc.Velocity.Y < 0f) { npc.Velocity.Y = npc.Velocity.Y + 0.01f; } } else { npc.Velocity.Y = npc.Velocity.Y - 0.05f; if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y - 0.01f; } } if (npc.Velocity.Y < -3f) { npc.Velocity.Y = -3f; } if (npc.Velocity.Y > 3f) { npc.Velocity.Y = 3f; } } } if (npc.wet) { if (npc.Velocity.Y > 0f) { npc.Velocity.Y = npc.Velocity.Y * 0.95f; } npc.Velocity.Y = npc.Velocity.Y - 0.5f; if (npc.Velocity.Y < -4f) { npc.Velocity.Y = -4f; } npc.TargetClosest(true); return; } }