public override void PlayerDisconnect(Player player) { FTPlayer ftPlayer = player.GetModPlayer <FTPlayer>(); if (ftPlayer.isLeader) { ftPlayer.isLeader = false; ModPacket packet = mod.GetPacket(); packet.Write((byte)PacketMessageType.UpdateServerLeader); packet.Write(false); packet.Send(); } }
private void SendClientChangesPacket() { if (Main.netMode == NetmodeID.MultiplayerClient) { ModPacket packet = SGAmod.Instance.GetPacket(); packet.Write(501); packet.Write(player.whoAmI); packet.Write((double)aimDir); packet.Write((byte)AttackCheck); packet.Write((byte)EngineerModes); packet.Send(); } }
public override void SendClientChanges(ModPlayer clientPlayer) { QuestSystem clone = clientPlayer as QuestSystem; if (clone.CurrentQuest != CurrentQuest) { ModPacket packet = mod.GetPacket(); packet.Write((byte)3); packet.Write(player.whoAmI); packet.Write(CurrentQuest); packet.Send(); } }
internal static void SendTeleporterItems(Teleporter teleporter, int ignoreClient = -1) { if (Main.netMode == NetmodeID.SinglePlayer) { return; } ModPacket packet = GetPacket(PacketType.TeleporterItems); packet.Write(teleporter.ID); teleporter.Handler.Write(packet); packet.Send(ignoreClient: ignoreClient); }
internal static void SendTeleporterDestination(Teleporter teleporter, int ignoreClient = -1) { if (Main.netMode == NetmodeID.SinglePlayer) { return; } ModPacket packet = GetPacket(PacketType.TeleporterName); packet.Write(teleporter.ID); packet.Write(teleporter._destination); packet.Send(ignoreClient: ignoreClient); }
public static void SendDepositAll(int ent, List <Item> items) { if (Main.netMode == 1) { ModPacket packet = PrepareStorageOperation(ent, 2); packet.Write((byte)items.Count); foreach (Item item in items) { ItemIO.Send(item, packet, true); } packet.Send(); } }
public override void SyncPlayer(int toWho, int fromWho, bool newPlayer) { ModPacket packet = mod.GetPacket(); packet.Write((byte)ModMessageType.SyncPlayer); packet.Write((byte)player.whoAmI); for (int i = 0; i < LansToggleableBuffs.instance.getBuffLength(); i++) { packet.Write(boughtbuffsavail[i]); packet.Write(buffsavail[i]); } packet.Send(toWho, fromWho); }
protected ModPacket GetPacket(byte packetType, int fromWho) { ModPacket packet = JoJoStands.Instance.GetPacket(); packet.Write(HandlerType); packet.Write(packetType); /*if (Main.netMode == NetmodeID.Server) * { * packet.Write((byte)fromWho); * }*/ return(packet); }
public override void HandlePacket(BinaryReader reader, int whoAmI) { TLPacketType packetRecieved = (TLPacketType)reader.ReadByte(); switch (packetRecieved) { case TLPacketType.SyncJoiningPlayer: byte playerIndex = reader.ReadByte(); TLPlayer modPlayer = Main.player[playerIndex].GetModPlayer <TLPlayer>(); modPlayer.Level = reader.ReadInt32(); modPlayer.Experience = reader.ReadInt32(); break; case TLPacketType.SyncLevelData: playerIndex = reader.ReadByte(); modPlayer = Main.player[playerIndex].GetModPlayer <TLPlayer>(); modPlayer.Level = reader.ReadInt32(); modPlayer.Experience = reader.ReadInt32(); if (Main.netMode == NetmodeID.Server) { var packet = GetPacket(); packet.Write((byte)TLPacketType.SyncLevelData); packet.Write(playerIndex); packet.Write(modPlayer.Level); packet.Write(modPlayer.Experience); packet.Send(-1, playerIndex); } break; case TLPacketType.SyncProjectileExplosion: if (Main.netMode == NetmodeID.Server) { int projectileIndex = reader.ReadInt32(); ModPacket packet = GetPacket(); packet.Write((byte)TLPacketType.SyncProjectileExplosion); packet.Write(projectileIndex); packet.Send(ignoreClient: whoAmI); } else { int projectileIndex = reader.ReadInt32(); Projectile projectileAtIndex = Main.projectile[projectileIndex]; (projectileAtIndex.modProjectile as TLProjectile).AddExplosiveFlair(projectileAtIndex, true); } break; default: TLLogger.WarnFormat($"Unrecognized packet recieved: {packetRecieved}"); break; } }
public override bool UseItem(Player player) { Tile targetTile = Framing.GetTileSafely(Player.tileTargetX, Player.tileTargetY); if (targetTile.type == TileID.Saplings) { if (Main.netMode != NetmodeID.SinglePlayer) { ModPacket growCoord = mod.GetPacket(); growCoord.Write((byte)0); growCoord.Write(Player.tileTargetX); growCoord.Write(Player.tileTargetY); growCoord.Send(); } else if ((Main.tile[Player.tileTargetX, Player.tileTargetY].frameX < 324 || Main.tile[Player.tileTargetX, Player.tileTargetY].frameX >= 540) ? WorldGen.GrowTree(Player.tileTargetX, Player.tileTargetY) : WorldGen.GrowPalmTree(Player.tileTargetX, Player.tileTargetY)) { WorldGen.TreeGrowFXCheck(Player.tileTargetX, Player.tileTargetY); } } if (targetTile.type == TileID.Stone) { int mossID = 0; int mossCount = 0; Point point = player.Center.ToTileCoordinates(); Dictionary <ushort, int> dictionary = new Dictionary <ushort, int>(); WorldUtils.Gen(new Point(point.X - 25, point.Y - 25), new Shapes.Rectangle(50, 50), new Actions.TileScanner(182, 180, 179, 183, 181, 381).Output(dictionary)); foreach (KeyValuePair <ushort, int> item in dictionary) { if (item.Value > mossCount) { mossCount = item.Value; mossID = item.Key; } } if (mossCount == 0) { mossID = Utils.SelectRandom <int>(Main.rand, 182, 180, 179, 183, 181); } if (mossID != 0) { Main.tile[Player.tileTargetX, Player.tileTargetY].type = (ushort)mossID; WorldGen.SquareTileFrame(Player.tileTargetX, Player.tileTargetY); if (Main.netMode != NetmodeID.SinglePlayer) { NetMessage.SendTileSquare(-1, Player.tileTargetX, Player.tileTargetY, 1); } } } return(true); }
/* NETWORK SYNICNG <<<<< WIP >>>>> */ public override void HandlePacket(BinaryReader reader, int whoAmI) { MetroidMessageType msgType = (MetroidMessageType)reader.ReadByte(); switch (msgType) { case MetroidMessageType.SyncPlayerStats: case MetroidMessageType.SyncStartPlayerStats: byte playerID = reader.ReadByte(); MPlayer targetPlayer = Main.player[playerID].GetModPlayer <MPlayer>(); double statCharge = reader.ReadDouble(); bool spiderBall = reader.ReadBoolean(); int boostEffect = reader.ReadInt32(); int boostCharge = reader.ReadInt32(); targetPlayer.statCharge = (float)statCharge; targetPlayer.spiderball = spiderBall; targetPlayer.boostEffect = boostEffect; targetPlayer.boostCharge = boostCharge; if (msgType == MetroidMessageType.SyncPlayerStats && Main.netMode == NetmodeID.Server) { var packet = GetPacket(); packet.Write((byte)MetroidMessageType.SyncPlayerStats); packet.Write(playerID); packet.Write(statCharge); packet.Write(spiderBall); packet.Write(boostEffect); packet.Write(boostCharge); packet.Send(-1, playerID); } break; case MetroidMessageType.PlaySyncedSound: byte playerID2 = reader.ReadByte(); Player targetPlayer2 = Main.player[playerID2]; string sound = reader.ReadString(); Main.PlaySound(GetLegacySoundSlot(SoundType.Custom, "Sounds/" + sound), targetPlayer2.position); if (Main.netMode == 2) { ModPacket packet = GetPacket(); packet.Write((byte)MetroidMessageType.PlaySyncedSound); packet.Write(playerID2); packet.Write(sound); packet.Send(-1, whoAmI); } break; } }
public static void Write(this ModPacket packet, TagCompound tag) { packet.Write(tag.Count); foreach (var it in tag) { switch (it.Value) { case bool b: packet.Write((byte)0); packet.Write(it.Key); packet.Write(b); break; case int i: packet.Write((byte)1); packet.Write(it.Key); packet.Write(i); break; case float f: packet.Write((byte)2); packet.Write(it.Key); packet.Write(f); break; case double d: packet.Write((byte)3); packet.Write(it.Key); packet.Write(d); break; case string s: packet.Write((byte)4); packet.Write(it.Key); packet.Write(s); break; case byte bt: packet.Write((byte)5); packet.Write(it.Key); packet.Write(bt); break; case TagCompound ctag: packet.Write((byte)6); packet.Write(it.Key); packet.Write(ctag); break; } } }
public override void SyncPlayer(int toWho, int fromWho, bool newPlayer) { ModPacket packet = mod.GetPacket(); packet.Write((byte)AlchemistNPC.AlchemistNPCMessageType.LifeAndManaSync); packet.Write((byte)player.whoAmI); packet.Write(LifeElixir); packet.Write(Fuaran); packet.Write(KeepBuffs); packet.Write(WellFed); packet.Write(BillIsDowned); packet.Write(BBP); packet.Send(toWho, fromWho); }
private void OnHit(int damage) { damageTotal += damage * 60; if (Main.netMode != 0) { ModPacket netMessage = GetPacket(ChaosSpiritMessageType.Damage); netMessage.Write(damage * 60); if (Main.netMode == 1) { netMessage.Write(Main.myPlayer); } netMessage.Send(); } }
public void SyncCounters(int player, PlayerCharacter character, bool crit) { if (Main.netMode != 2) { return; } ModPacket packet = mod.GetPacket(); packet.Write((byte)(crit ? Message.SyncCritHit : Message.SyncHit)); packet.Write(player); packet.Write(crit ? character.critAccuracyCounter : character.accuracyCounter); packet.Send(); }
// Make something happen when the npc teleports to a statue. Since this method only runs server side, any visual effects like dusts or gores have to be synced across all clients manually. public override void OnGoToStatue(bool toKingStatue) { if (Main.netMode == NetmodeID.Server) { ModPacket packet = mod.GetPacket(); packet.Write((byte)ExampleModMessageType.ExampleTeleportToStatue); packet.Write((byte)npc.whoAmI); packet.Send(); } else { StatueTeleport(); } }
//////////////////////////////// // Senders (Server) //////////////////////////////// public static void SendSettingsFromServer(DowsingMod mymod, Player player) { if (Main.netMode != 2) { return; } // Server only ModPacket packet = mymod.GetPacket(); packet.Write((byte)DowsingNetProtocolTypes.ModSettings); packet.Write((string)mymod.Config.SerializeMe()); packet.Send((int)player.whoAmI); }
public void SendClientMessage() { if (Main.netMode == NetmodeID.SinglePlayer) { return; } ModPacket packet = mod.GetPacket(); packet.Write((byte)11); packet.Write(ID); packet.Write(Lightbulb.type); packet.Write(Chip.type); packet.Send(); }
public static void SendRequestedDowsingNpcFromServer(DowsingMod mymod, Player player, int npc_who) { if (Main.netMode != 2) { return; } // Server only ModPacket packet = mymod.GetPacket(); packet.Write((byte)DowsingNetProtocolTypes.RequestedDowsingNpcWho); packet.Write((int)npc_who); packet.Send((int)player.whoAmI); }
private void Box_OnClick(UIMouseEvent evt, UIElement listeningElement) { if (evt.Target == moreInfo) { return; } if (Main.keyState.IsKeyDown(Keys.LeftAlt) || Main.keyState.IsKeyDown(Keys.RightAlt)) { boss.hidden = !boss.hidden; if (boss.hidden) { WorldAssist.HiddenBosses.Add(boss.Key); } else { WorldAssist.HiddenBosses.Remove(boss.Key); } BossChecklist.instance.bossChecklistUI.UpdateCheckboxes(); if (BossChecklist.BossLogConfig.HideUnavailable) { BossChecklist.instance.BossLog.UpdateTableofContents(); } if (Main.netMode == NetmodeID.MultiplayerClient) { ModPacket packet = BossChecklist.instance.GetPacket(); packet.Write((byte)PacketMessageType.RequestHideBoss); packet.Write(boss.Key); packet.Write(boss.hidden); packet.Send(); } return; } UIBossCheckbox clicked = listeningElement as UIBossCheckbox; foreach (var item in BossChecklist.instance.bossChecklistUI.checklistList._items) { UIBossCheckbox box = (item as UIBossCheckbox); if (box != clicked) { box.expanded = false; box.AddOrRemoveChild(box.moreInfo, box.expanded); box.Height.Pixels = 15; box.Recalculate(); } } expanded = !expanded; PostExpand(); }
public void SendFavoritedRecipes(int toWho, int fromWho, bool syncPlayer = false) { ModPacket packet = mod.GetPacket(); packet.Write((byte)MessageType.SendFavoritedRecipes); packet.Write((byte)player.whoAmI); packet.Write((bool)syncPlayer); // prevents duplicate sends when normal syncPlayer is happening. packet.Write(favoritedRecipes.Count); foreach (var recipeIndex in favoritedRecipes) { packet.Write(recipeIndex); } packet.Send(toWho, fromWho); }
public static void SendPacket(Player player, string name, int fromWho = -1) { if (Main.netMode == NetmodeID.SinglePlayer) { return; } ModPacket packet = TBAR.Instance.GetPacket(); packet.Write((byte)PacketType.UsedCombo); packet.Write((byte)player.whoAmI); packet.Write(name); packet.Send(-1, fromWho); }
internal static void SendFluid(Frequency frequency, int slot, int ignoreClient = -1) { if (Main.netMode == NetmodeID.SinglePlayer) { return; } ModPacket packet = GetPacket(PacketType.SyncFluidFrequency); packet.Write(frequency); packet.Write(slot); packet.Write(ModContent.GetInstance <QSWorld>().QEFluidHandlers.FirstOrDefault(fluidPair => Equals(fluidPair.Frequency, frequency)).Handler.GetFluidInSlot(slot)); packet.Send(ignoreClient: ignoreClient); }
public override void PostUpdate() { Player p = Main.player[Main.myPlayer]; //inventory is closed, so we can't be crafting if (!Main.playerInventory) { startedCrafting = false; } //Inventory open, not crafting, mouse matches last crafted item //We must have started crafting, as last crafted item is reset when we finish crafting // so it won't match our mouse unless we craft something new (i.e. can't pick up the thing you last crafted to fool it) if (Main.playerInventory && !startedCrafting && Main.mouseItem.type == ZephsChatNotificationsGlobalItem.lastCraftedItemType) { startedCrafting = true; } //Inventory open, crafting, mouse item changes //If our mouse item changes then it means we've put down whatever we were crafting, so we're done. if (Main.playerInventory && startedCrafting && lastMouseItem.type != Main.mouseItem.type && lastMouseItem.type != 0 && //Disregard empty mouse, since if it's empty it could mean that we've now started crafting ZephsChatNotificationsGlobalItem.lastCraftedItemType >= 0) //If it's -1 for some reason then don't print anything to the chat { if (Main.netMode == NetmodeID.MultiplayerClient) { ModPacket packet = mod.GetPacket(); packet.Write((byte)3); packet.Write((int)Main.LocalPlayer.whoAmI); packet.Write((int)ZephsChatNotificationsGlobalItem.lastCraftedItemStack); packet.Write((int)ZephsChatNotificationsGlobalItem.lastCraftedItemType); //Send to server since we're the client packet.Send(-1); } startedCrafting = false; //Reset so that "Main.mouseItem.type == ZephsChatNotificationsGlobalItem.lastCraftedItemType" isn't true above ZephsChatNotificationsGlobalItem.lastCraftedItemType = -1; ZephsChatNotificationsGlobalItem.lastCraftedItemStack = -1; ZephsChatNotificationsGlobalItem.lastCraftedItemPrefix = -1; } lastMouseItem = Main.mouseItem; }
public void Initialize() { if (attackProgress == 1) { Vector2 center = npc.Center; for (int k = 0; k < 255; k++) { Player player = Main.player[k]; if (player.active && player.position.X > center.X - arenaWidth / 2 && player.position.X + player.width < center.X + arenaWidth / 2 && player.position.Y > center.Y - arenaHeight / 2 && player.position.Y + player.height < center.Y + arenaHeight / 2) { player.GetModPlayer <ExamplePlayer>(mod).heroLives = 3; if (Main.netMode == 2) { ModPacket netMessage = GetPacket(PuritySpiritMessageType.HeroPlayer); netMessage.Send(k); } } } shieldTimer = 1000; } attackProgress++; if (attackProgress == 90) { if (ExampleWorld.downedPuritySpirit) { Talk("What, you again? Oh well..."); } else { Talk("You, who have challenged me..."); } } if (attackProgress == 180) { SetupCrystals(arenaWidth / 6, true); } if (attackProgress >= 420) { Talk("Show me the power that has saved Terraria!"); attackProgress = 0; stage++; npc.dontTakeDamage = false; if (Main.netMode == 2) { ModPacket netMessage = GetPacket(PuritySpiritMessageType.DontTakeDamage); netMessage.Write(false); netMessage.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 void SyncPlayer(int toWho, int fromWho, bool newPlayer) { ModPacket packet = mod.GetPacket(); packet.Write((byte)PropHuntModMessageType.propSync); packet.Write(player.whoAmI); int playerX = player.GetModPlayer <PropHuntPlayer>().mouseX.GetValueOrDefault(); int playerY = player.GetModPlayer <PropHuntPlayer>().mouseY.GetValueOrDefault(); packet.Write(playerX); packet.Write(playerY); packet.Write(player.GetModPlayer <PropHuntPlayer>().isTransformed); packet.Send(toWho, fromWho); }
public override void OnEnterWorld(Player player) { RecordTimers = new List <int>(BossAssist.instance.setup.SortedBosses.Count); BrinkChecker = new List <int>(BossAssist.instance.setup.SortedBosses.Count); MaxHealth = new List <int>(BossAssist.instance.setup.SortedBosses.Count); DeathTracker = new List <bool>(BossAssist.instance.setup.SortedBosses.Count); DodgeTimer = new List <int>(BossAssist.instance.setup.SortedBosses.Count); AttackCounter = new List <int>(BossAssist.instance.setup.SortedBosses.Count); foreach (BossInfo boss in BossAssist.instance.setup.SortedBosses) { RecordTimers.Add(0); BrinkChecker.Add(0); MaxHealth.Add(0); DeathTracker.Add(false); DodgeTimer.Add(0); AttackCounter.Add(0); } if (Main.netMode == NetmodeID.MultiplayerClient) { // Essentially to get "BossAssist.ServerCollectedRecords[player.whoAmI] = AllBossRecords;" ModPacket packet = mod.GetPacket(); packet.Write((byte)MessageType.SendRecordsToServer); for (int i = 0; i < BossAssist.instance.setup.SortedBosses.Count; i++) { packet.Write(AllBossRecords[i].stat.kills); packet.Write(AllBossRecords[i].stat.deaths); packet.Write(AllBossRecords[i].stat.fightTime); packet.Write(AllBossRecords[i].stat.fightTime2); packet.Write(AllBossRecords[i].stat.brink2); packet.Write(AllBossRecords[i].stat.brink); packet.Write(AllBossRecords[i].stat.totalDodges); packet.Write(AllBossRecords[i].stat.totalDodges2); packet.Write(AllBossRecords[i].stat.dodgeTime); } packet.Send(); } /* * if (isNewPlayer) * { * // This wont work in MP, but ill fix that later * CombatText.NewText(player.getRect(), Color.LightGreen, "Thanks for playing with Shepherd's mods!!", true); * isNewPlayer = false; * } */ //MapAssist.shouldDraw = false; //MapAssist.tilePos = new Vector2(0, 0); }
public static void NPCSpawnOnPlayer(Player player, int type) { if (Main.netMode != 1) { NPC.SpawnOnPlayer(player.whoAmI, type); return; } ModPacket packet = Entrogic.Instance.GetPacket(); packet.Write((byte)EntrogicModMessageType.NPCSpawnOnPlayerAction); packet.Write((byte)player.whoAmI); packet.Write((short)type); packet.Send(-1, -1); }
public void Send(int toWho, int fromWho, int x, int y) { //Main.NewText("Local player sending remove tombstone", 255, 100, 100); ModPacket packet = mod.GetPacket(); if (Main.netMode == NetmodeID.Server) { packet.Write(fromWho); } packet.Write(x); packet.Write(y); packet.Send(toWho, fromWho); }