public override void OnHitByProjectile(NPC npc, Projectile projectile, int damage, float knockback, bool crit) { if (!Config.Instance.ChangeDamageColor) { return; } int recent = -1; for (int i = 99; i >= 0; i--) { CombatText ctToCheck = Main.combatText[i]; if (ctToCheck.lifeTime == 60 || ctToCheck.lifeTime == 120) { if (ctToCheck.alpha == 1f) { if ((ctToCheck.color == CombatText.DamagedHostile || ctToCheck.color == CombatText.DamagedHostileCrit)) { recent = i; break; } } } } if (recent == -1) { return; } else { Color newcolor; DamageTypes.Types dmgtype = DamageTypes.GetType(projectile); if (Config.Instance.DebugMode) { ColoredDamageTypes.Log("HitByProjectile: " + damage + " " + projectile.Name + "/" + projectile.type + ": " + dmgtype.ToString()); } newcolor = DamageTypes.CheckDamageColor(dmgtype, crit); //Main.combatText[recent].active = false; //Main.combatText[recent].lifeTime = 0; //CombatText.NewText(new Rectangle((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height), newcolor, damage, crit, false); //NetMessage.SendData //ColoredDamageTypes.instance.SendColorPacket(newcolor.R, newcolor.G, newcolor.B, newcolor.A, damage, crit); Main.combatText[recent].color = newcolor; } }
public override bool HijackGetData(ref byte messageType, ref BinaryReader reader, int playerNumber) { if (messageType == 28) { if (Main.netMode == NetmodeID.MultiplayerClient) { NPC npc = Main.npc[(int)reader.ReadInt16()]; //npc being hit int damage = ModNet.AllowVanillaClients ? reader.ReadInt16() : reader.ReadInt32(); //damage float knockback = reader.ReadSingle(); // knockback int hitdir = (reader.ReadByte() - 1); // hit direction byte critbyte = reader.ReadByte(); bool crit = critbyte == 1; //Main.NewText("Knockback: " + num86 + ", Direction: " + num87 + ", Crit: " + bb+" ?: "+crit); if (damage > 0 && damage == recentdmg_in && knockback == recentkb_in && critbyte == recentcrit_in) { npc.StrikeNPC(damage, knockback, hitdir, crit, false, true); int recent = -1; for (int i = 99; i >= 0; i--) { CombatText ctToCheck = Main.combatText[i]; if (ctToCheck.lifeTime == 60 || ctToCheck.lifeTime == 120) { if (ctToCheck.alpha == 1f) { if ((ctToCheck.color == CombatText.OthersDamagedHostile || ctToCheck.color == CombatText.OthersDamagedHostileCrit)) { recent = i; break; } } } } if (recent > -1) { Main.combatText[recent].color = DamageTypes.CheckDamageColor(recentcolor_in, crit) * 0.4f; } return(true); } } return(false); } return(false); }
//public override void UpdateLifeRegen(NPC npc, ref int damage) //{ //} public override void OnHitByItem(NPC npc, Player player, Item item, int damage, float knockback, bool crit) { if (!Config.Instance.ChangeDamageColor) { return; } int recent = -1; for (int i = 99; i >= 0; i--) { CombatText ctToCheck = Main.combatText[i]; if (ctToCheck.lifeTime == 60 || ctToCheck.lifeTime == 120 || (ctToCheck.dot && ctToCheck.lifeTime == 40)) { if (ctToCheck.alpha == 1f) { if ((ctToCheck.color == CombatText.DamagedHostile || ctToCheck.color == CombatText.DamagedHostileCrit)) { recent = i; break; } } } } if (recent == -1) { return; } else { Color newcolor; DamageTypes.Types dmgtype = DamageTypes.GetType(item); if (Config.Instance.DebugMode) { ColoredDamageTypes.Log("HitByItem: " + damage + item.Name + "/" + item.type + ": " + item.shoot + " " + dmgtype.ToString()); } newcolor = DamageTypes.CheckDamageColor(dmgtype, crit); Main.combatText[recent].color = newcolor; } }