Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ OnHit()

void Terraria.Player.OnHit ( float x,
float y,
Entity victim )
inline

Definition at line 5855 of file Player.cs.

5856 {
5857 if (Main.myPlayer != whoAmI)
5858 {
5859 return;
5860 }
5861 bool flag = victim is NPC && (((NPC)victim).type == 488 || ((NPC)victim).SpawnedFromStatue);
5862 if (titaniumStormCooldown > 0)
5863 {
5864 flag = true;
5865 }
5866 if (victim is NPC)
5867 {
5868 Main.BigBossProgressBar.TryTracking(victim.whoAmI);
5869 }
5870 if (onHitTitaniumStorm && !flag)
5871 {
5873 AddBuff(306, 600);
5874 if (ownedProjectileCounts[908] < 7)
5875 {
5876 ownedProjectileCounts[908]++;
5877 Projectile.NewProjectile(GetProjectileSource_OnHit(victim, 4), base.Center, Vector2.Zero, 908, 50, 15f, whoAmI);
5878 }
5879 }
5880 if (onHitDodge && shadowDodgeTimer == 0)
5881 {
5882 AddBuff(59, 1800);
5883 }
5884 if (onHitRegen)
5885 {
5886 AddBuff(58, 300);
5887 }
5888 if (stardustMinion && victim is NPC)
5889 {
5890 for (int i = 0; i < 1000; i++)
5891 {
5892 Projectile projectile = Main.projectile[i];
5893 if (projectile.active && projectile.owner == whoAmI && projectile.type == 613 && !(projectile.localAI[1] > 0f) && Main.rand.Next(2) == 0)
5894 {
5895 Vector2 vector = new Vector2(x, y) - projectile.Center;
5896 if (vector.Length() > 0f)
5897 {
5898 vector.Normalize();
5899 }
5900 vector *= 20f;
5901 Projectile.NewProjectile(Projectile.InheritSource(projectile), projectile.Center.X, projectile.Center.Y, vector.X, vector.Y, 614, projectile.damage / 3, 0f, projectile.owner, 0f, victim.whoAmI);
5902 projectile.localAI[1] = 30 + Main.rand.Next(4) * 10;
5903 }
5904 }
5905 }
5906 if (onHitPetal && petalTimer == 0)
5907 {
5908 petalTimer = 20;
5909 _ = position.X + (float)(width / 2);
5910 int num = direction;
5911 float num2 = Main.screenPosition.X;
5912 if (num < 0)
5913 {
5914 num2 += (float)Main.screenWidth;
5915 }
5916 float y2 = Main.screenPosition.Y;
5917 y2 += (float)Main.rand.Next(Main.screenHeight);
5918 Vector2 vector2 = new Vector2(num2, y2);
5919 float num3 = x - vector2.X;
5920 float num4 = y - vector2.Y;
5921 num3 += (float)Main.rand.Next(-50, 51) * 0.1f;
5922 num4 += (float)Main.rand.Next(-50, 51) * 0.1f;
5923 float num5 = (float)Math.Sqrt(num3 * num3 + num4 * num4);
5924 num5 = 24f / num5;
5925 num3 *= num5;
5926 num4 *= num5;
5927 Projectile.NewProjectile(GetProjectileSource_OnHit(victim, 5), num2, y2, num3, num4, 221, 36, 0f, whoAmI);
5928 }
5929 if (!crystalLeaf || petalTimer != 0)
5930 {
5931 return;
5932 }
5933 for (int j = 0; j < 1000; j++)
5934 {
5935 if (Main.projectile[j].owner != whoAmI || Main.projectile[j].type != 226)
5936 {
5937 continue;
5938 }
5939 petalTimer = 50;
5940 float num6 = 12f;
5941 Vector2 vector3 = new Vector2(Main.projectile[j].position.X + (float)width * 0.5f, Main.projectile[j].position.Y + (float)height * 0.5f);
5942 float num7 = x - vector3.X;
5943 float num8 = y - vector3.Y;
5944 float num9 = (float)Math.Sqrt(num7 * num7 + num8 * num8);
5945 int num10 = 180;
5946 float num11 = num6 * (float)num10;
5947 if (!(num9 >= num11))
5948 {
5949 num9 = num6 / num9;
5950 num7 *= num9;
5951 num8 *= num9;
5952 Utils.ChaseResults chaseResults = Utils.GetChaseResults(Main.projectile[j].Center, num6 * (float)num10, victim.Center, victim.velocity);
5953 if (chaseResults.InterceptionHappens && chaseResults.InterceptionTime <= 180f)
5954 {
5955 Vector2 vector4 = chaseResults.ChaserVelocity / num10;
5956 num7 = vector4.X;
5957 num8 = vector4.Y;
5958 }
5959 Projectile.NewProjectile(GetProjectileSource_SetBonus(6), Main.projectile[j].Center.X - 4f, Main.projectile[j].Center.Y, num7, num8, 227, crystalLeafDamage, crystalLeafKB, whoAmI);
5960 break;
5961 }
5962 }
5963 }
static double Sqrt(double d)
bool onHitRegen
Definition Player.cs:933
IEntitySource GetProjectileSource_OnHit(Entity victim, int projectileSourceId)
Definition Player.cs:9302
bool onHitTitaniumStorm
Definition Player.cs:937
static int crystalLeafKB
Definition Player.cs:635
IEntitySource GetProjectileSource_SetBonus(int projectileSourceId)
Definition Player.cs:9297
bool stardustMinion
Definition Player.cs:995
int shadowDodgeTimer
Definition Player.cs:945
bool onHitDodge
Definition Player.cs:931
int titaniumStormCooldown
Definition Player.cs:939
static int crystalLeafDamage
Definition Player.cs:633
void AddBuff(int type, int timeToAdd, bool quiet=true, bool foodHack=false)
Definition Player.cs:4441
bool onHitPetal
Definition Player.cs:935
int[] ownedProjectileCounts
Definition Player.cs:2545

References Terraria.Entity.active, Terraria.Player.AddBuff(), Terraria.Main.BigBossProgressBar, Terraria.Entity.Center, Terraria.Player.crystalLeaf, Terraria.Player.crystalLeafDamage, Terraria.Player.crystalLeafKB, Terraria.Projectile.damage, Terraria.Entity.direction, Terraria.Utils.GetChaseResults(), Terraria.Player.GetProjectileSource_OnHit(), Terraria.Player.GetProjectileSource_SetBonus(), Terraria.Entity.height, Terraria.Projectile.InheritSource(), Terraria.Projectile.localAI, Terraria.Main.myPlayer, Terraria.Projectile.NewProjectile(), Terraria.Enums.NPC, Terraria.Player.onHitDodge, Terraria.Player.onHitPetal, Terraria.Player.onHitRegen, Terraria.Player.onHitTitaniumStorm, Terraria.Player.ownedProjectileCounts, Terraria.Projectile.owner, Terraria.Player.petalTimer, Terraria.Main.projectile, Terraria.Main.rand, Terraria.Main.screenHeight, Terraria.Main.screenPosition, Terraria.Main.screenWidth, Terraria.Player.shadowDodgeTimer, System.Math.Sqrt(), Terraria.Player.stardustMinion, Terraria.Player.titaniumStormCooldown, Terraria.Projectile.type, Terraria.Entity.whoAmI, Terraria.Entity.width, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Vector2.Y, and Microsoft.Xna.Framework.Vector2.Zero.