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

◆ Hurt()

double Terraria.Player.Hurt ( PlayerDeathReason damageSource,
int Damage,
int hitDirection,
bool pvp = false,
bool quiet = false,
bool Crit = false,
int cooldownCounter = -1,
bool dodgeable = true )
inline

Definition at line 36134 of file Player.cs.

36135 {
36137 {
36138 return 0.0;
36139 }
36140 if (creativeGodMode)
36141 {
36142 return 0.0;
36143 }
36144 bool flag = !immune;
36145 bool flag2 = false;
36147 switch (cooldownCounter)
36148 {
36149 case 0:
36150 case 1:
36151 case 3:
36152 case 4:
36153 flag = hurtCooldowns[cooldownCounter] <= 0;
36154 break;
36155 case 2:
36156 flag2 = true;
36157 cooldownCounter = -1;
36158 break;
36159 }
36160 if (flag)
36161 {
36162 if (dodgeable)
36163 {
36164 if (whoAmI == Main.myPlayer && blackBelt && Main.rand.Next(10) == 0)
36165 {
36166 NinjaDodge();
36167 return 0.0;
36168 }
36169 if (whoAmI == Main.myPlayer && brainOfConfusionItem != null && !brainOfConfusionItem.IsAir && Main.rand.Next(6) == 0 && FindBuffIndex(321) == -1)
36170 {
36172 return 0.0;
36173 }
36174 if (whoAmI == Main.myPlayer && shadowDodge)
36175 {
36176 ShadowDodge();
36177 return 0.0;
36178 }
36179 }
36180 if (whoAmI == Main.myPlayer && panic)
36181 {
36182 AddBuff(63, 480);
36183 }
36184 if (whoAmI == Main.myPlayer && setSquireT2)
36185 {
36186 AddBuff(205, 300);
36187 }
36188 stealth = 1f;
36189 if (Main.netMode == 1)
36190 {
36191 NetMessage.SendData(84, -1, -1, null, whoAmI);
36192 }
36193 int num = Damage;
36194 double num2 = Main.CalculateDamagePlayersTake(num, statDefense);
36195 if (Crit)
36196 {
36197 num *= 2;
36198 }
36199 if (num2 >= 1.0)
36200 {
36201 if (whoAmI == Main.myPlayer)
36202 {
36203 Main.NotifyOfEvent(GameNotificationType.Damage);
36204 if (hasFootball)
36205 {
36206 for (int i = 0; i < 59; i++)
36207 {
36208 if (inventory[i].stack > 0 && inventory[i].type == 4743)
36209 {
36210 Projectile.NewProjectile(GetProjectileSource_Misc(12), base.Center, new Vector2(-hitDirection * 4, -6f), 861, 0, 0f, whoAmI, 0f, 1f);
36212 if (i == 58)
36213 {
36214 Main.mouseItem = new Item();
36215 }
36216 }
36217 }
36218 }
36219 }
36220 if (inventory[selectedItem].type == 4790 || inventory[selectedItem].type == 4788 || inventory[selectedItem].type == 4789)
36221 {
36222 for (int j = 0; j < 1000; j++)
36223 {
36224 if (Main.projectile[j].active && Main.projectile[j].owner == whoAmI && (Main.projectile[j].type == 879 || Main.projectile[j].type == 877 || Main.projectile[j].type == 878))
36225 {
36226 Main.projectile[j].active = false;
36227 }
36228 }
36229 }
36230 if (invis)
36231 {
36232 for (int k = 0; k < maxBuffs; k++)
36233 {
36234 if (buffType[k] == 10)
36235 {
36236 DelBuff(k);
36237 }
36238 }
36239 }
36240 num2 = (int)((double)(1f - endurance) * num2);
36241 if (num2 < 1.0)
36242 {
36243 num2 = 1.0;
36244 }
36245 if (ConsumeSolarFlare())
36246 {
36247 float num3 = 0.2f;
36248 num2 = (int)((double)(1f - num3) * num2);
36249 if (num2 < 1.0)
36250 {
36251 num2 = 1.0;
36252 }
36253 if (whoAmI == Main.myPlayer)
36254 {
36256 Entity entity = null;
36257 if (damageSource.TryGetCausingEntity(out entity))
36258 {
36260 }
36261 int num4 = Projectile.NewProjectile(spawnSource, base.Center.X, base.Center.Y, 0f, 0f, 608, (int)(150f * meleeDamage), 15f, Main.myPlayer);
36262 Main.projectile[num4].netUpdate = true;
36263 Main.projectile[num4].Kill();
36264 }
36265 }
36266 if (beetleDefense && beetleOrbs > 0)
36267 {
36268 float num5 = 0.15f * (float)beetleOrbs;
36269 num2 = (int)((double)(1f - num5) * num2);
36270 beetleOrbs--;
36271 for (int l = 0; l < maxBuffs; l++)
36272 {
36273 if (buffType[l] >= 95 && buffType[l] <= 97)
36274 {
36275 DelBuff(l);
36276 }
36277 }
36278 if (beetleOrbs > 0)
36279 {
36280 AddBuff(95 + beetleOrbs - 1, 5, quiet: false);
36281 }
36282 beetleCounter = 0f;
36283 if (num2 < 1.0)
36284 {
36285 num2 = 1.0;
36286 }
36287 }
36288 if (magicCuffs)
36289 {
36290 int num6 = num;
36291 statMana += num6;
36292 if (statMana > statManaMax2)
36293 {
36295 }
36297 }
36299 {
36300 if (whoAmI != Main.myPlayer)
36301 {
36302 if (Main.player[Main.myPlayer].hasPaladinShield)
36303 {
36304 Player player = Main.player[Main.myPlayer];
36305 if (player.team == team && team != 0)
36306 {
36307 float num7 = player.Distance(base.Center);
36308 bool flag3 = num7 < 800f;
36309 if (flag3)
36310 {
36311 for (int m = 0; m < 255; m++)
36312 {
36313 if (m != Main.myPlayer && Main.player[m].active && !Main.player[m].dead && !Main.player[m].immune && Main.player[m].hasPaladinShield && Main.player[m].team == team && (float)Main.player[m].statLife > (float)Main.player[m].statLifeMax2 * 0.25f)
36314 {
36315 float num8 = Main.player[m].Distance(base.Center);
36316 if (num7 > num8 || (num7 == num8 && m < Main.myPlayer))
36317 {
36318 flag3 = false;
36319 break;
36320 }
36321 }
36322 }
36323 }
36324 if (flag3)
36325 {
36326 int damage = (int)(num2 * 0.25);
36327 num2 = (int)(num2 * 0.75);
36328 player.Hurt(PlayerDeathReason.LegacyEmpty(), damage, 0);
36329 }
36330 }
36331 }
36332 }
36333 else
36334 {
36335 bool flag4 = false;
36336 for (int n = 0; n < 255; n++)
36337 {
36338 if (n != Main.myPlayer && Main.player[n].active && !Main.player[n].dead && !Main.player[n].immune && Main.player[n].hasPaladinShield && Main.player[n].team == team && (float)Main.player[n].statLife > (float)Main.player[n].statLifeMax2 * 0.25f)
36339 {
36340 flag4 = true;
36341 break;
36342 }
36343 }
36344 if (flag4)
36345 {
36346 num2 = (int)(num2 * 0.75);
36347 }
36348 }
36349 }
36350 if (brainOfConfusionItem != null && !brainOfConfusionItem.IsAir && Main.myPlayer == whoAmI)
36351 {
36352 for (int num9 = 0; num9 < 200; num9++)
36353 {
36354 if (!Main.npc[num9].active || Main.npc[num9].friendly)
36355 {
36356 continue;
36357 }
36358 int num10 = 300;
36359 num10 += (int)num2 * 2;
36360 if (Main.rand.Next(500) < num10)
36361 {
36362 float num11 = (Main.npc[num9].Center - base.Center).Length();
36363 float num12 = Main.rand.Next(200 + (int)num2 / 2, 301 + (int)num2 * 2);
36364 if (num12 > 500f)
36365 {
36366 num12 = 500f + (num12 - 500f) * 0.75f;
36367 }
36368 if (num12 > 700f)
36369 {
36370 num12 = 700f + (num12 - 700f) * 0.5f;
36371 }
36372 if (num12 > 900f)
36373 {
36374 num12 = 900f + (num12 - 900f) * 0.25f;
36375 }
36376 if (num11 < num12)
36377 {
36378 float num13 = Main.rand.Next(90 + (int)num2 / 3, 300 + (int)num2 / 2);
36379 Main.npc[num9].AddBuff(31, (int)num13);
36380 }
36381 }
36382 }
36383 Projectile.NewProjectile(GetProjectileSource_Accessory(brainOfConfusionItem), base.Center.X + (float)Main.rand.Next(-40, 40), base.Center.Y - (float)Main.rand.Next(20, 60), velocity.X * 0.3f, velocity.Y * 0.3f, 565, 0, 0f, whoAmI);
36384 }
36385 if (Main.netMode == 1 && whoAmI == Main.myPlayer && !quiet)
36386 {
36387 if (!noKnockback && hitDirection != 0 && (!mount.Active || !mount.Cart))
36388 {
36389 NetMessage.SendData(13, -1, -1, null, whoAmI);
36390 }
36391 NetMessage.SendData(16, -1, -1, null, whoAmI);
36392 NetMessage.SendPlayerHurt(whoAmI, damageSource, Damage, hitDirection, Crit, pvp, hitContext);
36393 }
36394 Color color = (Crit ? CombatText.DamagedFriendlyCrit : CombatText.DamagedFriendly);
36395 CombatText.NewText(new Rectangle((int)position.X, (int)position.Y, width, height), color, (int)num2, Crit);
36396 statLife -= (int)num2;
36397 switch (cooldownCounter)
36398 {
36399 case -1:
36400 {
36401 immune = true;
36402 int num14 = 0;
36403 num14 = (pvp ? 8 : ((num2 != 1.0) ? (longInvince ? 80 : 40) : (longInvince ? 40 : 20)));
36404 immuneTime = num14;
36405 break;
36406 }
36407 case 0:
36408 if (num2 == 1.0)
36409 {
36411 }
36412 else
36413 {
36415 }
36416 break;
36417 case 1:
36418 case 3:
36419 case 4:
36420 if (num2 == 1.0)
36421 {
36423 }
36424 else
36425 {
36427 }
36428 break;
36429 }
36430 lifeRegenTime = 0f;
36431 int? sourceProjectileType = damageSource.SourceProjectileType;
36433 {
36434 mount.Dismount(this);
36435 }
36436 if (whoAmI == Main.myPlayer)
36437 {
36438 if (starCloakItem != null && !starCloakItem.IsAir && (cooldownCounter == -1 || cooldownCounter == 1))
36439 {
36440 for (int num15 = 0; num15 < 3; num15++)
36441 {
36442 float x = position.X + (float)Main.rand.Next(-400, 400);
36443 float y = position.Y - (float)Main.rand.Next(500, 800);
36444 Vector2 vector = new Vector2(x, y);
36445 float num16 = position.X + (float)(width / 2) - vector.X;
36446 float num17 = position.Y + (float)(height / 2) - vector.Y;
36447 num16 += (float)Main.rand.Next(-100, 101);
36448 float num18 = (float)Math.Sqrt(num16 * num16 + num17 * num17);
36449 num18 = 23f / num18;
36450 num16 *= num18;
36451 num17 *= num18;
36452 int type = 726;
36455 {
36457 type = 725;
36458 }
36460 {
36462 type = 724;
36463 }
36465 {
36467 type = 723;
36468 }
36469 int num19 = 75;
36470 if (Main.masterMode)
36471 {
36472 num19 *= 3;
36473 }
36474 else if (Main.expertMode)
36475 {
36476 num19 *= 2;
36477 }
36478 Projectile.NewProjectile(GetProjectileSource_Accessory(item), x, y, num16, num17, type, num19, 5f, whoAmI, 0f, position.Y);
36479 }
36480 }
36481 if (honeyCombItem != null && !honeyCombItem.IsAir)
36482 {
36483 int num20 = 1;
36484 if (Main.rand.Next(3) == 0)
36485 {
36486 num20++;
36487 }
36488 if (Main.rand.Next(3) == 0)
36489 {
36490 num20++;
36491 }
36492 if (strongBees && Main.rand.Next(3) == 0)
36493 {
36494 num20++;
36495 }
36496 float num21 = 13f;
36497 if (strongBees)
36498 {
36499 num21 = 18f;
36500 }
36501 if (Main.masterMode)
36502 {
36503 num21 *= 2f;
36504 }
36505 else if (Main.expertMode)
36506 {
36507 num21 *= 1.5f;
36508 }
36510 for (int num22 = 0; num22 < num20; num22++)
36511 {
36512 float speedX = (float)Main.rand.Next(-35, 36) * 0.02f;
36513 float speedY = (float)Main.rand.Next(-35, 36) * 0.02f;
36514 Projectile.NewProjectile(projectileSource_Accessory, position.X, position.Y, speedX, speedY, beeType(), beeDamage((int)num21), beeKB(0f), Main.myPlayer);
36515 }
36516 AddBuff(48, 300);
36517 }
36518 }
36520 if (flag2 && hitDirection != 0)
36521 {
36522 if (!mount.Active || !mount.Cart)
36523 {
36524 float num23 = 10.5f;
36525 float y2 = -7.5f;
36526 if (noKnockback)
36527 {
36528 num23 = 2.5f;
36529 y2 = -1.5f;
36530 }
36531 velocity.X = num23 * (float)hitDirection;
36532 velocity.Y = y2;
36533 fallStart = (int)(position.Y / 16f);
36534 }
36535 }
36536 else if (!noKnockback && hitDirection != 0 && (!mount.Active || !mount.Cart))
36537 {
36538 velocity.X = 4.5f * (float)hitDirection;
36539 velocity.Y = -3.5f;
36540 fallStart = (int)(position.Y / 16f);
36541 }
36542 if (stoned)
36543 {
36544 SoundEngine.PlaySound(0, (int)position.X, (int)position.Y);
36545 }
36546 else if (mount.Active && mount.Type == 52)
36547 {
36548 SoundEngine.PlaySound(3, (int)position.X, (int)position.Y, 6);
36549 }
36550 else if ((wereWolf || forceWerewolf) && !hideWolf)
36551 {
36552 SoundEngine.PlaySound(3, (int)position.X, (int)position.Y, 6);
36553 }
36554 else if (frostArmor)
36555 {
36557 }
36558 else if (boneArmor)
36559 {
36560 SoundEngine.PlaySound(3, (int)position.X, (int)position.Y, 2);
36561 }
36562 else if (Main.dontStarveWorld && !Main.remixWorld)
36563 {
36565 }
36566 else
36567 {
36569 }
36571 if (statLife > 0)
36572 {
36573 double num24 = num2 / (double)statLifeMax2 * 100.0;
36574 float num25 = 2 * hitDirection;
36575 float num26 = 0f;
36576 if (flag2)
36577 {
36578 num24 *= 12.0;
36579 num26 = 6f;
36580 }
36581 for (int num27 = 0; (double)num27 < num24; num27++)
36582 {
36583 if (stoned)
36584 {
36585 Dust.NewDust(position, width, height, 1, num25 + (float)hitDirection * num26 * Main.rand.NextFloat(), -2f);
36586 }
36587 else if (frostArmor)
36588 {
36589 int num28 = Dust.NewDust(position, width, height, 135, num25 + (float)hitDirection * num26 * Main.rand.NextFloat(), -2f);
36590 Main.dust[num28].shader = GameShaders.Armor.GetSecondaryShader(ArmorSetDye(), this);
36591 }
36592 else if (boneArmor)
36593 {
36594 int num29 = Dust.NewDust(position, width, height, 26, num25 + (float)hitDirection * num26 * Main.rand.NextFloat(), -2f);
36595 Main.dust[num29].shader = GameShaders.Armor.GetSecondaryShader(ArmorSetDye(), this);
36596 }
36597 else
36598 {
36599 Dust.NewDust(position, width, height, 5, num25 + (float)hitDirection * num26 * Main.rand.NextFloat(), -2f);
36600 }
36601 }
36602 }
36603 else
36604 {
36605 statLife = 0;
36606 if (whoAmI == Main.myPlayer)
36607 {
36609 }
36610 }
36611 }
36612 if (pvp)
36613 {
36614 num2 = Main.CalculateDamagePlayersTakeInPVP(num, statDefense);
36615 }
36616 return num2;
36617 }
36618 return 0.0;
36619 }
static double Sqrt(double d)
static void PlaySound(int type, Vector2 position, int style=1)
Vector2 position
Definition Entity.cs:14
static ArmorShaderDataSet Armor
Definition GameShaders.cs:7
static readonly LegacySoundStyle DSTMaleHurt
Definition SoundID.cs:986
static readonly LegacySoundStyle Item27
Definition SoundID.cs:468
bool IsAir
Definition Item.cs:377
void SetDefaults(int Type=0)
Definition Item.cs:47332
void Dismount(Player mountedPlayer)
Definition Mount.cs:5229
bool Active
Definition Mount.cs:345
float lifeRegenTime
Definition Player.cs:1571
void ShadowDodge()
Definition Player.cs:36019
bool ConsumeSolarFlare()
Definition Player.cs:53348
static readonly int maxBuffs
Definition Player.cs:1191
float beetleCounter
Definition Player.cs:677
bool forceWerewolf
Definition Player.cs:1947
Item brainOfConfusionItem
Definition Player.cs:917
void ManaEffect(int manaAmount)
Definition Player.cs:3837
int ArmorSetDye()
Definition Player.cs:9255
bool creativeGodMode
Definition Player.cs:1529
IEntitySource GetProjectileSource_SetBonus(int projectileSourceId)
Definition Player.cs:9297
int FindBuffIndex(int type)
Definition Player.cs:4425
void NinjaDodge()
Definition Player.cs:36053
void KillMe(PlayerDeathReason damageSource, double dmg, int hitDirection, bool pvp=false)
Definition Player.cs:36665
float meleeDamage
Definition Player.cs:2023
Item starCloakItem_beeCloakOverrideItem
Definition Player.cs:1989
IEntitySource GetProjectileSource_Accessory(Item item)
Definition Player.cs:9312
IEntitySource GetProjectileSource_Misc(int projectileSourceId)
Definition Player.cs:9317
Item honeyCombItem
Definition Player.cs:2423
static bool AllowShimmerDodge(PlayerDeathReason damageSource, int cooldownCounter, bool dodgeable)
Definition Player.cs:36621
float beeKB(float KB)
Definition Player.cs:11853
IEntitySource GetProjectileSource_OnHurt(Entity attacker, int projectileSourceId)
Definition Player.cs:9307
Item starCloakItem
Definition Player.cs:1983
void StopVanityActions(bool multiplayerBroadcast=true)
Definition Player.cs:31204
bool shadowDodge
Definition Player.cs:925
void AddBuff(int type, int timeToAdd, bool quiet=true, bool foodHack=false)
Definition Player.cs:4441
float endurance
Definition Player.cs:899
PlayerEyeHelper eyeHelper
Definition Player.cs:2467
int beeDamage(int dmg)
Definition Player.cs:11844
int[] hurtCooldowns
Definition Player.cs:2699
void DelBuff(int b)
Definition Player.cs:4602
Item[] inventory
Definition Player.cs:1257
bool beetleDefense
Definition Player.cs:681
void BrainOfConfusionDodge()
Definition Player.cs:36042
Item starCloakItem_manaCloakOverrideItem
Definition Player.cs:1985
Item starCloakItem_starVeilOverrideItem
Definition Player.cs:1987
bool defendedByPaladin
Definition Player.cs:1085

