void OnGetData(GetDataEventArgs e) { if (!e.Handled && e.MsgID == PacketTypes.Tile) { using (var reader = new BinaryReader(new MemoryStream(e.Msg.readBuffer, e.Index, e.Length))) { byte action = reader.ReadByte(); int x = reader.ReadInt16(); int y = reader.ReadInt16(); ushort type = reader.ReadUInt16(); if (type == 127 && ActionTypes[e.Msg.whoAmI] != 0) { if (WorldGen.genRand == null) { WorldGen.genRand = new Random(); } Actions[ActionTypes[e.Msg.whoAmI]].callback.Invoke(null, new IceWandEventArgs(x, y, TShock.Players[e.Msg.whoAmI], ActionData[e.Msg.whoAmI])); TSPlayer.All.SendTileSquare(x, y, 1); e.Handled = true; } } } }
private void OnNetGetData(GetDataEventArgs args) { if (!Config.GetConfig().deathPunish.Open) { return; } var player = TShock.Players[args.Msg.whoAmI]; if (player != null && args.MsgID == PacketTypes.DeadPlayer) { Bank bank = Data.GetBank(player.Name); Random random = new Random(); long p = random.Next((int)Config.GetConfig().deathPunish.DropMinValue, (int)Config.GetConfig().deathPunish.DropMaxValue); long del = bank.Money * p / 100; bank.Money -= del; bank.Save(); player.SendErrorMessage("死亡惩罚已开启,您已被扣除" + del + "余额,您当前余额为" + bank.Money); //player.SendErrorMessage("The death punish is enable,your money had been deleted:" + del + ",your rest money is" + bank.Money); if (Config.GetConfig().deathPunish.Spwan) { player.Spawn(PlayerSpawnContext.SpawningIntoWorld); } } }
public ProjectileNewArgs(GetDataEventArgs args, MemoryStream data, PvPPlayer attacker) { Args = args; Attacker = attacker; Identity = data.ReadInt16(); Position = new Vector2(data.ReadSingle(), data.ReadSingle()); Velocity = new Vector2(data.ReadSingle(), data.ReadSingle()); Knockback = data.ReadSingle(); Damage = data.ReadInt16(); Owner = data.ReadByte(); Type = data.ReadInt16(); AiFlags = (BitsByte)data.ReadByte(); Ai0 = 0; Ai1 = 0; if (AiFlags[0]) { Ai0 = data.ReadSingle(); } if (AiFlags[1]) { Ai1 = data.ReadSingle(); } Ai = new float[Projectile.maxAI]; Weapon = ProjectileUtils.GetProjectileWeapon(attacker, Type); }
private void OnGetData(GetDataEventArgs e) { if (!e.Handled) { if (e.MsgID == PacketTypes.Tile) { using (BinaryReader br = new BinaryReader(new MemoryStream(e.Msg.readBuffer, e.Index, e.Length))) { byte action = br.ReadByte(); short x = br.ReadInt16(); short y = br.ReadInt16(); if (await1) { leftPoint = new Vector2(x * 16, y * 16); await1 = false; TShock.Players[who].SendInfoMessage("Point 1 set."); who = 0; return; } else if (await2) { rightPoint = new Vector2(x * 16, y * 16); await2 = false; TShock.Players[who].SendInfoMessage("Point 2 set."); who = 0; } } } } }
public void OnGetData(GetDataEventArgs e) { if (!e.Handled) { MemoryStream stream; using (BinaryReader br = new BinaryReader(stream = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length))) { switch (e.MsgID) { case PacketTypes.PlayerTeam: // Team set byte teamWho = br.ReadByte(); byte team = br.ReadByte(); int teamCheck = GetPlayerTeam(Main.player[teamWho].name); Utils.SetTeam(teamWho, teamCheck); if (Delegates.Instance.kickOnSwitch && team != teamCheck && team != 0) { TShock.Players[teamWho].Disconnect("Kicked for switching teams."); } break; case PacketTypes.GemLockToggle: e.Handled = true; int lockPosX = br.ReadInt16(); int lockPosY = br.ReadInt16(); bool lockOn = br.ReadBoolean(); WorldGen.ToggleGemLock(lockPosX, lockPosY, lockOn); break; case PacketTypes.TileSendSection: ushort size = br.ReadUInt16(); byte changeType = br.ReadByte(); /* * int i = br.ReadInt16(); * int j = br.ReadInt16(); * for (int k = i; k < i + size; k++) * { * for (int l = j; l < j + size; l++) * { * CheckModifiedTiles(k, l, stream); * } * }*/ break; case PacketTypes.Tile: if (!ChatCommands.loaded) { return; } byte flag = br.ReadByte(); int x = br.ReadInt16(); int y = br.ReadInt16(); //byte dmg = br.ReadByte(); CheckModifiedTiles(x, y, stream); break; } } } }
void OnGetData(GetDataEventArgs args) { if (Profiler.Input.HasFlag(ProfileInput.Get)) { switch (Profiler.Mode) { case ProfileMode.Disabled: return; case ProfileMode.Lock: if (Profiler.Lock.Contains(args.MsgID)) { Profiler.ProfileNetGet(args); } break; case ProfileMode.All: Profiler.ProfileNetGet(args); break; case ProfileMode.Block: if (Profiler.Lock.Contains(args.MsgID)) { args.Handled = true; } return; } } }
private void OnNetGetData(GetDataEventArgs e) { if (e.Handled) { return; } using (var stream = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length)) using (var reader = new BinaryReader(stream)) { switch (e.MsgID) { case PacketTypes.PlayerHurtV2: OnPlayerHurt(reader); break; case PacketTypes.PlayerUpdate: OnPlayerUpdate(reader); break; case PacketTypes.ProjectileNew: OnProjectileNew(reader); break; case PacketTypes.TogglePvp: OnPlayerTogglePvp(reader); break; } } }
public static void HandleData(GetDataEventArgs args, MemoryStream data, PvPPlayer player) { switch (args.MsgID) { case PacketTypes.PlayerHurtV2: PlayerHurt?.Invoke(typeof(DataHandler), new PlayerHurtArgs(args, data, player)); return; case PacketTypes.TogglePvp: PvPToggled?.Invoke(typeof(DataHandler), new TogglePvPArgs(player)); return; case PacketTypes.PlayerSlot: PlayerSlotUpdated?.Invoke(typeof(DataHandler), new PlayerSlotArgs(data, player)); return; case PacketTypes.PlayerDeathV2: PlayerDied?.Invoke(typeof(DataHandler), new PlayerDeathArgs(player)); return; case PacketTypes.ProjectileNew: ProjectileNew?.Invoke(typeof(DataHandler), new ProjectileNewArgs(args, data, player)); return; case PacketTypes.ProjectileDestroy: ProjectileDestroyed?.Invoke(typeof(DataHandler), new ProjectileDestroyArgs(data)); return; case PacketTypes.PlayerUpdate: PlayerUpdated?.Invoke(typeof(DataHandler), new PlayerUpdateArgs(data, player)); return; } }
private void GetData(GetDataEventArgs e) { PacketTypes type = e.MsgID; var player = TShock.Players[e.Msg.whoAmI]; if (player == null) { e.Handled = true; return; } if (!player.ConnectionAlive) { e.Handled = true; return; } using (var data = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length)) { try { if (GetDataHandlers.HandlerGetData(type, player, data)) { e.Handled = true; } } catch (Exception ex) { TShock.Log.Error(ex.ToString()); } } }
private void FoldersTreeGetData(object sender, GetDataEventArgs e) { var folder = (ImagesFolder)e.Node; e.CellInfos[0].Text = folder.Name; e.CellInfos[1].Text = string.Format("{0}/{1}", folder.ImagesCount, folder.GetAllImagesCount()); }
/// <summary> /// 获取Exfo测试数据 /// </summary> /// <param name="e"></param> protected virtual void onGetData_Exfo(GetDataEventArgs e) { if (GetData_Exfo != null) { GetData_Exfo(e); } }
/// <summary> /// 获取 3D测试数据 /// </summary> protected virtual void onGetData_3D(GetDataEventArgs e) { if (GetData_3D != null) { GetData_3D(e); } }
void OnGetData(GetDataEventArgs e) { if (e.Handled) { return; } int ply = e.Msg.whoAmI; if (ply < 0 || ply > 255 || TShock.Players[ply] == null || !TShock.Players[ply].RealPlayer || !TShock.Players[ply].IsLoggedIn) { return; } #region Packet 31 - Get Chest Contents if (e.MsgID == PacketTypes.ChestGetContents && AwaitingOwner[ply]) { Task.Run(() => GetDataHandlers.HandleGetChestContents(e)); e.Handled = true; } #endregion #region Packet 34 - Place/Kill Chest else if (e.MsgID == PacketTypes.TileKill) { Task.Run(() => GetDataHandlers.HandleTileKill(e)); e.Handled = true; } #endregion }
private void DeathFix(GetDataEventArgs args) { if (args.MsgID == PacketTypes.PlayerDeathV2) { using (BinaryReader reader = new BinaryReader(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length))) { reader.ReadByte(); PlayerDeathReason playerDeathReason = PlayerDeathReason.FromReader(reader); var dmg = reader.ReadInt16(); var direction = (byte)(reader.ReadByte() - 1); BitsByte bits = reader.ReadByte(); bool pvp = bits[0]; TShock.Players[args.Msg.whoAmI].TPlayer.KillMe(playerDeathReason, dmg, direction, pvp); TShock.Players[args.Msg.whoAmI].Dead = true; TShock.Players[args.Msg.whoAmI].TPlayer.dead = true; NetMessage.SendPlayerDeath(args.Msg.whoAmI, playerDeathReason, dmg, direction, pvp); NetMessage.SendPlayerDeath(args.Msg.whoAmI, playerDeathReason, dmg, direction, pvp, args.Msg.whoAmI); args.Handled = true; } } }
public bool ExtractData(GetDataEventArgs args, MemoryStream data, PvPPlayer attacker, out ProjectileNewArgs arg) { arg = null; if (PresetData.ProjectileDummy.Contains(Type)) { return(false); } arg = new ProjectileNewArgs { Args = args, Attacker = attacker, Identity = data.ReadInt16(), Position = new Vector2(data.ReadSingle(), data.ReadSingle()), Velocity = new Vector2(data.ReadSingle(), data.ReadSingle()), Knockback = data.ReadSingle(), Damage = data.ReadInt16(), Owner = data.ReadByte(), Type = data.ReadInt16(), AiFlags = (BitsByte)data.ReadByte(), Ai0 = AiFlags[0] ? Ai0 = data.ReadSingle() : 0, Ai1 = AiFlags[1] ? data.ReadSingle() : 0, Ai = new float[Projectile.maxAI], Proj = new PvPProjectile(Type, Identity), Weapon = ProjectileUtils.GetProjectileWeapon(attacker, Type) }; return(true); }
private void OnGetData(GetDataEventArgs e) { if (!e.Handled) { if (e.MsgID == PacketTypes.PlayerDeathV2) { using (BinaryReader br = new BinaryReader(new MemoryStream(e.Msg.readBuffer, e.Index, e.Length))) { byte who = br.ReadByte(); var reason = PlayerDeathReason.FromReader(br); int damage = br.ReadInt16(); byte dir = br.ReadByte(); byte flag = br.ReadByte(); string d = TShock.Players[who].UUID; switch (flag) { case 0: block(d).IncreaseValue("pveDeaths", 1); break; case 1: block(d).IncreaseValue("pvpDeaths", 1); block(TShock.Players[reason.SourcePlayerIndex].UUID).IncreaseValue("Kills", 1); break; default: break; } } } } }
private void GetData(GetDataEventArgs e) { if (e.MsgID == PacketTypes.ItemOwner && Players[e.Msg.whoAmI] != null) { var pingdata = Players[e.Msg.whoAmI]; int ping = pingdata.Summarize(); e.Msg.reader.BaseStream.Position = e.Index; short ItemID = e.Msg.reader.ReadInt16(); byte ItemOwner = e.Msg.reader.ReadByte(); if (ItemID == pingdata.ID && ItemOwner == 255) { Players[e.Msg.whoAmI] = null; NetMessage.SendData(22, -1, -1, "", ItemID, 0f, 0f, 0f, 0); bool Self = e.Msg.whoAmI == pingdata.ReportTo.Index; if (pingdata.ReportTo != null && (pingdata.ReportTo.Active || !pingdata.ReportTo.RealPlayer)) { pingdata.ReportTo.SendInfoMessage(string.Format("{1} ping is {0}ms.", ping, Self ? "Your" : (TShock.Players[e.Msg.whoAmI].Name + "'s"))); } return; } e.Msg.reader.BaseStream.Position = e.Index; } }
private void GetData(GetDataEventArgs args) { if (args.MsgID == PacketTypes.ItemDrop) { var num = args.Index; var TPlayer = Main.player[args.Msg.whoAmI]; int ItemID = BitConverter.ToInt16(args.Msg.readBuffer, num); if (ItemID == 400) { if (Exceeded.Contains(args.Msg.whoAmI)) { args.Handled = true; return; } if (Thresholds[args.Msg.whoAmI] > Threshold) { Exceeded.Add(args.Msg.whoAmI); Thresholds[args.Msg.whoAmI] = 0; args.Handled = true; } else { Thresholds[args.Msg.whoAmI]++; } } } else if (args.MsgID == PacketTypes.UpdateItemDrop) { TShock.Utils.Kick(TShock.Players[args.Msg.whoAmI], "Item Cheat", true); args.Handled = true; } }
public void GetData(GetDataEventArgs e) { if (e.MsgID == PacketTypes.SignNew) { if (enabled) { try { using (var data = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length)) { var reader = new BinaryReader(data); int x = reader.ReadInt16(); int y = reader.ReadInt16(); reader.Close(); int id = Terraria.Sign.ReadSign(x, y); TSPlayer player = TShock.Players[e.Msg.whoAmI]; if (!player.Group.HasPermission("signprotect.edit")) { player.SendErrorMessage("[SignProtect] You do not have permission to edit this sign."); e.Handled = true; return; } } } catch (Exception ex) { Console.WriteLine(ex); } } } }
internal static bool InvokeGetData(object messageBuffer, int index, int length) { var args = new GetDataEventArgs((MessageBuffer)messageBuffer, index, length); GetData?.Invoke(null, args); return(args.Handled); }
/// <summary> /// Passes on packets received to the DataHandlers to be processed if necessary /// </summary> /// <param name="args"></param> private void GetData(GetDataEventArgs args) { var type = args.MsgID; var player = Players[args.Msg.whoAmI]; if (player == null) { return; } if (!player.TshockPlayer.ConnectionAlive) { args.Handled = true; return; } using (var data = new MemoryStream(args.Msg.readBuffer, args.Index, args.Length)) { try { if (GetDataHandler.HandlerGetData(type, player, data)) { args.Handled = true; } } catch (Exception ex) { TShock.Log.ConsoleError(ex.ToString()); } } }
//Voids public void OnGetData(GetDataEventArgs args) { if (!Enable) { return; } }
/// <summary> /// Occurs when the server has received a message from the client. /// </summary> protected void NetHooks_GetData(GetDataEventArgs args) { byte[] bufferSegment = null; Terraria.Player player = null; if ((player = Terraria.Main.player.ElementAtOrDefault(args.Msg.whoAmI)) == null) { return; } bufferSegment = new byte[args.Length]; System.Array.Copy(args.Msg.readBuffer, args.Index, bufferSegment, 0, args.Length); if (args.MsgID == PacketTypes.NpcStrike) { Terraria.NPC npc = null; Packets.DamageNPC dmgPacket = Packets.PacketMarshal.MarshalFromBuffer <Packets.DamageNPC>(bufferSegment); if (dmgPacket.NPCID < 0 || dmgPacket.NPCID > Terraria.Main.npc.Length || args.Msg.whoAmI < 0 || dmgPacket.NPCID > Terraria.Main.player.Length) { return; } if ((npc = Terraria.Main.npc.ElementAtOrDefault(dmgPacket.NPCID)) == null) { return; } AddNPCDamage(npc, player, dmgPacket.Damage, Convert.ToBoolean(dmgPacket.CrititcalHit)); } }
void G(GetDataEventArgs args) { if (!args.Handled && args.MsgID == PacketTypes.ItemDrop) { using (var reader = new BinaryReader(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length))) { int id = reader.ReadInt16(); if (id == 400) { reader.ReadSingle(); reader.ReadSingle(); reader.ReadSingle(); reader.ReadSingle(); short stack = reader.ReadInt16(); TShock.Players[args.Msg.whoAmI].SendData(PacketTypes.ItemDrop, "", id); Item stuff = TShock.Utils.GetItemById(itemid); TShock.Players[args.Msg.whoAmI].GiveItem(stuff.netID, stuff.Name, stuff.width, stuff.height, stack); TShock.Players[args.Msg.whoAmI].SendSuccessMessage("God, I would viole"); args.Handled = true; } } } }
void OnGetData(GetDataEventArgs e) { if (!e.Handled && e.MsgID == PacketTypes.Tile) { PlayerInfo info = Players[e.Msg.whoAmI]; if (info.pt != 0) { int X = BitConverter.ToInt32(e.Msg.readBuffer, e.Index + 1); int Y = BitConverter.ToInt32(e.Msg.readBuffer, e.Index + 5); if (X >= 0 && Y >= 0 && X < Main.maxTilesX && Y < Main.maxTilesY) { if (info.pt == 1) { info.x = X; info.y = Y; TShock.Players[e.Msg.whoAmI].SendMessage(String.Format("Set point 1.", X, Y), Color.Yellow); } else { info.x2 = X; info.y2 = Y; TShock.Players[e.Msg.whoAmI].SendMessage(String.Format("Set point 2.", X, Y), Color.Yellow); } info.pt = 0; e.Handled = true; TShock.Players[e.Msg.whoAmI].SendTileSquare(X, Y, 3); } } } }
private void OnNetGetData(GetDataEventArgs e) { if (e.MsgID == PacketTypes.HitSwitch) { return; } }
private void onGetData(GetDataEventArgs args) { if (args.MsgID != PacketTypes.MassWireOperation) { return; } var plr = TShock.Players[args.Msg.whoAmI]; if (plr == null) { return; } if (!plr.GetData <bool>("awaitGD")) { return; } string rname = plr.GetData <string>("GDname"); short startX, startY, endX, endY; using (var reader = new BinaryReader(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length))) { startX = reader.ReadInt16(); startY = reader.ReadInt16(); endX = reader.ReadInt16(); endY = reader.ReadInt16(); } if (endX < startX) { var oldEndx = endX; endX = startX; startX = oldEndx; } if (endY < startY) { var oldEndy = endY; endY = startY; startY = oldEndy; } if (endX == startX || endY == startY) { plr.SendErrorMessage("Invalid region selection. Try again or use '/setregion cancel' to cancel."); return; } if (TShock.Regions.AddRegion(startX, startY, (endX - startX), (endY - startY), rname, plr.User.Name, Main.worldID.ToString())) { plr.SendSuccessMessage("Set region " + rname); } else { plr.SendErrorMessage($"Region {rname} already exists."); } plr.SetData("awaitGD", false); args.Handled = true; }
internal static void InvokeGotData(int index, int length) { if (GotData != null) { var args = new GetDataEventArgs(index, length); GotData(null, args); } }
public PlayerDeathArgs(GetDataEventArgs args, MemoryStream data, TSPlayer player) : base(player) { data.ReadByte(); // Player ID PlayerDeathReason = PlayerDeathReason.FromReader(new BinaryReader(data)); Damage = data.ReadInt16(); HitDirection = (byte)data.ReadByte(); Flags = (byte)data.ReadByte(); }
/// <summary> /// Checks incoming packets and manually hooks /// to packets of interest /// </summary> public void onGetData(GetDataEventArgs args) { if (args.MsgID == PacketTypes.PlayerDeathV2) { int PlayerID = args.Msg.whoAmI; OnPlayerDeath(PlayerID); } }
public static void OnPlayerHurtted(GetDataEventArgs args, PvPPlayer attacker, PvPPlayer target, PvPItem weapon, PvPProjectile projectile, PlayerDeathReason playerHitReason, int inflictedDamage, int damageReceived, int knockback) { if (PlayerHurtted != null) { PlayerHurtted(typeof(DataHandler), new PlayerHurtArgs(args, attacker, target, weapon, projectile, playerHitReason, inflictedDamage, damageReceived, knockback)); } }
internal static bool InvokeGetData(int index, int length) { if (GetData != null) { var args = new GetDataEventArgs(index, length); GetData(null, args); return args.Handled; } return false; }
private void _categoryTree_GetData(object sender, GetDataEventArgs e) { Category cat = (Category)e.Node; RootCategory rCat = e.Node as RootCategory; if (rCat != null) { e.CellInfos[0].ImageKey = "root"; e.CellInfos[0].Text = rCat.TreeName; } else { e.CellInfos[0].ImageKey = "category"; e.CellInfos[0].Text = cat.ShortName; } e.CellInfos[1].Text = string.Format("{0}/{1}", cat.ResourceItems.Count, cat.GetAllResCount()); }