private static void OnRegionLeft(TSPlayer player, RtRegion region, RtPlayer data) { if (region.HasEvent(Event.LeaveMsg)) { if (string.IsNullOrWhiteSpace(region.LeaveMsg)) { player.SendInfoMessage("You have left region {0}", region.Region.Name); } else { player.SendMessage(region.LeaveMsg, Color.White); } } if (region.HasEvent(Event.TempGroup) && player.tempGroup == region.TempGroup) { player.tempGroup = null; player.SendInfoMessage("You are no longer in group {0}.", region.TempGroup.Name); } if (region.HasEvent(Event.Godmode)) { player.GodMode = false; player.SendInfoMessage("You are no longer in godmode!"); } if (region.HasEvent(Event.Pvp) || region.HasEvent(Event.NoPvp) || region.HasEvent(Event.InvariantPvp)) { data.ForcePvP = null; data.CanTogglePvP = true; player.SendInfoMessage("You can toggle your PvP status now."); } }
public static RtPlayer GetPlayerInfo(TSPlayer player) { var info = player.GetData <RtPlayer>(Rtdataname); if (info == null) { info = new RtPlayer(); player.SetData(Rtdataname, info); } return(info); }
private static void OnTogglePvp(object sender, GetDataHandlers.TogglePvpEventArgs args) { var ply = TShock.Players[args.PlayerId]; var dt = RtPlayer.GetPlayerInfo(ply); if (dt.ForcePvP == true && !args.Pvp || dt.ForcePvP == false && args.Pvp || !dt.CanTogglePvP) { ply.SendErrorMessage("You can't change your PvP status in this region!"); ply.SendData(PacketTypes.TogglePvp, "", args.PlayerId); args.Handled = true; } }
private static void OnPlayerPermission(PlayerPermissionEventArgs args) { var rt = RtPlayer.GetPlayerInfo(args.Player).CurrentRegion; if (rt?.HasEvent(Event.TempPermission) != true) { return; } if (rt.HasPermission(args.Permission) && !args.Player.HasPermission("regiontrigger.bypass.tempperm")) { args.Handled = true; } }
private static void OnNewProjectile(object sender, GetDataHandlers.NewProjectileEventArgs args) { var ply = TShock.Players[args.Owner]; var rt = RtPlayer.GetPlayerInfo(ply).CurrentRegion; if (rt?.HasEvent(Event.Projban) != true) { return; } if (rt.ProjectileIsBanned(args.Type) && !ply.HasPermission("regiontrigger.bypass.projban")) { ply.Disable($"Create banned projectile in region {rt.Region.Name}.", DisableFlags.WriteToLogAndConsole); ply.SendErrorMessage("This projectile is banned here."); ply.RemoveProjectile(args.Index, args.Owner); } }
private void OnSecondUpdate() { foreach (var player in TShock.Players.Where(p => p?.Active == true)) { var dt = RtPlayer.GetPlayerInfo(player); var oldRegion = dt.CurrentRegion; dt.CurrentRegion = RtRegions.GetCurrentRegion(player); if (dt.CurrentRegion != oldRegion) { if (oldRegion != null) { OnRegionLeft(player, oldRegion, dt); } if (dt.CurrentRegion != null) { OnRegionEntered(player, dt); } } if (dt.CurrentRegion == null) { continue; } if (dt.CurrentRegion.HasEvent(Event.Message) && !string.IsNullOrWhiteSpace(dt.CurrentRegion.Message) && dt.CurrentRegion.MsgInterval != 0) { if (dt.MsgCd < dt.CurrentRegion.MsgInterval) { dt.MsgCd++; } else { player.SendInfoMessage(dt.CurrentRegion.Message); dt.MsgCd = 0; } } } }
private static void OnPlayerUpdate(object sender, GetDataHandlers.PlayerUpdateEventArgs args) { var ply = TShock.Players[args.PlayerId]; var rt = RtPlayer.GetPlayerInfo(ply).CurrentRegion; if (rt?.HasEvent(Event.Itemban) != true) { return; } /*BitsByte control = args.Control; * if (control[5]) * { * var itemName = ply.TPlayer.inventory[args.Item].Name; * if (rt.ItemIsBanned(itemName) && !ply.HasPermission("regiontrigger.bypass.itemban")) * { * control[5] = false; * args.Control = control; * ply.Disable($"using a banned item ({itemName})", DisableFlags.WriteToLogAndConsole); * ply.SendErrorMessage($"You can't use {itemName} here."); * } * }*/ ControlSet control = args.Control; if (control.bitsbyte[5]) { string name = ply.TPlayer.inventory[(int)args.SelectedItem].Name; if (rt.ItemIsBanned(name) && !ply.HasPermission("regiontrigger.bypass.itemban")) { control.bitsbyte[5] = false; args.Control = control; ply.Disable("using a banned item (" + name + ")", DisableFlags.WriteToLogAndConsole); ply.SendErrorMessage("You can't use " + name + " here."); } } }
private static void OnGreetPlayer(GreetPlayerEventArgs args) { RtPlayer.GetPlayerInfo(TShock.Players[args.Who]); }
private static void OnRegionEntered(TSPlayer player, RtPlayer data) { var rt = data.CurrentRegion; if (rt.HasEvent(Event.EnterMsg)) { if (string.IsNullOrWhiteSpace(rt.EnterMsg)) { player.SendInfoMessage("You have entered region {0}", rt.Region.Name); } else { player.SendMessage(rt.EnterMsg, Color.White); } } if (rt.HasEvent(Event.Message) && !string.IsNullOrWhiteSpace(rt.Message)) { player.SendInfoMessage(rt.Message); } if (rt.HasEvent(Event.TempGroup) && rt.TempGroup != null && !player.HasPermission("regiontrigger.bypass.tempgroup")) { if (rt.TempGroup == null) { TShock.Log.ConsoleError("TempGroup in region '{0}' is not valid!", rt.Region.Name); } else { player.tempGroup = rt.TempGroup; player.SendInfoMessage("Your group has been changed to {0} in this region.", rt.TempGroup.Name); } } if (rt.HasEvent(Event.Kill) && !player.HasPermission("regiontrigger.bypass.kill")) { player.KillPlayer(); player.SendInfoMessage("You were killed!"); } if (rt.HasEvent(Event.Godmode)) { player.GodMode = true; player.SendInfoMessage("You are now in godmode!"); } if (rt.HasEvent(Event.Pvp) && !player.HasPermission("regiontrigger.bypass.pvp")) { data.ForcePvP = true; if (!player.TPlayer.hostile) { player.TPlayer.hostile = true; player.SendData(PacketTypes.TogglePvp, "", player.Index); TSPlayer.All.SendData(PacketTypes.TogglePvp, "", player.Index); player.SendInfoMessage("Your PvP status is forced enabled in this region!"); } } if (rt.HasEvent(Event.NoPvp) && !player.HasPermission("regiontrigger.bypass.nopvp")) { data.ForcePvP = false; if (player.TPlayer.hostile) { player.TPlayer.hostile = false; player.SendData(PacketTypes.TogglePvp, "", player.Index); TSPlayer.All.SendData(PacketTypes.TogglePvp, "", player.Index); player.SendInfoMessage("You can't enable PvP in this region!"); } } if (rt.HasEvent(Event.InvariantPvp) && !player.HasPermission("regiontrigger.bypass.inpvp")) { data.CanTogglePvP = false; } if (rt.HasEvent(Event.Private) && !player.HasPermission("regiontrigger.bypass.private")) { player.Spawn(); player.SendErrorMessage("You don't have permission to enter that region."); } }