References Terraria.Graphics.Shaders.GameShaders.Armor, Terraria.Main.CalculateDamagePlayersTake(), Terraria.Main.CalculateDamagePlayersTakeInPVP(), Terraria.GameContent.Damage, Terraria.CombatText.DamagedFriendly, Terraria.ID.ProjectileID.Sets.DismountsPlayersOnHit, Terraria.Entity.Distance(), Terraria.Main.dontStarveWorld, Terraria.ID.SoundID.DSTFemaleHurt, Terraria.ID.SoundID.DSTMaleHurt, Terraria.Main.dust, Terraria.Main.expertMode, Terraria.Player.Hurt(), Terraria.Item.IsAir, System.item, Terraria.ID.SoundID.Item27, Terraria.DataStructures.PlayerDeathReason.LegacyEmpty(), Terraria.Main.masterMode, Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Dust.NewDust(), Terraria.Projectile.NewProjectile(), Terraria.CombatText.NewText(), Terraria.Main.NotifyOfEvent(), Terraria.Main.npc, Terraria.Main.player, Terraria.Audio.SoundEngine.PlaySound(), Terraria.Main.projectile, Terraria.Main.rand, Terraria.Main.remixWorld, Terraria.NetMessage.SendData(), Terraria.NetMessage.SendPlayerHurt(), Terraria.Item.SetDefaults(), System.Math.Sqrt(), Terraria.Player.team, and System.type.

Referenced by Terraria.Projectile.AI_067_FreakingPirates(), Terraria.Player.Hurt(), Terraria.Player.ItemCheck_MeleeHitPVP(), Terraria.GameContent.DontStarveDarknessDamageDealer.Update(), and Terraria.Player.UpdateBuffs().