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

◆ Update_NPCCollision()

void Terraria.Player.Update_NPCCollision ( )
inline

Definition at line 29078 of file Player.cs.

29079 {
29080 if (creativeGodMode)
29081 {
29082 return;
29083 }
29085 for (int i = 0; i < 200; i++)
29086 {
29087 if (!Main.npc[i].active || Main.npc[i].friendly || Main.npc[i].damage <= 0)
29088 {
29089 continue;
29090 }
29091 int specialHitSetter = -1;
29092 switch (Main.npc[i].type)
29093 {
29094 case 396:
29095 case 397:
29096 case 398:
29097 case 400:
29098 case 401:
29099 specialHitSetter = 1;
29100 break;
29101 case 636:
29102 specialHitSetter = 1;
29103 if (Main.npc[i].ai[0] == 0f || Main.npc[i].ai[0] == 10f)
29104 {
29105 continue;
29106 }
29107 break;
29108 }
29109 if ((specialHitSetter == -1 && immune) || (dash == 2 && i == eocHit && eocDash > 0) || npcTypeNoAggro[Main.npc[i].type])
29110 {
29111 continue;
29112 }
29113 float damageMultiplier = 1f;
29114 Main.npc[i].position += Main.npc[i].netOffset;
29115 Rectangle npcRect = new Rectangle((int)Main.npc[i].position.X, (int)Main.npc[i].position.Y, Main.npc[i].width, Main.npc[i].height);
29116 NPC.GetMeleeCollisionData(rectangle, i, ref specialHitSetter, ref damageMultiplier, ref npcRect);
29117 if (rectangle.Intersects(npcRect))
29118 {
29119 if (npcTypeNoAggro[Main.npc[i].type])
29120 {
29121 continue;
29122 }
29123 bool flag = true;
29124 bool flag2 = false;
29125 bool num = CanParryAgainst(rectangle, npcRect, Main.npc[i].velocity);
29126 float num2 = thorns;
29127 float knockback = 10f;
29128 if (turtleThorns)
29129 {
29130 num2 = 2f;
29131 }
29132 if (num)
29133 {
29134 num2 = 2f;
29135 knockback = 5f;
29136 flag = false;
29137 flag2 = true;
29138 }
29139 int num3 = -1;
29140 if (Main.npc[i].position.X + (float)(Main.npc[i].width / 2) < position.X + (float)(width / 2))
29141 {
29142 num3 = 1;
29143 }
29144 int num4 = Main.DamageVar((float)Main.npc[i].damage * damageMultiplier, 0f - luck);
29145 int num5 = Item.NPCtoBanner(Main.npc[i].BannerID());
29146 if (num5 > 0 && HasNPCBannerBuff(num5))
29147 {
29148 num4 = ((!Main.expertMode) ? ((int)((float)num4 * ItemID.Sets.BannerStrength[Item.BannerToItem(num5)].NormalDamageReceived)) : ((int)((float)num4 * ItemID.Sets.BannerStrength[Item.BannerToItem(num5)].ExpertDamageReceived)));
29149 }
29150 bool flag3 = !immune;
29151 if (specialHitSetter >= 0)
29152 {
29154 }
29155 if (whoAmI == Main.myPlayer && num2 > 0f && flag3 && !Main.npc[i].dontTakeDamage)
29156 {
29157 int num6 = (int)((float)num4 * num2);
29158 if (num6 > 1000)
29159 {
29160 num6 = 1000;
29161 }
29162 ApplyDamageToNPC(Main.npc[i], num6, knockback, -num3, crit: false);
29163 }
29164 if (whoAmI == Main.myPlayer && cactusThorns && flag3 && !Main.npc[i].dontTakeDamage)
29165 {
29166 int damage = 15;
29167 if (Main.masterMode)
29168 {
29169 damage = 45;
29170 }
29171 else if (Main.expertMode)
29172 {
29173 damage = 30;
29174 }
29175 ApplyDamageToNPC(Main.npc[i], damage, knockback, -num3, crit: false);
29176 }
29177 if (resistCold && Main.npc[i].coldDamage)
29178 {
29179 num4 = (int)((float)num4 * 0.7f);
29180 }
29181 if (flag && Hurt(dodgeable: Main.npc[i].IsDamageDodgeable(), damageSource: PlayerDeathReason.ByNPC(i), Damage: num4, hitDirection: num3, pvp: false, quiet: false, Crit: false, cooldownCounter: specialHitSetter) > 0.0 && !dead && !flag2)
29182 {
29183 StatusFromNPC(Main.npc[i]);
29184 }
29185 if (num)
29186 {
29188 AddBuff(198, 300, quiet: false);
29189 }
29190 }
29191 Main.npc[i].position -= Main.npc[i].netOffset;
29192 }
29193 }
Vector2 position
Definition Entity.cs:14
static BannerEffect[] BannerStrength
Definition ItemID.cs:1018
bool HasNPCBannerBuff(int bannerType)
Definition Player.cs:42017
bool cactusThorns
Definition Player.cs:2369
bool[] npcTypeNoAggro
Definition Player.cs:2547
bool creativeGodMode
Definition Player.cs:1529
bool turtleThorns
Definition Player.cs:2367
double Hurt(PlayerDeathReason damageSource, int Damage, int hitDirection, bool pvp=false, bool quiet=false, bool Crit=false, int cooldownCounter=-1, bool dodgeable=true)
Definition Player.cs:36134
void ApplyDamageToNPC(NPC npc, int damage, float knockback, int direction, bool crit)
Definition Player.cs:19845
void AddBuff(int type, int timeToAdd, bool quiet=true, bool foodHack=false)
Definition Player.cs:4441
bool CanParryAgainst(Rectangle blockingPlayerRect, Rectangle enemyRect, Vector2 enemyVelocity)
Definition Player.cs:29195
bool resistCold
Definition Player.cs:909
int[] hurtCooldowns
Definition Player.cs:2699
void StatusFromNPC(NPC npc)
Definition Player.cs:21364
void GiveImmuneTimeForCollisionAttack(int time)
Definition Player.cs:19883

References Terraria.ID.ItemID.Sets.BannerStrength, Terraria.Item.BannerToItem(), Terraria.DataStructures.PlayerDeathReason.ByNPC(), Terraria.GameContent.Damage, Terraria.Main.DamageVar(), Terraria.Main.expertMode, Terraria.NPC.GetMeleeCollisionData(), Terraria.Main.masterMode, Terraria.Main.myPlayer, Terraria.Main.npc, and Terraria.Item.NPCtoBanner().