public void SendSoulsRitualInfo() { if (Main.netMode == NetmodeID.SinglePlayer) { return; } ModPacket packet = mod.GetPacket(); packet.Write(VampKnives.SoulsRitualRecieveMPClient); packet.Write(ID); packet.Write(RitualOfSouls); packet.Write(RitualOwner); packet.Write(RoSoType); packet.Write(RoSoDelay); //ItemIO.Send(BloodCrystal, packet, true); //packet.Write(BloodCrystal); packet.Send(); }
internal static void SendTeleporterWhitelist(Teleporter teleporter, int ignoreClient = -1) { if (Main.netMode == NetmodeID.SinglePlayer) { return; } ModPacket packet = GetPacket(PacketType.TeleporterWhitelist); packet.Write(teleporter.ID); for (int i = 0; i < teleporter.Whitelist.Length; i++) { packet.Write(teleporter.Whitelist[i]); } packet.Send(ignoreClient: ignoreClient); }
public static void Write(int target, bool add) { if (Main.netMode == NetmodeID.MultiplayerClient) { ModPacket packet = TerrariaMoba.Instance.GetPacket(); packet.Write((byte)Message.SyncJunglesWrath); packet.Write(target); packet.Write(add); packet.Send(); } else if (Main.netMode == NetmodeID.Server) { ModPacket packet = TerrariaMoba.Instance.GetPacket(); packet.Write((byte)Message.SyncJunglesWrath); packet.Write(add); packet.Send(target); } }
public static void UpdateProjectileClass(Projectile projectile) { ModPacket packet = Instance.GetPacket(); packet.Write((byte)ModMessageType.UpdateClassBools); // Message type, you would need to create an enum for this packet.Write(projectile.identity); // tells which projectile is being modified by the effect, the effect is then applied on the receiving end packet.Write((byte)projectile.owner); BitsByte flags = new BitsByte(); flags[0] = projectile.melee; flags[1] = projectile.ranged; flags[2] = projectile.magic; flags[3] = projectile.minion; flags[4] = projectile.thrown; flags[5] = projectile.GetGlobalProjectile <MorphProjectile>().morph; packet.Write(flags); packet.Send(); }
private void HandlePacketWeaponVisual(BinaryReader reader, int code, int sender) { bool weaponVis = reader.ReadBoolean(); if (Main.netMode == 2) { ModPacket me = GetPacket(); me.Write(code); me.Write(sender); me.Write(weaponVis); me.Send(-1, sender); } else { PlayerWOFX pfx = Main.player[sender].GetModPlayer <PlayerWOFX>(this); pfx.weaponVisual = weaponVis; } }
public static void RequestDowsingNpcFromServer(DowsingMod mymod, Player player, int npc_type, Vector2 position, Action <int> callback) { if (Main.netMode != 1) { return; } // Clients only DowsingNetProtocol.DowsingNpcRequestQueue.Enqueue(callback); ModPacket packet = mymod.GetPacket(); packet.Write((byte)DowsingNetProtocolTypes.DowsingNpcRequest); packet.Write((int)player.whoAmI); packet.Write((int)npc_type); packet.Write((float)position.X); packet.Write((float)position.Y); packet.Send(); }
public override bool NewRightClick(int i, int j) { if (Main.netMode == 0) { Wiring.TripWire(i, j, 1, 1); } else { ModPacket packet = NetRouter.GetPacketTo(this, mod); packet.Write((Int16)i); packet.Write((Int16)j); packet.Send(); } ModContent.GetInstance <ButtonDelayWorld>().setPoint(new Point16(i, j)); Main.PlaySound(SoundID.MenuTick); return(true); }
//Send packet to the server to tell it to drop this npcs corresponding inventory on the ground private void SendDropInventory() { ModPacket packet = mod.GetPacket(); packet.Write((byte)MediumcoreGhostInventories.MediumcoreGhostInventoriesMessageType.DropInventory); packet.Write(position.X); packet.Write(position.Y); Rectangle rect = npc.getRect(); packet.Write(rect.X); packet.Write(rect.Y); packet.Write(rect.Height); packet.Write(rect.Width); packet.Send(); }
private void SendSpawnItem(Rectangle rect, Item item) { ModContent.GetInstance <MediumcoreGhostInventories>().Logger.Debug("sending spawn item"); ModPacket packet = ModContent.GetInstance <MediumcoreGhostInventories>().GetPacket(); packet.Write((byte)MediumcoreGhostInventories.MediumcoreGhostInventoriesMessageType.DropInventory); packet.Write(rect.X); packet.Write(rect.Y); packet.Write(rect.Height); packet.Write(rect.Width); packet.Write(item.netID); packet.Write(item.stack); packet.Write(item.prefix); packet.Send(); }
internal void SendRequestToServer(int retries) { ModPacket packet = this.GetClientPacket(true, false); try { packet.Send(); } catch (Exception e) { LogHelpers.Warn(e.ToString()); return; } if (ModHelpersMod.Config.DebugModeNetInfo && this.IsVerbose) { LogHelpers.Log(">" + this.GetPacketName() + " SendRequestToServer"); } this.RetryRequestToServerIfTimeout(retries); }
public static void SendCableModification(Cable cable, int excludedPlayer = -1) { if (Main.netMode == NetmodeID.SinglePlayer) { return; } ModPacket packet = PotentiaTransport.Instance.GetPacket(); packet.Write((byte)MessageType.CableModification); TagIO.Write(new TagCompound { ["Position"] = cable.position, ["Connections"] = cable.connections, ["IO"] = (int)cable.IO }, packet); packet.Send(ignoreClient: excludedPlayer); }
private void HandleChestItemChange(int chest) { int targetPlayer = WhichPlayerInChest(chest); if (targetPlayer != -1) { if (Main.netMode == 2) { ModPacket packet = NetRouter.GetPacketTo(this, mod); packet.Send(targetPlayer); Main.player[targetPlayer].chest = -1; } else if (Main.netMode == 0) { Recipe.FindRecipes(); } } }
//////////////// // Client Senders //////////////// public static void SendInvasionRequestFromClient(int musicType, IReadOnlyList <KeyValuePair <int, ISet <int> > > spawnInfo) { // Clients only if (Main.netMode != 1) { return; } var mymod = DynamicInvasionsMod.Instance; ModPacket packet = mymod.GetPacket(); string spawnInfoEnc = JsonConvert.SerializeObject(spawnInfo); packet.Write((byte)NetProtocolTypes.RequestInvasion); packet.Write((int)musicType); packet.Write((string)spawnInfoEnc); packet.Send(); }
public override bool PreKill(double damage, int hitDirection, bool pvp, ref bool playSound, ref bool genGore, ref PlayerDeathReason damageSource) { if (heroLives > 0) { heroLives--; if (Main.netMode == NetmodeID.MultiplayerClient) { ModPacket packet = mod.GetPacket(); packet.Write((byte)ExampleModMessageType.HeroLives); packet.Write(player.whoAmI); packet.Write(heroLives); packet.Send(); } if (heroLives > 0) { player.statLife = player.statLifeMax2; player.HealEffect(player.statLifeMax2); player.immune = true; player.immuneTime = player.longInvince ? 180 : 120; for (int k = 0; k < player.hurtCooldowns.Length; k++) { player.hurtCooldowns[k] = player.longInvince ? 180 : 120; } SoundEngine.PlaySound(SoundID.Item29, player.position); reviveTime = 60; return(false); } } if (healHurt > 0 && damage == 10.0 && hitDirection == 0 && damageSource.SourceOtherIndex == 8) { damageSource = PlayerDeathReason.ByCustomReason(" was dissolved by holy powers"); } return(true); }
public override void RightClick(int i, int j) { //don't bother if there's already a Crystal King in the world for (int x = 0; x < Main.npc.Length; x++) { if (Main.npc[x].active && Main.npc[x].type == mod.NPCType <NPCs.Bosses.CrystalKing>()) { return; } } //check if player has a Cryptic Crystal if (Main.LocalPlayer.HasItem(mod.ItemType <Items.CrypticCrystal>())) { // TODO, someone said this didn't work. Migrate to Main.LocalPlayer.ConsumeItem() and check MP code. //now to search for it Item[] inventory = Main.LocalPlayer.inventory; for (int k = 0; k < inventory.Length; k++) { if (inventory[k].type == mod.ItemType <Items.CrypticCrystal>()) { //consume it, and summon the Crystal King! inventory[k].stack--; if (inventory[k].stack == 0) { inventory[k].TurnToAir(); } if (Main.netMode == NetmodeID.MultiplayerClient) { ModPacket packet = mod.GetPacket(); packet.Write((byte)CrystiliumModMessageType.SpawnBossSpecial); packet.Send(); } else { NPC.SpawnOnPlayer(Main.myPlayer, mod.NPCType <NPCs.Bosses.CrystalKing>()); } //and don't spam crystal kings if the player didn't ask for it :P return; } } } }
public override void OnEnterWorld(Player player) { BossLogUI.PageNum = -3; durationLastFight = hitsTakenLastFight = healthLossLastFight = -1; RecordTimers = new List <int>(); BrinkChecker = new List <int>(); MaxHealth = new List <int>(); DeathTracker = new List <bool>(); DodgeTimer = new List <int>(); AttackCounter = new List <int>(); foreach (BossInfo boss in BossChecklist.bossTracker.SortedBosses) { RecordTimers.Add(0); BrinkChecker.Add(0); MaxHealth.Add(0); DeathTracker.Add(false); DodgeTimer.Add(0); AttackCounter.Add(0); } int bossCount = BossChecklist.bossTracker.SortedBosses.Count; if (Main.netMode == NetmodeID.MultiplayerClient) { // Essentially to get "BossAssist.ServerCollectedRecords[player.whoAmI] = AllBossRecords;" ModPacket packet = mod.GetPacket(); packet.Write((byte)PacketMessageType.SendRecordsToServer); for (int i = 0; i < bossCount; i++) { BossStats stat = AllBossRecords[i].stat; packet.Write(stat.kills); packet.Write(stat.deaths); packet.Write(stat.durationBest); packet.Write(stat.durationPrev); packet.Write(stat.hitsTakenBest); packet.Write(stat.hitsTakenPrev); packet.Write(stat.dodgeTimeBest); packet.Write(stat.healthLossBest); packet.Write(stat.healthLossPrev); } packet.Send(); // To server } }
internal void SendRequestToClient(int toWho, int ignoreWho, int retries) { var mymod = ModHelpersMod.Instance; ModPacket packet = this.GetServerPacket(true); try { packet.Send(toWho, ignoreWho); } catch (Exception e) { LogHelpers.Warn(e.ToString()); return; } if (mymod.Config.DebugModeNetInfo && this.IsVerbose) { LogHelpers.Log(">" + this.GetPacketName() + " SendRequestToClient " + toWho + ", " + ignoreWho); } this.RetryRequestToClientIfTimeout(toWho, ignoreWho, retries); }
public static void Write(int whoAmI, int level, bool force = false) { if (Main.netMode == NetmodeID.MultiplayerClient) { ModPacket packet = Ethereal.Instance.GetPacket(); packet.Write((byte)Message.SyncLevel); packet.Write(whoAmI); packet.Write(level); packet.Send(); } else if (force) { ModPacket packet = Ethereal.Instance.GetPacket(); packet.Write((byte)Message.SyncLevel); packet.Write(whoAmI); packet.Write(level); packet.Send(); } }
void ReceiveAddChilledBuffPlayer(BinaryReader reader, int fromWho) { int playerID = reader.ReadByte(); float multiplier = reader.ReadSingle(); int time = reader.ReadInt32(); Player player = Main.player[playerID]; player.GetModPlayer <BuffPlayer>().AddChilledBuff(player, multiplier, time, false); if (Main.netMode == NetmodeID.Server) { ModPacket packet = GetPacket((byte)PacketType.AddChilledBuffPlayer); packet.Write((byte)playerID); packet.Write(multiplier); packet.Write(time); packet.Send(-1, fromWho); } }
public void NetSync(int whoAmI) { if (Main.netMode == NetmodeID.SinglePlayer) { return; } ModPacket packet = mod.GetPacket(); packet.Write((byte)22); // New maso sync packet id packet.Write(whoAmI); foreach (EModeNPCBehaviour behaviour in EModeNpcBehaviours) { behaviour.NetSend(packet); } packet.Send(); }
void ReceiveAddDodgeChanceBuffPlayer(BinaryReader reader, int fromWho) { byte playerID = reader.ReadByte(); float chance = reader.ReadSingle(); int duraionTicks = reader.ReadInt32(); Player player = Main.player[playerID]; player.GetModPlayer <BuffPlayer>().AddDodgeChanceBuff(player, chance, duraionTicks, false); if (Main.netMode == NetmodeID.Server) { ModPacket packet = GetPacket((byte)PacketType.AddDodgeChanceBuffPlayer); packet.Write(playerID); packet.Write(chance); packet.Write(duraionTicks); packet.Send(-1, fromWho); } }
public override void NPCLoot() { if (SGAWorld.downedCaliburnGuardians < 3) { SGAWorld.downedCaliburnGuardians += 1; if (Main.netMode != 2) { SGAWorld.downedCaliburnGuardiansPoints += 1; } } if (Main.netMode != 2) { ModPacket packet = SGAmod.Instance.GetPacket(); packet.Write((int)996); packet.Write(SGAWorld.downedCaliburnGuardiansPoints); packet.Send(); } Achivements.SGAAchivements.UnlockAchivement("Caliburn", Main.LocalPlayer); }
private void SendClientMessage(ExtractorMessage clientMsg, short mud = 0) { if (Main.netMode != NetmodeID.MultiplayerClient) { return; } bool AddMud = clientMsg == ExtractorMessage.SyncMud; ModPacket packet = GadgetBox.Instance.GetPacket(MessageType.ExtractorMessage, AddMud ? 7 : 5); packet.Write(ID); packet.Write((byte)clientMsg); if (AddMud) { packet.Write(mud); } packet.Send(); }
private void HandleSlotChange(int owner, SlotKind kind, int slot) { if (Main.netMode == 2) { ModPacket packet = NetRouter.GetPacketTo(this, mod); packet.Write(owner); packet.Write((byte)kind); packet.Write(slot); Item[] targetInventory = GetInventoryFromKind(owner, kind); ItemIO.Send(targetInventory[slot], packet, true, true); packet.Send(); } else if (Main.netMode == 0) { Recipe.FindRecipes(); } }
public static void SerializeAndSend( Mod mod, int playerId, bool overrideSpecialVariable, int playerModSpecialVariable) { if (Main.netMode != NetmodeID.SinglePlayer) { ModPacket newPacket = mod.GetPacket(); newPacket.Write((int)mPacketMessageType); newPacket.Write(playerId); newPacket.Write(overrideSpecialVariable); newPacket.Write(playerModSpecialVariable); newPacket.Send(); } }
void ReceiveAddGreavesMoveSpeedBuffPlayer(BinaryReader reader, int fromWho) { byte playerID = reader.ReadByte(); float speedBoost = reader.ReadSingle(); int dutaionTicks = reader.ReadInt32(); Player player = Main.player[playerID]; player.GetModPlayer <BuffPlayer>().AddGreavesMoveSpeedBuff(player, speedBoost, dutaionTicks, false); if (Main.netMode == NetmodeID.Server) { ModPacket packet = GetPacket((byte)PacketType.AddGreavesMoveSpeedBuffPlayer); packet.Write(playerID); packet.Write(speedBoost); packet.Write(dutaionTicks); packet.Send(-1, fromWho); } }
/// <summary> /// Server's request to new player (includes map settings) /// </summary> /// <param name="mod"></param> /// <param name="playerIndex"></param> public static void ServerNewPlayerSync(Mod mod, int playerIndex) { if (Main.netMode != 2) { return; } ModPacket packet = mod.GetPacket(); packet.Write((byte)ExpModMessageType.ServerNewPlayerSync); packet.Write(ExperienceAndClasses.worldClassDamageReduction); packet.Write(ExperienceAndClasses.worldExpModifier); packet.Write(ExperienceAndClasses.worldIgnoreCaps); packet.Write(ExperienceAndClasses.worldLevelCap); packet.Write(ExperienceAndClasses.worldRequireAuth); packet.Write(ExperienceAndClasses.worldTrace); packet.Write(ExperienceAndClasses.worldDeathPenalty); packet.Send(playerIndex); }
/// <summary> /// Server updating map settings /// </summary> /// <param name="mod"></param> public static void ServerUpdateMapSettings(Mod mod) { if (Main.netMode != 2) { return; } ModPacket packet = mod.GetPacket(); packet.Write((byte)ExpModMessageType.ServerUpdateMapSettings); packet.Write(ExperienceAndClasses.worldClassDamageReduction); packet.Write(ExperienceAndClasses.worldExpModifier); packet.Write(ExperienceAndClasses.worldIgnoreCaps); packet.Write(ExperienceAndClasses.worldLevelCap); packet.Write(ExperienceAndClasses.worldRequireAuth); packet.Write(ExperienceAndClasses.worldTrace); packet.Write(ExperienceAndClasses.worldDeathPenalty); packet.Send(); }
public static void SerializeAndSend( Mod mod, float newVelocityX, float newVelocityY, int npcIndex) { if (Main.netMode != NetmodeID.SinglePlayer) { ModPacket newPacket = mod.GetPacket(); newPacket.Write((int)mPacketMessageType); newPacket.Write(newVelocityX); newPacket.Write(newVelocityY); newPacket.Write(npcIndex); newPacket.Send(); } }
///// <summary> ///// Player tells server that they are performing an ability ///// </summary> ///// <param name="mod"></param> ///// <param name="abilityID"></param> //public static void ClientAbility(Mod mod, int abilityID, int level = 1, double rand = 0) //{ // if (Main.netMode != 1) return; // ModPacket packet = mod.GetPacket(); // packet.Write((byte)ExpModMessageType.ClientAbility); // packet.Write(Main.LocalPlayer.whoAmI); // packet.Write(abilityID); // packet.Write(level); // packet.Write(rand); // packet.Send(); //} /* ~~~~~~~~~~~~~~~~~~~~~ Packet Senders - Server ~~~~~~~~~~~~~~~~~~~~~ */ /// <summary> /// Server giving a player debuff immunities /// </summary> /// <param name="player_index"></param> /// <param name="immunity_indecies"></param> /// <param name="duration_seconds"></param> public static void ServerDebuffImmunity(int player_index_source, int player_index_target, List <int> immunity_indecies, double duration_seconds) { if ((Main.netMode != 2) || (immunity_indecies.Count == 0)) { return; } ModPacket packet = ExperienceAndClasses.mod.GetPacket(); packet.Write((byte)ExpModMessageType.ServerDebuffImmunity); packet.Write(player_index_source); //sender (int) packet.Write(duration_seconds); //duration (double) packet.Write(immunity_indecies.Count); //number of immunities (int) foreach (int i in immunity_indecies) { packet.Write(i); //immunity indicies (int) } packet.Send(player_index_target); }