Exemplo n.º 1
0
        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.");
            }
        }
Exemplo n.º 2
0
        public static RtPlayer GetPlayerInfo(TSPlayer player)
        {
            var info = player.GetData <RtPlayer>(Rtdataname);

            if (info == null)
            {
                info = new RtPlayer();
                player.SetData(Rtdataname, info);
            }
            return(info);
        }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 4
0
        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;
            }
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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;
                    }
                }
            }
        }
Exemplo n.º 7
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.");
                }
            }
        }
Exemplo n.º 8
0
 private static void OnGreetPlayer(GreetPlayerEventArgs args)
 {
     RtPlayer.GetPlayerInfo(TShock.Players[args.Who]);
 }
Exemplo n.º 9
0
        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.");
            }
        }