protected void RetaliationSpray(Vector2 spawnPoint) { int targetIndex = npc.target; npc.TargetClosest(false); Player retaliationTarget = Main.player[npc.target]; float direction = MoveToward(npc.Center, retaliationTarget.Center).ToRotation(); direction = MathHelper.ToDegrees(direction); direction = Main.rand.NextFloat(direction - RetaliationSprayRandomAngleDifference, direction + RetaliationSprayRandomAngleDifference + .0001f); direction = MathHelper.ToRadians((float)Math.Round(direction, 4, MidpointRounding.AwayFromZero)); Vector2 spawnVelocity = direction.ToRotationVector2() * RetaliationBulletSpeed; if (IsSinglePlayer()) { Projectile.NewProjectile(spawnPoint, spawnVelocity, ModContent.ProjectileType <BacterionBullet>(), BulletFinalDamage(), BulletFinalKnockback(), Main.myPlayer); } else if (IsMultiplayerClient()) { ModPacket packet = mod.GetPacket(); packet.Write((byte)ChensGradiusMod.PacketMessageType.SpawnRetaliationBullet); packet.WriteVector2(spawnPoint); packet.WriteVector2(spawnVelocity); packet.Write(BulletFinalDamage()); packet.Write(BulletFinalKnockback()); packet.Send(); } npc.target = targetIndex; }
public override void OnHitNPC(NPC target, int damage, float knockback, bool crit) { knockback = 0; crit = false; for (int i = 0; i < 100; i++) { if (Main.combatText[i].active && Main.combatText[i].color == CombatText.DamagedHostile && Main.combatText[i].text == damage.ToString() && projectile.Distance(Main.combatText[i].position) < 250) { Main.combatText[i].active = false; break; } } //CombatText.NewText(new Rectangle((int)target.position.X, (int)target.position.Y, target.width, target.height), Color.DarkGreen, "BLOCKED", true, false); Main.PlaySound(3, projectile.Center, 4); if (target.knockBackResist > 0) { target.velocity.X = projectile.direction * projectile.knockBack; if (Main.netMode != 0) { ModPacket packet = mod.GetPacket(); packet.Write((byte)JoostModMessageType.NPCpos); packet.Write(target.whoAmI); packet.WriteVector2(target.position); packet.WriteVector2(target.velocity); ModPacket netMessage = packet; netMessage.Send(); } } if (target.life < target.lifeMax) { target.life++; } }
public static bool SummonBoss(Mod mod, Player player, int npcType, float tileDistance = 0) { if (IsSinglePlayer() || (IsMultiplayerClient() && IsSameClientOwner(player.whoAmI))) { Vector2 initialPosition = player.Center; float randomAngle = Main.rand.NextFloat(0, MathHelper.TwoPi); Vector2 offset = randomAngle.ToRotationVector2() * tileDistance * 16f; Vector2 target = new Vector2(initialPosition.X + offset.X, initialPosition.Y + offset.Y); if (IsSinglePlayer()) { int npcIndex = NewNPC(target.X, target.Y, npcType, center: true); NPC npc = Main.npc[npcIndex]; Main.NewText(Language.GetTextValue("Announcement.HasAwoken", npc.GivenOrTypeName), 175, 75, 255); Main.PlaySound(SoundID.Roar, initialPosition, 0); } else { ModPacket packet = mod.GetPacket(); packet.Write((byte)PacketMessageType.SpawnBoss); packet.WriteVector2(initialPosition); packet.WriteVector2(target); packet.Write(npcType); packet.Write(true); packet.Send(); } } return(true); }
public override void OnHitPvp(Player target, int damage, bool crit) { Player player = Main.player[projectile.owner]; if (projectile.velocity.Y * player.gravDir > 0 && player.velocity.Y * player.gravDir > 0 && Math.Abs(projectile.velocity.X) < 6 * projectile.scale) { player.velocity.Y = Math.Abs(player.velocity.Y) < 15 * projectile.ai[0] ? -15 * projectile.ai[0] * player.gravDir : -player.velocity.Y; projectile.localAI[1] = 1; } if (projectile.ai[0] > 0.7f) { Main.PlaySound(42, (int)projectile.position.X, (int)projectile.position.Y, 208); } if (projectile.ai[0] >= 1) { Projectile.NewProjectile(target.Center, target.velocity, mod.ProjectileType("GrabThrow"), projectile.damage / 2, projectile.knockBack, projectile.owner, -1, target.whoAmI); } for (int i = 0; i < (int)(projectile.scale * projectile.scale * 40); i++) { Dust.NewDust(target.position, target.width, target.height, 1); } if (!target.noKnockback) { target.velocity += projectile.velocity / 10 * projectile.knockBack * projectile.ai[0] * projectile.ai[0]; ModPacket packet = mod.GetPacket(); packet.Write((byte)JoostModMessageType.Playerpos); packet.Write((byte)target.whoAmI); packet.WriteVector2(target.position); packet.WriteVector2(target.velocity + projectile.velocity / 10 * projectile.knockBack * projectile.ai[0] * projectile.ai[0]); ModPacket netMessage = packet; netMessage.Send(-1, -1); } }
protected override void WritePacket(ModPacket packet) { packet.Write(currentCount); packet.Write(_gravityDirection); packet.WriteVector2(player.position); packet.WriteVector2(player.velocity); }
public static void SendRegionCreate(int plr, string name) { ModPacket p = ServerSideCharacter.Instance.GetPacket(); p.Write((int)SSCMessageType.RegionCreateCommand); p.Write((byte)plr); p.Write(name); p.WriteVector2(ServerSideCharacter.TilePos1); p.WriteVector2(ServerSideCharacter.TilePos2); p.Send(); }
protected override void WritePacket(ModPacket packet) { if (!InUse) { return; } if (Starting) { packet.WriteVector2(_targetStartPos); packet.WriteVector2(_playerStartPos); } packet.Write(BashEntity is NPC); packet.Write((ushort)(BashEntity?.whoAmI ?? ushort.MaxValue)); packet.Write(BashAngle); }
private void PerformAttack() { if (IsNotMultiplayerClient() && mode != States.Exit) { if (++fireTick >= FireRate) { fireTick = 0; Vector2 pVel = new Vector2(1, 0) * CoreLaser.Spd * regularAssaultDirection; for (int i = 0; i < AttackVectors.Length; i++) { Projectile.NewProjectile(AttackVectors[i], pVel, ModContent.ProjectileType <CoreLaser>(), BulletFinalDamage(CoreLaser.Dmg), BulletFinalKnockback(CoreLaser.Kb), Main.myPlayer); } if (IsServer()) { ModPacket packet = mod.GetPacket(); packet.Write((byte)PacketMessageType.BroadcastSound); packet.Write((byte)SoundPacketType.Legacy); packet.Write("Sounds/Enemies/BigCoreShoot"); packet.WriteVector2(npc.Center); packet.Send(); } else { Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/Enemies/BigCoreShoot"), npc.Center); } } } }
public static void SendGuardianMovementUpdate(int GuardianWhoAmID, int ToWho = -1, int FromWho = -1) { if (!MultiplayerActive || Main.netMode == 0 || !MainMod.ActiveGuardians.ContainsKey(GuardianWhoAmID)) { return; } ModPacket packet = StartNewMessage(MessageIDs.GuardianMovementUpdate); TerraGuardian tg = MainMod.ActiveGuardians[GuardianWhoAmID]; BitsByte firstControls = new BitsByte(tg.MoveUp, tg.MoveDown, tg.MoveLeft, tg.MoveRight, tg.Jump); packet.Write(GuardianWhoAmID); packet.WriteVector2(tg.Position); packet.WriteVector2(tg.Velocity); packet.Write(firstControls); packet.Send(ToWho, FromWho); }
public override void RightClick(int i, int j) { Player player = Main.LocalPlayer; //QwertyMethods.ServerClientCheck(); if (!NPC.AnyNPCs(mod.NPCType("FortressBoss"))) { for (int b = 0; b < 58; b++) // this searches every invintory slot { if (player.inventory[b].type == mod.ItemType("FortressBossSummon") && player.inventory[b].stack > 0) //this checks if the slot has the valid item { if (Main.netMode == 0) { QwertyWorld.FortressBossQuotes(); int npcID = NPC.NewNPC(i * 16 + 400, j * 16, mod.NPCType("FortressBoss")); } else { ModPacket packet = mod.GetPacket(); packet.Write((byte)ModMessageType.DivineCall); packet.WriteVector2(new Vector2(i * 16 + 400, j * 16)); packet.Send(); } player.inventory[b].stack--; break; } } } }
public override void SyncPlayer(int toWho, int fromWho, bool newPlayer) { ModPacket packet = mod.GetPacket(); packet.Write((byte)ChensGradiusMod.PacketMessageType.GradiusModSyncPlayer); packet.Write((byte)player.whoAmI); packet.Write(isFreezing); packet.Write(rotateMode); packet.Write(revolveDirection); packet.Write(wasHolding); packet.Write(forceBase); packet.Write(needleForce); packet.Write(optionOne); packet.Write(optionTwo); packet.Write(optionThree); packet.Write(optionFour); packet.Write(normalOption); packet.Write(freezeOption); packet.Write(rotateOption); packet.Write(optionFlightPath.Count); for (int i = 0; i < optionFlightPath.Count; i++) { packet.WriteVector2(optionFlightPath[i]); } packet.Send(toWho, fromWho); }
public static void SendGuardianHurt(int WhoAmID, int Damage, int Direction, bool Critical, string DeathMessage, int ToWho = -1, int FromWho = -1) { if (!MultiplayerActive || Main.netMode == 0 || !MainMod.ActiveGuardians.ContainsKey(WhoAmID)) { return; } ModPacket packet = StartNewMessage(MessageIDs.GuardianHurt); TerraGuardian tg = MainMod.ActiveGuardians[WhoAmID]; packet.Write(WhoAmID); packet.WriteVector2(tg.Position); packet.Write(Damage); packet.Write((sbyte)Direction); packet.Write(Critical); packet.Write(DeathMessage); byte DownState = 0; if (tg.Downed) { DownState = 3; } else if (tg.KnockedOutCold) { DownState = 2; } else if (tg.KnockedOut) { DownState = 1; } packet.Write(DownState); packet.Write(tg.HP); packet.Send(ToWho, FromWho); }
public void RequestTeleport(int toWho, int fromWho, Vector2 mapPosition) { ModPacket packet = GetPacket(RequestTeleportMessage, fromWho); packet.WriteVector2(mapPosition); packet.Send(); }
public static void SendTeleport(int plr, Vector2 pos) { ModPacket p = ServerSideCharacter.Instance.GetPacket(); p.Write((int)SSCMessageType.TeleportPalyer); p.WriteVector2(pos); p.Send(plr, -1); }
public void SendYoshihiroToSpawn(int toWho, int fromWho, int NPCType, Vector2 position) { ModPacket packet = GetPacket(Yoshihiro, fromWho); packet.Write(NPCType); packet.WriteVector2(position); packet.Send(toWho, fromWho); }
public void SendQuoteSound(int toWho, int fromWho, string soundsPath, Vector2 pos) { ModPacket packet = GetPacket(QuoteSounds, fromWho); packet.Write(soundsPath); packet.WriteVector2(pos); packet.Send(toWho, fromWho); }
public static void UpdatePlayerPosition(int playerIndex, Vector2 position) { ModPacket packet = Instance.GetPacket(); packet.Write((byte)ModMessageType.UpdatePlayerPosition); packet.Write((byte)playerIndex); packet.WriteVector2(position); packet.Send(); }
public static void UpdatePlayerVelocity(int playerIndex, Vector2 velocity) { ModPacket packet = Instance.GetPacket(); packet.Write((byte)ModMessageType.UpdatePlayerVelocity); packet.Write((byte)playerIndex); packet.WriteVector2(velocity); packet.Send(); }
private void SendData(int type = -1, string name = "", bool boss = false, Vector2 position = default(Vector2)) { ModPacket packet = mod.GetPacket(); packet.Write(type); packet.Write(name); packet.Write(boss); packet.WriteVector2(position); packet.Send(256, -1); }
public void PlaySoundInstance(int toWho, int fromWho, string soundsPath, SoundState state, Vector2 pos, int travelDistance) { ModPacket packet = GetPacket(SoundInstances, fromWho); packet.Write(soundsPath); packet.Write((int)state); packet.WriteVector2(pos); packet.Write(travelDistance); packet.Send(toWho, fromWho); }
public override void AI() { if (npc.ai[3] < 1) { npc.velocity.X = npc.ai[0]; npc.velocity.Y = npc.ai[1]; npc.damage = (int)npc.ai[2]; npc.ai[3] = 1; if (Main.netMode != 0) { ModPacket packet = mod.GetPacket(); packet.Write((byte)JoostModMessageType.NPCpos); packet.Write(npc.whoAmI); packet.WriteVector2(npc.position); packet.WriteVector2(npc.velocity); ModPacket netMessage = packet; netMessage.Send(); } npc.netUpdate = true; } Dust.NewDustDirect(npc.position, npc.width, npc.height, DustID.Fire, -npc.velocity.X / 5, -npc.velocity.Y / 5, 100, default(Color), 2f + (Main.rand.Next(20) * 0.1f)).noGravity = true; npc.ai[3]++; bool colliding = (npc.ai[3] > 2 && (npc.oldVelocity.X != 0 && npc.velocity.X == 0) || (npc.oldVelocity.Y != 0 && npc.velocity.Y == 0)); for (int i = 0; i < Main.maxNPCs && !colliding; i++) { NPC target = Main.npc[i]; if (!target.friendly && !target.dontTakeDamage && npc.Hitbox.Intersects(target.Hitbox)) { colliding = true; break; } } if (npc.ai[3] > 300 || colliding) { npc.life = 0; npc.HitEffect(0, 0); npc.checkDead(); } npc.rotation = (float)Math.Atan2(npc.velocity.Y, npc.velocity.X) + 1.57f; npc.lifeRegen = 0; }
public override void PostUpdate() { if (player.whoAmI == Main.myPlayer && Main.netMode == NetmodeID.MultiplayerClient && Main.GameUpdateCount % 10 == 0) { ModPacket modPacket = mod.GetPacket(); modPacket.Write((byte)0); //MessageId modPacket.WriteVector2(Main.screenPosition); modPacket.Send(); } }
public static Vector2 GetLocalCursor(int id) { LocalCursor[id] = Main.MouseWorld; if (Main.netMode == NetmodeID.MultiplayerClient) { ModPacket packet = instance.GetPacket(); packet.Write((byte)ModMessageType.UpdateLocalCursor); // Message type, you would need to create an enum for this packet.Write((byte)id); packet.WriteVector2(LocalCursor[id]); packet.Send(); } return(LocalCursor[id]); }
public override bool PreNPCLoot() { bool success = true; for (int k = 0; k < 200; k++) { if (k != npc.whoAmI && Main.npc[k].active && (Main.npc[k].type == mod.NPCType("TerraSpirit2") || Main.npc[k].type == mod.NPCType("NegativeBlob2")) && Vector2.Distance(Main.npc[k].Center, npc.Center) < 160f) { success = false; break; } } if (success) { NPC.NewNPC((int)npc.Bottom.X, (int)npc.Bottom.Y, mod.NPCType("NegativeBlob2"), 1, npc.ai[0]); } else { Vector2 normal = new Vector2(-npc.velocity.Y, npc.velocity.X); if (Main.netMode == 0) { var bullets = ((TerraSpirit2)Spirit.modNPC).bullets; bullets.Add(new BulletNegative(npc.Center, npc.velocity)); bullets.Add(new BulletNegative(npc.Center, -npc.velocity)); bullets.Add(new BulletNegative(npc.Center, normal)); bullets.Add(new BulletNegative(npc.Center, -normal)); } else { ModPacket packet = mod.GetPacket(); packet.Write((byte)MessageType.BulletNegative); packet.Write((byte)npc.ai[0]); packet.Write((byte)4); packet.WriteVector2(npc.Center); packet.WriteVector2(npc.velocity); packet.WriteVector2(npc.Center); packet.WriteVector2(-npc.velocity); packet.WriteVector2(npc.Center); packet.WriteVector2(normal); packet.WriteVector2(npc.Center); packet.WriteVector2(-normal); packet.Send(); } } return(false); }
public static void SpawnBoss(Player player, int type) { if (Main.netMode == 0) { int num7 = NPC.NewNPC((int)player.Center.X, (int)player.Center.Y - 2000, type); Main.NewText(Language.GetTextValue("Announcement.HasAwoken", Main.npc[num7].TypeName), 175, 75, 255, false); } else if (Main.netMode == 1) { ModPacket packet = QwertysRandomContent.Instance.GetPacket(); packet.Write((byte)ModMessageType.SummonBoss); packet.WriteVector2(player.Center); packet.Write(type); packet.Send(); } }
public static void SendGuardianItemUseUpdate(int GuardianWhoAmID, int ToWho = -1, int FromWho = -1) { if (!MultiplayerActive || Main.netMode == 0 || !MainMod.ActiveGuardians.ContainsKey(GuardianWhoAmID)) { return; } ModPacket packet = StartNewMessage(MessageIDs.GuardianItemUseUpdate); TerraGuardian tg = MainMod.ActiveGuardians[GuardianWhoAmID]; BitsByte ActionPress = new BitsByte(tg.Action, tg.OffHandAction); BitsByte LastActionPress = new BitsByte(tg.LastAction, tg.LastOffHandAction); Vector2 MousePosition = tg.AimDirection; packet.Write(GuardianWhoAmID); packet.Write(ActionPress); packet.Write(LastActionPress); packet.WriteVector2(MousePosition); packet.Write(tg.SelectedItem); packet.Write(tg.SelectedOffhand); packet.Send(ToWho, FromWho); }
public override void PostUpdate() { if (player.active && isLeader) { for (int i = 0; i < Main.maxPlayers; i++) { Player selectP = Main.player[i]; if (selectP.active && !selectP.dead && Vector2.Distance(player.Center, selectP.Center) > 3000f) { TeleportEffects(selectP, player); selectP.Center = player.Center; ModPacket packet = mod.GetPacket(); packet.Write((byte)PacketMessageType.TeleportBack); packet.Write((byte)player.whoAmI); packet.Write((byte)selectP.whoAmI); packet.WriteVector2(player.Center); packet.Send(); } } } }
public static bool SummonBoss(Mod mod, Vector2 initialPosition, int npcType, float tileDistance = 0) { float randomAngle = Main.rand.NextFloat(0, MathHelper.TwoPi); Vector2 offset = randomAngle.ToRotationVector2() * tileDistance * 16f; Vector2 target = new Vector2(initialPosition.X + offset.X, initialPosition.Y + offset.Y); int npcIndex = NewNPC(target.X, target.Y, npcType, center: true); NPC npc = Main.npc[npcIndex]; Main.NewText(Language.GetTextValue("Announcement.HasAwoken", npc.GivenOrTypeName), 175, 75, 255); Main.PlaySound(SoundID.Roar, initialPosition, 0); if (!IsSinglePlayer()) { ModPacket packet = mod.GetPacket(); packet.Write((byte)PacketMessageType.BroadcastSound); packet.Write((ushort)SoundID.Roar); packet.WriteVector2(initialPosition); packet.Write((byte)0); packet.Send(); } return(npc.active); }
public override void HandlePacket(BinaryReader reader, int whoAmI) { ModMessageType msgType = (ModMessageType)reader.ReadByte(); switch (msgType) { case ModMessageType.ArrowMessage: int identity = reader.ReadInt32(); byte owner = reader.ReadByte(); int realIdentity = Projectile.GetByUUID(owner, identity); if (realIdentity != -1) { Main.projectile[realIdentity].GetGlobalProjectile <arrowHoming>().B4HomingArrow = true; } if (Main.netMode == 2) { ModPacket packet = GetPacket(); packet.Write((byte)ModMessageType.ArrowMessage); packet.Write(identity); packet.Write(owner); packet.Send(); } break; case ModMessageType.FinnedRandomSwimMessage: int identity2 = reader.ReadInt32(); byte owner2 = reader.ReadByte(); float randomSwim = reader.Read(); int realIdentity2 = Projectile.GetByUUID(owner2, identity2); if (realIdentity2 != -1) { Main.projectile[realIdentity2].ai[1] = randomSwim; } if (Main.netMode == 2) { ModPacket packet = GetPacket(); packet.Write((byte)ModMessageType.FinnedRandomSwimMessage); packet.Write(identity2); packet.Write(owner2); packet.Write(randomSwim); packet.Send(); } break; case ModMessageType.ScaleMessage: int identity3 = reader.ReadInt32(); byte owner3 = reader.ReadByte(); int realIdentity3 = Projectile.GetByUUID(owner3, identity3); if (realIdentity3 != -1) { Main.projectile[realIdentity3].scale = 3; } if (Main.netMode == 2) { ModPacket packet = GetPacket(); packet.Write((byte)ModMessageType.ScaleMessage); packet.Write(identity3); packet.Write(owner3); packet.Send(); } break; case ModMessageType.UpdateClassBools: int identity4 = reader.ReadInt32(); byte owner4 = reader.ReadByte(); int realIdentity4 = Projectile.GetByUUID(owner4, identity4); if (realIdentity4 != -1) { BitsByte flags = reader.ReadByte(); Main.projectile[realIdentity4].melee = flags[0]; Main.projectile[realIdentity4].ranged = flags[1]; Main.projectile[realIdentity4].magic = flags[2]; Main.projectile[realIdentity4].minion = flags[3]; Main.projectile[realIdentity4].thrown = flags[4]; Main.projectile[realIdentity4].GetGlobalProjectile <MorphProjectile>().morph = flags[5]; } if (Main.netMode == 2) { UpdateProjectileClass(Main.projectile[realIdentity4]); } break; case ModMessageType.UpdateLocalCursor: byte playerIndex = reader.ReadByte(); Vector2 Cursor = reader.ReadVector2(); LocalCursor[playerIndex] = Cursor; if (Main.netMode == 2) { ModPacket packet = GetPacket(); packet.Write((byte)ModMessageType.UpdateLocalCursor); // Message type, you would need to create an enum for this packet.Write(playerIndex); packet.WriteVector2(Cursor); packet.Send(); } break; case ModMessageType.UpdatePlayerVelocity: byte playerIndex2 = reader.ReadByte(); Vector2 vel = reader.ReadVector2(); Main.player[playerIndex2].velocity = vel; if (Main.netMode == 2) { UpdatePlayerVelocity(playerIndex2, vel); NetMessage.SendData(MessageID.PlayerControls, -1, -1, null, playerIndex2); } break; case ModMessageType.UpdatePlayerPosition: byte playerIndex3 = reader.ReadByte(); Vector2 pos = reader.ReadVector2(); Main.player[playerIndex3].position = pos; if (Main.netMode == 2) { UpdatePlayerPosition(playerIndex3, pos); NetMessage.SendData(MessageID.PlayerControls, -1, -1, null, playerIndex3); } break; case ModMessageType.ProjectileAIUpdate: int identity6 = reader.ReadInt32(); byte owner6 = reader.ReadByte(); int realIdentity6 = Projectile.GetByUUID(owner6, identity6); float ai0 = reader.ReadSingle(); float ai1 = reader.ReadSingle(); if (realIdentity6 != -1) { Main.projectile[realIdentity6].ai[0] = ai0; Main.projectile[realIdentity6].ai[1] = ai1; if (Main.netMode == 2) { ProjectileAIUpdate(Main.projectile[realIdentity6]); } } break; case ModMessageType.DivineCall: QwertyWorld.FortressBossQuotes(); Vector2 summonAt = reader.ReadVector2(); int npcID = NPC.NewNPC((int)summonAt.X, (int)summonAt.Y, NPCType("FortressBoss")); break; case ModMessageType.StartDinoEvent: QwertyWorld.DinoEvent = true; QwertyWorld.DinoKillCount = 0; if (Main.netMode == NetmodeID.Server) { NetMessage.SendData(MessageID.WorldData); // Immediately inform clients of new world state. } break; } }
public override bool PreAI() { Player player = Main.player[projectile.owner]; Vector2 origin = player.RotatedRelativePoint(player.MountedCenter, true); float speed = (55f / player.inventory[player.selectedItem].useTime) / player.meleeSpeed; projectile.localNPCHitCooldown = (int)(27 / speed); if (player.active && !player.dead && !player.noItems && !player.CCed) { if (Main.myPlayer == projectile.owner) { float scaleFactor6 = 1f; if (player.inventory[player.selectedItem].shoot == mod.ProjectileType("Stonefist")) { scaleFactor6 = player.inventory[player.selectedItem].shootSpeed * projectile.scale * ((projectile.ai[0] * 0.5f) + 1.75f); } Vector2 vector13 = Main.MouseWorld - origin; vector13.Normalize(); if (vector13.HasNaNs()) { vector13 = Vector2.UnitX * (float)player.direction; } vector13 *= scaleFactor6; if (vector13.X != projectile.velocity.X || vector13.Y != projectile.velocity.Y) { projectile.netUpdate = true; } projectile.velocity = vector13; } } else { projectile.Kill(); } Vector2 aim = projectile.velocity; aim.Normalize(); if (projectile.soundDelay <= 0 && projectile.soundDelay > -10) { Main.PlaySound(42, (int)projectile.position.X, (int)projectile.position.Y, 216, 1, -0.3f); projectile.soundDelay = -10; } if (projectile.ai[1] == 1) //Grab { projectile.timeLeft = 3; projectile.ai[0] += 0.2f * speed; Vector2 dir = projectile.velocity; dir.Normalize(); dir = dir * 10f * (projectile.ai[1] + 0.75f) * speed; if (projectile.ai[0] > 2) { projectile.ai[1] = -1; projectile.ai[0] = -1; projectile.timeLeft = 15; } } if (projectile.ai[1] == 2) //NPC { projectile.localAI[0] = 1; NPC target = Main.npc[(int)projectile.localAI[1]]; if (player.ownedProjectileCounts[mod.ProjectileType("MobHook")] + player.ownedProjectileCounts[mod.ProjectileType("EnchantedMobHook")] > 0) { for (int i = 0; i < Main.maxProjectiles; i++) { Projectile p = Main.projectile[i]; if (p.active && p.owner == projectile.owner && (p.type == mod.ProjectileType("MobHook") || p.type == mod.ProjectileType("EnchantedMobHook"))) { p.Kill(); break; } } } if (target.active && target.life > 0) { if (player.controlUseItem || projectile.localAI[0] == 2) { if (player.controlUseTile) { projectile.localAI[0] = 2; } else { projectile.ai[0] = 0; } player.itemRotation = (float)Math.Atan2(aim.Y * projectile.direction, aim.X * projectile.direction); if (target.knockBackResist > 0) { target.position = projectile.Center + new Vector2(-target.width / 2, player.gravDir > 0 ? -target.height : 0); target.GetGlobalNPC <NPCs.JoostGlobalNPC>().immunePlayer = player.whoAmI; target.velocity = player.velocity; target.netUpdate = true; if (projectile.timeLeft < 2) { target.velocity.X = player.direction * 4; target.velocity.Y = player.gravDir * -2; if (player.immuneTime < 10) { player.immune = true; player.immuneNoBlink = false; player.immuneTime = 10; } projectile.ai[1] = -1; projectile.ai[0] = -1; projectile.timeLeft = 15; } } else { JumpOff(player); } } else { if (projectile.timeLeft < 3) { projectile.timeLeft = 3; } projectile.localAI[0] = 3; if (target.knockBackResist > 0) { target.GetGlobalNPC <NPCs.JoostGlobalNPC>().immunePlayer = player.whoAmI; float rot = -135 + (player.direction < 0 ? 90 : 0); if (projectile.ai[0] > -1 && projectile.ai[0] <= 0) { player.bodyFrame.Y = player.bodyFrame.Height; projectile.ai[0] -= 0.1f * speed; } if (projectile.ai[0] <= -1) { projectile.ai[0] = 0.1f; Main.PlaySound(42, (int)projectile.Center.X, (int)projectile.Center.Y, 214); } if (projectile.ai[0] > 0) { projectile.ai[0] += 0.4f * speed; rot = (-135 + projectile.ai[0] * 45) * projectile.direction * 0.0174f + (player.direction < 0 ? 3.14f : 0); } projectile.velocity = rot.ToRotationVector2() * 8; target.position = projectile.Center + projectile.velocity + new Vector2(-target.width / 2, player.gravDir > 0 ? -target.height : 0); if (projectile.ai[0] > 2) { target.velocity = player.velocity + aim * projectile.knockBack; if (Main.netMode != NetmodeID.SinglePlayer) { ModPacket packet = mod.GetPacket(); packet.Write((byte)JoostModMessageType.NPCpos); packet.Write(target.whoAmI); packet.WriteVector2(target.position); packet.WriteVector2(target.velocity); ModPacket netMessage = packet; netMessage.Send(-1, player.whoAmI); } Projectile.NewProjectile(target.Center, target.velocity, mod.ProjectileType("GrabThrow"), projectile.damage, projectile.knockBack, projectile.owner, target.whoAmI); if (player.immuneTime < 10) { player.immune = true; player.immuneNoBlink = false; player.immuneTime = 10; } projectile.ai[1] = 0; projectile.ai[0] = -1; projectile.timeLeft = 15; projectile.velocity = new Vector2(player.direction, 0); projectile.Center = origin; } } else { JumpOff(player); } } } else { projectile.Kill(); } } if (projectile.ai[1] == 3) //Pvp { projectile.localAI[0] = 3; Player target = Main.player[(int)projectile.localAI[1]]; if (target.active && target.statLife > 0) { target.noKnockback = true; if (player.controlUseItem || projectile.localAI[0] == 2) { target.position = projectile.Center + new Vector2(-target.width / 2, player.gravDir > 0 ? -target.height : 0); if (player.controlUseTile) { projectile.localAI[0] = 2; } else { projectile.ai[0] = 0; } player.itemRotation = (float)Math.Atan2(aim.Y * projectile.direction, aim.X * projectile.direction); } else { if (projectile.timeLeft < 3) { projectile.timeLeft = 3; } projectile.localAI[0] = 1; float rot = -135 + (player.direction < 0 ? 90 : 0); if (projectile.ai[0] > -1 && projectile.ai[0] <= 0) { player.bodyFrame.Y = player.bodyFrame.Height; projectile.ai[0] -= 0.1f * speed; } if (projectile.ai[0] <= -1) { projectile.ai[0] = 0.1f; Main.PlaySound(42, (int)projectile.Center.X, (int)projectile.Center.Y, 214); } if (projectile.ai[0] > 0) { projectile.ai[0] += 0.4f * speed; rot = (-135 + projectile.ai[0] * 45) * projectile.direction * 0.0174f + (player.direction < 0 ? 3.14f : 0); } projectile.velocity = rot.ToRotationVector2() * 8; target.position = projectile.Center + projectile.velocity + new Vector2(-target.width / 2, player.gravDir > 0 ? -target.height : 0); if (Main.myPlayer == projectile.owner) { aim = player.DirectionTo(Main.MouseWorld); projectile.netUpdate = true; } if (projectile.ai[0] > 2) { target.velocity = player.velocity + aim * projectile.knockBack; if (Main.netMode != NetmodeID.SinglePlayer) { ModPacket packet = mod.GetPacket(); packet.Write((byte)JoostModMessageType.Playerpos); packet.Write((byte)target.whoAmI); packet.WriteVector2(target.position); packet.WriteVector2(player.velocity + aim * projectile.knockBack); ModPacket netMessage = packet; netMessage.Send(-1, -1); ModPacket packet2 = mod.GetPacket(); packet2.Write((byte)JoostModMessageType.Playerpos); packet2.Write((byte)projectile.owner); packet2.WriteVector2(player.position); packet2.WriteVector2(player.velocity); ModPacket netMessage2 = packet2; netMessage2.Send(-1, projectile.owner); } Projectile.NewProjectile(target.Center, player.velocity + aim * projectile.knockBack, mod.ProjectileType("GrabThrow"), projectile.damage * 2, projectile.knockBack, projectile.owner, -1, target.whoAmI); if (player.immuneTime < 10) { player.immune = true; player.immuneNoBlink = false; player.immuneTime = 10; } projectile.ai[1] = 0; projectile.ai[0] = -1; projectile.timeLeft = 15; projectile.velocity = new Vector2(player.direction, 0); projectile.Center = origin; } } } else { projectile.Kill(); } } if (projectile.localAI[0] == 2 && (projectile.ai[1] == 2 || projectile.ai[1] == 3)) //Pummel { projectile.localAI[0] = 2; if (projectile.ai[0] > -1 && projectile.ai[0] <= 0) { projectile.ai[0] -= 0.05f * speed; } if (projectile.ai[0] <= -1) { projectile.ai[0] = 0.05f; Main.PlaySound(SoundID.Item18, projectile.Center); } if (projectile.ai[0] > 0) { projectile.ai[0] += 0.1f * speed; } if (projectile.ai[0] > 1) { projectile.ai[0] = 0; projectile.localAI[0] = 1; } } if (projectile.ai[1] == 1 || projectile.ai[1] == 0) { projectile.frame = 0; } else { projectile.frame = 1; } projectile.position = (projectile.velocity + origin) - projectile.Size / 2f; projectile.rotation = projectile.velocity.ToRotation() + 1.57f + (projectile.direction * 0.785f); projectile.spriteDirection = projectile.direction; if (projectile.localAI[0] != 3) { player.ChangeDir(projectile.direction); } //player.heldProj = projectile.whoAmI; player.itemTime = 10; player.itemAnimation = 10; player.itemRotation = (float)Math.Atan2((double)(projectile.velocity.Y * (float)projectile.direction), (double)(projectile.velocity.X * (float)projectile.direction)); return(false); }