public static void ActivateSpectreBolt(PvPPlayer attacker, PvPPlayer target, PvPItem weapon, int dmg) { if (!weapon.magic) { return; } int Damage = dmg / 2; if (dmg / 2 <= 1) { return; } int?attackingIndex = null; if (Collision.CanHit(attacker.TPlayer.position, attacker.TPlayer.width, attacker.TPlayer.height, target.TPlayer.position, target.TPlayer.width, target.TPlayer.height)) { attackingIndex = target.Index; } if (attackingIndex == null) { return; } int num3 = (int)attackingIndex; double num4 = 4.0; float num5 = (float)Main.rand.Next(-100, 101); float num6 = (float)Main.rand.Next(-100, 101); double num7 = Math.Sqrt((double)num5 * (double)num5 + (double)num6 * (double)num6); float num8 = (float)(num4 / num7); float SpeedX = num5 * num8; float SpeedY = num6 * num8; ProjectileUtils.SpawnProjectile(attacker, attacker.X, attacker.Y, SpeedX, SpeedY, 356, Damage, 0.0f, attacker.Index, (float)num3, 0.0f); }
/// <summary> /// Spawns Counterweights/Additional yoyos when a person has hit with one. /// This normally does not work in vanilla servers, so this must be emulated on a /// server for accessories such as Yoyo Bag to work. /// </summary> public static void ActivateYoyoBag(PvPPlayer attacker, PvPPlayer target, int dmg, float kb) { if (!attacker.TPlayer.yoyoGlove && attacker.TPlayer.counterWeight <= 0) { return; } int index1 = -1; int num1 = 0; int num2 = 0; for (int index2 = 0; index2 < 1000; ++index2) { if (Main.projectile[index2].active && Main.projectile[index2].owner == attacker.TPlayer.whoAmI) { if (Main.projectile[index2].counterweight) { ++num2; } else if (Main.projectile[index2].aiStyle == 99) { ++num1; index1 = index2; } } } if (attacker.TPlayer.yoyoGlove && num1 < 2) { if (index1 < 0) { return; } Vector2 vector21 = Vector2.Subtract(target.LastNetPosition, attacker.TPlayer.Center); vector21.Normalize(); Vector2 vector22 = Vector2.Multiply(vector21, 16f); ProjectileUtils.SpawnProjectile(attacker, attacker.TPlayer.Center.X, attacker.TPlayer.Center.Y, vector22.X, vector22.Y, Main.projectile[index1].type, Main.projectile[index1].damage, Main.projectile[index1].knockBack, attacker.TPlayer.whoAmI, 1f); } else { if (num2 >= num1) { return; } int index; Vector2 vector21 = Vector2.Subtract(target.LastNetPosition, attacker.TPlayer.Center); vector21.Normalize(); Vector2 vector22 = Vector2.Multiply(vector21, 16f); float knockBack = (float)((kb + 6.0) / 2.0); ProjectileUtils.SpawnProjectile(attacker, attacker.TPlayer.Center.X, attacker.TPlayer.Center.Y, vector22.X, vector22.Y, attacker.TPlayer.counterWeight, (int)(dmg * 0.8), knockBack, attacker.TPlayer.whoAmI, (num2 > 0).ToInt()); } }